@plutonhq/core-backend 0.1.15 → 0.1.16
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/controllers/PlanController.d.ts +1 -0
- package/dist/controllers/PlanController.d.ts.map +1 -1
- package/dist/controllers/PlanController.js +1 -1
- package/dist/controllers/PlanController.js.map +1 -1
- package/dist/controllers/SettingsController.d.ts +2 -0
- package/dist/controllers/SettingsController.d.ts.map +1 -1
- package/dist/controllers/SettingsController.js +1 -1
- package/dist/controllers/SettingsController.js.map +1 -1
- package/dist/controllers/UserController.d.ts +4 -0
- package/dist/controllers/UserController.d.ts.map +1 -1
- package/dist/controllers/UserController.js +1 -1
- package/dist/controllers/UserController.js.map +1 -1
- package/dist/createApp.d.ts.map +1 -1
- package/dist/createApp.js +1 -1
- package/dist/createApp.js.map +1 -1
- package/dist/managers/BaseBackupManager.d.ts +4 -1
- package/dist/managers/BaseBackupManager.d.ts.map +1 -1
- package/dist/managers/BaseBackupManager.js +1 -1
- package/dist/managers/BaseBackupManager.js.map +1 -1
- package/dist/routes/plans.d.ts.map +1 -1
- package/dist/routes/plans.js +1 -1
- package/dist/routes/plans.js.map +1 -1
- package/dist/routes/settings.d.ts.map +1 -1
- package/dist/routes/settings.js +1 -1
- package/dist/routes/settings.js.map +1 -1
- package/dist/routes/users.d.ts.map +1 -1
- package/dist/routes/users.js +1 -1
- package/dist/routes/users.js.map +1 -1
- package/dist/services/PlanService.d.ts +8 -0
- package/dist/services/PlanService.d.ts.map +1 -1
- package/dist/services/PlanService.js +1 -1
- package/dist/services/PlanService.js.map +1 -1
- package/dist/services/SettingsService.d.ts +8 -0
- package/dist/services/SettingsService.d.ts.map +1 -1
- package/dist/services/SettingsService.js +1 -1
- package/dist/services/SettingsService.js.map +1 -1
- package/dist/services/events/BackupEventService.d.ts +11 -0
- package/dist/services/events/BackupEventService.d.ts.map +1 -1
- package/dist/services/events/BackupEventService.js +1 -1
- package/dist/services/events/BackupEventService.js.map +1 -1
- package/dist/services/listeners/BackupEventListener.d.ts +11 -9
- package/dist/services/listeners/BackupEventListener.d.ts.map +1 -1
- package/dist/services/listeners/BackupEventListener.js +1 -1
- package/dist/services/listeners/BackupEventListener.js.map +1 -1
- package/dist/strategies/backup/BackupStrategy.d.ts +4 -0
- package/dist/strategies/backup/BackupStrategy.d.ts.map +1 -1
- package/dist/strategies/backup/LocalStrategy.d.ts +4 -0
- package/dist/strategies/backup/LocalStrategy.d.ts.map +1 -1
- package/dist/strategies/backup/LocalStrategy.js +1 -1
- package/dist/strategies/backup/LocalStrategy.js.map +1 -1
- package/dist/strategies/backup/RemoteStrategy.d.ts +4 -0
- package/dist/strategies/backup/RemoteStrategy.d.ts.map +1 -1
- package/dist/strategies/backup/RemoteStrategy.js +1 -1
- package/dist/strategies/backup/RemoteStrategy.js.map +1 -1
- package/dist/utils/restic/restic.d.ts +5 -0
- package/dist/utils/restic/restic.d.ts.map +1 -1
- package/dist/utils/restic/restic.js +1 -1
- package/dist/utils/restic/restic.js.map +1 -1
- package/package.json +6 -1
|
@@ -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":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"restic.js","sourceRoot":"","sources":["../../../src/utils/restic/restic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAG3F,MAAM,UAAU,gBAAgB,CAC/B,IAAc,EACd,GAA4B,EAC5B,UAAmC,EACnC,OAAgC,EAChC,UAAmC,EACnC,SAAkC;IAElC,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,MAAM,iBAAiB,GAAG,IAAI,CAAC,CAAC,YAAY;IAC5C,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IAC9D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,MAAM,YAAY,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,gBAAgB,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACjD,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;QAEzD,MAAM,gBAAgB,GAAG,mBAAmB,EAAE,CAAC;QAE/C,2DAA2D;QAC3D,8FAA8F;QAC9F,MAAM,WAAW,GAAG,GAAG,EAAE,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;QAC5E,MAAM,OAAO,GAAG,GAAG,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,WAAW,EAAE,CAAC;QAE9D,iEAAiE;QACjE,MAAM,eAAe,GAAG,0BAA0B,EAAE,CAAC;QACrD,MAAM,eAAe,GAAG,0BAA0B,EAAE,CAAC;QAErD,MAAM,OAAO,GAAG;YACf,GAAG,eAAe;YAClB,GAAG,eAAe;YAClB,GAAG,GAAG,EAAE,2CAA2C;YACnD,IAAI,EAAE,OAAO;YACb,aAAa,EAAE,gBAAgB;YAC/B,YAAY,EAAE,YAAY;YAC1B,kBAAkB,EAAE,aAAa,CAAC,MAAM,CAAC,cAAc;SACvD,CAAC;QAEF,MAAM,SAAS,GAAG;YACjB,GAAG,IAAI;YACP,IAAI;YACJ,kBAAkB,gBAAgB,EAAE;YACpC,aAAa;YACb,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,cAAc,CAAC;SAChD,CAAC;QAEF,MAAM,aAAa,GAAG,KAAK,CAAC,YAAY,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;QAEvE,IAAI,SAAS,EAAE,CAAC;YACf,SAAS,CAAC,aAAa,CAAC,CAAC;QAC1B,CAAC;QACD,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAI,YAAY,GAAG,KAAK,CAAC;QAEzB,8BAA8B;QAC9B,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YACzC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC1B,YAAY,GAAG,IAAI,CAAC;gBACpB,MAAM,CAAC,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC;gBAChD,OAAO;YACR,CAAC;QACF,CAAC,CAAC,CAAC;QAEH,2BAA2B;QAC3B,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;YACjC,MAAM,QAAQ,GAAG,0BAA0B,KAAK,CAAC,OAAO,EAAE,CAAC;YAC3D,OAAO,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YACjC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,gCAAgC;QAChC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YACjD,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1B,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACJ,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC5C,8DAA8D;gBAC9D,IACC,OAAO,EAAE,YAAY;oBACrB,CAAC,OAAO,CAAC,YAAY,KAAK,QAAQ,IAAI,OAAO,CAAC,YAAY,KAAK,gBAAgB,CAAC,EAC/E,CAAC;oBACF,4BAA4B;oBAC5B,IAAI,WAAW,GAAG,gBAAgB,IAAI,iBAAiB,EAAE,CAAC;wBACzD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAC3B,IAAI,CAAC,SAAS,CAAC;4BACd,IAAI,EAAE,MAAM;4BACZ,GAAG,OAAO;yBACV,CAAC,CACF,CAAC;wBACF,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC;wBACvB,gBAAgB,GAAG,WAAW,CAAC;oBAChC,CAAC;gBACF,CAAC;qBAAM,CAAC;oBACP,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC;gBACpB,CAAC;YACF,CAAC;YAAC,MAAM,CAAC;gBACR,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;QACF,CAAC,CAAC,CAAC;QAEH,wBAAwB;QACxB,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YACjD,IAAI,CAAC,YAAY,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACtD,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAE/B,+FAA+F;gBAC/F,6CAA6C;gBAC7C,mBAAmB;YACpB,CAAC;QACF,CAAC,CAAC,CAAC;QAEH,sBAAsB;QACtB,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAY,EAAE,EAAE;YAC1C,yDAAyD;YACzD,IAAI,CAAC,YAAY,EAAE,CAAC;gBACnB,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC;gBACnB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBAChB,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;gBACxB,CAAC;qBAAM,CAAC;oBACP,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,WAAW,CAAC,IAAI,EAAE,IAAI,uBAAuB,CAAC,CAAC;oBAC7E,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,uBAAuB,CAAC,CAAC;oBACvE,OAAO,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;oBACtC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACf,CAAC;YACF,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACvC,MAAc,EACd,WAAmB,EACnB,WAAmB,EACnB,UAAmB;IAEnB,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,EAAE,CAAC;QAC7C,OAAO,KAAK,CAAC;IACd,CAAC;IACD,kGAAkG;IAClG,kGAAkG;IAClG,MAAM,QAAQ,GAAG,sBAAsB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IACvE,MAAM,SAAS,GAAG,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC;IAChD,MAAM,SAAS,GAAG;QACjB,OAAO;QACP,QAAQ;QACR,IAAI;QACJ,QAAQ;QACR,OAAO;QACP,OAAO,GAAG,MAAM;QAChB,QAAQ;QACR,UAAU;KACV,CAAC;IACF,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,MAAM,EAAE,EAAE,QAAQ,CAAC,CAAC;IACzF,IAAI,CAAC;QACJ,iCAAiC;QACjC,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAmB,CAAC;QAC3D,6CAA6C;QAE7C,oDAAoD;QACpD,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;QACjE,MAAM,SAAS,GAAqB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAExD,MAAM,iBAAiB,GAAa,EAAE,CAAC;QACvC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACxB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;YACrE,IAAI,WAAW,EAAE,CAAC;gBACjB,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;YAC5D,CAAC;QACF,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,iBAAiB,CAAC,CAAC;QAEtD,OAAO;YACN,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,SAAS,EAAE,iBAAiB;SAC5B,CAAC;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACrC,GAAW,EACX,OAA0E;IAE1E,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IACzD,MAAM,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3E,MAAM,QAAQ,GAAG,sBAAsB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAClE,MAAM,SAAS,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;IACnE,IAAI,CAAC;QACJ,MAAM,kBAAkB,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;QACjF,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,kBAAkB,EAAE;YAC1D,eAAe,EAAE,YAAY;SAC7B,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAClC,IAAI,OAAO,EAAE,CAAC;YACb,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACvC,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBACpE,MAAM,QAAQ,GAAmB,UAAU,CAAC,CAAC,CAAC,CAAC;gBAC/C,OAAO;oBACN,OAAO,EAAE,IAAI;oBACb,MAAM,EAAE,QAAQ;iBAChB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACP,OAAO,SAAS,CAAC;YAClB,CAAC;QACF,CAAC;aAAM,CAAC;YACP,OAAO,SAAS,CAAC;QAClB,CAAC;IACF,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACrB,OAAO;YACN,GAAG,SAAS;YACZ,MAAM,EAAE,sBAAsB,GAAG,KAAK,EAAE,OAAO;SAC/C,CAAC;IACH,CAAC;AACF,CAAC;AAED,MAAM,UAAU,uBAAuB,CACtC,MAAc,EACd,EAAE,IAAI,EAAE,MAAM,EAAoC;IAElD,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,QAAQ,GAAG,IAAI,CAAC;IACpB,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,MAAM,IAAI,GAAa,EAAE,CAAC;IAE1B,IAAI,MAAM,CAAC,QAAQ,CAAC,4CAA4C,CAAC,EAAE,CAAC;QACnE,OAAO,GAAG,wCAAwC,CAAC;QACnD,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7D,GAAG,GAAG,yBAAyB,MAAM;;2BAEZ,IAAI,UAAU,UAAU;;2BAExB,IAAI;;OAExB,CAAC;IACP,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,CAAC,iCAAiC,CAAC,EAAE,CAAC;QACxD,OAAO,GAAG,kCAAkC,CAAC;QAC7C,GAAG,GAAG,yBAAyB,MAAM;;iCAEN,IAAI;;OAE9B,CAAC;IACP,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,CAAC,gCAAgC,CAAC,EAAE,CAAC;QACvD,OAAO,GAAG,iCAAiC,CAAC;QAC5C,GAAG;YACF,6PAA6P,CAAC;IAChQ,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,CAAC,6BAA6B,CAAC,EAAE,CAAC;QACpD,OAAO,GAAG,+BAA+B,CAAC;QAC1C,QAAQ,GAAG,KAAK,CAAC;IAClB,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;QAC7C,OAAO,GAAG,oBAAoB,CAAC;QAC/B,QAAQ,GAAG,KAAK,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAY,EAAE,EAAE;QAC3C,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;AACzC,CAAC"}
|
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.
|
|
4
|
+
"version": "0.1.16",
|
|
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",
|