dbdock 1.1.24 → 1.2.0
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/LICENSE +1 -1
- package/README.md +87 -728
- package/dist/alerts/alert-templates.d.ts +1 -1
- package/dist/alerts/alert-templates.js +6 -2
- package/dist/alerts/alert-templates.js.map +1 -1
- package/dist/alerts/alert.service.js +24 -11
- package/dist/alerts/alert.service.js.map +1 -1
- package/dist/alerts/alert.types.d.ts +1 -1
- package/dist/backup/backup.service.js.map +1 -1
- package/dist/cli/commands/analyze.js.map +1 -1
- package/dist/cli/commands/backup.js +10 -4
- package/dist/cli/commands/backup.js.map +1 -1
- package/dist/cli/commands/cleanup.js +12 -6
- package/dist/cli/commands/cleanup.js.map +1 -1
- package/dist/cli/commands/copydb.js +78 -37
- package/dist/cli/commands/copydb.js.map +1 -1
- package/dist/cli/commands/cross-migrate.js +9 -10
- package/dist/cli/commands/cross-migrate.js.map +1 -1
- package/dist/cli/commands/delete.js +46 -37
- package/dist/cli/commands/delete.js.map +1 -1
- package/dist/cli/commands/driver-copy.js +150 -40
- package/dist/cli/commands/driver-copy.js.map +1 -1
- package/dist/cli/commands/init.js +35 -13
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/migrate-config.js +11 -6
- package/dist/cli/commands/migrate-config.js.map +1 -1
- package/dist/cli/commands/restore.js +14 -148
- package/dist/cli/commands/restore.js.map +1 -1
- package/dist/cli/commands/schedule.js +1 -1
- package/dist/cli/commands/schedule.js.map +1 -1
- package/dist/cli/commands/start.js +19 -14
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/status.js +5 -2
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/test.js +3 -38
- package/dist/cli/commands/test.js.map +1 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/utils/config.d.ts +7 -0
- package/dist/cli/utils/config.js.map +1 -1
- package/dist/cli/utils/progress.js.map +1 -1
- package/dist/cli/utils/retention.js +6 -1
- package/dist/cli/utils/retention.js.map +1 -1
- package/dist/config/config.schema.d.ts +8 -0
- package/dist/config/config.schema.js +42 -0
- package/dist/config/config.schema.js.map +1 -1
- package/dist/config/config.service.js +99 -63
- package/dist/config/config.service.js.map +1 -1
- package/dist/config/env-url.helper.js +5 -2
- package/dist/config/env-url.helper.js.map +1 -1
- package/dist/config/permissions.checker.js +5 -7
- package/dist/config/permissions.checker.js.map +1 -1
- package/dist/config/pgpass.helper.js.map +1 -1
- package/dist/config/secrets.validator.js +3 -1
- package/dist/config/secrets.validator.js.map +1 -1
- package/dist/crypto/crypto.service.js +1 -1
- package/dist/crypto/crypto.service.js.map +1 -1
- package/dist/dbdock.js.map +1 -1
- package/dist/engines/engine.types.d.ts +32 -0
- package/dist/engines/engine.types.js +3 -0
- package/dist/engines/engine.types.js.map +1 -0
- package/dist/engines/index.d.ts +4 -0
- package/dist/engines/index.js +30 -0
- package/dist/engines/index.js.map +1 -0
- package/dist/engines/mssql.engine.d.ts +2 -0
- package/dist/engines/mssql.engine.js +198 -0
- package/dist/engines/mssql.engine.js.map +1 -0
- package/dist/engines/mysql.engine.d.ts +2 -0
- package/dist/engines/mysql.engine.js +184 -0
- package/dist/engines/mysql.engine.js.map +1 -0
- package/dist/engines/postgres.engine.d.ts +2 -0
- package/dist/engines/postgres.engine.js +257 -0
- package/dist/engines/postgres.engine.js.map +1 -0
- package/dist/engines/redis-worker.d.ts +1 -0
- package/dist/engines/redis-worker.js +80 -0
- package/dist/engines/redis-worker.js.map +1 -0
- package/dist/engines/redis.engine.d.ts +2 -0
- package/dist/engines/redis.engine.js +124 -0
- package/dist/engines/redis.engine.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/migration/analyzers/mongodb.analyzer.js +15 -7
- package/dist/migration/analyzers/mongodb.analyzer.js.map +1 -1
- package/dist/migration/analyzers/postgres.analyzer.js +1 -1
- package/dist/migration/analyzers/postgres.analyzer.js.map +1 -1
- package/dist/migration/config.manager.js.map +1 -1
- package/dist/migration/engines/migration.engine.js +1 -1
- package/dist/migration/engines/migration.engine.js.map +1 -1
- package/dist/migration/engines/mongo-to-postgres.engine.js +34 -16
- package/dist/migration/engines/mongo-to-postgres.engine.js.map +1 -1
- package/dist/migration/engines/postgres-to-mongo.engine.js +8 -10
- package/dist/migration/engines/postgres-to-mongo.engine.js.map +1 -1
- package/dist/migration/mappers/mongo-to-postgres.mapper.js +3 -6
- package/dist/migration/mappers/mongo-to-postgres.mapper.js.map +1 -1
- package/dist/migration/mappers/postgres-to-mongo.mapper.js +5 -3
- package/dist/migration/mappers/postgres-to-mongo.mapper.js.map +1 -1
- package/dist/migration/reference.detector.js.map +1 -1
- package/dist/migration/row.types.d.ts +12 -0
- package/dist/migration/row.types.js +3 -0
- package/dist/migration/row.types.js.map +1 -0
- package/dist/migration/type.mapper.d.ts +3 -3
- package/dist/migration/type.mapper.js +29 -14
- package/dist/migration/type.mapper.js.map +1 -1
- package/dist/migration/types.d.ts +1 -1
- package/dist/scheduler/schedule-manager.js +4 -1
- package/dist/scheduler/schedule-manager.js.map +1 -1
- package/dist/scheduler/scheduler.service.js +11 -6
- package/dist/scheduler/scheduler.service.js.map +1 -1
- package/dist/standalone/backup-standalone.js +17 -118
- package/dist/standalone/backup-standalone.js.map +1 -1
- package/dist/standalone/restore-standalone.d.ts +10 -0
- package/dist/standalone/restore-standalone.js +167 -0
- package/dist/standalone/restore-standalone.js.map +1 -0
- package/dist/storage/adapters/cloudinary.adapter.js +12 -7
- package/dist/storage/adapters/cloudinary.adapter.js.map +1 -1
- package/dist/storage/adapters/local.adapter.js +15 -12
- package/dist/storage/adapters/local.adapter.js.map +1 -1
- package/dist/storage/adapters/s3.adapter.d.ts +2 -1
- package/dist/storage/adapters/s3.adapter.js +23 -2
- package/dist/storage/adapters/s3.adapter.js.map +1 -1
- package/dist/storage/deletion-guard.d.ts +37 -0
- package/dist/storage/deletion-guard.js +102 -0
- package/dist/storage/deletion-guard.js.map +1 -0
- package/dist/storage/safe-storage.adapter.d.ts +35 -0
- package/dist/storage/safe-storage.adapter.js +161 -0
- package/dist/storage/safe-storage.adapter.js.map +1 -0
- package/dist/storage/storage.interface.d.ts +6 -0
- package/dist/storage/storage.service.d.ts +3 -0
- package/dist/storage/storage.service.js +18 -3
- package/dist/storage/storage.service.js.map +1 -1
- package/dist/utils/logger.js +32 -8
- package/dist/utils/logger.js.map +1 -1
- package/dist/wal/retention.service.js +23 -8
- package/dist/wal/retention.service.js.map +1 -1
- package/dist/wal/wal-archiver.service.js +7 -4
- package/dist/wal/wal-archiver.service.js.map +1 -1
- package/package.json +6 -4
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createBackupStandalone = createBackupStandalone;
|
|
4
|
-
const child_process_1 = require("child_process");
|
|
5
4
|
const stream_1 = require("stream");
|
|
6
5
|
const fs_1 = require("fs");
|
|
7
6
|
const path_1 = require("path");
|
|
@@ -12,18 +11,14 @@ const s3_request_presigner_1 = require("@aws-sdk/s3-request-presigner");
|
|
|
12
11
|
const lib_storage_1 = require("@aws-sdk/lib-storage");
|
|
13
12
|
const cloudinary_1 = require("cloudinary");
|
|
14
13
|
const format_1 = require("../utils/format");
|
|
14
|
+
const engines_1 = require("../engines");
|
|
15
15
|
async function createBackupStandalone(config, callbacks) {
|
|
16
16
|
const startTime = Date.now();
|
|
17
17
|
const backupId = (0, crypto_1.randomBytes)(16).toString('hex');
|
|
18
18
|
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
19
|
+
const engine = (0, engines_1.getEngine)(config.database.type);
|
|
19
20
|
const format = config.backup?.format || 'custom';
|
|
20
|
-
const
|
|
21
|
-
custom: 'sql',
|
|
22
|
-
plain: 'sql',
|
|
23
|
-
directory: 'dir',
|
|
24
|
-
tar: 'tar',
|
|
25
|
-
};
|
|
26
|
-
const extension = extensionMap[format] || 'sql';
|
|
21
|
+
const extension = engine.fileExtension(format);
|
|
27
22
|
const filename = `backup-${timestamp}-${backupId}.${extension}`;
|
|
28
23
|
let storageKey = config.storage.provider === 'local'
|
|
29
24
|
? (0, path_1.join)(config.storage.local?.path || './backups', filename)
|
|
@@ -33,34 +28,12 @@ async function createBackupStandalone(config, callbacks) {
|
|
|
33
28
|
(0, fs_1.mkdirSync)(dir, { recursive: true });
|
|
34
29
|
}
|
|
35
30
|
const dbConfig = config.database;
|
|
36
|
-
const formatMap = {
|
|
37
|
-
custom: 'c',
|
|
38
|
-
plain: 'p',
|
|
39
|
-
directory: 'd',
|
|
40
|
-
tar: 't',
|
|
41
|
-
};
|
|
42
|
-
const pgDumpArgs = [
|
|
43
|
-
'-h',
|
|
44
|
-
dbConfig.host || 'localhost',
|
|
45
|
-
'-p',
|
|
46
|
-
String(dbConfig.port || 5432),
|
|
47
|
-
'-U',
|
|
48
|
-
dbConfig.user || dbConfig.username || process.env.DBDOCK_DB_USER || 'postgres',
|
|
49
|
-
'-d',
|
|
50
|
-
dbConfig.database || 'postgres',
|
|
51
|
-
'-F',
|
|
52
|
-
formatMap[format] || 'c',
|
|
53
|
-
'--no-password',
|
|
54
|
-
];
|
|
55
|
-
const env = {
|
|
56
|
-
...process.env,
|
|
57
|
-
PGPASSWORD: dbConfig.password || process.env.DBDOCK_DB_PASSWORD,
|
|
58
|
-
};
|
|
59
31
|
if (callbacks?.onStage) {
|
|
60
32
|
callbacks.onStage('Dumping database');
|
|
61
33
|
}
|
|
62
|
-
const
|
|
63
|
-
|
|
34
|
+
const dump = engine.spawnDump(dbConfig, { format });
|
|
35
|
+
const pgDumpProcess = dump.process;
|
|
36
|
+
let stream = dump.stdout;
|
|
64
37
|
const streams = [stream];
|
|
65
38
|
const pgDumpErrorMessages = [];
|
|
66
39
|
let pgDumpExitCode = null;
|
|
@@ -119,10 +92,10 @@ async function createBackupStandalone(config, callbacks) {
|
|
|
119
92
|
await new Promise((resolve, reject) => {
|
|
120
93
|
writeStream.on('finish', () => {
|
|
121
94
|
if (pgDumpExitCode !== null && pgDumpExitCode !== 0) {
|
|
122
|
-
reject(new Error(
|
|
95
|
+
reject(new Error(engine.formatDumpError(pgDumpExitCode, pgDumpErrorMessages, dbConfig)));
|
|
123
96
|
}
|
|
124
97
|
else if (pgDumpErrorMessages.length > 0 && totalSize === 0) {
|
|
125
|
-
reject(new Error(
|
|
98
|
+
reject(new Error(engine.formatDumpError(1, pgDumpErrorMessages, dbConfig)));
|
|
126
99
|
}
|
|
127
100
|
else {
|
|
128
101
|
resolve();
|
|
@@ -130,7 +103,7 @@ async function createBackupStandalone(config, callbacks) {
|
|
|
130
103
|
});
|
|
131
104
|
writeStream.on('error', reject);
|
|
132
105
|
pgDumpProcess.on('error', (err) => {
|
|
133
|
-
reject(new Error(`Failed to
|
|
106
|
+
reject(new Error(`Failed to start the database dump: ${err.message}\n\n${engine.clientToolHint}`));
|
|
134
107
|
});
|
|
135
108
|
});
|
|
136
109
|
}
|
|
@@ -168,10 +141,10 @@ async function createBackupStandalone(config, callbacks) {
|
|
|
168
141
|
.then(() => {
|
|
169
142
|
uploadCompleted = true;
|
|
170
143
|
if (pgDumpExitCode !== null && pgDumpExitCode !== 0) {
|
|
171
|
-
reject(new Error(
|
|
144
|
+
reject(new Error(engine.formatDumpError(pgDumpExitCode, pgDumpErrorMessages, dbConfig)));
|
|
172
145
|
}
|
|
173
146
|
else if (pgDumpErrorMessages.length > 0 && totalSize === 0) {
|
|
174
|
-
reject(new Error(
|
|
147
|
+
reject(new Error(engine.formatDumpError(1, pgDumpErrorMessages, dbConfig)));
|
|
175
148
|
}
|
|
176
149
|
else {
|
|
177
150
|
resolve();
|
|
@@ -179,13 +152,13 @@ async function createBackupStandalone(config, callbacks) {
|
|
|
179
152
|
})
|
|
180
153
|
.catch(reject);
|
|
181
154
|
pgDumpProcess.on('error', (err) => {
|
|
182
|
-
reject(new Error(`Failed to
|
|
155
|
+
reject(new Error(`Failed to start the database dump: ${err.message}\n\n${engine.clientToolHint}`));
|
|
183
156
|
});
|
|
184
157
|
pgDumpProcess.on('close', (code) => {
|
|
185
158
|
if (code !== null && code !== 0 && !uploadCompleted) {
|
|
186
159
|
setTimeout(() => {
|
|
187
160
|
if (!uploadCompleted) {
|
|
188
|
-
reject(new Error(
|
|
161
|
+
reject(new Error(engine.formatDumpError(code, pgDumpErrorMessages, dbConfig)));
|
|
189
162
|
}
|
|
190
163
|
}, 1000);
|
|
191
164
|
}
|
|
@@ -217,10 +190,10 @@ async function createBackupStandalone(config, callbacks) {
|
|
|
217
190
|
reject(new Error(error.message));
|
|
218
191
|
}
|
|
219
192
|
else if (pgDumpExitCode !== null && pgDumpExitCode !== 0) {
|
|
220
|
-
reject(new Error(
|
|
193
|
+
reject(new Error(engine.formatDumpError(pgDumpExitCode, pgDumpErrorMessages, dbConfig)));
|
|
221
194
|
}
|
|
222
195
|
else if (pgDumpErrorMessages.length > 0 && totalSize === 0) {
|
|
223
|
-
reject(new Error(
|
|
196
|
+
reject(new Error(engine.formatDumpError(1, pgDumpErrorMessages, dbConfig)));
|
|
224
197
|
}
|
|
225
198
|
else {
|
|
226
199
|
if (result?.public_id) {
|
|
@@ -231,13 +204,13 @@ async function createBackupStandalone(config, callbacks) {
|
|
|
231
204
|
});
|
|
232
205
|
stream.pipe(uploadStream);
|
|
233
206
|
pgDumpProcess.on('error', (err) => {
|
|
234
|
-
reject(new Error(`Failed to
|
|
207
|
+
reject(new Error(`Failed to start the database dump: ${err.message}\n\n${engine.clientToolHint}`));
|
|
235
208
|
});
|
|
236
209
|
pgDumpProcess.on('close', (code) => {
|
|
237
210
|
if (code !== null && code !== 0 && !uploadCompleted) {
|
|
238
211
|
setTimeout(() => {
|
|
239
212
|
if (!uploadCompleted) {
|
|
240
|
-
reject(new Error(
|
|
213
|
+
reject(new Error(engine.formatDumpError(code, pgDumpErrorMessages, dbConfig)));
|
|
241
214
|
}
|
|
242
215
|
}, 1000);
|
|
243
216
|
}
|
|
@@ -289,78 +262,4 @@ async function createBackupStandalone(config, callbacks) {
|
|
|
289
262
|
downloadUrl,
|
|
290
263
|
};
|
|
291
264
|
}
|
|
292
|
-
function formatPgDumpError(exitCode, errorMessages, dbConfig) {
|
|
293
|
-
const errorMessage = errorMessages.join('\n');
|
|
294
|
-
const host = dbConfig.host || 'localhost';
|
|
295
|
-
const port = dbConfig.port || 5432;
|
|
296
|
-
const username = dbConfig.username || 'postgres';
|
|
297
|
-
const database = dbConfig.database || 'postgres';
|
|
298
|
-
if (errorMessage.includes('database') &&
|
|
299
|
-
errorMessage.includes('does not exist')) {
|
|
300
|
-
const dbMatch = errorMessage.match(/database "([^"]+)" does not exist/);
|
|
301
|
-
const dbName = dbMatch ? dbMatch[1] : database;
|
|
302
|
-
return (`Database "${dbName}" does not exist\n\n` +
|
|
303
|
-
`Connection details:\n` +
|
|
304
|
-
` Host: ${host}\n` +
|
|
305
|
-
` Port: ${port}\n` +
|
|
306
|
-
` Database: ${dbName}\n\n` +
|
|
307
|
-
`Please verify:\n` +
|
|
308
|
-
` • Database name is correct in dbdock.config.json\n` +
|
|
309
|
-
` • Database exists on the server\n` +
|
|
310
|
-
` • You can connect: psql -h ${host} -p ${port} -U ${username} -d ${dbName}`);
|
|
311
|
-
}
|
|
312
|
-
if (errorMessage.includes('could not connect') ||
|
|
313
|
-
errorMessage.includes('Connection refused') ||
|
|
314
|
-
errorMessage.includes('ECONNREFUSED')) {
|
|
315
|
-
return (`Cannot connect to PostgreSQL server\n\n` +
|
|
316
|
-
`Connection details:\n` +
|
|
317
|
-
` Host: ${host}\n` +
|
|
318
|
-
` Port: ${port}\n\n` +
|
|
319
|
-
`Please verify:\n` +
|
|
320
|
-
` • PostgreSQL server is running\n` +
|
|
321
|
-
` • Host and port are correct in dbdock.config.json\n` +
|
|
322
|
-
` • Network/firewall allows connection\n` +
|
|
323
|
-
` • Test connection: psql -h ${host} -p ${port} -U ${username} -d ${database}`);
|
|
324
|
-
}
|
|
325
|
-
if (errorMessage.includes('authentication failed') ||
|
|
326
|
-
errorMessage.includes('password authentication failed')) {
|
|
327
|
-
return (`Authentication failed for user "${username}"\n\n` +
|
|
328
|
-
`Connection details:\n` +
|
|
329
|
-
` Host: ${host}\n` +
|
|
330
|
-
` Port: ${port}\n` +
|
|
331
|
-
` Username: ${username}\n` +
|
|
332
|
-
` Database: ${database}\n\n` +
|
|
333
|
-
`Please verify:\n` +
|
|
334
|
-
` • Username is correct in dbdock.config.json\n` +
|
|
335
|
-
` • Password is correct in dbdock.config.json\n` +
|
|
336
|
-
` • User exists and has access to the database\n` +
|
|
337
|
-
` • Test connection: psql -h ${host} -p ${port} -U ${username} -d ${database}`);
|
|
338
|
-
}
|
|
339
|
-
if (errorMessage.includes('permission denied')) {
|
|
340
|
-
return (`Permission denied for user "${username}"\n\n` +
|
|
341
|
-
`The user does not have sufficient privileges to perform backup.\n\n` +
|
|
342
|
-
`Please verify:\n` +
|
|
343
|
-
` • User has read permissions on the database\n` +
|
|
344
|
-
` • User has necessary privileges for pg_dump\n` +
|
|
345
|
-
` • Grant access: GRANT SELECT ON ALL TABLES IN SCHEMA public TO ${username};`);
|
|
346
|
-
}
|
|
347
|
-
if (errorMessage.includes('no password supplied')) {
|
|
348
|
-
return (`No password provided for user "${username}"\n\n` +
|
|
349
|
-
`Please add the database password to dbdock.config.json:\n` +
|
|
350
|
-
` "database": {\n` +
|
|
351
|
-
` "password": "your-database-password"\n` +
|
|
352
|
-
` }`);
|
|
353
|
-
}
|
|
354
|
-
if (errorMessages.length > 0) {
|
|
355
|
-
return (`pg_dump failed with exit code ${exitCode}\n\n` +
|
|
356
|
-
`Error details:\n${errorMessage}\n\n` +
|
|
357
|
-
`Connection settings:\n` +
|
|
358
|
-
` Host: ${host}\n` +
|
|
359
|
-
` Port: ${port}\n` +
|
|
360
|
-
` Username: ${username}\n` +
|
|
361
|
-
` Database: ${database}\n\n` +
|
|
362
|
-
`Please check your configuration and database connection.`);
|
|
363
|
-
}
|
|
364
|
-
return `pg_dump failed with exit code ${exitCode}. Please check your database configuration.`;
|
|
365
|
-
}
|
|
366
265
|
//# sourceMappingURL=backup-standalone.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backup-standalone.js","sourceRoot":"","sources":["../../src/standalone/backup-standalone.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"backup-standalone.js","sourceRoot":"","sources":["../../src/standalone/backup-standalone.ts"],"names":[],"mappings":";;AA2BA,wDAsVC;AAhXD,mCAA0D;AAC1D,2BAAkD;AAClD,+BAAqC;AACrC,mCAAqD;AACrD,+BAA4C;AAC5C,kDAAgE;AAChE,wEAA6D;AAC7D,sDAA8C;AAC9C,2CAA8C;AAC9C,4CAAiD;AACjD,wCAAuC;AAgBhC,KAAK,UAAU,sBAAsB,CAC1C,MAAiB,EACjB,SAAkC;IAElC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAG,IAAA,oBAAW,EAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAEjE,MAAM,MAAM,GAAG,IAAA,mBAAS,EAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,QAAQ,CAAC;IACjD,MAAM,SAAS,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,UAAU,SAAS,IAAI,QAAQ,IAAI,SAAS,EAAE,CAAC;IAEhE,IAAI,UAAU,GACZ,MAAM,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO;QACjC,CAAC,CAAC,IAAA,WAAI,EAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,IAAI,WAAW,EAAE,QAAQ,CAAC;QAC3D,CAAC,CAAC,kBAAkB,QAAQ,EAAE,CAAC;IAEnC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,IAAA,cAAO,EAAC,UAAU,CAAC,CAAC;QAChC,IAAA,cAAS,EAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAEjC,IAAI,SAAS,EAAE,OAAO,EAAE,CAAC;QACvB,SAAS,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACpD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC;IAEnC,IAAI,MAAM,GAAyB,IAAI,CAAC,MAAM,CAAC;IAC/C,MAAM,OAAO,GAA6B,CAAC,MAAM,CAAC,CAAC;IAEnD,MAAM,mBAAmB,GAAa,EAAE,CAAC;IACzC,IAAI,cAAc,GAAkB,IAAI,CAAC;IAEzC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QACvC,MAAM,OAAO,GAAI,IAAe,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;QACnD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,EAAE,CAAC;YAC3C,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QACjC,cAAc,GAAG,IAAI,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;QACxC,IAAI,SAAS,EAAE,OAAO,EAAE,CAAC;YACvB,SAAS,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAC1C,CAAC;QACD,MAAM,cAAc,GAAG,IAAA,2BAAoB,EAAC;YAC1C,MAAM,EAAE;gBACN,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;aAC1C;SACF,CAAC,CAAC;QACH,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;QACvE,IAAI,SAAS,EAAE,OAAO,EAAE,CAAC;YACvB,SAAS,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QACzC,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAEnE,IAAI,SAAS,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CACb,kCAAkC,SAAS,CAAC,MAAM,gCAAgC;gBAChF,cAAc,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,kBAAkB;gBACrG,eAAe;gBACf,2EAA2E;gBAC3E,sGAAsG;gBACtG,mEAAmE,CACtE,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAA,uBAAc,EAAC,aAAa,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QAC5D,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;QAClC,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC;QAC1B,IAAI,SAAS,EAAE,UAAU,EAAE,CAAC;YAC1B,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAClC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACxC,IAAI,SAAS,EAAE,OAAO,EAAE,CAAC;YACvB,SAAS,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,WAAW,GAAG,IAAA,sBAAiB,EAAC,UAAU,CAAC,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEzB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;gBAC5B,IAAI,cAAc,KAAK,IAAI,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;oBACpD,MAAM,CACJ,IAAI,KAAK,CACP,MAAM,CAAC,eAAe,CACpB,cAAc,EACd,mBAAmB,EACnB,QAAQ,CACT,CACF,CACF,CAAC;gBACJ,CAAC;qBAAM,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;oBAC7D,MAAM,CACJ,IAAI,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,EAAE,mBAAmB,EAAE,QAAQ,CAAC,CAAC,CACpE,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC,CAAC,CAAC;YACH,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAChC,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBAChC,MAAM,CACJ,IAAI,KAAK,CACP,sCAAsC,GAAG,CAAC,OAAO,OAAO,MAAM,CAAC,cAAc,EAAE,CAChF,CACF,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,IACL,MAAM,CAAC,OAAO,CAAC,QAAQ,KAAK,IAAI;QAChC,MAAM,CAAC,OAAO,CAAC,QAAQ,KAAK,IAAI,EAChC,CAAC;QACD,IAAI,SAAS,EAAE,OAAO,EAAE,CAAC;YACvB,SAAS,CAAC,OAAO,CACf,gBAAgB,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CACxD,CAAC;QACJ,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACnC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,oBAAQ,CAAC;YAC5B,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,WAAW;YACtC,WAAW,EAAE;gBACX,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,eAAe,EAAE,QAAQ,CAAC,eAAe;aAC1C;YACD,GAAG,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC;SAC1D,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG,IAAI,oBAAW,EAAE,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEzB,MAAM,MAAM,GAAG,IAAI,oBAAM,CAAC;YACxB,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE;gBACN,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,GAAG,EAAE,UAAU;gBACf,IAAI,EAAE,WAAW;aAClB;SACF,CAAC,CAAC;QAEH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,IAAI,eAAe,GAAG,KAAK,CAAC;YAE5B,MAAM;iBACH,IAAI,EAAE;iBACN,IAAI,CAAC,GAAG,EAAE;gBACT,eAAe,GAAG,IAAI,CAAC;gBACvB,IAAI,cAAc,KAAK,IAAI,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;oBACpD,MAAM,CACJ,IAAI,KAAK,CACP,MAAM,CAAC,eAAe,CACpB,cAAc,EACd,mBAAmB,EACnB,QAAQ,CACT,CACF,CACF,CAAC;gBACJ,CAAC;qBAAM,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;oBAC7D,MAAM,CACJ,IAAI,KAAK,CACP,MAAM,CAAC,eAAe,CAAC,CAAC,EAAE,mBAAmB,EAAE,QAAQ,CAAC,CACzD,CACF,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC,CAAC;iBACD,KAAK,CAAC,MAAM,CAAC,CAAC;YAEjB,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBAChC,MAAM,CACJ,IAAI,KAAK,CACP,sCAAsC,GAAG,CAAC,OAAO,OAAO,MAAM,CAAC,cAAc,EAAE,CAChF,CACF,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACjC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;oBACpD,UAAU,CAAC,GAAG,EAAE;wBACd,IAAI,CAAC,eAAe,EAAE,CAAC;4BACrB,MAAM,CACJ,IAAI,KAAK,CACP,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,mBAAmB,EAAE,QAAQ,CAAC,CAC5D,CACF,CAAC;wBACJ,CAAC;oBACH,CAAC,EAAE,IAAI,CAAC,CAAC;gBACX,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;QACpD,IAAI,SAAS,EAAE,OAAO,EAAE,CAAC;YACvB,SAAS,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;QAC/C,CAAC;QACD,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;QACnD,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QAED,eAAU,CAAC,MAAM,CAAC;YAChB,UAAU,EAAE,gBAAgB,CAAC,SAAS;YACtC,OAAO,EAAE,gBAAgB,CAAC,MAAM;YAChC,UAAU,EAAE,gBAAgB,CAAC,SAAS;SACvC,CAAC,CAAC;QAEH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,IAAI,eAAe,GAAG,KAAK,CAAC;YAE5B,MAAM,YAAY,GAAG,eAAU,CAAC,QAAQ,CAAC,aAAa,CACpD;gBACE,aAAa,EAAE,KAAK;gBACpB,MAAM,EAAE,gBAAgB;gBACxB,SAAS,EAAE,UAAU,SAAS,IAAI,QAAQ,EAAE;aAC7C,EACD,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;gBAChB,eAAe,GAAG,IAAI,CAAC;gBACvB,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;gBACnC,CAAC;qBAAM,IAAI,cAAc,KAAK,IAAI,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;oBAC3D,MAAM,CACJ,IAAI,KAAK,CACP,MAAM,CAAC,eAAe,CACpB,cAAc,EACd,mBAAmB,EACnB,QAAQ,CACT,CACF,CACF,CAAC;gBACJ,CAAC;qBAAM,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;oBAC7D,MAAM,CACJ,IAAI,KAAK,CACP,MAAM,CAAC,eAAe,CAAC,CAAC,EAAE,mBAAmB,EAAE,QAAQ,CAAC,CACzD,CACF,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,IAAI,MAAM,EAAE,SAAS,EAAE,CAAC;wBACtB,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC;oBAChC,CAAC;oBACD,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC,CACF,CAAC;YAEF,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAE1B,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBAChC,MAAM,CACJ,IAAI,KAAK,CACP,sCAAsC,GAAG,CAAC,OAAO,OAAO,MAAM,CAAC,cAAc,EAAE,CAChF,CACF,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACjC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;oBACpD,UAAU,CAAC,GAAG,EAAE;wBACd,IAAI,CAAC,eAAe,EAAE,CAAC;4BACrB,MAAM,CACJ,IAAI,KAAK,CACP,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,mBAAmB,EAAE,QAAQ,CAAC,CAC5D,CACF,CAAC;wBACJ,CAAC;oBACH,CAAC,EAAE,IAAI,CAAC,CAAC;gBACX,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CACb,oBAAoB,MAAM,CAAC,OAAO,CAAC,QAAQ,yCAAyC,CACrF,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IAExC,IAAI,WAA+B,CAAC;IAEpC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,KAAK,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QACzE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YACnC,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,QAAQ,GAAG,IAAI,oBAAQ,CAAC;oBAC5B,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,WAAW;oBACtC,WAAW,EAAE;wBACX,WAAW,EAAE,QAAQ,CAAC,WAAW;wBACjC,eAAe,EAAE,QAAQ,CAAC,eAAe;qBAC1C;oBACD,GAAG,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC;iBAC1D,CAAC,CAAC;gBAEH,MAAM,OAAO,GAAG,IAAI,4BAAgB,CAAC;oBACnC,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,GAAG,EAAE,UAAU;iBAChB,CAAC,CAAC;gBAEH,WAAW,GAAG,MAAM,IAAA,mCAAY,EAAC,QAAQ,EAAE,OAAO,EAAE;oBAClD,SAAS,EAAE,MAAM;iBAClB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,WAAW,GAAG,SAAS,CAAC;QAC1B,CAAC;IACH,CAAC;SAAM,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;QACpD,WAAW,GAAG,eAAU,CAAC,GAAG,CAAC,UAAU,EAAE;YACvC,aAAa,EAAE,KAAK;YACpB,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,QAAQ;QACR,UAAU;QACV,IAAI,EAAE,SAAS;QACf,aAAa,EAAE,IAAA,uBAAc,EAAC,SAAS,CAAC;QACxC,QAAQ;QACR,WAAW;KACZ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { CLIConfig } from '../cli/utils/config';
|
|
2
|
+
export interface RestoreProgressCallback {
|
|
3
|
+
onProgress?: (bytesProcessed: number) => void;
|
|
4
|
+
onStage?: (stage: string) => void;
|
|
5
|
+
}
|
|
6
|
+
export interface RestoreStandaloneOptions {
|
|
7
|
+
storageKey: string;
|
|
8
|
+
target?: CLIConfig['database'];
|
|
9
|
+
}
|
|
10
|
+
export declare function restoreBackupStandalone(config: CLIConfig, options: RestoreStandaloneOptions, callbacks?: RestoreProgressCallback): Promise<void>;
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.restoreBackupStandalone = restoreBackupStandalone;
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const os_1 = require("os");
|
|
6
|
+
const path_1 = require("path");
|
|
7
|
+
const crypto_1 = require("crypto");
|
|
8
|
+
const zlib_1 = require("zlib");
|
|
9
|
+
const crypto_2 = require("crypto");
|
|
10
|
+
const s3_adapter_1 = require("../storage/adapters/s3.adapter");
|
|
11
|
+
const r2_adapter_1 = require("../storage/adapters/r2.adapter");
|
|
12
|
+
const cloudinary_adapter_1 = require("../storage/adapters/cloudinary.adapter");
|
|
13
|
+
const engines_1 = require("../engines");
|
|
14
|
+
function buildRemoteAdapter(storage) {
|
|
15
|
+
switch (storage.provider) {
|
|
16
|
+
case 's3': {
|
|
17
|
+
if (!storage.s3?.accessKeyId || !storage.s3?.secretAccessKey) {
|
|
18
|
+
throw new Error('S3 credentials are required');
|
|
19
|
+
}
|
|
20
|
+
return new s3_adapter_1.S3StorageAdapter({
|
|
21
|
+
endpoint: storage.s3.endpoint,
|
|
22
|
+
region: storage.s3.region,
|
|
23
|
+
bucket: storage.s3.bucket || '',
|
|
24
|
+
accessKeyId: storage.s3.accessKeyId,
|
|
25
|
+
secretAccessKey: storage.s3.secretAccessKey,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
case 'r2': {
|
|
29
|
+
if (!storage.s3?.accessKeyId || !storage.s3?.secretAccessKey) {
|
|
30
|
+
throw new Error('R2 credentials are required');
|
|
31
|
+
}
|
|
32
|
+
if (!storage.s3?.endpoint) {
|
|
33
|
+
throw new Error('R2 endpoint is required');
|
|
34
|
+
}
|
|
35
|
+
const accountId = storage.s3.endpoint.match(/https:\/\/([^.]+)/)?.[1];
|
|
36
|
+
if (!accountId) {
|
|
37
|
+
throw new Error('Invalid R2 endpoint format');
|
|
38
|
+
}
|
|
39
|
+
return new r2_adapter_1.R2StorageAdapter({
|
|
40
|
+
accountId,
|
|
41
|
+
bucket: storage.s3.bucket || '',
|
|
42
|
+
accessKeyId: storage.s3.accessKeyId,
|
|
43
|
+
secretAccessKey: storage.s3.secretAccessKey,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
case 'cloudinary': {
|
|
47
|
+
if (!storage.cloudinary?.cloudName ||
|
|
48
|
+
!storage.cloudinary?.apiKey ||
|
|
49
|
+
!storage.cloudinary?.apiSecret) {
|
|
50
|
+
throw new Error('Cloudinary credentials are required');
|
|
51
|
+
}
|
|
52
|
+
return new cloudinary_adapter_1.CloudinaryStorageAdapter({
|
|
53
|
+
cloudName: storage.cloudinary.cloudName,
|
|
54
|
+
apiKey: storage.cloudinary.apiKey,
|
|
55
|
+
apiSecret: storage.cloudinary.apiSecret,
|
|
56
|
+
folder: 'dbdock_backups',
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
default:
|
|
60
|
+
throw new Error(`Unknown storage provider: ${storage.provider}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
async function openSourceStream(config, storageKey, callbacks, tempFiles) {
|
|
64
|
+
if (callbacks?.onStage) {
|
|
65
|
+
callbacks.onStage('Downloading backup');
|
|
66
|
+
}
|
|
67
|
+
if (config.storage.provider === 'local') {
|
|
68
|
+
const localPath = storageKey.includes('/')
|
|
69
|
+
? storageKey
|
|
70
|
+
: (0, path_1.join)(config.storage.local?.path || './backups', storageKey);
|
|
71
|
+
if (!(0, fs_1.existsSync)(localPath)) {
|
|
72
|
+
throw new Error(`Backup file not found: ${localPath}`);
|
|
73
|
+
}
|
|
74
|
+
return (0, fs_1.createReadStream)(localPath);
|
|
75
|
+
}
|
|
76
|
+
const adapter = buildRemoteAdapter(config.storage);
|
|
77
|
+
const tempFilePath = (0, path_1.join)((0, os_1.tmpdir)(), `dbdock-restore-${(0, crypto_1.randomBytes)(8).toString('hex')}.bin`);
|
|
78
|
+
tempFiles.push(tempFilePath);
|
|
79
|
+
const downloadStream = await adapter.downloadStream({ key: storageKey });
|
|
80
|
+
const tempWriteStream = (0, fs_1.createWriteStream)(tempFilePath);
|
|
81
|
+
let downloadedBytes = 0;
|
|
82
|
+
downloadStream.on('data', (chunk) => {
|
|
83
|
+
downloadedBytes += chunk.length;
|
|
84
|
+
if (callbacks?.onProgress) {
|
|
85
|
+
callbacks.onProgress(downloadedBytes);
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
await new Promise((resolve, reject) => {
|
|
89
|
+
downloadStream.pipe(tempWriteStream);
|
|
90
|
+
downloadStream.on('error', reject);
|
|
91
|
+
tempWriteStream.on('error', reject);
|
|
92
|
+
tempWriteStream.on('finish', resolve);
|
|
93
|
+
});
|
|
94
|
+
return (0, fs_1.createReadStream)(tempFilePath);
|
|
95
|
+
}
|
|
96
|
+
async function restoreBackupStandalone(config, options, callbacks) {
|
|
97
|
+
const engine = (0, engines_1.getEngine)(config.database.type);
|
|
98
|
+
const target = options.target || config.database;
|
|
99
|
+
const tempFiles = [];
|
|
100
|
+
const cleanup = () => {
|
|
101
|
+
for (const file of tempFiles) {
|
|
102
|
+
if ((0, fs_1.existsSync)(file)) {
|
|
103
|
+
(0, fs_1.unlinkSync)(file);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
try {
|
|
108
|
+
let stream = await openSourceStream(config, options.storageKey, callbacks, tempFiles);
|
|
109
|
+
if (config.backup?.encryption?.enabled && config.backup.encryption.key) {
|
|
110
|
+
if (callbacks?.onStage) {
|
|
111
|
+
callbacks.onStage('Decrypting backup');
|
|
112
|
+
}
|
|
113
|
+
const keyBuffer = Buffer.from(config.backup.encryption.key, 'hex');
|
|
114
|
+
if (keyBuffer.length !== 32) {
|
|
115
|
+
throw new Error(`Invalid encryption key length: ${keyBuffer.length} bytes (expected 32 bytes)`);
|
|
116
|
+
}
|
|
117
|
+
const iv = Buffer.alloc(16);
|
|
118
|
+
const decipher = (0, crypto_2.createDecipheriv)('aes-256-cbc', keyBuffer, iv);
|
|
119
|
+
stream = stream.pipe(decipher);
|
|
120
|
+
}
|
|
121
|
+
if (config.backup?.compression?.enabled) {
|
|
122
|
+
if (callbacks?.onStage) {
|
|
123
|
+
callbacks.onStage('Decompressing backup');
|
|
124
|
+
}
|
|
125
|
+
stream = stream.pipe((0, zlib_1.createBrotliDecompress)());
|
|
126
|
+
}
|
|
127
|
+
if (callbacks?.onStage) {
|
|
128
|
+
callbacks.onStage('Restoring to database');
|
|
129
|
+
}
|
|
130
|
+
const restoreProcess = engine.spawnRestore(target);
|
|
131
|
+
stream.pipe(restoreProcess.stdin);
|
|
132
|
+
await new Promise((resolve, reject) => {
|
|
133
|
+
let errorOutput = '';
|
|
134
|
+
let hasWarnings = false;
|
|
135
|
+
stream.on('error', (err) => {
|
|
136
|
+
reject(new Error(`Failed to read backup data: ${err.message}`));
|
|
137
|
+
});
|
|
138
|
+
restoreProcess.stderr.on('data', (data) => {
|
|
139
|
+
const message = data.toString();
|
|
140
|
+
if (engine.shouldIgnoreRestoreMessage(message)) {
|
|
141
|
+
hasWarnings = true;
|
|
142
|
+
}
|
|
143
|
+
else if (message.trim()) {
|
|
144
|
+
errorOutput += message;
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
restoreProcess.on('error', (err) => {
|
|
148
|
+
reject(new Error(`Failed to start the restore process: ${err.message}\n\n${engine.clientToolHint}`));
|
|
149
|
+
});
|
|
150
|
+
restoreProcess.on('close', (code) => {
|
|
151
|
+
if (code === 0 || (code === 1 && !errorOutput && hasWarnings)) {
|
|
152
|
+
resolve();
|
|
153
|
+
}
|
|
154
|
+
else if (errorOutput) {
|
|
155
|
+
reject(new Error(engine.formatRestoreError(errorOutput)));
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
reject(new Error(`Restore exited with code ${code}`));
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
finally {
|
|
164
|
+
cleanup();
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=restore-standalone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restore-standalone.js","sourceRoot":"","sources":["../../src/standalone/restore-standalone.ts"],"names":[],"mappings":"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"}
|
|
@@ -114,14 +114,16 @@ let CloudinaryStorageAdapter = CloudinaryStorageAdapter_1 = class CloudinaryStor
|
|
|
114
114
|
}
|
|
115
115
|
async listObjects(options) {
|
|
116
116
|
try {
|
|
117
|
-
const searchPrefix = options?.prefix
|
|
118
|
-
|
|
117
|
+
const searchPrefix = options?.prefix
|
|
118
|
+
? `${this.folder}/${options.prefix}`
|
|
119
|
+
: this.folder;
|
|
120
|
+
const result = (await cloudinary_1.v2.api.resources({
|
|
119
121
|
type: 'upload',
|
|
120
122
|
resource_type: 'raw',
|
|
121
123
|
prefix: searchPrefix,
|
|
122
124
|
max_results: options?.maxKeys || 500,
|
|
123
125
|
next_cursor: options?.startAfter,
|
|
124
|
-
});
|
|
126
|
+
}));
|
|
125
127
|
if (!result.resources || result.resources.length === 0) {
|
|
126
128
|
this.logger.warn(`No resources found with prefix: ${searchPrefix}`);
|
|
127
129
|
return [];
|
|
@@ -155,13 +157,13 @@ let CloudinaryStorageAdapter = CloudinaryStorageAdapter_1 = class CloudinaryStor
|
|
|
155
157
|
throw cleanError;
|
|
156
158
|
}
|
|
157
159
|
}
|
|
158
|
-
|
|
160
|
+
generatePresignedUrl(options) {
|
|
159
161
|
try {
|
|
160
162
|
const url = cloudinary_1.v2.url(options.key, {
|
|
161
163
|
resource_type: 'raw',
|
|
162
164
|
type: 'upload',
|
|
163
165
|
});
|
|
164
|
-
return url;
|
|
166
|
+
return Promise.resolve(url);
|
|
165
167
|
}
|
|
166
168
|
catch (error) {
|
|
167
169
|
const friendlyMessage = this.getFriendlyError(error);
|
|
@@ -179,7 +181,8 @@ let CloudinaryStorageAdapter = CloudinaryStorageAdapter_1 = class CloudinaryStor
|
|
|
179
181
|
return true;
|
|
180
182
|
}
|
|
181
183
|
catch (error) {
|
|
182
|
-
|
|
184
|
+
const e = error;
|
|
185
|
+
if (e.error?.http_code === 404) {
|
|
183
186
|
return false;
|
|
184
187
|
}
|
|
185
188
|
throw error;
|
|
@@ -189,7 +192,9 @@ let CloudinaryStorageAdapter = CloudinaryStorageAdapter_1 = class CloudinaryStor
|
|
|
189
192
|
const err = error;
|
|
190
193
|
const message = err?.message || '';
|
|
191
194
|
const httpCode = err?.error?.http_code;
|
|
192
|
-
if (httpCode === 401 ||
|
|
195
|
+
if (httpCode === 401 ||
|
|
196
|
+
message.includes('Invalid API key') ||
|
|
197
|
+
message.includes('authentication')) {
|
|
193
198
|
return 'Invalid storage configuration: Authentication failed. Please verify your Cloudinary API key and secret are correct.';
|
|
194
199
|
}
|
|
195
200
|
if (httpCode === 403) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloudinary.adapter.js","sourceRoot":"","sources":["../../../src/storage/adapters/cloudinary.adapter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAoD;AACpD,2CAAiE;
|
|
1
|
+
{"version":3,"file":"cloudinary.adapter.js","sourceRoot":"","sources":["../../../src/storage/adapters/cloudinary.adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -57,14 +57,15 @@ let LocalStorageAdapter = LocalStorageAdapter_1 = class LocalStorageAdapter {
|
|
|
57
57
|
basePath;
|
|
58
58
|
constructor(basePath) {
|
|
59
59
|
this.basePath = basePath;
|
|
60
|
-
this.ensureBasePathExists();
|
|
60
|
+
void this.ensureBasePathExists();
|
|
61
61
|
}
|
|
62
62
|
async ensureBasePathExists() {
|
|
63
63
|
try {
|
|
64
64
|
await mkdir(this.basePath, { recursive: true });
|
|
65
65
|
}
|
|
66
66
|
catch (error) {
|
|
67
|
-
|
|
67
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
68
|
+
this.logger.error(`Failed to create base path: ${msg}`);
|
|
68
69
|
throw error;
|
|
69
70
|
}
|
|
70
71
|
}
|
|
@@ -113,16 +114,18 @@ let LocalStorageAdapter = LocalStorageAdapter_1 = class LocalStorageAdapter {
|
|
|
113
114
|
resolve({ key: options.key });
|
|
114
115
|
}
|
|
115
116
|
catch (error) {
|
|
116
|
-
reject(error);
|
|
117
|
+
reject(error instanceof Error ? error : new Error(String(error)));
|
|
117
118
|
}
|
|
118
119
|
};
|
|
119
120
|
stream.on('error', handleError);
|
|
120
121
|
writeStream.on('error', handleError);
|
|
121
|
-
writeStream.on('finish',
|
|
122
|
+
writeStream.on('finish', () => {
|
|
123
|
+
void handleFinish();
|
|
124
|
+
});
|
|
122
125
|
writeStream.on('close', () => {
|
|
123
126
|
if (!finished && !hasError) {
|
|
124
127
|
this.logger.warn('WriteStream closed without finish event');
|
|
125
|
-
handleFinish();
|
|
128
|
+
void handleFinish();
|
|
126
129
|
}
|
|
127
130
|
});
|
|
128
131
|
const pipe = stream.pipe(writeStream);
|
|
@@ -132,12 +135,12 @@ let LocalStorageAdapter = LocalStorageAdapter_1 = class LocalStorageAdapter {
|
|
|
132
135
|
});
|
|
133
136
|
});
|
|
134
137
|
}
|
|
135
|
-
|
|
138
|
+
downloadStream(options) {
|
|
136
139
|
const fullPath = this.getFullPath(options.key);
|
|
137
140
|
if (!fs.existsSync(fullPath)) {
|
|
138
|
-
|
|
141
|
+
return Promise.reject(new Error(`Object not found: ${options.key}`));
|
|
139
142
|
}
|
|
140
|
-
return fs.createReadStream(fullPath);
|
|
143
|
+
return Promise.resolve(fs.createReadStream(fullPath));
|
|
141
144
|
}
|
|
142
145
|
async listObjects(options) {
|
|
143
146
|
const prefix = options?.prefix || '';
|
|
@@ -197,13 +200,13 @@ let LocalStorageAdapter = LocalStorageAdapter_1 = class LocalStorageAdapter {
|
|
|
197
200
|
await unlink(metadataPath);
|
|
198
201
|
}
|
|
199
202
|
}
|
|
200
|
-
|
|
203
|
+
generatePresignedUrl(options) {
|
|
201
204
|
const fullPath = this.getFullPath(options.key);
|
|
202
|
-
return `file://${fullPath}
|
|
205
|
+
return Promise.resolve(`file://${fullPath}`);
|
|
203
206
|
}
|
|
204
|
-
|
|
207
|
+
objectExists(key) {
|
|
205
208
|
const fullPath = this.getFullPath(key);
|
|
206
|
-
return fs.existsSync(fullPath);
|
|
209
|
+
return Promise.resolve(fs.existsSync(fullPath));
|
|
207
210
|
}
|
|
208
211
|
};
|
|
209
212
|
exports.LocalStorageAdapter = LocalStorageAdapter;
|