wcz-test 6.25.0 → 6.27.0

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 (42) hide show
  1. package/dist/DialogsHooks-DzqOb2Zx.js +233 -0
  2. package/dist/DialogsHooks-DzqOb2Zx.js.map +1 -0
  3. package/dist/FileHooks-C8Akmy_o.js +2694 -0
  4. package/dist/FileHooks-C8Akmy_o.js.map +1 -0
  5. package/dist/RouterListItemButton-Spme9i4b.js +661 -0
  6. package/dist/RouterListItemButton-Spme9i4b.js.map +1 -0
  7. package/dist/_commonjsHelpers-DaMA6jEr.js +9 -0
  8. package/dist/_commonjsHelpers-DaMA6jEr.js.map +1 -0
  9. package/dist/components.js +2666 -518
  10. package/dist/components.js.map +1 -1
  11. package/dist/hooks.js +908 -354
  12. package/dist/hooks.js.map +1 -1
  13. package/dist/index-Biz5inV2.js +268 -0
  14. package/dist/index-Biz5inV2.js.map +1 -0
  15. package/dist/index.d.ts +0 -3
  16. package/dist/index.js +746 -1448
  17. package/dist/index.js.map +1 -1
  18. package/dist/queries.js +111 -113
  19. package/dist/queries.js.map +1 -1
  20. package/dist/utils-IWcYo8tM.js +106 -0
  21. package/dist/utils-IWcYo8tM.js.map +1 -0
  22. package/dist/utils.js +5 -5
  23. package/dist/vite.js +11 -11
  24. package/dist/vite.js.map +1 -1
  25. package/package.json +8 -15
  26. package/dist/DialogsHooks-DWkC9zAf.js +0 -114
  27. package/dist/DialogsHooks-DWkC9zAf.js.map +0 -1
  28. package/dist/FileHooks-CltSzAf8.js +0 -300
  29. package/dist/FileHooks-CltSzAf8.js.map +0 -1
  30. package/dist/RouterListItemButton-C_SG0uka.js +0 -18
  31. package/dist/RouterListItemButton-C_SG0uka.js.map +0 -1
  32. package/dist/env-4ZoUrNqp.js +0 -28
  33. package/dist/env-4ZoUrNqp.js.map +0 -1
  34. package/dist/queryClient--EvGPhnh.js +0 -6
  35. package/dist/queryClient--EvGPhnh.js.map +0 -1
  36. package/dist/server.d.ts +0 -11
  37. package/dist/server.js +0 -70
  38. package/dist/server.js.map +0 -1
  39. package/dist/session-7yb0BETM.js +0 -76
  40. package/dist/session-7yb0BETM.js.map +0 -1
  41. package/dist/utils-CZraUjBd.js +0 -82
  42. package/dist/utils-CZraUjBd.js.map +0 -1
@@ -1,300 +0,0 @@
1
- import { c as d } from "react/compiler-runtime";
2
- import { useQuery as T, useMutation as N, useQueryClient as _ } from "@tanstack/react-query";
3
- import g from "file-saver";
4
- import { useState as I } from "react";
5
- import { Upload as P } from "tus-js-client";
6
- import { uuidv7 as w } from "uuidv7";
7
- import h from "zod";
8
- import { F as U } from "./FileMeta-Bzeo3ie9.js";
9
- import { t as R, h as p } from "./utils-CZraUjBd.js";
10
- import { c as v } from "./env-4ZoUrNqp.js";
11
- const l = "file", $ = 1e3 * 60 * 60, m = R(v.VITE_APP_TITLE);
12
- h.object({
13
- appName: h.string().min(1).max(255).default(m).optional(),
14
- subId: h.uuid()
15
- });
16
- const se = (t, n) => {
17
- const e = d(12);
18
- let a;
19
- e[0] !== t.appName || e[1] !== t.subId ? (a = new URLSearchParams(), a.append("appName", t.appName ?? m), a.append("subId", t.subId), e[0] = t.appName, e[1] = t.subId, e[2] = a) : a = e[2];
20
- const u = t.appName ?? m;
21
- let i;
22
- e[3] !== t.subId || e[4] !== u ? (i = [l, "meta", u, t.subId], e[3] = t.subId, e[4] = u, e[5] = i) : i = e[5];
23
- let r;
24
- e[6] !== a ? (r = (c) => {
25
- const {
26
- signal: o
27
- } = c;
28
- return p.request({
29
- url: `/${l}/v1/meta?${a.toString()}`,
30
- method: "GET",
31
- signal: o
32
- }).then(L);
33
- }, e[6] = a, e[7] = r) : r = e[7];
34
- let s;
35
- return e[8] !== n || e[9] !== i || e[10] !== r ? (s = {
36
- ...n,
37
- queryKey: i,
38
- queryFn: r,
39
- staleTime: $,
40
- gcTime: $,
41
- refetchOnWindowFocus: !1
42
- }, e[8] = n, e[9] = i, e[10] = r, e[11] = s) : s = e[11], T(s);
43
- };
44
- h.object({
45
- appName: h.string().min(1).max(255).default(m).optional(),
46
- meta: U.nullish()
47
- });
48
- const ie = (t, n) => {
49
- const e = d(13);
50
- let a;
51
- e[0] !== t.appName || e[1] !== t.meta?.id ? (a = new URLSearchParams(), a.append("appName", t.appName ?? m), a.append("id", t.meta?.id ?? ""), e[0] = t.appName, e[1] = t.meta?.id, e[2] = a) : a = e[2];
52
- const u = t.appName ?? m, i = t.meta?.id;
53
- let r;
54
- e[3] !== u || e[4] !== i ? (r = [l, "thumbnail", u, i], e[3] = u, e[4] = i, e[5] = r) : r = e[5];
55
- let s;
56
- e[6] !== a ? (s = (f) => {
57
- const {
58
- signal: b
59
- } = f;
60
- return p.request({
61
- url: `/${l}/v1/thumbnail?${a.toString()}`,
62
- method: "GET",
63
- signal: b,
64
- responseType: "blob"
65
- }).then(x);
66
- }, e[6] = a, e[7] = s) : s = e[7];
67
- const c = !!t.meta && n?.enabled !== !1;
68
- let o;
69
- return e[8] !== n || e[9] !== r || e[10] !== s || e[11] !== c ? (o = {
70
- ...n,
71
- queryKey: r,
72
- queryFn: s,
73
- select: K,
74
- staleTime: $,
75
- gcTime: $,
76
- refetchOnWindowFocus: !1,
77
- enabled: c
78
- }, e[8] = n, e[9] = r, e[10] = s, e[11] = c, e[12] = o) : o = e[12], T(o);
79
- };
80
- h.object({
81
- appName: h.string().min(1).max(255).default(m).optional(),
82
- meta: U.nullish()
83
- });
84
- const le = (t, n) => {
85
- const e = d(13);
86
- let a;
87
- e[0] !== t.appName || e[1] !== t.meta?.id ? (a = new URLSearchParams(), a.append("appName", t.appName ?? m), a.append("id", t.meta?.id ?? ""), e[0] = t.appName, e[1] = t.meta?.id, e[2] = a) : a = e[2];
88
- const u = t.appName ?? m, i = t.meta?.id;
89
- let r;
90
- e[3] !== u || e[4] !== i ? (r = [l, u, i], e[3] = u, e[4] = i, e[5] = r) : r = e[5];
91
- let s;
92
- e[6] !== a ? (s = (f) => {
93
- const {
94
- signal: b
95
- } = f;
96
- return p.request({
97
- url: `/${l}/v1?${a.toString()}`,
98
- method: "GET",
99
- signal: b,
100
- responseType: "blob"
101
- }).then(O);
102
- }, e[6] = a, e[7] = s) : s = e[7];
103
- const c = !!t.meta && n?.enabled !== !1;
104
- let o;
105
- return e[8] !== n || e[9] !== r || e[10] !== s || e[11] !== c ? (o = {
106
- ...n,
107
- queryKey: r,
108
- queryFn: s,
109
- select: C,
110
- staleTime: $,
111
- gcTime: $,
112
- refetchOnWindowFocus: !1,
113
- enabled: c
114
- }, e[8] = n, e[9] = r, e[10] = s, e[11] = c, e[12] = o) : o = e[12], T(o);
115
- }, oe = (t) => {
116
- const n = d(2);
117
- let e;
118
- return n[0] !== t ? (e = {
119
- ...t,
120
- mutationFn: A,
121
- onSuccess: Q
122
- }, n[0] = t, n[1] = e) : e = n[1], N(e);
123
- }, me = (t) => {
124
- const n = d(2);
125
- let e;
126
- return n[0] !== t ? (e = {
127
- ...t,
128
- mutationFn: D,
129
- onSuccess: M
130
- }, n[0] = t, n[1] = e) : e = n[1], N(e);
131
- }, ce = (t) => {
132
- const n = d(5), e = _();
133
- let a;
134
- n[0] !== e ? (a = () => e.invalidateQueries({
135
- queryKey: [l, "meta"],
136
- exact: !1
137
- }), n[0] = e, n[1] = a) : a = n[1];
138
- let u;
139
- return n[2] !== t || n[3] !== a ? (u = {
140
- ...t,
141
- mutationFn: W,
142
- onSettled: a
143
- }, n[2] = t, n[3] = a, n[4] = u) : u = n[4], N(u);
144
- }, de = (t) => {
145
- const n = d(5), e = _();
146
- let a;
147
- n[0] !== e ? (a = () => e.invalidateQueries({
148
- queryKey: [l, "meta"],
149
- exact: !1
150
- }), n[0] = e, n[1] = a) : a = n[1];
151
- let u;
152
- return n[2] !== t || n[3] !== a ? (u = {
153
- ...t,
154
- mutationFn: H,
155
- onSettled: a
156
- }, n[2] = t, n[3] = a, n[4] = u) : u = n[4], N(u);
157
- }, fe = (t) => {
158
- const n = d(5), e = _();
159
- let a;
160
- n[0] !== e ? (a = () => e.invalidateQueries({
161
- queryKey: [l, "meta"],
162
- exact: !1
163
- }), n[0] = e, n[1] = a) : a = n[1];
164
- let u;
165
- return n[2] !== t || n[3] !== a ? (u = {
166
- ...t,
167
- mutationFn: k,
168
- onSettled: a
169
- }, n[2] = t, n[3] = a, n[4] = u) : u = n[4], N(u);
170
- }, pe = (t) => {
171
- const n = d(8), {
172
- subId: e,
173
- onSuccess: a,
174
- onError: u
175
- } = t, [i, r] = I(0), s = _();
176
- let c;
177
- n[0] !== u || n[1] !== a || n[2] !== s || n[3] !== e ? (c = async (b) => {
178
- if (!e)
179
- throw new Error("subId is required for file upload");
180
- const y = {
181
- id: w(),
182
- appName: m,
183
- subId: e,
184
- fileName: b.name
185
- }, E = new P(b, {
186
- endpoint: `${v.VITE_API_URL}/${l}/v1/upload`,
187
- chunkSize: 1048576,
188
- metadata: {
189
- id: y.id,
190
- appName: y.appName,
191
- subId: y.subId,
192
- fileName: y.fileName,
193
- fileExtension: b.type
194
- },
195
- headers: {
196
- Authorization: "Bearer YOUR_ACCESS_TOKEN_HERE"
197
- },
198
- onError: (q) => {
199
- r(0), u?.(q);
200
- },
201
- onProgress: (q, S) => {
202
- r(q / S * 100);
203
- },
204
- onSuccess: () => {
205
- r(0), s.invalidateQueries({
206
- queryKey: [l, "meta", e],
207
- exact: !1
208
- }), a?.(y);
209
- }
210
- }), F = await E.findPreviousUploads();
211
- F.length > 0 && E.resumeFromPreviousUpload(F[0]), E.start();
212
- }, n[0] = u, n[1] = a, n[2] = s, n[3] = e, n[4] = c) : c = n[4];
213
- const o = c;
214
- let f;
215
- return n[5] !== o || n[6] !== i ? (f = {
216
- mutate: o,
217
- progress: i
218
- }, n[5] = o, n[6] = i, n[7] = f) : f = n[7], f;
219
- };
220
- function L(t) {
221
- return t.data;
222
- }
223
- function x(t) {
224
- return t.data;
225
- }
226
- function K(t) {
227
- return URL.createObjectURL(t);
228
- }
229
- function O(t) {
230
- return t.data;
231
- }
232
- function C(t) {
233
- return URL.createObjectURL(t);
234
- }
235
- function G(t) {
236
- return t.data;
237
- }
238
- function A(t) {
239
- return p.request({
240
- url: `/${l}/v1/download?appName=${m}&id=${t.id}`,
241
- method: "GET",
242
- responseType: "blob"
243
- }).then(G);
244
- }
245
- function Q(t, n) {
246
- return g(t, `${n.fileName}.${n.fileExtension}`);
247
- }
248
- function j(t) {
249
- return t.data;
250
- }
251
- function D(t) {
252
- return p.request({
253
- url: `/${l}/v1?appName=${m}&id=${t.id}`,
254
- method: "GET",
255
- responseType: "blob"
256
- }).then(j);
257
- }
258
- function M(t) {
259
- window.open(URL.createObjectURL(t));
260
- }
261
- function z(t) {
262
- return t.data;
263
- }
264
- function W(t) {
265
- return p.request({
266
- url: `/${l}/v1/meta?appName=${m}&id=${t.id}`,
267
- method: "PUT",
268
- data: t
269
- }).then(z);
270
- }
271
- function Y(t) {
272
- return t.data;
273
- }
274
- function H(t) {
275
- return p.request({
276
- url: `/${l}/v1?appName=${m}&id=${t.id}`,
277
- method: "DELETE"
278
- }).then(Y);
279
- }
280
- function V(t) {
281
- return t.data;
282
- }
283
- function k(t) {
284
- return p.request({
285
- url: `/${l}/v1?appName=${m}&subId=${t}`,
286
- method: "DELETE"
287
- }).then(V);
288
- }
289
- export {
290
- ie as a,
291
- le as b,
292
- oe as c,
293
- me as d,
294
- ce as e,
295
- de as f,
296
- fe as g,
297
- pe as h,
298
- se as u
299
- };
300
- //# sourceMappingURL=FileHooks-CltSzAf8.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FileHooks-CltSzAf8.js","sources":["../src/queries/FileHooks.ts"],"sourcesContent":["import { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\r\nimport saveAs from \"file-saver\";\r\nimport { useState } from \"react\";\r\nimport { Upload as TusUpload } from \"tus-js-client\";\r\nimport { uuidv7 } from \"uuidv7\";\r\nimport z from \"zod\";\r\nimport type { DetailedError } from \"tus-js-client\";\r\nimport type { DefinedInitialDataOptions, UseMutationOptions } from \"@tanstack/react-query\";\r\nimport type { FileMeta } from \"~/models/file/FileMeta\";\r\nimport { FileMetaSchema } from \"~/models/file/FileMeta\";\r\nimport { httpClient, toKebabCase } from \"~/lib/utils\";\r\nimport { clientEnv } from \"~/env\";\r\n\r\nconst QUERY_KEY = \"file\";\r\nconst HOUR = 1000 * 60 * 60;\r\nconst APP_NAME = toKebabCase(clientEnv.VITE_APP_TITLE);\r\n\r\ntype OptionalId = string | undefined | null;\r\n\r\ntype BaseFileMetaArrayQueryOptions = Omit<DefinedInitialDataOptions<Array<FileMeta>>, \"queryKey\" | \"queryFn\" | \"staleTime\" | \"gcTime\" | \"refetchOnWindowFocus\" | \"initialData\">;\r\ntype BaseBlobQueryOptions = Omit<DefinedInitialDataOptions<Blob, Error, string>, \"queryKey\" | \"queryFn\" | \"select\" | \"staleTime\" | \"gcTime\" | \"refetchOnWindowFocus\" | \"initialData\">;\r\ntype BaseFileMetaMutationOptions = Omit<UseMutationOptions<FileMeta, Error, FileMeta>, \"mutationFn\" | \"onSettled\">;\r\ntype BaseBlobMutationOptions = Omit<UseMutationOptions<Blob, Error, FileMeta>, \"mutationFn\" | \"onSuccess\">;\r\ntype BaseStringMutationOptions = Omit<UseMutationOptions<string, Error, string>, \"mutationFn\" | \"onSettled\">;\r\n\r\nexport const GetFileMetasParamsSchema = z.object({\r\n appName: z.string().min(1).max(255).default(APP_NAME).optional(),\r\n subId: z.uuid(),\r\n});\r\n\r\nexport type GetFileMetasParams = z.infer<typeof GetFileMetasParamsSchema>;\r\n\r\nexport const useGetFileMetas = (params: GetFileMetasParams, options?: BaseFileMetaArrayQueryOptions) => {\r\n const queryParams = new URLSearchParams();\r\n queryParams.append(\"appName\", params.appName ?? APP_NAME);\r\n queryParams.append(\"subId\", params.subId);\r\n\r\n return useQuery<Array<FileMeta>>({\r\n ...options,\r\n queryKey: [QUERY_KEY, \"meta\", params.appName ?? APP_NAME, params.subId],\r\n queryFn: ({ signal }) => httpClient.request<Array<FileMeta>>({\r\n url: `/${QUERY_KEY}/v1/meta?${queryParams.toString()}`,\r\n method: \"GET\",\r\n signal,\r\n }).then(request => request.data),\r\n staleTime: HOUR,\r\n gcTime: HOUR,\r\n refetchOnWindowFocus: false,\r\n });\r\n};\r\n\r\nexport const GetFileThumbnailParamsSchema = z.object({\r\n appName: z.string().min(1).max(255).default(APP_NAME).optional(),\r\n meta: FileMetaSchema.nullish(),\r\n});\r\n\r\nexport type GetFileThumbnailParams = z.infer<typeof GetFileThumbnailParamsSchema>;\r\n\r\nexport const useGetFileThumbnail = (params: GetFileThumbnailParams, options?: BaseBlobQueryOptions) => {\r\n const queryParams = new URLSearchParams();\r\n queryParams.append(\"appName\", params.appName ?? APP_NAME);\r\n queryParams.append(\"id\", params.meta?.id ?? \"\");\r\n\r\n return useQuery<Blob, Error, string>({\r\n ...options,\r\n queryKey: [QUERY_KEY, \"thumbnail\", params.appName ?? APP_NAME, params.meta?.id],\r\n queryFn: ({ signal }) => httpClient.request<Blob>({\r\n url: `/${QUERY_KEY}/v1/thumbnail?${queryParams.toString()}`,\r\n method: \"GET\",\r\n signal,\r\n responseType: \"blob\"\r\n }).then(request => request.data),\r\n select: data => URL.createObjectURL(data),\r\n staleTime: HOUR,\r\n gcTime: HOUR,\r\n refetchOnWindowFocus: false,\r\n enabled: !!params.meta && options?.enabled !== false,\r\n });\r\n};\r\n\r\nexport const GetFileParamsSchema = z.object({\r\n appName: z.string().min(1).max(255).default(APP_NAME).optional(),\r\n meta: FileMetaSchema.nullish(),\r\n});\r\n\r\nexport type GetFileParams = z.infer<typeof GetFileParamsSchema>;\r\n\r\nexport const useGetFile = (params: GetFileParams, options?: BaseBlobQueryOptions) => {\r\n const queryParams = new URLSearchParams();\r\n queryParams.append(\"appName\", params.appName ?? APP_NAME);\r\n queryParams.append(\"id\", params.meta?.id ?? \"\");\r\n\r\n return useQuery<Blob, Error, string>({\r\n ...options,\r\n queryKey: [QUERY_KEY, params.appName ?? APP_NAME, params.meta?.id],\r\n queryFn: ({ signal }) => httpClient.request<Blob>({\r\n url: `/${QUERY_KEY}/v1?${queryParams.toString()}`,\r\n method: \"GET\",\r\n signal,\r\n responseType: \"blob\"\r\n }).then(request => request.data),\r\n select: data => URL.createObjectURL(data),\r\n staleTime: HOUR,\r\n gcTime: HOUR,\r\n refetchOnWindowFocus: false,\r\n enabled: !!params.meta && options?.enabled !== false,\r\n });\r\n};\r\n\r\nexport const useDownloadFile = (options?: BaseBlobMutationOptions) => {\r\n return useMutation<Blob, Error, FileMeta>({\r\n ...options,\r\n mutationFn: meta => httpClient.request<Blob>({\r\n url: `/${QUERY_KEY}/v1/download?appName=${APP_NAME}&id=${meta.id}`,\r\n method: \"GET\",\r\n responseType: \"blob\"\r\n }).then(request => request.data),\r\n onSuccess: (data, variables) => saveAs(data, `${variables.fileName}.${variables.fileExtension}`)\r\n });\r\n};\r\n\r\nexport const useOpenFile = (options?: BaseBlobMutationOptions) => {\r\n return useMutation<Blob, Error, FileMeta>({\r\n ...options,\r\n mutationFn: meta => httpClient.request<Blob>({\r\n url: `/${QUERY_KEY}/v1?appName=${APP_NAME}&id=${meta.id}`,\r\n method: \"GET\",\r\n responseType: \"blob\"\r\n }).then(request => request.data),\r\n onSuccess: data => { window.open(URL.createObjectURL(data)); }\r\n });\r\n};\r\n\r\nexport const useUpdateFileMeta = (options?: BaseFileMetaMutationOptions) => {\r\n const queryClient = useQueryClient();\r\n\r\n return useMutation<FileMeta, Error, FileMeta>({\r\n ...options,\r\n mutationFn: meta => httpClient.request<FileMeta>({\r\n url: `/${QUERY_KEY}/v1/meta?appName=${APP_NAME}&id=${meta.id}`,\r\n method: \"PUT\",\r\n data: meta\r\n }).then(request => request.data),\r\n onSettled: () => queryClient.invalidateQueries({ queryKey: [QUERY_KEY, \"meta\"], exact: false })\r\n });\r\n};\r\n\r\nexport const useDeleteFile = (options?: BaseFileMetaMutationOptions) => {\r\n const queryClient = useQueryClient();\r\n\r\n return useMutation<FileMeta, Error, FileMeta>({\r\n ...options,\r\n mutationFn: meta => httpClient.request<FileMeta>({\r\n url: `/${QUERY_KEY}/v1?appName=${APP_NAME}&id=${meta.id}`,\r\n method: \"DELETE\"\r\n }).then(request => request.data),\r\n onSettled: () => queryClient.invalidateQueries({ queryKey: [QUERY_KEY, \"meta\"], exact: false }),\r\n });\r\n};\r\n\r\nexport const useDeleteFiles = (options?: BaseStringMutationOptions) => {\r\n const queryClient = useQueryClient();\r\n\r\n return useMutation<string, Error, string>({\r\n ...options,\r\n mutationFn: subId => httpClient.request<string>({\r\n url: `/${QUERY_KEY}/v1?appName=${APP_NAME}&subId=${subId}`,\r\n method: \"DELETE\"\r\n }).then(request => request.data),\r\n onSettled: () => queryClient.invalidateQueries({ queryKey: [QUERY_KEY, \"meta\"], exact: false })\r\n });\r\n};\r\n\r\ninterface UseUploadFileProps {\r\n subId: OptionalId;\r\n onSuccess?: (meta: Pick<FileMeta, \"id\" | \"appName\" | \"subId\" | \"fileName\">) => void;\r\n onError?: (error: Error | DetailedError) => void;\r\n}\r\n\r\nexport const useUploadFile = ({ subId, onSuccess, onError }: UseUploadFileProps) => {\r\n const [progress, setProgress] = useState<number>(0);\r\n const queryClient = useQueryClient();\r\n\r\n const mutate = async (file: File) => {\r\n if (!subId) throw new Error(\"subId is required for file upload\");\r\n\r\n const metadata: Pick<FileMeta, \"id\" | \"appName\" | \"subId\" | \"fileName\"> = {\r\n id: uuidv7(),\r\n appName: APP_NAME,\r\n subId: subId,\r\n fileName: file.name,\r\n };\r\n\r\n const accessToken = \"YOUR_ACCESS_TOKEN_HERE\"; // Replace with actual token retrieval logic\r\n\r\n const upload = new TusUpload(file, {\r\n endpoint: `${clientEnv.VITE_API_URL}/${QUERY_KEY}/v1/upload`,\r\n chunkSize: 1_048_576, // 1 MB\r\n metadata: {\r\n id: metadata.id,\r\n appName: metadata.appName,\r\n subId: metadata.subId,\r\n fileName: metadata.fileName,\r\n fileExtension: file.type\r\n },\r\n headers: { \"Authorization\": `Bearer ${accessToken}` },\r\n onError: (error) => {\r\n setProgress(0);\r\n onError?.(error);\r\n },\r\n onProgress: (bytesUploaded, bytesTotal) => {\r\n setProgress((bytesUploaded / bytesTotal) * 100);\r\n },\r\n onSuccess: () => {\r\n setProgress(0);\r\n queryClient.invalidateQueries({ queryKey: [QUERY_KEY, \"meta\", subId], exact: false });\r\n onSuccess?.(metadata);\r\n },\r\n });\r\n\r\n const previousUploads = await upload.findPreviousUploads();\r\n if (previousUploads.length > 0) {\r\n upload.resumeFromPreviousUpload(previousUploads[0]);\r\n }\r\n\r\n upload.start();\r\n };\r\n\r\n return { mutate, progress };\r\n};\r\n"],"names":["QUERY_KEY","HOUR","APP_NAME","toKebabCase","clientEnv","VITE_APP_TITLE","z","object","appName","string","min","max","default","optional","subId","uuid","useGetFileMetas","params","options","$","_c","queryParams","URLSearchParams","append","t0","t1","t2","t3","signal","httpClient","request","url","toString","method","then","_temp","queryKey","queryFn","staleTime","gcTime","refetchOnWindowFocus","useQuery","meta","FileMetaSchema","nullish","useGetFileThumbnail","id","t4","responseType","_temp2","enabled","t5","select","_temp3","useGetFile","_temp4","_temp5","useDownloadFile","mutationFn","_temp7","onSuccess","_temp8","useMutation","useOpenFile","_temp0","_temp1","useUpdateFileMeta","queryClient","useQueryClient","invalidateQueries","exact","_temp11","onSettled","useDeleteFile","_temp13","useDeleteFiles","_temp15","useUploadFile","onError","progress","setProgress","useState","file","Error","metadata","uuidv7","fileName","name","upload","TusUpload","endpoint","VITE_API_URL","chunkSize","fileExtension","type","headers","error","onProgress","bytesUploaded","bytesTotal","previousUploads","findPreviousUploads","length","resumeFromPreviousUpload","start","mutate","data","URL","createObjectURL","_temp6","variables","saveAs","_temp9","window","open","_temp10","_temp12","_temp14"],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- import { jsx as r } from "react/jsx-runtime";
2
- import { c as i } from "react/compiler-runtime";
3
- import { ListItemButton as f } from "@mui/material";
4
- import { createLink as c } from "@tanstack/react-router";
5
- import u from "react";
6
- const a = u.forwardRef(function(t, o) {
7
- const n = i(3);
8
- let m;
9
- return n[0] !== t || n[1] !== o ? (m = /* @__PURE__ */ r(f, { ref: o, component: "a", ...t }), n[0] = t, n[1] = o, n[2] = m) : m = n[2], m;
10
- }), s = c(a), L = (e) => {
11
- const t = i(2);
12
- let o;
13
- return t[0] !== e ? (o = /* @__PURE__ */ r(s, { ...e }), t[0] = e, t[1] = o) : o = t[1], o;
14
- };
15
- export {
16
- L as R
17
- };
18
- //# sourceMappingURL=RouterListItemButton-C_SG0uka.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RouterListItemButton-C_SG0uka.js","sources":["../src/components/router/RouterListItemButton.tsx"],"sourcesContent":["import { ListItemButton } from \"@mui/material\";\nimport { createLink } from \"@tanstack/react-router\";\nimport React from \"react\";\nimport type { ListItemButtonProps } from \"@mui/material\";\nimport type { LinkComponent } from \"@tanstack/react-router\";\n\nconst Component = React.forwardRef<HTMLAnchorElement, ListItemButtonProps<\"a\">>(function ButtonComponent(props, reference) {\n return <ListItemButton ref={reference} component=\"a\" {...props} />;\n});\n\nconst CreatedComponent = createLink(Component);\n\nexport const RouterListItemButton: LinkComponent<typeof Component> = (props) => {\n return <CreatedComponent {...props} />;\n};\n"],"names":["Component","React","forwardRef","props","reference","$","_c","t0","ListItemButton","CreatedComponent","createLink","RouterListItemButton","jsx"],"mappings":";;;;;AAMA,MAAMA,IAAYC,EAAMC,WAAwD,SAAAC,GAAAC,GAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA;AAAA,MAAAC;AAAA,SAAAF,EAAA,CAAA,MAAAF,KAAAE,SAAAD,KACrEG,sBAACC,GAAA,EAAoBJ,KAAAA,GAAqB,WAAA,KAAG,GAAKD,GAAK,GAAIE,OAAAF,GAAAE,OAAAD,GAAAC,OAAAE,KAAAA,IAAAF,EAAA,CAAA,GAA3DE;AAA2D,CACrE,GAEKE,IAAmBC,EAAWV,CAAS,GAEhCW,IAAwDR,CAAAA,MAAA;AAAA,QAAAE,IAAAC,EAAA,CAAA;AAAA,MAAAC;AAAA,SAAAF,SAAAF,KAC1DI,IAAA,gBAAAK,EAACH,GAAA,EAAgB,GAAKN,EAAAA,CAAK,GAAIE,OAAAF,GAAAE,OAAAE,KAAAA,IAAAF,EAAA,CAAA,GAA/BE;AAA+B;"}
@@ -1,28 +0,0 @@
1
- import { createEnv as I } from "@t3-oss/env-core";
2
- import { z as E } from "zod";
3
- const t = { BASE_URL: "/", DEV: !1, MODE: "production", PROD: !0, SSR: !1, VITE_API_URL: "http://localhost:3000", VITE_APP_TITLE: "WCZ Layout", VITE_DYNAMSOFT_LICENSE_KEY: "DLS2eyJoYW5kc2hha2VDb2RlIjoiMTAxMjU2MzQ5LTEwMTI4MDIzNyIsIm1haW5TZXJ2ZXJVUkwiOiJodHRwczovL21sdHMuZHluYW1zb2Z0LmNvbS8iLCJvcmdhbml6YXRpb25JRCI6IjEwMTI1NjM0OSIsInN0YW5kYnlTZXJ2ZXJVUkwiOiJodHRwczovL3NsdHMuZHluYW1zb2Z0LmNvbS8iLCJjaGVja0NvZGUiOi0yMjMwMzAzMjZ9", VITE_MUI_LICENSE_KEY: "d7aeb74913a4918a319bf4c253aa1a49Tz0xMjIzOTYsRT0xNzk1ODIzOTk5MDAwLFM9cHJlbWl1bSxMTT1zdWJzY3JpcHRpb24sUFY9aW5pdGlhbCxLVj0y" }, _ = I({
4
- clientPrefix: "VITE_",
5
- client: {
6
- VITE_APP_TITLE: E.string(),
7
- VITE_MUI_LICENSE_KEY: E.string(),
8
- VITE_API_URL: E.url()
9
- },
10
- runtimeEnv: t,
11
- emptyStringAsUndefined: !0
12
- }), n = I({
13
- server: {
14
- NODE_ENV: E.enum(["development", "testing", "staging", "production"]),
15
- MICROSOFT_TENANT_ID: E.string(),
16
- MICROSOFT_CLIENT_ID: E.string(),
17
- MICROSOFT_CLIENT_SECRET: E.string(),
18
- MICROSOFT_REDIRECT_URI: E.url(),
19
- SESSION_SECRET: E.string()
20
- },
21
- runtimeEnv: process.env,
22
- emptyStringAsUndefined: !0
23
- });
24
- export {
25
- _ as c,
26
- n as s
27
- };
28
- //# sourceMappingURL=env-4ZoUrNqp.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"env-4ZoUrNqp.js","sources":["../src/env.ts"],"sourcesContent":["import { createEnv } from \"@t3-oss/env-core\";\r\nimport { z } from \"zod\";\r\n\r\nexport const clientEnv = createEnv({\r\n clientPrefix: \"VITE_\",\r\n client: {\r\n VITE_APP_TITLE: z.string(),\r\n VITE_MUI_LICENSE_KEY: z.string(),\r\n VITE_API_URL: z.url(),\r\n },\r\n runtimeEnv: import.meta.env,\r\n emptyStringAsUndefined: true,\r\n});\r\n\r\nexport const serverEnv = createEnv({\r\n server: {\r\n NODE_ENV: z.enum([\"development\", \"testing\", \"staging\", \"production\"]),\r\n MICROSOFT_TENANT_ID: z.string(),\r\n MICROSOFT_CLIENT_ID: z.string(),\r\n MICROSOFT_CLIENT_SECRET: z.string(),\r\n MICROSOFT_REDIRECT_URI: z.url(),\r\n SESSION_SECRET: z.string(),\r\n },\r\n runtimeEnv: process.env,\r\n emptyStringAsUndefined: true,\r\n});\r\n"],"names":["clientEnv","createEnv","clientPrefix","client","VITE_APP_TITLE","z","string","VITE_MUI_LICENSE_KEY","VITE_API_URL","url","runtimeEnv","import","emptyStringAsUndefined","serverEnv","server","NODE_ENV","enum","MICROSOFT_TENANT_ID","MICROSOFT_CLIENT_ID","MICROSOFT_CLIENT_SECRET","MICROSOFT_REDIRECT_URI","SESSION_SECRET","process","env"],"mappings":";;gkBAGaA,IAAYC,EAAU;AAAA,EAC/BC,cAAc;AAAA,EACdC,QAAQ;AAAA,IACJC,gBAAgBC,EAAEC,OAAAA;AAAAA,IAClBC,sBAAsBF,EAAEC,OAAAA;AAAAA,IACxBE,cAAcH,EAAEI,IAAAA;AAAAA,EAAI;AAAA,EAExBC,YAAYC;AAAAA,EACZC,wBAAwB;AAC5B,CAAC,GAEYC,IAAYZ,EAAU;AAAA,EAC/Ba,QAAQ;AAAA,IACJC,UAAUV,EAAEW,KAAK,CAAC,eAAe,WAAW,WAAW,YAAY,CAAC;AAAA,IACpEC,qBAAqBZ,EAAEC,OAAAA;AAAAA,IACvBY,qBAAqBb,EAAEC,OAAAA;AAAAA,IACvBa,yBAAyBd,EAAEC,OAAAA;AAAAA,IAC3Bc,wBAAwBf,EAAEI,IAAAA;AAAAA,IAC1BY,gBAAgBhB,EAAEC,OAAAA;AAAAA,EAAO;AAAA,EAE7BI,YAAYY,QAAQC;AAAAA,EACpBX,wBAAwB;AAC5B,CAAC;"}
@@ -1,6 +0,0 @@
1
- import { QueryClient as e } from "@tanstack/react-query";
2
- const t = new e();
3
- export {
4
- t as q
5
- };
6
- //# sourceMappingURL=queryClient--EvGPhnh.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"queryClient--EvGPhnh.js","sources":["../src/lib/queryClient.ts"],"sourcesContent":["import { QueryClient } from \"@tanstack/react-query\";\r\n\r\nexport const queryClient = new QueryClient();\r\n"],"names":["queryClient","QueryClient"],"mappings":";AAEO,MAAMA,IAAc,IAAIC,EAAAA;"}
package/dist/server.d.ts DELETED
@@ -1,11 +0,0 @@
1
- import { callback } from '../lib/auth/api';
2
- import { login } from '../lib/auth/api';
3
- import { logout } from '../lib/auth/api';
4
-
5
- export { callback }
6
-
7
- export { login }
8
-
9
- export { logout }
10
-
11
- export { }
package/dist/server.js DELETED
@@ -1,70 +0,0 @@
1
- import { setCookie as u, getCookie as d, deleteCookie as l } from "@tanstack/react-start/server";
2
- import { generateState as m, generateCodeVerifier as f, decodeIdToken as k } from "arctic";
3
- import { s as p } from "./env-4ZoUrNqp.js";
4
- import { e as h, s as g, a as w } from "./session-7yb0BETM.js";
5
- const C = async (e) => {
6
- const o = new URL(e.url).searchParams.get("redirect_uri") || "/", r = m(), s = f(), a = ["openid", "profile", "offline_access", "User.Read"], n = h.createAuthorizationURL(r, s, a);
7
- return u("entra_oauth_state", r, {
8
- secure: p.NODE_ENV === "production",
9
- path: "/",
10
- httpOnly: !0,
11
- sameSite: "lax",
12
- maxAge: 600
13
- // 10 minutes
14
- }), u("entra_code_verifier", s, {
15
- secure: p.NODE_ENV === "production",
16
- path: "/",
17
- httpOnly: !0,
18
- sameSite: "lax",
19
- maxAge: 600
20
- // 10 minutes,
21
- }), u("entra_redirect_uri", o, {
22
- secure: p.NODE_ENV === "production",
23
- path: "/",
24
- httpOnly: !0,
25
- sameSite: "lax",
26
- maxAge: 600
27
- // 10 minutes,
28
- }), Response.redirect(n.href);
29
- }, E = async (e) => {
30
- const t = new URL(e.url), o = t.searchParams.get("code");
31
- if (!o) return new Response("Missing code", {
32
- status: 400
33
- });
34
- const r = t.searchParams.get("state"), s = d("entra_oauth_state") ?? null, a = d("entra_code_verifier") ?? null, n = d("entra_redirect_uri") ?? "/";
35
- if (!r || !s || !a || !n) throw new Response("Missing entra oauth data in cookies", {
36
- status: 400
37
- });
38
- if (r !== s) return new Response("Invalid oauth state", {
39
- status: 400
40
- });
41
- l("entra_oauth_state"), l("entra_code_verifier"), l("entra_redirect_uri");
42
- const i = await h.validateAuthorizationCode(o, a), _ = i.idToken(), c = k(_);
43
- return await g({
44
- refreshToken: i.refreshToken(),
45
- user: {
46
- id: c.oid,
47
- name: c.name.split("/")[0],
48
- email: c.preferred_username
49
- }
50
- }), await w(i.accessToken()), new Response(null, {
51
- status: 302,
52
- headers: {
53
- Location: n
54
- }
55
- });
56
- }, L = async (e) => {
57
- const t = new URL(e.url);
58
- return new Response(null, {
59
- status: 302,
60
- headers: {
61
- Location: t.href
62
- }
63
- });
64
- };
65
- export {
66
- E as callback,
67
- C as login,
68
- L as logout
69
- };
70
- //# sourceMappingURL=server.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.js","sources":["../src/lib/auth/api.ts"],"sourcesContent":["import { deleteCookie, getCookie, setCookie } from \"@tanstack/react-start/server\";\r\nimport { decodeIdToken, generateCodeVerifier, generateState } from \"arctic\";\r\nimport type jwt from \"jsonwebtoken\";\r\nimport { serverEnv } from \"~/env\";\r\nimport { entraId } from \"~/lib/auth/entra\";\r\nimport { setSessionAccessTokenCookie, setSessionCookie } from \"~/lib/auth/session\";\r\n\r\nexport const login = async (request: Request): Promise<Response> => {\r\n const url = new URL(request.url);\r\n const redirectUri = url.searchParams.get(\"redirect_uri\") || \"/\";\r\n\r\n const state = generateState();\r\n const codeVerifier = generateCodeVerifier();\r\n const scopes = [\"openid\", \"profile\", \"offline_access\", \"User.Read\"];\r\n const authorizationURL = entraId.createAuthorizationURL(state, codeVerifier, scopes);\r\n\r\n setCookie(\"entra_oauth_state\", state, {\r\n secure: serverEnv.NODE_ENV === \"production\",\r\n path: \"/\",\r\n httpOnly: true,\r\n sameSite: \"lax\",\r\n maxAge: 60 * 10 // 10 minutes\r\n });\r\n\r\n setCookie(\"entra_code_verifier\", codeVerifier, {\r\n secure: serverEnv.NODE_ENV === \"production\",\r\n path: \"/\",\r\n httpOnly: true,\r\n sameSite: \"lax\",\r\n maxAge: 60 * 10 // 10 minutes,\r\n });\r\n\r\n setCookie(\"entra_redirect_uri\", redirectUri, {\r\n secure: serverEnv.NODE_ENV === \"production\",\r\n path: \"/\",\r\n httpOnly: true,\r\n sameSite: \"lax\",\r\n maxAge: 60 * 10 // 10 minutes,\r\n });\r\n\r\n return Response.redirect(authorizationURL.href);\r\n};\r\n\r\nexport const callback = async (request: Request): Promise<Response> => {\r\n const url = new URL(request.url);\r\n const code = url.searchParams.get(\"code\");\r\n if (!code) return new Response(\"Missing code\", { status: 400 });\r\n const state = url.searchParams.get(\"state\");\r\n const storedState = getCookie(\"entra_oauth_state\") ?? null;\r\n const codeVerifier = getCookie(\"entra_code_verifier\") ?? null;\r\n const redirectUri = getCookie(\"entra_redirect_uri\") ?? \"/\";\r\n\r\n if (!state || !storedState || !codeVerifier || !redirectUri) throw new Response(\"Missing entra oauth data in cookies\", { status: 400 });\r\n if (state !== storedState) return new Response(\"Invalid oauth state\", { status: 400 });\r\n\r\n deleteCookie(\"entra_oauth_state\");\r\n deleteCookie(\"entra_code_verifier\");\r\n deleteCookie(\"entra_redirect_uri\");\r\n\r\n const tokens = await entraId.validateAuthorizationCode(code, codeVerifier);\r\n\r\n const idToken = tokens.idToken();\r\n const claims = decodeIdToken(idToken) as jwt.JwtPayload;\r\n\r\n await setSessionCookie({\r\n refreshToken: tokens.refreshToken(),\r\n user: {\r\n id: claims.oid,\r\n name: claims.name.split(\"/\")[0],\r\n email: claims.preferred_username,\r\n }\r\n });\r\n\r\n await setSessionAccessTokenCookie(tokens.accessToken());\r\n\r\n return new Response(null, {\r\n status: 302,\r\n headers: { Location: redirectUri },\r\n });\r\n};\r\n\r\nexport const logout = async (request: Request): Promise<Response> => {\r\n const url = new URL(request.url);\r\n\r\n // const { session } = await validateRequest();\r\n // if (!session) {\r\n // return new Response(null, { status: 302, headers: { Location: \"/\" } });\r\n // }\r\n // setCookie(SESSION_COOKIE_NAME, \"\", {\r\n // httpOnly: true,\r\n // sameSite: \"lax\",\r\n // secure: serverEnv.NODE_ENV === \"production\",\r\n // maxAge: 0,\r\n // path: \"/\",\r\n // });\r\n\r\n return new Response(null, { status: 302, headers: { Location: url.href } });\r\n};\r\n"],"names":["login","request","redirectUri","URL","url","searchParams","get","state","generateState","codeVerifier","generateCodeVerifier","scopes","authorizationURL","entraId","createAuthorizationURL","setCookie","secure","serverEnv","NODE_ENV","path","httpOnly","sameSite","maxAge","Response","redirect","href","callback","code","status","storedState","getCookie","deleteCookie","tokens","validateAuthorizationCode","idToken","claims","decodeIdToken","setSessionCookie","refreshToken","user","id","oid","name","split","email","preferred_username","setSessionAccessTokenCookie","accessToken","headers","Location","logout"],"mappings":";;;;AAOO,MAAMA,IAAQ,OAAOC,MAAwC;AAEhE,QAAMC,IADM,IAAIC,IAAIF,EAAQG,GAAG,EACPC,aAAaC,IAAI,cAAc,KAAK,KAEtDC,IAAQC,EAAAA,GACRC,IAAeC,EAAAA,GACfC,IAAS,CAAC,UAAU,WAAW,kBAAkB,WAAW,GAC5DC,IAAmBC,EAAQC,uBAAuBP,GAAOE,GAAcE,CAAM;AAEnFI,SAAAA,EAAU,qBAAqBR,GAAO;AAAA,IAClCS,QAAQC,EAAUC,aAAa;AAAA,IAC/BC,MAAM;AAAA,IACNC,UAAU;AAAA,IACVC,UAAU;AAAA,IACVC,QAAQ;AAAA;AAAA,EAAK,CAChB,GAEDP,EAAU,uBAAuBN,GAAc;AAAA,IAC3CO,QAAQC,EAAUC,aAAa;AAAA,IAC/BC,MAAM;AAAA,IACNC,UAAU;AAAA,IACVC,UAAU;AAAA,IACVC,QAAQ;AAAA;AAAA,EAAK,CAChB,GAEDP,EAAU,sBAAsBb,GAAa;AAAA,IACzCc,QAAQC,EAAUC,aAAa;AAAA,IAC/BC,MAAM;AAAA,IACNC,UAAU;AAAA,IACVC,UAAU;AAAA,IACVC,QAAQ;AAAA;AAAA,EAAK,CAChB,GAEMC,SAASC,SAASZ,EAAiBa,IAAI;AAClD,GAEaC,IAAW,OAAOzB,MAAwC;AACnE,QAAMG,IAAM,IAAID,IAAIF,EAAQG,GAAG,GACzBuB,IAAOvB,EAAIC,aAAaC,IAAI,MAAM;AACxC,MAAI,CAACqB,EAAM,QAAO,IAAIJ,SAAS,gBAAgB;AAAA,IAAEK,QAAQ;AAAA,EAAA,CAAK;AAC9D,QAAMrB,IAAQH,EAAIC,aAAaC,IAAI,OAAO,GACpCuB,IAAcC,EAAU,mBAAmB,KAAK,MAChDrB,IAAeqB,EAAU,qBAAqB,KAAK,MACnD5B,IAAc4B,EAAU,oBAAoB,KAAK;AAEvD,MAAI,CAACvB,KAAS,CAACsB,KAAe,CAACpB,KAAgB,CAACP,EAAa,OAAM,IAAIqB,SAAS,uCAAuC;AAAA,IAAEK,QAAQ;AAAA,EAAA,CAAK;AACtI,MAAIrB,MAAUsB,EAAa,QAAO,IAAIN,SAAS,uBAAuB;AAAA,IAAEK,QAAQ;AAAA,EAAA,CAAK;AAErFG,EAAAA,EAAa,mBAAmB,GAChCA,EAAa,qBAAqB,GAClCA,EAAa,oBAAoB;AAEjC,QAAMC,IAAS,MAAMnB,EAAQoB,0BAA0BN,GAAMlB,CAAY,GAEnEyB,IAAUF,EAAOE,QAAAA,GACjBC,IAASC,EAAcF,CAAO;AAEpC,eAAMG,EAAiB;AAAA,IACnBC,cAAcN,EAAOM,aAAAA;AAAAA,IACrBC,MAAM;AAAA,MACFC,IAAIL,EAAOM;AAAAA,MACXC,MAAMP,EAAOO,KAAKC,MAAM,GAAG,EAAE,CAAC;AAAA,MAC9BC,OAAOT,EAAOU;AAAAA,IAAAA;AAAAA,EAClB,CACH,GAED,MAAMC,EAA4Bd,EAAOe,aAAa,GAE/C,IAAIxB,SAAS,MAAM;AAAA,IACtBK,QAAQ;AAAA,IACRoB,SAAS;AAAA,MAAEC,UAAU/C;AAAAA,IAAAA;AAAAA,EAAY,CACpC;AACL,GAEagD,IAAS,OAAOjD,MAAwC;AACjE,QAAMG,IAAM,IAAID,IAAIF,EAAQG,GAAG;AAc/B,SAAO,IAAImB,SAAS,MAAM;AAAA,IAAEK,QAAQ;AAAA,IAAKoB,SAAS;AAAA,MAAEC,UAAU7C,EAAIqB;AAAAA,IAAAA;AAAAA,EAAK,CAAG;AAC9E;"}
@@ -1,76 +0,0 @@
1
- import { redirect as a } from "@tanstack/react-router";
2
- import { getCookie as E, deleteCookie as _, setCookie as S } from "@tanstack/react-start/server";
3
- import T from "jsonwebtoken";
4
- import * as e from "zod";
5
- import c from "zod";
6
- import "jwks-rsa";
7
- import { MicrosoftEntraId as C } from "arctic";
8
- import { s as o } from "./env-4ZoUrNqp.js";
9
- const f = new C(o.MICROSOFT_TENANT_ID, o.MICROSOFT_CLIENT_ID, o.MICROSOFT_CLIENT_SECRET, o.MICROSOFT_REDIRECT_URI), u = e.object({
10
- id: e.string(),
11
- name: e.string(),
12
- email: e.email(),
13
- groups: e.array(e.string())
14
- });
15
- e.object({
16
- id: e.string(),
17
- displayName: e.string(),
18
- jobTitle: e.string(),
19
- mail: e.email(),
20
- mobilePhone: e.string()
21
- });
22
- const r = "session", p = "access_token", m = "/", I = c.object({
23
- refreshToken: c.string(),
24
- user: u.omit({
25
- groups: !0
26
- })
27
- }), O = async (s) => {
28
- const t = E(r);
29
- if (!t)
30
- throw a({
31
- href: `/api/auth/login?redirect_uri=${encodeURIComponent(s ?? m)}`
32
- });
33
- const n = T.verify(t, o.SESSION_SECRET), i = I.safeParse(n);
34
- if (!i.success)
35
- throw _(r), a({
36
- href: `/api/auth/login?redirect_uri=${encodeURIComponent(s ?? m)}`
37
- });
38
- return i.data;
39
- }, A = async () => {
40
- const s = E(p);
41
- if (s) return s;
42
- const t = await O(), n = await f.refreshAccessToken(t.refreshToken, []);
43
- return await k({
44
- ...t,
45
- refreshToken: n.refreshToken()
46
- }), await g(n.accessToken()), n.accessToken();
47
- }, k = async (s) => {
48
- const t = T.sign(s, o.SESSION_SECRET, {
49
- expiresIn: "7d"
50
- });
51
- S(r, t, {
52
- secure: o.NODE_ENV === "production",
53
- path: "/",
54
- httpOnly: !0,
55
- sameSite: "lax",
56
- maxAge: 10080 * 60
57
- // 7 days
58
- });
59
- }, g = async (s) => {
60
- S(p, s, {
61
- secure: o.NODE_ENV === "production",
62
- path: "/",
63
- httpOnly: !0,
64
- sameSite: "lax",
65
- maxAge: 300
66
- // 5 minutes
67
- });
68
- };
69
- export {
70
- g as a,
71
- f as e,
72
- A as g,
73
- O as r,
74
- k as s
75
- };
76
- //# sourceMappingURL=session-7yb0BETM.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-7yb0BETM.js","sources":["../src/lib/auth/entra.ts","../src/models/User.ts","../src/lib/auth/session.ts"],"sourcesContent":["import { MicrosoftEntraId } from \"arctic\";\r\nimport { serverEnv } from \"~/env\";\r\n\r\nexport const entraId = new MicrosoftEntraId(\r\n serverEnv.MICROSOFT_TENANT_ID,\r\n serverEnv.MICROSOFT_CLIENT_ID,\r\n serverEnv.MICROSOFT_CLIENT_SECRET,\r\n serverEnv.MICROSOFT_REDIRECT_URI,\r\n);\r\n","import * as z from \"zod\";\r\n\r\nexport const UserSchema = z.object({\r\n id: z.string(),\r\n name: z.string(),\r\n email: z.email(),\r\n groups: z.array(z.string()),\r\n});\r\n\r\nexport type User = z.infer<typeof UserSchema>;\r\n\r\nexport const GraphUserSchema = z.object({\r\n id: z.string(),\r\n displayName: z.string(),\r\n jobTitle: z.string(),\r\n mail: z.email(),\r\n mobilePhone: z.string(),\r\n});\r\n\r\nexport type GraphUser = z.infer<typeof GraphUserSchema>;\r\n","import { redirect } from \"@tanstack/react-router\";\r\nimport { deleteCookie, getCookie, setCookie } from \"@tanstack/react-start/server\";\r\nimport jwt from \"jsonwebtoken\";\r\nimport z from \"zod\";\r\nimport jwksRsa from \"jwks-rsa\";\r\nimport { entraId } from \"./entra\";\r\nimport { serverEnv } from \"~/env\";\r\nimport { UserSchema } from \"~/models/User\";\r\n\r\nconst SESSION_COOKIE_NAME = \"session\";\r\nconst ACCESS_TOKEN_COOKIE_NAME = \"access_token\";\r\nconst AFTER_LOGIN_URL = \"/\";\r\n\r\nconst SessionSchema = z.object({\r\n refreshToken: z.string(),\r\n user: UserSchema.omit({ groups: true }),\r\n});\r\n\r\ntype Session = z.infer<typeof SessionSchema>;\r\n\r\nexport const requireSession = async (redirectUri?: string) => {\r\n const sessionCookie = getCookie(SESSION_COOKIE_NAME);\r\n if (!sessionCookie) {\r\n throw redirect({ href: `/api/auth/login?redirect_uri=${encodeURIComponent(redirectUri ?? AFTER_LOGIN_URL)}` });\r\n }\r\n\r\n const payloadRaw = jwt.verify(sessionCookie, serverEnv.SESSION_SECRET);\r\n const sessionResult = SessionSchema.safeParse(payloadRaw);\r\n if (!sessionResult.success) {\r\n deleteCookie(SESSION_COOKIE_NAME);\r\n throw redirect({ href: `/api/auth/login?redirect_uri=${encodeURIComponent(redirectUri ?? AFTER_LOGIN_URL)}` });\r\n }\r\n\r\n return sessionResult.data;\r\n};\r\n\r\nexport const getAccessToken = async () => {\r\n const accessTokenCookie = getCookie(ACCESS_TOKEN_COOKIE_NAME);\r\n if (accessTokenCookie) return accessTokenCookie;\r\n\r\n const session = await requireSession();\r\n\r\n const tokens = await entraId.refreshAccessToken(session.refreshToken, []);\r\n\r\n await setSessionCookie({\r\n ...session,\r\n refreshToken: tokens.refreshToken()\r\n });\r\n\r\n await setSessionAccessTokenCookie(tokens.accessToken());\r\n\r\n return tokens.accessToken();\r\n};\r\n\r\nexport const validateAccessToken = async (token: string): Promise<jwt.JwtPayload> => {\r\n const client = jwksRsa({\r\n cache: true,\r\n rateLimit: true,\r\n jwksRequestsPerMinute: 5,\r\n jwksUri: \"https://login.microsoftonline.com/common/discovery/v2.0/keys\",\r\n });\r\n\r\n const decodedHeader = jwt.decode(token, { complete: true });\r\n if (!decodedHeader?.header.kid) throw new Error(\"Invalid token: Missing kid\");\r\n\r\n const key = await client.getSigningKey(decodedHeader.header.kid);\r\n const signingKey = key.getPublicKey();\r\n\r\n const payload = jwt.verify(token, signingKey) as jwt.JwtPayload;\r\n\r\n if (typeof payload.iss !== \"string\" || !payload.iss.startsWith(\"https://login.microsoftonline.com/\"))\r\n throw new Error(\"Invalid issuer\");\r\n\r\n return payload;\r\n};\r\n\r\nexport const setSessionCookie = async (session: Session) => {\r\n const sessionJwt = jwt.sign(session, serverEnv.SESSION_SECRET, { expiresIn: \"7d\" });\r\n\r\n setCookie(SESSION_COOKIE_NAME, sessionJwt, {\r\n secure: serverEnv.NODE_ENV === \"production\",\r\n path: \"/\",\r\n httpOnly: true,\r\n sameSite: \"lax\",\r\n maxAge: 7 * 24 * 60 * 60, // 7 days\r\n });\r\n};\r\n\r\nexport const setSessionAccessTokenCookie = async (accessToken: string) => {\r\n setCookie(ACCESS_TOKEN_COOKIE_NAME, accessToken, {\r\n secure: serverEnv.NODE_ENV === \"production\",\r\n path: \"/\",\r\n httpOnly: true,\r\n sameSite: \"lax\",\r\n maxAge: 5 * 60, // 5 minutes\r\n });\r\n};\r\n"],"names":["entraId","MicrosoftEntraId","serverEnv","MICROSOFT_TENANT_ID","MICROSOFT_CLIENT_ID","MICROSOFT_CLIENT_SECRET","MICROSOFT_REDIRECT_URI","UserSchema","z","object","id","string","name","email","groups","array","displayName","jobTitle","mail","mobilePhone","SESSION_COOKIE_NAME","ACCESS_TOKEN_COOKIE_NAME","AFTER_LOGIN_URL","SessionSchema","refreshToken","user","omit","requireSession","redirectUri","sessionCookie","getCookie","redirect","href","encodeURIComponent","payloadRaw","jwt","verify","SESSION_SECRET","sessionResult","safeParse","success","deleteCookie","data","getAccessToken","accessTokenCookie","session","tokens","refreshAccessToken","setSessionCookie","setSessionAccessTokenCookie","accessToken","sessionJwt","sign","expiresIn","setCookie","secure","NODE_ENV","path","httpOnly","sameSite","maxAge"],"mappings":";;;;;;;;AAGO,MAAMA,IAAU,IAAIC,EACvBC,EAAUC,qBACVD,EAAUE,qBACVF,EAAUG,yBACVH,EAAUI,sBACd,GCNaC,IAAaC,EAAEC,OAAO;AAAA,EAC/BC,IAAIF,EAAEG,OAAAA;AAAAA,EACNC,MAAMJ,EAAEG,OAAAA;AAAAA,EACRE,OAAOL,EAAEK,MAAAA;AAAAA,EACTC,QAAQN,EAAEO,MAAMP,EAAEG,QAAQ;AAC9B,CAAC;AAI8BH,EAAEC,OAAO;AAAA,EACpCC,IAAIF,EAAEG,OAAAA;AAAAA,EACNK,aAAaR,EAAEG,OAAAA;AAAAA,EACfM,UAAUT,EAAEG,OAAAA;AAAAA,EACZO,MAAMV,EAAEK,MAAAA;AAAAA,EACRM,aAAaX,EAAEG,OAAAA;AACnB,CAAC;ACRD,MAAMS,IAAsB,WACtBC,IAA2B,gBAC3BC,IAAkB,KAElBC,IAAgBf,EAAEC,OAAO;AAAA,EAC3Be,cAAchB,EAAEG,OAAAA;AAAAA,EAChBc,MAAMlB,EAAWmB,KAAK;AAAA,IAAEZ,QAAQ;AAAA,EAAA,CAAM;AAC1C,CAAC,GAIYa,IAAiB,OAAOC,MAAyB;AAC1D,QAAMC,IAAgBC,EAAUV,CAAmB;AACnD,MAAI,CAACS;AACD,UAAME,EAAS;AAAA,MAAEC,MAAM,gCAAgCC,mBAAmBL,KAAeN,CAAe,CAAC;AAAA,IAAA,CAAI;AAGjH,QAAMY,IAAaC,EAAIC,OAAOP,GAAe3B,EAAUmC,cAAc,GAC/DC,IAAgBf,EAAcgB,UAAUL,CAAU;AACxD,MAAI,CAACI,EAAcE;AACfC,UAAAA,EAAarB,CAAmB,GAC1BW,EAAS;AAAA,MAAEC,MAAM,gCAAgCC,mBAAmBL,KAAeN,CAAe,CAAC;AAAA,IAAA,CAAI;AAGjH,SAAOgB,EAAcI;AACzB,GAEaC,IAAiB,YAAY;AACtC,QAAMC,IAAoBd,EAAUT,CAAwB;AAC5D,MAAIuB,EAAmB,QAAOA;AAE9B,QAAMC,IAAU,MAAMlB,EAAAA,GAEhBmB,IAAS,MAAM9C,EAAQ+C,mBAAmBF,EAAQrB,cAAc,EAAE;AAExE,eAAMwB,EAAiB;AAAA,IACnB,GAAGH;AAAAA,IACHrB,cAAcsB,EAAOtB,aAAAA;AAAAA,EAAa,CACrC,GAED,MAAMyB,EAA4BH,EAAOI,aAAa,GAE/CJ,EAAOI,YAAAA;AAClB,GAwBaF,IAAmB,OAAOH,MAAqB;AACxD,QAAMM,IAAahB,EAAIiB,KAAKP,GAAS3C,EAAUmC,gBAAgB;AAAA,IAAEgB,WAAW;AAAA,EAAA,CAAM;AAElFC,EAAAA,EAAUlC,GAAqB+B,GAAY;AAAA,IACvCI,QAAQrD,EAAUsD,aAAa;AAAA,IAC/BC,MAAM;AAAA,IACNC,UAAU;AAAA,IACVC,UAAU;AAAA,IACVC,QAAQ,QAAc;AAAA;AAAA,EAAA,CACzB;AACL,GAEaX,IAA8B,OAAOC,MAAwB;AACtEI,EAAAA,EAAUjC,GAA0B6B,GAAa;AAAA,IAC7CK,QAAQrD,EAAUsD,aAAa;AAAA,IAC/BC,MAAM;AAAA,IACNC,UAAU;AAAA,IACVC,UAAU;AAAA,IACVC,QAAQ;AAAA;AAAA,EAAI,CACf;AACL;"}