diff --git a/package.json b/package.json index cb7ede5..658d4d7 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "clean": "rimraf dist tsconfig.tsbuildinfo oclif.manifest.json", "lint": "eslint .", "pretty": "prettier --write **/*.{js,jsx,tsx,ts}", - "postpack": "shx rm -f oclif.manifest.json", + "postpack": "rimraf oclif.manifest.json", "posttest": "yarn lint", "prepack": "yarn build && oclif manifest && oclif readme", "prepare": "husky || true", @@ -20,7 +20,7 @@ "migrate:undo": "sequelize db:migrate:undo", "publish:npm": "npm run build && npm publish --scope=@internxt --registry=https://registry.npmjs.org/ --access public", "publish:github": "npm run build && npm publish --scope=@internxt --registry=https://npm.pkg.github.com", - "postinstall": "node ./scripts/skip-in-ci.js || internxt webdav restart" + "postinstall": "node ./scripts/skip-in-ci.js || node ./bin/run.js webdav restart" }, "homepage": "https://github.com/internxt/cli", "license": "MIT", @@ -86,7 +86,6 @@ "prettier": "^3.4.2", "rimraf": "^6.0.1", "sequelize-cli": "^6.6.2", - "shx": "^0.3.4", "ts-node": "^10.9.2", "typescript": "^5.7.2", "vitest": "^2.1.8", diff --git a/src/commands/webdav.ts b/src/commands/webdav.ts index 5b34f84..0f82b92 100644 --- a/src/commands/webdav.ts +++ b/src/commands/webdav.ts @@ -28,6 +28,7 @@ export default class Webdav extends Command { let message = ''; let success = true; + await PM2Utils.connect(); switch (args.action) { case 'enable': { message = await this.enableWebDav(); @@ -55,6 +56,7 @@ export default class Webdav extends Command { break; } } + PM2Utils.disconnect(); return { success, message, action: args.action }; }; @@ -71,7 +73,6 @@ export default class Webdav extends Command { private enableWebDav = async (): Promise => { CLIUtils.doing('Starting Internxt WebDav server...'); await DriveDatabaseManager.clean(); - await PM2Utils.connect(); await PM2Utils.killWebDavServer(); await PM2Utils.startWebDavServer(); CLIUtils.done(); @@ -98,7 +99,6 @@ export default class Webdav extends Command { private disableWebDav = async (): Promise => { CLIUtils.doing('Stopping Internxt WebDav server...'); - await PM2Utils.connect(); await PM2Utils.killWebDavServer(); CLIUtils.done(); const message = 'Internxt WebDav server stopped successfully'; @@ -109,7 +109,6 @@ export default class Webdav extends Command { private restartWebDav = async (): Promise => { CLIUtils.doing('Restarting Internxt WebDav server...'); await DriveDatabaseManager.clean(); - await PM2Utils.connect(); const { status } = await PM2Utils.webdavServerStatus(); if (status === 'online') { await PM2Utils.killWebDavServer(); @@ -120,14 +119,13 @@ export default class Webdav extends Command { return message; } else { CLIUtils.done(); - const message = 'Internxt WebDav server is not running, cannot restart'; - CLIUtils.error(this.log.bind(this), message); + const message = 'Internxt WebDav server is not running, it wont be restarted'; + CLIUtils.warning(this.log.bind(this), message); return message; } }; private webDAVStatus = async (): Promise => { - await PM2Utils.connect(); const { status } = await PM2Utils.webdavServerStatus(); const message = `Internxt WebDAV server status: ${status}`; CLIUtils.log(this.log.bind(this), message); diff --git a/src/utils/pm2.utils.ts b/src/utils/pm2.utils.ts index 93a3c17..6becb98 100644 --- a/src/utils/pm2.utils.ts +++ b/src/utils/pm2.utils.ts @@ -26,6 +26,40 @@ export class PM2Utils { }); } + static disconnect() { + pm2.disconnect(); + } + + // TODO: Use this once the issue with PM2 is resolved: https://github.com/Unitech/pm2/issues/4825 + static async clean() { + const list = await this.list(); + if (list.length === 0) { + // There are NOT other active processes. PM2 daemon can be killed. + return new Promise((resolve, reject) => { + pm2.killDaemon((err) => { + if (err) { + reject(err); + } else { + resolve(); + } + }); + }); + } + } + + static list(): Promise { + return new Promise((resolve, reject) => { + pm2.list((err, processes) => { + if (err) { + reject(err); + } else { + // There are active processes. PM2 daemon will not be killed. + resolve(processes); + } + }); + }); + } + static killWebDavServer() { return new Promise((resolve) => { pm2.delete(this.WEBDAV_APP_NAME, () => { diff --git a/yarn.lock b/yarn.lock index 0a95d53..ae6ee07 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4717,7 +4717,7 @@ glob@^11.0.0: package-json-from-dist "^1.0.0" path-scurry "^2.0.0" -glob@^7.0.0, glob@^7.1.3, glob@^7.1.4: +glob@^7.1.3, glob@^7.1.4: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -5044,11 +5044,6 @@ internal-slot@^1.0.7: hasown "^2.0.0" side-channel "^1.0.4" -interpret@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== - ip-address@^9.0.5: version "9.0.5" resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" @@ -6725,13 +6720,6 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== - dependencies: - resolve "^1.1.6" - reflect-metadata@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.2.2.tgz#400c845b6cba87a21f2c65c4aeb158f4fa4d9c5b" @@ -6796,7 +6784,7 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve@^1.1.6, resolve@^1.22.1: +resolve@^1.22.1: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -7097,28 +7085,11 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shelljs@^0.8.5: - version "0.8.5" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" - integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - shimmer@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.2.1.tgz#610859f7de327b587efebf501fb43117f9aff337" integrity sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw== -shx@^0.3.4: - version "0.3.4" - resolved "https://registry.yarnpkg.com/shx/-/shx-0.3.4.tgz#74289230b4b663979167f94e1935901406e40f02" - integrity sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g== - dependencies: - minimist "^1.2.3" - shelljs "^0.8.5" - side-channel@^1.0.4, side-channel@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2"