herdux-cli 0.7.0 → 0.8.2
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/README.md +62 -12
- package/README.pt-BR.md +62 -12
- package/dist/commands/backup.d.ts.map +1 -1
- package/dist/commands/backup.js +29 -2
- package/dist/commands/backup.js.map +1 -1
- package/dist/commands/cloud.d.ts +3 -0
- package/dist/commands/cloud.d.ts.map +1 -0
- package/dist/commands/cloud.js +322 -0
- package/dist/commands/cloud.js.map +1 -0
- package/dist/commands/restore.d.ts.map +1 -1
- package/dist/commands/restore.js +33 -1
- package/dist/commands/restore.js.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/infra/cloud/cloud-credential.d.ts +4 -0
- package/dist/infra/cloud/cloud-credential.d.ts.map +1 -0
- package/dist/infra/cloud/cloud-credential.js +16 -0
- package/dist/infra/cloud/cloud-credential.js.map +1 -0
- package/dist/infra/cloud/s3.service.d.ts +23 -0
- package/dist/infra/cloud/s3.service.d.ts.map +1 -0
- package/dist/infra/cloud/s3.service.js +114 -0
- package/dist/infra/cloud/s3.service.js.map +1 -0
- package/dist/infra/config/config.service.d.ts +11 -0
- package/dist/infra/config/config.service.d.ts.map +1 -1
- package/dist/infra/config/config.service.js +16 -0
- package/dist/infra/config/config.service.js.map +1 -1
- package/dist/infra/docker/docker.service.d.ts.map +1 -1
- package/dist/infra/docker/docker.service.js.map +1 -1
- package/dist/infra/engines/resolve-connection.d.ts +17 -0
- package/dist/infra/engines/resolve-connection.d.ts.map +1 -1
- package/dist/infra/engines/resolve-connection.js +4 -4
- package/dist/infra/engines/resolve-connection.js.map +1 -1
- package/package.json +3 -1
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
A fast, interactive CLI that removes friction from daily local database workflows, especially when juggling multiple instances and large datasets.
|
|
14
14
|
|
|
15
|
-

|
|
16
16
|

|
|
17
17
|

|
|
18
18
|

|
|
@@ -191,19 +191,23 @@ Aborts immediately if any safety backup fails. No data is dropped without a conf
|
|
|
191
191
|
Creates a timestamped backup in `~/.herdux/backups/` by default.
|
|
192
192
|
|
|
193
193
|
```bash
|
|
194
|
-
herdux backup mydb
|
|
195
|
-
herdux backup mydb --format plain
|
|
196
|
-
herdux backup mydb --drop
|
|
197
|
-
herdux backup mydb --drop --yes
|
|
198
|
-
herdux backup mydb -o ./my-backups
|
|
194
|
+
herdux backup mydb # Engine-native format (.dump for PG, .db for SQLite, .sql for MySQL)
|
|
195
|
+
herdux backup mydb --format plain # Plain SQL (.sql)
|
|
196
|
+
herdux backup mydb --drop # Backup, then prompt to drop
|
|
197
|
+
herdux backup mydb --drop --yes # Backup + drop, no confirmation
|
|
198
|
+
herdux backup mydb -o ./my-backups # Custom output directory
|
|
199
|
+
herdux backup mydb --upload backups/ # Backup and upload to S3 prefix backups/
|
|
200
|
+
herdux backup mydb --upload backups/ --no-keep # Backup, upload, then delete local file
|
|
199
201
|
```
|
|
200
202
|
|
|
201
|
-
| Option | Description
|
|
202
|
-
| --------------------- |
|
|
203
|
-
| `-F, --format <type>` | `custom` (default, engine-native) or `plain` (SQL)
|
|
204
|
-
| `-d, --drop` | Prompt to drop the database after a successful backup
|
|
205
|
-
| `-y, --yes` | Skip drop confirmation (requires `--drop`)
|
|
206
|
-
| `-o, --output <dir>` | Output directory (default: `~/.herdux/backups`)
|
|
203
|
+
| Option | Description |
|
|
204
|
+
| --------------------- | ----------------------------------------------------------------- |
|
|
205
|
+
| `-F, --format <type>` | `custom` (default, engine-native) or `plain` (SQL) |
|
|
206
|
+
| `-d, --drop` | Prompt to drop the database after a successful backup |
|
|
207
|
+
| `-y, --yes` | Skip drop confirmation (requires `--drop`) |
|
|
208
|
+
| `-o, --output <dir>` | Output directory (default: `~/.herdux/backups`) |
|
|
209
|
+
| `--upload [prefix]` | Upload backup to S3 after creation (requires cloud config) |
|
|
210
|
+
| `--no-keep` | Delete local backup after successful upload (requires `--upload`) |
|
|
207
211
|
|
|
208
212
|
---
|
|
209
213
|
|
|
@@ -231,11 +235,13 @@ Inspects the contents of a backup file without connecting to a database. Complet
|
|
|
231
235
|
| Extension | Output |
|
|
232
236
|
| ----------------- | ---------------------------------------------------------------------- |
|
|
233
237
|
| `.dump` | PostgreSQL custom format: full Table of Contents (`pg_restore --list`) |
|
|
238
|
+
| `.tar` | PostgreSQL tar format: full Table of Contents (`pg_restore --list`) |
|
|
234
239
|
| `.sql` | Plain SQL (any engine): CREATE TABLE, VIEW, INDEX, SEQUENCE statements |
|
|
235
240
|
| `.db` / `.sqlite` | SQLite database file: schema (`sqlite3 .schema`) |
|
|
236
241
|
|
|
237
242
|
```bash
|
|
238
243
|
hdx inspect backup.dump # Table of Contents of a PostgreSQL custom dump
|
|
244
|
+
hdx inspect backup.tar # Table of Contents of a PostgreSQL tar dump
|
|
239
245
|
hdx inspect export.sql # CREATE statements extracted from plain SQL
|
|
240
246
|
hdx inspect mydb.db # SQLite schema
|
|
241
247
|
```
|
|
@@ -256,6 +262,50 @@ hdx docker stop pg-dev --remove # Stop and remove the container
|
|
|
256
262
|
|
|
257
263
|
---
|
|
258
264
|
|
|
265
|
+
### `herdux cloud`
|
|
266
|
+
|
|
267
|
+
Manages backup files in S3-compatible cloud storage (AWS S3, Cloudflare R2, MinIO, DigitalOcean Spaces, and others).
|
|
268
|
+
|
|
269
|
+
```bash
|
|
270
|
+
# Configure
|
|
271
|
+
hdx cloud config bucket my-bucket
|
|
272
|
+
hdx cloud config region us-east-1
|
|
273
|
+
hdx cloud config access-key AKIAIO...
|
|
274
|
+
hdx cloud config secret-key wJalrX...
|
|
275
|
+
hdx cloud config endpoint https://account.r2.cloudflarestorage.com # optional, for non-AWS providers
|
|
276
|
+
|
|
277
|
+
# Browse and manage backups in the bucket
|
|
278
|
+
hdx cloud list # Directory mode: list immediate children at root
|
|
279
|
+
hdx cloud list backups/mydb/ # List immediate children at path (positional)
|
|
280
|
+
hdx cloud list --prefix backups/mydb/ # Same as above (flag form)
|
|
281
|
+
hdx cloud list --recursive # List all objects in the bucket
|
|
282
|
+
hdx cloud list backups/ --recursive # List all objects under a prefix
|
|
283
|
+
hdx cloud download backups/mydb_2026-03-03.dump # Save to ~/.herdux/backups/
|
|
284
|
+
hdx cloud download backups/mydb_2026-03-03.dump -o /tmp/ # Save to custom directory
|
|
285
|
+
hdx cloud upload ./mydb_2026-03-03.dump # Upload file to bucket root
|
|
286
|
+
hdx cloud upload ./mydb_2026-03-03.dump --prefix backups/ # Upload under a prefix
|
|
287
|
+
hdx cloud delete backups/mydb_2026-03-03.dump # Verifies existence, then asks for confirmation
|
|
288
|
+
hdx cloud delete backups/mydb_2026-03-03.dump --yes
|
|
289
|
+
|
|
290
|
+
# Backup directly to S3
|
|
291
|
+
hdx backup mydb --upload backups/ # Backup and upload to prefix backups/
|
|
292
|
+
hdx backup mydb --upload # Backup and upload to bucket root
|
|
293
|
+
hdx backup mydb --upload backups/ --no-keep # Backup, upload, then delete local file
|
|
294
|
+
|
|
295
|
+
# Restore directly from S3
|
|
296
|
+
hdx restore s3://my-bucket/backups/mydb_2026-03-03.dump --db mydb
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
Credentials can also be provided via env vars (recommended for CI/production):
|
|
300
|
+
|
|
301
|
+
```bash
|
|
302
|
+
export AWS_ACCESS_KEY_ID=AKIAIO...
|
|
303
|
+
export AWS_SECRET_ACCESS_KEY=wJalrX...
|
|
304
|
+
export AWS_DEFAULT_REGION=us-east-1
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
---
|
|
308
|
+
|
|
259
309
|
## Configuration & Server Profiles
|
|
260
310
|
|
|
261
311
|
Configuration is stored at `~/.herdux/config.json`.
|
package/README.pt-BR.md
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
Uma CLI rápida e interativa que remove a fricção dos workflows diários com bancos de dados locais, especialmente ao lidar com múltiplas instâncias e grandes datasets.
|
|
14
14
|
|
|
15
|
-

|
|
16
16
|

|
|
17
17
|

|
|
18
18
|

|
|
@@ -191,19 +191,23 @@ Aborta imediatamente se algum backup de segurança falhar. Nenhum dado é removi
|
|
|
191
191
|
Cria um backup com timestamp em `~/.herdux/backups/` por padrão.
|
|
192
192
|
|
|
193
193
|
```bash
|
|
194
|
-
herdux backup mydb
|
|
195
|
-
herdux backup mydb --format plain
|
|
196
|
-
herdux backup mydb --drop
|
|
197
|
-
herdux backup mydb --drop --yes
|
|
198
|
-
herdux backup mydb -o ./meus-backups
|
|
194
|
+
herdux backup mydb # Formato nativo da engine (.dump para PG, .db para SQLite, .sql para MySQL)
|
|
195
|
+
herdux backup mydb --format plain # SQL puro (.sql)
|
|
196
|
+
herdux backup mydb --drop # Backup e depois pergunta se quer dropar
|
|
197
|
+
herdux backup mydb --drop --yes # Backup + drop sem confirmacao
|
|
198
|
+
herdux backup mydb -o ./meus-backups # Diretorio de saida personalizado
|
|
199
|
+
herdux backup mydb --upload backups/ # Backup e upload para o prefixo backups/ no S3
|
|
200
|
+
herdux backup mydb --upload backups/ --no-keep # Backup, upload e deleta o arquivo local
|
|
199
201
|
```
|
|
200
202
|
|
|
201
|
-
|
|
|
202
|
-
| --------------------- |
|
|
203
|
-
| `-F, --format <tipo>` | `custom` (
|
|
204
|
-
| `-d, --drop` | Pergunta se quer dropar o banco
|
|
205
|
-
| `-y, --yes` | Pula a
|
|
206
|
-
| `-o, --output <dir>` |
|
|
203
|
+
| Opcao | Descricao |
|
|
204
|
+
| --------------------- | ------------------------------------------------------------------- |
|
|
205
|
+
| `-F, --format <tipo>` | `custom` (padrao, nativo da engine) ou `plain` (SQL) |
|
|
206
|
+
| `-d, --drop` | Pergunta se quer dropar o banco apos o backup bem-sucedido |
|
|
207
|
+
| `-y, --yes` | Pula a confirmacao de drop (requer `--drop`) |
|
|
208
|
+
| `-o, --output <dir>` | Diretorio de saida (padrao: `~/.herdux/backups`) |
|
|
209
|
+
| `--upload [prefix]` | Faz upload do backup para o S3 apos a criacao (requer cloud config) |
|
|
210
|
+
| `--no-keep` | Deleta o arquivo local apos upload bem-sucedido (requer `--upload`) |
|
|
207
211
|
|
|
208
212
|
---
|
|
209
213
|
|
|
@@ -231,11 +235,13 @@ Inspeciona o conteúdo de um arquivo de backup sem se conectar ao banco de dados
|
|
|
231
235
|
| Extensão | Output |
|
|
232
236
|
| ----------------- | ------------------------------------------------------------------------------ |
|
|
233
237
|
| `.dump` | Formato custom do PostgreSQL: Table of Contents completo (`pg_restore --list`) |
|
|
238
|
+
| `.tar` | Formato tar do PostgreSQL: Table of Contents completo (`pg_restore --list`) |
|
|
234
239
|
| `.sql` | SQL puro (qualquer engine): declarações CREATE TABLE, VIEW, INDEX, SEQUENCE |
|
|
235
240
|
| `.db` / `.sqlite` | Arquivo SQLite: schema (`sqlite3 .schema`) |
|
|
236
241
|
|
|
237
242
|
```bash
|
|
238
243
|
hdx inspect backup.dump # Table of Contents de um dump custom do PostgreSQL
|
|
244
|
+
hdx inspect backup.tar # Table of Contents de um dump tar do PostgreSQL
|
|
239
245
|
hdx inspect export.sql # CREATE statements extraídos de SQL puro
|
|
240
246
|
hdx inspect mydb.db # Schema do SQLite
|
|
241
247
|
```
|
|
@@ -256,6 +262,50 @@ hdx docker stop pg-dev --remove # Para e remove o container
|
|
|
256
262
|
|
|
257
263
|
---
|
|
258
264
|
|
|
265
|
+
### `herdux cloud`
|
|
266
|
+
|
|
267
|
+
Gerencia arquivos de backup em cloud storage S3-compatible (AWS S3, Cloudflare R2, MinIO, DigitalOcean Spaces e outros).
|
|
268
|
+
|
|
269
|
+
```bash
|
|
270
|
+
# Configurar
|
|
271
|
+
hdx cloud config bucket meu-bucket
|
|
272
|
+
hdx cloud config region us-east-1
|
|
273
|
+
hdx cloud config access-key AKIAIO...
|
|
274
|
+
hdx cloud config secret-key wJalrX...
|
|
275
|
+
hdx cloud config endpoint https://account.r2.cloudflarestorage.com # opcional, para provedores nao-AWS
|
|
276
|
+
|
|
277
|
+
# Navegar e gerenciar backups no bucket
|
|
278
|
+
hdx cloud list # Modo diretorio: lista filhos imediatos na raiz
|
|
279
|
+
hdx cloud list backups/mydb/ # Lista filhos imediatos no caminho (posicional)
|
|
280
|
+
hdx cloud list --prefix backups/mydb/ # Mesmo que acima (forma de flag)
|
|
281
|
+
hdx cloud list --recursive # Lista todos os objetos no bucket
|
|
282
|
+
hdx cloud list backups/ --recursive # Lista todos os objetos sob um prefixo
|
|
283
|
+
hdx cloud download backups/mydb_2026-03-03.dump # Salva em ~/.herdux/backups/
|
|
284
|
+
hdx cloud download backups/mydb_2026-03-03.dump -o /tmp/ # Salva em diretorio personalizado
|
|
285
|
+
hdx cloud upload ./mydb_2026-03-03.dump # Envia arquivo local para a raiz do bucket
|
|
286
|
+
hdx cloud upload ./mydb_2026-03-03.dump --prefix backups/ # Envia sob um prefixo
|
|
287
|
+
hdx cloud delete backups/mydb_2026-03-03.dump # Verifica existencia e pede confirmacao
|
|
288
|
+
hdx cloud delete backups/mydb_2026-03-03.dump --yes
|
|
289
|
+
|
|
290
|
+
# Backup direto para o S3
|
|
291
|
+
hdx backup mydb --upload backups/ # Backup e upload para o prefixo backups/
|
|
292
|
+
hdx backup mydb --upload # Backup e upload para a raiz do bucket
|
|
293
|
+
hdx backup mydb --upload backups/ --no-keep # Backup, upload e deleta o arquivo local
|
|
294
|
+
|
|
295
|
+
# Restore direto do S3
|
|
296
|
+
hdx restore s3://meu-bucket/backups/mydb_2026-03-03.dump --db mydb
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
As credenciais tambem podem ser fornecidas via variaveis de ambiente (recomendado para CI/producao):
|
|
300
|
+
|
|
301
|
+
```bash
|
|
302
|
+
export AWS_ACCESS_KEY_ID=AKIAIO...
|
|
303
|
+
export AWS_SECRET_ACCESS_KEY=wJalrX...
|
|
304
|
+
export AWS_DEFAULT_REGION=us-east-1
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
---
|
|
308
|
+
|
|
259
309
|
## Configuração e Perfis de Servidor
|
|
260
310
|
|
|
261
311
|
A configuração é armazenada em `~/.herdux/config.json`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8J5D"}
|
package/dist/commands/backup.js
CHANGED
|
@@ -3,8 +3,11 @@ import ora from "ora";
|
|
|
3
3
|
import prompts from "prompts";
|
|
4
4
|
import { resolveEngineAndConnection } from "../infra/engines/resolve-connection.js";
|
|
5
5
|
import * as config from "../infra/config/config.service.js";
|
|
6
|
-
import {
|
|
6
|
+
import { resolveCloudCredentials } from "../infra/cloud/cloud-credential.js";
|
|
7
|
+
import { uploadFile } from "../infra/cloud/s3.service.js";
|
|
8
|
+
import { basename, join } from "path";
|
|
7
9
|
import { homedir } from "os";
|
|
10
|
+
import { unlinkSync } from "fs";
|
|
8
11
|
export function registerBackupCommand(program) {
|
|
9
12
|
program
|
|
10
13
|
.command("backup <database>")
|
|
@@ -15,11 +18,16 @@ Examples:
|
|
|
15
18
|
hdx backup mydb --output /tmp/backups
|
|
16
19
|
hdx backup mydb --format plain
|
|
17
20
|
hdx backup mydb --drop --yes # Backup then drop without confirmation
|
|
18
|
-
hdx backup mydb --engine mysql
|
|
21
|
+
hdx backup mydb --engine mysql
|
|
22
|
+
hdx backup mydb --upload backups/
|
|
23
|
+
hdx backup mydb --upload # Upload to bucket root
|
|
24
|
+
hdx backup mydb --upload --no-keep # Upload and delete local file`)
|
|
19
25
|
.option("-o, --output <dir>", "Output directory for the backup (overrides global config)")
|
|
20
26
|
.option("-d, --drop", "Ask to drop the database after a successful backup")
|
|
21
27
|
.option("-y, --yes", "Skip confirmation when dropping (requires --drop)")
|
|
22
28
|
.option("-F, --format <type>", "Backup format format (custom, plain)", "custom")
|
|
29
|
+
.option("-u, --upload [prefix]", "Upload backup to configured S3 bucket after backup")
|
|
30
|
+
.option("--no-keep", "Delete local backup after successful upload (requires --upload)")
|
|
23
31
|
.action(async (database, cmdOpts) => {
|
|
24
32
|
if (/[\s;|&`$<>(){}\\]/.test(database)) {
|
|
25
33
|
console.error(chalk.red(`\n✖ Invalid database name "${database}". Avoid spaces and special characters (; | & \` $ < > ( ) { } \\).\n`));
|
|
@@ -43,6 +51,25 @@ Examples:
|
|
|
43
51
|
const spinner = ora(`Generating backup for "${database}"...`).start();
|
|
44
52
|
const outputPath = await engine.backupDatabase(database, finalOutputDir, opts, cmdOpts.format);
|
|
45
53
|
spinner.succeed(`Backup saved at ${chalk.cyan(outputPath)}\n`);
|
|
54
|
+
if (cmdOpts.upload !== undefined) {
|
|
55
|
+
const cloud = config.getCloudConfig();
|
|
56
|
+
if (!cloud.bucket) {
|
|
57
|
+
console.error(chalk.red("✖ Bucket not configured. Run: hdx cloud config bucket NAME\n"));
|
|
58
|
+
process.exit(1);
|
|
59
|
+
}
|
|
60
|
+
const creds = resolveCloudCredentials(cloud);
|
|
61
|
+
const prefix = typeof cmdOpts.upload === "string" ? cmdOpts.upload : "";
|
|
62
|
+
const key = prefix
|
|
63
|
+
? `${prefix.replace(/\/$/, "")}/${basename(outputPath)}`
|
|
64
|
+
: basename(outputPath);
|
|
65
|
+
const uploadSpinner = ora(`Uploading to s3://${cloud.bucket}/${key}...`).start();
|
|
66
|
+
const s3Url = await uploadFile(outputPath, cloud.bucket, key, creds);
|
|
67
|
+
uploadSpinner.succeed(`Uploaded: ${chalk.cyan(s3Url)}\n`);
|
|
68
|
+
if (!cmdOpts.keep) {
|
|
69
|
+
unlinkSync(outputPath);
|
|
70
|
+
console.log(chalk.gray(` Local backup deleted.\n`));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
46
73
|
if (cmdOpts.drop) {
|
|
47
74
|
let shouldDrop = cmdOpts.yes;
|
|
48
75
|
if (!shouldDrop) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,0BAA0B,EAAE,MAAM,wCAAwC,CAAC;AACpF,OAAO,KAAK,MAAM,MAAM,mCAAmC,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud.d.ts","sourceRoot":"","sources":["../../src/commands/cloud.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyDzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0Y3D"}
|
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
import { basename, join, resolve } from "path";
|
|
2
|
+
import { existsSync, mkdirSync } from "fs";
|
|
3
|
+
import { homedir } from "os";
|
|
4
|
+
import chalk from "chalk";
|
|
5
|
+
import ora from "ora";
|
|
6
|
+
import prompts from "prompts";
|
|
7
|
+
import { getCloudConfig, setCloudConfig, resetCloudConfig, } from "../infra/config/config.service.js";
|
|
8
|
+
import { resolveCloudCredentials } from "../infra/cloud/cloud-credential.js";
|
|
9
|
+
import { uploadFile, downloadFile, listObjects, listDirectory, deleteObject, classifyKey, } from "../infra/cloud/s3.service.js";
|
|
10
|
+
const CLOUD_CONFIG_KEYS = [
|
|
11
|
+
"bucket",
|
|
12
|
+
"region",
|
|
13
|
+
"endpoint",
|
|
14
|
+
"access-key",
|
|
15
|
+
"secret-key",
|
|
16
|
+
];
|
|
17
|
+
const SECRET_KEYS = ["access-key", "secret-key"];
|
|
18
|
+
const PLAINTEXT_WARNING = "Stored in plaintext in ~/.herdux/config.json. For CI/production, prefer env vars: AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY";
|
|
19
|
+
function keyToConfigField(key) {
|
|
20
|
+
if (key === "access-key")
|
|
21
|
+
return "access_key_id";
|
|
22
|
+
if (key === "secret-key")
|
|
23
|
+
return "secret_access_key";
|
|
24
|
+
return key;
|
|
25
|
+
}
|
|
26
|
+
function redact(value) {
|
|
27
|
+
if (value.length <= 4)
|
|
28
|
+
return "****";
|
|
29
|
+
return value.slice(0, 2) + "*".repeat(value.length - 2);
|
|
30
|
+
}
|
|
31
|
+
function formatSize(bytes) {
|
|
32
|
+
if (bytes < 1024)
|
|
33
|
+
return `${bytes} B`;
|
|
34
|
+
if (bytes < 1024 * 1024)
|
|
35
|
+
return `${(bytes / 1024).toFixed(1)} KB`;
|
|
36
|
+
if (bytes < 1024 * 1024 * 1024)
|
|
37
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
38
|
+
return `${(bytes / (1024 * 1024 * 1024)).toFixed(2)} GB`;
|
|
39
|
+
}
|
|
40
|
+
function formatDate(date) {
|
|
41
|
+
return date.toISOString().slice(0, 16).replace("T", " ");
|
|
42
|
+
}
|
|
43
|
+
export function registerCloudCommand(program) {
|
|
44
|
+
const cloudCmd = program
|
|
45
|
+
.command("cloud")
|
|
46
|
+
.helpCommand(false)
|
|
47
|
+
.description("Manage cloud storage for backups (AWS S3 and S3-compatible)")
|
|
48
|
+
.addHelpText("after", `
|
|
49
|
+
Examples:
|
|
50
|
+
hdx cloud config bucket my-bucket
|
|
51
|
+
hdx cloud config region us-east-1
|
|
52
|
+
hdx cloud config access-key AKIAIO...
|
|
53
|
+
hdx cloud config secret-key wJalrX...
|
|
54
|
+
hdx cloud list
|
|
55
|
+
hdx cloud list tributario/
|
|
56
|
+
hdx cloud list "tributario/Pasta Clientes Migração/Clientes/ES/"
|
|
57
|
+
hdx cloud upload /tmp/mydb.dump
|
|
58
|
+
hdx cloud upload /tmp/mydb.dump --prefix backups/mydb/
|
|
59
|
+
hdx cloud download backups/mydb_2026-03-03.dump
|
|
60
|
+
hdx cloud delete backups/mydb_2026-03-03.dump`);
|
|
61
|
+
// hdx cloud config [key] [value]
|
|
62
|
+
cloudCmd
|
|
63
|
+
.command("config [key] [value]")
|
|
64
|
+
.description("Configure cloud storage settings")
|
|
65
|
+
.option("-r, --reset", "Clear all cloud configuration")
|
|
66
|
+
.addHelpText("after", `
|
|
67
|
+
Keys:
|
|
68
|
+
bucket S3 bucket name
|
|
69
|
+
region AWS region (default: us-east-1)
|
|
70
|
+
access-key AWS access key ID
|
|
71
|
+
secret-key AWS secret access key
|
|
72
|
+
endpoint Custom endpoint URL (for Cloudflare R2, MinIO, etc.)
|
|
73
|
+
|
|
74
|
+
Examples:
|
|
75
|
+
hdx cloud config Show current configuration
|
|
76
|
+
hdx cloud config bucket my-bucket
|
|
77
|
+
hdx cloud config region us-east-1
|
|
78
|
+
hdx cloud config access-key AKIAIO...
|
|
79
|
+
hdx cloud config secret-key wJalrX...
|
|
80
|
+
hdx cloud config --reset`)
|
|
81
|
+
.action(async (key, value, opts) => {
|
|
82
|
+
try {
|
|
83
|
+
if (opts?.reset) {
|
|
84
|
+
resetCloudConfig();
|
|
85
|
+
console.log(chalk.green("\n✔ Cloud configuration cleared\n"));
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
if (!key) {
|
|
89
|
+
const cloud = getCloudConfig();
|
|
90
|
+
const lines = ["\n Cloud storage configuration:\n"];
|
|
91
|
+
const show = (label, val, secret = false) => {
|
|
92
|
+
const display = val
|
|
93
|
+
? secret
|
|
94
|
+
? chalk.cyan(redact(val))
|
|
95
|
+
: chalk.cyan(val)
|
|
96
|
+
: chalk.gray("(not set)");
|
|
97
|
+
lines.push(` ${label.padEnd(14)}${display}`);
|
|
98
|
+
};
|
|
99
|
+
show("bucket", cloud.bucket);
|
|
100
|
+
show("region", cloud.region || "us-east-1 (default)");
|
|
101
|
+
show("access-key", cloud.access_key_id, true);
|
|
102
|
+
show("secret-key", cloud.secret_access_key, true);
|
|
103
|
+
show("endpoint", cloud.endpoint);
|
|
104
|
+
console.log(lines.join("\n") + "\n");
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (!CLOUD_CONFIG_KEYS.includes(key)) {
|
|
108
|
+
console.error(chalk.red(`\n✖ Unknown key "${key}". Valid keys: ${CLOUD_CONFIG_KEYS.join(", ")}\n`));
|
|
109
|
+
process.exit(1);
|
|
110
|
+
}
|
|
111
|
+
if (!value) {
|
|
112
|
+
console.error(chalk.red(`\n✖ Value required for "${key}"\n`));
|
|
113
|
+
process.exit(1);
|
|
114
|
+
}
|
|
115
|
+
const field = keyToConfigField(key);
|
|
116
|
+
setCloudConfig(field, value);
|
|
117
|
+
if (SECRET_KEYS.includes(key)) {
|
|
118
|
+
console.log(chalk.green(`\n✔ ${key} saved`));
|
|
119
|
+
console.log(chalk.yellow(` ⚠ ${PLAINTEXT_WARNING}\n`));
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
console.log(chalk.green(`\n✔ ${key} set to ${chalk.cyan(value)}\n`));
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
catch (err) {
|
|
126
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
127
|
+
console.error(chalk.red(`\n✖ ${message}\n`));
|
|
128
|
+
process.exit(1);
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
// hdx cloud list [path] [-p PREFIX] [-R]
|
|
132
|
+
cloudCmd
|
|
133
|
+
.command("list [path]")
|
|
134
|
+
.alias("ls")
|
|
135
|
+
.description("List objects in the configured S3 bucket")
|
|
136
|
+
.option("-p, --prefix <prefix>", "Path prefix to list (alias for positional argument)")
|
|
137
|
+
.option("-R, --recursive", "List all objects recursively")
|
|
138
|
+
.action(async (path, opts) => {
|
|
139
|
+
try {
|
|
140
|
+
const cloud = getCloudConfig();
|
|
141
|
+
if (!cloud.bucket) {
|
|
142
|
+
console.error(chalk.red("\n✖ Bucket not configured. Run: hdx cloud config bucket NAME\n"));
|
|
143
|
+
process.exit(1);
|
|
144
|
+
}
|
|
145
|
+
const creds = resolveCloudCredentials(cloud);
|
|
146
|
+
const prefix = path ?? opts.prefix ?? "";
|
|
147
|
+
const spinner = ora("Fetching objects from S3...").start();
|
|
148
|
+
if (opts.recursive) {
|
|
149
|
+
const objects = await listObjects(cloud.bucket, prefix, creds);
|
|
150
|
+
if (objects.length === 0) {
|
|
151
|
+
spinner.warn(prefix
|
|
152
|
+
? `No objects found with prefix "${prefix}"`
|
|
153
|
+
: "No objects found in bucket");
|
|
154
|
+
console.log();
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
const MAX_DISPLAY = 200;
|
|
158
|
+
const truncated = objects.length > MAX_DISPLAY;
|
|
159
|
+
const display = truncated ? objects.slice(0, MAX_DISPLAY) : objects;
|
|
160
|
+
spinner.succeed(`Found ${objects.length} object(s) in ${chalk.cyan(`s3://${cloud.bucket}/${prefix}`)}\n`);
|
|
161
|
+
const relKeys = display.map((o) => o.key.slice(prefix.length));
|
|
162
|
+
const keyWidth = relKeys.reduce((max, k) => Math.max(max, k.length), 20) + 2;
|
|
163
|
+
const sizeWidth = 12;
|
|
164
|
+
console.log(chalk.bold(` ${"KEY".padEnd(keyWidth)}${"SIZE".padEnd(sizeWidth)}MODIFIED`));
|
|
165
|
+
console.log(chalk.gray(` ${"─".repeat(keyWidth + sizeWidth + 20)}`));
|
|
166
|
+
for (let i = 0; i < display.length; i++) {
|
|
167
|
+
const obj = display[i];
|
|
168
|
+
console.log(` ${chalk.cyan(relKeys[i].padEnd(keyWidth))}${formatSize(obj.size).padEnd(sizeWidth)}${chalk.gray(formatDate(obj.lastModified))}`);
|
|
169
|
+
}
|
|
170
|
+
if (truncated) {
|
|
171
|
+
console.log(chalk.yellow(`\n ... and ${objects.length - MAX_DISPLAY} more objects not shown. Use --prefix to narrow results.\n`));
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
console.log();
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
const { files, dirs } = await listDirectory(cloud.bucket, prefix, creds);
|
|
179
|
+
if (files.length === 0 && dirs.length === 0) {
|
|
180
|
+
spinner.warn(prefix
|
|
181
|
+
? `No objects found with prefix "${prefix}"`
|
|
182
|
+
: "No objects found in bucket");
|
|
183
|
+
console.log();
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
spinner.succeed(`Found ${dirs.length + files.length} item(s) in ${chalk.cyan(`s3://${cloud.bucket}/${prefix}`)}\n`);
|
|
187
|
+
const allNames = [
|
|
188
|
+
...dirs.map((d) => d.slice(prefix.length)),
|
|
189
|
+
...files.map((f) => f.key.slice(prefix.length)),
|
|
190
|
+
];
|
|
191
|
+
const keyWidth = allNames.reduce((max, n) => Math.max(max, n.length), 20) + 2;
|
|
192
|
+
const sizeWidth = 12;
|
|
193
|
+
console.log(chalk.bold(` ${"NAME".padEnd(keyWidth)}${"SIZE".padEnd(sizeWidth)}MODIFIED`));
|
|
194
|
+
console.log(chalk.gray(` ${"─".repeat(keyWidth + sizeWidth + 20)}`));
|
|
195
|
+
for (const dir of dirs) {
|
|
196
|
+
const name = dir.slice(prefix.length);
|
|
197
|
+
console.log(` ${chalk.cyan(name.padEnd(keyWidth))}${chalk.gray("[dir]")}`);
|
|
198
|
+
}
|
|
199
|
+
for (const obj of files) {
|
|
200
|
+
const name = obj.key.slice(prefix.length);
|
|
201
|
+
console.log(` ${chalk.cyan(name.padEnd(keyWidth))}${formatSize(obj.size).padEnd(sizeWidth)}${chalk.gray(formatDate(obj.lastModified))}`);
|
|
202
|
+
}
|
|
203
|
+
console.log();
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
catch (err) {
|
|
207
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
208
|
+
console.error(chalk.red(`\n✖ ${message}\n`));
|
|
209
|
+
process.exit(1);
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
// hdx cloud upload <file> [--prefix PREFIX]
|
|
213
|
+
cloudCmd
|
|
214
|
+
.command("upload <file>")
|
|
215
|
+
.description("Upload a local file to the configured S3 bucket")
|
|
216
|
+
.option("-p, --prefix <prefix>", "Destination folder in the bucket")
|
|
217
|
+
.action(async (file, opts) => {
|
|
218
|
+
try {
|
|
219
|
+
const cloud = getCloudConfig();
|
|
220
|
+
if (!cloud.bucket) {
|
|
221
|
+
console.error(chalk.red("\n✖ Bucket not configured. Run: hdx cloud config bucket NAME\n"));
|
|
222
|
+
process.exit(1);
|
|
223
|
+
}
|
|
224
|
+
if (!existsSync(file)) {
|
|
225
|
+
console.error(chalk.red(`\n✖ File not found: ${file}\n`));
|
|
226
|
+
process.exit(1);
|
|
227
|
+
}
|
|
228
|
+
const creds = resolveCloudCredentials(cloud);
|
|
229
|
+
const key = opts.prefix
|
|
230
|
+
? `${opts.prefix.replace(/\/$/, "")}/${basename(file)}`
|
|
231
|
+
: basename(file);
|
|
232
|
+
const spinner = ora(`Uploading to s3://${cloud.bucket}/${key}...`).start();
|
|
233
|
+
const s3Url = await uploadFile(file, cloud.bucket, key, creds);
|
|
234
|
+
spinner.succeed(`Uploaded: ${chalk.cyan(s3Url)}\n`);
|
|
235
|
+
}
|
|
236
|
+
catch (err) {
|
|
237
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
238
|
+
console.error(chalk.red(`\n✖ ${message}\n`));
|
|
239
|
+
process.exit(1);
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
// hdx cloud download <key> [-o DIR]
|
|
243
|
+
cloudCmd
|
|
244
|
+
.command("download <key>")
|
|
245
|
+
.description("Download a backup file from the configured S3 bucket")
|
|
246
|
+
.option("-o, --output <dir>", "Destination directory (default: ~/.herdux/backups)")
|
|
247
|
+
.action(async (key, opts) => {
|
|
248
|
+
try {
|
|
249
|
+
const cloud = getCloudConfig();
|
|
250
|
+
if (!cloud.bucket) {
|
|
251
|
+
console.error(chalk.red("\n✖ Bucket not configured. Run: hdx cloud config bucket NAME\n"));
|
|
252
|
+
process.exit(1);
|
|
253
|
+
}
|
|
254
|
+
const creds = resolveCloudCredentials(cloud);
|
|
255
|
+
const destDir = resolve(opts.output ?? join(homedir(), ".herdux", "backups"));
|
|
256
|
+
mkdirSync(destDir, { recursive: true });
|
|
257
|
+
const destPath = join(destDir, basename(key));
|
|
258
|
+
if (existsSync(destPath)) {
|
|
259
|
+
console.error(chalk.red(`\n✖ File already exists: ${destPath}\n`));
|
|
260
|
+
process.exit(1);
|
|
261
|
+
}
|
|
262
|
+
const spinner = ora(`Downloading s3://${cloud.bucket}/${key}...`).start();
|
|
263
|
+
await downloadFile(cloud.bucket, key, destPath, creds);
|
|
264
|
+
spinner.succeed(`Downloaded: ${chalk.cyan(destPath)}\n`);
|
|
265
|
+
}
|
|
266
|
+
catch (err) {
|
|
267
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
268
|
+
console.error(chalk.red(`\n✖ ${message}\n`));
|
|
269
|
+
process.exit(1);
|
|
270
|
+
}
|
|
271
|
+
});
|
|
272
|
+
// hdx cloud delete <key> [-y]
|
|
273
|
+
cloudCmd
|
|
274
|
+
.command("delete <key>")
|
|
275
|
+
.description("Delete a backup file from the configured S3 bucket")
|
|
276
|
+
.option("-y, --yes", "Skip confirmation prompt")
|
|
277
|
+
.action(async (key, opts) => {
|
|
278
|
+
try {
|
|
279
|
+
const cloud = getCloudConfig();
|
|
280
|
+
if (!cloud.bucket) {
|
|
281
|
+
console.error(chalk.red("\n✖ Bucket not configured. Run: hdx cloud config bucket NAME\n"));
|
|
282
|
+
process.exit(1);
|
|
283
|
+
}
|
|
284
|
+
const creds = resolveCloudCredentials(cloud);
|
|
285
|
+
const checkSpinner = ora(`Checking s3://${cloud.bucket}/${key}...`).start();
|
|
286
|
+
const keyType = await classifyKey(cloud.bucket, key, creds);
|
|
287
|
+
if (keyType === "not-found") {
|
|
288
|
+
checkSpinner.fail(`Object not found: s3://${cloud.bucket}/${key}\n`);
|
|
289
|
+
process.exit(1);
|
|
290
|
+
}
|
|
291
|
+
else if (keyType === "directory") {
|
|
292
|
+
checkSpinner.fail(`"${key}" is a directory prefix, not a file.`);
|
|
293
|
+
console.error(chalk.red(" Delete files individually or use hdx cloud list to browse contents.\n"));
|
|
294
|
+
process.exit(1);
|
|
295
|
+
}
|
|
296
|
+
else {
|
|
297
|
+
checkSpinner.stop();
|
|
298
|
+
if (!opts.yes) {
|
|
299
|
+
const { confirmed } = await prompts({
|
|
300
|
+
type: "confirm",
|
|
301
|
+
name: "confirmed",
|
|
302
|
+
message: `Delete s3://${cloud.bucket}/${key}?`,
|
|
303
|
+
initial: false,
|
|
304
|
+
});
|
|
305
|
+
if (!confirmed) {
|
|
306
|
+
console.log(chalk.gray("\n Cancelled\n"));
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
const spinner = ora(`Deleting s3://${cloud.bucket}/${key}...`).start();
|
|
311
|
+
await deleteObject(cloud.bucket, key, creds);
|
|
312
|
+
spinner.succeed(`Deleted: s3://${chalk.cyan(cloud.bucket)}/${chalk.cyan(key)}\n`);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
catch (err) {
|
|
316
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
317
|
+
console.error(chalk.red(`\n✖ ${message}\n`));
|
|
318
|
+
process.exit(1);
|
|
319
|
+
}
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
//# sourceMappingURL=cloud.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud.js","sourceRoot":"","sources":["../../src/commands/cloud.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAE7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EACL,cAAc,EACd,cAAc,EACd,gBAAgB,GACjB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EACL,UAAU,EACV,YAAY,EACZ,WAAW,EACX,aAAa,EACb,YAAY,EACZ,WAAW,GACZ,MAAM,8BAA8B,CAAC;AAEtC,MAAM,iBAAiB,GAAG;IACxB,QAAQ;IACR,QAAQ;IACR,UAAU;IACV,YAAY;IACZ,YAAY;CACJ,CAAC;AAIX,MAAM,WAAW,GAAqB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;AACnE,MAAM,iBAAiB,GACrB,+HAA+H,CAAC;AAElI,SAAS,gBAAgB,CAAC,GAAmB;IAC3C,IAAI,GAAG,KAAK,YAAY;QAAE,OAAO,eAAe,CAAC;IACjD,IAAI,GAAG,KAAK,YAAY;QAAE,OAAO,mBAAmB,CAAC;IACrD,OAAO,GAAwB,CAAC;AAClC,CAAC;AAED,SAAS,MAAM,CAAC,KAAa;IAC3B,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC;IACrC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,GAAG,KAAK,IAAI,CAAC;IACtC,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI;QAAE,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IAClE,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;QAC5B,OAAO,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IACpD,OAAO,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;AAC3D,CAAC;AAED,SAAS,UAAU,CAAC,IAAU;IAC5B,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,MAAM,QAAQ,GAAG,OAAO;SACrB,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,KAAK,CAAC;SAClB,WAAW,CAAC,6DAA6D,CAAC;SAC1E,WAAW,CACV,OAAO,EACP;;;;;;;;;;;;gDAY0C,CAC3C,CAAC;IAEJ,iCAAiC;IACjC,QAAQ;SACL,OAAO,CAAC,sBAAsB,CAAC;SAC/B,WAAW,CAAC,kCAAkC,CAAC;SAC/C,MAAM,CAAC,aAAa,EAAE,+BAA+B,CAAC;SACtD,WAAW,CACV,OAAO,EACP;;;;;;;;;;;;;;2BAcqB,CACtB;SACA,MAAM,CACL,KAAK,EAAE,GAAY,EAAE,KAAc,EAAE,IAA0B,EAAE,EAAE;QACjE,IAAI,CAAC;YACH,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC;gBAChB,gBAAgB,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAC;gBAC9D,OAAO;YACT,CAAC;YAED,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;gBAC/B,MAAM,KAAK,GAAa,CAAC,oCAAoC,CAAC,CAAC;gBAC/D,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,GAAY,EAAE,MAAM,GAAG,KAAK,EAAE,EAAE;oBAC3D,MAAM,OAAO,GAAG,GAAG;wBACjB,CAAC,CAAC,MAAM;4BACN,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;4BACzB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;wBACnB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBAC5B,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,CAAC;gBAChD,CAAC,CAAC;gBACF,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC7B,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,IAAI,qBAAqB,CAAC,CAAC;gBACtD,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;gBAC9C,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;gBAClD,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;gBACrC,OAAO;YACT,CAAC;YAED,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,GAAqB,CAAC,EAAE,CAAC;gBACvD,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,oBAAoB,GAAG,kBAAkB,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAC1E,CACF,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,2BAA2B,GAAG,KAAK,CAAC,CAAC,CAAC;gBAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAqB,CAAC,CAAC;YACtD,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAE7B,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAqB,CAAC,EAAE,CAAC;gBAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC;gBAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,iBAAiB,IAAI,CAAC,CAAC,CAAC;YAC1D,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,WAAW,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CACxD,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,OAAO,IAAI,CAAC,CAAC,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CACF,CAAC;IAEJ,yCAAyC;IACzC,QAAQ;SACL,OAAO,CAAC,aAAa,CAAC;SACtB,KAAK,CAAC,IAAI,CAAC;SACX,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CACL,uBAAuB,EACvB,qDAAqD,CACtD;SACA,MAAM,CAAC,iBAAiB,EAAE,8BAA8B,CAAC;SACzD,MAAM,CACL,KAAK,EACH,IAAwB,EACxB,IAA8C,EAC9C,EAAE;QACF,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBAClB,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,gEAAgE,CACjE,CACF,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,KAAK,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;YAC7C,MAAM,MAAM,GAAG,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,GAAG,CAAC,6BAA6B,CAAC,CAAC,KAAK,EAAE,CAAC;YAE3D,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;gBAE/D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACzB,OAAO,CAAC,IAAI,CACV,MAAM;wBACJ,CAAC,CAAC,iCAAiC,MAAM,GAAG;wBAC5C,CAAC,CAAC,4BAA4B,CACjC,CAAC;oBACF,OAAO,CAAC,GAAG,EAAE,CAAC;oBACd,OAAO;gBACT,CAAC;gBAED,MAAM,WAAW,GAAG,GAAG,CAAC;gBACxB,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,WAAW,CAAC;gBAC/C,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;gBAEpE,OAAO,CAAC,OAAO,CACb,SAAS,OAAO,CAAC,MAAM,iBAAiB,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC,IAAI,CACzF,CAAC;gBAEF,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC/D,MAAM,QAAQ,GACZ,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;gBAC9D,MAAM,SAAS,GAAG,EAAE,CAAC;gBAErB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,KAAK,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CACjE,CACF,CAAC;gBACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,QAAQ,GAAG,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC,CACzD,CAAC;gBAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACxC,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;oBACvB,OAAO,CAAC,GAAG,CACT,KAAK,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CACnI,CAAC;gBACJ,CAAC;gBAED,IAAI,SAAS,EAAE,CAAC;oBACd,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,eAAe,OAAO,CAAC,MAAM,GAAG,WAAW,4DAA4D,CACxG,CACF,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,EAAE,CAAC;gBAChB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,aAAa,CACzC,KAAK,CAAC,MAAM,EACZ,MAAM,EACN,KAAK,CACN,CAAC;gBAEF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC5C,OAAO,CAAC,IAAI,CACV,MAAM;wBACJ,CAAC,CAAC,iCAAiC,MAAM,GAAG;wBAC5C,CAAC,CAAC,4BAA4B,CACjC,CAAC;oBACF,OAAO,CAAC,GAAG,EAAE,CAAC;oBACd,OAAO;gBACT,CAAC;gBAED,OAAO,CAAC,OAAO,CACb,SAAS,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,eAAe,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC,IAAI,CACnG,CAAC;gBAEF,MAAM,QAAQ,GAAG;oBACf,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBAC1C,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;iBAChD,CAAC;gBACF,MAAM,QAAQ,GACZ,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;gBAC/D,MAAM,SAAS,GAAG,EAAE,CAAC;gBAErB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,KAAK,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAClE,CACF,CAAC;gBACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,QAAQ,GAAG,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC,CACzD,CAAC;gBAEF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;oBACvB,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBACtC,OAAO,CAAC,GAAG,CACT,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAC/D,CAAC;gBACJ,CAAC;gBAED,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;oBACxB,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBAC1C,OAAO,CAAC,GAAG,CACT,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAC7H,CAAC;gBACJ,CAAC;gBAED,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,OAAO,IAAI,CAAC,CAAC,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CACF,CAAC;IAEJ,4CAA4C;IAC5C,QAAQ;SACL,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,iDAAiD,CAAC;SAC9D,MAAM,CAAC,uBAAuB,EAAE,kCAAkC,CAAC;SACnE,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAAyB,EAAE,EAAE;QACxD,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBAClB,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,gEAAgE,CACjE,CACF,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,IAAI,IAAI,CAAC,CAAC,CAAC;gBAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,KAAK,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;YAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM;gBACrB,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;gBACvD,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAEnB,MAAM,OAAO,GAAG,GAAG,CACjB,qBAAqB,KAAK,CAAC,MAAM,IAAI,GAAG,KAAK,CAC9C,CAAC,KAAK,EAAE,CAAC;YACV,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;YAC/D,OAAO,CAAC,OAAO,CAAC,aAAa,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,OAAO,IAAI,CAAC,CAAC,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,oCAAoC;IACpC,QAAQ;SACL,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,sDAAsD,CAAC;SACnE,MAAM,CACL,oBAAoB,EACpB,oDAAoD,CACrD;SACA,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,IAAyB,EAAE,EAAE;QACvD,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBAClB,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,gEAAgE,CACjE,CACF,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,KAAK,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;YAE7C,MAAM,OAAO,GAAG,OAAO,CACrB,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CACrD,CAAC;YACF,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;YAE9C,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,QAAQ,IAAI,CAAC,CAAC,CAAC;gBACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,OAAO,GAAG,GAAG,CACjB,oBAAoB,KAAK,CAAC,MAAM,IAAI,GAAG,KAAK,CAC7C,CAAC,KAAK,EAAE,CAAC;YACV,MAAM,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;YACvD,OAAO,CAAC,OAAO,CAAC,eAAe,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC3D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,OAAO,IAAI,CAAC,CAAC,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,8BAA8B;IAC9B,QAAQ;SACL,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CAAC,oDAAoD,CAAC;SACjE,MAAM,CAAC,WAAW,EAAE,0BAA0B,CAAC;SAC/C,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,IAAuB,EAAE,EAAE;QACrD,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBAClB,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,gEAAgE,CACjE,CACF,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,KAAK,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;YAE7C,MAAM,YAAY,GAAG,GAAG,CACtB,iBAAiB,KAAK,CAAC,MAAM,IAAI,GAAG,KAAK,CAC1C,CAAC,KAAK,EAAE,CAAC;YACV,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;YAE5D,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;gBAC5B,YAAY,CAAC,IAAI,CAAC,0BAA0B,KAAK,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC;gBACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;iBAAM,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;gBACnC,YAAY,CAAC,IAAI,CAAC,IAAI,GAAG,sCAAsC,CAAC,CAAC;gBACjE,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,yEAAyE,CAC1E,CACF,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACN,YAAY,CAAC,IAAI,EAAE,CAAC;gBAEpB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;oBACd,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,OAAO,CAAC;wBAClC,IAAI,EAAE,SAAS;wBACf,IAAI,EAAE,WAAW;wBACjB,OAAO,EAAE,eAAe,KAAK,CAAC,MAAM,IAAI,GAAG,GAAG;wBAC9C,OAAO,EAAE,KAAK;qBACf,CAAC,CAAC;oBACH,IAAI,CAAC,SAAS,EAAE,CAAC;wBACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;wBAC3C,OAAO;oBACT,CAAC;gBACH,CAAC;gBAED,MAAM,OAAO,GAAG,GAAG,CACjB,iBAAiB,KAAK,CAAC,MAAM,IAAI,GAAG,KAAK,CAC1C,CAAC,KAAK,EAAE,CAAC;gBACV,MAAM,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC7C,OAAO,CAAC,OAAO,CACb,iBAAiB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CACjE,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,OAAO,IAAI,CAAC,CAAC,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"restore.d.ts","sourceRoot":"","sources":["../../src/commands/restore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"restore.d.ts","sourceRoot":"","sources":["../../src/commands/restore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8H7D"}
|
package/dist/commands/restore.js
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import chalk from "chalk";
|
|
2
2
|
import ora from "ora";
|
|
3
|
+
import { join } from "path";
|
|
4
|
+
import { tmpdir } from "os";
|
|
5
|
+
import { existsSync, unlinkSync } from "fs";
|
|
3
6
|
import { resolveEngineAndConnection } from "../infra/engines/resolve-connection.js";
|
|
7
|
+
import { getCloudConfig } from "../infra/config/config.service.js";
|
|
8
|
+
import { resolveCloudCredentials } from "../infra/cloud/cloud-credential.js";
|
|
9
|
+
import { downloadFile } from "../infra/cloud/s3.service.js";
|
|
4
10
|
export function registerRestoreCommand(program) {
|
|
5
11
|
program
|
|
6
12
|
.command("restore <file>")
|
|
@@ -11,16 +17,37 @@ Examples:
|
|
|
11
17
|
hdx restore backup.sql --db mydb --format plain
|
|
12
18
|
hdx restore backup.dump --db mydb --engine mysql
|
|
13
19
|
hdx restore backup.dump --db mydb --host 192.168.1.1 --user admin
|
|
20
|
+
hdx restore s3://my-bucket/backups/mydb_2026-03-03.dump --db mydb
|
|
14
21
|
|
|
15
22
|
Note: If the target database does not exist it will be created automatically.
|
|
16
|
-
Restoration warnings (e.g. missing roles) are reported but do not stop the process
|
|
23
|
+
Restoration warnings (e.g. missing roles) are reported but do not stop the process.
|
|
24
|
+
S3 URLs (s3://bucket/key) are downloaded to a temp file before restore.`)
|
|
17
25
|
.requiredOption("--db <name>", "Target database name for restore")
|
|
18
26
|
.option("-F, --format <type>", "Override auto-detection (custom, plain)")
|
|
19
27
|
.action(async (file, cmdOpts) => {
|
|
28
|
+
let tempFile = null;
|
|
20
29
|
try {
|
|
21
30
|
const rawOpts = program.opts();
|
|
22
31
|
const { engine, opts } = await resolveEngineAndConnection(rawOpts);
|
|
23
32
|
await engine.checkClientVersion();
|
|
33
|
+
if (file.startsWith("s3://")) {
|
|
34
|
+
const withoutScheme = file.slice("s3://".length);
|
|
35
|
+
const slashIndex = withoutScheme.indexOf("/");
|
|
36
|
+
if (slashIndex === -1) {
|
|
37
|
+
console.error(chalk.red(`\n✖ Invalid S3 URL "${file}". Expected format: s3://bucket/key\n`));
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
const bucket = withoutScheme.slice(0, slashIndex);
|
|
41
|
+
const key = withoutScheme.slice(slashIndex + 1);
|
|
42
|
+
const filename = key.split("/").pop() ?? "backup";
|
|
43
|
+
tempFile = join(tmpdir(), `herdux-restore-${Date.now()}-${filename}`);
|
|
44
|
+
const cloud = getCloudConfig();
|
|
45
|
+
const creds = resolveCloudCredentials({ ...cloud, bucket });
|
|
46
|
+
const dlSpinner = ora(`Downloading ${file}...`).start();
|
|
47
|
+
await downloadFile(bucket, key, tempFile, creds);
|
|
48
|
+
dlSpinner.succeed(`Downloaded to temp file\n`);
|
|
49
|
+
file = tempFile;
|
|
50
|
+
}
|
|
24
51
|
if (cmdOpts.format &&
|
|
25
52
|
cmdOpts.format !== "custom" &&
|
|
26
53
|
cmdOpts.format !== "plain") {
|
|
@@ -60,6 +87,11 @@ Note: If the target database does not exist it will be created automatically.
|
|
|
60
87
|
console.error(chalk.red(`\n✖ ${message}\n`));
|
|
61
88
|
process.exit(1);
|
|
62
89
|
}
|
|
90
|
+
finally {
|
|
91
|
+
if (tempFile && existsSync(tempFile)) {
|
|
92
|
+
unlinkSync(tempFile);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
63
95
|
});
|
|
64
96
|
}
|
|
65
97
|
//# sourceMappingURL=restore.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"restore.js","sourceRoot":"","sources":["../../src/commands/restore.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,0BAA0B,EAAE,MAAM,wCAAwC,CAAC;
|
|
1
|
+
{"version":3,"file":"restore.js","sourceRoot":"","sources":["../../src/commands/restore.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -12,6 +12,7 @@ import { registerCleanCommand } from "./commands/clean.js";
|
|
|
12
12
|
import { registerDoctorCommand } from "./commands/doctor.js";
|
|
13
13
|
import { registerInspectCommand } from "./commands/inspect.js";
|
|
14
14
|
import { registerDockerCommand } from "./commands/docker.js";
|
|
15
|
+
import { registerCloudCommand } from "./commands/cloud.js";
|
|
15
16
|
import { join, dirname } from "path";
|
|
16
17
|
import { fileURLToPath } from "url";
|
|
17
18
|
import { readFileSync } from "fs";
|
|
@@ -65,5 +66,6 @@ registerCleanCommand(program);
|
|
|
65
66
|
registerDoctorCommand(program);
|
|
66
67
|
registerInspectCommand(program);
|
|
67
68
|
registerDockerCommand(program);
|
|
69
|
+
registerCloudCommand(program);
|
|
68
70
|
program.parse();
|
|
69
71
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-credential.d.ts","sourceRoot":"","sources":["../../../src/infra/cloud/cloud-credential.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,WAAW,GACvB,aAAa,CAwBf"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export function resolveCloudCredentials(cloudConfig) {
|
|
2
|
+
const accessKeyId = process.env.AWS_ACCESS_KEY_ID ?? cloudConfig.access_key_id ?? "";
|
|
3
|
+
const secretAccessKey = process.env.AWS_SECRET_ACCESS_KEY ?? cloudConfig.secret_access_key ?? "";
|
|
4
|
+
const region = process.env.AWS_DEFAULT_REGION ?? cloudConfig.region ?? "us-east-1";
|
|
5
|
+
const endpoint = cloudConfig.endpoint;
|
|
6
|
+
if (!accessKeyId) {
|
|
7
|
+
throw new Error("Cloud access key not configured. Run: hdx cloud config access-key KEY\n" +
|
|
8
|
+
" Or set env var: AWS_ACCESS_KEY_ID");
|
|
9
|
+
}
|
|
10
|
+
if (!secretAccessKey) {
|
|
11
|
+
throw new Error("Cloud secret key not configured. Run: hdx cloud config secret-key KEY\n" +
|
|
12
|
+
" Or set env var: AWS_SECRET_ACCESS_KEY");
|
|
13
|
+
}
|
|
14
|
+
return { accessKeyId, secretAccessKey, region, endpoint };
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=cloud-credential.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-credential.js","sourceRoot":"","sources":["../../../src/infra/cloud/cloud-credential.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,uBAAuB,CACrC,WAAwB;IAExB,MAAM,WAAW,GACf,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,WAAW,CAAC,aAAa,IAAI,EAAE,CAAC;IACnE,MAAM,eAAe,GACnB,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,WAAW,CAAC,iBAAiB,IAAI,EAAE,CAAC;IAC3E,MAAM,MAAM,GACV,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC;IACtE,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;IAEtC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,yEAAyE;YACvE,qCAAqC,CACxC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACb,yEAAyE;YACvE,yCAAyC,CAC5C,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC5D,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface S3Credentials {
|
|
2
|
+
accessKeyId: string;
|
|
3
|
+
secretAccessKey: string;
|
|
4
|
+
region: string;
|
|
5
|
+
endpoint?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface S3Object {
|
|
8
|
+
key: string;
|
|
9
|
+
size: number;
|
|
10
|
+
lastModified: Date;
|
|
11
|
+
}
|
|
12
|
+
export declare function uploadFile(filePath: string, bucket: string, key: string, creds: S3Credentials): Promise<string>;
|
|
13
|
+
export declare function downloadFile(bucket: string, key: string, destPath: string, creds: S3Credentials): Promise<void>;
|
|
14
|
+
export declare function listObjects(bucket: string, prefix: string, creds: S3Credentials): Promise<S3Object[]>;
|
|
15
|
+
export declare function deleteObject(bucket: string, key: string, creds: S3Credentials): Promise<void>;
|
|
16
|
+
export interface S3DirResult {
|
|
17
|
+
files: S3Object[];
|
|
18
|
+
dirs: string[];
|
|
19
|
+
}
|
|
20
|
+
export declare function listDirectory(bucket: string, prefix: string, creds: S3Credentials): Promise<S3DirResult>;
|
|
21
|
+
export type S3KeyType = "file" | "directory" | "not-found";
|
|
22
|
+
export declare function classifyKey(bucket: string, key: string, creds: S3Credentials): Promise<S3KeyType>;
|
|
23
|
+
//# sourceMappingURL=s3.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3.service.d.ts","sourceRoot":"","sources":["../../../src/infra/cloud/s3.service.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,IAAI,CAAC;CACpB;AAeD,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,MAAM,CAAC,CAYjB;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,IAAI,CAAC,CAYf;AAED,wBAAsB,WAAW,CAC/B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,QAAQ,EAAE,CAAC,CA4BrB;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,IAAI,CAAC,CAGf;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,WAAW,CAAC,CAmCtB;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,WAAW,GAAG,WAAW,CAAC;AAE3D,wBAAsB,WAAW,CAC/B,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,SAAS,CAAC,CAuBpB"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { createReadStream, createWriteStream } from "fs";
|
|
2
|
+
import { pipeline } from "stream/promises";
|
|
3
|
+
import { S3Client, GetObjectCommand, HeadObjectCommand, ListObjectsV2Command, DeleteObjectCommand, } from "@aws-sdk/client-s3";
|
|
4
|
+
import { Upload } from "@aws-sdk/lib-storage";
|
|
5
|
+
function createClient(creds) {
|
|
6
|
+
return new S3Client({
|
|
7
|
+
region: creds.region,
|
|
8
|
+
credentials: {
|
|
9
|
+
accessKeyId: creds.accessKeyId,
|
|
10
|
+
secretAccessKey: creds.secretAccessKey,
|
|
11
|
+
},
|
|
12
|
+
...(creds.endpoint
|
|
13
|
+
? { endpoint: creds.endpoint, forcePathStyle: true }
|
|
14
|
+
: {}),
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
export async function uploadFile(filePath, bucket, key, creds) {
|
|
18
|
+
const client = createClient(creds);
|
|
19
|
+
const upload = new Upload({
|
|
20
|
+
client,
|
|
21
|
+
params: {
|
|
22
|
+
Bucket: bucket,
|
|
23
|
+
Key: key,
|
|
24
|
+
Body: createReadStream(filePath),
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
await upload.done();
|
|
28
|
+
return `s3://${bucket}/${key}`;
|
|
29
|
+
}
|
|
30
|
+
export async function downloadFile(bucket, key, destPath, creds) {
|
|
31
|
+
const client = createClient(creds);
|
|
32
|
+
const response = await client.send(new GetObjectCommand({ Bucket: bucket, Key: key }));
|
|
33
|
+
if (!response.Body) {
|
|
34
|
+
throw new Error(`Empty response body for s3://${bucket}/${key}`);
|
|
35
|
+
}
|
|
36
|
+
const writer = createWriteStream(destPath);
|
|
37
|
+
await pipeline(response.Body, writer);
|
|
38
|
+
}
|
|
39
|
+
export async function listObjects(bucket, prefix, creds) {
|
|
40
|
+
const client = createClient(creds);
|
|
41
|
+
const objects = [];
|
|
42
|
+
let continuationToken;
|
|
43
|
+
do {
|
|
44
|
+
const response = await client.send(new ListObjectsV2Command({
|
|
45
|
+
Bucket: bucket,
|
|
46
|
+
Prefix: prefix || undefined,
|
|
47
|
+
ContinuationToken: continuationToken,
|
|
48
|
+
}));
|
|
49
|
+
for (const obj of response.Contents ?? []) {
|
|
50
|
+
if (obj.Key && obj.Size !== undefined && obj.LastModified) {
|
|
51
|
+
objects.push({
|
|
52
|
+
key: obj.Key,
|
|
53
|
+
size: obj.Size,
|
|
54
|
+
lastModified: obj.LastModified,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
continuationToken = response.NextContinuationToken;
|
|
59
|
+
} while (continuationToken);
|
|
60
|
+
return objects;
|
|
61
|
+
}
|
|
62
|
+
export async function deleteObject(bucket, key, creds) {
|
|
63
|
+
const client = createClient(creds);
|
|
64
|
+
await client.send(new DeleteObjectCommand({ Bucket: bucket, Key: key }));
|
|
65
|
+
}
|
|
66
|
+
export async function listDirectory(bucket, prefix, creds) {
|
|
67
|
+
const client = createClient(creds);
|
|
68
|
+
const files = [];
|
|
69
|
+
const dirs = [];
|
|
70
|
+
let continuationToken;
|
|
71
|
+
do {
|
|
72
|
+
const response = await client.send(new ListObjectsV2Command({
|
|
73
|
+
Bucket: bucket,
|
|
74
|
+
Prefix: prefix || undefined,
|
|
75
|
+
Delimiter: "/",
|
|
76
|
+
ContinuationToken: continuationToken,
|
|
77
|
+
}));
|
|
78
|
+
for (const obj of response.Contents ?? []) {
|
|
79
|
+
if (obj.Key && obj.Size !== undefined && obj.LastModified) {
|
|
80
|
+
if (obj.Key.endsWith("/") && obj.Size === 0)
|
|
81
|
+
continue;
|
|
82
|
+
files.push({
|
|
83
|
+
key: obj.Key,
|
|
84
|
+
size: obj.Size,
|
|
85
|
+
lastModified: obj.LastModified,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
for (const cp of response.CommonPrefixes ?? []) {
|
|
90
|
+
if (cp.Prefix)
|
|
91
|
+
dirs.push(cp.Prefix);
|
|
92
|
+
}
|
|
93
|
+
continuationToken = response.NextContinuationToken;
|
|
94
|
+
} while (continuationToken);
|
|
95
|
+
return { files, dirs };
|
|
96
|
+
}
|
|
97
|
+
export async function classifyKey(bucket, key, creds) {
|
|
98
|
+
const client = createClient(creds);
|
|
99
|
+
try {
|
|
100
|
+
await client.send(new HeadObjectCommand({ Bucket: bucket, Key: key }));
|
|
101
|
+
return "file";
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
// Key does not exist as an exact object — check if it is a directory prefix
|
|
105
|
+
}
|
|
106
|
+
const dirPrefix = key.endsWith("/") ? key : `${key}/`;
|
|
107
|
+
const response = await client.send(new ListObjectsV2Command({ Bucket: bucket, Prefix: dirPrefix, MaxKeys: 1 }));
|
|
108
|
+
if ((response.Contents?.length ?? 0) > 0 ||
|
|
109
|
+
(response.CommonPrefixes?.length ?? 0) > 0) {
|
|
110
|
+
return "directory";
|
|
111
|
+
}
|
|
112
|
+
return "not-found";
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=s3.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3.service.js","sourceRoot":"","sources":["../../../src/infra/cloud/s3.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,13 @@ export interface ServerProfile extends ConnectionOptions {
|
|
|
3
3
|
name?: string;
|
|
4
4
|
engine?: EngineType;
|
|
5
5
|
}
|
|
6
|
+
export interface CloudConfig {
|
|
7
|
+
bucket?: string;
|
|
8
|
+
region?: string;
|
|
9
|
+
endpoint?: string;
|
|
10
|
+
access_key_id?: string;
|
|
11
|
+
secret_access_key?: string;
|
|
12
|
+
}
|
|
6
13
|
export interface HerduxConfig {
|
|
7
14
|
default: ConnectionOptions & {
|
|
8
15
|
output?: string;
|
|
@@ -10,6 +17,7 @@ export interface HerduxConfig {
|
|
|
10
17
|
};
|
|
11
18
|
servers: Record<string, ServerProfile>;
|
|
12
19
|
scan_ports: string[];
|
|
20
|
+
cloud: CloudConfig;
|
|
13
21
|
}
|
|
14
22
|
export declare function loadConfig(): HerduxConfig;
|
|
15
23
|
export declare function saveConfig(config: HerduxConfig): void;
|
|
@@ -26,4 +34,7 @@ export declare function getScanPorts(): string[];
|
|
|
26
34
|
export declare function setScanPorts(ports: string[]): void;
|
|
27
35
|
export declare function resetConfig(): void;
|
|
28
36
|
export declare function getConfigPath(): string;
|
|
37
|
+
export declare function getCloudConfig(): CloudConfig;
|
|
38
|
+
export declare function setCloudConfig(key: keyof CloudConfig, value: string): void;
|
|
39
|
+
export declare function resetCloudConfig(): void;
|
|
29
40
|
//# sourceMappingURL=config.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.service.d.ts","sourceRoot":"","sources":["../../../src/infra/config/config.service.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,iBAAiB,EACjB,UAAU,EACX,MAAM,oDAAoD,CAAC;AAK5D,MAAM,WAAW,aAAc,SAAQ,iBAAiB;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,iBAAiB,GAAG;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,UAAU,CAAA;KAAE,CAAC;IACtE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACvC,UAAU,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"config.service.d.ts","sourceRoot":"","sources":["../../../src/infra/config/config.service.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,iBAAiB,EACjB,UAAU,EACX,MAAM,oDAAoD,CAAC;AAK5D,MAAM,WAAW,aAAc,SAAQ,iBAAiB;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,iBAAiB,GAAG;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,UAAU,CAAA;KAAE,CAAC;IACtE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACvC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,EAAE,WAAW,CAAC;CACpB;AAWD,wBAAgB,UAAU,IAAI,YAAY,CAiBzC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAMrD;AAED,wBAAgB,UAAU,IAAI,iBAAiB,GAAG;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB,CAGA;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAG5D;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAI3D;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI,CAIjE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAMlD;AAED,wBAAgB,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAG3D;AAED,wBAAgB,YAAY,IAAI,MAAM,EAAE,CAGvC;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAIlD;AAED,wBAAgB,WAAW,IAAI,IAAI,CAIlC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,cAAc,IAAI,WAAW,CAG5C;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAI1E;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAIvC"}
|
|
@@ -8,6 +8,7 @@ function getEmptyConfig() {
|
|
|
8
8
|
default: {},
|
|
9
9
|
servers: {},
|
|
10
10
|
scan_ports: [],
|
|
11
|
+
cloud: {},
|
|
11
12
|
};
|
|
12
13
|
}
|
|
13
14
|
export function loadConfig() {
|
|
@@ -21,6 +22,7 @@ export function loadConfig() {
|
|
|
21
22
|
default: parsed.default ?? {},
|
|
22
23
|
servers: parsed.servers ?? {},
|
|
23
24
|
scan_ports: parsed.scan_ports ?? [],
|
|
25
|
+
cloud: parsed.cloud ?? {},
|
|
24
26
|
};
|
|
25
27
|
}
|
|
26
28
|
catch {
|
|
@@ -80,4 +82,18 @@ export function resetConfig() {
|
|
|
80
82
|
export function getConfigPath() {
|
|
81
83
|
return CONFIG_FILE;
|
|
82
84
|
}
|
|
85
|
+
export function getCloudConfig() {
|
|
86
|
+
const config = loadConfig();
|
|
87
|
+
return config.cloud;
|
|
88
|
+
}
|
|
89
|
+
export function setCloudConfig(key, value) {
|
|
90
|
+
const config = loadConfig();
|
|
91
|
+
config.cloud[key] = value;
|
|
92
|
+
saveConfig(config);
|
|
93
|
+
}
|
|
94
|
+
export function resetCloudConfig() {
|
|
95
|
+
const config = loadConfig();
|
|
96
|
+
config.cloud = {};
|
|
97
|
+
saveConfig(config);
|
|
98
|
+
}
|
|
83
99
|
//# sourceMappingURL=config.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.service.js","sourceRoot":"","sources":["../../../src/infra/config/config.service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,SAAS,EACT,YAAY,EACZ,aAAa,EACb,UAAU,GACX,MAAM,IAAI,CAAC;AACZ,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAM7B,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AAC/E,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"config.service.js","sourceRoot":"","sources":["../../../src/infra/config/config.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker.service.d.ts","sourceRoot":"","sources":["../../../src/infra/docker/docker.service.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,UAAU,GAAG,OAAO,GAAG,SAAS,CAAC;CAC9C;AA4BD,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAS1D;AAED,wBAAsB,sBAAsB,CAC1C,OAAO,UAAQ,GACd,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAwC9B;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKhE;AAED,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,MAAM,UAAQ,GACb,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"docker.service.d.ts","sourceRoot":"","sources":["../../../src/infra/docker/docker.service.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,UAAU,GAAG,OAAO,GAAG,SAAS,CAAC;CAC9C;AA4BD,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAS1D;AAED,wBAAsB,sBAAsB,CAC1C,OAAO,UAAQ,GACd,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAwC9B;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKhE;AAED,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,MAAM,UAAQ,GACb,OAAO,CAAC,IAAI,CAAC,CAcf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker.service.js","sourceRoot":"","sources":["../../../src/infra/docker/docker.service.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"docker.service.js","sourceRoot":"","sources":["../../../src/infra/docker/docker.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,25 @@
|
|
|
1
1
|
import type { ConnectionOptions, EngineType, IDatabaseEngine } from "../../core/interfaces/database-engine.interface.js";
|
|
2
|
+
import type { ServerProfile } from "../config/config.service.js";
|
|
2
3
|
export interface ResolvedConnection {
|
|
3
4
|
engine: IDatabaseEngine;
|
|
4
5
|
engineType: EngineType;
|
|
5
6
|
opts: ConnectionOptions;
|
|
6
7
|
}
|
|
8
|
+
type SavedDefaults = ConnectionOptions & {
|
|
9
|
+
output?: string;
|
|
10
|
+
engine?: EngineType;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Presents an interactive prompt for the user to select a server profile.
|
|
14
|
+
* Returns the selected server name, or undefined if the user selected
|
|
15
|
+
* the default connection or no options were available.
|
|
16
|
+
*/
|
|
17
|
+
export declare function _promptServerSelection(servers: Record<string, ServerProfile>, serverNames: string[], savedDefaults: SavedDefaults, requestedEngine?: EngineType): Promise<string | undefined>;
|
|
18
|
+
/**
|
|
19
|
+
* Determines the engine type from the CLI flag, server profile, or config defaults.
|
|
20
|
+
* Priority: CLI flag > server profile engine > config default engine > "postgres"
|
|
21
|
+
*/
|
|
22
|
+
export declare function _resolveEngineType(rawEngine: EngineType | undefined, serverName: string | undefined, savedDefaults: SavedDefaults): EngineType;
|
|
7
23
|
/**
|
|
8
24
|
* Resolves both the database engine and connection options together.
|
|
9
25
|
*
|
|
@@ -23,4 +39,5 @@ export declare function resolveEngineAndConnection(rawOpts: ConnectionOptions &
|
|
|
23
39
|
engine?: EngineType;
|
|
24
40
|
server?: string;
|
|
25
41
|
}): Promise<ResolvedConnection>;
|
|
42
|
+
export {};
|
|
26
43
|
//# sourceMappingURL=resolve-connection.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-connection.d.ts","sourceRoot":"","sources":["../../../src/infra/engines/resolve-connection.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,iBAAiB,EACjB,UAAU,EACV,eAAe,EAChB,MAAM,oDAAoD,CAAC;
|
|
1
|
+
{"version":3,"file":"resolve-connection.d.ts","sourceRoot":"","sources":["../../../src/infra/engines/resolve-connection.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,iBAAiB,EACjB,UAAU,EACV,eAAe,EAChB,MAAM,oDAAoD,CAAC;AAE5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAKjE,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,eAAe,CAAC;IACxB,UAAU,EAAE,UAAU,CAAC;IACvB,IAAI,EAAE,iBAAiB,CAAC;CACzB;AAID,KAAK,aAAa,GAAG,iBAAiB,GAAG;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EACtC,WAAW,EAAE,MAAM,EAAE,EACrB,aAAa,EAAE,aAAa,EAC5B,eAAe,CAAC,EAAE,UAAU,GAC3B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAiD7B;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,UAAU,GAAG,SAAS,EACjC,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,aAAa,EAAE,aAAa,GAC3B,UAAU,CAOZ;AAID;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,iBAAiB,GAAG;IAAE,MAAM,CAAC,EAAE,UAAU,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACpE,OAAO,CAAC,kBAAkB,CAAC,CA0J7B"}
|
|
@@ -9,7 +9,7 @@ import { logger } from "../../presentation/logger.js";
|
|
|
9
9
|
* Returns the selected server name, or undefined if the user selected
|
|
10
10
|
* the default connection or no options were available.
|
|
11
11
|
*/
|
|
12
|
-
async function
|
|
12
|
+
export async function _promptServerSelection(servers, serverNames, savedDefaults, requestedEngine) {
|
|
13
13
|
const dEngine = savedDefaults.engine ?? "postgres";
|
|
14
14
|
const isDefaultCompatible = !requestedEngine || dEngine === requestedEngine;
|
|
15
15
|
const hasDefaults = Object.keys(savedDefaults).length > 0;
|
|
@@ -55,7 +55,7 @@ async function promptServerSelection(servers, serverNames, savedDefaults, reques
|
|
|
55
55
|
* Determines the engine type from the CLI flag, server profile, or config defaults.
|
|
56
56
|
* Priority: CLI flag > server profile engine > config default engine > "postgres"
|
|
57
57
|
*/
|
|
58
|
-
function
|
|
58
|
+
export function _resolveEngineType(rawEngine, serverName, savedDefaults) {
|
|
59
59
|
if (rawEngine)
|
|
60
60
|
return rawEngine;
|
|
61
61
|
if (serverName) {
|
|
@@ -91,13 +91,13 @@ export async function resolveEngineAndConnection(rawOpts) {
|
|
|
91
91
|
if (rawOpts.engine) {
|
|
92
92
|
serverNames = serverNames.filter((name) => servers[name].engine === rawOpts.engine);
|
|
93
93
|
}
|
|
94
|
-
const selected = await
|
|
94
|
+
const selected = await _promptServerSelection(servers, serverNames, savedDefaults, rawOpts.engine);
|
|
95
95
|
if (selected !== undefined) {
|
|
96
96
|
serverName = selected;
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
// --- Step 2: Determine engine type ---
|
|
100
|
-
const engineType =
|
|
100
|
+
const engineType = _resolveEngineType(rawOpts.engine, serverName, savedDefaults);
|
|
101
101
|
const engine = createEngine(engineType);
|
|
102
102
|
// --- Step 3: Resolve connection options ---
|
|
103
103
|
if (serverName) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-connection.js","sourceRoot":"","sources":["../../../src/infra/engines/resolve-connection.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAMnD,OAAO,KAAK,MAAM,MAAM,6BAA6B,CAAC;AAEtD,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAiBtD;;;;GAIG;AACH,KAAK,UAAU,
|
|
1
|
+
{"version":3,"file":"resolve-connection.js","sourceRoot":"","sources":["../../../src/infra/engines/resolve-connection.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "herdux-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.2",
|
|
4
4
|
"description": "Modern Database workflow CLI focused on developer experience, safety, and automation.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -59,6 +59,8 @@
|
|
|
59
59
|
"author": "Eduardo Zaniboni",
|
|
60
60
|
"license": "MIT",
|
|
61
61
|
"dependencies": {
|
|
62
|
+
"@aws-sdk/client-s3": "^3.1000.0",
|
|
63
|
+
"@aws-sdk/lib-storage": "^3.1000.0",
|
|
62
64
|
"chalk": "^5.6.2",
|
|
63
65
|
"commander": "^12.1.0",
|
|
64
66
|
"execa": "^9.6.1",
|