@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.
Files changed (186) hide show
  1. package/dist-lib/@types/backups.d.ts +26 -0
  2. package/dist-lib/@types/backups.d.ts.map +1 -1
  3. package/dist-lib/@types/devices.d.ts +7 -0
  4. package/dist-lib/@types/devices.d.ts.map +1 -1
  5. package/dist-lib/@types/plans.d.ts +21 -1
  6. package/dist-lib/@types/plans.d.ts.map +1 -1
  7. package/dist-lib/@types/restores.d.ts +2 -0
  8. package/dist-lib/@types/restores.d.ts.map +1 -1
  9. package/dist-lib/components/Device/DeviceBackups/DeviceBackups.d.ts +3 -2
  10. package/dist-lib/components/Device/DeviceBackups/DeviceBackups.d.ts.map +1 -1
  11. package/dist-lib/components/Device/DeviceBackups/DeviceBackups.js +73 -85
  12. package/dist-lib/components/Device/DeviceBackups/DeviceBackups.js.map +1 -1
  13. package/dist-lib/components/Plan/BackupEvents/BackupEvents.d.ts.map +1 -1
  14. package/dist-lib/components/Plan/BackupEvents/BackupEvents.js +88 -50
  15. package/dist-lib/components/Plan/BackupEvents/BackupEvents.js.map +1 -1
  16. package/dist-lib/components/Plan/BackupEvents/BackupEvents.module.scss.js +70 -38
  17. package/dist-lib/components/Plan/BackupEvents/BackupEvents.module.scss.js.map +1 -1
  18. package/dist-lib/components/Plan/BackupProgress/BackupProgress.d.ts.map +1 -1
  19. package/dist-lib/components/Plan/BackupProgress/BackupProgress.js +166 -123
  20. package/dist-lib/components/Plan/BackupProgress/BackupProgress.js.map +1 -1
  21. package/dist-lib/components/Plan/BackupProgress/BackupProgress.module.scss.js +64 -30
  22. package/dist-lib/components/Plan/BackupProgress/BackupProgress.module.scss.js.map +1 -1
  23. package/dist-lib/components/Plan/Backups/Backups.d.ts +8 -1
  24. package/dist-lib/components/Plan/Backups/Backups.d.ts.map +1 -1
  25. package/dist-lib/components/Plan/Backups/Backups.js +154 -125
  26. package/dist-lib/components/Plan/Backups/Backups.js.map +1 -1
  27. package/dist-lib/components/Plan/EditPlan/EditPlan.d.ts.map +1 -1
  28. package/dist-lib/components/Plan/EditPlan/EditPlan.js +11 -10
  29. package/dist-lib/components/Plan/EditPlan/EditPlan.js.map +1 -1
  30. package/dist-lib/components/Plan/Mirrors/MirrorDetails.d.ts +12 -0
  31. package/dist-lib/components/Plan/Mirrors/MirrorDetails.d.ts.map +1 -0
  32. package/dist-lib/components/Plan/Mirrors/MirrorDetails.js +68 -0
  33. package/dist-lib/components/Plan/Mirrors/MirrorDetails.js.map +1 -0
  34. package/dist-lib/components/Plan/Mirrors/MirrorDetails.module.scss.js +26 -0
  35. package/dist-lib/components/Plan/Mirrors/MirrorDetails.module.scss.js.map +1 -0
  36. package/dist-lib/components/Plan/Mirrors/MirrorStatusBadge.d.ts +11 -0
  37. package/dist-lib/components/Plan/Mirrors/MirrorStatusBadge.d.ts.map +1 -0
  38. package/dist-lib/components/Plan/Mirrors/MirrorStatusBadge.js +38 -0
  39. package/dist-lib/components/Plan/Mirrors/MirrorStatusBadge.js.map +1 -0
  40. package/dist-lib/components/Plan/Mirrors/MirrorStatusBadge.module.scss.js +16 -0
  41. package/dist-lib/components/Plan/Mirrors/MirrorStatusBadge.module.scss.js.map +1 -0
  42. package/dist-lib/components/Plan/Mirrors/MirrorStorageSelector.d.ts +14 -0
  43. package/dist-lib/components/Plan/Mirrors/MirrorStorageSelector.d.ts.map +1 -0
  44. package/dist-lib/components/Plan/Mirrors/MirrorStorageSelector.js +54 -0
  45. package/dist-lib/components/Plan/Mirrors/MirrorStorageSelector.js.map +1 -0
  46. package/dist-lib/components/Plan/Mirrors/MirrorStorageSelector.module.scss.js +26 -0
  47. package/dist-lib/components/Plan/Mirrors/MirrorStorageSelector.module.scss.js.map +1 -0
  48. package/dist-lib/components/Plan/Mirrors/MirrorStorageSelectorModal.d.ts +15 -0
  49. package/dist-lib/components/Plan/Mirrors/MirrorStorageSelectorModal.d.ts.map +1 -0
  50. package/dist-lib/components/Plan/Mirrors/MirrorStorageSelectorModal.js +34 -0
  51. package/dist-lib/components/Plan/Mirrors/MirrorStorageSelectorModal.js.map +1 -0
  52. package/dist-lib/components/Plan/PlanBackups/PlanBackups.d.ts.map +1 -1
  53. package/dist-lib/components/Plan/PlanBackups/PlanBackups.js +20 -17
  54. package/dist-lib/components/Plan/PlanBackups/PlanBackups.js.map +1 -1
  55. package/dist-lib/components/Plan/PlanForm/PlanForm.d.ts +2 -1
  56. package/dist-lib/components/Plan/PlanForm/PlanForm.d.ts.map +1 -1
  57. package/dist-lib/components/Plan/PlanForm/PlanForm.js +85 -58
  58. package/dist-lib/components/Plan/PlanForm/PlanForm.js.map +1 -1
  59. package/dist-lib/components/Plan/PlanItems/PlanItem.d.ts.map +1 -1
  60. package/dist-lib/components/Plan/PlanItems/PlanItem.js +58 -59
  61. package/dist-lib/components/Plan/PlanItems/PlanItem.js.map +1 -1
  62. package/dist-lib/components/Plan/PlanRemoveModal/PlanRemoveModal.js +8 -8
  63. package/dist-lib/components/Plan/PlanRemoveModal/PlanRemoveModal.js.map +1 -1
  64. package/dist-lib/components/Plan/PlanSettings/PlanReplicationSettings.d.ts +14 -0
  65. package/dist-lib/components/Plan/PlanSettings/PlanReplicationSettings.d.ts.map +1 -0
  66. package/dist-lib/components/Plan/PlanSettings/PlanReplicationSettings.js +290 -0
  67. package/dist-lib/components/Plan/PlanSettings/PlanReplicationSettings.js.map +1 -0
  68. package/dist-lib/components/Plan/PlanSettings/PlanReplicationSettings.module.scss.js +26 -0
  69. package/dist-lib/components/Plan/PlanSettings/PlanReplicationSettings.module.scss.js.map +1 -0
  70. package/dist-lib/components/Plan/PlanStats/PlanStats.d.ts.map +1 -1
  71. package/dist-lib/components/Plan/PlanStats/PlanStats.js +41 -42
  72. package/dist-lib/components/Plan/PlanStats/PlanStats.js.map +1 -1
  73. package/dist-lib/components/Plan/PlanStats/PlanStats.module.scss.js +5 -5
  74. package/dist-lib/components/Plan/PlanStorageInfo/PlanStorageInfo.d.ts +15 -0
  75. package/dist-lib/components/Plan/PlanStorageInfo/PlanStorageInfo.d.ts.map +1 -0
  76. package/dist-lib/components/Plan/PlanStorageInfo/PlanStorageInfo.js +69 -0
  77. package/dist-lib/components/Plan/PlanStorageInfo/PlanStorageInfo.js.map +1 -0
  78. package/dist-lib/components/Plan/PlanStorageInfo/PlanStorageInfo.module.scss.js +16 -0
  79. package/dist-lib/components/Plan/PlanStorageInfo/PlanStorageInfo.module.scss.js.map +1 -0
  80. package/dist-lib/components/Restore/RestoreWizard/RestoreConfirmStep.d.ts.map +1 -1
  81. package/dist-lib/components/Restore/RestoreWizard/RestoreConfirmStep.js +36 -34
  82. package/dist-lib/components/Restore/RestoreWizard/RestoreConfirmStep.js.map +1 -1
  83. package/dist-lib/components/Restore/RestoreWizard/RestorePreviewStep.d.ts.map +1 -1
  84. package/dist-lib/components/Restore/RestoreWizard/RestorePreviewStep.js +7 -5
  85. package/dist-lib/components/Restore/RestoreWizard/RestorePreviewStep.js.map +1 -1
  86. package/dist-lib/components/Restore/RestoreWizard/RestoreSettingsStep.d.ts +12 -4
  87. package/dist-lib/components/Restore/RestoreWizard/RestoreSettingsStep.d.ts.map +1 -1
  88. package/dist-lib/components/Restore/RestoreWizard/RestoreSettingsStep.js +44 -32
  89. package/dist-lib/components/Restore/RestoreWizard/RestoreSettingsStep.js.map +1 -1
  90. package/dist-lib/components/Restore/RestoreWizard/RestoreWizard.d.ts +5 -1
  91. package/dist-lib/components/Restore/RestoreWizard/RestoreWizard.d.ts.map +1 -1
  92. package/dist-lib/components/Restore/RestoreWizard/RestoreWizard.js +48 -44
  93. package/dist-lib/components/Restore/RestoreWizard/RestoreWizard.js.map +1 -1
  94. package/dist-lib/components/Restore/RestoreWizard/RestoreWizard.module.scss.js +32 -32
  95. package/dist-lib/components/Settings/GeneralSettings/GeneralSettings.js +14 -14
  96. package/dist-lib/components/Settings/GeneralSettings/GeneralSettings.js.map +1 -1
  97. package/dist-lib/components/Settings/IntegrationSettings/IntegrationSettings.d.ts.map +1 -1
  98. package/dist-lib/components/Settings/IntegrationSettings/IntegrationSettings.js +28 -19
  99. package/dist-lib/components/Settings/IntegrationSettings/IntegrationSettings.js.map +1 -1
  100. package/dist-lib/components/common/Icon/Icon.d.ts.map +1 -1
  101. package/dist-lib/components/common/Icon/Icon.js +11 -0
  102. package/dist-lib/components/common/Icon/Icon.js.map +1 -1
  103. package/dist-lib/components/common/PageHeader/PageHeader.module.scss.js +6 -6
  104. package/dist-lib/components/index.d.ts +4 -0
  105. package/dist-lib/components/index.d.ts.map +1 -1
  106. package/dist-lib/components.js +86 -78
  107. package/dist-lib/components.js.map +1 -1
  108. package/dist-lib/hooks/usePwaAutoUpdate.d.ts +11 -2
  109. package/dist-lib/hooks/usePwaAutoUpdate.d.ts.map +1 -1
  110. package/dist-lib/hooks/usePwaAutoUpdate.js +32 -10
  111. package/dist-lib/hooks/usePwaAutoUpdate.js.map +1 -1
  112. package/dist-lib/router.d.ts.map +1 -1
  113. package/dist-lib/router.js +46 -35
  114. package/dist-lib/router.js.map +1 -1
  115. package/dist-lib/routes/DeviceSingle/DeviceSingle.d.ts.map +1 -1
  116. package/dist-lib/routes/DeviceSingle/DeviceSingle.js +40 -40
  117. package/dist-lib/routes/DeviceSingle/DeviceSingle.js.map +1 -1
  118. package/dist-lib/services/backups.d.ts +15 -2
  119. package/dist-lib/services/backups.d.ts.map +1 -1
  120. package/dist-lib/services/backups.js +119 -100
  121. package/dist-lib/services/backups.js.map +1 -1
  122. package/dist-lib/services/plans.d.ts +14 -0
  123. package/dist-lib/services/plans.d.ts.map +1 -1
  124. package/dist-lib/services/plans.js +160 -129
  125. package/dist-lib/services/plans.js.map +1 -1
  126. package/dist-lib/services/restores.d.ts +10 -2
  127. package/dist-lib/services/restores.d.ts.map +1 -1
  128. package/dist-lib/services/restores.js +61 -57
  129. package/dist-lib/services/restores.js.map +1 -1
  130. package/dist-lib/services/users.d.ts.map +1 -1
  131. package/dist-lib/services/users.js +32 -32
  132. package/dist-lib/services/users.js.map +1 -1
  133. package/dist-lib/services.js +107 -103
  134. package/dist-lib/styles/core-frontend.css +1 -1
  135. package/dist-lib/utils/progressHelpers.d.ts +12 -1
  136. package/dist-lib/utils/progressHelpers.d.ts.map +1 -1
  137. package/dist-lib/utils/progressHelpers.js +121 -63
  138. package/dist-lib/utils/progressHelpers.js.map +1 -1
  139. package/dist-lib/utils.js +29 -28
  140. package/package.json +1 -1
  141. package/src/@types/backups.ts +28 -0
  142. package/src/@types/devices.ts +8 -0
  143. package/src/@types/plans.ts +23 -1
  144. package/src/@types/restores.ts +2 -0
  145. package/src/components/Device/DeviceBackups/DeviceBackups.tsx +11 -36
  146. package/src/components/Plan/BackupEvents/BackupEvents.module.scss +65 -0
  147. package/src/components/Plan/BackupEvents/BackupEvents.tsx +65 -4
  148. package/src/components/Plan/BackupProgress/BackupProgress.module.scss +121 -3
  149. package/src/components/Plan/BackupProgress/BackupProgress.tsx +149 -71
  150. package/src/components/Plan/Backups/Backups.tsx +52 -4
  151. package/src/components/Plan/EditPlan/EditPlan.tsx +1 -0
  152. package/src/components/Plan/Mirrors/MirrorDetails.module.scss +76 -0
  153. package/src/components/Plan/Mirrors/MirrorDetails.tsx +100 -0
  154. package/src/components/Plan/Mirrors/MirrorStatusBadge.module.scss +25 -0
  155. package/src/components/Plan/Mirrors/MirrorStatusBadge.tsx +65 -0
  156. package/src/components/Plan/Mirrors/MirrorStorageSelector.module.scss +97 -0
  157. package/src/components/Plan/Mirrors/MirrorStorageSelector.tsx +70 -0
  158. package/src/components/Plan/Mirrors/MirrorStorageSelectorModal.tsx +40 -0
  159. package/src/components/Plan/PlanBackups/PlanBackups.tsx +4 -1
  160. package/src/components/Plan/PlanForm/PlanForm.tsx +30 -3
  161. package/src/components/Plan/PlanItems/PlanItem.tsx +3 -3
  162. package/src/components/Plan/PlanRemoveModal/PlanRemoveModal.tsx +1 -1
  163. package/src/components/Plan/PlanSettings/PlanReplicationSettings.module.scss +105 -0
  164. package/src/components/Plan/PlanSettings/PlanReplicationSettings.tsx +334 -0
  165. package/src/components/Plan/PlanStats/PlanStats.module.scss +1 -1
  166. package/src/components/Plan/PlanStats/PlanStats.tsx +8 -8
  167. package/src/components/Plan/PlanStorageInfo/PlanStorageInfo.module.scss +43 -0
  168. package/src/components/Plan/PlanStorageInfo/PlanStorageInfo.tsx +83 -0
  169. package/src/components/Restore/RestoreWizard/RestoreConfirmStep.tsx +2 -0
  170. package/src/components/Restore/RestoreWizard/RestorePreviewStep.tsx +2 -0
  171. package/src/components/Restore/RestoreWizard/RestoreSettingsStep.tsx +36 -13
  172. package/src/components/Restore/RestoreWizard/RestoreWizard.module.scss +4 -0
  173. package/src/components/Restore/RestoreWizard/RestoreWizard.tsx +9 -1
  174. package/src/components/Settings/GeneralSettings/GeneralSettings.tsx +1 -1
  175. package/src/components/Settings/IntegrationSettings/IntegrationSettings.tsx +9 -2
  176. package/src/components/common/Icon/Icon.tsx +10 -1
  177. package/src/components/common/PageHeader/PageHeader.module.scss +3 -0
  178. package/src/components/index.ts +6 -0
  179. package/src/hooks/usePwaAutoUpdate.ts +51 -11
  180. package/src/router.tsx +26 -17
  181. package/src/routes/DeviceSingle/DeviceSingle.tsx +3 -3
  182. package/src/services/backups.ts +32 -9
  183. package/src/services/plans.ts +45 -0
  184. package/src/services/restores.ts +10 -2
  185. package/src/services/users.ts +14 -5
  186. 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,CAoC7F;AAoCD,eAAO,MAAM,2BAA2B,GAAI,QAAQ,MAAM,KAAG,MAiE5D,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"}
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 O(e) {
2
- var T;
3
- if (!((T = e == null ? void 0 : e.events) != null && T.length))
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 n = e.events.slice().reverse().find((s) => !s.completed) || e.events[e.events.length - 1];
6
- if (!n)
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: E, action: i } = n, _ = {
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
- }[E] || E, r = P(i);
15
- return E === "finished" ? r : `${_}: ${r}`;
15
+ }[i] || i, P = s(E);
16
+ return i === "finished" ? P : `${_}: ${P}`;
16
17
  }
17
- const S = (e) => {
18
- const R = {
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
- }, n = {
25
- START: (i, t) => `Running ${i} ${t}...`,
26
- COMPLETE: (i, t) => `Script ${t} Complete`,
27
- FAIL: (i, t) => `Script ${t} Failed`,
28
- ERROR: (i, t) => `Error in ${i} ${t}`
29
- }, E = e.match(/^(ONBACKUP\w+)_SCRIPT_(\d+)_(START|COMPLETE|FAIL|ERROR)$/);
30
- if (E) {
31
- const [, i, t, _] = E, r = R[i] || "Script", T = n[_];
32
- if (T)
33
- return T(r, t);
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
- }, P = (e) => {
37
- const R = S(e);
37
+ }, s = (t, T) => {
38
+ const R = c(t);
38
39
  if (R)
39
40
  return R;
40
- const n = e.match(/RETRY_ATTEMPT_(\d+)_OF_(\d+)_START/);
41
- if (n) {
42
- const [, t, _] = n;
43
- return `Retrying (${t}/${_})...`;
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 = e.match(/BACKUP_RETRY_(\d+)_OF_(\d+)_SCHEDULED/);
46
+ const E = t.match(/BACKUP_RETRY_(\d+)_OF_(\d+)_SCHEDULED/);
46
47
  if (E) {
47
- const [, t, _] = E;
48
- return `Scheduling Retry (${parseInt(t)}/${_})...`;
48
+ const [, e, r] = E;
49
+ return `Scheduling Retry (${parseInt(e)}/${r})...`;
49
50
  }
50
- return {
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
- }[e] || e;
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 o(e) {
93
- var T;
94
- if (!((T = e == null ? void 0 : e.events) != null && T.length))
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 n = e.events.slice().reverse().find((s) => !s.completed) || e.events[e.events.length - 1];
97
- if (!n)
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: E, action: i } = n, _ = {
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
- }[E] || E, r = c(i);
107
- return E === "finished" ? r : `${_}: ${r}`;
156
+ }[i] || i, P = O(E);
157
+ return i === "finished" ? P : `${_}: ${P}`;
108
158
  }
109
- const c = (e) => {
110
- const R = S(e);
111
- if (R)
112
- return R;
113
- const n = e.match(/RETRY_ATTEMPT_(\d+)_OF_(\d+)_START/);
114
- if (n) {
115
- const [, t, _] = n;
116
- return `Retrying (${t}/${_})...`;
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 E = e.match(/RESTORE_RETRY_(\d+)_OF_(\d+)_SCHEDULED/);
119
- if (E) {
120
- const [, t, _] = E;
121
- return `Scheduling Retry (${parseInt(t)}/${_})...`;
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
- }[e] || e;
198
+ }[t] || t;
149
199
  };
150
- function C(e) {
151
- var n;
152
- if (!((n = e == null ? void 0 : e.events) != null && n.length))
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 R = e.events.slice().reverse().find((E) => E.resticData);
155
- return (R == null ? void 0 : R.resticData) || null;
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
- C as extractResticData,
159
- O as generateBackupProgressMessage,
160
- o as generateRestoreProgressMessage,
161
- P as getBackupEventActionMessage,
162
- c as getRestoreEventActionMessage
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 o, APP_NAME as r, DEFAULT_PLAN_SETTINGS as a, DEV_MODE as s } from "./utils/constants.js";
2
- import { calculateDirectorySizes as m, clipPath as n, compareVersions as g, formatBytes as l, formatDateTime as p, formatDuration as c, formatNumberToK as P, formatPermissions as f, formatSeconds as A, getAvailableCliApps as E, getLogLevelName as S, getOSIcon as d, getProcessorIcon as v, isMobile as x, isServerEdition as D, isValidEmail as I, secondsToMinutes as M, shouldDisplayStorageField as N, sortFileItems as u, timeAgo as h } from "./utils/helpers.js";
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, generateRestoreProgressMessage as y, getBackupEventActionMessage as B, getRestoreEventActionMessage as k } from "./utils/progressHelpers.js";
5
- import { getParentPath as O, getPathSeparator as U, normalizePath as C, splitPath as G } from "./utils/restore.js";
6
- import { storageProviders as j } from "./utils/storageProviders.js";
7
- import { getIconNameForFile as w } from "./utils/getIconNameforFile.js";
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
- o as API_URL,
10
- r as APP_NAME,
9
+ r as API_URL,
10
+ o as APP_NAME,
11
11
  a as DEFAULT_PLAN_SETTINGS,
12
12
  s as DEV_MODE,
13
- m as calculateDirectorySizes,
14
- n as clipPath,
15
- g as compareVersions,
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 generateRestoreProgressMessage,
25
- E as getAvailableCliApps,
26
- B as getBackupEventActionMessage,
27
- w as getIconNameForFile,
28
- S as getLogLevelName,
29
- d as getOSIcon,
30
- O as getParentPath,
31
- U as getPathSeparator,
32
- v as getProcessorIcon,
33
- k as getRestoreEventActionMessage,
34
- x as isMobile,
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
- D as isServerEdition,
37
- I as isValidEmail,
38
- C as normalizePath,
37
+ x as isServerEdition,
38
+ D as isValidEmail,
39
+ G as normalizePath,
39
40
  L as planIntervalAgeName,
40
41
  _ as planIntervalName,
41
- M as secondsToMinutes,
42
+ I as secondsToMinutes,
42
43
  N as shouldDisplayStorageField,
43
44
  u as sortFileItems,
44
- G as splitPath,
45
- j as storageProviders,
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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@plutonhq/core-frontend",
3
3
  "description": "Pluton Core Frontend Library",
4
- "version": "0.1.13",
4
+ "version": "0.1.14",
5
5
  "author": "Plutonhq",
6
6
  "license": "Apache-2.0",
7
7
  "publishConfig": {
@@ -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
  }
@@ -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
+ }
@@ -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 = {
@@ -112,4 +112,6 @@ export interface RestoreSettings {
112
112
  includes: string[];
113
113
  excludes: string[];
114
114
  delete: boolean;
115
+ replicationId?: string;
116
+ storageId?: string;
115
117
  }