mirror of
https://github.com/EvolutionAPI/evolution-manager.git
synced 2025-07-14 09:51:25 -06:00
146 lines
4.2 KiB
JavaScript
146 lines
4.2 KiB
JavaScript
const verifyEvolutionInstallation = require('../../utils/verifyEvolutionInstallation.js');
|
|
const cliProgress = require('cli-progress');
|
|
const inquirer = require('inquirer');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
const colors = require('ansi-colors');
|
|
const mongoose = require('mongoose');
|
|
|
|
|
|
const migratorsFunctions = {
|
|
INSTANCE: require('./migrators/instance.js'),
|
|
CONTACTS: require('./migrators/contacts.js'),
|
|
NEW_MESSAGE: require('./migrators/newMessage.js'),
|
|
MESSAGE_UPDATE: require('./migrators/messageUpdate.js'),
|
|
CHATS: require('./migrators/chats.js'),
|
|
};
|
|
|
|
|
|
module.exports = async () => {
|
|
const isEvolutionInstalled = verifyEvolutionInstallation();
|
|
if (!isEvolutionInstalled) return;
|
|
|
|
const instancesNames = fs.readdirSync(path.join(process.cwd(), 'instances')).filter((file) => {
|
|
return fs.statSync(path.join(process.cwd(), 'instances', file)).isDirectory();
|
|
});
|
|
|
|
const questions = [
|
|
{
|
|
type: 'input',
|
|
name: 'mongodbUrl',
|
|
message: 'MongoDB url:',
|
|
default: 'mongodb://admin:password@localhost:27017',
|
|
},
|
|
{
|
|
type: 'input',
|
|
name: 'prefix',
|
|
message: 'MongoDB prefix:',
|
|
default: 'evolution',
|
|
},
|
|
{
|
|
type: 'checkbox',
|
|
name: 'saveData',
|
|
message: 'What data do you want to migrate?',
|
|
choices: [
|
|
{
|
|
name: 'Instance',
|
|
value: 'INSTANCE',
|
|
checked: true,
|
|
},
|
|
{
|
|
name: 'New Message',
|
|
value: 'NEW_MESSAGE',
|
|
checked: true,
|
|
},
|
|
{
|
|
name: 'Message Update',
|
|
value: 'MESSAGE_UPDATE',
|
|
checked: true,
|
|
},
|
|
{
|
|
name: 'Contacts',
|
|
value: 'CONTACTS',
|
|
checked: true,
|
|
},
|
|
{
|
|
name: 'Chats',
|
|
value: 'CHATS',
|
|
checked: true,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
type: 'checkbox',
|
|
name: 'selectedInstances',
|
|
message: 'Select instances to migrate:',
|
|
choices: instancesNames.map((instanceName) => {
|
|
return {
|
|
name: instanceName,
|
|
value: instanceName,
|
|
checked: true,
|
|
}
|
|
}),
|
|
}
|
|
];
|
|
|
|
const answers = await inquirer.prompt(questions);
|
|
|
|
// check if there is any data to migrate
|
|
if (answers.saveData.length === 0) {
|
|
console.log('🌱 No data selected to migrate!\n\n');
|
|
process.exit(0);
|
|
}
|
|
if (answers.selectedInstances.length === 0) {
|
|
console.log('🌱 No instances selected to migrate!\n\n');
|
|
process.exit(0);
|
|
}
|
|
|
|
// connect to mongodb
|
|
console.log('\n\n🌱 Connecting to MongoDB...');
|
|
const conn = await mongoose.createConnection(answers.mongodbUrl, {
|
|
dbName: answers.prefix + '-whatsapp-api',
|
|
}).asPromise();
|
|
const connInstance = answers.saveData.includes('INSTANCE') ? await mongoose.createConnection(answers.mongodbUrl, {
|
|
dbName: answers.prefix + '-instances',
|
|
}).asPromise() : null;
|
|
console.log('🌱 Connected to MongoDB!\n\n');
|
|
|
|
const instancesBar = new cliProgress.SingleBar({
|
|
format: 'Instance: ' + colors.blue('{instanceName}') + ' |' + colors.cyan('{bar}') + '| {percentage}% || {value}/{total} Instances',
|
|
}, cliProgress.Presets.shades_classic);
|
|
|
|
instancesBar.start(answers.selectedInstances.length, 0);
|
|
try {
|
|
for (const instanceName of answers.selectedInstances) {
|
|
instancesBar.update({ instanceName });
|
|
|
|
const instanceBars = new cliProgress.MultiBar({
|
|
format: '|' + colors.cyan('{bar}') + '| ' + colors.blue('{process}') + ' | {percentage}% || {value}/{total} Files',
|
|
clearOnComplete: true,
|
|
}, cliProgress.Presets.shades_classic);
|
|
|
|
for (const migration of answers.saveData) {
|
|
await migratorsFunctions[migration](instanceName, answers, instanceBars, conn, connInstance);
|
|
}
|
|
|
|
instanceBars.stop();
|
|
instancesBar.increment();
|
|
}
|
|
} catch (err) {
|
|
instancesBar.stop();
|
|
console.log(err.file);
|
|
console.log(err.err);
|
|
process.exit(1);
|
|
}
|
|
|
|
instancesBar.stop();
|
|
|
|
// disconnect from mongodb
|
|
console.log('\n\n🌱 Disconnecting from MongoDB...');
|
|
await conn.close();
|
|
if (connInstance) await connInstance.close();
|
|
console.log('🌱 Disconnected from MongoDB!\n\n');
|
|
|
|
console.log('🌱 Migration completed!\n\n');
|
|
process.exit(0);
|
|
}; |