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 @@
1
+ {"version":3,"file":"alert-templates.js","sourceRoot":"","sources":["../../src/alerts/alert-templates.ts"],"names":[],"mappings":";;;AAoFA,wCAaC;AAjGD,+CAAyD;AAE5C,QAAA,iBAAiB,GAAqC;IACjE,CAAC,uBAAS,CAAC,cAAc,CAAC,EAAE;QAC1B,OAAO,EAAE,2CAA2C;QACpD,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;KAoBL;KACF;IAED,CAAC,uBAAS,CAAC,cAAc,CAAC,EAAE;QAC1B,OAAO,EAAE,uCAAuC;QAChD,IAAI,EAAE;;;;;;;;;;;;;;;;;KAiBL;KACF;IAED,CAAC,uBAAS,CAAC,iBAAiB,CAAC,EAAE;QAC7B,OAAO,EAAE,wCAAwC;QACjD,IAAI,EAAE;;;;;;;;;;;;;KAaL;KACF;IAED,CAAC,uBAAS,CAAC,aAAa,CAAC,EAAE;QACzB,OAAO,EAAE,yBAAyB;QAClC,IAAI,EAAE;;;;;;;;;;KAUL;KACF;CACF,CAAC;AAEF,SAAgB,cAAc,CAAC,QAAgB,EAAE,OAA4B;IAC3E,IAAI,QAAQ,GAAG,QAAQ,CAAC;IAExB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,MAAM,WAAW,GAAG,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,KAAK,GAAG,IAAI,EAAE,GAAG,CAAC,EAAE,WAAW,CAAC,CAAC;IAC1E,CAAC;IAED,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,oCAAoC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;QACxF,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare class AlertModule {
2
+ }
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.AlertModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const alert_service_1 = require("./alert.service");
12
+ const config_module_1 = require("../config/config.module");
13
+ let AlertModule = class AlertModule {
14
+ };
15
+ exports.AlertModule = AlertModule;
16
+ exports.AlertModule = AlertModule = __decorate([
17
+ (0, common_1.Module)({
18
+ imports: [config_module_1.DBDockConfigModule],
19
+ providers: [alert_service_1.AlertService],
20
+ exports: [alert_service_1.AlertService],
21
+ })
22
+ ], AlertModule);
23
+ //# sourceMappingURL=alert.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert.module.js","sourceRoot":"","sources":["../../src/alerts/alert.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,mDAA+C;AAC/C,2DAA6D;AAOtD,IAAM,WAAW,GAAjB,MAAM,WAAW;CAAG,CAAA;AAAd,kCAAW;sBAAX,WAAW;IALvB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,kCAAkB,CAAC;QAC7B,SAAS,EAAE,CAAC,4BAAY,CAAC;QACzB,OAAO,EAAE,CAAC,4BAAY,CAAC;KACxB,CAAC;GACW,WAAW,CAAG"}
@@ -0,0 +1,23 @@
1
+ import { DBDockConfigService } from '../config/config.service';
2
+ import { AlertType, AlertTemplate } from './alert.types';
3
+ import { BackupMetadata } from '../backup/backup.types';
4
+ export declare class AlertService {
5
+ private configService;
6
+ private readonly logger;
7
+ private transporter;
8
+ private customTemplates;
9
+ constructor(configService: DBDockConfigService);
10
+ private initializeTransporter;
11
+ setCustomTemplate(type: AlertType, template: AlertTemplate): void;
12
+ sendBackupSuccessAlert(metadata: BackupMetadata, downloadUrl?: string): Promise<void>;
13
+ sendBackupFailureAlert(metadata: BackupMetadata, error: Error): Promise<void>;
14
+ sendRetentionCleanupAlert(details: {
15
+ backupsDeleted: number;
16
+ walFilesDeleted: number;
17
+ spaceFreed: number;
18
+ }): Promise<void>;
19
+ sendStorageErrorAlert(error: Error): Promise<void>;
20
+ private sendAlert;
21
+ private sendEmail;
22
+ verifyConnection(): Promise<boolean>;
23
+ }
@@ -0,0 +1,210 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ var __metadata = (this && this.__metadata) || function (k, v) {
42
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
43
+ };
44
+ var AlertService_1;
45
+ Object.defineProperty(exports, "__esModule", { value: true });
46
+ exports.AlertService = void 0;
47
+ const common_1 = require("@nestjs/common");
48
+ const nodemailer = __importStar(require("nodemailer"));
49
+ const config_service_1 = require("../config/config.service");
50
+ const alert_types_1 = require("./alert.types");
51
+ const alert_templates_1 = require("./alert-templates");
52
+ let AlertService = AlertService_1 = class AlertService {
53
+ configService;
54
+ logger = new common_1.Logger(AlertService_1.name);
55
+ transporter = null;
56
+ customTemplates = {};
57
+ constructor(configService) {
58
+ this.configService = configService;
59
+ this.initializeTransporter();
60
+ }
61
+ initializeTransporter() {
62
+ const alertsConfig = this.configService.get('alerts');
63
+ if (!alertsConfig) {
64
+ this.logger.log('Email alerts disabled - no alerts configuration found');
65
+ return;
66
+ }
67
+ try {
68
+ this.transporter = nodemailer.createTransport({
69
+ host: alertsConfig.smtpHost,
70
+ port: alertsConfig.smtpPort,
71
+ secure: alertsConfig.smtpPort === 465,
72
+ auth: {
73
+ user: alertsConfig.smtpUser,
74
+ pass: alertsConfig.smtpPass,
75
+ },
76
+ });
77
+ this.logger.log(`Email alerts enabled - configured for ${alertsConfig.smtpHost}:${alertsConfig.smtpPort}`);
78
+ }
79
+ catch (error) {
80
+ this.logger.error(`Failed to initialize email transporter: ${error.message}`);
81
+ }
82
+ }
83
+ setCustomTemplate(type, template) {
84
+ this.customTemplates[type] = template;
85
+ this.logger.log(`Custom template set for alert type: ${type}`);
86
+ }
87
+ async sendBackupSuccessAlert(metadata, downloadUrl) {
88
+ if (!this.transporter)
89
+ return;
90
+ const context = {
91
+ database: metadata.database,
92
+ backupId: metadata.id,
93
+ size: ((metadata.size || 0) / 1024 / 1024).toFixed(2),
94
+ compressedSize: ((metadata.compressedSize || 0) / 1024 / 1024).toFixed(2),
95
+ duration: ((metadata.duration || 0) / 1000).toFixed(2),
96
+ timestamp: metadata.endTime?.toLocaleString() || new Date().toLocaleString(),
97
+ downloadUrl,
98
+ };
99
+ await this.sendAlert({
100
+ type: alert_types_1.AlertType.BACKUP_SUCCESS,
101
+ metadata,
102
+ downloadUrl,
103
+ details: context,
104
+ });
105
+ }
106
+ async sendBackupFailureAlert(metadata, error) {
107
+ if (!this.transporter)
108
+ return;
109
+ const context = {
110
+ database: metadata.database,
111
+ backupId: metadata.id,
112
+ timestamp: metadata.endTime?.toLocaleString() || new Date().toLocaleString(),
113
+ error: error.message,
114
+ };
115
+ await this.sendAlert({
116
+ type: alert_types_1.AlertType.BACKUP_FAILURE,
117
+ metadata,
118
+ error,
119
+ details: context,
120
+ });
121
+ }
122
+ async sendRetentionCleanupAlert(details) {
123
+ if (!this.transporter)
124
+ return;
125
+ const context = {
126
+ backupsDeleted: details.backupsDeleted,
127
+ walFilesDeleted: details.walFilesDeleted,
128
+ spaceFreed: (details.spaceFreed / 1024 / 1024).toFixed(2),
129
+ timestamp: new Date().toLocaleString(),
130
+ };
131
+ await this.sendAlert({
132
+ type: alert_types_1.AlertType.RETENTION_CLEANUP,
133
+ details: context,
134
+ });
135
+ }
136
+ async sendStorageErrorAlert(error) {
137
+ if (!this.transporter)
138
+ return;
139
+ const context = {
140
+ error: error.message,
141
+ timestamp: new Date().toLocaleString(),
142
+ };
143
+ await this.sendAlert({
144
+ type: alert_types_1.AlertType.STORAGE_ERROR,
145
+ error,
146
+ details: context,
147
+ });
148
+ }
149
+ async sendAlert(alertContext) {
150
+ if (!this.transporter)
151
+ return;
152
+ const alertsConfig = this.configService.get('alerts');
153
+ if (!alertsConfig)
154
+ return;
155
+ try {
156
+ const template = this.customTemplates[alertContext.type] ||
157
+ alert_templates_1.DEFAULT_TEMPLATES[alertContext.type];
158
+ const subject = (0, alert_templates_1.renderTemplate)(template.subject, alertContext.details || {});
159
+ const html = (0, alert_templates_1.renderTemplate)(template.body, alertContext.details || {});
160
+ const text = html.replace(/<[^>]*>/g, '');
161
+ await this.sendEmail({
162
+ to: alertsConfig.to,
163
+ subject,
164
+ html,
165
+ text,
166
+ });
167
+ this.logger.log(`Alert sent: ${alertContext.type} to ${alertsConfig.to.join(', ')}`);
168
+ }
169
+ catch (error) {
170
+ this.logger.error(`Failed to send alert (${alertContext.type}): ${error.message}`);
171
+ }
172
+ }
173
+ async sendEmail(options) {
174
+ if (!this.transporter) {
175
+ throw new Error('Email transporter not initialized');
176
+ }
177
+ const alertsConfig = this.configService.get('alerts');
178
+ if (!alertsConfig) {
179
+ throw new Error('Alerts configuration not found');
180
+ }
181
+ const fromAddress = alertsConfig.from || alertsConfig.smtpUser;
182
+ await this.transporter.sendMail({
183
+ from: `DBDock <${fromAddress}>`,
184
+ to: options.to.join(', '),
185
+ subject: options.subject,
186
+ text: options.text,
187
+ html: options.html,
188
+ });
189
+ }
190
+ async verifyConnection() {
191
+ if (!this.transporter) {
192
+ return false;
193
+ }
194
+ try {
195
+ await this.transporter.verify();
196
+ this.logger.log('SMTP connection verified successfully');
197
+ return true;
198
+ }
199
+ catch (error) {
200
+ this.logger.error(`SMTP connection verification failed: ${error.message}`);
201
+ return false;
202
+ }
203
+ }
204
+ };
205
+ exports.AlertService = AlertService;
206
+ exports.AlertService = AlertService = AlertService_1 = __decorate([
207
+ (0, common_1.Injectable)(),
208
+ __metadata("design:paramtypes", [config_service_1.DBDockConfigService])
209
+ ], AlertService);
210
+ //# sourceMappingURL=alert.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert.service.js","sourceRoot":"","sources":["../../src/alerts/alert.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { BackupMetadata } from '../backup/backup.types';
2
+ export declare enum AlertType {
3
+ BACKUP_SUCCESS = "backup_success",
4
+ BACKUP_FAILURE = "backup_failure",
5
+ RETENTION_CLEANUP = "retention_cleanup",
6
+ STORAGE_ERROR = "storage_error"
7
+ }
8
+ export interface AlertTemplate {
9
+ subject: string;
10
+ body: string;
11
+ }
12
+ export interface AlertContext {
13
+ type: AlertType;
14
+ metadata?: BackupMetadata;
15
+ error?: Error;
16
+ downloadUrl?: string;
17
+ details?: Record<string, any>;
18
+ }
19
+ export interface EmailOptions {
20
+ to: string[];
21
+ subject: string;
22
+ html: string;
23
+ text?: string;
24
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AlertType = void 0;
4
+ var AlertType;
5
+ (function (AlertType) {
6
+ AlertType["BACKUP_SUCCESS"] = "backup_success";
7
+ AlertType["BACKUP_FAILURE"] = "backup_failure";
8
+ AlertType["RETENTION_CLEANUP"] = "retention_cleanup";
9
+ AlertType["STORAGE_ERROR"] = "storage_error";
10
+ })(AlertType || (exports.AlertType = AlertType = {}));
11
+ //# sourceMappingURL=alert.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert.types.js","sourceRoot":"","sources":["../../src/alerts/alert.types.ts"],"names":[],"mappings":";;;AAEA,IAAY,SAKX;AALD,WAAY,SAAS;IACnB,8CAAiC,CAAA;IACjC,8CAAiC,CAAA;IACjC,oDAAuC,CAAA;IACvC,4CAA+B,CAAA;AACjC,CAAC,EALW,SAAS,yBAAT,SAAS,QAKpB"}
@@ -0,0 +1,2 @@
1
+ export declare class AppModule {
2
+ }
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.AppModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const config_module_1 = require("./config/config.module");
12
+ const storage_module_1 = require("./storage/storage.module");
13
+ const crypto_module_1 = require("./crypto/crypto.module");
14
+ const backup_module_1 = require("./backup/backup.module");
15
+ const wal_module_1 = require("./wal/wal.module");
16
+ const scheduler_module_1 = require("./scheduler/scheduler.module");
17
+ let AppModule = class AppModule {
18
+ };
19
+ exports.AppModule = AppModule;
20
+ exports.AppModule = AppModule = __decorate([
21
+ (0, common_1.Module)({
22
+ imports: [
23
+ config_module_1.DBDockConfigModule,
24
+ storage_module_1.StorageModule,
25
+ crypto_module_1.CryptoModule,
26
+ backup_module_1.BackupModule,
27
+ wal_module_1.WalModule,
28
+ scheduler_module_1.SchedulerModule,
29
+ ],
30
+ controllers: [],
31
+ providers: [],
32
+ })
33
+ ], AppModule);
34
+ //# sourceMappingURL=app.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.module.js","sourceRoot":"","sources":["../src/app.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,0DAA4D;AAC5D,6DAAyD;AACzD,0DAAsD;AACtD,0DAAsD;AACtD,iDAA6C;AAC7C,mEAA+D;AAcxD,IAAM,SAAS,GAAf,MAAM,SAAS;CAAG,CAAA;AAAZ,8BAAS;oBAAT,SAAS;IAZrB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,kCAAkB;YAClB,8BAAa;YACb,4BAAY;YACZ,4BAAY;YACZ,sBAAS;YACT,kCAAe;SAChB;QACD,WAAW,EAAE,EAAE;QACf,SAAS,EAAE,EAAE;KACd,CAAC;GACW,SAAS,CAAG"}
@@ -0,0 +1,2 @@
1
+ export declare class BackupModule {
2
+ }
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.BackupModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const backup_service_1 = require("./backup.service");
12
+ const compression_service_1 = require("./compression.service");
13
+ const storage_module_1 = require("../storage/storage.module");
14
+ const crypto_module_1 = require("../crypto/crypto.module");
15
+ const alert_module_1 = require("../alerts/alert.module");
16
+ let BackupModule = class BackupModule {
17
+ };
18
+ exports.BackupModule = BackupModule;
19
+ exports.BackupModule = BackupModule = __decorate([
20
+ (0, common_1.Module)({
21
+ imports: [storage_module_1.StorageModule, crypto_module_1.CryptoModule, alert_module_1.AlertModule],
22
+ providers: [backup_service_1.BackupService, compression_service_1.CompressionService],
23
+ exports: [backup_service_1.BackupService, compression_service_1.CompressionService],
24
+ })
25
+ ], BackupModule);
26
+ //# sourceMappingURL=backup.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup.module.js","sourceRoot":"","sources":["../../src/backup/backup.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,qDAAiD;AACjD,+DAA2D;AAC3D,8DAA0D;AAC1D,2DAAuD;AACvD,yDAAqD;AAO9C,IAAM,YAAY,GAAlB,MAAM,YAAY;CAAG,CAAA;AAAf,oCAAY;uBAAZ,YAAY;IALxB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,8BAAa,EAAE,4BAAY,EAAE,0BAAW,CAAC;QACnD,SAAS,EAAE,CAAC,8BAAa,EAAE,wCAAkB,CAAC;QAC9C,OAAO,EAAE,CAAC,8BAAa,EAAE,wCAAkB,CAAC;KAC7C,CAAC;GACW,YAAY,CAAG"}
@@ -0,0 +1,23 @@
1
+ import { DBDockConfigService } from '../config/config.service';
2
+ import { StorageService } from '../storage/storage.service';
3
+ import { CryptoService } from '../crypto/crypto.service';
4
+ import { CompressionService } from './compression.service';
5
+ import { AlertService } from '../alerts/alert.service';
6
+ import { BackupMetadata, BackupOptions, BackupResult } from './backup.types';
7
+ export declare class BackupService {
8
+ private configService;
9
+ private storageService;
10
+ private cryptoService;
11
+ private compressionService;
12
+ private alertService;
13
+ private readonly logger;
14
+ private uuidv4Promise;
15
+ constructor(configService: DBDockConfigService, storageService: StorageService, cryptoService: CryptoService, compressionService: CompressionService, alertService: AlertService);
16
+ private getUuidv4;
17
+ createBackup(options?: BackupOptions): Promise<BackupResult>;
18
+ private createPgDumpStream;
19
+ private generateStorageKey;
20
+ private saveMetadata;
21
+ getBackupMetadata(backupId: string): Promise<BackupMetadata | null>;
22
+ listBackups(): Promise<BackupMetadata[]>;
23
+ }