@plutonhq/core-frontend 0.1.13 → 0.1.14
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 +85 -58
- package/dist-lib/components/Plan/PlanForm/PlanForm.js.map +1 -1
- 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/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.js +14 -14
- 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/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 +4 -0
- package/dist-lib/components/index.d.ts.map +1 -1
- package/dist-lib/components.js +86 -78
- 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/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 +14 -0
- package/dist-lib/services/plans.d.ts.map +1 -1
- package/dist-lib/services/plans.js +160 -129
- 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/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 +107 -103
- 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 +30 -3
- package/src/components/Plan/PlanItems/PlanItem.tsx +3 -3
- 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 +1 -1
- package/src/components/Settings/IntegrationSettings/IntegrationSettings.tsx +9 -2
- package/src/components/common/Icon/Icon.tsx +10 -1
- package/src/components/common/PageHeader/PageHeader.module.scss +3 -0
- package/src/components/index.ts +6 -0
- package/src/hooks/usePwaAutoUpdate.ts +51 -11
- package/src/router.tsx +26 -17
- package/src/routes/DeviceSingle/DeviceSingle.tsx +3 -3
- package/src/services/backups.ts +32 -9
- package/src/services/plans.ts +45 -0
- package/src/services/restores.ts +10 -2
- package/src/services/users.ts +14 -5
- package/src/utils/progressHelpers.ts +85 -1
|
@@ -1,7 +1,18 @@
|
|
|
1
1
|
import { BackupProgressData } from '../@types/backups';
|
|
2
2
|
export declare function generateBackupProgressMessage(progressData: BackupProgressData | null): string;
|
|
3
|
-
export declare const getBackupEventActionMessage: (action: string) => string;
|
|
3
|
+
export declare const getBackupEventActionMessage: (action: string, storageName?: string) => string;
|
|
4
4
|
export declare function generateRestoreProgressMessage(progressData: BackupProgressData | null): string;
|
|
5
5
|
export declare const getRestoreEventActionMessage: (action: string) => string;
|
|
6
6
|
export declare function extractResticData(progressData: BackupProgressData | null): any;
|
|
7
|
+
/**
|
|
8
|
+
* Generates a human-readable progress message for a specific replication mirror.
|
|
9
|
+
* Uses the mirror's latest event action and includes the storage name.
|
|
10
|
+
*/
|
|
11
|
+
export declare function generateMirrorProgressMessage(mirror: {
|
|
12
|
+
storageName: string;
|
|
13
|
+
events?: {
|
|
14
|
+
action: string;
|
|
15
|
+
completed: boolean;
|
|
16
|
+
}[];
|
|
17
|
+
}): string;
|
|
7
18
|
//# sourceMappingURL=progressHelpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"progressHelpers.d.ts","sourceRoot":"","sources":["../../src/utils/progressHelpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,wBAAgB,6BAA6B,CAAC,YAAY,EAAE,kBAAkB,GAAG,IAAI,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"progressHelpers.d.ts","sourceRoot":"","sources":["../../src/utils/progressHelpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,wBAAgB,6BAA6B,CAAC,YAAY,EAAE,kBAAkB,GAAG,IAAI,GAAG,MAAM,CAqC7F;AAoCD,eAAO,MAAM,2BAA2B,GAAI,QAAQ,MAAM,EAAE,cAAc,MAAM,KAAG,MA4HlF,CAAC;AAEF,wBAAgB,8BAA8B,CAAC,YAAY,EAAE,kBAAkB,GAAG,IAAI,GAAG,MAAM,CAqC9F;AAED,eAAO,MAAM,4BAA4B,GAAI,QAAQ,MAAM,KAAG,MAiD7D,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,kBAAkB,GAAG,IAAI,OAYxE;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,EAAE,CAAA;CAAE,GAAG,MAAM,CAkBxI"}
|
|
@@ -1,53 +1,64 @@
|
|
|
1
|
-
function
|
|
2
|
-
var
|
|
3
|
-
if (!((
|
|
1
|
+
function C(t) {
|
|
2
|
+
var o;
|
|
3
|
+
if (!((o = t == null ? void 0 : t.events) != null && o.length))
|
|
4
4
|
return "Initializing...";
|
|
5
|
-
const
|
|
6
|
-
if (!
|
|
5
|
+
const R = t.events.slice().reverse().find((e) => !e.completed) || t.events[t.events.length - 1];
|
|
6
|
+
if (!R)
|
|
7
7
|
return "Initializing...";
|
|
8
|
-
const { phase:
|
|
8
|
+
const { phase: i, action: E } = R, _ = {
|
|
9
9
|
initializing: "Initializing",
|
|
10
10
|
"pre-backup": "Pre-Backup",
|
|
11
11
|
backup: "Backup",
|
|
12
12
|
"post-backup": "Post-Backup",
|
|
13
|
+
replicating: "Replicating",
|
|
13
14
|
finished: "Complete"
|
|
14
|
-
}[
|
|
15
|
-
return
|
|
15
|
+
}[i] || i, P = s(E);
|
|
16
|
+
return i === "finished" ? P : `${_}: ${P}`;
|
|
16
17
|
}
|
|
17
|
-
const
|
|
18
|
-
const
|
|
18
|
+
const c = (t) => {
|
|
19
|
+
const T = {
|
|
19
20
|
ONBACKUPSTART: "Start Script",
|
|
20
21
|
ONBACKUPCOMPLETE: "Complete Script",
|
|
21
22
|
ONBACKUPERROR: "Error Script",
|
|
22
23
|
ONBACKUPFAILURE: "Failure Script",
|
|
23
24
|
ONBACKUPEND: "End Script"
|
|
24
|
-
},
|
|
25
|
-
START: (
|
|
26
|
-
COMPLETE: (
|
|
27
|
-
FAIL: (
|
|
28
|
-
ERROR: (
|
|
29
|
-
},
|
|
30
|
-
if (
|
|
31
|
-
const [,
|
|
32
|
-
if (
|
|
33
|
-
return
|
|
25
|
+
}, R = {
|
|
26
|
+
START: (E, n) => `Running ${E} ${n}...`,
|
|
27
|
+
COMPLETE: (E, n) => `Script ${n} Complete`,
|
|
28
|
+
FAIL: (E, n) => `Script ${n} Failed`,
|
|
29
|
+
ERROR: (E, n) => `Error in ${E} ${n}`
|
|
30
|
+
}, i = t.match(/^(ONBACKUP\w+)_SCRIPT_(\d+)_(START|COMPLETE|FAIL|ERROR)$/);
|
|
31
|
+
if (i) {
|
|
32
|
+
const [, E, n, _] = i, P = T[E] || "Script", o = R[_];
|
|
33
|
+
if (o)
|
|
34
|
+
return o(P, n);
|
|
34
35
|
}
|
|
35
36
|
return null;
|
|
36
|
-
},
|
|
37
|
-
const R =
|
|
37
|
+
}, s = (t, T) => {
|
|
38
|
+
const R = c(t);
|
|
38
39
|
if (R)
|
|
39
40
|
return R;
|
|
40
|
-
const
|
|
41
|
-
if (
|
|
42
|
-
const [,
|
|
43
|
-
return `Retrying (${
|
|
41
|
+
const i = t.match(/RETRY_ATTEMPT_(\d+)_OF_(\d+)_START/);
|
|
42
|
+
if (i) {
|
|
43
|
+
const [, e, r] = i;
|
|
44
|
+
return `Retrying (${e}/${r})...`;
|
|
44
45
|
}
|
|
45
|
-
const E =
|
|
46
|
+
const E = t.match(/BACKUP_RETRY_(\d+)_OF_(\d+)_SCHEDULED/);
|
|
46
47
|
if (E) {
|
|
47
|
-
const [,
|
|
48
|
-
return `Scheduling Retry (${parseInt(
|
|
48
|
+
const [, e, r] = E;
|
|
49
|
+
return `Scheduling Retry (${parseInt(e)}/${r})...`;
|
|
49
50
|
}
|
|
50
|
-
|
|
51
|
+
const n = t.match(/REPLICATION_RETRY_(\d+)_OF_(\d+)_SCHEDULED/);
|
|
52
|
+
if (n) {
|
|
53
|
+
const [, e, r] = n;
|
|
54
|
+
return `Retrying (${e}/${r})...`;
|
|
55
|
+
}
|
|
56
|
+
const _ = t.match(/REPLICATION_RETRY_(\d+)_OF_(\d+)_START/);
|
|
57
|
+
if (_) {
|
|
58
|
+
const [, e, r] = _;
|
|
59
|
+
return `Retrying (${e}/${r})...`;
|
|
60
|
+
}
|
|
61
|
+
const P = {
|
|
51
62
|
INITIALIZE: "Starting Backup...",
|
|
52
63
|
PRE_BACKUP_START: "Preparing Backup...",
|
|
53
64
|
PRE_BACKUP_DRY_RUN_START: "Performing Dry Run...",
|
|
@@ -86,39 +97,78 @@ const S = (e) => {
|
|
|
86
97
|
ISO_UPLOAD_START: "Uploading ISO...",
|
|
87
98
|
ISO_UPLOAD_COMPLETE: "ISO Upload Complete",
|
|
88
99
|
ISO_UPLOAD_FAILED: "ISO Upload Failed",
|
|
89
|
-
BACKUP_WARNING: "Hiccup Detected During Backup"
|
|
90
|
-
|
|
100
|
+
BACKUP_WARNING: "Hiccup Detected During Backup",
|
|
101
|
+
// Replication actions
|
|
102
|
+
REPLICATION_START: "Replicating Snapshots...",
|
|
103
|
+
REPLICATION_INIT_START: "Initializing Replication Repository...",
|
|
104
|
+
REPLICATION_INIT_COMPLETE: "Replication Repository Initialized",
|
|
105
|
+
REPLICATION_INIT_FAILED: "Replication Repository Init Failed",
|
|
106
|
+
REPLICATION_UNLOCK_START: "Unlocking Replication Repository...",
|
|
107
|
+
REPLICATION_UNLOCK_COMPLETE: "Replication Repository Unlocked",
|
|
108
|
+
REPLICATION_COPY_START: "Copying Snapshot to Replication...",
|
|
109
|
+
REPLICATION_COPY_COMPLETE: "Snapshot Copied to Replication",
|
|
110
|
+
REPLICATION_COPY_FAILED: "Replication Copy Failed",
|
|
111
|
+
REPLICATION_PRUNE_START: "Pruning Replication Repository...",
|
|
112
|
+
REPLICATION_PRUNE_COMPLETE: "Replication Prune Complete",
|
|
113
|
+
REPLICATION_PRUNE_FAILED: "Replication Prune Failed",
|
|
114
|
+
REPLICATION_STATS_START: "Updating Replication Stats...",
|
|
115
|
+
REPLICATION_STATS_COMPLETE: "Replication Stats Updated",
|
|
116
|
+
REPLICATION_COMPLETE: "Replication Complete",
|
|
117
|
+
REPLICATION_FAILED: "Replication Failed",
|
|
118
|
+
REPLICATION_PARTIAL_FAILURE: "Some Replications Failed",
|
|
119
|
+
REPLICATION_MANUAL_RETRY_START: "Retrying Failed Replications...",
|
|
120
|
+
REPLICATION_MANUAL_RETRY_COMPLETE: "Replication Retry Complete",
|
|
121
|
+
REPLICATION_MANUAL_RETRY_PARTIAL_FAILURE: "Some Replication Retries Still Failed"
|
|
122
|
+
}, o = {
|
|
123
|
+
REPLICATION_START: (e) => `Replicating Snapshot to ${e}...`,
|
|
124
|
+
REPLICATION_INIT_START: (e) => `Initializing Replication Repository in ${e}...`,
|
|
125
|
+
REPLICATION_INIT_COMPLETE: (e) => `Replication Repository Initialized in ${e}`,
|
|
126
|
+
REPLICATION_INIT_FAILED: (e) => `Replication Repository Init Failed in ${e}`,
|
|
127
|
+
REPLICATION_UNLOCK_START: (e) => `Unlocking Replication Repository in ${e}...`,
|
|
128
|
+
REPLICATION_UNLOCK_COMPLETE: (e) => `Replication Repository Unlocked in ${e}`,
|
|
129
|
+
REPLICATION_COPY_START: (e) => `Copying Snapshot to ${e}...`,
|
|
130
|
+
REPLICATION_COPY_COMPLETE: (e) => `Snapshot Copied to ${e}`,
|
|
131
|
+
REPLICATION_COPY_FAILED: (e) => `Replication Copy Failed for ${e}`,
|
|
132
|
+
REPLICATION_PRUNE_START: (e) => `Pruning Replication Repository in ${e}...`,
|
|
133
|
+
REPLICATION_PRUNE_COMPLETE: (e) => `Replication Prune Complete for ${e}`,
|
|
134
|
+
REPLICATION_PRUNE_FAILED: (e) => `Replication Prune Failed for ${e}`,
|
|
135
|
+
REPLICATION_STATS_START: (e) => `Updating Replication Stats for ${e}...`,
|
|
136
|
+
REPLICATION_STATS_COMPLETE: (e) => `Replication Stats Updated for ${e}`,
|
|
137
|
+
REPLICATION_COMPLETE: (e) => `Replication Complete for ${e}`,
|
|
138
|
+
REPLICATION_FAILED: (e) => `Replication Failed for ${e}`
|
|
139
|
+
};
|
|
140
|
+
return T && o[t] ? o[t](T) : P[t] || t;
|
|
91
141
|
};
|
|
92
|
-
function
|
|
93
|
-
var
|
|
94
|
-
if (!((
|
|
142
|
+
function S(t) {
|
|
143
|
+
var o;
|
|
144
|
+
if (!((o = t == null ? void 0 : t.events) != null && o.length))
|
|
95
145
|
return "Initializing...";
|
|
96
|
-
const
|
|
97
|
-
if (!
|
|
146
|
+
const R = t.events.slice().reverse().find((e) => !e.completed) || t.events[t.events.length - 1];
|
|
147
|
+
if (!R)
|
|
98
148
|
return "Initializing...";
|
|
99
|
-
const { phase:
|
|
149
|
+
const { phase: i, action: E } = R, _ = {
|
|
100
150
|
initializing: "Initializing",
|
|
101
151
|
"pre-restore": "Pre-Restore",
|
|
102
152
|
restore: "Restore",
|
|
103
153
|
"post-restore": "Post-Restore",
|
|
104
154
|
retry: "Retrying",
|
|
105
155
|
finished: "Complete"
|
|
106
|
-
}[
|
|
107
|
-
return
|
|
156
|
+
}[i] || i, P = O(E);
|
|
157
|
+
return i === "finished" ? P : `${_}: ${P}`;
|
|
108
158
|
}
|
|
109
|
-
const
|
|
110
|
-
const
|
|
111
|
-
if (
|
|
112
|
-
return
|
|
113
|
-
const
|
|
114
|
-
if (
|
|
115
|
-
const [,
|
|
116
|
-
return `Retrying (${
|
|
159
|
+
const O = (t) => {
|
|
160
|
+
const T = c(t);
|
|
161
|
+
if (T)
|
|
162
|
+
return T;
|
|
163
|
+
const R = t.match(/RETRY_ATTEMPT_(\d+)_OF_(\d+)_START/);
|
|
164
|
+
if (R) {
|
|
165
|
+
const [, n, _] = R;
|
|
166
|
+
return `Retrying (${n}/${_})...`;
|
|
117
167
|
}
|
|
118
|
-
const
|
|
119
|
-
if (
|
|
120
|
-
const [,
|
|
121
|
-
return `Scheduling Retry (${parseInt(
|
|
168
|
+
const i = t.match(/RESTORE_RETRY_(\d+)_OF_(\d+)_SCHEDULED/);
|
|
169
|
+
if (i) {
|
|
170
|
+
const [, n, _] = i;
|
|
171
|
+
return `Scheduling Retry (${parseInt(n)}/${_})...`;
|
|
122
172
|
}
|
|
123
173
|
return {
|
|
124
174
|
INITIALIZE: "Starting Restore...",
|
|
@@ -145,20 +195,28 @@ const c = (e) => {
|
|
|
145
195
|
TASK_FAILED: "Restore Failed with Error.",
|
|
146
196
|
TASK_CANCELLED: "Restore Cancelled by User.",
|
|
147
197
|
FAILED_PERMANENTLY: "Failed Permanently"
|
|
148
|
-
}[
|
|
198
|
+
}[t] || t;
|
|
149
199
|
};
|
|
150
|
-
function
|
|
151
|
-
var
|
|
152
|
-
if (!((
|
|
200
|
+
function a(t) {
|
|
201
|
+
var R;
|
|
202
|
+
if (!((R = t == null ? void 0 : t.events) != null && R.length))
|
|
153
203
|
return null;
|
|
154
|
-
const
|
|
155
|
-
return (
|
|
204
|
+
const T = t.events.slice().reverse().find((i) => i.resticData);
|
|
205
|
+
return (T == null ? void 0 : T.resticData) || null;
|
|
206
|
+
}
|
|
207
|
+
function A(t) {
|
|
208
|
+
var i;
|
|
209
|
+
if (!((i = t.events) != null && i.length))
|
|
210
|
+
return "Pending...";
|
|
211
|
+
const R = t.events.slice().reverse().find((E) => !E.completed) || t.events[t.events.length - 1];
|
|
212
|
+
return R ? s(R.action, t.storageName) : "Pending...";
|
|
156
213
|
}
|
|
157
214
|
export {
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
215
|
+
a as extractResticData,
|
|
216
|
+
C as generateBackupProgressMessage,
|
|
217
|
+
A as generateMirrorProgressMessage,
|
|
218
|
+
S as generateRestoreProgressMessage,
|
|
219
|
+
s as getBackupEventActionMessage,
|
|
220
|
+
O as getRestoreEventActionMessage
|
|
163
221
|
};
|
|
164
222
|
//# sourceMappingURL=progressHelpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"progressHelpers.js","sources":["../../src/utils/progressHelpers.ts"],"sourcesContent":["import { BackupProgressData } from '../@types/backups';\r\n\r\nexport function generateBackupProgressMessage(progressData: BackupProgressData | null): string {\r\n if (!progressData?.events?.length) {\r\n return 'Initializing...';\r\n }\r\n\r\n // Find the last incomplete event or the most recent event\r\n const lastIncompleteEvent = progressData.events\r\n .slice()\r\n .reverse()\r\n .find((event) => !event.completed);\r\n\r\n const currentEvent = lastIncompleteEvent || progressData.events[progressData.events.length - 1];\r\n\r\n if (!currentEvent) {\r\n return 'Initializing...';\r\n }\r\n\r\n const { phase, action } = currentEvent;\r\n\r\n // Map phases to display names\r\n const phaseDisplayNames: Record<string, string> = {\r\n initializing: 'Initializing',\r\n 'pre-backup': 'Pre-Backup',\r\n backup: 'Backup',\r\n 'post-backup': 'Post-Backup',\r\n finished: 'Complete',\r\n };\r\n\r\n const phaseDisplay = phaseDisplayNames[phase] || phase;\r\n const actionDisplay = getBackupEventActionMessage(action);\r\n\r\n if (phase === 'finished') {\r\n return actionDisplay;\r\n }\r\n\r\n return `${phaseDisplay}: ${actionDisplay}`;\r\n}\r\n\r\n// Helper function to handle script actions dynamically\r\nconst handleScriptAction = (action: string): string | null => {\r\n const scriptTypes = {\r\n ONBACKUPSTART: 'Start Script',\r\n ONBACKUPCOMPLETE: 'Complete Script',\r\n ONBACKUPERROR: 'Error Script',\r\n ONBACKUPFAILURE: 'Failure Script',\r\n ONBACKUPEND: 'End Script',\r\n };\r\n\r\n const actionStates = {\r\n START: (scriptType: string, num: string) => `Running ${scriptType} ${num}...`,\r\n COMPLETE: (_: string, num: string) => `Script ${num} Complete`,\r\n FAIL: (_: string, num: string) => `Script ${num} Failed`,\r\n ERROR: (scriptType: string, num: string) => `Error in ${scriptType} ${num}`,\r\n };\r\n\r\n // Generic pattern for all script actions: SCRIPTTYPE_SCRIPT_NUMBER_STATE\r\n const scriptMatch = action.match(/^(ONBACKUP\\w+)_SCRIPT_(\\d+)_(START|COMPLETE|FAIL|ERROR)$/);\r\n\r\n if (scriptMatch) {\r\n const [, scriptTypeKey, scriptNum, state] = scriptMatch;\r\n const scriptType = scriptTypes[scriptTypeKey as keyof typeof scriptTypes] || 'Script';\r\n const stateHandler = actionStates[state as keyof typeof actionStates];\r\n\r\n if (stateHandler) {\r\n return stateHandler(scriptType, scriptNum);\r\n }\r\n }\r\n\r\n return null;\r\n};\r\n\r\n// Function to extract numbers from action strings and create meaningful messages\r\nexport const getBackupEventActionMessage = (action: string): string => {\r\n // Handle script actions first\r\n const scriptMessage = handleScriptAction(action);\r\n if (scriptMessage) {\r\n return scriptMessage;\r\n }\r\n\r\n // Handle retry attempts\r\n const retryAttemptMatch = action.match(/RETRY_ATTEMPT_(\\d+)_OF_(\\d+)_START/);\r\n if (retryAttemptMatch) {\r\n const [, current, total] = retryAttemptMatch;\r\n return `Retrying (${current}/${total})...`;\r\n }\r\n\r\n // Handle backup retry scheduling\r\n const backupRetryMatch = action.match(/BACKUP_RETRY_(\\d+)_OF_(\\d+)_SCHEDULED/);\r\n if (backupRetryMatch) {\r\n const [, current, total] = backupRetryMatch;\r\n return `Scheduling Retry (${parseInt(current)}/${total})...`;\r\n }\r\n\r\n // Static action mappings\r\n const staticMessages: Record<string, string> = {\r\n INITIALIZE: 'Starting Backup...',\r\n PRE_BACKUP_START: 'Preparing Backup...',\r\n PRE_BACKUP_DRY_RUN_START: 'Performing Dry Run...',\r\n PRE_BACKUP_DRY_RUN_COMPLETE: 'Dry Run Complete',\r\n PRE_BACKUP_CHECKS_START: 'Running Checks...',\r\n PRE_BACKUP_CHECKS_COMPLETE: 'Checks Complete',\r\n PRE_BACKUP_SCRIPTS_START: 'Running Scripts...',\r\n PRE_BACKUP_SCRIPTS_COMPLETE: 'Scripts Complete',\r\n PRE_BACKUP_UNLOCK_STALE_LOCKS: 'Unlocking Repository...',\r\n PRE_BACKUP_COMPLETE: 'Pre-Backup Complete',\r\n BACKUP_OPERATION_START: 'Backing Up Files...',\r\n BACKUP_OPERATION_COMPLETE: 'Backup Complete',\r\n BACKUP_OPERATION_ERROR: 'Backup Encountered Errors',\r\n POST_BACKUP_START: 'Finalizing...',\r\n POST_BACKUP_SCRIPTS_START: 'Running Cleanup Scripts...',\r\n POST_BACKUP_SCRIPTS_COMPLETE: 'Cleanup Scripts Complete',\r\n POST_BACKUP_PRUNE_START: 'Pruning Old Backups...',\r\n POST_BACKUP_PRUNE_COMPLETE: 'Pruning Complete',\r\n POST_BACKUP_PRUNE_FAILED: 'Pruning Failed',\r\n POST_BACKUP_COMPLETE: 'Post-Backup Complete',\r\n POST_BACKUP_REPO_STATS_START: 'Updating Repository Statistics...',\r\n POST_BACKUP_REPO_STATS_COMPLETE: 'Repository Statistics Updated',\r\n POST_BACKUP_REPO_STATS_FAILED: 'Failed to Update Repository Statistics',\r\n TASK_COMPLETED: 'Completed Successfully',\r\n TASK_CANCELLED: 'Backup Cancelled by User.',\r\n TASK_FAILED: 'Backup Failed with Error.',\r\n FAILED_PERMANENTLY: 'Failed Permanently',\r\n ISO_CREATION_START: 'Creating ISO...',\r\n ISO_CREATION_COMPLETE: 'ISO Created Successfully',\r\n ISO_CREATION_FAILED: 'ISO Creation Failed',\r\n REMOTE_BACKUP_START: 'Backing Up Data...',\r\n REMOTE_BACKUP_COMPLETE: 'Data Backup Complete',\r\n REMOTE_BACKUP_FAILED: 'Data Backup Failed',\r\n ISO_ENCRYPTION_START: 'Encrypting ISO...',\r\n ISO_ENCRYPTION_COMPLETE: 'ISO Encryption Complete',\r\n ISO_UPLOAD_START: 'Uploading ISO...',\r\n ISO_UPLOAD_COMPLETE: 'ISO Upload Complete',\r\n ISO_UPLOAD_FAILED: 'ISO Upload Failed',\r\n BACKUP_WARNING: 'Hiccup Detected During Backup',\r\n };\r\n\r\n return staticMessages[action] || action;\r\n};\r\n\r\nexport function generateRestoreProgressMessage(progressData: BackupProgressData | null): string {\r\n if (!progressData?.events?.length) {\r\n return 'Initializing...';\r\n }\r\n\r\n // Find the last incomplete event or the most recent event\r\n const lastIncompleteEvent = progressData.events\r\n .slice()\r\n .reverse()\r\n .find((event) => !event.completed);\r\n\r\n const currentEvent = lastIncompleteEvent || progressData.events[progressData.events.length - 1];\r\n\r\n if (!currentEvent) {\r\n return 'Initializing...';\r\n }\r\n\r\n const { phase, action } = currentEvent;\r\n\r\n // Map phases to display names\r\n const phaseDisplayNames: Record<string, string> = {\r\n initializing: 'Initializing',\r\n 'pre-restore': 'Pre-Restore',\r\n restore: 'Restore',\r\n 'post-restore': 'Post-Restore',\r\n retry: 'Retrying',\r\n finished: 'Complete',\r\n };\r\n\r\n const phaseDisplay = phaseDisplayNames[phase] || phase;\r\n const actionDisplay = getRestoreEventActionMessage(action);\r\n\r\n if (phase === 'finished') {\r\n return actionDisplay;\r\n }\r\n\r\n return `${phaseDisplay}: ${actionDisplay}`;\r\n}\r\n\r\nexport const getRestoreEventActionMessage = (action: string): string => {\r\n // Handle script actions first\r\n const scriptMessage = handleScriptAction(action);\r\n if (scriptMessage) {\r\n return scriptMessage;\r\n }\r\n\r\n // Handle retry attempts\r\n const retryAttemptMatch = action.match(/RETRY_ATTEMPT_(\\d+)_OF_(\\d+)_START/);\r\n if (retryAttemptMatch) {\r\n const [, current, total] = retryAttemptMatch;\r\n return `Retrying (${current}/${total})...`;\r\n }\r\n\r\n // Handle backup retry scheduling\r\n const backupRetryMatch = action.match(/RESTORE_RETRY_(\\d+)_OF_(\\d+)_SCHEDULED/);\r\n if (backupRetryMatch) {\r\n const [, current, total] = backupRetryMatch;\r\n return `Scheduling Retry (${parseInt(current)}/${total})...`;\r\n }\r\n\r\n // Static action mappings\r\n const staticMessages: Record<string, string> = {\r\n INITIALIZE: 'Starting Restore...',\r\n PRE_RESTORE_START: 'Preparing Restore...',\r\n PRE_RESTORE_GET_SNAPSHOT: 'Getting Snapshot to Restore...',\r\n PRE_RESTORE_GET_SNAPSHOT_COMPLETE: 'Snapshot Retrieved',\r\n PRE_RESTORE_GET_SNAPSHOT_FAILED: 'Failed to Retrieve Snapshot',\r\n PRE_RESTORE_DRY_RUN_START: 'Performing Dry Run...',\r\n PRE_RESTORE_DRY_RUN_COMPLETE: 'Dry Run Complete',\r\n PRE_RESTORE_CHECKS_START: 'Running Checks...',\r\n PRE_RESTORE_CHECKS_COMPLETE: 'Checks Complete',\r\n PRE_RESTORE_UNLOCK_STALE_LOCKS: 'Unlocking Repository...',\r\n PRE_RESTORE_COMPLETE: 'Pre-Restore Complete',\r\n RESTORE_OPERATION_START: 'Restoring Files...',\r\n RESTORE_OPERATION_COMPLETE: 'Restore Complete',\r\n POST_RESTORE_START: 'Finalizing...',\r\n POST_RESTORE_COMPLETE: 'Post-Restore Complete',\r\n POST_RESTORE_REPO_STATS_START: 'Updating Repository Statistics...',\r\n POST_RESTORE_REPO_STATS_COMPLETE: 'Repository Statistics Updated',\r\n POST_RESTORE_WINDOWS_MOVE_START: 'Moving Restored files from temp directory to target path...',\r\n POST_RESTORE_WINDOWS_MOVE_ERROR: 'Failed to Move Restored files from temp directory to target path',\r\n POST_RESTORE_WINDOWS_MOVE_COMPLETE: 'Moved Restored files to target path',\r\n TASK_COMPLETED: 'Completed Successfully',\r\n TASK_FAILED: 'Restore Failed with Error.',\r\n TASK_CANCELLED: 'Restore Cancelled by User.',\r\n FAILED_PERMANENTLY: 'Failed Permanently',\r\n };\r\n return staticMessages[action] || action;\r\n};\r\n\r\nexport function extractResticData(progressData: BackupProgressData | null) {\r\n if (!progressData?.events?.length) {\r\n return null;\r\n }\r\n\r\n // Find the most recent event with resticData\r\n const eventWithResticData = progressData.events\r\n .slice()\r\n .reverse()\r\n .find((event) => event.resticData);\r\n\r\n return eventWithResticData?.resticData || null;\r\n}\r\n"],"names":["generateBackupProgressMessage","progressData","_a","currentEvent","event","phase","action","phaseDisplay","actionDisplay","getBackupEventActionMessage","handleScriptAction","scriptTypes","actionStates","scriptType","num","_","scriptMatch","scriptTypeKey","scriptNum","state","stateHandler","scriptMessage","retryAttemptMatch","current","total","backupRetryMatch","generateRestoreProgressMessage","getRestoreEventActionMessage","extractResticData","eventWithResticData"],"mappings":"AAEO,SAASA,EAA8BC,GAAiD;AAAxF,MAAAC;AACJ,MAAI,GAACA,IAAAD,KAAA,gBAAAA,EAAc,WAAd,QAAAC,EAAsB;AACxB,WAAO;AASV,QAAMC,IALsBF,EAAa,OACrC,MAAA,EACA,UACA,KAAK,CAACG,MAAU,CAACA,EAAM,SAAS,KAEQH,EAAa,OAAOA,EAAa,OAAO,SAAS,CAAC;AAE9F,MAAI,CAACE;AACF,WAAO;AAGV,QAAM,EAAE,OAAAE,GAAO,QAAAC,EAAA,IAAWH,GAWpBI,IAR4C;AAAA,IAC/C,cAAc;AAAA,IACd,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,UAAU;AAAA,EAAA,EAG0BF,CAAK,KAAKA,GAC3CG,IAAgBC,EAA4BH,CAAM;AAExD,SAAID,MAAU,aACJG,IAGH,GAAGD,CAAY,KAAKC,CAAa;AAC3C;AAGA,MAAME,IAAqB,CAACJ,MAAkC;AAC3D,QAAMK,IAAc;AAAA,IACjB,eAAe;AAAA,IACf,kBAAkB;AAAA,IAClB,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB,aAAa;AAAA,EAAA,GAGVC,IAAe;AAAA,IAClB,OAAO,CAACC,GAAoBC,MAAgB,WAAWD,CAAU,IAAIC,CAAG;AAAA,IACxE,UAAU,CAACC,GAAWD,MAAgB,UAAUA,CAAG;AAAA,IACnD,MAAM,CAACC,GAAWD,MAAgB,UAAUA,CAAG;AAAA,IAC/C,OAAO,CAACD,GAAoBC,MAAgB,YAAYD,CAAU,IAAIC,CAAG;AAAA,EAAA,GAItEE,IAAcV,EAAO,MAAM,0DAA0D;AAE3F,MAAIU,GAAa;AACd,UAAM,GAAGC,GAAeC,GAAWC,CAAK,IAAIH,GACtCH,IAAaF,EAAYM,CAAyC,KAAK,UACvEG,IAAeR,EAAaO,CAAkC;AAEpE,QAAIC;AACD,aAAOA,EAAaP,GAAYK,CAAS;AAAA,EAE/C;AAEA,SAAO;AACV,GAGaT,IAA8B,CAACH,MAA2B;AAEpE,QAAMe,IAAgBX,EAAmBJ,CAAM;AAC/C,MAAIe;AACD,WAAOA;AAIV,QAAMC,IAAoBhB,EAAO,MAAM,oCAAoC;AAC3E,MAAIgB,GAAmB;AACpB,UAAM,CAAA,EAAGC,GAASC,CAAK,IAAIF;AAC3B,WAAO,aAAaC,CAAO,IAAIC,CAAK;AAAA,EACvC;AAGA,QAAMC,IAAmBnB,EAAO,MAAM,uCAAuC;AAC7E,MAAImB,GAAkB;AACnB,UAAM,CAAA,EAAGF,GAASC,CAAK,IAAIC;AAC3B,WAAO,qBAAqB,SAASF,CAAO,CAAC,IAAIC,CAAK;AAAA,EACzD;AA6CA,SA1C+C;AAAA,IAC5C,YAAY;AAAA,IACZ,kBAAkB;AAAA,IAClB,0BAA0B;AAAA,IAC1B,6BAA6B;AAAA,IAC7B,yBAAyB;AAAA,IACzB,4BAA4B;AAAA,IAC5B,0BAA0B;AAAA,IAC1B,6BAA6B;AAAA,IAC7B,+BAA+B;AAAA,IAC/B,qBAAqB;AAAA,IACrB,wBAAwB;AAAA,IACxB,2BAA2B;AAAA,IAC3B,wBAAwB;AAAA,IACxB,mBAAmB;AAAA,IACnB,2BAA2B;AAAA,IAC3B,8BAA8B;AAAA,IAC9B,yBAAyB;AAAA,IACzB,4BAA4B;AAAA,IAC5B,0BAA0B;AAAA,IAC1B,sBAAsB;AAAA,IACtB,8BAA8B;AAAA,IAC9B,iCAAiC;AAAA,IACjC,+BAA+B;AAAA,IAC/B,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,oBAAoB;AAAA,IACpB,uBAAuB;AAAA,IACvB,qBAAqB;AAAA,IACrB,qBAAqB;AAAA,IACrB,wBAAwB;AAAA,IACxB,sBAAsB;AAAA,IACtB,sBAAsB;AAAA,IACtB,yBAAyB;AAAA,IACzB,kBAAkB;AAAA,IAClB,qBAAqB;AAAA,IACrB,mBAAmB;AAAA,IACnB,gBAAgB;AAAA,EAAA,EAGGlB,CAAM,KAAKA;AACpC;AAEO,SAASoB,EAA+BzB,GAAiD;AA3IzF,MAAAC;AA4IJ,MAAI,GAACA,IAAAD,KAAA,gBAAAA,EAAc,WAAd,QAAAC,EAAsB;AACxB,WAAO;AASV,QAAMC,IALsBF,EAAa,OACrC,MAAA,EACA,UACA,KAAK,CAACG,MAAU,CAACA,EAAM,SAAS,KAEQH,EAAa,OAAOA,EAAa,OAAO,SAAS,CAAC;AAE9F,MAAI,CAACE;AACF,WAAO;AAGV,QAAM,EAAE,OAAAE,GAAO,QAAAC,EAAA,IAAWH,GAYpBI,IAT4C;AAAA,IAC/C,cAAc;AAAA,IACd,eAAe;AAAA,IACf,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,OAAO;AAAA,IACP,UAAU;AAAA,EAAA,EAG0BF,CAAK,KAAKA,GAC3CG,IAAgBmB,EAA6BrB,CAAM;AAEzD,SAAID,MAAU,aACJG,IAGH,GAAGD,CAAY,KAAKC,CAAa;AAC3C;AAEO,MAAMmB,IAA+B,CAACrB,MAA2B;AAErE,QAAMe,IAAgBX,EAAmBJ,CAAM;AAC/C,MAAIe;AACD,WAAOA;AAIV,QAAMC,IAAoBhB,EAAO,MAAM,oCAAoC;AAC3E,MAAIgB,GAAmB;AACpB,UAAM,CAAA,EAAGC,GAASC,CAAK,IAAIF;AAC3B,WAAO,aAAaC,CAAO,IAAIC,CAAK;AAAA,EACvC;AAGA,QAAMC,IAAmBnB,EAAO,MAAM,wCAAwC;AAC9E,MAAImB,GAAkB;AACnB,UAAM,CAAA,EAAGF,GAASC,CAAK,IAAIC;AAC3B,WAAO,qBAAqB,SAASF,CAAO,CAAC,IAAIC,CAAK;AAAA,EACzD;AA6BA,SA1B+C;AAAA,IAC5C,YAAY;AAAA,IACZ,mBAAmB;AAAA,IACnB,0BAA0B;AAAA,IAC1B,mCAAmC;AAAA,IACnC,iCAAiC;AAAA,IACjC,2BAA2B;AAAA,IAC3B,8BAA8B;AAAA,IAC9B,0BAA0B;AAAA,IAC1B,6BAA6B;AAAA,IAC7B,gCAAgC;AAAA,IAChC,sBAAsB;AAAA,IACtB,yBAAyB;AAAA,IACzB,4BAA4B;AAAA,IAC5B,oBAAoB;AAAA,IACpB,uBAAuB;AAAA,IACvB,+BAA+B;AAAA,IAC/B,kCAAkC;AAAA,IAClC,iCAAiC;AAAA,IACjC,iCAAiC;AAAA,IACjC,oCAAoC;AAAA,IACpC,gBAAgB;AAAA,IAChB,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,oBAAoB;AAAA,EAAA,EAEDlB,CAAM,KAAKA;AACpC;AAEO,SAASsB,EAAkB3B,GAAyC;AArOpE,MAAAC;AAsOJ,MAAI,GAACA,IAAAD,KAAA,gBAAAA,EAAc,WAAd,QAAAC,EAAsB;AACxB,WAAO;AAIV,QAAM2B,IAAsB5B,EAAa,OACrC,MAAA,EACA,QAAA,EACA,KAAK,CAACG,MAAUA,EAAM,UAAU;AAEpC,UAAOyB,KAAA,gBAAAA,EAAqB,eAAc;AAC7C;"}
|
|
1
|
+
{"version":3,"file":"progressHelpers.js","sources":["../../src/utils/progressHelpers.ts"],"sourcesContent":["import { BackupProgressData } from '../@types/backups';\r\n\r\nexport function generateBackupProgressMessage(progressData: BackupProgressData | null): string {\r\n if (!progressData?.events?.length) {\r\n return 'Initializing...';\r\n }\r\n\r\n // Find the last incomplete event or the most recent event\r\n const lastIncompleteEvent = progressData.events\r\n .slice()\r\n .reverse()\r\n .find((event) => !event.completed);\r\n\r\n const currentEvent = lastIncompleteEvent || progressData.events[progressData.events.length - 1];\r\n\r\n if (!currentEvent) {\r\n return 'Initializing...';\r\n }\r\n\r\n const { phase, action } = currentEvent;\r\n\r\n // Map phases to display names\r\n const phaseDisplayNames: Record<string, string> = {\r\n initializing: 'Initializing',\r\n 'pre-backup': 'Pre-Backup',\r\n backup: 'Backup',\r\n 'post-backup': 'Post-Backup',\r\n replicating: 'Replicating',\r\n finished: 'Complete',\r\n };\r\n\r\n const phaseDisplay = phaseDisplayNames[phase] || phase;\r\n const actionDisplay = getBackupEventActionMessage(action);\r\n\r\n if (phase === 'finished') {\r\n return actionDisplay;\r\n }\r\n\r\n return `${phaseDisplay}: ${actionDisplay}`;\r\n}\r\n\r\n// Helper function to handle script actions dynamically\r\nconst handleScriptAction = (action: string): string | null => {\r\n const scriptTypes = {\r\n ONBACKUPSTART: 'Start Script',\r\n ONBACKUPCOMPLETE: 'Complete Script',\r\n ONBACKUPERROR: 'Error Script',\r\n ONBACKUPFAILURE: 'Failure Script',\r\n ONBACKUPEND: 'End Script',\r\n };\r\n\r\n const actionStates = {\r\n START: (scriptType: string, num: string) => `Running ${scriptType} ${num}...`,\r\n COMPLETE: (_: string, num: string) => `Script ${num} Complete`,\r\n FAIL: (_: string, num: string) => `Script ${num} Failed`,\r\n ERROR: (scriptType: string, num: string) => `Error in ${scriptType} ${num}`,\r\n };\r\n\r\n // Generic pattern for all script actions: SCRIPTTYPE_SCRIPT_NUMBER_STATE\r\n const scriptMatch = action.match(/^(ONBACKUP\\w+)_SCRIPT_(\\d+)_(START|COMPLETE|FAIL|ERROR)$/);\r\n\r\n if (scriptMatch) {\r\n const [, scriptTypeKey, scriptNum, state] = scriptMatch;\r\n const scriptType = scriptTypes[scriptTypeKey as keyof typeof scriptTypes] || 'Script';\r\n const stateHandler = actionStates[state as keyof typeof actionStates];\r\n\r\n if (stateHandler) {\r\n return stateHandler(scriptType, scriptNum);\r\n }\r\n }\r\n\r\n return null;\r\n};\r\n\r\n// Function to extract numbers from action strings and create meaningful messages\r\nexport const getBackupEventActionMessage = (action: string, storageName?: string): string => {\r\n // Handle script actions first\r\n const scriptMessage = handleScriptAction(action);\r\n if (scriptMessage) {\r\n return scriptMessage;\r\n }\r\n\r\n // Handle retry attempts\r\n const retryAttemptMatch = action.match(/RETRY_ATTEMPT_(\\d+)_OF_(\\d+)_START/);\r\n if (retryAttemptMatch) {\r\n const [, current, total] = retryAttemptMatch;\r\n return `Retrying (${current}/${total})...`;\r\n }\r\n\r\n // Handle backup retry scheduling\r\n const backupRetryMatch = action.match(/BACKUP_RETRY_(\\d+)_OF_(\\d+)_SCHEDULED/);\r\n if (backupRetryMatch) {\r\n const [, current, total] = backupRetryMatch;\r\n return `Scheduling Retry (${parseInt(current)}/${total})...`;\r\n }\r\n\r\n // Handle replication retry scheduling\r\n const replicationRetryScheduledMatch = action.match(/REPLICATION_RETRY_(\\d+)_OF_(\\d+)_SCHEDULED/);\r\n if (replicationRetryScheduledMatch) {\r\n const [, current, total] = replicationRetryScheduledMatch;\r\n return `Retrying (${current}/${total})...`;\r\n }\r\n\r\n // Handle replication retry start\r\n const replicationRetryStartMatch = action.match(/REPLICATION_RETRY_(\\d+)_OF_(\\d+)_START/);\r\n if (replicationRetryStartMatch) {\r\n const [, current, total] = replicationRetryStartMatch;\r\n return `Retrying (${current}/${total})...`;\r\n }\r\n\r\n // Static action mappings\r\n const staticMessages: Record<string, string> = {\r\n INITIALIZE: 'Starting Backup...',\r\n PRE_BACKUP_START: 'Preparing Backup...',\r\n PRE_BACKUP_DRY_RUN_START: 'Performing Dry Run...',\r\n PRE_BACKUP_DRY_RUN_COMPLETE: 'Dry Run Complete',\r\n PRE_BACKUP_CHECKS_START: 'Running Checks...',\r\n PRE_BACKUP_CHECKS_COMPLETE: 'Checks Complete',\r\n PRE_BACKUP_SCRIPTS_START: 'Running Scripts...',\r\n PRE_BACKUP_SCRIPTS_COMPLETE: 'Scripts Complete',\r\n PRE_BACKUP_UNLOCK_STALE_LOCKS: 'Unlocking Repository...',\r\n PRE_BACKUP_COMPLETE: 'Pre-Backup Complete',\r\n BACKUP_OPERATION_START: 'Backing Up Files...',\r\n BACKUP_OPERATION_COMPLETE: 'Backup Complete',\r\n BACKUP_OPERATION_ERROR: 'Backup Encountered Errors',\r\n POST_BACKUP_START: 'Finalizing...',\r\n POST_BACKUP_SCRIPTS_START: 'Running Cleanup Scripts...',\r\n POST_BACKUP_SCRIPTS_COMPLETE: 'Cleanup Scripts Complete',\r\n POST_BACKUP_PRUNE_START: 'Pruning Old Backups...',\r\n POST_BACKUP_PRUNE_COMPLETE: 'Pruning Complete',\r\n POST_BACKUP_PRUNE_FAILED: 'Pruning Failed',\r\n POST_BACKUP_COMPLETE: 'Post-Backup Complete',\r\n POST_BACKUP_REPO_STATS_START: 'Updating Repository Statistics...',\r\n POST_BACKUP_REPO_STATS_COMPLETE: 'Repository Statistics Updated',\r\n POST_BACKUP_REPO_STATS_FAILED: 'Failed to Update Repository Statistics',\r\n TASK_COMPLETED: 'Completed Successfully',\r\n TASK_CANCELLED: 'Backup Cancelled by User.',\r\n TASK_FAILED: 'Backup Failed with Error.',\r\n FAILED_PERMANENTLY: 'Failed Permanently',\r\n ISO_CREATION_START: 'Creating ISO...',\r\n ISO_CREATION_COMPLETE: 'ISO Created Successfully',\r\n ISO_CREATION_FAILED: 'ISO Creation Failed',\r\n REMOTE_BACKUP_START: 'Backing Up Data...',\r\n REMOTE_BACKUP_COMPLETE: 'Data Backup Complete',\r\n REMOTE_BACKUP_FAILED: 'Data Backup Failed',\r\n ISO_ENCRYPTION_START: 'Encrypting ISO...',\r\n ISO_ENCRYPTION_COMPLETE: 'ISO Encryption Complete',\r\n ISO_UPLOAD_START: 'Uploading ISO...',\r\n ISO_UPLOAD_COMPLETE: 'ISO Upload Complete',\r\n ISO_UPLOAD_FAILED: 'ISO Upload Failed',\r\n BACKUP_WARNING: 'Hiccup Detected During Backup',\r\n // Replication actions\r\n REPLICATION_START: 'Replicating Snapshots...',\r\n REPLICATION_INIT_START: 'Initializing Replication Repository...',\r\n REPLICATION_INIT_COMPLETE: 'Replication Repository Initialized',\r\n REPLICATION_INIT_FAILED: 'Replication Repository Init Failed',\r\n REPLICATION_UNLOCK_START: 'Unlocking Replication Repository...',\r\n REPLICATION_UNLOCK_COMPLETE: 'Replication Repository Unlocked',\r\n REPLICATION_COPY_START: 'Copying Snapshot to Replication...',\r\n REPLICATION_COPY_COMPLETE: 'Snapshot Copied to Replication',\r\n REPLICATION_COPY_FAILED: 'Replication Copy Failed',\r\n REPLICATION_PRUNE_START: 'Pruning Replication Repository...',\r\n REPLICATION_PRUNE_COMPLETE: 'Replication Prune Complete',\r\n REPLICATION_PRUNE_FAILED: 'Replication Prune Failed',\r\n REPLICATION_STATS_START: 'Updating Replication Stats...',\r\n REPLICATION_STATS_COMPLETE: 'Replication Stats Updated',\r\n REPLICATION_COMPLETE: 'Replication Complete',\r\n REPLICATION_FAILED: 'Replication Failed',\r\n REPLICATION_PARTIAL_FAILURE: 'Some Replications Failed',\r\n REPLICATION_MANUAL_RETRY_START: 'Retrying Failed Replications...',\r\n REPLICATION_MANUAL_RETRY_COMPLETE: 'Replication Retry Complete',\r\n REPLICATION_MANUAL_RETRY_PARTIAL_FAILURE: 'Some Replication Retries Still Failed',\r\n };\r\n\r\n // Storage-name-aware replication action mappings\r\n const replicationMessagesWithStorage: Record<string, (name: string) => string> = {\r\n REPLICATION_START: (name) => `Replicating Snapshot to ${name}...`,\r\n REPLICATION_INIT_START: (name) => `Initializing Replication Repository in ${name}...`,\r\n REPLICATION_INIT_COMPLETE: (name) => `Replication Repository Initialized in ${name}`,\r\n REPLICATION_INIT_FAILED: (name) => `Replication Repository Init Failed in ${name}`,\r\n REPLICATION_UNLOCK_START: (name) => `Unlocking Replication Repository in ${name}...`,\r\n REPLICATION_UNLOCK_COMPLETE: (name) => `Replication Repository Unlocked in ${name}`,\r\n REPLICATION_COPY_START: (name) => `Copying Snapshot to ${name}...`,\r\n REPLICATION_COPY_COMPLETE: (name) => `Snapshot Copied to ${name}`,\r\n REPLICATION_COPY_FAILED: (name) => `Replication Copy Failed for ${name}`,\r\n REPLICATION_PRUNE_START: (name) => `Pruning Replication Repository in ${name}...`,\r\n REPLICATION_PRUNE_COMPLETE: (name) => `Replication Prune Complete for ${name}`,\r\n REPLICATION_PRUNE_FAILED: (name) => `Replication Prune Failed for ${name}`,\r\n REPLICATION_STATS_START: (name) => `Updating Replication Stats for ${name}...`,\r\n REPLICATION_STATS_COMPLETE: (name) => `Replication Stats Updated for ${name}`,\r\n REPLICATION_COMPLETE: (name) => `Replication Complete for ${name}`,\r\n REPLICATION_FAILED: (name) => `Replication Failed for ${name}`,\r\n };\r\n\r\n if (storageName && replicationMessagesWithStorage[action]) {\r\n return replicationMessagesWithStorage[action](storageName);\r\n }\r\n\r\n return staticMessages[action] || action;\r\n};\r\n\r\nexport function generateRestoreProgressMessage(progressData: BackupProgressData | null): string {\r\n if (!progressData?.events?.length) {\r\n return 'Initializing...';\r\n }\r\n\r\n // Find the last incomplete event or the most recent event\r\n const lastIncompleteEvent = progressData.events\r\n .slice()\r\n .reverse()\r\n .find((event) => !event.completed);\r\n\r\n const currentEvent = lastIncompleteEvent || progressData.events[progressData.events.length - 1];\r\n\r\n if (!currentEvent) {\r\n return 'Initializing...';\r\n }\r\n\r\n const { phase, action } = currentEvent;\r\n\r\n // Map phases to display names\r\n const phaseDisplayNames: Record<string, string> = {\r\n initializing: 'Initializing',\r\n 'pre-restore': 'Pre-Restore',\r\n restore: 'Restore',\r\n 'post-restore': 'Post-Restore',\r\n retry: 'Retrying',\r\n finished: 'Complete',\r\n };\r\n\r\n const phaseDisplay = phaseDisplayNames[phase] || phase;\r\n const actionDisplay = getRestoreEventActionMessage(action);\r\n\r\n if (phase === 'finished') {\r\n return actionDisplay;\r\n }\r\n\r\n return `${phaseDisplay}: ${actionDisplay}`;\r\n}\r\n\r\nexport const getRestoreEventActionMessage = (action: string): string => {\r\n // Handle script actions first\r\n const scriptMessage = handleScriptAction(action);\r\n if (scriptMessage) {\r\n return scriptMessage;\r\n }\r\n\r\n // Handle retry attempts\r\n const retryAttemptMatch = action.match(/RETRY_ATTEMPT_(\\d+)_OF_(\\d+)_START/);\r\n if (retryAttemptMatch) {\r\n const [, current, total] = retryAttemptMatch;\r\n return `Retrying (${current}/${total})...`;\r\n }\r\n\r\n // Handle backup retry scheduling\r\n const backupRetryMatch = action.match(/RESTORE_RETRY_(\\d+)_OF_(\\d+)_SCHEDULED/);\r\n if (backupRetryMatch) {\r\n const [, current, total] = backupRetryMatch;\r\n return `Scheduling Retry (${parseInt(current)}/${total})...`;\r\n }\r\n\r\n // Static action mappings\r\n const staticMessages: Record<string, string> = {\r\n INITIALIZE: 'Starting Restore...',\r\n PRE_RESTORE_START: 'Preparing Restore...',\r\n PRE_RESTORE_GET_SNAPSHOT: 'Getting Snapshot to Restore...',\r\n PRE_RESTORE_GET_SNAPSHOT_COMPLETE: 'Snapshot Retrieved',\r\n PRE_RESTORE_GET_SNAPSHOT_FAILED: 'Failed to Retrieve Snapshot',\r\n PRE_RESTORE_DRY_RUN_START: 'Performing Dry Run...',\r\n PRE_RESTORE_DRY_RUN_COMPLETE: 'Dry Run Complete',\r\n PRE_RESTORE_CHECKS_START: 'Running Checks...',\r\n PRE_RESTORE_CHECKS_COMPLETE: 'Checks Complete',\r\n PRE_RESTORE_UNLOCK_STALE_LOCKS: 'Unlocking Repository...',\r\n PRE_RESTORE_COMPLETE: 'Pre-Restore Complete',\r\n RESTORE_OPERATION_START: 'Restoring Files...',\r\n RESTORE_OPERATION_COMPLETE: 'Restore Complete',\r\n POST_RESTORE_START: 'Finalizing...',\r\n POST_RESTORE_COMPLETE: 'Post-Restore Complete',\r\n POST_RESTORE_REPO_STATS_START: 'Updating Repository Statistics...',\r\n POST_RESTORE_REPO_STATS_COMPLETE: 'Repository Statistics Updated',\r\n POST_RESTORE_WINDOWS_MOVE_START: 'Moving Restored files from temp directory to target path...',\r\n POST_RESTORE_WINDOWS_MOVE_ERROR: 'Failed to Move Restored files from temp directory to target path',\r\n POST_RESTORE_WINDOWS_MOVE_COMPLETE: 'Moved Restored files to target path',\r\n TASK_COMPLETED: 'Completed Successfully',\r\n TASK_FAILED: 'Restore Failed with Error.',\r\n TASK_CANCELLED: 'Restore Cancelled by User.',\r\n FAILED_PERMANENTLY: 'Failed Permanently',\r\n };\r\n return staticMessages[action] || action;\r\n};\r\n\r\nexport function extractResticData(progressData: BackupProgressData | null) {\r\n if (!progressData?.events?.length) {\r\n return null;\r\n }\r\n\r\n // Find the most recent event with resticData\r\n const eventWithResticData = progressData.events\r\n .slice()\r\n .reverse()\r\n .find((event) => event.resticData);\r\n\r\n return eventWithResticData?.resticData || null;\r\n}\r\n\r\n/**\r\n * Generates a human-readable progress message for a specific replication mirror.\r\n * Uses the mirror's latest event action and includes the storage name.\r\n */\r\nexport function generateMirrorProgressMessage(mirror: { storageName: string; events?: { action: string; completed: boolean }[] }): string {\r\n if (!mirror.events?.length) {\r\n return 'Pending...';\r\n }\r\n\r\n // Find the last incomplete event or the most recent event\r\n const lastIncompleteEvent = mirror.events\r\n .slice()\r\n .reverse()\r\n .find((event) => !event.completed);\r\n\r\n const currentEvent = lastIncompleteEvent || mirror.events[mirror.events.length - 1];\r\n\r\n if (!currentEvent) {\r\n return 'Pending...';\r\n }\r\n\r\n return getBackupEventActionMessage(currentEvent.action, mirror.storageName);\r\n}\r\n"],"names":["generateBackupProgressMessage","progressData","_a","currentEvent","event","phase","action","phaseDisplay","actionDisplay","getBackupEventActionMessage","handleScriptAction","scriptTypes","actionStates","scriptType","num","_","scriptMatch","scriptTypeKey","scriptNum","state","stateHandler","storageName","scriptMessage","retryAttemptMatch","current","total","backupRetryMatch","replicationRetryScheduledMatch","replicationRetryStartMatch","staticMessages","replicationMessagesWithStorage","name","generateRestoreProgressMessage","getRestoreEventActionMessage","extractResticData","eventWithResticData","generateMirrorProgressMessage","mirror"],"mappings":"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"}
|
package/dist-lib/utils.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { API_URL as
|
|
2
|
-
import { calculateDirectorySizes as
|
|
1
|
+
import { API_URL as r, APP_NAME as o, DEFAULT_PLAN_SETTINGS as a, DEV_MODE as s } from "./utils/constants.js";
|
|
2
|
+
import { calculateDirectorySizes as g, clipPath as m, compareVersions as n, formatBytes as l, formatDateTime as p, formatDuration as c, formatNumberToK as P, formatPermissions as f, formatSeconds as A, getAvailableCliApps as M, getLogLevelName as E, getOSIcon as S, getProcessorIcon as d, isMobile as v, isServerEdition as x, isValidEmail as D, secondsToMinutes as I, shouldDisplayStorageField as N, sortFileItems as u, timeAgo as h } from "./utils/helpers.js";
|
|
3
3
|
import { isPlanSettingsValid as F, planIntervalAgeName as L, planIntervalName as _ } from "./utils/plans.js";
|
|
4
|
-
import { extractResticData as V, generateBackupProgressMessage as b,
|
|
5
|
-
import { getParentPath as
|
|
6
|
-
import { storageProviders as
|
|
7
|
-
import { getIconNameForFile as
|
|
4
|
+
import { extractResticData as V, generateBackupProgressMessage as b, generateMirrorProgressMessage as y, generateRestoreProgressMessage as B, getBackupEventActionMessage as k, getRestoreEventActionMessage as z } from "./utils/progressHelpers.js";
|
|
5
|
+
import { getParentPath as U, getPathSeparator as C, normalizePath as G, splitPath as K } from "./utils/restore.js";
|
|
6
|
+
import { storageProviders as q } from "./utils/storageProviders.js";
|
|
7
|
+
import { getIconNameForFile as H } from "./utils/getIconNameforFile.js";
|
|
8
8
|
export {
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
r as API_URL,
|
|
10
|
+
o as APP_NAME,
|
|
11
11
|
a as DEFAULT_PLAN_SETTINGS,
|
|
12
12
|
s as DEV_MODE,
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
g as calculateDirectorySizes,
|
|
14
|
+
m as clipPath,
|
|
15
|
+
n as compareVersions,
|
|
16
16
|
V as extractResticData,
|
|
17
17
|
l as formatBytes,
|
|
18
18
|
p as formatDateTime,
|
|
@@ -21,28 +21,29 @@ export {
|
|
|
21
21
|
f as formatPermissions,
|
|
22
22
|
A as formatSeconds,
|
|
23
23
|
b as generateBackupProgressMessage,
|
|
24
|
-
y as
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
U as
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
24
|
+
y as generateMirrorProgressMessage,
|
|
25
|
+
B as generateRestoreProgressMessage,
|
|
26
|
+
M as getAvailableCliApps,
|
|
27
|
+
k as getBackupEventActionMessage,
|
|
28
|
+
H as getIconNameForFile,
|
|
29
|
+
E as getLogLevelName,
|
|
30
|
+
S as getOSIcon,
|
|
31
|
+
U as getParentPath,
|
|
32
|
+
C as getPathSeparator,
|
|
33
|
+
d as getProcessorIcon,
|
|
34
|
+
z as getRestoreEventActionMessage,
|
|
35
|
+
v as isMobile,
|
|
35
36
|
F as isPlanSettingsValid,
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
x as isServerEdition,
|
|
38
|
+
D as isValidEmail,
|
|
39
|
+
G as normalizePath,
|
|
39
40
|
L as planIntervalAgeName,
|
|
40
41
|
_ as planIntervalName,
|
|
41
|
-
|
|
42
|
+
I as secondsToMinutes,
|
|
42
43
|
N as shouldDisplayStorageField,
|
|
43
44
|
u as sortFileItems,
|
|
44
|
-
|
|
45
|
-
|
|
45
|
+
K as splitPath,
|
|
46
|
+
q as storageProviders,
|
|
46
47
|
h as timeAgo
|
|
47
48
|
};
|
|
48
49
|
//# sourceMappingURL=utils.js.map
|
package/package.json
CHANGED
package/src/@types/backups.ts
CHANGED
|
@@ -34,6 +34,19 @@ export interface BackupTaskStats {
|
|
|
34
34
|
dry_run: boolean;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
+
export interface BackupMirror {
|
|
38
|
+
replicationId: string;
|
|
39
|
+
storageId: string;
|
|
40
|
+
storageName: string;
|
|
41
|
+
storagePath: string;
|
|
42
|
+
storageType: string;
|
|
43
|
+
status: 'pending' | 'started' | 'completed' | 'failed';
|
|
44
|
+
started?: number;
|
|
45
|
+
ended?: number;
|
|
46
|
+
error?: string;
|
|
47
|
+
size?: number;
|
|
48
|
+
}
|
|
49
|
+
|
|
37
50
|
export type Backup = {
|
|
38
51
|
id: string;
|
|
39
52
|
title?: string;
|
|
@@ -51,10 +64,14 @@ export type Backup = {
|
|
|
51
64
|
errorMsg?: string;
|
|
52
65
|
download?: {
|
|
53
66
|
status: string;
|
|
67
|
+
storageId?: string;
|
|
68
|
+
storageName?: string;
|
|
69
|
+
storageType?: string;
|
|
54
70
|
started?: number;
|
|
55
71
|
ended?: number;
|
|
56
72
|
error?: string;
|
|
57
73
|
};
|
|
74
|
+
mirrors?: BackupMirror[];
|
|
58
75
|
};
|
|
59
76
|
|
|
60
77
|
export interface BackupProgressEvent {
|
|
@@ -66,6 +83,16 @@ export interface BackupProgressEvent {
|
|
|
66
83
|
error?: string;
|
|
67
84
|
}
|
|
68
85
|
|
|
86
|
+
export interface ReplicationProgressData {
|
|
87
|
+
replicationId: string;
|
|
88
|
+
storageId: string;
|
|
89
|
+
storageName: string;
|
|
90
|
+
storageType: string;
|
|
91
|
+
status: 'pending' | 'running' | 'completed' | 'failed' | 'retrying';
|
|
92
|
+
error?: string;
|
|
93
|
+
events: BackupProgressEvent[];
|
|
94
|
+
}
|
|
95
|
+
|
|
69
96
|
export interface BackupProgressData {
|
|
70
97
|
planId: string;
|
|
71
98
|
backupId: string;
|
|
@@ -74,4 +101,5 @@ export interface BackupProgressData {
|
|
|
74
101
|
lastUpdate: string;
|
|
75
102
|
events: BackupProgressEvent[];
|
|
76
103
|
duration?: number;
|
|
104
|
+
mirrors?: Record<string, ReplicationProgressData>;
|
|
77
105
|
}
|
package/src/@types/devices.ts
CHANGED
|
@@ -235,5 +235,13 @@ export interface DevicePlan {
|
|
|
235
235
|
type: string;
|
|
236
236
|
typeName: string;
|
|
237
237
|
};
|
|
238
|
+
replicatedStorages: number;
|
|
238
239
|
size: number;
|
|
239
240
|
}
|
|
241
|
+
|
|
242
|
+
export interface DeviceStorage {
|
|
243
|
+
id: string;
|
|
244
|
+
name: string;
|
|
245
|
+
type: string;
|
|
246
|
+
storageTypeName: string;
|
|
247
|
+
}
|
package/src/@types/plans.ts
CHANGED
|
@@ -70,7 +70,7 @@ export type PlanVerifiedResult = {
|
|
|
70
70
|
|
|
71
71
|
export type PlanVerification = {
|
|
72
72
|
status: string;
|
|
73
|
-
result: PlanVerifiedResult | SyncVerifiedResult;
|
|
73
|
+
result: Record<string, PlanVerifiedResult> | SyncVerifiedResult;
|
|
74
74
|
startedAt: number;
|
|
75
75
|
hasError: boolean;
|
|
76
76
|
endedAt: number | null;
|
|
@@ -128,6 +128,21 @@ export type PlanScript = {
|
|
|
128
128
|
abortOnError?: boolean;
|
|
129
129
|
};
|
|
130
130
|
|
|
131
|
+
export interface PlanReplicationStorage {
|
|
132
|
+
replicationId: string;
|
|
133
|
+
storageId: string;
|
|
134
|
+
storagePath: string;
|
|
135
|
+
storageType: string;
|
|
136
|
+
storageName?: string;
|
|
137
|
+
addedAt: number;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
export interface PlanReplicationSettings {
|
|
141
|
+
enabled: boolean;
|
|
142
|
+
concurrent: boolean;
|
|
143
|
+
storages: PlanReplicationStorage[];
|
|
144
|
+
}
|
|
145
|
+
|
|
131
146
|
export type PlanSettings = {
|
|
132
147
|
interval: PlanInterval;
|
|
133
148
|
prune: PlanPrune;
|
|
@@ -145,11 +160,18 @@ export type PlanSettings = {
|
|
|
145
160
|
onBackupFailure?: PlanScript[];
|
|
146
161
|
onBackupComplete?: PlanScript[];
|
|
147
162
|
};
|
|
163
|
+
replication?: PlanReplicationSettings;
|
|
148
164
|
};
|
|
149
165
|
|
|
150
166
|
export type PlanStats = {
|
|
151
167
|
size: number;
|
|
152
168
|
snapshots: string[];
|
|
169
|
+
mirrors?: {
|
|
170
|
+
replicationId: string;
|
|
171
|
+
storageId: string;
|
|
172
|
+
size: number;
|
|
173
|
+
snapshots: string[];
|
|
174
|
+
}[];
|
|
153
175
|
};
|
|
154
176
|
|
|
155
177
|
export type Plan = {
|