@plutonhq/core-frontend 0.1.6 → 0.1.7
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/Plan/Backups/Backups.module.scss.js +44 -42
- package/dist-lib/components/Plan/Backups/Backups.module.scss.js.map +1 -1
- package/dist-lib/components/Plan/PlanPendingBackup/PlanPendingBackup.d.ts +3 -2
- package/dist-lib/components/Plan/PlanPendingBackup/PlanPendingBackup.d.ts.map +1 -1
- package/dist-lib/components/Plan/PlanPendingBackup/PlanPendingBackup.js +29 -22
- package/dist-lib/components/Plan/PlanPendingBackup/PlanPendingBackup.js.map +1 -1
- package/dist-lib/components/Plan/PlanProgress/PlanProgress.d.ts +2 -1
- package/dist-lib/components/Plan/PlanProgress/PlanProgress.d.ts.map +1 -1
- package/dist-lib/components/Plan/PlanProgress/PlanProgress.js +22 -18
- package/dist-lib/components/Plan/PlanProgress/PlanProgress.js.map +1 -1
- package/dist-lib/components/Plan/Restores/Restores.js +5 -5
- package/dist-lib/components/Plan/Restores/Restores.js.map +1 -1
- package/dist-lib/components/Restore/RestoreFileSelector/RestoreFileSelector.js +73 -73
- package/dist-lib/components/Restore/RestoreFileSelector/RestoreFileSelector.js.map +1 -1
- package/dist-lib/components/Restore/RestoreWizard/RestoreConfirmStep.d.ts.map +1 -1
- package/dist-lib/components/Restore/RestoreWizard/RestoreConfirmStep.js +50 -50
- package/dist-lib/components/Restore/RestoreWizard/RestoreConfirmStep.js.map +1 -1
- package/dist-lib/components/Restore/RestoreWizard/RestorePreviewStep.js +8 -8
- package/dist-lib/components/Restore/RestoreWizard/RestorePreviewStep.js.map +1 -1
- package/dist-lib/components/Restore/RestoreWizard/RestoreWizard.module.scss.js +34 -36
- package/dist-lib/components/Restore/RestoreWizard/RestoreWizard.module.scss.js.map +1 -1
- package/dist-lib/components/Restore/RestoredFileBrowser/RestoredFileBrowser.d.ts +2 -1
- package/dist-lib/components/Restore/RestoredFileBrowser/RestoredFileBrowser.d.ts.map +1 -1
- package/dist-lib/components/Restore/RestoredFileBrowser/RestoredFileBrowser.js +62 -60
- package/dist-lib/components/Restore/RestoredFileBrowser/RestoredFileBrowser.js.map +1 -1
- package/dist-lib/components/common/LogViewer/LogViewer.d.ts.map +1 -1
- package/dist-lib/components/common/LogViewer/LogViewer.js +51 -47
- package/dist-lib/components/common/LogViewer/LogViewer.js.map +1 -1
- package/dist-lib/components/common/LogViewer/LogViewer.module.scss.js +24 -24
- package/dist-lib/hooks/usePlanSingleActions.d.ts.map +1 -1
- package/dist-lib/hooks/usePlanSingleActions.js +49 -37
- package/dist-lib/hooks/usePlanSingleActions.js.map +1 -1
- package/dist-lib/routes/PlanSingle/PlanSingle.d.ts.map +1 -1
- package/dist-lib/routes/PlanSingle/PlanSingle.js +68 -67
- package/dist-lib/routes/PlanSingle/PlanSingle.js.map +1 -1
- package/dist-lib/services/backups.d.ts.map +1 -1
- package/dist-lib/services/backups.js +35 -34
- package/dist-lib/services/backups.js.map +1 -1
- package/dist-lib/services/plans.d.ts +5 -2
- package/dist-lib/services/plans.d.ts.map +1 -1
- package/dist-lib/services/plans.js +45 -43
- package/dist-lib/services/plans.js.map +1 -1
- package/dist-lib/services/restores.d.ts.map +1 -1
- package/dist-lib/services/restores.js +56 -55
- package/dist-lib/services/restores.js.map +1 -1
- package/dist-lib/services.js +19 -19
- package/dist-lib/styles/core-frontend.css +1 -1
- package/package.json +1 -1
- package/src/components/Plan/Backups/Backups.module.scss +2 -1
- package/src/components/Plan/PlanPendingBackup/PlanPendingBackup.tsx +27 -18
- package/src/components/Plan/PlanProgress/PlanProgress.tsx +13 -2
- package/src/components/Plan/Restores/Restores.tsx +1 -1
- package/src/components/Restore/RestoreFileSelector/RestoreFileSelector.tsx +4 -4
- package/src/components/Restore/RestoreWizard/RestoreConfirmStep.tsx +26 -19
- package/src/components/Restore/RestoreWizard/RestorePreviewStep.tsx +1 -1
- package/src/components/Restore/RestoreWizard/RestoreWizard.module.scss +2 -2
- package/src/components/Restore/RestoredFileBrowser/RestoredFileBrowser.tsx +18 -14
- package/src/components/common/LogViewer/LogViewer.module.scss +1 -1
- package/src/components/common/LogViewer/LogViewer.tsx +18 -10
- package/src/hooks/usePlanSingleActions.tsx +21 -8
- package/src/routes/PlanSingle/PlanSingle.tsx +2 -0
- package/src/services/backups.ts +12 -4
- package/src/services/plans.ts +4 -3
- package/src/services/restores.ts +12 -4
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { useQueryClient as d, useMutation as u, useQuery as p } from "@tanstack/react-query";
|
|
2
|
-
import { toast as
|
|
2
|
+
import { toast as b } from "react-toastify";
|
|
3
3
|
import { API_URL as c } from "../utils/constants.js";
|
|
4
|
-
|
|
4
|
+
const h = /* @__PURE__ */ new Set();
|
|
5
|
+
async function g({ backupId: e }) {
|
|
5
6
|
const n = await (await fetch(`${c}/backups/${e}/action/download`, {
|
|
6
7
|
method: "POST",
|
|
7
8
|
credentials: "include"
|
|
@@ -11,17 +12,17 @@ async function b({ backupId: e }) {
|
|
|
11
12
|
throw new Error(n.error);
|
|
12
13
|
return n;
|
|
13
14
|
}
|
|
14
|
-
function
|
|
15
|
+
function R() {
|
|
15
16
|
const e = d();
|
|
16
17
|
return u({
|
|
17
|
-
mutationFn:
|
|
18
|
+
mutationFn: g,
|
|
18
19
|
onSuccess: (t, n) => {
|
|
19
20
|
console.log("res :", n, t), e.invalidateQueries({ queryKey: ["plan", n.planId] });
|
|
20
21
|
}
|
|
21
22
|
});
|
|
22
23
|
}
|
|
23
24
|
async function $(e) {
|
|
24
|
-
var
|
|
25
|
+
var f, w;
|
|
25
26
|
const t = await fetch(`${c}/backups/${e}/action/download`, {
|
|
26
27
|
method: "GET",
|
|
27
28
|
credentials: "include"
|
|
@@ -31,19 +32,19 @@ async function $(e) {
|
|
|
31
32
|
const l = await t.json();
|
|
32
33
|
throw new Error(l.error);
|
|
33
34
|
}
|
|
34
|
-
const n = ((
|
|
35
|
+
const n = ((f = t.headers.get("content-disposition")) == null ? void 0 : f.split("filename=")[1]) || `backup-${e}.tar`, o = (w = t.body) == null ? void 0 : w.getReader(), r = new ReadableStream({
|
|
35
36
|
async start(l) {
|
|
36
37
|
for (; ; ) {
|
|
37
|
-
const { done:
|
|
38
|
-
if (
|
|
39
|
-
l.enqueue(
|
|
38
|
+
const { done: m, value: y } = await o.read();
|
|
39
|
+
if (m) break;
|
|
40
|
+
l.enqueue(y);
|
|
40
41
|
}
|
|
41
42
|
l.close(), o.releaseLock();
|
|
42
43
|
}
|
|
43
44
|
}), i = await new Response(r).blob(), a = window.URL.createObjectURL(i), s = document.createElement("a");
|
|
44
45
|
s.href = a, s.download = n, document.body.appendChild(s), s.click(), s.remove(), window.URL.revokeObjectURL(a);
|
|
45
46
|
}
|
|
46
|
-
function
|
|
47
|
+
function C() {
|
|
47
48
|
return u({
|
|
48
49
|
mutationFn: $,
|
|
49
50
|
onSuccess: (e) => {
|
|
@@ -54,7 +55,7 @@ function R() {
|
|
|
54
55
|
}
|
|
55
56
|
});
|
|
56
57
|
}
|
|
57
|
-
async function
|
|
58
|
+
async function B({ backupId: e }) {
|
|
58
59
|
const n = await (await fetch(`${c}/backups/${e}/action/download`, {
|
|
59
60
|
method: "DELETE",
|
|
60
61
|
credentials: "include"
|
|
@@ -64,10 +65,10 @@ async function g({ backupId: e }) {
|
|
|
64
65
|
throw new Error(n.error);
|
|
65
66
|
return n;
|
|
66
67
|
}
|
|
67
|
-
function
|
|
68
|
+
function O() {
|
|
68
69
|
const e = d();
|
|
69
70
|
return u({
|
|
70
|
-
mutationFn:
|
|
71
|
+
mutationFn: B,
|
|
71
72
|
onSuccess: (t, n) => {
|
|
72
73
|
console.log("res :", n, t), e.invalidateQueries({ queryKey: ["plan", n.planId] });
|
|
73
74
|
}
|
|
@@ -83,7 +84,7 @@ async function E(e) {
|
|
|
83
84
|
throw new Error(o.error);
|
|
84
85
|
return o;
|
|
85
86
|
}
|
|
86
|
-
function
|
|
87
|
+
function P() {
|
|
87
88
|
return u({
|
|
88
89
|
mutationFn: E,
|
|
89
90
|
onSuccess: (e) => {
|
|
@@ -91,7 +92,7 @@ function O() {
|
|
|
91
92
|
}
|
|
92
93
|
});
|
|
93
94
|
}
|
|
94
|
-
async function
|
|
95
|
+
async function k({ id: e, sourceId: t, sourceType: n, planId: o }) {
|
|
95
96
|
const r = new URL(`${c}/backups/${e}/progress?sourceId=${t}&sourceType=${n}&planId=${o}`);
|
|
96
97
|
return await (await fetch(r.toString(), {
|
|
97
98
|
method: "GET",
|
|
@@ -102,7 +103,7 @@ function v(e) {
|
|
|
102
103
|
const t = d();
|
|
103
104
|
return p({
|
|
104
105
|
queryKey: ["progress-backup", e.id],
|
|
105
|
-
queryFn: () =>
|
|
106
|
+
queryFn: () => k(e),
|
|
106
107
|
refetchOnMount: !0,
|
|
107
108
|
retry: !1,
|
|
108
109
|
refetchInterval(n) {
|
|
@@ -110,7 +111,7 @@ function v(e) {
|
|
|
110
111
|
const o = (i = n.state) == null ? void 0 : i.data;
|
|
111
112
|
if ((a = o == null ? void 0 : o.events) == null ? void 0 : a.some((s) => s.phase === "finished" && s.completed === !0)) {
|
|
112
113
|
const s = (o == null ? void 0 : o.planId) || e.planId;
|
|
113
|
-
return s && (console.log("Invalidate Plan and Reload It :", s), t.invalidateQueries({ queryKey: ["plan", s] })),
|
|
114
|
+
return h.has(e.id) || (h.add(e.id), s && (console.log("Invalidate Plan and Reload It :", s), t.invalidateQueries({ queryKey: ["plan", s] })), b.success("Process Complete!")), !1;
|
|
114
115
|
}
|
|
115
116
|
return 1e3;
|
|
116
117
|
}
|
|
@@ -119,12 +120,12 @@ function v(e) {
|
|
|
119
120
|
function L(e) {
|
|
120
121
|
return p({
|
|
121
122
|
queryKey: ["progress-backup", e.id],
|
|
122
|
-
queryFn: () =>
|
|
123
|
+
queryFn: () => k(e),
|
|
123
124
|
refetchOnMount: !0,
|
|
124
125
|
retry: !1
|
|
125
126
|
});
|
|
126
127
|
}
|
|
127
|
-
async function
|
|
128
|
+
async function S({ planId: e, backupId: t }) {
|
|
128
129
|
const o = await (await fetch(`${c}/backups/${t}/action/cancel?planId=${e}`, {
|
|
129
130
|
method: "POST",
|
|
130
131
|
credentials: "include"
|
|
@@ -134,9 +135,9 @@ async function B({ planId: e, backupId: t }) {
|
|
|
134
135
|
throw new Error(o.error);
|
|
135
136
|
return o;
|
|
136
137
|
}
|
|
137
|
-
function
|
|
138
|
+
function D() {
|
|
138
139
|
return u({
|
|
139
|
-
mutationFn:
|
|
140
|
+
mutationFn: S,
|
|
140
141
|
onSuccess: (e, t) => {
|
|
141
142
|
console.log("res :", t, e);
|
|
142
143
|
}
|
|
@@ -154,7 +155,7 @@ async function j({ backupId: e, updatePayload: t }) {
|
|
|
154
155
|
throw new Error(r.error);
|
|
155
156
|
return r;
|
|
156
157
|
}
|
|
157
|
-
function
|
|
158
|
+
function G() {
|
|
158
159
|
return u({
|
|
159
160
|
mutationFn: j,
|
|
160
161
|
onSuccess: (e, t) => {
|
|
@@ -172,7 +173,7 @@ async function F({ backupId: e }) {
|
|
|
172
173
|
throw new Error(n.error);
|
|
173
174
|
return n;
|
|
174
175
|
}
|
|
175
|
-
function
|
|
176
|
+
function U(e) {
|
|
176
177
|
return p({
|
|
177
178
|
queryKey: ["snapshot-files", e.backupId],
|
|
178
179
|
queryFn: () => F(e),
|
|
@@ -183,22 +184,22 @@ function G(e) {
|
|
|
183
184
|
});
|
|
184
185
|
}
|
|
185
186
|
export {
|
|
186
|
-
|
|
187
|
-
|
|
187
|
+
S as cancelBackup,
|
|
188
|
+
B as cancelBackupDownload,
|
|
188
189
|
E as deleteBackup,
|
|
189
|
-
|
|
190
|
+
g as generateBackupDownload,
|
|
190
191
|
$ as getBackupDownload,
|
|
191
|
-
|
|
192
|
+
k as getBackupProgress,
|
|
192
193
|
F as getSnapshotFiles,
|
|
193
194
|
j as updateBackup,
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
195
|
+
D as useCancelBackup,
|
|
196
|
+
O as useCancelBackupDownload,
|
|
197
|
+
P as useDeleteBackup,
|
|
198
|
+
R as useDownloadBackup,
|
|
199
|
+
C as useGetBackupDownload,
|
|
199
200
|
v as useGetBackupProgress,
|
|
200
201
|
L as useGetBackupProgressOnce,
|
|
201
|
-
|
|
202
|
-
|
|
202
|
+
U as useGetSnapshotFiles,
|
|
203
|
+
G as useUpdateBackup
|
|
203
204
|
};
|
|
204
205
|
//# sourceMappingURL=backups.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backups.js","sources":["../../src/services/backups.ts"],"sourcesContent":["import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\r\nimport { toast } from 'react-toastify';\r\nimport { API_URL } from '../utils/constants';\r\n\r\n// Generate Download\r\nexport async function generateBackupDownload({ backupId }: { backupId: string; planId: string }) {\r\n // const header = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/backups/${backupId}/action/download`, {\r\n method: 'POST',\r\n credentials: 'include',\r\n // headers: header,\r\n });\r\n // Check if response is ok\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 useDownloadBackup() {\r\n const queryClient = useQueryClient();\r\n\r\n return useMutation({\r\n mutationFn: generateBackupDownload,\r\n onSuccess: (res, payload) => {\r\n console.log('res :', payload, res);\r\n queryClient.invalidateQueries({ queryKey: ['plan', payload.planId] });\r\n },\r\n });\r\n}\r\n\r\n// Get Download\r\nexport async function getBackupDownload(id: string) {\r\n // const header = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/backups/${id}/action/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] || `backup-${id}.tar`;\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 useGetBackupDownload() {\r\n return useMutation({\r\n mutationFn: getBackupDownload,\r\n onSuccess: (res) => {\r\n console.log('# Backup Downloaded! :', res);\r\n },\r\n onError: (res) => {\r\n console.log('# Download Failed! :', res);\r\n },\r\n });\r\n}\r\n\r\n// Cancel Download\r\nexport async function cancelBackupDownload({ backupId }: { backupId: string; planId: string }) {\r\n const res = await fetch(`${API_URL}/backups/${backupId}/action/download`, {\r\n method: 'DELETE',\r\n credentials: 'include',\r\n // headers: header,\r\n });\r\n // Check if response is ok\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\nexport function useCancelBackupDownload() {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: cancelBackupDownload,\r\n onSuccess: (res, payload) => {\r\n console.log('res :', payload, res);\r\n queryClient.invalidateQueries({ queryKey: ['plan', payload.planId] });\r\n },\r\n });\r\n}\r\n\r\n// Remove Backup\r\nexport async function deleteBackup(id: string) {\r\n const header = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/backups/${id}`, {\r\n method: 'DELETE',\r\n credentials: 'include',\r\n headers: header,\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 useDeleteBackup() {\r\n return useMutation({\r\n mutationFn: deleteBackup,\r\n onSuccess: (res) => {\r\n console.log('# Backup Removed! :', res);\r\n },\r\n });\r\n}\r\n\r\n// Get Backup Progress\r\nexport async function getBackupProgress({ id, sourceId, sourceType, planId }: { id: string; sourceId: string; sourceType: string; planId: string }) {\r\n const url = new URL(`${API_URL}/backups/${id}/progress?sourceId=${sourceId}&sourceType=${sourceType}&planId=${planId}`);\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 return data;\r\n}\r\n\r\nexport function useGetBackupProgress(payload: { id: string; sourceId: string; sourceType: string; planId: string }) {\r\n const queryClient = useQueryClient();\r\n return useQuery({\r\n queryKey: ['progress-backup', payload.id],\r\n queryFn: () => getBackupProgress(payload),\r\n refetchOnMount: true,\r\n retry: false,\r\n refetchInterval(query) {\r\n // console.log('query :', query.state?.data);\r\n const progressData = query.state?.data;\r\n\r\n // Check if backup is finished by looking for a \"finished\" phase event\r\n const isFinished = progressData?.events?.some((event: any) => event.phase === 'finished' && event.completed === true);\r\n\r\n if (isFinished) {\r\n const planId = progressData?.planId || payload.planId;\r\n if (planId) {\r\n console.log('Invalidate Plan and Reload It :', planId);\r\n queryClient.invalidateQueries({ queryKey: ['plan', planId] });\r\n }\r\n toast.success('Process Complete!');\r\n return false;\r\n }\r\n\r\n return 1000;\r\n },\r\n });\r\n}\r\n\r\nexport function useGetBackupProgressOnce(payload: { id: string; sourceId: string; sourceType: string; planId: string }) {\r\n return useQuery({\r\n queryKey: ['progress-backup', payload.id],\r\n queryFn: () => getBackupProgress(payload),\r\n refetchOnMount: true,\r\n retry: false,\r\n });\r\n}\r\n\r\n// Cancel Backup\r\nexport async function cancelBackup({ planId, backupId }: { planId: string; backupId: string }) {\r\n const res = await fetch(`${API_URL}/backups/${backupId}/action/cancel?planId=${planId}`, {\r\n method: 'POST',\r\n credentials: 'include',\r\n // headers: header,\r\n });\r\n // Check if response is ok\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\nexport function useCancelBackup() {\r\n return useMutation({\r\n mutationFn: cancelBackup,\r\n onSuccess: (res, payload) => {\r\n console.log('res :', payload, res);\r\n },\r\n });\r\n}\r\n\r\n// Update Backup Title and Description\r\nexport async function updateBackup({ backupId, updatePayload }: { backupId: string; updatePayload: { title?: string; description?: string } }) {\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}/backups/${backupId}`, {\r\n method: 'POST',\r\n credentials: 'include',\r\n body: JSON.stringify(updatePayload),\r\n headers: header,\r\n });\r\n // Check if response is ok\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\nexport function useUpdateBackup() {\r\n return useMutation({\r\n mutationFn: updateBackup,\r\n onSuccess: (res, payload) => {\r\n console.log('res :', payload, res);\r\n },\r\n });\r\n}\r\n\r\n// Get Snapshot Files\r\nexport async function getSnapshotFiles({ backupId }: { backupId: string }) {\r\n const res = await fetch(`${API_URL}/backups/${backupId}/files`, {\r\n method: 'GET',\r\n credentials: 'include',\r\n // headers: header,\r\n });\r\n // Check if response is ok\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\nexport function useGetSnapshotFiles(payload: { backupId: string }) {\r\n return useQuery({\r\n queryKey: ['snapshot-files', payload.backupId],\r\n queryFn: () => getSnapshotFiles(payload),\r\n refetchOnMount: true,\r\n staleTime: 1000 * 60 * 60, // Cache the data for 60 minutes\r\n retry: false,\r\n });\r\n}\r\n"],"names":["generateBackupDownload","backupId","data","API_URL","useDownloadBackup","queryClient","useQueryClient","useMutation","res","payload","getBackupDownload","id","filename","_a","reader","_b","stream","controller","done","value","blob","url","link","useGetBackupDownload","cancelBackupDownload","useCancelBackupDownload","deleteBackup","header","useDeleteBackup","getBackupProgress","sourceId","sourceType","planId","useGetBackupProgress","useQuery","query","progressData","event","toast","useGetBackupProgressOnce","cancelBackup","useCancelBackup","updateBackup","updatePayload","useUpdateBackup","getSnapshotFiles","useGetSnapshotFiles"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"backups.js","sources":["../../src/services/backups.ts"],"sourcesContent":["import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\r\nimport { toast } from 'react-toastify';\r\nimport { API_URL } from '../utils/constants';\r\n\r\nconst notifiedBackupProgress = new Set<string>();\r\n\r\n// Generate Download\r\nexport async function generateBackupDownload({ backupId }: { backupId: string; planId: string }) {\r\n // const header = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/backups/${backupId}/action/download`, {\r\n method: 'POST',\r\n credentials: 'include',\r\n // headers: header,\r\n });\r\n // Check if response is ok\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 useDownloadBackup() {\r\n const queryClient = useQueryClient();\r\n\r\n return useMutation({\r\n mutationFn: generateBackupDownload,\r\n onSuccess: (res, payload) => {\r\n console.log('res :', payload, res);\r\n queryClient.invalidateQueries({ queryKey: ['plan', payload.planId] });\r\n },\r\n });\r\n}\r\n\r\n// Get Download\r\nexport async function getBackupDownload(id: string) {\r\n // const header = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/backups/${id}/action/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] || `backup-${id}.tar`;\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 useGetBackupDownload() {\r\n return useMutation({\r\n mutationFn: getBackupDownload,\r\n onSuccess: (res) => {\r\n console.log('# Backup Downloaded! :', res);\r\n },\r\n onError: (res) => {\r\n console.log('# Download Failed! :', res);\r\n },\r\n });\r\n}\r\n\r\n// Cancel Download\r\nexport async function cancelBackupDownload({ backupId }: { backupId: string; planId: string }) {\r\n const res = await fetch(`${API_URL}/backups/${backupId}/action/download`, {\r\n method: 'DELETE',\r\n credentials: 'include',\r\n // headers: header,\r\n });\r\n // Check if response is ok\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\nexport function useCancelBackupDownload() {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: cancelBackupDownload,\r\n onSuccess: (res, payload) => {\r\n console.log('res :', payload, res);\r\n queryClient.invalidateQueries({ queryKey: ['plan', payload.planId] });\r\n },\r\n });\r\n}\r\n\r\n// Remove Backup\r\nexport async function deleteBackup(id: string) {\r\n const header = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/backups/${id}`, {\r\n method: 'DELETE',\r\n credentials: 'include',\r\n headers: header,\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 useDeleteBackup() {\r\n return useMutation({\r\n mutationFn: deleteBackup,\r\n onSuccess: (res) => {\r\n console.log('# Backup Removed! :', res);\r\n },\r\n });\r\n}\r\n\r\n// Get Backup Progress\r\nexport async function getBackupProgress({ id, sourceId, sourceType, planId }: { id: string; sourceId: string; sourceType: string; planId: string }) {\r\n const url = new URL(`${API_URL}/backups/${id}/progress?sourceId=${sourceId}&sourceType=${sourceType}&planId=${planId}`);\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 return data;\r\n}\r\n\r\nexport function useGetBackupProgress(payload: { id: string; sourceId: string; sourceType: string; planId: string }) {\r\n const queryClient = useQueryClient();\r\n return useQuery({\r\n queryKey: ['progress-backup', payload.id],\r\n queryFn: () => getBackupProgress(payload),\r\n refetchOnMount: true,\r\n retry: false,\r\n refetchInterval(query) {\r\n // Only refetch if the browser tab is active\r\n // if (document.hidden) return false;\r\n\r\n // console.log('query :', query.state?.data);\r\n const progressData = query.state?.data;\r\n\r\n // Check if backup is finished by looking for a \"finished\" phase event\r\n const isFinished = progressData?.events?.some((event: any) => event.phase === 'finished' && event.completed === true);\r\n\r\n if (isFinished) {\r\n const planId = progressData?.planId || payload.planId;\r\n if (!notifiedBackupProgress.has(payload.id)) {\r\n notifiedBackupProgress.add(payload.id);\r\n if (planId) {\r\n console.log('Invalidate Plan and Reload It :', planId);\r\n queryClient.invalidateQueries({ queryKey: ['plan', planId] });\r\n }\r\n toast.success('Process Complete!');\r\n }\r\n return false;\r\n }\r\n\r\n return 1000;\r\n },\r\n });\r\n}\r\n\r\nexport function useGetBackupProgressOnce(payload: { id: string; sourceId: string; sourceType: string; planId: string }) {\r\n return useQuery({\r\n queryKey: ['progress-backup', payload.id],\r\n queryFn: () => getBackupProgress(payload),\r\n refetchOnMount: true,\r\n retry: false,\r\n });\r\n}\r\n\r\n// Cancel Backup\r\nexport async function cancelBackup({ planId, backupId }: { planId: string; backupId: string }) {\r\n const res = await fetch(`${API_URL}/backups/${backupId}/action/cancel?planId=${planId}`, {\r\n method: 'POST',\r\n credentials: 'include',\r\n // headers: header,\r\n });\r\n // Check if response is ok\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\nexport function useCancelBackup() {\r\n return useMutation({\r\n mutationFn: cancelBackup,\r\n onSuccess: (res, payload) => {\r\n console.log('res :', payload, res);\r\n },\r\n });\r\n}\r\n\r\n// Update Backup Title and Description\r\nexport async function updateBackup({ backupId, updatePayload }: { backupId: string; updatePayload: { title?: string; description?: string } }) {\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}/backups/${backupId}`, {\r\n method: 'POST',\r\n credentials: 'include',\r\n body: JSON.stringify(updatePayload),\r\n headers: header,\r\n });\r\n // Check if response is ok\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\nexport function useUpdateBackup() {\r\n return useMutation({\r\n mutationFn: updateBackup,\r\n onSuccess: (res, payload) => {\r\n console.log('res :', payload, res);\r\n },\r\n });\r\n}\r\n\r\n// Get Snapshot Files\r\nexport async function getSnapshotFiles({ backupId }: { backupId: string }) {\r\n const res = await fetch(`${API_URL}/backups/${backupId}/files`, {\r\n method: 'GET',\r\n credentials: 'include',\r\n // headers: header,\r\n });\r\n // Check if response is ok\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\nexport function useGetSnapshotFiles(payload: { backupId: string }) {\r\n return useQuery({\r\n queryKey: ['snapshot-files', payload.backupId],\r\n queryFn: () => getSnapshotFiles(payload),\r\n refetchOnMount: true,\r\n staleTime: 1000 * 60 * 60, // Cache the data for 60 minutes\r\n retry: false,\r\n });\r\n}\r\n"],"names":["notifiedBackupProgress","generateBackupDownload","backupId","data","API_URL","useDownloadBackup","queryClient","useQueryClient","useMutation","res","payload","getBackupDownload","id","filename","_a","reader","_b","stream","controller","done","value","blob","url","link","useGetBackupDownload","cancelBackupDownload","useCancelBackupDownload","deleteBackup","header","useDeleteBackup","getBackupProgress","sourceId","sourceType","planId","useGetBackupProgress","useQuery","query","progressData","event","toast","useGetBackupProgressOnce","cancelBackup","useCancelBackup","updateBackup","updatePayload","useUpdateBackup","getSnapshotFiles","useGetSnapshotFiles"],"mappings":"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"}
|
|
@@ -35,6 +35,9 @@ export declare function prunePlan(id: string): Promise<any>;
|
|
|
35
35
|
export declare function usePrunePlan(): import("@tanstack/react-query").UseMutationResult<any, Error, string, unknown>;
|
|
36
36
|
export declare function unlockPlan(id: string): Promise<any>;
|
|
37
37
|
export declare function useUnlockPlan(): import("@tanstack/react-query").UseMutationResult<any, Error, string, unknown>;
|
|
38
|
-
export declare function
|
|
39
|
-
export declare function
|
|
38
|
+
export declare function checkActiveBackupsOrRestore(planId: string, type?: 'backup' | 'restore'): Promise<any>;
|
|
39
|
+
export declare function useCheckActiveBackupsOrRestore(): import("@tanstack/react-query").UseMutationResult<any, Error, {
|
|
40
|
+
planId: string;
|
|
41
|
+
type: "backup" | "restore";
|
|
42
|
+
}, unknown>;
|
|
40
43
|
//# sourceMappingURL=plans.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plans.d.ts","sourceRoot":"","sources":["../../src/services/plans.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAGxD,wBAAsB,WAAW,iBAYhC;AAED,wBAAgB,WAAW,+DAO1B;AAGD,wBAAsB,aAAa,CAAC,EAAE,EAAE,MAAM,gBAiB7C;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,8DAQpC;AAGD,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,gBAc/C;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,8DAO5C;AAGD,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,MAAM,iBAsChD;AAED,wBAAgB,kBAAkB,oFAUjC;AAGD,wBAAsB,UAAU,CAAC,OAAO,EAAE,eAAe,gBAcxD;AAED,wBAAgB,aAAa,4FAU5B;AAGD,wBAAsB,UAAU,CAAC,aAAa,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,gBAelF;AAED,wBAAgB,aAAa;QAjByB,MAAM;UAAQ,OAAO,CAAC,IAAI,CAAC;YAgChF;AAGD,wBAAsB,UAAU,CAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,OAAO,CAAA;CAAE,gBAYnG;AAED,wBAAgB,aAAa;QAdoC,MAAM;sBAAoB,OAAO;YAuBjG;AAGD,wBAAsB,aAAa,CAAC,EAAE,EAAE,MAAM,gBAY7C;AAED,wBAAgB,gBAAgB,mFAU/B;AAGD,wBAAsB,SAAS,CAAC,EAAE,EAAE,MAAM,gBAYzC;AAED,wBAAgB,YAAY,mFAU3B;AAGD,wBAAsB,UAAU,CAAC,EAAE,EAAE,MAAM,gBAY1C;AAED,wBAAgB,aAAa,mFAU5B;AAGD,wBAAsB,SAAS,CAAC,EAAE,EAAE,MAAM,gBAYzC;AAED,wBAAgB,YAAY,mFAc3B;AAGD,wBAAsB,UAAU,CAAC,EAAE,EAAE,MAAM,gBAY1C;AAED,wBAAgB,aAAa,mFAc5B;AAGD,wBAAsB,
|
|
1
|
+
{"version":3,"file":"plans.d.ts","sourceRoot":"","sources":["../../src/services/plans.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAGxD,wBAAsB,WAAW,iBAYhC;AAED,wBAAgB,WAAW,+DAO1B;AAGD,wBAAsB,aAAa,CAAC,EAAE,EAAE,MAAM,gBAiB7C;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,8DAQpC;AAGD,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,gBAc/C;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,8DAO5C;AAGD,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,MAAM,iBAsChD;AAED,wBAAgB,kBAAkB,oFAUjC;AAGD,wBAAsB,UAAU,CAAC,OAAO,EAAE,eAAe,gBAcxD;AAED,wBAAgB,aAAa,4FAU5B;AAGD,wBAAsB,UAAU,CAAC,aAAa,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,gBAelF;AAED,wBAAgB,aAAa;QAjByB,MAAM;UAAQ,OAAO,CAAC,IAAI,CAAC;YAgChF;AAGD,wBAAsB,UAAU,CAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,OAAO,CAAA;CAAE,gBAYnG;AAED,wBAAgB,aAAa;QAdoC,MAAM;sBAAoB,OAAO;YAuBjG;AAGD,wBAAsB,aAAa,CAAC,EAAE,EAAE,MAAM,gBAY7C;AAED,wBAAgB,gBAAgB,mFAU/B;AAGD,wBAAsB,SAAS,CAAC,EAAE,EAAE,MAAM,gBAYzC;AAED,wBAAgB,YAAY,mFAU3B;AAGD,wBAAsB,UAAU,CAAC,EAAE,EAAE,MAAM,gBAY1C;AAED,wBAAgB,aAAa,mFAU5B;AAGD,wBAAsB,SAAS,CAAC,EAAE,EAAE,MAAM,gBAYzC;AAED,wBAAgB,YAAY,mFAc3B;AAGD,wBAAsB,UAAU,CAAC,EAAE,EAAE,MAAM,gBAY1C;AAED,wBAAgB,aAAa,mFAc5B;AAGD,wBAAsB,2BAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,QAAQ,GAAG,SAAoB,gBAatG;AAED,wBAAgB,8BAA8B;YAGC,MAAM;UAAQ,QAAQ,GAAG,SAAS;YAGhF"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { useQuery as d, useMutation as r, useQueryClient as c } from "@tanstack/react-query";
|
|
2
2
|
import { toast as l } from "react-toastify";
|
|
3
|
-
import { API_URL as
|
|
3
|
+
import { API_URL as a } from "../utils/constants.js";
|
|
4
4
|
async function g() {
|
|
5
|
-
const e = new URL(`${
|
|
5
|
+
const e = new URL(`${a}/plans`), o = await (await fetch(e.toString(), {
|
|
6
6
|
method: "GET",
|
|
7
7
|
credentials: "include"
|
|
8
8
|
})).json();
|
|
@@ -10,7 +10,7 @@ async function g() {
|
|
|
10
10
|
throw new Error(o.error);
|
|
11
11
|
return o;
|
|
12
12
|
}
|
|
13
|
-
function
|
|
13
|
+
function F() {
|
|
14
14
|
return d({
|
|
15
15
|
queryKey: ["plans"],
|
|
16
16
|
queryFn: () => g(),
|
|
@@ -21,17 +21,17 @@ function Q() {
|
|
|
21
21
|
async function P(e) {
|
|
22
22
|
if (!e)
|
|
23
23
|
throw new Error("ID Not Provided.");
|
|
24
|
-
const n = new URL(`${
|
|
24
|
+
const n = new URL(`${a}/plans/${e}`), o = await fetch(n.toString(), {
|
|
25
25
|
method: "GET",
|
|
26
26
|
credentials: "include"
|
|
27
27
|
}), t = await o.json();
|
|
28
28
|
if (!t.success) {
|
|
29
|
-
const
|
|
30
|
-
throw
|
|
29
|
+
const s = new Error(t.error);
|
|
30
|
+
throw s.status = o.status, s;
|
|
31
31
|
}
|
|
32
32
|
return t;
|
|
33
33
|
}
|
|
34
|
-
function
|
|
34
|
+
function Q(e) {
|
|
35
35
|
return d({
|
|
36
36
|
queryKey: ["plan", e],
|
|
37
37
|
queryFn: () => P(e),
|
|
@@ -41,13 +41,13 @@ function b(e) {
|
|
|
41
41
|
});
|
|
42
42
|
}
|
|
43
43
|
async function j(e) {
|
|
44
|
-
const n = new URL(`${
|
|
44
|
+
const n = new URL(`${a}/plans/${e}/logs`), o = await fetch(n.toString(), {
|
|
45
45
|
method: "GET",
|
|
46
46
|
credentials: "include"
|
|
47
47
|
}), t = await o.json();
|
|
48
48
|
if (!t.success) {
|
|
49
|
-
const
|
|
50
|
-
throw
|
|
49
|
+
const s = new Error(t.error);
|
|
50
|
+
throw s.status = o.status, s;
|
|
51
51
|
}
|
|
52
52
|
return t;
|
|
53
53
|
}
|
|
@@ -61,7 +61,7 @@ function U(e) {
|
|
|
61
61
|
}
|
|
62
62
|
async function E(e) {
|
|
63
63
|
var w, y;
|
|
64
|
-
const n = await fetch(`${
|
|
64
|
+
const n = await fetch(`${a}/plans/${e}/logs/download`, {
|
|
65
65
|
method: "GET",
|
|
66
66
|
credentials: "include"
|
|
67
67
|
// headers: header,
|
|
@@ -70,7 +70,7 @@ async function E(e) {
|
|
|
70
70
|
const u = await n.json();
|
|
71
71
|
throw new Error(u.error);
|
|
72
72
|
}
|
|
73
|
-
const o = ((w = n.headers.get("content-disposition")) == null ? void 0 : w.split("filename=")[1]) || `plan-${e}.log`, t = (y = n.body) == null ? void 0 : y.getReader(),
|
|
73
|
+
const o = ((w = n.headers.get("content-disposition")) == null ? void 0 : w.split("filename=")[1]) || `plan-${e}.log`, t = (y = n.body) == null ? void 0 : y.getReader(), s = new ReadableStream({
|
|
74
74
|
async start(u) {
|
|
75
75
|
for (; ; ) {
|
|
76
76
|
const { done: h, value: m } = await t.read();
|
|
@@ -79,7 +79,7 @@ async function E(e) {
|
|
|
79
79
|
}
|
|
80
80
|
u.close(), t.releaseLock();
|
|
81
81
|
}
|
|
82
|
-
}), f = await new Response(
|
|
82
|
+
}), f = await new Response(s).blob(), p = window.URL.createObjectURL(f), i = document.createElement("a");
|
|
83
83
|
i.href = p, i.download = o, document.body.appendChild(i), i.click(), i.remove(), window.URL.revokeObjectURL(p);
|
|
84
84
|
}
|
|
85
85
|
function A() {
|
|
@@ -93,10 +93,10 @@ function A() {
|
|
|
93
93
|
}
|
|
94
94
|
});
|
|
95
95
|
}
|
|
96
|
-
async function
|
|
96
|
+
async function k(e) {
|
|
97
97
|
const n = new Headers({ "Content-Type": "application/json", Accept: "application/json" });
|
|
98
98
|
console.log("newPlan :", e);
|
|
99
|
-
const t = await (await fetch(`${
|
|
99
|
+
const t = await (await fetch(`${a}/plans`, {
|
|
100
100
|
method: "POST",
|
|
101
101
|
credentials: "include",
|
|
102
102
|
headers: n,
|
|
@@ -109,16 +109,16 @@ async function q(e) {
|
|
|
109
109
|
function B() {
|
|
110
110
|
const e = c();
|
|
111
111
|
return r({
|
|
112
|
-
mutationFn:
|
|
112
|
+
mutationFn: k,
|
|
113
113
|
onSuccess: (n) => {
|
|
114
114
|
console.log("# Plan Created! :", n), e.invalidateQueries({ queryKey: ["plans"] });
|
|
115
115
|
}
|
|
116
116
|
});
|
|
117
117
|
}
|
|
118
|
-
async function
|
|
118
|
+
async function q(e) {
|
|
119
119
|
const n = new Headers({ "Content-Type": "application/json", Accept: "application/json" });
|
|
120
120
|
console.log("newPlan :", e);
|
|
121
|
-
const t = await (await fetch(`${
|
|
121
|
+
const t = await (await fetch(`${a}/plans/${e.id}`, {
|
|
122
122
|
method: "PUT",
|
|
123
123
|
credentials: "include",
|
|
124
124
|
headers: n,
|
|
@@ -131,7 +131,7 @@ async function S(e) {
|
|
|
131
131
|
function G() {
|
|
132
132
|
const e = c();
|
|
133
133
|
return r({
|
|
134
|
-
mutationFn:
|
|
134
|
+
mutationFn: q,
|
|
135
135
|
onSuccess: (n) => {
|
|
136
136
|
var t;
|
|
137
137
|
console.log("# Plan Updated! :", n);
|
|
@@ -140,27 +140,27 @@ function G() {
|
|
|
140
140
|
}
|
|
141
141
|
});
|
|
142
142
|
}
|
|
143
|
-
async function
|
|
144
|
-
const o = new Headers({ "Content-Type": "application/json", Accept: "application/json" }),
|
|
143
|
+
async function S({ id: e, removeRemoteData: n }) {
|
|
144
|
+
const o = new Headers({ "Content-Type": "application/json", Accept: "application/json" }), s = await (await fetch(`${a}/plans/${e}?removeData=${n}`, {
|
|
145
145
|
method: "DELETE",
|
|
146
146
|
credentials: "include",
|
|
147
147
|
headers: o
|
|
148
148
|
})).json();
|
|
149
|
-
if (!
|
|
150
|
-
throw new Error(
|
|
151
|
-
return
|
|
149
|
+
if (!s.success)
|
|
150
|
+
throw new Error(s.error);
|
|
151
|
+
return s;
|
|
152
152
|
}
|
|
153
153
|
function D() {
|
|
154
154
|
const e = c();
|
|
155
155
|
return r({
|
|
156
|
-
mutationFn:
|
|
156
|
+
mutationFn: S,
|
|
157
157
|
onSuccess: (n) => {
|
|
158
158
|
console.log("# Plan Removed! :", n), e.invalidateQueries({ queryKey: ["plans"] });
|
|
159
159
|
}
|
|
160
160
|
});
|
|
161
161
|
}
|
|
162
162
|
async function $(e) {
|
|
163
|
-
const n = new Headers({ "Content-Type": "application/json", Accept: "application/json" }), t = await (await fetch(`${
|
|
163
|
+
const n = new Headers({ "Content-Type": "application/json", Accept: "application/json" }), t = await (await fetch(`${a}/plans/${e}/action/backup`, {
|
|
164
164
|
method: "POST",
|
|
165
165
|
credentials: "include",
|
|
166
166
|
headers: n
|
|
@@ -179,7 +179,7 @@ function H() {
|
|
|
179
179
|
});
|
|
180
180
|
}
|
|
181
181
|
async function v(e) {
|
|
182
|
-
const n = new Headers({ "Content-Type": "application/json", Accept: "application/json" }), t = await (await fetch(`${
|
|
182
|
+
const n = new Headers({ "Content-Type": "application/json", Accept: "application/json" }), t = await (await fetch(`${a}/plans/${e}/action/pause`, {
|
|
183
183
|
method: "POST",
|
|
184
184
|
credentials: "include",
|
|
185
185
|
headers: n
|
|
@@ -198,7 +198,7 @@ function M() {
|
|
|
198
198
|
});
|
|
199
199
|
}
|
|
200
200
|
async function C(e) {
|
|
201
|
-
const n = new Headers({ "Content-Type": "application/json", Accept: "application/json" }), t = await (await fetch(`${
|
|
201
|
+
const n = new Headers({ "Content-Type": "application/json", Accept: "application/json" }), t = await (await fetch(`${a}/plans/${e}/action/resume`, {
|
|
202
202
|
method: "POST",
|
|
203
203
|
credentials: "include",
|
|
204
204
|
headers: n
|
|
@@ -217,7 +217,7 @@ function N() {
|
|
|
217
217
|
});
|
|
218
218
|
}
|
|
219
219
|
async function T(e) {
|
|
220
|
-
const n = new Headers({ "Content-Type": "application/json", Accept: "application/json" }), t = await (await fetch(`${
|
|
220
|
+
const n = new Headers({ "Content-Type": "application/json", Accept: "application/json" }), t = await (await fetch(`${a}/plans/${e}/action/prune`, {
|
|
221
221
|
method: "POST",
|
|
222
222
|
credentials: "include",
|
|
223
223
|
headers: n
|
|
@@ -239,7 +239,7 @@ function J() {
|
|
|
239
239
|
});
|
|
240
240
|
}
|
|
241
241
|
async function R(e) {
|
|
242
|
-
const n = new Headers({ "Content-Type": "application/json", Accept: "application/json" }), t = await (await fetch(`${
|
|
242
|
+
const n = new Headers({ "Content-Type": "application/json", Accept: "application/json" }), t = await (await fetch(`${a}/plans/${e}/action/unlock`, {
|
|
243
243
|
method: "POST",
|
|
244
244
|
credentials: "include",
|
|
245
245
|
headers: n
|
|
@@ -260,26 +260,28 @@ function x() {
|
|
|
260
260
|
}
|
|
261
261
|
});
|
|
262
262
|
}
|
|
263
|
-
async function L(e) {
|
|
264
|
-
const
|
|
263
|
+
async function L(e, n = "backup") {
|
|
264
|
+
const o = new URL(`${a}/plans/${e}/checkactive`);
|
|
265
|
+
o.searchParams.append("type", n);
|
|
266
|
+
const s = await (await fetch(o.toString(), {
|
|
265
267
|
method: "GET",
|
|
266
268
|
credentials: "include"
|
|
267
269
|
})).json();
|
|
268
|
-
if (!
|
|
269
|
-
throw new Error(
|
|
270
|
-
return
|
|
270
|
+
if (!s.success)
|
|
271
|
+
throw new Error(s.error);
|
|
272
|
+
return s;
|
|
271
273
|
}
|
|
272
274
|
function _() {
|
|
273
275
|
return r({
|
|
274
276
|
// queryKey: ['planActiveBackups-' + planId],
|
|
275
|
-
mutationFn: L
|
|
277
|
+
mutationFn: ({ planId: e, type: n }) => L(e, n)
|
|
276
278
|
// refetchOnMount: true,
|
|
277
279
|
});
|
|
278
280
|
}
|
|
279
281
|
export {
|
|
280
|
-
L as
|
|
281
|
-
|
|
282
|
-
|
|
282
|
+
L as checkActiveBackupsOrRestore,
|
|
283
|
+
k as createPlan,
|
|
284
|
+
S as deletePlan,
|
|
283
285
|
E as downloadPlanLogs,
|
|
284
286
|
g as getAllPlans,
|
|
285
287
|
j as getPlanLogs,
|
|
@@ -289,14 +291,14 @@ export {
|
|
|
289
291
|
T as prunePlan,
|
|
290
292
|
C as resumePlan,
|
|
291
293
|
R as unlockPlan,
|
|
292
|
-
|
|
293
|
-
_ as
|
|
294
|
+
q as updatePlan,
|
|
295
|
+
_ as useCheckActiveBackupsOrRestore,
|
|
294
296
|
B as useCreatePlan,
|
|
295
297
|
D as useDeletePlan,
|
|
296
298
|
A as useGetDownloadLogs,
|
|
297
|
-
|
|
299
|
+
Q as useGetPlan,
|
|
298
300
|
U as useGetPlanLogs,
|
|
299
|
-
|
|
301
|
+
F as useGetPlans,
|
|
300
302
|
M as usePausePlan,
|
|
301
303
|
H as usePerformBackup,
|
|
302
304
|
J as usePrunePlan,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plans.js","sources":["../../src/services/plans.ts"],"sourcesContent":["import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\r\nimport { toast } from 'react-toastify';\r\nimport { API_URL } from '../utils/constants';\r\nimport { NewPlanSettings, Plan } from '../@types/plans';\r\n\r\n// Get All Plans\r\nexport async function getAllPlans() {\r\n const url = new URL(`${API_URL}/plans`);\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 useGetPlans() {\r\n return useQuery({\r\n queryKey: ['plans'],\r\n queryFn: () => getAllPlans(),\r\n refetchOnMount: true,\r\n retry: false,\r\n });\r\n}\r\n\r\n// Get Single Plan\r\nexport async function getSinglePlan(id: string) {\r\n if (!id) {\r\n throw new Error('ID Not Provided.');\r\n }\r\n const url = new URL(`${API_URL}/plans/${id}`);\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 const error = new Error(data.error) as Error & { status?: number };\r\n error.status = res.status;\r\n throw error;\r\n }\r\n return data;\r\n}\r\n\r\nexport function useGetPlan(id: string) {\r\n return useQuery({\r\n queryKey: ['plan', id],\r\n queryFn: () => getSinglePlan(id),\r\n refetchOnMount: true,\r\n retry: false,\r\n staleTime: 0,\r\n });\r\n}\r\n\r\n// Get Plan Logs\r\nexport async function getPlanLogs(planId: string) {\r\n const url = new URL(`${API_URL}/plans/${planId}/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 const error = new Error(data.error) as Error & { status?: number };\r\n error.status = res.status;\r\n throw error;\r\n }\r\n return data;\r\n}\r\n\r\nexport function useGetPlanLogs(planId: string) {\r\n return useQuery({\r\n queryKey: ['planLogs', planId],\r\n queryFn: () => getPlanLogs(planId),\r\n refetchOnMount: true,\r\n retry: false,\r\n });\r\n}\r\n\r\n// Download Plan Logs\r\nexport async function downloadPlanLogs(id: string) {\r\n const res = await fetch(`${API_URL}/plans/${id}/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] || `plan-${id}.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 useGetDownloadLogs() {\r\n return useMutation({\r\n mutationFn: downloadPlanLogs,\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\n// Create New Plan\r\nexport async function createPlan(newPlan: NewPlanSettings) {\r\n const header = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n console.log('newPlan :', newPlan);\r\n const res = await fetch(`${API_URL}/plans`, {\r\n method: 'POST',\r\n credentials: 'include',\r\n headers: header,\r\n body: JSON.stringify(newPlan),\r\n });\r\n const data = await res.json();\r\n if (!data.success) {\r\n throw new Error(data.error || data.result);\r\n }\r\n return data;\r\n}\r\n\r\nexport function useCreatePlan() {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: createPlan,\r\n onSuccess: (res) => {\r\n // TODO: Should Display a Notification Bubble.\r\n console.log('# Plan Created! :', res);\r\n queryClient.invalidateQueries({ queryKey: ['plans'] });\r\n },\r\n });\r\n}\r\n\r\n// UpdatePlan\r\nexport async function updatePlan(updatePayload: { id: string; data: Partial<Plan> }) {\r\n const header = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n console.log('newPlan :', updatePayload);\r\n const res = await fetch(`${API_URL}/plans/${updatePayload.id}`, {\r\n method: 'PUT',\r\n credentials: 'include',\r\n headers: header,\r\n body: JSON.stringify({ plan: updatePayload.data }),\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 useUpdatePlan() {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: updatePlan,\r\n onSuccess: (res) => {\r\n // TODO: Should Display a Notification Bubble.\r\n console.log('# Plan Updated! :', res);\r\n const planID = res?.result?.id;\r\n if (planID) {\r\n queryClient.invalidateQueries({ queryKey: ['plan', planID] });\r\n }\r\n\r\n queryClient.invalidateQueries({ queryKey: ['plans'] });\r\n },\r\n });\r\n}\r\n\r\n// Remove Plan\r\nexport async function deletePlan({ id, removeRemoteData }: { id: string; removeRemoteData: boolean }) {\r\n const header = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/plans/${id}?removeData=${removeRemoteData}`, {\r\n method: 'DELETE',\r\n credentials: 'include',\r\n headers: header,\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 useDeletePlan() {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: deletePlan,\r\n onSuccess: (res) => {\r\n console.log('# Plan Removed! :', res);\r\n queryClient.invalidateQueries({ queryKey: ['plans'] });\r\n },\r\n });\r\n}\r\n\r\n// Perform Backup\r\nexport async function performBackup(id: string) {\r\n const header = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/plans/${id}/action/backup`, {\r\n method: 'POST',\r\n credentials: 'include',\r\n headers: header,\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 usePerformBackup() {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: performBackup,\r\n onSuccess: (res, planId) => {\r\n console.log('# Backup Started! :', res, planId);\r\n queryClient.invalidateQueries({ queryKey: ['plan', planId] });\r\n queryClient.invalidateQueries({ queryKey: ['plans'] });\r\n },\r\n });\r\n}\r\n\r\n// Pause Backup\r\nexport async function pausePlan(id: string) {\r\n const header = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/plans/${id}/action/pause`, {\r\n method: 'POST',\r\n credentials: 'include',\r\n headers: header,\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 usePausePlan() {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: pausePlan,\r\n onSuccess: (res, planId) => {\r\n console.log('# Backup Paused! :', res, planId);\r\n queryClient.invalidateQueries({ queryKey: ['plan', planId] });\r\n queryClient.invalidateQueries({ queryKey: ['plans'] });\r\n },\r\n });\r\n}\r\n\r\n// Resume Backup\r\nexport async function resumePlan(id: string) {\r\n const header = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/plans/${id}/action/resume`, {\r\n method: 'POST',\r\n credentials: 'include',\r\n headers: header,\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 useResumePlan() {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: resumePlan,\r\n onSuccess: (res, planId) => {\r\n console.log('# Backup Resumed! :', res, planId);\r\n queryClient.invalidateQueries({ queryKey: ['plan', planId] });\r\n queryClient.invalidateQueries({ queryKey: ['plans'] });\r\n },\r\n });\r\n}\r\n\r\n// Prune Backup Plan\r\nexport async function prunePlan(id: string) {\r\n const header = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/plans/${id}/action/prune`, {\r\n method: 'POST',\r\n credentials: 'include',\r\n headers: header,\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 usePrunePlan() {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: prunePlan,\r\n onError: (error: Error) => {\r\n console.log('error :', error?.message);\r\n toast.error(error.message || `Error Removing Old Backups.`);\r\n },\r\n onSuccess: (res, planId) => {\r\n console.log('# Backup Pruned! :', res, planId);\r\n queryClient.invalidateQueries({ queryKey: ['plan', planId] });\r\n toast.success(res?.message || `Removed Old Backups Successfully!`, { autoClose: 5000 });\r\n },\r\n });\r\n}\r\n\r\n// Unlock Backup Plan\r\nexport async function unlockPlan(id: string) {\r\n const header = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/plans/${id}/action/unlock`, {\r\n method: 'POST',\r\n credentials: 'include',\r\n headers: header,\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 useUnlockPlan() {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: unlockPlan,\r\n onError: (error: Error) => {\r\n console.log('error :', error?.message);\r\n toast.error(error.message || `Error Removing stale locks.`);\r\n },\r\n onSuccess: (res, planId) => {\r\n console.log('# Backup Pruned! :', res, planId);\r\n queryClient.invalidateQueries({ queryKey: ['plan', planId] });\r\n toast.success(`Removed Stale locks Successfully!`, { autoClose: 5000 });\r\n },\r\n });\r\n}\r\n\r\n// Get Backup Progress\r\nexport async function checkActiveBackups(planId: string) {\r\n const url = new URL(`${API_URL}/plans/${planId}/checkactive`);\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 useCheckActiveBackups() {\r\n return useMutation({\r\n // queryKey: ['planActiveBackups-' + planId],\r\n mutationFn: checkActiveBackups,\r\n // refetchOnMount: true,\r\n });\r\n}\r\n"],"names":["getAllPlans","url","API_URL","data","useGetPlans","useQuery","getSinglePlan","id","res","error","useGetPlan","getPlanLogs","planId","useGetPlanLogs","downloadPlanLogs","filename","_a","reader","_b","stream","controller","done","value","blob","link","useGetDownloadLogs","useMutation","createPlan","newPlan","header","useCreatePlan","queryClient","useQueryClient","updatePlan","updatePayload","useUpdatePlan","planID","deletePlan","removeRemoteData","useDeletePlan","performBackup","usePerformBackup","pausePlan","usePausePlan","resumePlan","useResumePlan","prunePlan","usePrunePlan","toast","unlockPlan","useUnlockPlan","checkActiveBackups","useCheckActiveBackups"],"mappings":";;;AAMA,eAAsBA,IAAc;AACjC,QAAMC,IAAM,IAAI,IAAI,GAAGC,CAAO,QAAQ,GAMhCC,IAAO,OAJD,MAAM,MAAMF,EAAI,YAAY;AAAA,IACrC,QAAQ;AAAA,IACR,aAAa;AAAA,EAAA,CACf,GACsB,KAAA;AACvB,MAAI,CAACE,EAAK;AACP,UAAM,IAAI,MAAMA,EAAK,KAAK;AAE7B,SAAOA;AACV;AAEO,SAASC,IAAc;AAC3B,SAAOC,EAAS;AAAA,IACb,UAAU,CAAC,OAAO;AAAA,IAClB,SAAS,MAAML,EAAA;AAAA,IACf,gBAAgB;AAAA,IAChB,OAAO;AAAA,EAAA,CACT;AACJ;AAGA,eAAsBM,EAAcC,GAAY;AAC7C,MAAI,CAACA;AACF,UAAM,IAAI,MAAM,kBAAkB;AAErC,QAAMN,IAAM,IAAI,IAAI,GAAGC,CAAO,UAAUK,CAAE,EAAE,GAEtCC,IAAM,MAAM,MAAMP,EAAI,YAAY;AAAA,IACrC,QAAQ;AAAA,IACR,aAAa;AAAA,EAAA,CACf,GACKE,IAAO,MAAMK,EAAI,KAAA;AACvB,MAAI,CAACL,EAAK,SAAS;AAChB,UAAMM,IAAQ,IAAI,MAAMN,EAAK,KAAK;AAClC,UAAAM,EAAM,SAASD,EAAI,QACbC;AAAA,EACT;AACA,SAAON;AACV;AAEO,SAASO,EAAWH,GAAY;AACpC,SAAOF,EAAS;AAAA,IACb,UAAU,CAAC,QAAQE,CAAE;AAAA,IACrB,SAAS,MAAMD,EAAcC,CAAE;AAAA,IAC/B,gBAAgB;AAAA,IAChB,OAAO;AAAA,IACP,WAAW;AAAA,EAAA,CACb;AACJ;AAGA,eAAsBI,EAAYC,GAAgB;AAC/C,QAAMX,IAAM,IAAI,IAAI,GAAGC,CAAO,UAAUU,CAAM,OAAO,GAE/CJ,IAAM,MAAM,MAAMP,EAAI,YAAY;AAAA,IACrC,QAAQ;AAAA,IACR,aAAa;AAAA,EAAA,CACf,GACKE,IAAO,MAAMK,EAAI,KAAA;AACvB,MAAI,CAACL,EAAK,SAAS;AAChB,UAAMM,IAAQ,IAAI,MAAMN,EAAK,KAAK;AAClC,UAAAM,EAAM,SAASD,EAAI,QACbC;AAAA,EACT;AACA,SAAON;AACV;AAEO,SAASU,EAAeD,GAAgB;AAC5C,SAAOP,EAAS;AAAA,IACb,UAAU,CAAC,YAAYO,CAAM;AAAA,IAC7B,SAAS,MAAMD,EAAYC,CAAM;AAAA,IACjC,gBAAgB;AAAA,IAChB,OAAO;AAAA,EAAA,CACT;AACJ;AAGA,eAAsBE,EAAiBP,GAAY;;AAChD,QAAMC,IAAM,MAAM,MAAM,GAAGN,CAAO,UAAUK,CAAE,kBAAkB;AAAA,IAC7D,QAAQ;AAAA,IACR,aAAa;AAAA;AAAA,EAAA,CAEf;AAED,MAAI,CAACC,EAAI,IAAI;AACV,UAAML,IAAO,MAAMK,EAAI,KAAA;AACvB,UAAM,IAAI,MAAML,EAAK,KAAK;AAAA,EAC7B;AAEA,QAAMY,MAAWC,IAAAR,EAAI,QAAQ,IAAI,qBAAqB,MAArC,gBAAAQ,EAAwC,MAAM,aAAa,OAAM,QAAQT,CAAE,QAGtFU,KAASC,IAAAV,EAAI,SAAJ,gBAAAU,EAAU,aACnBC,IAAS,IAAI,eAAe;AAAA,IAC/B,MAAM,MAAMC,GAAY;AACrB,iBAAa;AACV,cAAM,EAAE,MAAAC,GAAM,OAAAC,EAAA,IAAU,MAAML,EAAQ,KAAA;AACtC,YAAII,EAAM;AACV,QAAAD,EAAW,QAAQE,CAAK;AAAA,MAC3B;AACA,MAAAF,EAAW,MAAA,GACXH,EAAQ,YAAA;AAAA,IACX;AAAA,EAAA,CACF,GAGKM,IAAO,MAAM,IAAI,SAASJ,CAAM,EAAE,KAAA,GAClClB,IAAM,OAAO,IAAI,gBAAgBsB,CAAI,GACrCC,IAAO,SAAS,cAAc,GAAG;AACvC,EAAAA,EAAK,OAAOvB,GACZuB,EAAK,WAAWT,GAChB,SAAS,KAAK,YAAYS,CAAI,GAC9BA,EAAK,MAAA,GACLA,EAAK,OAAA,GACL,OAAO,IAAI,gBAAgBvB,CAAG;AACjC;AAEO,SAASwB,IAAqB;AAClC,SAAOC,EAAY;AAAA,IAChB,YAAYZ;AAAA,IACZ,WAAW,CAACN,MAAQ;AACjB,cAAQ,IAAI,wBAAwBA,CAAG;AAAA,IAC1C;AAAA,IACA,SAAS,CAACA,MAAQ;AACf,cAAQ,IAAI,6BAA6BA,CAAG;AAAA,IAC/C;AAAA,EAAA,CACF;AACJ;AAGA,eAAsBmB,EAAWC,GAA0B;AACxD,QAAMC,IAAS,IAAI,QAAQ,EAAE,gBAAgB,oBAAoB,QAAQ,oBAAoB;AAC7F,UAAQ,IAAI,aAAaD,CAAO;AAOhC,QAAMzB,IAAO,OAND,MAAM,MAAM,GAAGD,CAAO,UAAU;AAAA,IACzC,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAAS2B;AAAA,IACT,MAAM,KAAK,UAAUD,CAAO;AAAA,EAAA,CAC9B,GACsB,KAAA;AACvB,MAAI,CAACzB,EAAK;AACP,UAAM,IAAI,MAAMA,EAAK,SAASA,EAAK,MAAM;AAE5C,SAAOA;AACV;AAEO,SAAS2B,IAAgB;AAC7B,QAAMC,IAAcC,EAAA;AACpB,SAAON,EAAY;AAAA,IAChB,YAAYC;AAAA,IACZ,WAAW,CAACnB,MAAQ;AAEjB,cAAQ,IAAI,qBAAqBA,CAAG,GACpCuB,EAAY,kBAAkB,EAAE,UAAU,CAAC,OAAO,GAAG;AAAA,IACxD;AAAA,EAAA,CACF;AACJ;AAGA,eAAsBE,EAAWC,GAAoD;AAClF,QAAML,IAAS,IAAI,QAAQ,EAAE,gBAAgB,oBAAoB,QAAQ,oBAAoB;AAC7F,UAAQ,IAAI,aAAaK,CAAa;AAOtC,QAAM/B,IAAO,OAND,MAAM,MAAM,GAAGD,CAAO,UAAUgC,EAAc,EAAE,IAAI;AAAA,IAC7D,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAASL;AAAA,IACT,MAAM,KAAK,UAAU,EAAE,MAAMK,EAAc,MAAM;AAAA,EAAA,CACnD,GACsB,KAAA;AAEvB,MADA,QAAQ,IAAI,UAAU/B,CAAI,GACtB,CAACA,EAAK;AACP,UAAM,IAAI,MAAMA,EAAK,KAAK;AAE7B,SAAOA;AACV;AAEO,SAASgC,IAAgB;AAC7B,QAAMJ,IAAcC,EAAA;AACpB,SAAON,EAAY;AAAA,IAChB,YAAYO;AAAA,IACZ,WAAW,CAACzB,MAAQ;;AAEjB,cAAQ,IAAI,qBAAqBA,CAAG;AACpC,YAAM4B,KAASpB,IAAAR,KAAA,gBAAAA,EAAK,WAAL,gBAAAQ,EAAa;AAC5B,MAAIoB,KACDL,EAAY,kBAAkB,EAAE,UAAU,CAAC,QAAQK,CAAM,GAAG,GAG/DL,EAAY,kBAAkB,EAAE,UAAU,CAAC,OAAO,GAAG;AAAA,IACxD;AAAA,EAAA,CACF;AACJ;AAGA,eAAsBM,EAAW,EAAE,IAAA9B,GAAI,kBAAA+B,KAA+D;AACnG,QAAMT,IAAS,IAAI,QAAQ,EAAE,gBAAgB,oBAAoB,QAAQ,oBAAoB,GAMvF1B,IAAO,OALD,MAAM,MAAM,GAAGD,CAAO,UAAUK,CAAE,eAAe+B,CAAgB,IAAI;AAAA,IAC9E,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAAST;AAAA,EAAA,CACX,GACsB,KAAA;AACvB,MAAI,CAAC1B,EAAK;AACP,UAAM,IAAI,MAAMA,EAAK,KAAK;AAE7B,SAAOA;AACV;AAEO,SAASoC,IAAgB;AAC7B,QAAMR,IAAcC,EAAA;AACpB,SAAON,EAAY;AAAA,IAChB,YAAYW;AAAA,IACZ,WAAW,CAAC7B,MAAQ;AACjB,cAAQ,IAAI,qBAAqBA,CAAG,GACpCuB,EAAY,kBAAkB,EAAE,UAAU,CAAC,OAAO,GAAG;AAAA,IACxD;AAAA,EAAA,CACF;AACJ;AAGA,eAAsBS,EAAcjC,GAAY;AAC7C,QAAMsB,IAAS,IAAI,QAAQ,EAAE,gBAAgB,oBAAoB,QAAQ,oBAAoB,GAMvF1B,IAAO,OALD,MAAM,MAAM,GAAGD,CAAO,UAAUK,CAAE,kBAAkB;AAAA,IAC7D,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAASsB;AAAA,EAAA,CACX,GACsB,KAAA;AACvB,MAAI,CAAC1B,EAAK;AACP,UAAM,IAAI,MAAMA,EAAK,KAAK;AAE7B,SAAOA;AACV;AAEO,SAASsC,IAAmB;AAChC,QAAMV,IAAcC,EAAA;AACpB,SAAON,EAAY;AAAA,IAChB,YAAYc;AAAA,IACZ,WAAW,CAAChC,GAAKI,MAAW;AACzB,cAAQ,IAAI,uBAAuBJ,GAAKI,CAAM,GAC9CmB,EAAY,kBAAkB,EAAE,UAAU,CAAC,QAAQnB,CAAM,GAAG,GAC5DmB,EAAY,kBAAkB,EAAE,UAAU,CAAC,OAAO,GAAG;AAAA,IACxD;AAAA,EAAA,CACF;AACJ;AAGA,eAAsBW,EAAUnC,GAAY;AACzC,QAAMsB,IAAS,IAAI,QAAQ,EAAE,gBAAgB,oBAAoB,QAAQ,oBAAoB,GAMvF1B,IAAO,OALD,MAAM,MAAM,GAAGD,CAAO,UAAUK,CAAE,iBAAiB;AAAA,IAC5D,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAASsB;AAAA,EAAA,CACX,GACsB,KAAA;AACvB,MAAI,CAAC1B,EAAK;AACP,UAAM,IAAI,MAAMA,EAAK,KAAK;AAE7B,SAAOA;AACV;AAEO,SAASwC,IAAe;AAC5B,QAAMZ,IAAcC,EAAA;AACpB,SAAON,EAAY;AAAA,IAChB,YAAYgB;AAAA,IACZ,WAAW,CAAClC,GAAKI,MAAW;AACzB,cAAQ,IAAI,sBAAsBJ,GAAKI,CAAM,GAC7CmB,EAAY,kBAAkB,EAAE,UAAU,CAAC,QAAQnB,CAAM,GAAG,GAC5DmB,EAAY,kBAAkB,EAAE,UAAU,CAAC,OAAO,GAAG;AAAA,IACxD;AAAA,EAAA,CACF;AACJ;AAGA,eAAsBa,EAAWrC,GAAY;AAC1C,QAAMsB,IAAS,IAAI,QAAQ,EAAE,gBAAgB,oBAAoB,QAAQ,oBAAoB,GAMvF1B,IAAO,OALD,MAAM,MAAM,GAAGD,CAAO,UAAUK,CAAE,kBAAkB;AAAA,IAC7D,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAASsB;AAAA,EAAA,CACX,GACsB,KAAA;AACvB,MAAI,CAAC1B,EAAK;AACP,UAAM,IAAI,MAAMA,EAAK,KAAK;AAE7B,SAAOA;AACV;AAEO,SAAS0C,IAAgB;AAC7B,QAAMd,IAAcC,EAAA;AACpB,SAAON,EAAY;AAAA,IAChB,YAAYkB;AAAA,IACZ,WAAW,CAACpC,GAAKI,MAAW;AACzB,cAAQ,IAAI,uBAAuBJ,GAAKI,CAAM,GAC9CmB,EAAY,kBAAkB,EAAE,UAAU,CAAC,QAAQnB,CAAM,GAAG,GAC5DmB,EAAY,kBAAkB,EAAE,UAAU,CAAC,OAAO,GAAG;AAAA,IACxD;AAAA,EAAA,CACF;AACJ;AAGA,eAAsBe,EAAUvC,GAAY;AACzC,QAAMsB,IAAS,IAAI,QAAQ,EAAE,gBAAgB,oBAAoB,QAAQ,oBAAoB,GAMvF1B,IAAO,OALD,MAAM,MAAM,GAAGD,CAAO,UAAUK,CAAE,iBAAiB;AAAA,IAC5D,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAASsB;AAAA,EAAA,CACX,GACsB,KAAA;AACvB,MAAI,CAAC1B,EAAK;AACP,UAAM,IAAI,MAAMA,EAAK,KAAK;AAE7B,SAAOA;AACV;AAEO,SAAS4C,IAAe;AAC5B,QAAMhB,IAAcC,EAAA;AACpB,SAAON,EAAY;AAAA,IAChB,YAAYoB;AAAA,IACZ,SAAS,CAACrC,MAAiB;AACxB,cAAQ,IAAI,WAAWA,KAAA,gBAAAA,EAAO,OAAO,GACrCuC,EAAM,MAAMvC,EAAM,WAAW,6BAA6B;AAAA,IAC7D;AAAA,IACA,WAAW,CAACD,GAAKI,MAAW;AACzB,cAAQ,IAAI,sBAAsBJ,GAAKI,CAAM,GAC7CmB,EAAY,kBAAkB,EAAE,UAAU,CAAC,QAAQnB,CAAM,GAAG,GAC5DoC,EAAM,SAAQxC,KAAA,gBAAAA,EAAK,YAAW,qCAAqC,EAAE,WAAW,KAAM;AAAA,IACzF;AAAA,EAAA,CACF;AACJ;AAGA,eAAsByC,EAAW1C,GAAY;AAC1C,QAAMsB,IAAS,IAAI,QAAQ,EAAE,gBAAgB,oBAAoB,QAAQ,oBAAoB,GAMvF1B,IAAO,OALD,MAAM,MAAM,GAAGD,CAAO,UAAUK,CAAE,kBAAkB;AAAA,IAC7D,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAASsB;AAAA,EAAA,CACX,GACsB,KAAA;AACvB,MAAI,CAAC1B,EAAK;AACP,UAAM,IAAI,MAAMA,EAAK,KAAK;AAE7B,SAAOA;AACV;AAEO,SAAS+C,IAAgB;AAC7B,QAAMnB,IAAcC,EAAA;AACpB,SAAON,EAAY;AAAA,IAChB,YAAYuB;AAAA,IACZ,SAAS,CAACxC,MAAiB;AACxB,cAAQ,IAAI,WAAWA,KAAA,gBAAAA,EAAO,OAAO,GACrCuC,EAAM,MAAMvC,EAAM,WAAW,6BAA6B;AAAA,IAC7D;AAAA,IACA,WAAW,CAACD,GAAKI,MAAW;AACzB,cAAQ,IAAI,sBAAsBJ,GAAKI,CAAM,GAC7CmB,EAAY,kBAAkB,EAAE,UAAU,CAAC,QAAQnB,CAAM,GAAG,GAC5DoC,EAAM,QAAQ,qCAAqC,EAAE,WAAW,KAAM;AAAA,IACzE;AAAA,EAAA,CACF;AACJ;AAGA,eAAsBG,EAAmBvC,GAAgB;AACtD,QAAMX,IAAM,IAAI,IAAI,GAAGC,CAAO,UAAUU,CAAM,cAAc,GAMtDT,IAAO,OAJD,MAAM,MAAMF,EAAI,YAAY;AAAA,IACrC,QAAQ;AAAA,IACR,aAAa;AAAA,EAAA,CACf,GACsB,KAAA;AACvB,MAAI,CAACE,EAAK;AACP,UAAM,IAAI,MAAMA,EAAK,KAAK;AAE7B,SAAOA;AACV;AAEO,SAASiD,IAAwB;AACrC,SAAO1B,EAAY;AAAA;AAAA,IAEhB,YAAYyB;AAAA;AAAA,EAAA,CAEd;AACJ;"}
|
|
1
|
+
{"version":3,"file":"plans.js","sources":["../../src/services/plans.ts"],"sourcesContent":["import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\r\nimport { toast } from 'react-toastify';\r\nimport { API_URL } from '../utils/constants';\r\nimport { NewPlanSettings, Plan } from '../@types/plans';\r\n\r\n// Get All Plans\r\nexport async function getAllPlans() {\r\n const url = new URL(`${API_URL}/plans`);\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 useGetPlans() {\r\n return useQuery({\r\n queryKey: ['plans'],\r\n queryFn: () => getAllPlans(),\r\n refetchOnMount: true,\r\n retry: false,\r\n });\r\n}\r\n\r\n// Get Single Plan\r\nexport async function getSinglePlan(id: string) {\r\n if (!id) {\r\n throw new Error('ID Not Provided.');\r\n }\r\n const url = new URL(`${API_URL}/plans/${id}`);\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 const error = new Error(data.error) as Error & { status?: number };\r\n error.status = res.status;\r\n throw error;\r\n }\r\n return data;\r\n}\r\n\r\nexport function useGetPlan(id: string) {\r\n return useQuery({\r\n queryKey: ['plan', id],\r\n queryFn: () => getSinglePlan(id),\r\n refetchOnMount: true,\r\n retry: false,\r\n staleTime: 0,\r\n });\r\n}\r\n\r\n// Get Plan Logs\r\nexport async function getPlanLogs(planId: string) {\r\n const url = new URL(`${API_URL}/plans/${planId}/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 const error = new Error(data.error) as Error & { status?: number };\r\n error.status = res.status;\r\n throw error;\r\n }\r\n return data;\r\n}\r\n\r\nexport function useGetPlanLogs(planId: string) {\r\n return useQuery({\r\n queryKey: ['planLogs', planId],\r\n queryFn: () => getPlanLogs(planId),\r\n refetchOnMount: true,\r\n retry: false,\r\n });\r\n}\r\n\r\n// Download Plan Logs\r\nexport async function downloadPlanLogs(id: string) {\r\n const res = await fetch(`${API_URL}/plans/${id}/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] || `plan-${id}.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 useGetDownloadLogs() {\r\n return useMutation({\r\n mutationFn: downloadPlanLogs,\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\n// Create New Plan\r\nexport async function createPlan(newPlan: NewPlanSettings) {\r\n const header = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n console.log('newPlan :', newPlan);\r\n const res = await fetch(`${API_URL}/plans`, {\r\n method: 'POST',\r\n credentials: 'include',\r\n headers: header,\r\n body: JSON.stringify(newPlan),\r\n });\r\n const data = await res.json();\r\n if (!data.success) {\r\n throw new Error(data.error || data.result);\r\n }\r\n return data;\r\n}\r\n\r\nexport function useCreatePlan() {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: createPlan,\r\n onSuccess: (res) => {\r\n // TODO: Should Display a Notification Bubble.\r\n console.log('# Plan Created! :', res);\r\n queryClient.invalidateQueries({ queryKey: ['plans'] });\r\n },\r\n });\r\n}\r\n\r\n// UpdatePlan\r\nexport async function updatePlan(updatePayload: { id: string; data: Partial<Plan> }) {\r\n const header = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n console.log('newPlan :', updatePayload);\r\n const res = await fetch(`${API_URL}/plans/${updatePayload.id}`, {\r\n method: 'PUT',\r\n credentials: 'include',\r\n headers: header,\r\n body: JSON.stringify({ plan: updatePayload.data }),\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 useUpdatePlan() {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: updatePlan,\r\n onSuccess: (res) => {\r\n // TODO: Should Display a Notification Bubble.\r\n console.log('# Plan Updated! :', res);\r\n const planID = res?.result?.id;\r\n if (planID) {\r\n queryClient.invalidateQueries({ queryKey: ['plan', planID] });\r\n }\r\n\r\n queryClient.invalidateQueries({ queryKey: ['plans'] });\r\n },\r\n });\r\n}\r\n\r\n// Remove Plan\r\nexport async function deletePlan({ id, removeRemoteData }: { id: string; removeRemoteData: boolean }) {\r\n const header = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/plans/${id}?removeData=${removeRemoteData}`, {\r\n method: 'DELETE',\r\n credentials: 'include',\r\n headers: header,\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 useDeletePlan() {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: deletePlan,\r\n onSuccess: (res) => {\r\n console.log('# Plan Removed! :', res);\r\n queryClient.invalidateQueries({ queryKey: ['plans'] });\r\n },\r\n });\r\n}\r\n\r\n// Perform Backup\r\nexport async function performBackup(id: string) {\r\n const header = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/plans/${id}/action/backup`, {\r\n method: 'POST',\r\n credentials: 'include',\r\n headers: header,\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 usePerformBackup() {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: performBackup,\r\n onSuccess: (res, planId) => {\r\n console.log('# Backup Started! :', res, planId);\r\n queryClient.invalidateQueries({ queryKey: ['plan', planId] });\r\n queryClient.invalidateQueries({ queryKey: ['plans'] });\r\n },\r\n });\r\n}\r\n\r\n// Pause Backup\r\nexport async function pausePlan(id: string) {\r\n const header = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/plans/${id}/action/pause`, {\r\n method: 'POST',\r\n credentials: 'include',\r\n headers: header,\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 usePausePlan() {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: pausePlan,\r\n onSuccess: (res, planId) => {\r\n console.log('# Backup Paused! :', res, planId);\r\n queryClient.invalidateQueries({ queryKey: ['plan', planId] });\r\n queryClient.invalidateQueries({ queryKey: ['plans'] });\r\n },\r\n });\r\n}\r\n\r\n// Resume Backup\r\nexport async function resumePlan(id: string) {\r\n const header = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/plans/${id}/action/resume`, {\r\n method: 'POST',\r\n credentials: 'include',\r\n headers: header,\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 useResumePlan() {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: resumePlan,\r\n onSuccess: (res, planId) => {\r\n console.log('# Backup Resumed! :', res, planId);\r\n queryClient.invalidateQueries({ queryKey: ['plan', planId] });\r\n queryClient.invalidateQueries({ queryKey: ['plans'] });\r\n },\r\n });\r\n}\r\n\r\n// Prune Backup Plan\r\nexport async function prunePlan(id: string) {\r\n const header = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/plans/${id}/action/prune`, {\r\n method: 'POST',\r\n credentials: 'include',\r\n headers: header,\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 usePrunePlan() {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: prunePlan,\r\n onError: (error: Error) => {\r\n console.log('error :', error?.message);\r\n toast.error(error.message || `Error Removing Old Backups.`);\r\n },\r\n onSuccess: (res, planId) => {\r\n console.log('# Backup Pruned! :', res, planId);\r\n queryClient.invalidateQueries({ queryKey: ['plan', planId] });\r\n toast.success(res?.message || `Removed Old Backups Successfully!`, { autoClose: 5000 });\r\n },\r\n });\r\n}\r\n\r\n// Unlock Backup Plan\r\nexport async function unlockPlan(id: string) {\r\n const header = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/plans/${id}/action/unlock`, {\r\n method: 'POST',\r\n credentials: 'include',\r\n headers: header,\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 useUnlockPlan() {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: unlockPlan,\r\n onError: (error: Error) => {\r\n console.log('error :', error?.message);\r\n toast.error(error.message || `Error Removing stale locks.`);\r\n },\r\n onSuccess: (res, planId) => {\r\n console.log('# Backup Pruned! :', res, planId);\r\n queryClient.invalidateQueries({ queryKey: ['plan', planId] });\r\n toast.success(`Removed Stale locks Successfully!`, { autoClose: 5000 });\r\n },\r\n });\r\n}\r\n\r\n// Get Backup Progress\r\nexport async function checkActiveBackupsOrRestore(planId: string, type: 'backup' | 'restore' = 'backup') {\r\n const url = new URL(`${API_URL}/plans/${planId}/checkactive`);\r\n url.searchParams.append('type', type);\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 useCheckActiveBackupsOrRestore() {\r\n return useMutation({\r\n // queryKey: ['planActiveBackups-' + planId],\r\n mutationFn: ({ planId, type }: { planId: string; type: 'backup' | 'restore' }) => checkActiveBackupsOrRestore(planId, type),\r\n // refetchOnMount: true,\r\n });\r\n}\r\n"],"names":["getAllPlans","url","API_URL","data","useGetPlans","useQuery","getSinglePlan","id","res","error","useGetPlan","getPlanLogs","planId","useGetPlanLogs","downloadPlanLogs","filename","_a","reader","_b","stream","controller","done","value","blob","link","useGetDownloadLogs","useMutation","createPlan","newPlan","header","useCreatePlan","queryClient","useQueryClient","updatePlan","updatePayload","useUpdatePlan","planID","deletePlan","removeRemoteData","useDeletePlan","performBackup","usePerformBackup","pausePlan","usePausePlan","resumePlan","useResumePlan","prunePlan","usePrunePlan","toast","unlockPlan","useUnlockPlan","checkActiveBackupsOrRestore","type","useCheckActiveBackupsOrRestore"],"mappings":"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"}
|