@plutonhq/core-frontend 0.1.13 → 0.1.15
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/@types/backups.d.ts +26 -0
- package/dist-lib/@types/backups.d.ts.map +1 -1
- package/dist-lib/@types/devices.d.ts +7 -0
- package/dist-lib/@types/devices.d.ts.map +1 -1
- package/dist-lib/@types/plans.d.ts +21 -1
- package/dist-lib/@types/plans.d.ts.map +1 -1
- package/dist-lib/@types/restores.d.ts +2 -0
- package/dist-lib/@types/restores.d.ts.map +1 -1
- package/dist-lib/components/Device/DeviceBackups/DeviceBackups.d.ts +3 -2
- package/dist-lib/components/Device/DeviceBackups/DeviceBackups.d.ts.map +1 -1
- package/dist-lib/components/Device/DeviceBackups/DeviceBackups.js +73 -85
- package/dist-lib/components/Device/DeviceBackups/DeviceBackups.js.map +1 -1
- package/dist-lib/components/Plan/BackupEvents/BackupEvents.d.ts.map +1 -1
- package/dist-lib/components/Plan/BackupEvents/BackupEvents.js +88 -50
- package/dist-lib/components/Plan/BackupEvents/BackupEvents.js.map +1 -1
- package/dist-lib/components/Plan/BackupEvents/BackupEvents.module.scss.js +70 -38
- package/dist-lib/components/Plan/BackupEvents/BackupEvents.module.scss.js.map +1 -1
- package/dist-lib/components/Plan/BackupProgress/BackupProgress.d.ts.map +1 -1
- package/dist-lib/components/Plan/BackupProgress/BackupProgress.js +166 -123
- package/dist-lib/components/Plan/BackupProgress/BackupProgress.js.map +1 -1
- package/dist-lib/components/Plan/BackupProgress/BackupProgress.module.scss.js +64 -30
- package/dist-lib/components/Plan/BackupProgress/BackupProgress.module.scss.js.map +1 -1
- package/dist-lib/components/Plan/Backups/Backups.d.ts +8 -1
- package/dist-lib/components/Plan/Backups/Backups.d.ts.map +1 -1
- package/dist-lib/components/Plan/Backups/Backups.js +154 -125
- package/dist-lib/components/Plan/Backups/Backups.js.map +1 -1
- package/dist-lib/components/Plan/EditPlan/EditPlan.d.ts.map +1 -1
- package/dist-lib/components/Plan/EditPlan/EditPlan.js +11 -10
- package/dist-lib/components/Plan/EditPlan/EditPlan.js.map +1 -1
- package/dist-lib/components/Plan/Mirrors/MirrorDetails.d.ts +12 -0
- package/dist-lib/components/Plan/Mirrors/MirrorDetails.d.ts.map +1 -0
- package/dist-lib/components/Plan/Mirrors/MirrorDetails.js +68 -0
- package/dist-lib/components/Plan/Mirrors/MirrorDetails.js.map +1 -0
- package/dist-lib/components/Plan/Mirrors/MirrorDetails.module.scss.js +26 -0
- package/dist-lib/components/Plan/Mirrors/MirrorDetails.module.scss.js.map +1 -0
- package/dist-lib/components/Plan/Mirrors/MirrorStatusBadge.d.ts +11 -0
- package/dist-lib/components/Plan/Mirrors/MirrorStatusBadge.d.ts.map +1 -0
- package/dist-lib/components/Plan/Mirrors/MirrorStatusBadge.js +38 -0
- package/dist-lib/components/Plan/Mirrors/MirrorStatusBadge.js.map +1 -0
- package/dist-lib/components/Plan/Mirrors/MirrorStatusBadge.module.scss.js +16 -0
- package/dist-lib/components/Plan/Mirrors/MirrorStatusBadge.module.scss.js.map +1 -0
- package/dist-lib/components/Plan/Mirrors/MirrorStorageSelector.d.ts +14 -0
- package/dist-lib/components/Plan/Mirrors/MirrorStorageSelector.d.ts.map +1 -0
- package/dist-lib/components/Plan/Mirrors/MirrorStorageSelector.js +54 -0
- package/dist-lib/components/Plan/Mirrors/MirrorStorageSelector.js.map +1 -0
- package/dist-lib/components/Plan/Mirrors/MirrorStorageSelector.module.scss.js +26 -0
- package/dist-lib/components/Plan/Mirrors/MirrorStorageSelector.module.scss.js.map +1 -0
- package/dist-lib/components/Plan/Mirrors/MirrorStorageSelectorModal.d.ts +15 -0
- package/dist-lib/components/Plan/Mirrors/MirrorStorageSelectorModal.d.ts.map +1 -0
- package/dist-lib/components/Plan/Mirrors/MirrorStorageSelectorModal.js +34 -0
- package/dist-lib/components/Plan/Mirrors/MirrorStorageSelectorModal.js.map +1 -0
- package/dist-lib/components/Plan/PlanBackups/PlanBackups.d.ts.map +1 -1
- package/dist-lib/components/Plan/PlanBackups/PlanBackups.js +20 -17
- package/dist-lib/components/Plan/PlanBackups/PlanBackups.js.map +1 -1
- package/dist-lib/components/Plan/PlanForm/PlanForm.d.ts +2 -1
- package/dist-lib/components/Plan/PlanForm/PlanForm.d.ts.map +1 -1
- package/dist-lib/components/Plan/PlanForm/PlanForm.js +121 -94
- package/dist-lib/components/Plan/PlanForm/PlanForm.js.map +1 -1
- package/dist-lib/components/Plan/PlanIntegrity/PlanIntegrity.d.ts +16 -0
- package/dist-lib/components/Plan/PlanIntegrity/PlanIntegrity.d.ts.map +1 -0
- package/dist-lib/components/Plan/PlanIntegrity/PlanIntegrity.js +115 -0
- package/dist-lib/components/Plan/PlanIntegrity/PlanIntegrity.js.map +1 -0
- package/dist-lib/components/Plan/PlanIntegrity/PlanIntegrity.module.scss.js +26 -0
- package/dist-lib/components/Plan/PlanIntegrity/PlanIntegrity.module.scss.js.map +1 -0
- package/dist-lib/components/Plan/PlanItems/PlanItem.d.ts.map +1 -1
- package/dist-lib/components/Plan/PlanItems/PlanItem.js +58 -59
- package/dist-lib/components/Plan/PlanItems/PlanItem.js.map +1 -1
- package/dist-lib/components/Plan/PlanPendingBackup/PlanPendingBackup.d.ts +2 -2
- package/dist-lib/components/Plan/PlanPendingBackup/PlanPendingBackup.d.ts.map +1 -1
- package/dist-lib/components/Plan/PlanPendingBackup/PlanPendingBackup.js.map +1 -1
- package/dist-lib/components/Plan/PlanRemoveModal/PlanRemoveModal.js +8 -8
- package/dist-lib/components/Plan/PlanRemoveModal/PlanRemoveModal.js.map +1 -1
- package/dist-lib/components/Plan/PlanSettings/PlanReplicationSettings.d.ts +14 -0
- package/dist-lib/components/Plan/PlanSettings/PlanReplicationSettings.d.ts.map +1 -0
- package/dist-lib/components/Plan/PlanSettings/PlanReplicationSettings.js +290 -0
- package/dist-lib/components/Plan/PlanSettings/PlanReplicationSettings.js.map +1 -0
- package/dist-lib/components/Plan/PlanSettings/PlanReplicationSettings.module.scss.js +26 -0
- package/dist-lib/components/Plan/PlanSettings/PlanReplicationSettings.module.scss.js.map +1 -0
- package/dist-lib/components/Plan/PlanStats/PlanStats.d.ts.map +1 -1
- package/dist-lib/components/Plan/PlanStats/PlanStats.js +41 -42
- package/dist-lib/components/Plan/PlanStats/PlanStats.js.map +1 -1
- package/dist-lib/components/Plan/PlanStats/PlanStats.module.scss.js +5 -5
- package/dist-lib/components/Plan/PlanStorageInfo/PlanStorageInfo.d.ts +15 -0
- package/dist-lib/components/Plan/PlanStorageInfo/PlanStorageInfo.d.ts.map +1 -0
- package/dist-lib/components/Plan/PlanStorageInfo/PlanStorageInfo.js +69 -0
- package/dist-lib/components/Plan/PlanStorageInfo/PlanStorageInfo.js.map +1 -0
- package/dist-lib/components/Plan/PlanStorageInfo/PlanStorageInfo.module.scss.js +16 -0
- package/dist-lib/components/Plan/PlanStorageInfo/PlanStorageInfo.module.scss.js.map +1 -0
- package/dist-lib/components/Restore/RestoreWizard/RestoreConfirmStep.d.ts.map +1 -1
- package/dist-lib/components/Restore/RestoreWizard/RestoreConfirmStep.js +36 -34
- package/dist-lib/components/Restore/RestoreWizard/RestoreConfirmStep.js.map +1 -1
- package/dist-lib/components/Restore/RestoreWizard/RestorePreviewStep.d.ts.map +1 -1
- package/dist-lib/components/Restore/RestoreWizard/RestorePreviewStep.js +7 -5
- package/dist-lib/components/Restore/RestoreWizard/RestorePreviewStep.js.map +1 -1
- package/dist-lib/components/Restore/RestoreWizard/RestoreSettingsStep.d.ts +12 -4
- package/dist-lib/components/Restore/RestoreWizard/RestoreSettingsStep.d.ts.map +1 -1
- package/dist-lib/components/Restore/RestoreWizard/RestoreSettingsStep.js +44 -32
- package/dist-lib/components/Restore/RestoreWizard/RestoreSettingsStep.js.map +1 -1
- package/dist-lib/components/Restore/RestoreWizard/RestoreWizard.d.ts +5 -1
- package/dist-lib/components/Restore/RestoreWizard/RestoreWizard.d.ts.map +1 -1
- package/dist-lib/components/Restore/RestoreWizard/RestoreWizard.js +48 -44
- package/dist-lib/components/Restore/RestoreWizard/RestoreWizard.js.map +1 -1
- package/dist-lib/components/Restore/RestoreWizard/RestoreWizard.module.scss.js +32 -32
- package/dist-lib/components/Settings/GeneralSettings/GeneralSettings.d.ts +1 -1
- package/dist-lib/components/Settings/GeneralSettings/GeneralSettings.d.ts.map +1 -1
- package/dist-lib/components/Settings/GeneralSettings/GeneralSettings.js +52 -24
- package/dist-lib/components/Settings/GeneralSettings/GeneralSettings.js.map +1 -1
- package/dist-lib/components/Settings/IntegrationSettings/IntegrationSettings.d.ts.map +1 -1
- package/dist-lib/components/Settings/IntegrationSettings/IntegrationSettings.js +28 -19
- package/dist-lib/components/Settings/IntegrationSettings/IntegrationSettings.js.map +1 -1
- package/dist-lib/components/Settings/TwoFactorSetup/TwoFactorSetup.d.ts +7 -0
- package/dist-lib/components/Settings/TwoFactorSetup/TwoFactorSetup.d.ts.map +1 -0
- package/dist-lib/components/Settings/TwoFactorSetup/TwoFactorSetup.js +79 -0
- package/dist-lib/components/Settings/TwoFactorSetup/TwoFactorSetup.js.map +1 -0
- package/dist-lib/components/Settings/TwoFactorSetup/TwoFactorSetup.module.scss.js +24 -0
- package/dist-lib/components/Settings/TwoFactorSetup/TwoFactorSetup.module.scss.js.map +1 -0
- package/dist-lib/components/common/Icon/Icon.d.ts.map +1 -1
- package/dist-lib/components/common/Icon/Icon.js +11 -0
- package/dist-lib/components/common/Icon/Icon.js.map +1 -1
- package/dist-lib/components/common/PageHeader/PageHeader.module.scss.js +6 -6
- package/dist-lib/components/index.d.ts +6 -0
- package/dist-lib/components/index.d.ts.map +1 -1
- package/dist-lib/components.js +102 -90
- package/dist-lib/components.js.map +1 -1
- package/dist-lib/hooks/usePwaAutoUpdate.d.ts +11 -2
- package/dist-lib/hooks/usePwaAutoUpdate.d.ts.map +1 -1
- package/dist-lib/hooks/usePwaAutoUpdate.js +32 -10
- package/dist-lib/hooks/usePwaAutoUpdate.js.map +1 -1
- package/dist-lib/router.d.ts.map +1 -1
- package/dist-lib/router.js +46 -35
- package/dist-lib/router.js.map +1 -1
- package/dist-lib/routes/DeviceSingle/DeviceSingle.d.ts.map +1 -1
- package/dist-lib/routes/DeviceSingle/DeviceSingle.js +40 -40
- package/dist-lib/routes/DeviceSingle/DeviceSingle.js.map +1 -1
- package/dist-lib/routes/PlanSingle/PlanSingle.d.ts.map +1 -1
- package/dist-lib/routes/PlanSingle/PlanSingle.js +123 -98
- package/dist-lib/routes/PlanSingle/PlanSingle.js.map +1 -1
- package/dist-lib/services/backups.d.ts +15 -2
- package/dist-lib/services/backups.d.ts.map +1 -1
- package/dist-lib/services/backups.js +119 -100
- package/dist-lib/services/backups.js.map +1 -1
- package/dist-lib/services/plans.d.ts +20 -0
- package/dist-lib/services/plans.d.ts.map +1 -1
- package/dist-lib/services/plans.js +227 -172
- package/dist-lib/services/plans.js.map +1 -1
- package/dist-lib/services/restores.d.ts +10 -2
- package/dist-lib/services/restores.d.ts.map +1 -1
- package/dist-lib/services/restores.js +61 -57
- package/dist-lib/services/restores.js.map +1 -1
- package/dist-lib/services/settings.d.ts +16 -0
- package/dist-lib/services/settings.d.ts.map +1 -1
- package/dist-lib/services/settings.js +147 -68
- package/dist-lib/services/settings.js.map +1 -1
- package/dist-lib/services/users.d.ts.map +1 -1
- package/dist-lib/services/users.js +32 -32
- package/dist-lib/services/users.js.map +1 -1
- package/dist-lib/services.js +113 -101
- package/dist-lib/styles/core-frontend.css +1 -1
- package/dist-lib/utils/progressHelpers.d.ts +12 -1
- package/dist-lib/utils/progressHelpers.d.ts.map +1 -1
- package/dist-lib/utils/progressHelpers.js +121 -63
- package/dist-lib/utils/progressHelpers.js.map +1 -1
- package/dist-lib/utils.js +29 -28
- package/package.json +1 -1
- package/src/@types/backups.ts +28 -0
- package/src/@types/devices.ts +8 -0
- package/src/@types/plans.ts +23 -1
- package/src/@types/restores.ts +2 -0
- package/src/components/Device/DeviceBackups/DeviceBackups.tsx +11 -36
- package/src/components/Plan/BackupEvents/BackupEvents.module.scss +65 -0
- package/src/components/Plan/BackupEvents/BackupEvents.tsx +65 -4
- package/src/components/Plan/BackupProgress/BackupProgress.module.scss +121 -3
- package/src/components/Plan/BackupProgress/BackupProgress.tsx +149 -71
- package/src/components/Plan/Backups/Backups.tsx +52 -4
- package/src/components/Plan/EditPlan/EditPlan.tsx +1 -0
- package/src/components/Plan/Mirrors/MirrorDetails.module.scss +76 -0
- package/src/components/Plan/Mirrors/MirrorDetails.tsx +100 -0
- package/src/components/Plan/Mirrors/MirrorStatusBadge.module.scss +25 -0
- package/src/components/Plan/Mirrors/MirrorStatusBadge.tsx +65 -0
- package/src/components/Plan/Mirrors/MirrorStorageSelector.module.scss +97 -0
- package/src/components/Plan/Mirrors/MirrorStorageSelector.tsx +70 -0
- package/src/components/Plan/Mirrors/MirrorStorageSelectorModal.tsx +40 -0
- package/src/components/Plan/PlanBackups/PlanBackups.tsx +4 -1
- package/src/components/Plan/PlanForm/PlanForm.tsx +44 -17
- package/src/components/Plan/PlanIntegrity/PlanIntegrity.module.scss +110 -0
- package/src/components/Plan/PlanIntegrity/PlanIntegrity.tsx +187 -0
- package/src/components/Plan/PlanItems/PlanItem.tsx +3 -3
- package/src/components/Plan/PlanPendingBackup/PlanPendingBackup.tsx +2 -2
- package/src/components/Plan/PlanRemoveModal/PlanRemoveModal.tsx +1 -1
- package/src/components/Plan/PlanSettings/PlanReplicationSettings.module.scss +105 -0
- package/src/components/Plan/PlanSettings/PlanReplicationSettings.tsx +334 -0
- package/src/components/Plan/PlanStats/PlanStats.module.scss +1 -1
- package/src/components/Plan/PlanStats/PlanStats.tsx +8 -8
- package/src/components/Plan/PlanStorageInfo/PlanStorageInfo.module.scss +43 -0
- package/src/components/Plan/PlanStorageInfo/PlanStorageInfo.tsx +83 -0
- package/src/components/Restore/RestoreWizard/RestoreConfirmStep.tsx +2 -0
- package/src/components/Restore/RestoreWizard/RestorePreviewStep.tsx +2 -0
- package/src/components/Restore/RestoreWizard/RestoreSettingsStep.tsx +36 -13
- package/src/components/Restore/RestoreWizard/RestoreWizard.module.scss +4 -0
- package/src/components/Restore/RestoreWizard/RestoreWizard.tsx +9 -1
- package/src/components/Settings/GeneralSettings/GeneralSettings.tsx +38 -2
- package/src/components/Settings/IntegrationSettings/IntegrationSettings.tsx +9 -2
- package/src/components/Settings/TwoFactorSetup/TwoFactorSetup.module.scss +62 -0
- package/src/components/Settings/TwoFactorSetup/TwoFactorSetup.tsx +102 -0
- package/src/components/common/Icon/Icon.tsx +10 -1
- package/src/components/common/PageHeader/PageHeader.module.scss +3 -0
- package/src/components/index.ts +8 -0
- package/src/hooks/usePwaAutoUpdate.ts +51 -11
- package/src/router.tsx +26 -17
- package/src/routes/DeviceSingle/DeviceSingle.tsx +3 -3
- package/src/routes/PlanSingle/PlanSingle.tsx +21 -0
- package/src/services/backups.ts +32 -9
- package/src/services/plans.ts +75 -0
- package/src/services/restores.ts +10 -2
- package/src/services/settings.ts +90 -0
- package/src/services/users.ts +14 -5
- package/src/utils/progressHelpers.ts +85 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { useQuery as
|
|
1
|
+
import { useQuery as d, useQueryClient as y, useMutation as r } from "@tanstack/react-query";
|
|
2
2
|
import { API_URL as s } from "../utils/constants.js";
|
|
3
|
-
|
|
3
|
+
import { useNavigate as h } from "react-router";
|
|
4
|
+
async function m() {
|
|
4
5
|
const e = new URL(`${s}/settings`), o = await (await fetch(e.toString(), {
|
|
5
6
|
method: "GET",
|
|
6
7
|
credentials: "include"
|
|
@@ -9,78 +10,78 @@ async function h() {
|
|
|
9
10
|
throw new Error(o.error);
|
|
10
11
|
return o;
|
|
11
12
|
}
|
|
12
|
-
function
|
|
13
|
-
return
|
|
13
|
+
function k() {
|
|
14
|
+
return d({
|
|
14
15
|
queryKey: ["settings"],
|
|
15
|
-
queryFn: () =>
|
|
16
|
+
queryFn: () => m(),
|
|
16
17
|
refetchOnMount: !0,
|
|
17
18
|
retry: !1,
|
|
18
19
|
staleTime: 0
|
|
19
20
|
});
|
|
20
21
|
}
|
|
21
|
-
async function
|
|
22
|
-
const
|
|
22
|
+
async function S(e) {
|
|
23
|
+
const t = new Headers({ "Content-Type": "application/json", Accept: "application/json" }), n = await (await fetch(`${s}/settings/${e.id}`, {
|
|
23
24
|
method: "PUT",
|
|
24
25
|
credentials: "include",
|
|
25
|
-
headers:
|
|
26
|
+
headers: t,
|
|
26
27
|
body: JSON.stringify(e)
|
|
27
28
|
})).json();
|
|
28
|
-
if (console.log("data :",
|
|
29
|
-
throw new Error(
|
|
30
|
-
return
|
|
29
|
+
if (console.log("data :", n), !n.success)
|
|
30
|
+
throw new Error(n.error);
|
|
31
|
+
return n;
|
|
31
32
|
}
|
|
32
|
-
function
|
|
33
|
+
function C() {
|
|
33
34
|
const e = y();
|
|
34
|
-
return
|
|
35
|
-
mutationFn:
|
|
36
|
-
onSuccess: (
|
|
37
|
-
console.log("# Settings Updated! :",
|
|
35
|
+
return r({
|
|
36
|
+
mutationFn: S,
|
|
37
|
+
onSuccess: (t) => {
|
|
38
|
+
console.log("# Settings Updated! :", t), e.invalidateQueries({ queryKey: ["settings"] });
|
|
38
39
|
}
|
|
39
40
|
});
|
|
40
41
|
}
|
|
41
|
-
async function
|
|
42
|
-
const
|
|
42
|
+
async function j(e) {
|
|
43
|
+
const t = new URL(`${s}/settings/${e}/logs`), n = await (await fetch(t.toString(), {
|
|
43
44
|
method: "GET",
|
|
44
45
|
credentials: "include"
|
|
45
46
|
})).json();
|
|
46
|
-
if (!
|
|
47
|
-
throw new Error(
|
|
48
|
-
return
|
|
47
|
+
if (!n.success)
|
|
48
|
+
throw new Error(n.error);
|
|
49
|
+
return n;
|
|
49
50
|
}
|
|
50
|
-
function
|
|
51
|
-
return
|
|
51
|
+
function R(e) {
|
|
52
|
+
return d({
|
|
52
53
|
queryKey: ["appLogs", e],
|
|
53
|
-
queryFn: () =>
|
|
54
|
+
queryFn: () => j(e),
|
|
54
55
|
refetchOnMount: !0,
|
|
55
56
|
retry: !1
|
|
56
57
|
});
|
|
57
58
|
}
|
|
58
|
-
async function
|
|
59
|
-
var
|
|
60
|
-
const
|
|
59
|
+
async function T(e) {
|
|
60
|
+
var f, p;
|
|
61
|
+
const t = await fetch(`${s}/settings/${e}/logs/download`, {
|
|
61
62
|
method: "GET",
|
|
62
63
|
credentials: "include"
|
|
63
64
|
// headers: header,
|
|
64
65
|
});
|
|
65
|
-
if (!
|
|
66
|
-
const
|
|
67
|
-
throw new Error(
|
|
66
|
+
if (!t.ok) {
|
|
67
|
+
const i = await t.json();
|
|
68
|
+
throw new Error(i.error);
|
|
68
69
|
}
|
|
69
|
-
const o = ((
|
|
70
|
-
async start(
|
|
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
72
|
for (; ; ) {
|
|
72
|
-
const { done: w, value:
|
|
73
|
+
const { done: w, value: g } = await n.read();
|
|
73
74
|
if (w) break;
|
|
74
|
-
|
|
75
|
+
i.enqueue(g);
|
|
75
76
|
}
|
|
76
|
-
|
|
77
|
+
i.close(), n.releaseLock();
|
|
77
78
|
}
|
|
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
81
|
}
|
|
81
|
-
function
|
|
82
|
-
return
|
|
83
|
-
mutationFn:
|
|
82
|
+
function q() {
|
|
83
|
+
return r({
|
|
84
|
+
mutationFn: T,
|
|
84
85
|
onSuccess: (e) => {
|
|
85
86
|
console.log("# Logs Downloaded! :", e);
|
|
86
87
|
},
|
|
@@ -89,36 +90,36 @@ function F() {
|
|
|
89
90
|
}
|
|
90
91
|
});
|
|
91
92
|
}
|
|
92
|
-
async function
|
|
93
|
+
async function F(e) {
|
|
93
94
|
console.log("updatePayload :", e);
|
|
94
|
-
const
|
|
95
|
+
const t = new Headers({ "Content-Type": "application/json", Accept: "application/json" }), n = await (await fetch(`${s}/settings/integration/validate`, {
|
|
95
96
|
method: "POST",
|
|
96
97
|
credentials: "include",
|
|
97
|
-
headers:
|
|
98
|
+
headers: t,
|
|
98
99
|
body: JSON.stringify(e)
|
|
99
100
|
})).json();
|
|
100
|
-
if (console.log("data :",
|
|
101
|
-
throw new Error(
|
|
102
|
-
return
|
|
101
|
+
if (console.log("data :", n), !n.success)
|
|
102
|
+
throw new Error(n.error);
|
|
103
|
+
return n;
|
|
103
104
|
}
|
|
104
|
-
function
|
|
105
|
-
return
|
|
106
|
-
mutationFn:
|
|
105
|
+
function P() {
|
|
106
|
+
return r({
|
|
107
|
+
mutationFn: F,
|
|
107
108
|
onSuccess: (e) => {
|
|
108
109
|
console.log("# Settings Updated! :", e);
|
|
109
110
|
}
|
|
110
111
|
});
|
|
111
112
|
}
|
|
112
|
-
async function
|
|
113
|
+
async function A() {
|
|
113
114
|
const e = await fetch(`${s}/setup/status`, { method: "GET" });
|
|
114
115
|
if (!e.ok)
|
|
115
116
|
throw new Error("Failed to get setup status");
|
|
116
117
|
return e.json();
|
|
117
118
|
}
|
|
118
|
-
function
|
|
119
|
-
return
|
|
119
|
+
function G() {
|
|
120
|
+
return d({
|
|
120
121
|
queryKey: ["setupStatus"],
|
|
121
|
-
queryFn:
|
|
122
|
+
queryFn: A,
|
|
122
123
|
retry: !1
|
|
123
124
|
});
|
|
124
125
|
}
|
|
@@ -129,25 +130,103 @@ async function E(e) {
|
|
|
129
130
|
body: JSON.stringify(e)
|
|
130
131
|
})).json();
|
|
131
132
|
}
|
|
132
|
-
function
|
|
133
|
-
return
|
|
133
|
+
function N() {
|
|
134
|
+
return r({
|
|
134
135
|
mutationFn: E
|
|
135
136
|
});
|
|
136
137
|
}
|
|
138
|
+
async function O(e) {
|
|
139
|
+
const t = new Headers({ "Content-Type": "application/json", Accept: "application/json" }), o = await fetch(`${s}/settings/${e}/2fa/setup`, {
|
|
140
|
+
method: "POST",
|
|
141
|
+
headers: t,
|
|
142
|
+
credentials: "include"
|
|
143
|
+
});
|
|
144
|
+
if (!o.ok) {
|
|
145
|
+
const a = await o.json();
|
|
146
|
+
throw new Error(a.error);
|
|
147
|
+
}
|
|
148
|
+
return await o.json();
|
|
149
|
+
}
|
|
150
|
+
function H() {
|
|
151
|
+
return r({
|
|
152
|
+
mutationFn: O,
|
|
153
|
+
onSuccess: (e) => {
|
|
154
|
+
console.log("# 2FA setup data fetched successfully! :", e);
|
|
155
|
+
},
|
|
156
|
+
onError: (e) => {
|
|
157
|
+
console.log("# 2FA setup data fetch failed! :", e);
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
async function b({ code: e, id: t }) {
|
|
162
|
+
const o = new Headers({ "Content-Type": "application/json", Accept: "application/json" }), n = await fetch(`${s}/settings/${t}/2fa/finalize`, {
|
|
163
|
+
method: "POST",
|
|
164
|
+
headers: o,
|
|
165
|
+
credentials: "include",
|
|
166
|
+
body: JSON.stringify({ code: e })
|
|
167
|
+
});
|
|
168
|
+
if (!n.ok) {
|
|
169
|
+
const u = await n.json();
|
|
170
|
+
throw new Error(u.error);
|
|
171
|
+
}
|
|
172
|
+
return await n.json();
|
|
173
|
+
}
|
|
174
|
+
function J() {
|
|
175
|
+
return r({
|
|
176
|
+
mutationFn: b,
|
|
177
|
+
onSuccess: (e) => {
|
|
178
|
+
console.log("# 2FA verification successful! :", e);
|
|
179
|
+
},
|
|
180
|
+
onError: (e) => {
|
|
181
|
+
console.log("# 2FA verification failed! :", e);
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
async function v({ code: e }) {
|
|
186
|
+
const t = new Headers({ "Content-Type": "application/json", Accept: "application/json" }), o = await fetch(`${s}/user/verify-otp`, {
|
|
187
|
+
method: "POST",
|
|
188
|
+
headers: t,
|
|
189
|
+
credentials: "include",
|
|
190
|
+
body: JSON.stringify({ code: e })
|
|
191
|
+
});
|
|
192
|
+
if (!o.ok) {
|
|
193
|
+
const a = await o.json();
|
|
194
|
+
throw new Error(a.error);
|
|
195
|
+
}
|
|
196
|
+
return await o.json();
|
|
197
|
+
}
|
|
198
|
+
function K() {
|
|
199
|
+
const e = h();
|
|
200
|
+
return r({
|
|
201
|
+
mutationFn: v,
|
|
202
|
+
onSuccess: (t) => {
|
|
203
|
+
console.log("# 2FA verification successful! :", t), e("/");
|
|
204
|
+
},
|
|
205
|
+
onError: (t) => {
|
|
206
|
+
console.log("# 2FA verification failed! :", t);
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
}
|
|
137
210
|
export {
|
|
138
211
|
E as completeSetup,
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
k as
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
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
|
|
152
231
|
};
|
|
153
232
|
//# 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\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"],"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"],"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 { 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 +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,
|
|
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,27 +1,27 @@
|
|
|
1
|
-
import { API_URL as
|
|
2
|
-
import { useQuery as i, useMutation as
|
|
1
|
+
import { API_URL as r } from "../utils/constants.js";
|
|
2
|
+
import { useQuery as c, useQueryClient as i, useMutation as u } from "@tanstack/react-query";
|
|
3
3
|
import { useNavigate as a } from "react-router";
|
|
4
|
-
async function
|
|
5
|
-
const e = await fetch(`${
|
|
6
|
-
if (!e.ok)
|
|
4
|
+
async function d() {
|
|
5
|
+
const e = await fetch(`${r}/user/validate`, { method: "GET", credentials: "include" }), t = e.headers.get("x-app-version"), o = e.headers.get("x-server-os"), n = e.headers.get("x-install-type") || "dev", s = e.headers.get("x-setup-pending") === "1";
|
|
6
|
+
if (window.plutonVersion = t || "unknown", window.plutonServerOS = o || "unknown", window.plutonInstallType = n, window.plutonSetupPending = s, !e.ok)
|
|
7
7
|
throw new Error("Invalid authentication");
|
|
8
|
-
|
|
9
|
-
return window.plutonVersion = t || "unknown", window.plutonServerOS = r || "unknown", window.plutonInstallType = n, {
|
|
8
|
+
return {
|
|
10
9
|
...await e.json(),
|
|
11
10
|
appVersion: t,
|
|
12
|
-
installType: n
|
|
11
|
+
installType: n,
|
|
12
|
+
setupPending: s
|
|
13
13
|
};
|
|
14
14
|
}
|
|
15
|
-
function
|
|
16
|
-
return
|
|
15
|
+
function g() {
|
|
16
|
+
return c({
|
|
17
17
|
queryKey: ["auth"],
|
|
18
|
-
queryFn:
|
|
18
|
+
queryFn: d,
|
|
19
19
|
refetchOnMount: !0,
|
|
20
20
|
retry: !1
|
|
21
21
|
});
|
|
22
22
|
}
|
|
23
|
-
async function
|
|
24
|
-
const t = new Headers({ "Content-Type": "application/json", Accept: "application/json" }), n = await (await fetch(`${
|
|
23
|
+
async function l(e) {
|
|
24
|
+
const t = new Headers({ "Content-Type": "application/json", Accept: "application/json" }), n = await (await fetch(`${r}/user/login`, {
|
|
25
25
|
method: "POST",
|
|
26
26
|
credentials: "include",
|
|
27
27
|
headers: t,
|
|
@@ -31,17 +31,17 @@ async function c(e) {
|
|
|
31
31
|
throw new Error(n.error);
|
|
32
32
|
return n;
|
|
33
33
|
}
|
|
34
|
-
function
|
|
35
|
-
const e = a();
|
|
36
|
-
return
|
|
37
|
-
mutationFn:
|
|
38
|
-
onSuccess: (
|
|
39
|
-
|
|
34
|
+
function v() {
|
|
35
|
+
const e = a(), t = i();
|
|
36
|
+
return u({
|
|
37
|
+
mutationFn: l,
|
|
38
|
+
onSuccess: (o) => {
|
|
39
|
+
t.removeQueries({ queryKey: ["auth"] }), o.totpRequired ? e("/login/verify-otp") : e("/");
|
|
40
40
|
}
|
|
41
41
|
});
|
|
42
42
|
}
|
|
43
|
-
async function
|
|
44
|
-
const t = await (await fetch(`${
|
|
43
|
+
async function p() {
|
|
44
|
+
const t = await (await fetch(`${r}/user/logout`, {
|
|
45
45
|
method: "POST",
|
|
46
46
|
credentials: "include"
|
|
47
47
|
})).json();
|
|
@@ -49,21 +49,21 @@ async function l() {
|
|
|
49
49
|
throw new Error(t.error);
|
|
50
50
|
return t;
|
|
51
51
|
}
|
|
52
|
-
function
|
|
53
|
-
const e = a();
|
|
54
|
-
return
|
|
55
|
-
mutationFn:
|
|
52
|
+
function m() {
|
|
53
|
+
const e = a(), t = i();
|
|
54
|
+
return u({
|
|
55
|
+
mutationFn: p,
|
|
56
56
|
onSuccess: () => {
|
|
57
|
-
e("/login");
|
|
57
|
+
t.removeQueries({ queryKey: ["auth"] }), e("/login");
|
|
58
58
|
}
|
|
59
59
|
});
|
|
60
60
|
}
|
|
61
61
|
export {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
62
|
+
l as loginUser,
|
|
63
|
+
p as logoutUser,
|
|
64
|
+
g as useAuth,
|
|
65
|
+
v as useLogin,
|
|
66
|
+
m as useLogout,
|
|
67
|
+
d as validateAuth
|
|
68
68
|
};
|
|
69
69
|
//# sourceMappingURL=users.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"users.js","sources":["../../src/services/users.ts"],"sourcesContent":["import { API_URL } from '../utils/constants';\r\nimport { useQuery, useMutation } 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
|
|
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;"}
|