doc and other commands

This commit is contained in:
Gabriel Pastori
2023-11-19 16:31:24 -03:00
parent f28fbfcea0
commit c66cd1ad7a
14 changed files with 289 additions and 77 deletions

18
lib/api/changeVersion.js Normal file
View File

@@ -0,0 +1,18 @@
const verifyEvolutionInstallation = require('../utils/verifyEvolutionInstallation.js');
const revertToVersion = require('../utils/revertToVersion.js');
module.exports = async (argv) => {
const { v } = argv || {}
if (!v) throw new Error('❌ Please specify a version to revert to. Example: evolution-manager api revert --v=1.5.0')
const isEvolutionInstalled = verifyEvolutionInstallation();
if (!isEvolutionInstalled) return;
console.log(`🔃 Reverting to Evolution-Api v${v}...`);
await revertToVersion(v);
console.log(`🔃 Reverted to Evolution-Api v${v} successfully`);
console.log('\n🔁 Please restart the process to use the reverted version\n')
};

View File

@@ -1,5 +1,10 @@
const functions = {
i: require('./setup.js'),
install: require('./setup.js'),
setup: require('./setup.js'),
uninstall: require('./uninstall.js'),
cv: require('./changeVersion.js'),
changeVersion: require('./changeVersion.js'),
}
module.exports = async (argv) => {

View File

@@ -1,16 +1,15 @@
const build = require('../utils/build.js');
const fs = require('fs-extra');
const path = require('path');
const verifyEvolutionInstallation = require('../utils/verifyEvolutionInstallation.js');
module.exports = async () => {
const isEvolutionInstalled = verifyEvolutionInstallation();
if (!isEvolutionInstalled) return;
console.log('👍 Evolution-Api installation found');
await build({ VITE_BASE_URL: '/manager/' });
// copy dist folder to evolution-api/Extras/evolution-manager
console.time('📦 Copy dist folder to evolution-api/Extras/evolution-manager');
console.time('📦 Copy dist folder to /Extras/evolution-manager');
const distFolder = path.join(__dirname, '..', '..', 'dist');
const extrasFolder = path.join(process.cwd(), 'Extras');
@@ -19,47 +18,18 @@ module.exports = async () => {
if (!fs.existsSync(evolutionManagerFolder)) fs.mkdirSync(evolutionManagerFolder);
fs.copySync(distFolder, evolutionManagerFolder);
console.timeEnd('📦 Copy dist folder to evolution-api/Extras/evolution-manager');
console.timeEnd('📦 Copy dist folder to /Extras/evolution-manager');
// Apply diff git patch
console.time('↘️ Apply diff git patch');
console.time('📥 Apply diff git patch');
const patchPath = path.join(__dirname, './view.router.ts.patch');
const apiFile = path.join(process.cwd(), 'src', 'whatsapp', 'routers', 'view.router.ts');
// copy/replace file with patch
fs.copySync(patchPath, apiFile);
console.timeEnd('↘️ Apply diff git patch');
console.timeEnd('📥 Apply diff git patch');
console.log('\n 🎉 Evolution-Api Manager installed successfully! 🎉');
console.log('👉 Restart your Evolution-Api server to apply changes 👈')
};
function verifyEvolutionInstallation(version = "1.5.0") {
// load package.json current context
const packageJsonPath = path.join(process.cwd(), 'package.json');
if (!fs.existsSync(packageJsonPath)) {
console.error("🚨 package.json not found. Certify you are in the root of the Evolution-Api installation")
return false
}
var packageJson = fs.readFileSync(packageJsonPath, 'utf8');
packageJson = JSON.parse(packageJson);
// check if evolution is installed
if (packageJson.name !== "evolution-api") {
console.error("🚨 This is not a Evolution-API installation. Certify you are in the root of the Evolution-Api installation")
return false
}
// verify if version is same or higher
if (version) {
const semver = require('semver');
if (!semver.gte(packageJson.version, version)) {
console.error(`🚨 Evolution-Api version ${version} or higher is required. Please update your Evolution-Api installation`)
return false
}
}
return true
}
console.log('\n🎉 Evolution-Api Manager installed successfully! 🎉');
console.log('🔁 Restart your Evolution-Api server to apply changes 🔁')
};

41
lib/api/uninstall.js Normal file
View File

@@ -0,0 +1,41 @@
const fs = require('fs-extra');
const path = require('path');
const { exec } = require('child_process');
const verifyEvolutionInstallation = require('../utils/verifyEvolutionInstallation.js');
const revertToVersion = require('../utils/revertToVersion.js');
module.exports = async () => {
const isEvolutionInstalled = verifyEvolutionInstallation();
if (!isEvolutionInstalled) return;
// Verify manager instalation
const extrasFolder = path.join(process.cwd(), 'Extras');
const evolutionManagerIndex = path.join(extrasFolder, 'evolution-manager/index.html');
if (!fs.existsSync(evolutionManagerIndex)) throw new Error('❌ Evolution Manager installation not found. Please install it first');
const apiVersion = isEvolutionInstalled.version;
// git pull force tag version
console.log(`🔃 Reverting to Evolution-Api v${apiVersion}...`);
await discardChanges();
await revertToVersion(apiVersion);
console.log(`🔃 Reverted to Evolution-Api v${apiVersion} successfully`);
console.log('\n🔁 Please restart the process to use the reverted version\n')
};
function discardChanges() {
return new Promise((resolve) => {
exec(`git clean -f -d -q && git checkout .`, (err) => {
if (err) {
console.error(err)
return resolve(false)
}
resolve(true)
})
})
}

View File

@@ -1,31 +1,34 @@
module.exports = () => {
// Welcome message
console.log(`👋 Welcome to evolution-manager CLI!`);
console.log(`👋 Welcome to the evolution-manager CLI! Explore the power of managing your server and API with ease.`);
// Help message
console.log(`📋 Available commands:`);
console.log(`📘 Here's what you can do with evolution-manager CLI:`);
// Server commands
console.log(`\nServer:`);
console.log(` help`);
console.log(` server`);
console.log(` - start [--port=9615]`);
console.log(` - build`);
console.log(`\n🖥️ Server Commands:`);
console.log(` help - Get help and command summaries`);
console.log(` server - Manage your server`);
console.log(` - start [--port=9615] - Start the server on a specific port`);
console.log(` - build - Build the server environment`);
// PM2 commands
console.log(`\nPM2:`);
console.log(` pm2`);
console.log(` - setup`);
console.log(` - start`);
console.log(` - stop`);
console.log(` - restart`);
console.log(` - delete`);
console.log(`\n🔄 PM2 Management:`);
console.log(` pm2 - Control your PM2 processes`);
console.log(` - setup - Set up a PM2 process`);
console.log(` - start - Start a PM2 process`);
console.log(` - stop - Stop a PM2 process`);
console.log(` - restart - Restart a PM2 process`);
console.log(` - delete - Delete a PM2 process`);
// API commands
console.log(`\nAPI:`);
console.log(` api`);
console.log(` - setup (Install the manager inside the Evolution Manager in path /manager)`);
console.log(`\n🔗 API Interaction (Run these inside the Evolution API folder):`);
console.log(` api - Manage your Evolution API`);
console.log(` - setup - Install the manager at /manager in the Evolution API`);
console.log(` - uninstall - Uninstall the manager from the Evolution API`);
console.log(` - changeVersion --v=1.5.0 - Change to a specific version of the Evolution API`);
// Spacing
console.log(`\n`);
// Documentation link and disclaimer
console.log(`\n📚 For complete documentation, visit: https://github.com/gabrielpastori1/evolution-manager`);
console.log(`\n Disclaimer: This evolution-manager CLI project is independent and not affiliated with the evolution-api project.`);
};

View File

@@ -4,25 +4,51 @@ const path = require('path')
module.exports = (envs = {}) => {
return new Promise((resolve, reject) => {
console.log('📦 Build start')
console.time('📦 Build complete')
const distFolder = path.join(__dirname, '..', '..', 'dist')
if (fs.existsSync(distFolder)) {
console.time('📦 Remove dist folder')
fs.rmSync(distFolder, { recursive: true, force: true })
console.timeEnd('📦 Remove dist folder')
}
// pass envs to build
exec(`npm run build`, { env: envs, cwd: path.join(__dirname, '..', '..') }, (err, stdout) => {
if (err) {
console.error(err)
reject(err)
return
verifyViteInstallation().then(() => {
console.log('📦 Build start')
console.time('📦 Build complete')
const distFolder = path.join(__dirname, '..', '..', 'dist')
if (fs.existsSync(distFolder)) {
console.time('📦 Remove dist folder')
fs.rmSync(distFolder, { recursive: true, force: true })
console.timeEnd('📦 Remove dist folder')
}
console.log(stdout)
console.timeEnd('📦 Build complete')
resolve()
// pass envs to build
exec(`npm run build`, { env: envs, cwd: path.join(__dirname, '..', '..') }, (err, stdout) => {
if (err) {
console.error(err)
reject(err)
return
}
console.log(stdout)
console.timeEnd('📦 Build complete')
resolve()
})
})
}).catch(() => {
return
})
}
const verifyViteInstallation = () => {
return new Promise((resolve, reject) => {
exec(`vite --v`, (err) => {
if (!err) return resolve()
console.log('🚨 Vite not installed, trying to install it')
exec(`npm install -g vite`, (err) => {
if (err) {
console.log('🚨 Vite installation failed')
reject(err)
return
}
console.log('🚨 Vite installed')
console.log('🔁 Run the command again')
reject()
})
})
})
}

View File

@@ -0,0 +1,14 @@
const { exec } = require('child_process')
module.exports = (version) => {
return new Promise((resolve) => {
exec(`git fetch --all && git reset --hard ${version}`, (err, stdout) => {
if (err) {
console.error(err)
return resolve(false)
}
console.log(stdout)
resolve(true)
})
})
}

View File

@@ -0,0 +1,34 @@
const fs = require('fs');
const path = require('path');
module.exports = (version = "1.5.0") => {
// load package.json current context
const packageJsonPath = path.join(process.cwd(), 'package.json');
if (!fs.existsSync(packageJsonPath)) {
console.error("🚨 package.json not found. Certify you are in the root of the Evolution-Api installation")
return false
}
var packageJson = fs.readFileSync(packageJsonPath, 'utf8');
packageJson = JSON.parse(packageJson);
// check if evolution is installed
if (packageJson.name !== "evolution-api") {
console.error("🚨 This is not a Evolution-API installation. Certify you are in the root of the Evolution-Api installation")
return false
}
// verify if version is same or higher
if (version) {
const semver = require('semver');
if (!semver.gte(packageJson.version, version)) {
console.error(`🚨 Evolution-Api version ${version} or higher is required. Please update your Evolution-Api installation`)
return false
}
}
console.log(`👍 Evolution-Api ${packageJson.version} installation found`);
return {
...packageJson,
}
}

View File

@@ -29,7 +29,10 @@ function installPM2() {
return resolve(false)
}
console.log(stdout)
resolve(true)
console.log('\n\n🔁 Please restart the process to use PM2')
resolve(false)
})
})
}