@plutonhq/core-backend 0.1.15 → 0.1.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/controllers/PlanController.d.ts +1 -0
  2. package/dist/controllers/PlanController.d.ts.map +1 -1
  3. package/dist/controllers/PlanController.js +1 -1
  4. package/dist/controllers/PlanController.js.map +1 -1
  5. package/dist/controllers/SettingsController.d.ts +3 -0
  6. package/dist/controllers/SettingsController.d.ts.map +1 -1
  7. package/dist/controllers/SettingsController.js +1 -1
  8. package/dist/controllers/SettingsController.js.map +1 -1
  9. package/dist/controllers/UserController.d.ts +4 -0
  10. package/dist/controllers/UserController.d.ts.map +1 -1
  11. package/dist/controllers/UserController.js +1 -1
  12. package/dist/controllers/UserController.js.map +1 -1
  13. package/dist/createApp.d.ts.map +1 -1
  14. package/dist/createApp.js +1 -1
  15. package/dist/createApp.js.map +1 -1
  16. package/dist/managers/BaseBackupManager.d.ts +4 -1
  17. package/dist/managers/BaseBackupManager.d.ts.map +1 -1
  18. package/dist/managers/BaseBackupManager.js +1 -1
  19. package/dist/managers/BaseBackupManager.js.map +1 -1
  20. package/dist/routes/plans.d.ts.map +1 -1
  21. package/dist/routes/plans.js +1 -1
  22. package/dist/routes/plans.js.map +1 -1
  23. package/dist/routes/settings.d.ts.map +1 -1
  24. package/dist/routes/settings.js +1 -1
  25. package/dist/routes/settings.js.map +1 -1
  26. package/dist/routes/users.d.ts.map +1 -1
  27. package/dist/routes/users.js +1 -1
  28. package/dist/routes/users.js.map +1 -1
  29. package/dist/services/PlanService.d.ts +8 -0
  30. package/dist/services/PlanService.d.ts.map +1 -1
  31. package/dist/services/PlanService.js +1 -1
  32. package/dist/services/PlanService.js.map +1 -1
  33. package/dist/services/SettingsService.d.ts +9 -0
  34. package/dist/services/SettingsService.d.ts.map +1 -1
  35. package/dist/services/SettingsService.js +1 -1
  36. package/dist/services/SettingsService.js.map +1 -1
  37. package/dist/services/events/BackupEventService.d.ts +11 -0
  38. package/dist/services/events/BackupEventService.d.ts.map +1 -1
  39. package/dist/services/events/BackupEventService.js +1 -1
  40. package/dist/services/events/BackupEventService.js.map +1 -1
  41. package/dist/services/listeners/BackupEventListener.d.ts +11 -9
  42. package/dist/services/listeners/BackupEventListener.d.ts.map +1 -1
  43. package/dist/services/listeners/BackupEventListener.js +1 -1
  44. package/dist/services/listeners/BackupEventListener.js.map +1 -1
  45. package/dist/strategies/backup/BackupStrategy.d.ts +4 -0
  46. package/dist/strategies/backup/BackupStrategy.d.ts.map +1 -1
  47. package/dist/strategies/backup/LocalStrategy.d.ts +4 -0
  48. package/dist/strategies/backup/LocalStrategy.d.ts.map +1 -1
  49. package/dist/strategies/backup/LocalStrategy.js +1 -1
  50. package/dist/strategies/backup/LocalStrategy.js.map +1 -1
  51. package/dist/strategies/backup/RemoteStrategy.d.ts +4 -0
  52. package/dist/strategies/backup/RemoteStrategy.d.ts.map +1 -1
  53. package/dist/strategies/backup/RemoteStrategy.js +1 -1
  54. package/dist/strategies/backup/RemoteStrategy.js.map +1 -1
  55. package/dist/utils/installHelpers.d.ts +6 -2
  56. package/dist/utils/installHelpers.d.ts.map +1 -1
  57. package/dist/utils/installHelpers.js +1 -1
  58. package/dist/utils/installHelpers.js.map +1 -1
  59. package/dist/utils/restic/restic.d.ts +5 -0
  60. package/dist/utils/restic/restic.d.ts.map +1 -1
  61. package/dist/utils/restic/restic.js +1 -1
  62. package/dist/utils/restic/restic.js.map +1 -1
  63. package/package.json +6 -1
@@ -4,7 +4,7 @@
4
4
  * Helper functions to detect installation type, platform capabilities,
5
5
  * and environment configuration for the Pluton application.
6
6
  */
7
- export type InstallType = 'docker' | 'binary' | 'dev';
7
+ export type InstallType = 'docker' | 'binary' | 'server' | 'dev';
8
8
  /**
9
9
  * Check if running as a pkg-packaged binary
10
10
  */
@@ -13,9 +13,13 @@ export declare function isBinaryMode(): boolean;
13
13
  * Check if running in Docker container
14
14
  */
15
15
  export declare function isDockerMode(): boolean;
16
+ /**
17
+ * Check if running as a binary on a headless Linux server (no desktop environment)
18
+ */
19
+ export declare function isServerMode(): boolean;
16
20
  /**
17
21
  * Determines the installation type of the application
18
- * @returns 'docker' | 'binary' | 'dev'
22
+ * @returns 'docker' | 'binary' | 'server' | 'dev'
19
23
  */
20
24
  export declare function getInstallType(): InstallType;
21
25
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"installHelpers.d.ts","sourceRoot":"","sources":["../../src/utils/installHelpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEtD;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,WAAW,CAQ5C;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAoBxC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAK3C;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C"}
1
+ {"version":3,"file":"installHelpers.d.ts","sourceRoot":"","sources":["../../src/utils/installHelpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEjE;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,WAAW,CAQ5C;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAoBxC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAK3C;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C"}
@@ -1 +1 @@
1
- export function isBinaryMode(){return!!process.pkg}export function isDockerMode(){return"true"===process.env.IS_DOCKER||"1"===process.env.IS_DOCKER}export function getInstallType(){return isDockerMode()?"docker":isBinaryMode()?"binary":"dev"}export function isLinuxDesktop(){if("linux"!==process.platform)return!1;if("true"===process.env.PLUTON_LINUX_DESKTOP||"1"===process.env.PLUTON_LINUX_DESKTOP)return!0;const hasDisplay=!(!process.env.DISPLAY&&!process.env.WAYLAND_DISPLAY),hasDesktopEnv=!!(process.env.XDG_CURRENT_DESKTOP||process.env.DESKTOP_SESSION||process.env.GNOME_DESKTOP_SESSION_ID||process.env.KDE_FULL_SESSION);return hasDisplay||hasDesktopEnv}export function isKeyringPlatform(){const platform=process.platform;return"win32"===platform||"darwin"===platform||"linux"===platform&&isLinuxDesktop()}export function requiresKeyringSetup(){return isBinaryMode()&&isKeyringPlatform()}
1
+ export function isBinaryMode(){return!!process.pkg}export function isDockerMode(){return"true"===process.env.IS_DOCKER||"1"===process.env.IS_DOCKER}export function isServerMode(){return isBinaryMode()&&"linux"===process.platform&&!isLinuxDesktop()}export function getInstallType(){return isDockerMode()?"docker":isBinaryMode()?isServerMode()?"server":"binary":"dev"}export function isLinuxDesktop(){if("linux"!==process.platform)return!1;if("true"===process.env.PLUTON_LINUX_DESKTOP||"1"===process.env.PLUTON_LINUX_DESKTOP)return!0;const hasDisplay=!(!process.env.DISPLAY&&!process.env.WAYLAND_DISPLAY),hasDesktopEnv=!!(process.env.XDG_CURRENT_DESKTOP||process.env.DESKTOP_SESSION||process.env.GNOME_DESKTOP_SESSION_ID||process.env.KDE_FULL_SESSION);return hasDisplay||hasDesktopEnv}export function isKeyringPlatform(){const platform=process.platform;return"win32"===platform||"darwin"===platform||"linux"===platform&&isLinuxDesktop()}export function requiresKeyringSetup(){return isBinaryMode()&&isKeyringPlatform()}
@@ -1 +1 @@
1
- {"version":3,"file":"installHelpers.js","sourceRoot":"","sources":["../../src/utils/installHelpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;GAEG;AACH,MAAM,UAAU,YAAY;IAC3B,OAAO,CAAC,CAAE,OAAe,CAAC,GAAG,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY;IAC3B,OAAO,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,GAAG,CAAC;AAC1E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc;IAC7B,IAAI,YAAY,EAAE,EAAE,CAAC;QACpB,OAAO,QAAQ,CAAC;IACjB,CAAC;IACD,IAAI,YAAY,EAAE,EAAE,CAAC;QACpB,OAAO,QAAQ,CAAC;IACjB,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc;IAC7B,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IAE/C,kFAAkF;IAClF,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,GAAG,EAAE,CAAC;QAC7F,OAAO,IAAI,CAAC;IACb,CAAC;IAED,4CAA4C;IAC5C,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAE1E,kDAAkD;IAClD,MAAM,aAAa,GAAG,CAAC,CAAC,CACvB,OAAO,CAAC,GAAG,CAAC,mBAAmB;QAC/B,OAAO,CAAC,GAAG,CAAC,eAAe;QAC3B,OAAO,CAAC,GAAG,CAAC,wBAAwB;QACpC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAC5B,CAAC;IAEF,OAAO,UAAU,IAAI,aAAa,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAChC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,OAAO,CACN,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,QAAQ,IAAI,CAAC,QAAQ,KAAK,OAAO,IAAI,cAAc,EAAE,CAAC,CAC3F,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IACnC,OAAO,YAAY,EAAE,IAAI,iBAAiB,EAAE,CAAC;AAC9C,CAAC"}
1
+ {"version":3,"file":"installHelpers.js","sourceRoot":"","sources":["../../src/utils/installHelpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;GAEG;AACH,MAAM,UAAU,YAAY;IAC3B,OAAO,CAAC,CAAE,OAAe,CAAC,GAAG,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY;IAC3B,OAAO,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,GAAG,CAAC;AAC1E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY;IAC3B,OAAO,YAAY,EAAE,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;AAC5E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc;IAC7B,IAAI,YAAY,EAAE,EAAE,CAAC;QACpB,OAAO,QAAQ,CAAC;IACjB,CAAC;IACD,IAAI,YAAY,EAAE,EAAE,CAAC;QACpB,OAAO,YAAY,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC7C,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc;IAC7B,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IAE/C,kFAAkF;IAClF,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,GAAG,EAAE,CAAC;QAC7F,OAAO,IAAI,CAAC;IACb,CAAC;IAED,4CAA4C;IAC5C,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAE1E,kDAAkD;IAClD,MAAM,aAAa,GAAG,CAAC,CAAC,CACvB,OAAO,CAAC,GAAG,CAAC,mBAAmB;QAC/B,OAAO,CAAC,GAAG,CAAC,eAAe;QAC3B,OAAO,CAAC,GAAG,CAAC,wBAAwB;QACpC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAC5B,CAAC;IAEF,OAAO,UAAU,IAAI,aAAa,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAChC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,OAAO,CACN,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,QAAQ,IAAI,CAAC,QAAQ,KAAK,OAAO,IAAI,cAAc,EAAE,CAAC,CAC3F,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IACnC,OAAO,YAAY,EAAE,IAAI,iBAAiB,EAAE,CAAC;AAC9C,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { ResticSnapshot } from '../../types/restic';
2
+ import { BackupVerifiedResult } from '../../types/plans';
2
3
  export declare function runResticCommand(args: string[], env?: Record<string, string>, onProgress?: (data: Buffer) => void, onError?: (data: Buffer) => void, onComplete?: (code: number) => void, onProcess?: (process: any) => void): Promise<string>;
3
4
  export declare function getBackupPlanStats(planId: string, storageName: string, storagePath: string, encryption: boolean): Promise<false | {
4
5
  total_size: number;
@@ -12,4 +13,8 @@ export declare function getSnapshotByTag(tag: string, options: {
12
13
  success: boolean;
13
14
  result: ResticSnapshot | string;
14
15
  }>;
16
+ export declare function handleResticCheckResult(output: string, { repo, device }: {
17
+ repo: string;
18
+ device: string;
19
+ }): BackupVerifiedResult;
15
20
  //# sourceMappingURL=restic.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"restic.d.ts","sourceRoot":"","sources":["../../../src/utils/restic/restic.ts"],"names":[],"mappings":"AAIA,OAAO,EAAkB,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAOpE,wBAAgB,gBAAgB,CAC/B,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EACnC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAChC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EACnC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,GAChC,OAAO,CAAC,MAAM,CAAC,CA0HjB;AAED,wBAAsB,kBAAkB,CACvC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,OAAO,GACjB,OAAO,CAAC,KAAK,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA8C9D;AAED,wBAAsB,gBAAgB,CACrC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,GACxE,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAAA;CAAE,CAAC,CA+BhE"}
1
+ {"version":3,"file":"restic.d.ts","sourceRoot":"","sources":["../../../src/utils/restic/restic.ts"],"names":[],"mappings":"AAIA,OAAO,EAAkB,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAMpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,wBAAgB,gBAAgB,CAC/B,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EACnC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAChC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EACnC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,GAChC,OAAO,CAAC,MAAM,CAAC,CA0HjB;AAED,wBAAsB,kBAAkB,CACvC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,OAAO,GACjB,OAAO,CAAC,KAAK,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA8C9D;AAED,wBAAsB,gBAAgB,CACrC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,GACxE,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAAA;CAAE,CAAC,CA+BhE;AAED,wBAAgB,uBAAuB,CACtC,MAAM,EAAE,MAAM,EACd,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAChD,oBAAoB,CA8CtB"}
@@ -1 +1 @@
1
- import{spawn}from"child_process";import os from"os";import path from"path";import{getRcloneConfigPath}from"../rclone/helpers";import{getBinaryPath}from"../binaryPathResolver";import{appPaths}from"../AppPaths";import{generateResticRepoPath}from"./helpers";import{configService}from"../../services/ConfigService";import{buildResticEnvFromSettings,buildRcloneEnvFromSettings}from"../globalSettings";export function runResticCommand(args,env,onProgress,onError,onComplete,onProcess){let lastProgressTime=0;const localAppData=process.env.LOCALAPPDATA||os.homedir();return new Promise((resolve,reject)=>{const resticBinary=getBinaryPath("restic"),rcloneBinaryPath=getBinaryPath("rclone"),rcloneDir=path.dirname(rcloneBinaryPath),rcloneExecutable=path.basename(rcloneBinaryPath),rcloneConfigPath=getRcloneConfigPath(),currentPath=env?.PATH||process.env.PATH||process.env.Path||"",newPath=`${rcloneDir}${path.delimiter}${currentPath}`,envVars={...buildResticEnvFromSettings(),...buildRcloneEnvFromSettings(),...env,PATH:newPath,RCLONE_CONFIG:rcloneConfigPath,LOCALAPPDATA:localAppData,RCLONE_CONFIG_PASS:configService.config.ENCRYPTION_KEY},finalArgs=[...args,"-o",`rclone.program=${rcloneExecutable}`,"--cache-dir",path.join(appPaths.getTempDir(),"restic-cache")],resticProcess=spawn(resticBinary,finalArgs,{env:envVars});onProcess&&onProcess(resticProcess);let output="",errorOutput="",wasCancelled=!1;resticProcess.on("exit",(code,signal)=>{if("SIGTERM"===signal)return wasCancelled=!0,void reject(new Error("Process terminated by user"))}),resticProcess.on("error",error=>{const errorMsg=`Failed to run restic : ${error.message}`;onError?.(Buffer.from(errorMsg)),reject(new Error(errorMsg))}),resticProcess.stdout?.on("data",data=>{output+=data.toString();const currentTime=Date.now();try{const message=JSON.parse(data.toString());if(!message?.message_type||"status"!==message.message_type&&"verbose_status"!==message.message_type)onProgress?.(data);else if(currentTime-lastProgressTime>=2e3){const scanData=Buffer.from(JSON.stringify({type:"scan",...message}));onProgress?.(scanData),lastProgressTime=currentTime}}catch{onProgress?.(data)}}),resticProcess.stderr?.on("data",data=>{wasCancelled||(errorOutput+=data.toString())}),resticProcess.on("close",code=>{if(!wasCancelled)if(onComplete?.(code),0===code)resolve(output.trim());else{const error=new Error(errorOutput.trim()||"Restic command failed");onError?.(Buffer.from(error.message)),reject(error)}})})}export async function getBackupPlanStats(planId,storageName,storagePath,encryption){if(!planId||!storageName||!storagePath)return!1;const repoPath=generateResticRepoPath(storageName,storagePath),resticEnv={RESTIC_PASSWORD:encryption?configService.config.ENCRYPTION_KEY:""},statsArgs=["stats","--json","-r",repoPath,"--tag","plan-"+planId,"--mode","raw-data"],snapshotsArgs=["-r",repoPath,"snapshots","--tag",`plan-${planId}`,"--json"];try{const statsOutput=await runResticCommand(statsArgs,resticEnv),theStats=JSON.parse(statsOutput),snapRes=await runResticCommand(snapshotsArgs,resticEnv),snapshots=JSON.parse(snapRes),snapshotBackupIds=[];return snapshots.forEach(snap=>{const backupIdTag=snap.tags.find(tag=>tag.startsWith("backup-"));backupIdTag&&snapshotBackupIds.push(backupIdTag.replace("backup-",""))}),{total_size:theStats.total_size,snapshots:snapshotBackupIds}}catch(error){return!1}}export async function getSnapshotByTag(tag,options){const{storageName:storageName,storagePath:storagePath,encryption:encryption}=options,repoPassword=encryption?configService.config.ENCRYPTION_KEY:"",repoPath=generateResticRepoPath(storageName,storagePath),failedObj={success:!1,result:"Snapshot Not Found"};try{const snapshotResticArgs=["-r",repoPath,"snapshots","--tag",tag,"--json"],snapRes=await runResticCommand(snapshotResticArgs,{RESTIC_PASSWORD:repoPassword});if(snapRes){const snapResArr=JSON.parse(snapRes);if(Array.isArray(snapResArr)&&snapResArr[0]&&snapResArr[0].id){return{success:!0,result:snapResArr[0]}}return failedObj}return failedObj}catch(error){return{...failedObj,result:"Snapshot Not Found. "+error?.message}}}
1
+ import{spawn}from"child_process";import os from"os";import path from"path";import{getRcloneConfigPath}from"../rclone/helpers";import{getBinaryPath}from"../binaryPathResolver";import{appPaths}from"../AppPaths";import{generateResticRepoPath}from"./helpers";import{configService}from"../../services/ConfigService";import{buildResticEnvFromSettings,buildRcloneEnvFromSettings}from"../globalSettings";export function runResticCommand(args,env,onProgress,onError,onComplete,onProcess){let lastProgressTime=0;const localAppData=process.env.LOCALAPPDATA||os.homedir();return new Promise((resolve,reject)=>{const resticBinary=getBinaryPath("restic"),rcloneBinaryPath=getBinaryPath("rclone"),rcloneDir=path.dirname(rcloneBinaryPath),rcloneExecutable=path.basename(rcloneBinaryPath),rcloneConfigPath=getRcloneConfigPath(),currentPath=env?.PATH||process.env.PATH||process.env.Path||"",newPath=`${rcloneDir}${path.delimiter}${currentPath}`,envVars={...buildResticEnvFromSettings(),...buildRcloneEnvFromSettings(),...env,PATH:newPath,RCLONE_CONFIG:rcloneConfigPath,LOCALAPPDATA:localAppData,RCLONE_CONFIG_PASS:configService.config.ENCRYPTION_KEY},finalArgs=[...args,"-o",`rclone.program=${rcloneExecutable}`,"--cache-dir",path.join(appPaths.getTempDir(),"restic-cache")],resticProcess=spawn(resticBinary,finalArgs,{env:envVars});onProcess&&onProcess(resticProcess);let output="",errorOutput="",wasCancelled=!1;resticProcess.on("exit",(code,signal)=>{if("SIGTERM"===signal)return wasCancelled=!0,void reject(new Error("Process terminated by user"))}),resticProcess.on("error",error=>{const errorMsg=`Failed to run restic : ${error.message}`;onError?.(Buffer.from(errorMsg)),reject(new Error(errorMsg))}),resticProcess.stdout?.on("data",data=>{output+=data.toString();const currentTime=Date.now();try{const message=JSON.parse(data.toString());if(!message?.message_type||"status"!==message.message_type&&"verbose_status"!==message.message_type)onProgress?.(data);else if(currentTime-lastProgressTime>=2e3){const scanData=Buffer.from(JSON.stringify({type:"scan",...message}));onProgress?.(scanData),lastProgressTime=currentTime}}catch{onProgress?.(data)}}),resticProcess.stderr?.on("data",data=>{wasCancelled||(errorOutput+=data.toString())}),resticProcess.on("close",code=>{if(!wasCancelled)if(onComplete?.(code),0===code)resolve(output.trim());else{const error=new Error(errorOutput.trim()||"Restic command failed");onError?.(Buffer.from(error.message)),reject(error)}})})}export async function getBackupPlanStats(planId,storageName,storagePath,encryption){if(!planId||!storageName||!storagePath)return!1;const repoPath=generateResticRepoPath(storageName,storagePath),resticEnv={RESTIC_PASSWORD:encryption?configService.config.ENCRYPTION_KEY:""},statsArgs=["stats","--json","-r",repoPath,"--tag","plan-"+planId,"--mode","raw-data"],snapshotsArgs=["-r",repoPath,"snapshots","--tag",`plan-${planId}`,"--json"];try{const statsOutput=await runResticCommand(statsArgs,resticEnv),theStats=JSON.parse(statsOutput),snapRes=await runResticCommand(snapshotsArgs,resticEnv),snapshots=JSON.parse(snapRes),snapshotBackupIds=[];return snapshots.forEach(snap=>{const backupIdTag=snap.tags.find(tag=>tag.startsWith("backup-"));backupIdTag&&snapshotBackupIds.push(backupIdTag.replace("backup-",""))}),{total_size:theStats.total_size,snapshots:snapshotBackupIds}}catch(error){return!1}}export async function getSnapshotByTag(tag,options){const{storageName:storageName,storagePath:storagePath,encryption:encryption}=options,repoPassword=encryption?configService.config.ENCRYPTION_KEY:"",repoPath=generateResticRepoPath(storageName,storagePath),failedObj={success:!1,result:"Snapshot Not Found"};try{const snapshotResticArgs=["-r",repoPath,"snapshots","--tag",tag,"--json"],snapRes=await runResticCommand(snapshotResticArgs,{RESTIC_PASSWORD:repoPassword});if(snapRes){const snapResArr=JSON.parse(snapRes);if(Array.isArray(snapResArr)&&snapResArr[0]&&snapResArr[0].id){return{success:!0,result:snapResArr[0]}}return failedObj}return failedObj}catch(error){return{...failedObj,result:"Snapshot Not Found. "+error?.message}}}export function handleResticCheckResult(output,{repo:repo,device:device}){let message="",hasError=!0,fix="";const logs=[];if(output.includes("The repository contains damaged pack files")){message="A Pack file of a snapshot was damaged.";const packFileID=output.match(/pack ([a-f0-9]{64}):/)?.[1];fix=`Login to your Machine ${device}.\n Run this command to first to try and repair the pack file:\n \`restic repair -r ${repo} packs ${packFileID}\`\n Then run this command to fix the snapshots if they are still damaged:\n \`restic repair -r ${repo} snapshots --forget \`\n When asked for the password, use the Pluton Encryption key.\n `}return output.includes("The repository index is damaged")&&(message="The repository index is damaged.",fix=`Login to your Machine ${device}.\n Run this command:\n \`restic repair index -r ${repo}\`\n When asked for the password, use the Pluton Encryption key.\n `),output.includes("ciphertext verification failed")&&(message="Ciphertext verification failed.",fix="Ciphertext verification issue is hard to fix. Please ask for help in the Restic forum or their IRC channel. These errors are often caused by hardware problems which must be investigated and fixed. Otherwise, the backup will be damaged again and again."),output.includes("failed to authorize account")&&(message="Storage Authorization failed.",hasError=!1),output.includes("no errors were found")&&(message="No Issue Detected.",hasError=!1),output.split("\n").forEach(line=>{""!==line.trim()&&logs.push(line)}),{message:message,logs:logs,hasError:hasError,fix:fix}}
@@ -1 +1 @@
1
- {"version":3,"file":"restic.js","sourceRoot":"","sources":["../../../src/utils/restic/restic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"restic.js","sourceRoot":"","sources":["../../../src/utils/restic/restic.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@plutonhq/core-backend",
3
3
  "description": "Pluton Core Backend Library",
4
- "version": "0.1.15",
4
+ "version": "0.1.17",
5
5
  "author": "plutonhq",
6
6
  "license": "Apache-2.0",
7
7
  "publishConfig": {
@@ -26,12 +26,15 @@
26
26
  "ejs": "^3.1.10",
27
27
  "express": "^5.2.1",
28
28
  "express-rate-limit": "^7.5.1",
29
+ "express-session": "^1.19.0",
29
30
  "helmet": "^8.1.0",
30
31
  "jsonwebtoken": "^9.0.3",
31
32
  "nanoid": "^5.0.9",
32
33
  "node-ssh": "^13.2.0",
33
34
  "nodemailer": "8.0.1",
35
+ "otpauth": "^9.5.0",
34
36
  "pino": "^9.6.0",
37
+ "qrcode": "^1.5.4",
35
38
  "systeminformation": "^5.31.0",
36
39
  "tsx": "^4.21.0",
37
40
  "zod": "^4.1.12"
@@ -43,11 +46,13 @@
43
46
  "@types/cors": "^2.8.17",
44
47
  "@types/ejs": "^3.1.5",
45
48
  "@types/express": "^5.0.0",
49
+ "@types/express-session": "^1.18.2",
46
50
  "@types/jest": "^30.0.0",
47
51
  "@types/jsonwebtoken": "^9.0.8",
48
52
  "@types/node": "^22.10.10",
49
53
  "@types/nodemailer": "^7.0.10",
50
54
  "@types/pg": "^8.11.11",
55
+ "@types/qrcode": "^1.5.6",
51
56
  "@types/supertest": "^6.0.3",
52
57
  "concurrently": "^9.1.2",
53
58
  "cross-env": "^10.0.0",