smoonb 0.0.6 → 0.0.7

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 (25) hide show
  1. package/.smoonbrc +7 -6
  2. package/.smoonbrc.example +2 -1
  3. package/README.md +30 -25
  4. package/backups/backup-2025-10-17T19-52-20-211Z/auth-config.json +7 -0
  5. package/backups/backup-2025-10-17T19-52-20-211Z/backup-manifest.json +19 -0
  6. package/backups/backup-2025-10-17T19-52-20-211Z/database-2025-10-17T19-52-20-215Z.dump +0 -0
  7. package/backups/backup-2025-10-17T19-52-20-211Z/functions/README.md +4 -0
  8. package/backups/backup-2025-10-17T19-52-20-211Z/realtime-config.json +7 -0
  9. package/backups/backup-2025-10-17T19-52-20-211Z/storage/storage-config.json +6 -0
  10. package/backups/backup-2025-10-17T20-38-13-188Z/auth-config.json +7 -0
  11. package/backups/backup-2025-10-17T20-38-13-188Z/backup-manifest.json +19 -0
  12. package/backups/backup-2025-10-17T20-38-13-188Z/database-2025-10-17T20-38-13-194Z.dump +0 -0
  13. package/backups/backup-2025-10-17T20-38-13-188Z/functions/README.md +4 -0
  14. package/backups/backup-2025-10-17T20-38-13-188Z/realtime-config.json +7 -0
  15. package/backups/backup-2025-10-17T20-38-13-188Z/storage/storage-config.json +6 -0
  16. package/bin/smoonb.js +10 -10
  17. package/package.json +1 -1
  18. package/src/commands/backup.js +16 -6
  19. package/src/commands/config.js +78 -77
  20. package/src/utils/supabase.js +447 -387
  21. /package/{backup → backups}/backup-2025-10-17T19-18-58-539Z/auth-config.json +0 -0
  22. /package/{backup → backups}/backup-2025-10-17T19-18-58-539Z/backup-manifest.json +0 -0
  23. /package/{backup → backups}/backup-2025-10-17T19-18-58-539Z/functions/README.md +0 -0
  24. /package/{backup → backups}/backup-2025-10-17T19-18-58-539Z/realtime-config.json +0 -0
  25. /package/{backup → backups}/backup-2025-10-17T19-18-58-539Z/storage/storage-config.json +0 -0
package/.smoonbrc CHANGED
@@ -1,17 +1,18 @@
1
1
  {
2
2
  "supabase": {
3
- "projectId": "your-project-id-here",
4
- "url": "https://your-project.supabase.co",
5
- "serviceKey": "your-service-key-here",
6
- "anonKey": "your-anon-key-here",
7
- "databaseUrl": "postgresql://postgres:[password]@db.your-project.supabase.co:5432/postgres"
3
+ "projectId": "xvfgdgdfgdfgdfgdfg",
4
+ "url": "https://dfgdfgdfgdfgdfgdfg.supabase.co",
5
+ "serviceKey": "sdfsdfsdfsdfsdfgyjyuiuyjyujuyjyujuyjyujuy",
6
+ "anonKey": "uyjyujyujyhmnbmbghjghjghghjghjghjghj",
7
+ "databaseUrl": "postgresql://postgres:ghjghjghjghjghjghjghj@db.sdfsdfsdfsdfsdfsdfsdfsdf.supabase.co:5432/postgres"
8
8
  },
9
9
  "backup": {
10
10
  "includeFunctions": true,
11
11
  "includeStorage": true,
12
12
  "includeAuth": true,
13
13
  "includeRealtime": true,
14
- "outputDir": "./backups"
14
+ "outputDir": "./backups",
15
+ "pgDumpPath": "C:\\Program Files\\PostgreSQL\\17\\bin\\pg_dump.exe"
15
16
  },
16
17
  "restore": {
17
18
  "cleanRestore": false,
package/.smoonbrc.example CHANGED
@@ -11,7 +11,8 @@
11
11
  "includeStorage": true,
12
12
  "includeAuth": true,
13
13
  "includeRealtime": true,
14
- "outputDir": "./backups"
14
+ "outputDir": "./backups",
15
+ "pgDumpPath": "C:\\Program Files\\PostgreSQL\\17\\bin\\pg_dump.exe"
15
16
  },
16
17
  "restore": {
17
18
  "cleanRestore": false,
package/README.md CHANGED
@@ -40,20 +40,20 @@ smoonb é a **primeira ferramenta** que faz backup **COMPLETO** do Supabase:
40
40
 
41
41
  ```bash
42
42
  # Backup completo do projeto
43
- smoonb backup
43
+ npx smoonb backup
44
44
 
45
45
  # Restauração completa
46
- smoonb restore
46
+ npx smoonb restore
47
47
 
48
48
  # Gerenciamento de secrets
49
- smoonb secrets export
50
- smoonb secrets import
49
+ npx smoonb secrets export
50
+ npx smoonb secrets import
51
51
 
52
52
  # Deploy de Edge Functions
53
- smoonb functions push
53
+ npx smoonb functions push
54
54
 
55
55
  # Checklist pós-restore
56
- smoonb check
56
+ npx smoonb check
57
57
  ```
58
58
 
59
59
  ## 📊 Comparação: smoonb vs Outras Ferramentas
@@ -72,34 +72,39 @@ smoonb check
72
72
  ## 🛠️ Instalação
73
73
 
74
74
  ```bash
75
- # Instalação global
76
- npm install -g smoonb
75
+ # Instalar localmente no projeto
76
+ npm install smoonb
77
77
 
78
- # Ou uso local
79
- npx smoonb --help
78
+ # Usar com npx
79
+ npx smoonb --version
80
+
81
+ # Ou adicionar script no package.json
82
+ npm pkg set scripts.backup="npx smoonb backup"
83
+ npm run backup
80
84
  ```
81
85
 
82
86
  ## ⚡ Quick Start
83
87
 
84
88
  ```bash
85
- # 1. Configure suas credenciais Supabase
86
- smoonb config
89
+ # 1. Instale o smoonb no projeto
90
+ npm install smoonb
87
91
 
88
- # 2. Faça backup completo
89
- smoonb backup --project-id your-project-id
92
+ # 2. Configure suas credenciais Supabase
93
+ npx npx smoonb config --init
90
94
 
91
- # 3. Restaure em outro projeto
92
- smoonb restore --project-id target-project-id
95
+ # 3. Edite o arquivo .smoonbrc com suas credenciais
96
+ # 4. Execute o backup completo
97
+ npx npx smoonb backup
93
98
 
94
- # 4. Verifique a restauração
95
- smoonb check --project-id target-project-id
99
+ # 5. Restaure em outro projeto
100
+ npx npx smoonb restore --backup-dir ./backups/backup-2024-01-15T10-30-00Z
96
101
  ```
97
102
 
98
103
  ## 📋 Exemplos de Uso
99
104
 
100
105
  ### Backup Completo
101
106
  ```bash
102
- smoonb backup \
107
+ npx smoonb backup \
103
108
  --project-id abc123def456 \
104
109
  --output ./backup-$(date +%Y%m%d) \
105
110
  --include-functions \
@@ -109,7 +114,7 @@ smoonb backup \
109
114
 
110
115
  ### Restauração com Verificação
111
116
  ```bash
112
- smoonb restore \
117
+ npx smoonb restore \
113
118
  --project-id xyz789uvw012 \
114
119
  --backup-dir ./backup-20241201 \
115
120
  --verify \
@@ -119,19 +124,19 @@ smoonb restore \
119
124
  ### Migração Entre Projetos
120
125
  ```bash
121
126
  # 1. Backup do projeto origem
122
- smoonb backup --project-id source-project
127
+ npx smoonb backup --project-id source-project
123
128
 
124
129
  # 2. Export secrets (opcional)
125
- smoonb secrets export --project-id source-project
130
+ npx smoonb secrets export --project-id source-project
126
131
 
127
132
  # 3. Restore no projeto destino
128
- smoonb restore --project-id target-project
133
+ npx smoonb restore --project-id target-project
129
134
 
130
135
  # 4. Import secrets (opcional)
131
- smoonb secrets import --project-id target-project
136
+ npx smoonb secrets import --project-id target-project
132
137
 
133
138
  # 5. Verificação final
134
- smoonb check --project-id target-project
139
+ npx smoonb check --project-id target-project
135
140
  ```
136
141
 
137
142
  ## 🔧 Configuração
@@ -0,0 +1,7 @@
1
+ {
2
+ "timestamp": "2025-10-17T19:52:20.446Z",
3
+ "projectId": "xvfgdgdfgdfgdfgdfg",
4
+ "providers": [],
5
+ "policies": [],
6
+ "settings": {}
7
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "timestamp": "2025-10-17T19:52:20.452Z",
3
+ "projectId": "xvfgdgdfgdfgdfgdfg",
4
+ "version": "0.1.0-beta",
5
+ "components": {
6
+ "database": false,
7
+ "functions": true,
8
+ "auth": true,
9
+ "storage": true,
10
+ "realtime": true
11
+ },
12
+ "files": {
13
+ "database": null,
14
+ "functions": "functions/",
15
+ "auth": "auth-config.json",
16
+ "storage": "storage/",
17
+ "realtime": "realtime-config.json"
18
+ }
19
+ }
@@ -0,0 +1,4 @@
1
+ # Edge Functions Backup
2
+
3
+ Nenhuma Edge Function local foi encontrada.
4
+ Use o Supabase CLI para fazer backup das functions remotas.
@@ -0,0 +1,7 @@
1
+ {
2
+ "timestamp": "2025-10-17T19:52:20.450Z",
3
+ "projectId": "xvfgdgdfgdfgdfgdfg",
4
+ "enabled": false,
5
+ "channels": [],
6
+ "settings": {}
7
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "timestamp": "2025-10-17T19:52:20.449Z",
3
+ "projectId": "xvfgdgdfgdfgdfgdfg",
4
+ "buckets": [],
5
+ "objects": []
6
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "timestamp": "2025-10-17T20:38:13.574Z",
3
+ "projectId": "xvfgdgdfgdfgdfgdfg",
4
+ "providers": [],
5
+ "policies": [],
6
+ "settings": {}
7
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "timestamp": "2025-10-17T20:38:13.584Z",
3
+ "projectId": "xvfgdgdfgdfgdfgdfg",
4
+ "version": "0.1.0-beta",
5
+ "components": {
6
+ "database": false,
7
+ "functions": true,
8
+ "auth": true,
9
+ "storage": true,
10
+ "realtime": true
11
+ },
12
+ "files": {
13
+ "database": null,
14
+ "functions": "functions/",
15
+ "auth": "auth-config.json",
16
+ "storage": "storage/",
17
+ "realtime": "realtime-config.json"
18
+ }
19
+ }
@@ -0,0 +1,4 @@
1
+ # Edge Functions Backup
2
+
3
+ Nenhuma Edge Function local foi encontrada.
4
+ Use o Supabase CLI para fazer backup das functions remotas.
@@ -0,0 +1,7 @@
1
+ {
2
+ "timestamp": "2025-10-17T20:38:13.582Z",
3
+ "projectId": "xvfgdgdfgdfgdfgdfg",
4
+ "enabled": false,
5
+ "channels": [],
6
+ "settings": {}
7
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "timestamp": "2025-10-17T20:38:13.578Z",
3
+ "projectId": "xvfgdgdfgdfgdfgdfg",
4
+ "buckets": [],
5
+ "objects": []
6
+ }
package/bin/smoonb.js CHANGED
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env node
1
+ #!/usr/bin/env node
2
2
 
3
3
  /**
4
4
  * smoonb - Complete Supabase backup and migration tool
@@ -31,10 +31,10 @@ program
31
31
  })
32
32
  .addHelpText('after', () => {
33
33
  return chalk.cyan.bold(`
34
- 📋 CONFIGURAÇÃO AUTOMÁTICA:
35
- smoonb config --init # Cria ~/.smoonbrc com projectId, URLs, etc.
36
- # Edite o arquivo com suas credenciais Supabase
37
- smoonb backup # Funciona sem --project-id!
34
+ 📋 CONFIGURAÇÃO AUTOMÁTICA:
35
+ npx smoonb config --init # Cria .smoonbrc com projectId, URLs, etc.
36
+ # Edite o arquivo com suas credenciais Supabase
37
+ npx smoonb backup # Funciona sem --project-id!
38
38
 
39
39
  📝 EXEMPLO DE CONFIGURAÇÃO (.smoonbrc):
40
40
  {
@@ -58,10 +58,10 @@ program
58
58
  }
59
59
  }
60
60
 
61
- 🔧 COMO CONFIGURAR:
62
- 1. smoonb config --init
63
- 2. Edite ~/.smoonbrc com suas credenciais
64
- 3. smoonb backup (funciona automaticamente!)
61
+ 🔧 COMO CONFIGURAR:
62
+ 1. npx smoonb config --init
63
+ 2. Edite .smoonbrc com suas credenciais
64
+ 3. npx smoonb backup (funciona automaticamente!)
65
65
  `);
66
66
  });
67
67
 
@@ -70,7 +70,7 @@ program
70
70
  .command('backup')
71
71
  .description('Fazer backup completo do projeto Supabase')
72
72
  .option('-p, --project-id <id>', 'ID do projeto Supabase')
73
- .option('-o, --output <dir>', 'Diretório de saída do backup', './backup')
73
+ .option('-o, --output <dir>', 'Diretório de saída do backup', './backups')
74
74
  .option('--include-functions', 'Incluir Edge Functions no backup', true)
75
75
  .option('--include-storage', 'Incluir Storage Objects no backup', true)
76
76
  .option('--include-auth', 'Incluir Auth Settings no backup', true)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "smoonb",
3
- "version": "0.0.6",
3
+ "version": "0.0.7",
4
4
  "description": "Complete Supabase backup and migration tool - EXPERIMENTAL VERSION - USE AT YOUR OWN RISK",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -8,7 +8,7 @@ const { execSync } = require('child_process');
8
8
  const fs = require('fs');
9
9
  const path = require('path');
10
10
  const { createClient } = require('@supabase/supabase-js');
11
- const { getProjectId, getDatabaseUrl } = require('../utils/supabase');
11
+ const { getProjectId, getDatabaseUrl, findPgDumpPath, loadConfig } = require('../utils/supabase');
12
12
 
13
13
  /**
14
14
  * Backup completo do projeto Supabase
@@ -29,18 +29,23 @@ async function backupCommand(options) {
29
29
  if (!projectId) {
30
30
  console.error(chalk.red.bold('❌ Erro: Project ID não encontrado'));
31
31
  console.log(chalk.yellow('💡 Opções:'));
32
- console.log(chalk.gray(' 1. Use: smoonb backup --project-id <seu-project-id>'));
33
- console.log(chalk.gray(' 2. Configure: smoonb config --init'));
32
+ console.log(chalk.gray(' 1. Use: npx smoonb backup --project-id <seu-project-id>'));
33
+ console.log(chalk.gray(' 2. Configure: npx smoonb config --init'));
34
34
  console.log(chalk.gray(' 3. Ou defina SUPABASE_PROJECT_ID no ambiente'));
35
- console.log(chalk.gray(' 4. Ou edite ~/.smoonbrc e configure o projectId'));
35
+ console.log(chalk.gray(' 4. Ou edite .smoonbrc e configure o projectId'));
36
+ console.log(chalk.gray(' 5. Substitua "your-project-id-here" por seu ID real'));
36
37
  process.exit(1);
37
38
  }
38
39
 
39
40
  console.log(chalk.blue('🆔 Project ID:'), projectId);
40
41
 
42
+ // Obter diretório de backup da configuração ou usar opção
43
+ const config = loadConfig();
44
+ const outputDir = config?.backup?.outputDir || options.output;
45
+
41
46
  // Criar diretório de backup com timestamp
42
47
  const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
43
- const backupDir = path.resolve(options.output, `backup-${timestamp}`);
48
+ const backupDir = path.resolve(outputDir, `backup-${timestamp}`);
44
49
  await fs.promises.mkdir(backupDir, { recursive: true });
45
50
 
46
51
  console.log(chalk.green('✅ Diretório de backup criado:'), backupDir);
@@ -145,6 +150,10 @@ async function backupDatabase(projectId, outputDir) {
145
150
  return null;
146
151
  }
147
152
 
153
+ // Encontrar caminho do pg_dump (detecção automática no Windows)
154
+ const pgDumpPath = findPgDumpPath();
155
+ console.log(chalk.gray(` - Usando pg_dump: ${pgDumpPath}`));
156
+
148
157
  const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
149
158
  const filename = `database-${timestamp}.dump`;
150
159
  const filepath = path.join(outputDir, filename);
@@ -152,7 +161,7 @@ async function backupDatabase(projectId, outputDir) {
152
161
  console.log(chalk.gray(' - Executando pg_dump com formato Custom (-Fc)...'));
153
162
 
154
163
  // Usar formato Custom (-Fc) para restauração mais segura
155
- const command = `pg_dump "${dbUrl}" -Fc -f "${filepath}"`;
164
+ const command = `"${pgDumpPath}" "${dbUrl}" -Fc -f "${filepath}"`;
156
165
  execSync(command, { stdio: 'pipe' });
157
166
 
158
167
  return filepath;
@@ -161,6 +170,7 @@ async function backupDatabase(projectId, outputDir) {
161
170
  console.log(chalk.gray(' - Verifique se DATABASE_URL está correta'));
162
171
  console.log(chalk.gray(' - Verifique se pg_dump está instalado'));
163
172
  console.log(chalk.gray(' - Verifique se as credenciais estão corretas'));
173
+ console.log(chalk.gray(' - Configure pgDumpPath no .smoonbrc se necessário'));
164
174
  return null;
165
175
  }
166
176
  }
@@ -1,77 +1,78 @@
1
- /**
2
- * Comando de configuração do smoonb
3
- */
4
-
5
- const chalk = require('chalk');
6
- const fs = require('fs').promises;
7
- const path = require('path');
8
- const os = require('os');
9
-
10
- async function configCommand(options) {
11
- console.log(chalk.red.bold('🚀 smoonb - EXPERIMENTAL VERSION'));
12
- console.log(chalk.red.bold('⚠️ VERSÃO EXPERIMENTAL - NUNCA TESTADA EM PRODUÇÃO!'));
13
- console.log(chalk.red.bold('🚨 USE POR SUA CONTA E RISCO - Pode causar perda de dados!'));
14
- console.log(chalk.red.bold('❌ NÃO NOS RESPONSABILIZAMOS por qualquer perda de dados!\n'));
15
-
16
- console.log(chalk.cyan.bold('⚙️ Configuração do smoonb...\n'));
17
-
18
- try {
19
- const configPath = path.join(os.homedir(), '.smoonbrc');
20
-
21
- if (options.init) {
22
- // Inicializar configuração
23
- const defaultConfig = {
24
- supabase: {
25
- projectId: '',
26
- url: '',
27
- serviceKey: '',
28
- anonKey: '',
29
- databaseUrl: ''
30
- },
31
- backup: {
32
- includeFunctions: true,
33
- includeStorage: true,
34
- includeAuth: true,
35
- includeRealtime: true,
36
- outputDir: './backups'
37
- },
38
- restore: {
39
- cleanRestore: false,
40
- verifyAfterRestore: true
41
- }
42
- };
43
-
44
- await fs.writeFile(configPath, JSON.stringify(defaultConfig, null, 2));
45
- console.log(chalk.green('✅ Arquivo de configuração criado:'), configPath);
46
- console.log(chalk.yellow('💡 Edite o arquivo para configurar suas credenciais Supabase'));
47
-
48
- } else if (options.show) {
49
- // Mostrar configuração atual
50
- try {
51
- const configContent = await fs.readFile(configPath, 'utf8');
52
- const config = JSON.parse(configContent);
53
-
54
- console.log(chalk.green('📋 Configuração atual:'));
55
- console.log(chalk.blue('📁 Arquivo:'), configPath);
56
- console.log(chalk.gray(JSON.stringify(config, null, 2)));
57
-
58
- } catch (error) {
59
- console.log(chalk.yellow('⚠️ Arquivo de configuração não encontrado'));
60
- console.log(chalk.yellow('💡 Use'), chalk.cyan('smoonb config --init'), chalk.yellow('para criar a configuração'));
61
- }
62
-
63
- } else {
64
- // Mostrar ajuda
65
- console.log(chalk.yellow('💡 Opções disponíveis:'));
66
- console.log(chalk.cyan(' --init'), chalk.gray(' Inicializar arquivo de configuração'));
67
- console.log(chalk.cyan(' --show'), chalk.gray(' Mostrar configuração atual'));
68
- console.log(chalk.blue('\n📁 Arquivo de configuração:'), configPath);
69
- }
70
-
71
- } catch (error) {
72
- console.error(chalk.red.bold('❌ Erro durante a configuração:'), error.message);
73
- process.exit(1);
74
- }
75
- }
76
-
77
- module.exports = configCommand;
1
+ /**
2
+ * Comando de configuração do smoonb
3
+ */
4
+
5
+ const chalk = require('chalk');
6
+ const fs = require('fs').promises;
7
+ const path = require('path');
8
+ const os = require('os');
9
+
10
+ async function configCommand(options) {
11
+ console.log(chalk.red.bold('🚀 smoonb - EXPERIMENTAL VERSION'));
12
+ console.log(chalk.red.bold('⚠️ VERSÃO EXPERIMENTAL - NUNCA TESTADA EM PRODUÇÃO!'));
13
+ console.log(chalk.red.bold('🚨 USE POR SUA CONTA E RISCO - Pode causar perda de dados!'));
14
+ console.log(chalk.red.bold('❌ NÃO NOS RESPONSABILIZAMOS por qualquer perda de dados!\n'));
15
+
16
+ console.log(chalk.cyan.bold('⚙️ Configuração do smoonb...\n'));
17
+
18
+ try {
19
+ const configPath = path.join(process.cwd(), '.smoonbrc');
20
+
21
+ if (options.init) {
22
+ // Inicializar configuração
23
+ const defaultConfig = {
24
+ supabase: {
25
+ projectId: '',
26
+ url: '',
27
+ serviceKey: '',
28
+ anonKey: '',
29
+ databaseUrl: ''
30
+ },
31
+ backup: {
32
+ includeFunctions: true,
33
+ includeStorage: true,
34
+ includeAuth: true,
35
+ includeRealtime: true,
36
+ outputDir: './backups',
37
+ pgDumpPath: 'C:\\Program Files\\PostgreSQL\\17\\bin\\pg_dump.exe'
38
+ },
39
+ restore: {
40
+ cleanRestore: false,
41
+ verifyAfterRestore: true
42
+ }
43
+ };
44
+
45
+ await fs.writeFile(configPath, JSON.stringify(defaultConfig, null, 2));
46
+ console.log(chalk.green(' Arquivo de configuração criado:'), configPath);
47
+ console.log(chalk.yellow('💡 Edite o arquivo para configurar suas credenciais Supabase'));
48
+
49
+ } else if (options.show) {
50
+ // Mostrar configuração atual
51
+ try {
52
+ const configContent = await fs.readFile(configPath, 'utf8');
53
+ const config = JSON.parse(configContent);
54
+
55
+ console.log(chalk.green('📋 Configuração atual:'));
56
+ console.log(chalk.blue('📁 Arquivo:'), configPath);
57
+ console.log(chalk.gray(JSON.stringify(config, null, 2)));
58
+
59
+ } catch (error) {
60
+ console.log(chalk.yellow('⚠️ Arquivo de configuração não encontrado'));
61
+ console.log(chalk.yellow('💡 Use'), chalk.cyan('smoonb config --init'), chalk.yellow('para criar a configuração'));
62
+ }
63
+
64
+ } else {
65
+ // Mostrar ajuda
66
+ console.log(chalk.yellow('💡 Opções disponíveis:'));
67
+ console.log(chalk.cyan(' --init'), chalk.gray(' Inicializar arquivo de configuração'));
68
+ console.log(chalk.cyan(' --show'), chalk.gray(' Mostrar configuração atual'));
69
+ console.log(chalk.blue('\n📁 Arquivo de configuração:'), configPath);
70
+ }
71
+
72
+ } catch (error) {
73
+ console.error(chalk.red.bold('❌ Erro durante a configuração:'), error.message);
74
+ process.exit(1);
75
+ }
76
+ }
77
+
78
+ module.exports = configCommand;