@plutonhq/core-frontend 0.1.15 → 0.1.17

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 (34) hide show
  1. package/dist-lib/components/App/Footer/Footer.d.ts +2 -1
  2. package/dist-lib/components/App/Footer/Footer.d.ts.map +1 -1
  3. package/dist-lib/components/App/Footer/Footer.js +29 -18
  4. package/dist-lib/components/App/Footer/Footer.js.map +1 -1
  5. package/dist-lib/node_modules/.pnpm/@tanstack_query-core@5.96.0/node_modules/@tanstack/query-core/build/modern/notifyManager.js +68 -0
  6. package/dist-lib/node_modules/.pnpm/@tanstack_query-core@5.96.0/node_modules/@tanstack/query-core/build/modern/notifyManager.js.map +1 -0
  7. package/dist-lib/node_modules/.pnpm/@tanstack_query-core@5.96.0/node_modules/@tanstack/query-core/build/modern/timeoutManager.js +7 -0
  8. package/dist-lib/node_modules/.pnpm/@tanstack_query-core@5.96.0/node_modules/@tanstack/query-core/build/modern/timeoutManager.js.map +1 -0
  9. package/dist-lib/node_modules/.pnpm/@tanstack_query-core@5.96.0/node_modules/@tanstack/query-core/build/modern/utils.js +55 -0
  10. package/dist-lib/node_modules/.pnpm/@tanstack_query-core@5.96.0/node_modules/@tanstack/query-core/build/modern/utils.js.map +1 -0
  11. package/dist-lib/node_modules/.pnpm/@tanstack_query-persist-client-core@5.96.0/node_modules/@tanstack/query-persist-client-core/build/modern/createPersister.js +190 -0
  12. package/dist-lib/node_modules/.pnpm/@tanstack_query-persist-client-core@5.96.0/node_modules/@tanstack/query-persist-client-core/build/modern/createPersister.js.map +1 -0
  13. package/dist-lib/router.d.ts.map +1 -1
  14. package/dist-lib/router.js +42 -39
  15. package/dist-lib/router.js.map +1 -1
  16. package/dist-lib/services/settings.d.ts +2 -0
  17. package/dist-lib/services/settings.d.ts.map +1 -1
  18. package/dist-lib/services/settings.js +100 -69
  19. package/dist-lib/services/settings.js.map +1 -1
  20. package/dist-lib/services/users.d.ts +1 -1
  21. package/dist-lib/services/users.d.ts.map +1 -1
  22. package/dist-lib/services/users.js.map +1 -1
  23. package/dist-lib/services.js +61 -59
  24. package/dist-lib/utils/helpers.d.ts +1 -0
  25. package/dist-lib/utils/helpers.d.ts.map +1 -1
  26. package/dist-lib/utils/helpers.js +74 -70
  27. package/dist-lib/utils/helpers.js.map +1 -1
  28. package/dist-lib/utils.js +28 -27
  29. package/package.json +5 -4
  30. package/src/components/App/Footer/Footer.tsx +17 -2
  31. package/src/router.tsx +6 -1
  32. package/src/services/settings.ts +36 -0
  33. package/src/services/users.ts +1 -1
  34. package/src/utils/helpers.ts +26 -0
@@ -69,4 +69,6 @@ export declare function verifyTwoFactorOTP({ code }: {
69
69
  export declare function useVerifyTwoFactorOTP(): import("@tanstack/react-query").UseMutationResult<any, Error, {
70
70
  code: string;
71
71
  }, unknown>;
72
+ export declare function checkLatestVersion(): Promise<any>;
73
+ export declare function useCheckLatestVersion(): import("@tanstack/react-query").UseQueryResult<any, Error>;
72
74
  //# sourceMappingURL=settings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/services/settings.ts"],"names":[],"mappings":"AAOA,wBAAsB,WAAW,iBAWhC;AAED,wBAAgB,cAAc,+DAQ7B;AAED,wBAAsB,cAAc,CAAC,aAAa,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,CAAA;CAAE,gBActH;AAED,wBAAgB,iBAAiB;QAhByB,MAAM;cAAY,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;YA0BpH;AAGD,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,gBAYlD;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,8DAO/C;AAGD,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,iBAsCvD;AAED,wBAAgB,qBAAqB,oFAUpC;AAED,wBAAsB,mBAAmB,CAAC,aAAa,EAAE;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC;IACpD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC;CAClD,gBAeA;AAED,wBAAgB,sBAAsB;gBArBvB,MAAM;UACZ,MAAM;cACF,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;UAC7C,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;YA0BjD;AAID,MAAM,WAAW,WAAW;IACzB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACvB;AAGD,wBAAsB,cAAc,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,CAAC,CAMvF;AAED,wBAAgB,cAAc;aAR6B,OAAO;UAAQ,WAAW;UAcpF;AAGD,wBAAsB,aAAa,CAAC,WAAW,EAAE,gBAAgB,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAOlI;AAED,wBAAgB,gBAAgB;aATuD,OAAO;cAAY,MAAM;YAAU,MAAM;qCAa/H;AAID,wBAAsB,kBAAkB,CAAC,EAAE,EAAE,MAAM,gBAclD;AAED,wBAAgB,qBAAqB,mFAUpC;AACD,wBAAsB,mBAAmB,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,gBAenF;AAED,wBAAgB,sBAAsB;UAjB0B,MAAM;QAAM,MAAM;YA2BjF;AAED,wBAAsB,kBAAkB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,gBAelE;AAED,wBAAgB,qBAAqB;UAjBsB,MAAM;YA6BhE"}
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/services/settings.ts"],"names":[],"mappings":"AAQA,wBAAsB,WAAW,iBAWhC;AAED,wBAAgB,cAAc,+DAQ7B;AAED,wBAAsB,cAAc,CAAC,aAAa,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,CAAA;CAAE,gBActH;AAED,wBAAgB,iBAAiB;QAhByB,MAAM;cAAY,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;YA0BpH;AAGD,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,gBAYlD;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,8DAO/C;AAGD,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,iBAsCvD;AAED,wBAAgB,qBAAqB,oFAUpC;AAED,wBAAsB,mBAAmB,CAAC,aAAa,EAAE;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC;IACpD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC;CAClD,gBAeA;AAED,wBAAgB,sBAAsB;gBArBvB,MAAM;UACZ,MAAM;cACF,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;UAC7C,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;YA0BjD;AAID,MAAM,WAAW,WAAW;IACzB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACvB;AAGD,wBAAsB,cAAc,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,CAAC,CAMvF;AAED,wBAAgB,cAAc;aAR6B,OAAO;UAAQ,WAAW;UAcpF;AAGD,wBAAsB,aAAa,CAAC,WAAW,EAAE,gBAAgB,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAOlI;AAED,wBAAgB,gBAAgB;aATuD,OAAO;cAAY,MAAM;YAAU,MAAM;qCAa/H;AAID,wBAAsB,kBAAkB,CAAC,EAAE,EAAE,MAAM,gBAclD;AAED,wBAAgB,qBAAqB,mFAUpC;AACD,wBAAsB,mBAAmB,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,gBAenF;AAED,wBAAgB,sBAAsB;UAjB0B,MAAM;QAAM,MAAM;YA2BjF;AAED,wBAAsB,kBAAkB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,gBAelE;AAED,wBAAgB,qBAAqB;UAjBsB,MAAM;YA6BhE;AAGD,wBAAsB,kBAAkB,iBAWvC;AASD,wBAAgB,qBAAqB,+DAYpC"}
@@ -1,7 +1,8 @@
1
- import { useQuery as d, useQueryClient as y, useMutation as r } from "@tanstack/react-query";
1
+ import { useQuery as u, useQueryClient as y, useMutation as r } from "@tanstack/react-query";
2
2
  import { API_URL as s } from "../utils/constants.js";
3
- import { useNavigate as h } from "react-router";
4
- async function m() {
3
+ import { useNavigate as m } from "react-router";
4
+ import { experimental_createQueryPersister as S } from "../node_modules/.pnpm/@tanstack_query-persist-client-core@5.96.0/node_modules/@tanstack/query-persist-client-core/build/modern/createPersister.js";
5
+ async function j() {
5
6
  const e = new URL(`${s}/settings`), o = await (await fetch(e.toString(), {
6
7
  method: "GET",
7
8
  credentials: "include"
@@ -10,16 +11,16 @@ async function m() {
10
11
  throw new Error(o.error);
11
12
  return o;
12
13
  }
13
- function k() {
14
- return d({
14
+ function G() {
15
+ return u({
15
16
  queryKey: ["settings"],
16
- queryFn: () => m(),
17
+ queryFn: () => j(),
17
18
  refetchOnMount: !0,
18
19
  retry: !1,
19
20
  staleTime: 0
20
21
  });
21
22
  }
22
- async function S(e) {
23
+ async function T(e) {
23
24
  const t = new Headers({ "Content-Type": "application/json", Accept: "application/json" }), n = await (await fetch(`${s}/settings/${e.id}`, {
24
25
  method: "PUT",
25
26
  credentials: "include",
@@ -30,16 +31,16 @@ async function S(e) {
30
31
  throw new Error(n.error);
31
32
  return n;
32
33
  }
33
- function C() {
34
+ function V() {
34
35
  const e = y();
35
36
  return r({
36
- mutationFn: S,
37
+ mutationFn: T,
37
38
  onSuccess: (t) => {
38
39
  console.log("# Settings Updated! :", t), e.invalidateQueries({ queryKey: ["settings"] });
39
40
  }
40
41
  });
41
42
  }
42
- async function j(e) {
43
+ async function F(e) {
43
44
  const t = new URL(`${s}/settings/${e}/logs`), n = await (await fetch(t.toString(), {
44
45
  method: "GET",
45
46
  credentials: "include"
@@ -48,40 +49,40 @@ async function j(e) {
48
49
  throw new Error(n.error);
49
50
  return n;
50
51
  }
51
- function R(e) {
52
- return d({
52
+ function H(e) {
53
+ return u({
53
54
  queryKey: ["appLogs", e],
54
- queryFn: () => j(e),
55
+ queryFn: () => F(e),
55
56
  refetchOnMount: !0,
56
57
  retry: !1
57
58
  });
58
59
  }
59
- async function T(e) {
60
- var f, p;
60
+ async function A(e) {
61
+ var p, w;
61
62
  const t = await fetch(`${s}/settings/${e}/logs/download`, {
62
63
  method: "GET",
63
64
  credentials: "include"
64
65
  // headers: header,
65
66
  });
66
67
  if (!t.ok) {
67
- const i = await t.json();
68
- throw new Error(i.error);
68
+ const c = await t.json();
69
+ throw new Error(c.error);
69
70
  }
70
- const o = ((f = t.headers.get("content-disposition")) == null ? void 0 : f.split("filename=")[1]) || "app.log", n = (p = t.body) == null ? void 0 : p.getReader(), a = new ReadableStream({
71
- async start(i) {
71
+ const o = ((p = t.headers.get("content-disposition")) == null ? void 0 : p.split("filename=")[1]) || "app.log", n = (w = t.body) == null ? void 0 : w.getReader(), a = new ReadableStream({
72
+ async start(c) {
72
73
  for (; ; ) {
73
- const { done: w, value: g } = await n.read();
74
- if (w) break;
75
- i.enqueue(g);
74
+ const { done: g, value: h } = await n.read();
75
+ if (g) break;
76
+ c.enqueue(h);
76
77
  }
77
- i.close(), n.releaseLock();
78
+ c.close(), n.releaseLock();
78
79
  }
79
- }), u = await new Response(a).blob(), l = window.URL.createObjectURL(u), c = document.createElement("a");
80
- c.href = l, c.download = o, document.body.appendChild(c), c.click(), c.remove(), window.URL.revokeObjectURL(l);
80
+ }), l = await new Response(a).blob(), f = window.URL.createObjectURL(l), i = document.createElement("a");
81
+ i.href = f, i.download = o, document.body.appendChild(i), i.click(), i.remove(), window.URL.revokeObjectURL(f);
81
82
  }
82
- function q() {
83
+ function N() {
83
84
  return r({
84
- mutationFn: T,
85
+ mutationFn: A,
85
86
  onSuccess: (e) => {
86
87
  console.log("# Logs Downloaded! :", e);
87
88
  },
@@ -90,7 +91,7 @@ function q() {
90
91
  }
91
92
  });
92
93
  }
93
- async function F(e) {
94
+ async function E(e) {
94
95
  console.log("updatePayload :", e);
95
96
  const t = new Headers({ "Content-Type": "application/json", Accept: "application/json" }), n = await (await fetch(`${s}/settings/integration/validate`, {
96
97
  method: "POST",
@@ -102,40 +103,40 @@ async function F(e) {
102
103
  throw new Error(n.error);
103
104
  return n;
104
105
  }
105
- function P() {
106
+ function J() {
106
107
  return r({
107
- mutationFn: F,
108
+ mutationFn: E,
108
109
  onSuccess: (e) => {
109
110
  console.log("# Settings Updated! :", e);
110
111
  }
111
112
  });
112
113
  }
113
- async function A() {
114
+ async function O() {
114
115
  const e = await fetch(`${s}/setup/status`, { method: "GET" });
115
116
  if (!e.ok)
116
117
  throw new Error("Failed to get setup status");
117
118
  return e.json();
118
119
  }
119
- function G() {
120
- return d({
120
+ function K() {
121
+ return u({
121
122
  queryKey: ["setupStatus"],
122
- queryFn: A,
123
+ queryFn: O,
123
124
  retry: !1
124
125
  });
125
126
  }
126
- async function E(e) {
127
+ async function L(e) {
127
128
  return (await fetch(`${s}/setup/complete`, {
128
129
  method: "POST",
129
130
  headers: { "Content-Type": "application/json" },
130
131
  body: JSON.stringify(e)
131
132
  })).json();
132
133
  }
133
- function N() {
134
+ function M() {
134
135
  return r({
135
- mutationFn: E
136
+ mutationFn: L
136
137
  });
137
138
  }
138
- async function O(e) {
139
+ async function v(e) {
139
140
  const t = new Headers({ "Content-Type": "application/json", Accept: "application/json" }), o = await fetch(`${s}/settings/${e}/2fa/setup`, {
140
141
  method: "POST",
141
142
  headers: t,
@@ -147,9 +148,9 @@ async function O(e) {
147
148
  }
148
149
  return await o.json();
149
150
  }
150
- function H() {
151
+ function Q() {
151
152
  return r({
152
- mutationFn: O,
153
+ mutationFn: v,
153
154
  onSuccess: (e) => {
154
155
  console.log("# 2FA setup data fetched successfully! :", e);
155
156
  },
@@ -158,7 +159,7 @@ function H() {
158
159
  }
159
160
  });
160
161
  }
161
- async function b({ code: e, id: t }) {
162
+ async function $({ code: e, id: t }) {
162
163
  const o = new Headers({ "Content-Type": "application/json", Accept: "application/json" }), n = await fetch(`${s}/settings/${t}/2fa/finalize`, {
163
164
  method: "POST",
164
165
  headers: o,
@@ -166,14 +167,14 @@ async function b({ code: e, id: t }) {
166
167
  body: JSON.stringify({ code: e })
167
168
  });
168
169
  if (!n.ok) {
169
- const u = await n.json();
170
- throw new Error(u.error);
170
+ const l = await n.json();
171
+ throw new Error(l.error);
171
172
  }
172
173
  return await n.json();
173
174
  }
174
- function J() {
175
+ function x() {
175
176
  return r({
176
- mutationFn: b,
177
+ mutationFn: $,
177
178
  onSuccess: (e) => {
178
179
  console.log("# 2FA verification successful! :", e);
179
180
  },
@@ -182,7 +183,7 @@ function J() {
182
183
  }
183
184
  });
184
185
  }
185
- async function v({ code: e }) {
186
+ async function b({ code: e }) {
186
187
  const t = new Headers({ "Content-Type": "application/json", Accept: "application/json" }), o = await fetch(`${s}/user/verify-otp`, {
187
188
  method: "POST",
188
189
  headers: t,
@@ -195,10 +196,10 @@ async function v({ code: e }) {
195
196
  }
196
197
  return await o.json();
197
198
  }
198
- function K() {
199
- const e = h();
199
+ function I() {
200
+ const e = m();
200
201
  return r({
201
- mutationFn: v,
202
+ mutationFn: b,
202
203
  onSuccess: (t) => {
203
204
  console.log("# 2FA verification successful! :", t), e("/");
204
205
  },
@@ -207,26 +208,56 @@ function K() {
207
208
  }
208
209
  });
209
210
  }
211
+ async function k() {
212
+ const e = await fetch(`${s}/settings/version/latest`, {
213
+ method: "GET",
214
+ credentials: "include"
215
+ });
216
+ if (!e.ok) {
217
+ const o = await e.json();
218
+ throw new Error(o.error);
219
+ }
220
+ return await e.json();
221
+ }
222
+ const d = 1e3 * 60 * 60 * 6, { persisterFn: R } = S({
223
+ storage: window.localStorage,
224
+ maxAge: d
225
+ });
226
+ function _() {
227
+ return u({
228
+ queryKey: ["latestVersion"],
229
+ queryFn: () => k(),
230
+ persister: R,
231
+ retry: !1,
232
+ staleTime: d,
233
+ gcTime: d,
234
+ refetchOnWindowFocus: !1,
235
+ refetchOnReconnect: !1,
236
+ refetchOnMount: !1
237
+ });
238
+ }
210
239
  export {
211
- E as completeSetup,
212
- T as downloadAppLogs,
213
- j as getAppLogs,
214
- m as getSettings,
215
- A as getSetupStatus,
216
- O as setupTwoFactorAuth,
217
- S as updateSettings,
218
- N as useCompleteSetup,
219
- R as useGetAppLogs,
220
- q as useGetDownloadAppLogs,
221
- k as useGetSettings,
222
- G as useSetupStatus,
223
- H as useSetupTwoFactorAuth,
224
- C as useUpdateSettings,
225
- P as useValidateIntegration,
226
- J as useVerifyTwoFactorAuth,
227
- K as useVerifyTwoFactorOTP,
228
- F as validateIntegration,
229
- b as verifyTwoFactorAuth,
230
- v as verifyTwoFactorOTP
240
+ k as checkLatestVersion,
241
+ L as completeSetup,
242
+ A as downloadAppLogs,
243
+ F as getAppLogs,
244
+ j as getSettings,
245
+ O as getSetupStatus,
246
+ v as setupTwoFactorAuth,
247
+ T as updateSettings,
248
+ _ as useCheckLatestVersion,
249
+ M as useCompleteSetup,
250
+ H as useGetAppLogs,
251
+ N as useGetDownloadAppLogs,
252
+ G as useGetSettings,
253
+ K as useSetupStatus,
254
+ Q as useSetupTwoFactorAuth,
255
+ V as useUpdateSettings,
256
+ J as useValidateIntegration,
257
+ x as useVerifyTwoFactorAuth,
258
+ I as useVerifyTwoFactorOTP,
259
+ E as validateIntegration,
260
+ $ as verifyTwoFactorAuth,
261
+ b as verifyTwoFactorOTP
231
262
  };
232
263
  //# sourceMappingURL=settings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings.js","sources":["../../src/services/settings.ts"],"sourcesContent":["import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\r\nimport { API_URL } from '../utils/constants';\r\nimport { useNavigate } from 'react-router';\r\n\r\n// ============== Settings API ==============\r\n\r\n// Get Settings\r\nexport async function getSettings() {\r\n const url = new URL(`${API_URL}/settings`);\r\n const res = await fetch(url.toString(), {\r\n method: 'GET',\r\n credentials: 'include',\r\n });\r\n const data = await res.json();\r\n if (!data.success) {\r\n throw new Error(data.error);\r\n }\r\n return data;\r\n}\r\n\r\nexport function useGetSettings() {\r\n return useQuery({\r\n queryKey: ['settings'],\r\n queryFn: () => getSettings(),\r\n refetchOnMount: true,\r\n retry: false,\r\n staleTime: 0,\r\n });\r\n}\r\n\r\nexport async function updateSettings(updatePayload: { id: string; settings: Record<string, string | boolean | number> }) {\r\n const header = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/settings/${updatePayload.id}`, {\r\n method: 'PUT',\r\n credentials: 'include',\r\n headers: header,\r\n body: JSON.stringify(updatePayload),\r\n });\r\n const data = await res.json();\r\n console.log('data :', data);\r\n if (!data.success) {\r\n throw new Error(data.error);\r\n }\r\n return data;\r\n}\r\n\r\nexport function useUpdateSettings() {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: updateSettings,\r\n onSuccess: (res) => {\r\n // TODO: Should Display a Notification Bubble.\r\n console.log('# Settings Updated! :', res);\r\n queryClient.invalidateQueries({ queryKey: ['settings'] });\r\n },\r\n });\r\n}\r\n\r\n// Get App Logs\r\nexport async function getAppLogs(settingsID: string) {\r\n const url = new URL(`${API_URL}/settings/${settingsID}/logs`);\r\n\r\n const res = await fetch(url.toString(), {\r\n method: 'GET',\r\n credentials: 'include',\r\n });\r\n const data = await res.json();\r\n if (!data.success) {\r\n throw new Error(data.error);\r\n }\r\n return data;\r\n}\r\n\r\nexport function useGetAppLogs(settingsID: string) {\r\n return useQuery({\r\n queryKey: ['appLogs', settingsID],\r\n queryFn: () => getAppLogs(settingsID),\r\n refetchOnMount: true,\r\n retry: false,\r\n });\r\n}\r\n\r\n// Download Plan Logs\r\nexport async function downloadAppLogs(settingsID: string) {\r\n const res = await fetch(`${API_URL}/settings/${settingsID}/logs/download`, {\r\n method: 'GET',\r\n credentials: 'include',\r\n // headers: header,\r\n });\r\n // Check if response is ok\r\n if (!res.ok) {\r\n const data = await res.json();\r\n throw new Error(data.error);\r\n }\r\n\r\n const filename = res.headers.get('content-disposition')?.split('filename=')[1] || `app.log`;\r\n\r\n // Use streams API\r\n const reader = res.body?.getReader();\r\n const stream = new ReadableStream({\r\n async start(controller) {\r\n while (true) {\r\n const { done, value } = await reader!.read();\r\n if (done) break;\r\n controller.enqueue(value);\r\n }\r\n controller.close();\r\n reader!.releaseLock();\r\n },\r\n });\r\n\r\n // Create download from stream\r\n const blob = await new Response(stream).blob();\r\n const url = window.URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n link.href = url;\r\n link.download = filename;\r\n document.body.appendChild(link);\r\n link.click();\r\n link.remove();\r\n window.URL.revokeObjectURL(url);\r\n}\r\n\r\nexport function useGetDownloadAppLogs() {\r\n return useMutation({\r\n mutationFn: downloadAppLogs,\r\n onSuccess: (res) => {\r\n console.log('# Logs Downloaded! :', res);\r\n },\r\n onError: (res) => {\r\n console.log('# Logs Download Failed! :', res);\r\n },\r\n });\r\n}\r\n\r\nexport async function validateIntegration(updatePayload: {\r\n settingsID: number;\r\n type: string;\r\n settings: Record<string, string | boolean | number>;\r\n test: Record<string, string | boolean | number>;\r\n}) {\r\n console.log('updatePayload :', updatePayload);\r\n const header = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/settings/integration/validate`, {\r\n method: 'POST',\r\n credentials: 'include',\r\n headers: header,\r\n body: JSON.stringify(updatePayload),\r\n });\r\n const data = await res.json();\r\n console.log('data :', data);\r\n if (!data.success) {\r\n throw new Error(data.error);\r\n }\r\n return data;\r\n}\r\n\r\nexport function useValidateIntegration() {\r\n return useMutation({\r\n mutationFn: validateIntegration,\r\n onSuccess: (res) => {\r\n // TODO: Should Display a Notification Bubble.\r\n console.log('# Settings Updated! :', res);\r\n },\r\n });\r\n}\r\n\r\n// ============== Setup API ==============\r\n\r\nexport interface SetupStatus {\r\n setupPending: boolean;\r\n isBinary: boolean;\r\n requiresKeyringSetup: boolean;\r\n platform: string;\r\n}\r\n\r\nexport interface SetupCredentials {\r\n encryptionKey: string;\r\n userName: string;\r\n userPassword: string;\r\n}\r\n\r\n// Fetch setup status\r\nexport async function getSetupStatus(): Promise<{ success: boolean; data: SetupStatus }> {\r\n const res = await fetch(`${API_URL}/setup/status`, { method: 'GET' });\r\n if (!res.ok) {\r\n throw new Error('Failed to get setup status');\r\n }\r\n return res.json();\r\n}\r\n\r\nexport function useSetupStatus() {\r\n return useQuery({\r\n queryKey: ['setupStatus'],\r\n queryFn: getSetupStatus,\r\n retry: false,\r\n });\r\n}\r\n\r\n// Complete setup\r\nexport async function completeSetup(credentials: SetupCredentials): Promise<{ success: boolean; message?: string; error?: string }> {\r\n const res = await fetch(`${API_URL}/setup/complete`, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(credentials),\r\n });\r\n return res.json();\r\n}\r\n\r\nexport function useCompleteSetup() {\r\n return useMutation({\r\n mutationFn: completeSetup,\r\n });\r\n}\r\n\r\n// Two-Factor Authentication (2FA) Setup and Verification\r\n\r\nexport async function setupTwoFactorAuth(id: number) {\r\n const headers = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/settings/${id}/2fa/setup`, {\r\n method: 'POST',\r\n headers,\r\n credentials: 'include',\r\n });\r\n // Check if response is ok\r\n if (!res.ok) {\r\n const data = await res.json();\r\n throw new Error(data.error);\r\n }\r\n const data = await res.json();\r\n return data;\r\n}\r\n\r\nexport function useSetupTwoFactorAuth() {\r\n return useMutation({\r\n mutationFn: setupTwoFactorAuth,\r\n onSuccess: (res) => {\r\n console.log('# 2FA setup data fetched successfully! :', res);\r\n },\r\n onError: (res) => {\r\n console.log('# 2FA setup data fetch failed! :', res);\r\n },\r\n });\r\n}\r\nexport async function verifyTwoFactorAuth({ code, id }: { code: string; id: number }) {\r\n const headers = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/settings/${id}/2fa/finalize`, {\r\n method: 'POST',\r\n headers,\r\n credentials: 'include',\r\n body: JSON.stringify({ code }),\r\n });\r\n // Check if response is ok\r\n if (!res.ok) {\r\n const data = await res.json();\r\n throw new Error(data.error);\r\n }\r\n const data = await res.json();\r\n return data;\r\n}\r\n\r\nexport function useVerifyTwoFactorAuth() {\r\n return useMutation({\r\n mutationFn: verifyTwoFactorAuth,\r\n onSuccess: (res) => {\r\n console.log('# 2FA verification successful! :', res);\r\n },\r\n onError: (res) => {\r\n console.log('# 2FA verification failed! :', res);\r\n },\r\n });\r\n}\r\n\r\nexport async function verifyTwoFactorOTP({ code }: { code: string }) {\r\n const headers = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/user/verify-otp`, {\r\n method: 'POST',\r\n headers,\r\n credentials: 'include',\r\n body: JSON.stringify({ code }),\r\n });\r\n // Check if response is ok\r\n if (!res.ok) {\r\n const data = await res.json();\r\n throw new Error(data.error);\r\n }\r\n const data = await res.json();\r\n return data;\r\n}\r\n\r\nexport function useVerifyTwoFactorOTP() {\r\n const navigate = useNavigate();\r\n return useMutation({\r\n mutationFn: verifyTwoFactorOTP,\r\n onSuccess: (res) => {\r\n console.log('# 2FA verification successful! :', res);\r\n navigate('/');\r\n },\r\n onError: (res) => {\r\n console.log('# 2FA verification failed! :', res);\r\n },\r\n });\r\n}\r\n"],"names":["getSettings","url","API_URL","data","useGetSettings","useQuery","updateSettings","updatePayload","header","useUpdateSettings","queryClient","useQueryClient","useMutation","res","getAppLogs","settingsID","useGetAppLogs","downloadAppLogs","filename","_a","reader","_b","stream","controller","done","value","blob","link","useGetDownloadAppLogs","validateIntegration","useValidateIntegration","getSetupStatus","useSetupStatus","completeSetup","credentials","useCompleteSetup","setupTwoFactorAuth","id","headers","useSetupTwoFactorAuth","verifyTwoFactorAuth","code","useVerifyTwoFactorAuth","verifyTwoFactorOTP","useVerifyTwoFactorOTP","navigate","useNavigate"],"mappings":"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"}
1
+ {"version":3,"file":"settings.js","sources":["../../src/services/settings.ts"],"sourcesContent":["import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\r\nimport { experimental_createQueryPersister } from '@tanstack/react-query-persist-client';\r\nimport { API_URL } from '../utils/constants';\r\nimport { useNavigate } from 'react-router';\r\n\r\n// ============== Settings API ==============\r\n\r\n// Get Settings\r\nexport async function getSettings() {\r\n const url = new URL(`${API_URL}/settings`);\r\n const res = await fetch(url.toString(), {\r\n method: 'GET',\r\n credentials: 'include',\r\n });\r\n const data = await res.json();\r\n if (!data.success) {\r\n throw new Error(data.error);\r\n }\r\n return data;\r\n}\r\n\r\nexport function useGetSettings() {\r\n return useQuery({\r\n queryKey: ['settings'],\r\n queryFn: () => getSettings(),\r\n refetchOnMount: true,\r\n retry: false,\r\n staleTime: 0,\r\n });\r\n}\r\n\r\nexport async function updateSettings(updatePayload: { id: string; settings: Record<string, string | boolean | number> }) {\r\n const header = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/settings/${updatePayload.id}`, {\r\n method: 'PUT',\r\n credentials: 'include',\r\n headers: header,\r\n body: JSON.stringify(updatePayload),\r\n });\r\n const data = await res.json();\r\n console.log('data :', data);\r\n if (!data.success) {\r\n throw new Error(data.error);\r\n }\r\n return data;\r\n}\r\n\r\nexport function useUpdateSettings() {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: updateSettings,\r\n onSuccess: (res) => {\r\n // TODO: Should Display a Notification Bubble.\r\n console.log('# Settings Updated! :', res);\r\n queryClient.invalidateQueries({ queryKey: ['settings'] });\r\n },\r\n });\r\n}\r\n\r\n// Get App Logs\r\nexport async function getAppLogs(settingsID: string) {\r\n const url = new URL(`${API_URL}/settings/${settingsID}/logs`);\r\n\r\n const res = await fetch(url.toString(), {\r\n method: 'GET',\r\n credentials: 'include',\r\n });\r\n const data = await res.json();\r\n if (!data.success) {\r\n throw new Error(data.error);\r\n }\r\n return data;\r\n}\r\n\r\nexport function useGetAppLogs(settingsID: string) {\r\n return useQuery({\r\n queryKey: ['appLogs', settingsID],\r\n queryFn: () => getAppLogs(settingsID),\r\n refetchOnMount: true,\r\n retry: false,\r\n });\r\n}\r\n\r\n// Download Plan Logs\r\nexport async function downloadAppLogs(settingsID: string) {\r\n const res = await fetch(`${API_URL}/settings/${settingsID}/logs/download`, {\r\n method: 'GET',\r\n credentials: 'include',\r\n // headers: header,\r\n });\r\n // Check if response is ok\r\n if (!res.ok) {\r\n const data = await res.json();\r\n throw new Error(data.error);\r\n }\r\n\r\n const filename = res.headers.get('content-disposition')?.split('filename=')[1] || `app.log`;\r\n\r\n // Use streams API\r\n const reader = res.body?.getReader();\r\n const stream = new ReadableStream({\r\n async start(controller) {\r\n while (true) {\r\n const { done, value } = await reader!.read();\r\n if (done) break;\r\n controller.enqueue(value);\r\n }\r\n controller.close();\r\n reader!.releaseLock();\r\n },\r\n });\r\n\r\n // Create download from stream\r\n const blob = await new Response(stream).blob();\r\n const url = window.URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n link.href = url;\r\n link.download = filename;\r\n document.body.appendChild(link);\r\n link.click();\r\n link.remove();\r\n window.URL.revokeObjectURL(url);\r\n}\r\n\r\nexport function useGetDownloadAppLogs() {\r\n return useMutation({\r\n mutationFn: downloadAppLogs,\r\n onSuccess: (res) => {\r\n console.log('# Logs Downloaded! :', res);\r\n },\r\n onError: (res) => {\r\n console.log('# Logs Download Failed! :', res);\r\n },\r\n });\r\n}\r\n\r\nexport async function validateIntegration(updatePayload: {\r\n settingsID: number;\r\n type: string;\r\n settings: Record<string, string | boolean | number>;\r\n test: Record<string, string | boolean | number>;\r\n}) {\r\n console.log('updatePayload :', updatePayload);\r\n const header = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/settings/integration/validate`, {\r\n method: 'POST',\r\n credentials: 'include',\r\n headers: header,\r\n body: JSON.stringify(updatePayload),\r\n });\r\n const data = await res.json();\r\n console.log('data :', data);\r\n if (!data.success) {\r\n throw new Error(data.error);\r\n }\r\n return data;\r\n}\r\n\r\nexport function useValidateIntegration() {\r\n return useMutation({\r\n mutationFn: validateIntegration,\r\n onSuccess: (res) => {\r\n // TODO: Should Display a Notification Bubble.\r\n console.log('# Settings Updated! :', res);\r\n },\r\n });\r\n}\r\n\r\n// ============== Setup API ==============\r\n\r\nexport interface SetupStatus {\r\n setupPending: boolean;\r\n isBinary: boolean;\r\n requiresKeyringSetup: boolean;\r\n platform: string;\r\n}\r\n\r\nexport interface SetupCredentials {\r\n encryptionKey: string;\r\n userName: string;\r\n userPassword: string;\r\n}\r\n\r\n// Fetch setup status\r\nexport async function getSetupStatus(): Promise<{ success: boolean; data: SetupStatus }> {\r\n const res = await fetch(`${API_URL}/setup/status`, { method: 'GET' });\r\n if (!res.ok) {\r\n throw new Error('Failed to get setup status');\r\n }\r\n return res.json();\r\n}\r\n\r\nexport function useSetupStatus() {\r\n return useQuery({\r\n queryKey: ['setupStatus'],\r\n queryFn: getSetupStatus,\r\n retry: false,\r\n });\r\n}\r\n\r\n// Complete setup\r\nexport async function completeSetup(credentials: SetupCredentials): Promise<{ success: boolean; message?: string; error?: string }> {\r\n const res = await fetch(`${API_URL}/setup/complete`, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(credentials),\r\n });\r\n return res.json();\r\n}\r\n\r\nexport function useCompleteSetup() {\r\n return useMutation({\r\n mutationFn: completeSetup,\r\n });\r\n}\r\n\r\n// Two-Factor Authentication (2FA) Setup and Verification\r\n\r\nexport async function setupTwoFactorAuth(id: number) {\r\n const headers = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/settings/${id}/2fa/setup`, {\r\n method: 'POST',\r\n headers,\r\n credentials: 'include',\r\n });\r\n // Check if response is ok\r\n if (!res.ok) {\r\n const data = await res.json();\r\n throw new Error(data.error);\r\n }\r\n const data = await res.json();\r\n return data;\r\n}\r\n\r\nexport function useSetupTwoFactorAuth() {\r\n return useMutation({\r\n mutationFn: setupTwoFactorAuth,\r\n onSuccess: (res) => {\r\n console.log('# 2FA setup data fetched successfully! :', res);\r\n },\r\n onError: (res) => {\r\n console.log('# 2FA setup data fetch failed! :', res);\r\n },\r\n });\r\n}\r\nexport async function verifyTwoFactorAuth({ code, id }: { code: string; id: number }) {\r\n const headers = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/settings/${id}/2fa/finalize`, {\r\n method: 'POST',\r\n headers,\r\n credentials: 'include',\r\n body: JSON.stringify({ code }),\r\n });\r\n // Check if response is ok\r\n if (!res.ok) {\r\n const data = await res.json();\r\n throw new Error(data.error);\r\n }\r\n const data = await res.json();\r\n return data;\r\n}\r\n\r\nexport function useVerifyTwoFactorAuth() {\r\n return useMutation({\r\n mutationFn: verifyTwoFactorAuth,\r\n onSuccess: (res) => {\r\n console.log('# 2FA verification successful! :', res);\r\n },\r\n onError: (res) => {\r\n console.log('# 2FA verification failed! :', res);\r\n },\r\n });\r\n}\r\n\r\nexport async function verifyTwoFactorOTP({ code }: { code: string }) {\r\n const headers = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/user/verify-otp`, {\r\n method: 'POST',\r\n headers,\r\n credentials: 'include',\r\n body: JSON.stringify({ code }),\r\n });\r\n // Check if response is ok\r\n if (!res.ok) {\r\n const data = await res.json();\r\n throw new Error(data.error);\r\n }\r\n const data = await res.json();\r\n return data;\r\n}\r\n\r\nexport function useVerifyTwoFactorOTP() {\r\n const navigate = useNavigate();\r\n return useMutation({\r\n mutationFn: verifyTwoFactorOTP,\r\n onSuccess: (res) => {\r\n console.log('# 2FA verification successful! :', res);\r\n navigate('/');\r\n },\r\n onError: (res) => {\r\n console.log('# 2FA verification failed! :', res);\r\n },\r\n });\r\n}\r\n\r\n// check latest version\r\nexport async function checkLatestVersion() {\r\n const res = await fetch(`${API_URL}/settings/version/latest`, {\r\n method: 'GET',\r\n credentials: 'include',\r\n });\r\n if (!res.ok) {\r\n const data = await res.json();\r\n throw new Error(data.error);\r\n }\r\n const data = await res.json();\r\n return data;\r\n}\r\n\r\nconst SIX_HOURS = 1000 * 60 * 60 * 6;\r\n\r\nconst { persisterFn: latestVersionPersister } = experimental_createQueryPersister({\r\n storage: window.localStorage,\r\n maxAge: SIX_HOURS,\r\n});\r\n\r\nexport function useCheckLatestVersion() {\r\n return useQuery({\r\n queryKey: ['latestVersion'],\r\n queryFn: () => checkLatestVersion(),\r\n persister: latestVersionPersister,\r\n retry: false,\r\n staleTime: SIX_HOURS,\r\n gcTime: SIX_HOURS,\r\n refetchOnWindowFocus: false,\r\n refetchOnReconnect: false,\r\n refetchOnMount: false,\r\n });\r\n}\r\n"],"names":["getSettings","url","API_URL","data","useGetSettings","useQuery","updateSettings","updatePayload","header","useUpdateSettings","queryClient","useQueryClient","useMutation","res","getAppLogs","settingsID","useGetAppLogs","downloadAppLogs","filename","_a","reader","_b","stream","controller","done","value","blob","link","useGetDownloadAppLogs","validateIntegration","useValidateIntegration","getSetupStatus","useSetupStatus","completeSetup","credentials","useCompleteSetup","setupTwoFactorAuth","id","headers","useSetupTwoFactorAuth","verifyTwoFactorAuth","code","useVerifyTwoFactorAuth","verifyTwoFactorOTP","useVerifyTwoFactorOTP","navigate","useNavigate","checkLatestVersion","SIX_HOURS","latestVersionPersister","experimental_createQueryPersister","useCheckLatestVersion"],"mappings":"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"}
@@ -2,7 +2,7 @@ interface LoginCredentials {
2
2
  username: string;
3
3
  password: string;
4
4
  }
5
- export type InstallType = 'docker' | 'binary' | 'dev';
5
+ export type InstallType = 'docker' | 'binary' | 'server' | 'dev';
6
6
  export declare function validateAuth(): Promise<any>;
7
7
  export declare function useAuth(): import("@tanstack/react-query").UseQueryResult<any, Error>;
8
8
  export declare function loginUser(credentials: LoginCredentials): Promise<any>;
@@ -1 +1 @@
1
- {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/services/users.ts"],"names":[],"mappings":"AAIA,UAAU,gBAAgB;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;AAGtD,wBAAsB,YAAY,iBAyBjC;AAED,wBAAgB,OAAO,+DAOtB;AAGD,wBAAsB,SAAS,CAAC,WAAW,EAAE,gBAAgB,gBAa5D;AAGD,wBAAgB,QAAQ,6FAcvB;AAGD,wBAAsB,UAAU,iBAU/B;AAED,wBAAgB,SAAS,iFAUxB"}
1
+ {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/services/users.ts"],"names":[],"mappings":"AAIA,UAAU,gBAAgB;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;AAGjE,wBAAsB,YAAY,iBAyBjC;AAED,wBAAgB,OAAO,+DAOtB;AAGD,wBAAsB,SAAS,CAAC,WAAW,EAAE,gBAAgB,gBAa5D;AAGD,wBAAgB,QAAQ,6FAcvB;AAGD,wBAAsB,UAAU,iBAU/B;AAED,wBAAgB,SAAS,iFAUxB"}
@@ -1 +1 @@
1
- {"version":3,"file":"users.js","sources":["../../src/services/users.ts"],"sourcesContent":["import { API_URL } from '../utils/constants';\r\nimport { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\r\nimport { useNavigate } from 'react-router';\r\n\r\ninterface LoginCredentials {\r\n username: string;\r\n password: string;\r\n}\r\n\r\nexport type InstallType = 'docker' | 'binary' | 'dev';\r\n\r\n//VALIDATE USER\r\nexport async function validateAuth() {\r\n const res = await fetch(`${API_URL}/user/validate`, { method: 'GET', credentials: 'include' });\r\n\r\n // Read headers before checking status - middleware sets these on all responses\r\n const appVersion = res.headers.get('x-app-version');\r\n const serverOS = res.headers.get('x-server-os');\r\n const installType = (res.headers.get('x-install-type') || 'dev') as InstallType;\r\n const setupPending = res.headers.get('x-setup-pending') === '1';\r\n\r\n (window as any).plutonVersion = appVersion || 'unknown';\r\n (window as any).plutonServerOS = serverOS || 'unknown';\r\n (window as any).plutonInstallType = installType;\r\n (window as any).plutonSetupPending = setupPending;\r\n\r\n if (!res.ok) {\r\n throw new Error('Invalid authentication');\r\n }\r\n\r\n const data = await res.json();\r\n return {\r\n ...data,\r\n appVersion,\r\n installType,\r\n setupPending,\r\n };\r\n}\r\n\r\nexport function useAuth() {\r\n return useQuery({\r\n queryKey: ['auth'],\r\n queryFn: validateAuth,\r\n refetchOnMount: true,\r\n retry: false,\r\n });\r\n}\r\n\r\n// LOGIN USER\r\nexport async function loginUser(credentials: LoginCredentials) {\r\n const header = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/user/login`, {\r\n method: 'POST',\r\n credentials: 'include',\r\n headers: header,\r\n body: JSON.stringify(credentials),\r\n });\r\n const data = await res.json();\r\n if (!data.success) {\r\n throw new Error(data.error);\r\n }\r\n return data;\r\n}\r\n\r\n// Add this new hook\r\nexport function useLogin() {\r\n const navigate = useNavigate();\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: loginUser,\r\n onSuccess: (res) => {\r\n queryClient.removeQueries({ queryKey: ['auth'] });\r\n if (res.totpRequired) {\r\n navigate('/login/verify-otp');\r\n } else {\r\n navigate('/');\r\n }\r\n },\r\n });\r\n}\r\n\r\n// LOGOUT USER\r\nexport async function logoutUser() {\r\n const res = await fetch(`${API_URL}/user/logout`, {\r\n method: 'POST',\r\n credentials: 'include',\r\n });\r\n const data = await res.json();\r\n if (!data.success) {\r\n throw new Error(data.error);\r\n }\r\n return data;\r\n}\r\n\r\nexport function useLogout() {\r\n const navigate = useNavigate();\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: logoutUser,\r\n onSuccess: () => {\r\n queryClient.removeQueries({ queryKey: ['auth'] });\r\n navigate('/login');\r\n },\r\n });\r\n}\r\n"],"names":["validateAuth","res","API_URL","appVersion","serverOS","installType","setupPending","useAuth","useQuery","loginUser","credentials","header","data","useLogin","navigate","useNavigate","queryClient","useQueryClient","useMutation","logoutUser","useLogout"],"mappings":";;;AAYA,eAAsBA,IAAe;AAClC,QAAMC,IAAM,MAAM,MAAM,GAAGC,CAAO,kBAAkB,EAAE,QAAQ,OAAO,aAAa,UAAA,CAAW,GAGvFC,IAAaF,EAAI,QAAQ,IAAI,eAAe,GAC5CG,IAAWH,EAAI,QAAQ,IAAI,aAAa,GACxCI,IAAeJ,EAAI,QAAQ,IAAI,gBAAgB,KAAK,OACpDK,IAAeL,EAAI,QAAQ,IAAI,iBAAiB,MAAM;AAO5D,MALC,OAAe,gBAAgBE,KAAc,WAC7C,OAAe,iBAAiBC,KAAY,WAC5C,OAAe,oBAAoBC,GACnC,OAAe,qBAAqBC,GAEjC,CAACL,EAAI;AACN,UAAM,IAAI,MAAM,wBAAwB;AAI3C,SAAO;AAAA,IACJ,GAFU,MAAMA,EAAI,KAAA;AAAA,IAGpB,YAAAE;AAAA,IACA,aAAAE;AAAA,IACA,cAAAC;AAAA,EAAA;AAEN;AAEO,SAASC,IAAU;AACvB,SAAOC,EAAS;AAAA,IACb,UAAU,CAAC,MAAM;AAAA,IACjB,SAASR;AAAA,IACT,gBAAgB;AAAA,IAChB,OAAO;AAAA,EAAA,CACT;AACJ;AAGA,eAAsBS,EAAUC,GAA+B;AAC5D,QAAMC,IAAS,IAAI,QAAQ,EAAE,gBAAgB,oBAAoB,QAAQ,oBAAoB,GAOvFC,IAAO,OAND,MAAM,MAAM,GAAGV,CAAO,eAAe;AAAA,IAC9C,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAASS;AAAA,IACT,MAAM,KAAK,UAAUD,CAAW;AAAA,EAAA,CAClC,GACsB,KAAA;AACvB,MAAI,CAACE,EAAK;AACP,UAAM,IAAI,MAAMA,EAAK,KAAK;AAE7B,SAAOA;AACV;AAGO,SAASC,IAAW;AACxB,QAAMC,IAAWC,EAAA,GACXC,IAAcC,EAAA;AACpB,SAAOC,EAAY;AAAA,IAChB,YAAYT;AAAA,IACZ,WAAW,CAACR,MAAQ;AACjB,MAAAe,EAAY,cAAc,EAAE,UAAU,CAAC,MAAM,GAAG,GAC5Cf,EAAI,eACLa,EAAS,mBAAmB,IAE5BA,EAAS,GAAG;AAAA,IAElB;AAAA,EAAA,CACF;AACJ;AAGA,eAAsBK,IAAa;AAKhC,QAAMP,IAAO,OAJD,MAAM,MAAM,GAAGV,CAAO,gBAAgB;AAAA,IAC/C,QAAQ;AAAA,IACR,aAAa;AAAA,EAAA,CACf,GACsB,KAAA;AACvB,MAAI,CAACU,EAAK;AACP,UAAM,IAAI,MAAMA,EAAK,KAAK;AAE7B,SAAOA;AACV;AAEO,SAASQ,IAAY;AACzB,QAAMN,IAAWC,EAAA,GACXC,IAAcC,EAAA;AACpB,SAAOC,EAAY;AAAA,IAChB,YAAYC;AAAA,IACZ,WAAW,MAAM;AACd,MAAAH,EAAY,cAAc,EAAE,UAAU,CAAC,MAAM,GAAG,GAChDF,EAAS,QAAQ;AAAA,IACpB;AAAA,EAAA,CACF;AACJ;"}
1
+ {"version":3,"file":"users.js","sources":["../../src/services/users.ts"],"sourcesContent":["import { API_URL } from '../utils/constants';\r\nimport { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\r\nimport { useNavigate } from 'react-router';\r\n\r\ninterface LoginCredentials {\r\n username: string;\r\n password: string;\r\n}\r\n\r\nexport type InstallType = 'docker' | 'binary' | 'server' | 'dev';\r\n\r\n//VALIDATE USER\r\nexport async function validateAuth() {\r\n const res = await fetch(`${API_URL}/user/validate`, { method: 'GET', credentials: 'include' });\r\n\r\n // Read headers before checking status - middleware sets these on all responses\r\n const appVersion = res.headers.get('x-app-version');\r\n const serverOS = res.headers.get('x-server-os');\r\n const installType = (res.headers.get('x-install-type') || 'dev') as InstallType;\r\n const setupPending = res.headers.get('x-setup-pending') === '1';\r\n\r\n (window as any).plutonVersion = appVersion || 'unknown';\r\n (window as any).plutonServerOS = serverOS || 'unknown';\r\n (window as any).plutonInstallType = installType;\r\n (window as any).plutonSetupPending = setupPending;\r\n\r\n if (!res.ok) {\r\n throw new Error('Invalid authentication');\r\n }\r\n\r\n const data = await res.json();\r\n return {\r\n ...data,\r\n appVersion,\r\n installType,\r\n setupPending,\r\n };\r\n}\r\n\r\nexport function useAuth() {\r\n return useQuery({\r\n queryKey: ['auth'],\r\n queryFn: validateAuth,\r\n refetchOnMount: true,\r\n retry: false,\r\n });\r\n}\r\n\r\n// LOGIN USER\r\nexport async function loginUser(credentials: LoginCredentials) {\r\n const header = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/user/login`, {\r\n method: 'POST',\r\n credentials: 'include',\r\n headers: header,\r\n body: JSON.stringify(credentials),\r\n });\r\n const data = await res.json();\r\n if (!data.success) {\r\n throw new Error(data.error);\r\n }\r\n return data;\r\n}\r\n\r\n// Add this new hook\r\nexport function useLogin() {\r\n const navigate = useNavigate();\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: loginUser,\r\n onSuccess: (res) => {\r\n queryClient.removeQueries({ queryKey: ['auth'] });\r\n if (res.totpRequired) {\r\n navigate('/login/verify-otp');\r\n } else {\r\n navigate('/');\r\n }\r\n },\r\n });\r\n}\r\n\r\n// LOGOUT USER\r\nexport async function logoutUser() {\r\n const res = await fetch(`${API_URL}/user/logout`, {\r\n method: 'POST',\r\n credentials: 'include',\r\n });\r\n const data = await res.json();\r\n if (!data.success) {\r\n throw new Error(data.error);\r\n }\r\n return data;\r\n}\r\n\r\nexport function useLogout() {\r\n const navigate = useNavigate();\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: logoutUser,\r\n onSuccess: () => {\r\n queryClient.removeQueries({ queryKey: ['auth'] });\r\n navigate('/login');\r\n },\r\n });\r\n}\r\n"],"names":["validateAuth","res","API_URL","appVersion","serverOS","installType","setupPending","useAuth","useQuery","loginUser","credentials","header","data","useLogin","navigate","useNavigate","queryClient","useQueryClient","useMutation","logoutUser","useLogout"],"mappings":";;;AAYA,eAAsBA,IAAe;AAClC,QAAMC,IAAM,MAAM,MAAM,GAAGC,CAAO,kBAAkB,EAAE,QAAQ,OAAO,aAAa,UAAA,CAAW,GAGvFC,IAAaF,EAAI,QAAQ,IAAI,eAAe,GAC5CG,IAAWH,EAAI,QAAQ,IAAI,aAAa,GACxCI,IAAeJ,EAAI,QAAQ,IAAI,gBAAgB,KAAK,OACpDK,IAAeL,EAAI,QAAQ,IAAI,iBAAiB,MAAM;AAO5D,MALC,OAAe,gBAAgBE,KAAc,WAC7C,OAAe,iBAAiBC,KAAY,WAC5C,OAAe,oBAAoBC,GACnC,OAAe,qBAAqBC,GAEjC,CAACL,EAAI;AACN,UAAM,IAAI,MAAM,wBAAwB;AAI3C,SAAO;AAAA,IACJ,GAFU,MAAMA,EAAI,KAAA;AAAA,IAGpB,YAAAE;AAAA,IACA,aAAAE;AAAA,IACA,cAAAC;AAAA,EAAA;AAEN;AAEO,SAASC,IAAU;AACvB,SAAOC,EAAS;AAAA,IACb,UAAU,CAAC,MAAM;AAAA,IACjB,SAASR;AAAA,IACT,gBAAgB;AAAA,IAChB,OAAO;AAAA,EAAA,CACT;AACJ;AAGA,eAAsBS,EAAUC,GAA+B;AAC5D,QAAMC,IAAS,IAAI,QAAQ,EAAE,gBAAgB,oBAAoB,QAAQ,oBAAoB,GAOvFC,IAAO,OAND,MAAM,MAAM,GAAGV,CAAO,eAAe;AAAA,IAC9C,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAASS;AAAA,IACT,MAAM,KAAK,UAAUD,CAAW;AAAA,EAAA,CAClC,GACsB,KAAA;AACvB,MAAI,CAACE,EAAK;AACP,UAAM,IAAI,MAAMA,EAAK,KAAK;AAE7B,SAAOA;AACV;AAGO,SAASC,IAAW;AACxB,QAAMC,IAAWC,EAAA,GACXC,IAAcC,EAAA;AACpB,SAAOC,EAAY;AAAA,IAChB,YAAYT;AAAA,IACZ,WAAW,CAACR,MAAQ;AACjB,MAAAe,EAAY,cAAc,EAAE,UAAU,CAAC,MAAM,GAAG,GAC5Cf,EAAI,eACLa,EAAS,mBAAmB,IAE5BA,EAAS,GAAG;AAAA,IAElB;AAAA,EAAA,CACF;AACJ;AAGA,eAAsBK,IAAa;AAKhC,QAAMP,IAAO,OAJD,MAAM,MAAM,GAAGV,CAAO,gBAAgB;AAAA,IAC/C,QAAQ;AAAA,IACR,aAAa;AAAA,EAAA,CACf,GACsB,KAAA;AACvB,MAAI,CAACU,EAAK;AACP,UAAM,IAAI,MAAMA,EAAK,KAAK;AAE7B,SAAOA;AACV;AAEO,SAASQ,IAAY;AACzB,QAAMN,IAAWC,EAAA,GACXC,IAAcC,EAAA;AACpB,SAAOC,EAAY;AAAA,IAChB,YAAYC;AAAA,IACZ,WAAW,MAAM;AACd,MAAAH,EAAY,cAAc,EAAE,UAAU,CAAC,MAAM,GAAG,GAChDF,EAAS,QAAQ;AAAA,IACpB;AAAA,EAAA,CACF;AACJ;"}