dbdock 1.1.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.
Files changed (156) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +596 -0
  3. package/dist/alerts/alert-templates.d.ts +3 -0
  4. package/dist/alerts/alert-templates.js +95 -0
  5. package/dist/alerts/alert-templates.js.map +1 -0
  6. package/dist/alerts/alert.module.d.ts +2 -0
  7. package/dist/alerts/alert.module.js +23 -0
  8. package/dist/alerts/alert.module.js.map +1 -0
  9. package/dist/alerts/alert.service.d.ts +23 -0
  10. package/dist/alerts/alert.service.js +210 -0
  11. package/dist/alerts/alert.service.js.map +1 -0
  12. package/dist/alerts/alert.types.d.ts +24 -0
  13. package/dist/alerts/alert.types.js +11 -0
  14. package/dist/alerts/alert.types.js.map +1 -0
  15. package/dist/app.module.d.ts +2 -0
  16. package/dist/app.module.js +34 -0
  17. package/dist/app.module.js.map +1 -0
  18. package/dist/backup/backup.module.d.ts +2 -0
  19. package/dist/backup/backup.module.js +26 -0
  20. package/dist/backup/backup.module.js.map +1 -0
  21. package/dist/backup/backup.service.d.ts +23 -0
  22. package/dist/backup/backup.service.js +303 -0
  23. package/dist/backup/backup.service.js.map +1 -0
  24. package/dist/backup/backup.types.d.ts +42 -0
  25. package/dist/backup/backup.types.js +16 -0
  26. package/dist/backup/backup.types.js.map +1 -0
  27. package/dist/backup/compression.service.d.ts +6 -0
  28. package/dist/backup/compression.service.js +30 -0
  29. package/dist/backup/compression.service.js.map +1 -0
  30. package/dist/cli/commands/backup.d.ts +8 -0
  31. package/dist/cli/commands/backup.js +198 -0
  32. package/dist/cli/commands/backup.js.map +1 -0
  33. package/dist/cli/commands/cleanup.d.ts +6 -0
  34. package/dist/cli/commands/cleanup.js +160 -0
  35. package/dist/cli/commands/cleanup.js.map +1 -0
  36. package/dist/cli/commands/delete.d.ts +6 -0
  37. package/dist/cli/commands/delete.js +252 -0
  38. package/dist/cli/commands/delete.js.map +1 -0
  39. package/dist/cli/commands/init.d.ts +1 -0
  40. package/dist/cli/commands/init.js +534 -0
  41. package/dist/cli/commands/init.js.map +1 -0
  42. package/dist/cli/commands/list.d.ts +8 -0
  43. package/dist/cli/commands/list.js +288 -0
  44. package/dist/cli/commands/list.js.map +1 -0
  45. package/dist/cli/commands/restore.d.ts +1 -0
  46. package/dist/cli/commands/restore.js +637 -0
  47. package/dist/cli/commands/restore.js.map +1 -0
  48. package/dist/cli/commands/schedule.d.ts +1 -0
  49. package/dist/cli/commands/schedule.js +197 -0
  50. package/dist/cli/commands/schedule.js.map +1 -0
  51. package/dist/cli/commands/start.d.ts +7 -0
  52. package/dist/cli/commands/start.js +267 -0
  53. package/dist/cli/commands/start.js.map +1 -0
  54. package/dist/cli/commands/status.d.ts +1 -0
  55. package/dist/cli/commands/status.js +46 -0
  56. package/dist/cli/commands/status.js.map +1 -0
  57. package/dist/cli/commands/test.d.ts +1 -0
  58. package/dist/cli/commands/test.js +212 -0
  59. package/dist/cli/commands/test.js.map +1 -0
  60. package/dist/cli/index.d.ts +2 -0
  61. package/dist/cli/index.js +78 -0
  62. package/dist/cli/index.js.map +1 -0
  63. package/dist/cli/utils/config.d.ts +80 -0
  64. package/dist/cli/utils/config.js +29 -0
  65. package/dist/cli/utils/config.js.map +1 -0
  66. package/dist/cli/utils/logger.d.ts +7 -0
  67. package/dist/cli/utils/logger.js +15 -0
  68. package/dist/cli/utils/logger.js.map +1 -0
  69. package/dist/cli/utils/progress.d.ts +21 -0
  70. package/dist/cli/utils/progress.js +130 -0
  71. package/dist/cli/utils/progress.js.map +1 -0
  72. package/dist/cli/utils/retention.d.ts +26 -0
  73. package/dist/cli/utils/retention.js +118 -0
  74. package/dist/cli/utils/retention.js.map +1 -0
  75. package/dist/config/config.module.d.ts +2 -0
  76. package/dist/config/config.module.js +29 -0
  77. package/dist/config/config.module.js.map +1 -0
  78. package/dist/config/config.schema.d.ts +56 -0
  79. package/dist/config/config.schema.js +219 -0
  80. package/dist/config/config.schema.js.map +1 -0
  81. package/dist/config/config.service.d.ts +13 -0
  82. package/dist/config/config.service.js +160 -0
  83. package/dist/config/config.service.js.map +1 -0
  84. package/dist/crypto/crypto.module.d.ts +2 -0
  85. package/dist/crypto/crypto.module.js +21 -0
  86. package/dist/crypto/crypto.module.js.map +1 -0
  87. package/dist/crypto/crypto.service.d.ts +22 -0
  88. package/dist/crypto/crypto.service.js +187 -0
  89. package/dist/crypto/crypto.service.js.map +1 -0
  90. package/dist/dbdock.d.ts +10 -0
  91. package/dist/dbdock.js +36 -0
  92. package/dist/dbdock.js.map +1 -0
  93. package/dist/index.d.ts +33 -0
  94. package/dist/index.js +77 -0
  95. package/dist/index.js.map +1 -0
  96. package/dist/main.d.ts +1 -0
  97. package/dist/main.js +10 -0
  98. package/dist/main.js.map +1 -0
  99. package/dist/scheduler/schedule-manager.d.ts +22 -0
  100. package/dist/scheduler/schedule-manager.js +126 -0
  101. package/dist/scheduler/schedule-manager.js.map +1 -0
  102. package/dist/scheduler/scheduler.module.d.ts +2 -0
  103. package/dist/scheduler/scheduler.module.js +25 -0
  104. package/dist/scheduler/scheduler.module.js.map +1 -0
  105. package/dist/scheduler/scheduler.service.d.ts +28 -0
  106. package/dist/scheduler/scheduler.service.js +171 -0
  107. package/dist/scheduler/scheduler.service.js.map +1 -0
  108. package/dist/standalone/backup-standalone.d.ts +14 -0
  109. package/dist/standalone/backup-standalone.js +364 -0
  110. package/dist/standalone/backup-standalone.js.map +1 -0
  111. package/dist/storage/adapters/cloudinary.adapter.d.ts +23 -0
  112. package/dist/storage/adapters/cloudinary.adapter.js +215 -0
  113. package/dist/storage/adapters/cloudinary.adapter.js.map +1 -0
  114. package/dist/storage/adapters/local.adapter.d.ts +20 -0
  115. package/dist/storage/adapters/local.adapter.js +214 -0
  116. package/dist/storage/adapters/local.adapter.js.map +1 -0
  117. package/dist/storage/adapters/r2.adapter.d.ts +10 -0
  118. package/dist/storage/adapters/r2.adapter.js +33 -0
  119. package/dist/storage/adapters/r2.adapter.js.map +1 -0
  120. package/dist/storage/adapters/s3.adapter.d.ts +26 -0
  121. package/dist/storage/adapters/s3.adapter.js +199 -0
  122. package/dist/storage/adapters/s3.adapter.js.map +1 -0
  123. package/dist/storage/storage.interface.d.ts +38 -0
  124. package/dist/storage/storage.interface.js +3 -0
  125. package/dist/storage/storage.interface.js.map +1 -0
  126. package/dist/storage/storage.module.d.ts +2 -0
  127. package/dist/storage/storage.module.js +21 -0
  128. package/dist/storage/storage.module.js.map +1 -0
  129. package/dist/storage/storage.service.d.ts +10 -0
  130. package/dist/storage/storage.service.js +89 -0
  131. package/dist/storage/storage.service.js.map +1 -0
  132. package/dist/utils/logger.d.ts +12 -0
  133. package/dist/utils/logger.js +41 -0
  134. package/dist/utils/logger.js.map +1 -0
  135. package/dist/utils/stream.pipe.d.ts +17 -0
  136. package/dist/utils/stream.pipe.js +54 -0
  137. package/dist/utils/stream.pipe.js.map +1 -0
  138. package/dist/wal/postgres-config.helper.d.ts +5 -0
  139. package/dist/wal/postgres-config.helper.js +117 -0
  140. package/dist/wal/postgres-config.helper.js.map +1 -0
  141. package/dist/wal/retention.service.d.ts +23 -0
  142. package/dist/wal/retention.service.js +158 -0
  143. package/dist/wal/retention.service.js.map +1 -0
  144. package/dist/wal/retention.types.d.ts +20 -0
  145. package/dist/wal/retention.types.js +3 -0
  146. package/dist/wal/retention.types.js.map +1 -0
  147. package/dist/wal/wal-archiver.service.d.ts +28 -0
  148. package/dist/wal/wal-archiver.service.js +263 -0
  149. package/dist/wal/wal-archiver.service.js.map +1 -0
  150. package/dist/wal/wal.module.d.ts +2 -0
  151. package/dist/wal/wal.module.js +26 -0
  152. package/dist/wal/wal.module.js.map +1 -0
  153. package/dist/wal/wal.types.d.ts +27 -0
  154. package/dist/wal/wal.types.js +11 -0
  155. package/dist/wal/wal.types.js.map +1 -0
  156. package/package.json +155 -0
@@ -0,0 +1,534 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.initCommand = initCommand;
7
+ const inquirer_1 = __importDefault(require("inquirer"));
8
+ const config_1 = require("../utils/config");
9
+ const logger_1 = require("../utils/logger");
10
+ const common_1 = require("@nestjs/common");
11
+ const fs_1 = require("fs");
12
+ const path_1 = require("path");
13
+ common_1.Logger.overrideLogger(false);
14
+ async function initCommand() {
15
+ logger_1.logger.info('DBDock Setup Wizard');
16
+ if ((0, config_1.configExists)()) {
17
+ const { overwrite } = (await inquirer_1.default.prompt([
18
+ {
19
+ type: 'confirm',
20
+ name: 'overwrite',
21
+ message: `${config_1.CONFIG_FILE} already exists. Overwrite?`,
22
+ default: false,
23
+ },
24
+ ]));
25
+ if (!overwrite) {
26
+ logger_1.logger.warn('Setup cancelled');
27
+ return;
28
+ }
29
+ }
30
+ const answers = (await inquirer_1.default.prompt([
31
+ {
32
+ type: 'list',
33
+ name: 'dbType',
34
+ message: 'Select database type:',
35
+ choices: [{ name: 'PostgreSQL', value: 'postgres' }],
36
+ default: 'postgres',
37
+ },
38
+ {
39
+ type: 'input',
40
+ name: 'host',
41
+ message: 'Database host:',
42
+ default: 'localhost',
43
+ },
44
+ {
45
+ type: 'number',
46
+ name: 'port',
47
+ message: 'Database port:',
48
+ default: 5432,
49
+ },
50
+ {
51
+ type: 'input',
52
+ name: 'username',
53
+ message: 'Database username:',
54
+ default: 'postgres',
55
+ },
56
+ {
57
+ type: 'password',
58
+ name: 'password',
59
+ message: 'Database password:',
60
+ },
61
+ {
62
+ type: 'input',
63
+ name: 'database',
64
+ message: 'Database name:',
65
+ },
66
+ {
67
+ type: 'list',
68
+ name: 'backupFormat',
69
+ message: 'Select backup format:',
70
+ choices: [
71
+ {
72
+ name: 'Custom format (compressed binary, recommended)',
73
+ value: 'custom',
74
+ },
75
+ { name: 'Plain SQL (text format)', value: 'plain' },
76
+ { name: 'Directory format (parallel dump)', value: 'directory' },
77
+ { name: 'Tar archive', value: 'tar' },
78
+ ],
79
+ default: 'custom',
80
+ },
81
+ {
82
+ type: 'list',
83
+ name: 'storageProvider',
84
+ message: 'Select storage provider:',
85
+ choices: [
86
+ { name: 'Local Filesystem', value: 'local' },
87
+ { name: 'AWS S3', value: 's3' },
88
+ { name: 'Cloudflare R2 (S3-compatible)', value: 'r2' },
89
+ { name: 'Cloudinary', value: 'cloudinary' },
90
+ ],
91
+ default: 'local',
92
+ },
93
+ {
94
+ type: 'input',
95
+ name: 'localPath',
96
+ message: 'Local storage path:',
97
+ default: './backups',
98
+ when: (answers) => answers.storageProvider === 'local',
99
+ },
100
+ {
101
+ type: 'input',
102
+ name: 's3Bucket',
103
+ message: 'S3/R2 bucket name:',
104
+ when: (answers) => answers.storageProvider === 's3' || answers.storageProvider === 'r2',
105
+ },
106
+ {
107
+ type: 'list',
108
+ name: 's3Region',
109
+ message: 'S3 region:',
110
+ choices: [
111
+ { name: 'US East (N. Virginia) - us-east-1', value: 'us-east-1' },
112
+ { name: 'US East (Ohio) - us-east-2', value: 'us-east-2' },
113
+ { name: 'US West (N. California) - us-west-1', value: 'us-west-1' },
114
+ { name: 'US West (Oregon) - us-west-2', value: 'us-west-2' },
115
+ { name: 'Europe (Ireland) - eu-west-1', value: 'eu-west-1' },
116
+ { name: 'Europe (London) - eu-west-2', value: 'eu-west-2' },
117
+ { name: 'Europe (Frankfurt) - eu-central-1', value: 'eu-central-1' },
118
+ {
119
+ name: 'Asia Pacific (Singapore) - ap-southeast-1',
120
+ value: 'ap-southeast-1',
121
+ },
122
+ {
123
+ name: 'Asia Pacific (Tokyo) - ap-northeast-1',
124
+ value: 'ap-northeast-1',
125
+ },
126
+ {
127
+ name: 'Asia Pacific (Sydney) - ap-southeast-2',
128
+ value: 'ap-southeast-2',
129
+ },
130
+ ],
131
+ default: 'us-east-1',
132
+ when: (answers) => answers.storageProvider === 's3',
133
+ },
134
+ {
135
+ type: 'input',
136
+ name: 's3Region',
137
+ message: 'R2 region:',
138
+ default: 'auto',
139
+ when: (answers) => answers.storageProvider === 'r2',
140
+ },
141
+ {
142
+ type: 'input',
143
+ name: 's3Endpoint',
144
+ message: 'R2 endpoint (e.g., https://YOUR_ACCOUNT_ID.r2.cloudflarestorage.com):',
145
+ when: (answers) => answers.storageProvider === 'r2',
146
+ },
147
+ {
148
+ type: 'input',
149
+ name: 's3AccessKey',
150
+ message: 'Access key ID:',
151
+ when: (answers) => answers.storageProvider === 's3' || answers.storageProvider === 'r2',
152
+ },
153
+ {
154
+ type: 'password',
155
+ name: 's3SecretKey',
156
+ message: 'Secret access key:',
157
+ when: (answers) => answers.storageProvider === 's3' || answers.storageProvider === 'r2',
158
+ },
159
+ {
160
+ type: 'input',
161
+ name: 'cloudinaryCloudName',
162
+ message: 'Cloudinary cloud name:',
163
+ when: (answers) => answers.storageProvider === 'cloudinary',
164
+ },
165
+ {
166
+ type: 'input',
167
+ name: 'cloudinaryApiKey',
168
+ message: 'Cloudinary API key:',
169
+ when: (answers) => answers.storageProvider === 'cloudinary',
170
+ },
171
+ {
172
+ type: 'password',
173
+ name: 'cloudinaryApiSecret',
174
+ message: 'Cloudinary API secret:',
175
+ when: (answers) => answers.storageProvider === 'cloudinary',
176
+ },
177
+ {
178
+ type: 'confirm',
179
+ name: 'enableEncryption',
180
+ message: 'Enable encryption?',
181
+ default: false,
182
+ },
183
+ {
184
+ type: 'input',
185
+ name: 'encryptionKey',
186
+ message: 'Create your encryption key (64-char hex, run: openssl rand -hex 32):',
187
+ when: (answers) => answers.enableEncryption,
188
+ validate: (input) => {
189
+ if (!/^[0-9a-fA-F]{64}$/.test(input)) {
190
+ return 'Encryption key must be a 64-character hexadecimal string. Generate with: openssl rand -hex 32';
191
+ }
192
+ return true;
193
+ },
194
+ },
195
+ {
196
+ type: 'confirm',
197
+ name: 'enableCompression',
198
+ message: 'Enable compression?',
199
+ default: true,
200
+ },
201
+ {
202
+ type: 'list',
203
+ name: 'compressionLevel',
204
+ message: 'Compression level:',
205
+ choices: [
206
+ { name: '1 - Fastest (least compression)', value: '1' },
207
+ { name: '3 - Fast', value: '3' },
208
+ { name: '6 - Balanced (recommended)', value: '6' },
209
+ { name: '9 - Best compression (slowest)', value: '9' },
210
+ { name: '11 - Maximum compression', value: '11' },
211
+ ],
212
+ default: '6',
213
+ when: (answers) => answers.enableCompression,
214
+ },
215
+ {
216
+ type: 'confirm',
217
+ name: 'enableRetention',
218
+ message: 'Enable automatic backup cleanup (retention policy)?',
219
+ default: true,
220
+ },
221
+ {
222
+ type: 'number',
223
+ name: 'maxBackups',
224
+ message: 'Maximum number of backups to keep:',
225
+ default: 100,
226
+ when: (answers) => answers.enableRetention,
227
+ validate: (input) => {
228
+ if (input < 1) {
229
+ return 'Must keep at least 1 backup';
230
+ }
231
+ return true;
232
+ },
233
+ },
234
+ {
235
+ type: 'number',
236
+ name: 'maxAgeDays',
237
+ message: 'Delete backups older than (days):',
238
+ default: 30,
239
+ when: (answers) => answers.enableRetention,
240
+ validate: (input) => {
241
+ if (input < 1) {
242
+ return 'Must be at least 1 day';
243
+ }
244
+ return true;
245
+ },
246
+ },
247
+ {
248
+ type: 'number',
249
+ name: 'minBackups',
250
+ message: 'Minimum backups to always keep (safety net):',
251
+ default: 5,
252
+ when: (answers) => answers.enableRetention,
253
+ validate: (input) => {
254
+ if (input < 1) {
255
+ return 'Must keep at least 1 backup';
256
+ }
257
+ return true;
258
+ },
259
+ },
260
+ {
261
+ type: 'confirm',
262
+ name: 'runRetentionAfterBackup',
263
+ message: 'Run cleanup automatically after each backup?',
264
+ default: true,
265
+ when: (answers) => answers.enableRetention,
266
+ },
267
+ {
268
+ type: 'confirm',
269
+ name: 'enableEmailAlerts',
270
+ message: 'Enable email alerts? (only works with programmatic/NestJS usage and cron schedules)',
271
+ default: false,
272
+ },
273
+ {
274
+ type: 'input',
275
+ name: 'smtpHost',
276
+ message: 'SMTP host:',
277
+ default: 'smtp.gmail.com',
278
+ when: (answers) => answers.enableEmailAlerts,
279
+ },
280
+ {
281
+ type: 'number',
282
+ name: 'smtpPort',
283
+ message: 'SMTP port:',
284
+ default: 587,
285
+ when: (answers) => answers.enableEmailAlerts,
286
+ },
287
+ {
288
+ type: 'confirm',
289
+ name: 'smtpSecure',
290
+ message: 'Use secure connection (TLS)?',
291
+ default: false,
292
+ when: (answers) => answers.enableEmailAlerts,
293
+ },
294
+ {
295
+ type: 'input',
296
+ name: 'smtpUser',
297
+ message: 'SMTP username/email:',
298
+ when: (answers) => answers.enableEmailAlerts,
299
+ validate: (input) => {
300
+ if (!input.trim()) {
301
+ return 'SMTP username is required';
302
+ }
303
+ return true;
304
+ },
305
+ },
306
+ {
307
+ type: 'password',
308
+ name: 'smtpPassword',
309
+ message: 'SMTP password/app password:',
310
+ when: (answers) => answers.enableEmailAlerts,
311
+ validate: (input) => {
312
+ if (!input.trim()) {
313
+ return 'SMTP password is required';
314
+ }
315
+ return true;
316
+ },
317
+ },
318
+ {
319
+ type: 'input',
320
+ name: 'emailFrom',
321
+ message: 'From email address:',
322
+ when: (answers) => answers.enableEmailAlerts,
323
+ validate: (input) => {
324
+ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
325
+ if (!emailRegex.test(input)) {
326
+ return 'Please enter a valid email address';
327
+ }
328
+ return true;
329
+ },
330
+ },
331
+ {
332
+ type: 'input',
333
+ name: 'emailTo',
334
+ message: 'To email address(es) (comma-separated):',
335
+ when: (answers) => answers.enableEmailAlerts,
336
+ validate: (input) => {
337
+ const emails = input.split(',').map((e) => e.trim());
338
+ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
339
+ const allValid = emails.every((email) => emailRegex.test(email));
340
+ if (!allValid) {
341
+ return 'Please enter valid email address(es) separated by commas';
342
+ }
343
+ return true;
344
+ },
345
+ },
346
+ ]));
347
+ const config = {
348
+ database: {
349
+ type: answers.dbType,
350
+ host: answers.host,
351
+ port: answers.port,
352
+ username: answers.username,
353
+ password: answers.password,
354
+ database: answers.database,
355
+ },
356
+ backup: {
357
+ format: answers.backupFormat,
358
+ compression: {
359
+ enabled: answers.enableCompression,
360
+ level: answers.enableCompression
361
+ ? parseInt(answers.compressionLevel || '6')
362
+ : undefined,
363
+ },
364
+ encryption: {
365
+ enabled: answers.enableEncryption,
366
+ key: answers.encryptionKey,
367
+ },
368
+ ...(answers.enableRetention && {
369
+ retention: {
370
+ enabled: true,
371
+ maxBackups: answers.maxBackups,
372
+ maxAgeDays: answers.maxAgeDays,
373
+ minBackups: answers.minBackups,
374
+ runAfterBackup: answers.runRetentionAfterBackup,
375
+ },
376
+ }),
377
+ },
378
+ storage: {
379
+ provider: answers.storageProvider,
380
+ ...(answers.storageProvider === 'local' &&
381
+ answers.localPath && {
382
+ local: { path: answers.localPath },
383
+ }),
384
+ ...((answers.storageProvider === 's3' ||
385
+ answers.storageProvider === 'r2') &&
386
+ answers.s3Bucket &&
387
+ answers.s3Region &&
388
+ answers.s3AccessKey &&
389
+ answers.s3SecretKey && {
390
+ s3: {
391
+ bucket: answers.s3Bucket,
392
+ region: answers.s3Region,
393
+ accessKeyId: answers.s3AccessKey,
394
+ secretAccessKey: answers.s3SecretKey,
395
+ ...(answers.s3Endpoint && { endpoint: answers.s3Endpoint }),
396
+ },
397
+ }),
398
+ ...(answers.storageProvider === 'cloudinary' &&
399
+ answers.cloudinaryCloudName &&
400
+ answers.cloudinaryApiKey &&
401
+ answers.cloudinaryApiSecret && {
402
+ cloudinary: {
403
+ cloudName: answers.cloudinaryCloudName,
404
+ apiKey: answers.cloudinaryApiKey,
405
+ apiSecret: answers.cloudinaryApiSecret,
406
+ },
407
+ }),
408
+ },
409
+ ...(answers.enableEmailAlerts &&
410
+ answers.smtpHost &&
411
+ answers.smtpPort !== undefined &&
412
+ answers.smtpSecure !== undefined &&
413
+ answers.smtpUser &&
414
+ answers.smtpPassword &&
415
+ answers.emailFrom &&
416
+ answers.emailTo && {
417
+ alerts: {
418
+ email: {
419
+ enabled: true,
420
+ smtp: {
421
+ host: answers.smtpHost,
422
+ port: answers.smtpPort,
423
+ secure: answers.smtpSecure,
424
+ auth: {
425
+ user: answers.smtpUser,
426
+ pass: answers.smtpPassword,
427
+ },
428
+ },
429
+ from: answers.emailFrom,
430
+ to: answers.emailTo.split(',').map((email) => email.trim()),
431
+ },
432
+ },
433
+ }),
434
+ };
435
+ (0, config_1.saveConfig)(config);
436
+ logger_1.logger.success(`Configuration saved to ${config_1.CONFIG_FILE}`);
437
+ if (config.storage.provider === 'local' && config.storage.local?.path) {
438
+ const localPath = config.storage.local.path;
439
+ if (!(0, fs_1.existsSync)(localPath)) {
440
+ (0, fs_1.mkdirSync)(localPath, { recursive: true });
441
+ logger_1.logger.success(`Created local storage directory: ${localPath}`);
442
+ }
443
+ }
444
+ const gitignoreStatus = updateGitignore(config);
445
+ if (gitignoreStatus.configUpdated) {
446
+ logger_1.logger.success(`${config_1.CONFIG_FILE} added to .gitignore`);
447
+ }
448
+ else if (gitignoreStatus.configAlreadyExists) {
449
+ logger_1.logger.info(`${config_1.CONFIG_FILE} is already in .gitignore`);
450
+ }
451
+ else if (gitignoreStatus.created) {
452
+ logger_1.logger.success(`.gitignore created with ${config_1.CONFIG_FILE}`);
453
+ }
454
+ if (gitignoreStatus.localPathUpdated) {
455
+ logger_1.logger.success(`${config.storage.local?.path} added to .gitignore`);
456
+ }
457
+ else if (gitignoreStatus.localPathAlreadyExists) {
458
+ logger_1.logger.info(`${config.storage.local?.path} is already in .gitignore`);
459
+ }
460
+ if (answers.enableEmailAlerts) {
461
+ logger_1.logger.info('\nNote: Email alerts are configured but only work with:');
462
+ logger_1.logger.log(' - Programmatic usage (NestJS module)');
463
+ logger_1.logger.log(' - Scheduled backups (cron jobs via the schedule module)');
464
+ logger_1.logger.log(' - Manual CLI commands (npx dbdock backup) do NOT send emails');
465
+ }
466
+ logger_1.logger.info('\nNext steps:');
467
+ logger_1.logger.log(' - Run "npx dbdock test" to verify your configuration');
468
+ logger_1.logger.log(' - Run "npx dbdock backup" to create your first backup');
469
+ }
470
+ function updateGitignore(config) {
471
+ const gitignorePath = (0, path_1.join)(process.cwd(), '.gitignore');
472
+ const configEntry = config_1.CONFIG_FILE;
473
+ const entriesToAdd = [configEntry];
474
+ if (config.storage.provider === 'local' && config.storage.local?.path) {
475
+ const localPath = config.storage.local.path;
476
+ const normalizedPath = localPath.replace(/^\.\//, '').replace(/\/$/, '');
477
+ entriesToAdd.push(normalizedPath);
478
+ }
479
+ const status = {
480
+ configUpdated: false,
481
+ configAlreadyExists: false,
482
+ localPathUpdated: false,
483
+ localPathAlreadyExists: false,
484
+ created: false,
485
+ };
486
+ if (!(0, fs_1.existsSync)(gitignorePath)) {
487
+ (0, fs_1.writeFileSync)(gitignorePath, entriesToAdd.join('\n') + '\n');
488
+ status.created = true;
489
+ status.configUpdated = true;
490
+ if (entriesToAdd.length > 1) {
491
+ status.localPathUpdated = true;
492
+ }
493
+ return status;
494
+ }
495
+ const gitignoreContent = (0, fs_1.readFileSync)(gitignorePath, 'utf-8');
496
+ const lines = gitignoreContent.split('\n');
497
+ const configAlreadyIgnored = lines.some((line) => {
498
+ const trimmed = line.trim();
499
+ return (trimmed === configEntry ||
500
+ trimmed === `/${configEntry}` ||
501
+ trimmed === `./${configEntry}`);
502
+ });
503
+ status.configAlreadyExists = configAlreadyIgnored;
504
+ let localPathAlreadyIgnored = false;
505
+ if (entriesToAdd.length > 1) {
506
+ const localPath = entriesToAdd[1];
507
+ localPathAlreadyIgnored = lines.some((line) => {
508
+ const trimmed = line.trim();
509
+ return (trimmed === localPath ||
510
+ trimmed === `/${localPath}` ||
511
+ trimmed === `./${localPath}` ||
512
+ trimmed === `${localPath}/`);
513
+ });
514
+ status.localPathAlreadyExists = localPathAlreadyIgnored;
515
+ }
516
+ const newEntries = [];
517
+ if (!configAlreadyIgnored) {
518
+ newEntries.push(configEntry);
519
+ status.configUpdated = true;
520
+ }
521
+ if (entriesToAdd.length > 1 && !localPathAlreadyIgnored) {
522
+ newEntries.push(entriesToAdd[1]);
523
+ status.localPathUpdated = true;
524
+ }
525
+ if (newEntries.length > 0) {
526
+ const needsNewline = gitignoreContent.length > 0 && !gitignoreContent.endsWith('\n');
527
+ const contentToAdd = needsNewline
528
+ ? `\n${newEntries.join('\n')}\n`
529
+ : `${newEntries.join('\n')}\n`;
530
+ (0, fs_1.appendFileSync)(gitignorePath, contentToAdd);
531
+ }
532
+ return status;
533
+ }
534
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ interface ListCommandOptions {
2
+ recent?: number;
3
+ search?: string;
4
+ days?: number;
5
+ limit?: number;
6
+ }
7
+ export declare function listCommand(options?: ListCommandOptions): Promise<void>;
8
+ export {};