@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.
- package/dist-lib/components/App/Footer/Footer.d.ts +2 -1
- package/dist-lib/components/App/Footer/Footer.d.ts.map +1 -1
- package/dist-lib/components/App/Footer/Footer.js +29 -18
- package/dist-lib/components/App/Footer/Footer.js.map +1 -1
- package/dist-lib/node_modules/.pnpm/@tanstack_query-core@5.96.0/node_modules/@tanstack/query-core/build/modern/notifyManager.js +68 -0
- package/dist-lib/node_modules/.pnpm/@tanstack_query-core@5.96.0/node_modules/@tanstack/query-core/build/modern/notifyManager.js.map +1 -0
- package/dist-lib/node_modules/.pnpm/@tanstack_query-core@5.96.0/node_modules/@tanstack/query-core/build/modern/timeoutManager.js +7 -0
- package/dist-lib/node_modules/.pnpm/@tanstack_query-core@5.96.0/node_modules/@tanstack/query-core/build/modern/timeoutManager.js.map +1 -0
- package/dist-lib/node_modules/.pnpm/@tanstack_query-core@5.96.0/node_modules/@tanstack/query-core/build/modern/utils.js +55 -0
- package/dist-lib/node_modules/.pnpm/@tanstack_query-core@5.96.0/node_modules/@tanstack/query-core/build/modern/utils.js.map +1 -0
- 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
- 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
- package/dist-lib/router.d.ts.map +1 -1
- package/dist-lib/router.js +42 -39
- package/dist-lib/router.js.map +1 -1
- package/dist-lib/services/settings.d.ts +2 -0
- package/dist-lib/services/settings.d.ts.map +1 -1
- package/dist-lib/services/settings.js +100 -69
- package/dist-lib/services/settings.js.map +1 -1
- package/dist-lib/services/users.d.ts +1 -1
- package/dist-lib/services/users.d.ts.map +1 -1
- package/dist-lib/services/users.js.map +1 -1
- package/dist-lib/services.js +61 -59
- package/dist-lib/utils/helpers.d.ts +1 -0
- package/dist-lib/utils/helpers.d.ts.map +1 -1
- package/dist-lib/utils/helpers.js +74 -70
- package/dist-lib/utils/helpers.js.map +1 -1
- package/dist-lib/utils.js +28 -27
- package/package.json +5 -4
- package/src/components/App/Footer/Footer.tsx +17 -2
- package/src/router.tsx +6 -1
- package/src/services/settings.ts +36 -0
- package/src/services/users.ts +1 -1
- 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":"
|
|
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
|
|
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
|
|
4
|
-
|
|
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
|
|
14
|
-
return
|
|
14
|
+
function G() {
|
|
15
|
+
return u({
|
|
15
16
|
queryKey: ["settings"],
|
|
16
|
-
queryFn: () =>
|
|
17
|
+
queryFn: () => j(),
|
|
17
18
|
refetchOnMount: !0,
|
|
18
19
|
retry: !1,
|
|
19
20
|
staleTime: 0
|
|
20
21
|
});
|
|
21
22
|
}
|
|
22
|
-
async function
|
|
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
|
|
34
|
+
function V() {
|
|
34
35
|
const e = y();
|
|
35
36
|
return r({
|
|
36
|
-
mutationFn:
|
|
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
|
|
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
|
|
52
|
-
return
|
|
52
|
+
function H(e) {
|
|
53
|
+
return u({
|
|
53
54
|
queryKey: ["appLogs", e],
|
|
54
|
-
queryFn: () =>
|
|
55
|
+
queryFn: () => F(e),
|
|
55
56
|
refetchOnMount: !0,
|
|
56
57
|
retry: !1
|
|
57
58
|
});
|
|
58
59
|
}
|
|
59
|
-
async function
|
|
60
|
-
var
|
|
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
|
|
68
|
-
throw new Error(
|
|
68
|
+
const c = await t.json();
|
|
69
|
+
throw new Error(c.error);
|
|
69
70
|
}
|
|
70
|
-
const o = ((
|
|
71
|
-
async start(
|
|
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:
|
|
74
|
-
if (
|
|
75
|
-
|
|
74
|
+
const { done: g, value: h } = await n.read();
|
|
75
|
+
if (g) break;
|
|
76
|
+
c.enqueue(h);
|
|
76
77
|
}
|
|
77
|
-
|
|
78
|
+
c.close(), n.releaseLock();
|
|
78
79
|
}
|
|
79
|
-
}),
|
|
80
|
-
|
|
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
|
|
83
|
+
function N() {
|
|
83
84
|
return r({
|
|
84
|
-
mutationFn:
|
|
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
|
|
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
|
|
106
|
+
function J() {
|
|
106
107
|
return r({
|
|
107
|
-
mutationFn:
|
|
108
|
+
mutationFn: E,
|
|
108
109
|
onSuccess: (e) => {
|
|
109
110
|
console.log("# Settings Updated! :", e);
|
|
110
111
|
}
|
|
111
112
|
});
|
|
112
113
|
}
|
|
113
|
-
async function
|
|
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
|
|
120
|
-
return
|
|
120
|
+
function K() {
|
|
121
|
+
return u({
|
|
121
122
|
queryKey: ["setupStatus"],
|
|
122
|
-
queryFn:
|
|
123
|
+
queryFn: O,
|
|
123
124
|
retry: !1
|
|
124
125
|
});
|
|
125
126
|
}
|
|
126
|
-
async function
|
|
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
|
|
134
|
+
function M() {
|
|
134
135
|
return r({
|
|
135
|
-
mutationFn:
|
|
136
|
+
mutationFn: L
|
|
136
137
|
});
|
|
137
138
|
}
|
|
138
|
-
async function
|
|
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
|
|
151
|
+
function Q() {
|
|
151
152
|
return r({
|
|
152
|
-
mutationFn:
|
|
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
|
|
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
|
|
170
|
-
throw new 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
|
|
175
|
+
function x() {
|
|
175
176
|
return r({
|
|
176
|
-
mutationFn:
|
|
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
|
|
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
|
|
199
|
-
const e =
|
|
199
|
+
function I() {
|
|
200
|
+
const e = m();
|
|
200
201
|
return r({
|
|
201
|
-
mutationFn:
|
|
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
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
O as
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
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;
|
|
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;"}
|