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.
Files changed (139) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +87 -728
  3. package/dist/alerts/alert-templates.d.ts +1 -1
  4. package/dist/alerts/alert-templates.js +6 -2
  5. package/dist/alerts/alert-templates.js.map +1 -1
  6. package/dist/alerts/alert.service.js +24 -11
  7. package/dist/alerts/alert.service.js.map +1 -1
  8. package/dist/alerts/alert.types.d.ts +1 -1
  9. package/dist/backup/backup.service.js.map +1 -1
  10. package/dist/cli/commands/analyze.js.map +1 -1
  11. package/dist/cli/commands/backup.js +10 -4
  12. package/dist/cli/commands/backup.js.map +1 -1
  13. package/dist/cli/commands/cleanup.js +12 -6
  14. package/dist/cli/commands/cleanup.js.map +1 -1
  15. package/dist/cli/commands/copydb.js +78 -37
  16. package/dist/cli/commands/copydb.js.map +1 -1
  17. package/dist/cli/commands/cross-migrate.js +9 -10
  18. package/dist/cli/commands/cross-migrate.js.map +1 -1
  19. package/dist/cli/commands/delete.js +46 -37
  20. package/dist/cli/commands/delete.js.map +1 -1
  21. package/dist/cli/commands/driver-copy.js +150 -40
  22. package/dist/cli/commands/driver-copy.js.map +1 -1
  23. package/dist/cli/commands/init.js +35 -13
  24. package/dist/cli/commands/init.js.map +1 -1
  25. package/dist/cli/commands/migrate-config.js +11 -6
  26. package/dist/cli/commands/migrate-config.js.map +1 -1
  27. package/dist/cli/commands/restore.js +14 -148
  28. package/dist/cli/commands/restore.js.map +1 -1
  29. package/dist/cli/commands/schedule.js +1 -1
  30. package/dist/cli/commands/schedule.js.map +1 -1
  31. package/dist/cli/commands/start.js +19 -14
  32. package/dist/cli/commands/start.js.map +1 -1
  33. package/dist/cli/commands/status.js +5 -2
  34. package/dist/cli/commands/status.js.map +1 -1
  35. package/dist/cli/commands/test.js +3 -38
  36. package/dist/cli/commands/test.js.map +1 -1
  37. package/dist/cli/index.js.map +1 -1
  38. package/dist/cli/utils/config.d.ts +7 -0
  39. package/dist/cli/utils/config.js.map +1 -1
  40. package/dist/cli/utils/progress.js.map +1 -1
  41. package/dist/cli/utils/retention.js +6 -1
  42. package/dist/cli/utils/retention.js.map +1 -1
  43. package/dist/config/config.schema.d.ts +8 -0
  44. package/dist/config/config.schema.js +42 -0
  45. package/dist/config/config.schema.js.map +1 -1
  46. package/dist/config/config.service.js +99 -63
  47. package/dist/config/config.service.js.map +1 -1
  48. package/dist/config/env-url.helper.js +5 -2
  49. package/dist/config/env-url.helper.js.map +1 -1
  50. package/dist/config/permissions.checker.js +5 -7
  51. package/dist/config/permissions.checker.js.map +1 -1
  52. package/dist/config/pgpass.helper.js.map +1 -1
  53. package/dist/config/secrets.validator.js +3 -1
  54. package/dist/config/secrets.validator.js.map +1 -1
  55. package/dist/crypto/crypto.service.js +1 -1
  56. package/dist/crypto/crypto.service.js.map +1 -1
  57. package/dist/dbdock.js.map +1 -1
  58. package/dist/engines/engine.types.d.ts +32 -0
  59. package/dist/engines/engine.types.js +3 -0
  60. package/dist/engines/engine.types.js.map +1 -0
  61. package/dist/engines/index.d.ts +4 -0
  62. package/dist/engines/index.js +30 -0
  63. package/dist/engines/index.js.map +1 -0
  64. package/dist/engines/mssql.engine.d.ts +2 -0
  65. package/dist/engines/mssql.engine.js +198 -0
  66. package/dist/engines/mssql.engine.js.map +1 -0
  67. package/dist/engines/mysql.engine.d.ts +2 -0
  68. package/dist/engines/mysql.engine.js +184 -0
  69. package/dist/engines/mysql.engine.js.map +1 -0
  70. package/dist/engines/postgres.engine.d.ts +2 -0
  71. package/dist/engines/postgres.engine.js +257 -0
  72. package/dist/engines/postgres.engine.js.map +1 -0
  73. package/dist/engines/redis-worker.d.ts +1 -0
  74. package/dist/engines/redis-worker.js +80 -0
  75. package/dist/engines/redis-worker.js.map +1 -0
  76. package/dist/engines/redis.engine.d.ts +2 -0
  77. package/dist/engines/redis.engine.js +124 -0
  78. package/dist/engines/redis.engine.js.map +1 -0
  79. package/dist/index.d.ts +7 -0
  80. package/dist/index.js +8 -1
  81. package/dist/index.js.map +1 -1
  82. package/dist/main.js +1 -1
  83. package/dist/main.js.map +1 -1
  84. package/dist/migration/analyzers/mongodb.analyzer.js +15 -7
  85. package/dist/migration/analyzers/mongodb.analyzer.js.map +1 -1
  86. package/dist/migration/analyzers/postgres.analyzer.js +1 -1
  87. package/dist/migration/analyzers/postgres.analyzer.js.map +1 -1
  88. package/dist/migration/config.manager.js.map +1 -1
  89. package/dist/migration/engines/migration.engine.js +1 -1
  90. package/dist/migration/engines/migration.engine.js.map +1 -1
  91. package/dist/migration/engines/mongo-to-postgres.engine.js +34 -16
  92. package/dist/migration/engines/mongo-to-postgres.engine.js.map +1 -1
  93. package/dist/migration/engines/postgres-to-mongo.engine.js +8 -10
  94. package/dist/migration/engines/postgres-to-mongo.engine.js.map +1 -1
  95. package/dist/migration/mappers/mongo-to-postgres.mapper.js +3 -6
  96. package/dist/migration/mappers/mongo-to-postgres.mapper.js.map +1 -1
  97. package/dist/migration/mappers/postgres-to-mongo.mapper.js +5 -3
  98. package/dist/migration/mappers/postgres-to-mongo.mapper.js.map +1 -1
  99. package/dist/migration/reference.detector.js.map +1 -1
  100. package/dist/migration/row.types.d.ts +12 -0
  101. package/dist/migration/row.types.js +3 -0
  102. package/dist/migration/row.types.js.map +1 -0
  103. package/dist/migration/type.mapper.d.ts +3 -3
  104. package/dist/migration/type.mapper.js +29 -14
  105. package/dist/migration/type.mapper.js.map +1 -1
  106. package/dist/migration/types.d.ts +1 -1
  107. package/dist/scheduler/schedule-manager.js +4 -1
  108. package/dist/scheduler/schedule-manager.js.map +1 -1
  109. package/dist/scheduler/scheduler.service.js +11 -6
  110. package/dist/scheduler/scheduler.service.js.map +1 -1
  111. package/dist/standalone/backup-standalone.js +17 -118
  112. package/dist/standalone/backup-standalone.js.map +1 -1
  113. package/dist/standalone/restore-standalone.d.ts +10 -0
  114. package/dist/standalone/restore-standalone.js +167 -0
  115. package/dist/standalone/restore-standalone.js.map +1 -0
  116. package/dist/storage/adapters/cloudinary.adapter.js +12 -7
  117. package/dist/storage/adapters/cloudinary.adapter.js.map +1 -1
  118. package/dist/storage/adapters/local.adapter.js +15 -12
  119. package/dist/storage/adapters/local.adapter.js.map +1 -1
  120. package/dist/storage/adapters/s3.adapter.d.ts +2 -1
  121. package/dist/storage/adapters/s3.adapter.js +23 -2
  122. package/dist/storage/adapters/s3.adapter.js.map +1 -1
  123. package/dist/storage/deletion-guard.d.ts +37 -0
  124. package/dist/storage/deletion-guard.js +102 -0
  125. package/dist/storage/deletion-guard.js.map +1 -0
  126. package/dist/storage/safe-storage.adapter.d.ts +35 -0
  127. package/dist/storage/safe-storage.adapter.js +161 -0
  128. package/dist/storage/safe-storage.adapter.js.map +1 -0
  129. package/dist/storage/storage.interface.d.ts +6 -0
  130. package/dist/storage/storage.service.d.ts +3 -0
  131. package/dist/storage/storage.service.js +18 -3
  132. package/dist/storage/storage.service.js.map +1 -1
  133. package/dist/utils/logger.js +32 -8
  134. package/dist/utils/logger.js.map +1 -1
  135. package/dist/wal/retention.service.js +23 -8
  136. package/dist/wal/retention.service.js.map +1 -1
  137. package/dist/wal/wal-archiver.service.js +7 -4
  138. package/dist/wal/wal-archiver.service.js.map +1 -1
  139. package/package.json +6 -4
@@ -1 +1 @@
1
- {"version":3,"file":"local.adapter.js","sourceRoot":"","sources":["../../../src/storage/adapters/local.adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local.adapter.js","sourceRoot":"","sources":["../../../src/storage/adapters/local.adapter.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { IStorageAdapter, UploadOptions, DownloadOptions, ListOptions, StorageObject, DeleteOptions, PresignedUrlOptions } from '../storage.interface';
1
+ import { IStorageAdapter, UploadOptions, DownloadOptions, ListOptions, StorageObject, DeleteOptions, CopyOptions, PresignedUrlOptions } from '../storage.interface';
2
2
  import { Readable } from 'stream';
3
3
  export interface S3Config {
4
4
  endpoint?: string;
@@ -20,6 +20,7 @@ export declare class S3StorageAdapter implements IStorageAdapter {
20
20
  downloadStream(options: DownloadOptions): Promise<Readable>;
21
21
  listObjects(options?: ListOptions): Promise<StorageObject[]>;
22
22
  deleteObject(options: DeleteOptions): Promise<void>;
23
+ copyObject(options: CopyOptions): Promise<void>;
23
24
  generatePresignedUrl(options: PresignedUrlOptions): Promise<string>;
24
25
  objectExists(key: string): Promise<boolean>;
25
26
  private getFriendlyError;
@@ -128,6 +128,24 @@ let S3StorageAdapter = S3StorageAdapter_1 = class S3StorageAdapter {
128
128
  throw cleanError;
129
129
  }
130
130
  }
131
+ async copyObject(options) {
132
+ try {
133
+ const command = new client_s3_1.CopyObjectCommand({
134
+ Bucket: this.bucket,
135
+ CopySource: encodeURI(`${this.bucket}/${options.sourceKey}`),
136
+ Key: options.destinationKey,
137
+ });
138
+ await this.client.send(command);
139
+ this.logger.log(`Copied ${options.sourceKey} to ${options.destinationKey}`);
140
+ }
141
+ catch (error) {
142
+ const friendlyMessage = this.getFriendlyError(error);
143
+ this.logger.error(`Failed to copy ${options.sourceKey}: ${friendlyMessage}`);
144
+ const cleanError = new Error(friendlyMessage);
145
+ cleanError.name = 'StorageConfigurationError';
146
+ throw cleanError;
147
+ }
148
+ }
131
149
  async generatePresignedUrl(options) {
132
150
  try {
133
151
  const command = new client_s3_1.GetObjectCommand({
@@ -157,7 +175,8 @@ let S3StorageAdapter = S3StorageAdapter_1 = class S3StorageAdapter {
157
175
  return true;
158
176
  }
159
177
  catch (error) {
160
- if (error.name === 'NotFound') {
178
+ const e = error;
179
+ if (e.name === 'NotFound') {
161
180
  return false;
162
181
  }
163
182
  throw error;
@@ -167,7 +186,9 @@ let S3StorageAdapter = S3StorageAdapter_1 = class S3StorageAdapter {
167
186
  const err = error;
168
187
  const code = err?.code;
169
188
  const message = err?.message || '';
170
- if (code === 'EPROTO' || message.includes('SSL') || message.includes('TLS')) {
189
+ if (code === 'EPROTO' ||
190
+ message.includes('SSL') ||
191
+ message.includes('TLS')) {
171
192
  return 'Invalid storage configuration: SSL/TLS handshake failed. Please verify your endpoint URL, access key ID, and secret access key are correct.';
172
193
  }
173
194
  if (code === 'ENOTFOUND' || message.includes('getaddrinfo')) {
@@ -1 +1 @@
1
- {"version":3,"file":"s3.adapter.js","sourceRoot":"","sources":["../../../src/storage/adapters/s3.adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"s3.adapter.js","sourceRoot":"","sources":["../../../src/storage/adapters/s3.adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ export declare const DEFAULT_TRASH_PREFIX = ".trash/";
2
+ export declare const DEFAULT_ALLOWED_DELETE_PREFIXES: string[];
3
+ export declare const DEFAULT_MAX_DELETES_PER_WINDOW = 1000;
4
+ export declare const DEFAULT_DELETION_WINDOW_MS = 60000;
5
+ export declare const DEFAULT_TRASH_RETENTION_DAYS = 14;
6
+ export declare const MAX_STORAGE_KEY_LENGTH = 1024;
7
+ export interface DeletionGuardPolicy {
8
+ enabled: boolean;
9
+ recycleBin: boolean;
10
+ trashPrefix: string;
11
+ allowedPrefixes: string[];
12
+ maxDeletesPerWindow: number;
13
+ windowMs: number;
14
+ trashRetentionDays: number;
15
+ }
16
+ export interface DeletionGuardPolicyOverrides {
17
+ enabled?: boolean;
18
+ recycleBin?: boolean;
19
+ trashRetentionDays?: number;
20
+ maxDeletesPerWindow?: number;
21
+ allowedPrefixes?: string[];
22
+ }
23
+ export declare class DeletionGuardError extends Error {
24
+ readonly key: string;
25
+ constructor(message: string, key: string);
26
+ }
27
+ export declare function resolveDeletionGuardPolicy(overrides?: DeletionGuardPolicyOverrides): DeletionGuardPolicy;
28
+ export declare function validateKeyStructure(key: string): void;
29
+ export declare function isWithinAllowedPrefix(key: string, allowedPrefixes: string[]): boolean;
30
+ export declare function assertDeletableKey(key: string, allowedPrefixes: string[]): void;
31
+ export declare class DeletionRateLimiter {
32
+ private readonly max;
33
+ private readonly windowMs;
34
+ private readonly events;
35
+ constructor(max: number, windowMs: number);
36
+ record(now: number): void;
37
+ }
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DeletionRateLimiter = exports.DeletionGuardError = exports.MAX_STORAGE_KEY_LENGTH = exports.DEFAULT_TRASH_RETENTION_DAYS = exports.DEFAULT_DELETION_WINDOW_MS = exports.DEFAULT_MAX_DELETES_PER_WINDOW = exports.DEFAULT_ALLOWED_DELETE_PREFIXES = exports.DEFAULT_TRASH_PREFIX = void 0;
4
+ exports.resolveDeletionGuardPolicy = resolveDeletionGuardPolicy;
5
+ exports.validateKeyStructure = validateKeyStructure;
6
+ exports.isWithinAllowedPrefix = isWithinAllowedPrefix;
7
+ exports.assertDeletableKey = assertDeletableKey;
8
+ exports.DEFAULT_TRASH_PREFIX = '.trash/';
9
+ exports.DEFAULT_ALLOWED_DELETE_PREFIXES = [
10
+ 'backups/',
11
+ 'wal/',
12
+ 'dbdock_backups/',
13
+ 'backup-',
14
+ ];
15
+ exports.DEFAULT_MAX_DELETES_PER_WINDOW = 1000;
16
+ exports.DEFAULT_DELETION_WINDOW_MS = 60_000;
17
+ exports.DEFAULT_TRASH_RETENTION_DAYS = 14;
18
+ exports.MAX_STORAGE_KEY_LENGTH = 1024;
19
+ function hasControlCharacter(value) {
20
+ for (let i = 0; i < value.length; i++) {
21
+ const code = value.charCodeAt(i);
22
+ if (code <= 0x1f || code === 0x7f)
23
+ return true;
24
+ }
25
+ return false;
26
+ }
27
+ class DeletionGuardError extends Error {
28
+ key;
29
+ constructor(message, key) {
30
+ super(message);
31
+ this.name = 'DeletionGuardError';
32
+ this.key = key;
33
+ }
34
+ }
35
+ exports.DeletionGuardError = DeletionGuardError;
36
+ function resolveDeletionGuardPolicy(overrides) {
37
+ return {
38
+ enabled: overrides?.enabled ?? true,
39
+ recycleBin: overrides?.recycleBin ?? true,
40
+ trashPrefix: exports.DEFAULT_TRASH_PREFIX,
41
+ allowedPrefixes: overrides?.allowedPrefixes && overrides.allowedPrefixes.length > 0
42
+ ? overrides.allowedPrefixes
43
+ : exports.DEFAULT_ALLOWED_DELETE_PREFIXES,
44
+ maxDeletesPerWindow: overrides?.maxDeletesPerWindow ?? exports.DEFAULT_MAX_DELETES_PER_WINDOW,
45
+ windowMs: exports.DEFAULT_DELETION_WINDOW_MS,
46
+ trashRetentionDays: overrides?.trashRetentionDays ?? exports.DEFAULT_TRASH_RETENTION_DAYS,
47
+ };
48
+ }
49
+ function validateKeyStructure(key) {
50
+ if (typeof key !== 'string' || key.length === 0) {
51
+ throw new DeletionGuardError('Refusing to delete an empty storage key', key);
52
+ }
53
+ if (key !== key.trim()) {
54
+ throw new DeletionGuardError('Refusing to delete a key with surrounding whitespace', key);
55
+ }
56
+ if (key.length > exports.MAX_STORAGE_KEY_LENGTH) {
57
+ throw new DeletionGuardError('Refusing to delete an oversized key', key);
58
+ }
59
+ if (key.startsWith('/')) {
60
+ throw new DeletionGuardError('Refusing to delete a key with a leading slash', key);
61
+ }
62
+ if (key.endsWith('/')) {
63
+ throw new DeletionGuardError('Refusing to delete a folder-style key', key);
64
+ }
65
+ if (key.includes('..')) {
66
+ throw new DeletionGuardError('Refusing to delete a key containing a path traversal segment', key);
67
+ }
68
+ if (key.includes('*') || hasControlCharacter(key)) {
69
+ throw new DeletionGuardError('Refusing to delete a key with wildcard or control characters', key);
70
+ }
71
+ }
72
+ function isWithinAllowedPrefix(key, allowedPrefixes) {
73
+ return allowedPrefixes.some((prefix) => prefix.length > 0 &&
74
+ (key.startsWith(prefix) || key.includes(`/${prefix}`)));
75
+ }
76
+ function assertDeletableKey(key, allowedPrefixes) {
77
+ validateKeyStructure(key);
78
+ if (!isWithinAllowedPrefix(key, allowedPrefixes)) {
79
+ throw new DeletionGuardError(`Refusing to delete a key outside protected prefixes [${allowedPrefixes.join(', ')}]`, key);
80
+ }
81
+ }
82
+ class DeletionRateLimiter {
83
+ max;
84
+ windowMs;
85
+ events = [];
86
+ constructor(max, windowMs) {
87
+ this.max = max;
88
+ this.windowMs = windowMs;
89
+ }
90
+ record(now) {
91
+ const cutoff = now - this.windowMs;
92
+ while (this.events.length > 0 && this.events[0] < cutoff) {
93
+ this.events.shift();
94
+ }
95
+ if (this.events.length >= this.max) {
96
+ throw new DeletionGuardError(`Deletion circuit breaker tripped: more than ${this.max} deletions within ${this.windowMs}ms`, '');
97
+ }
98
+ this.events.push(now);
99
+ }
100
+ }
101
+ exports.DeletionRateLimiter = DeletionRateLimiter;
102
+ //# sourceMappingURL=deletion-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deletion-guard.js","sourceRoot":"","sources":["../../src/storage/deletion-guard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { Readable } from 'stream';
2
+ import { IStorageAdapter, UploadOptions, DownloadOptions, ListOptions, StorageObject, DeleteOptions, CopyOptions, PresignedUrlOptions } from './storage.interface';
3
+ import { DeletionGuardPolicy } from './deletion-guard';
4
+ export interface StorageDeletionEvent {
5
+ key: string;
6
+ softDeleted: boolean;
7
+ trashKey: string | null;
8
+ reason: string | null;
9
+ }
10
+ export type StorageDeletionListener = (event: StorageDeletionEvent) => void | Promise<void>;
11
+ export declare class SafeStorageAdapter implements IStorageAdapter {
12
+ private readonly inner;
13
+ private readonly policy;
14
+ private readonly listener?;
15
+ private readonly logger;
16
+ private readonly rateLimiter;
17
+ constructor(inner: IStorageAdapter, policy: DeletionGuardPolicy, listener?: StorageDeletionListener | undefined);
18
+ uploadStream(stream: Readable, options: UploadOptions): Promise<{
19
+ key: string;
20
+ etag?: string;
21
+ }>;
22
+ downloadStream(options: DownloadOptions): Promise<Readable>;
23
+ listObjects(options?: ListOptions): Promise<StorageObject[]>;
24
+ generatePresignedUrl(options: PresignedUrlOptions): Promise<string>;
25
+ objectExists(key: string): Promise<boolean>;
26
+ copyObject(options: CopyOptions): Promise<void>;
27
+ deleteObject(options: DeleteOptions): Promise<void>;
28
+ restoreFromTrash(trashKey: string): Promise<string>;
29
+ purgeTrash(olderThanDays?: number): Promise<number>;
30
+ private moveToTrash;
31
+ private hardDelete;
32
+ private bestEffortHardDelete;
33
+ private readTrashMeta;
34
+ private emit;
35
+ }
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SafeStorageAdapter = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ const stream_1 = require("stream");
6
+ const deletion_guard_1 = require("./deletion-guard");
7
+ const TRASH_META_SUFFIX = '.trashmeta.json';
8
+ const MS_PER_DAY = 24 * 60 * 60 * 1000;
9
+ class SafeStorageAdapter {
10
+ inner;
11
+ policy;
12
+ listener;
13
+ logger = new common_1.Logger(SafeStorageAdapter.name);
14
+ rateLimiter;
15
+ constructor(inner, policy, listener) {
16
+ this.inner = inner;
17
+ this.policy = policy;
18
+ this.listener = listener;
19
+ this.rateLimiter = new deletion_guard_1.DeletionRateLimiter(policy.maxDeletesPerWindow, policy.windowMs);
20
+ }
21
+ uploadStream(stream, options) {
22
+ return this.inner.uploadStream(stream, options);
23
+ }
24
+ downloadStream(options) {
25
+ return this.inner.downloadStream(options);
26
+ }
27
+ listObjects(options) {
28
+ return this.inner.listObjects(options);
29
+ }
30
+ generatePresignedUrl(options) {
31
+ return this.inner.generatePresignedUrl(options);
32
+ }
33
+ objectExists(key) {
34
+ return this.inner.objectExists(key);
35
+ }
36
+ async copyObject(options) {
37
+ if (this.inner.copyObject) {
38
+ await this.inner.copyObject(options);
39
+ return;
40
+ }
41
+ const stream = await this.inner.downloadStream({
42
+ key: options.sourceKey,
43
+ });
44
+ await this.inner.uploadStream(stream, { key: options.destinationKey });
45
+ }
46
+ async deleteObject(options) {
47
+ const key = options.key;
48
+ const reason = options.reason ?? null;
49
+ if (!this.policy.enabled) {
50
+ (0, deletion_guard_1.validateKeyStructure)(key);
51
+ await this.inner.deleteObject({ key });
52
+ await this.emit({ key, softDeleted: false, trashKey: null, reason });
53
+ return;
54
+ }
55
+ (0, deletion_guard_1.assertDeletableKey)(key, this.policy.allowedPrefixes);
56
+ this.rateLimiter.record(Date.now());
57
+ if (this.policy.recycleBin && !key.startsWith(this.policy.trashPrefix)) {
58
+ const trashKey = await this.moveToTrash(key, reason);
59
+ await this.emit({ key, softDeleted: true, trashKey, reason });
60
+ return;
61
+ }
62
+ await this.inner.deleteObject({ key });
63
+ await this.emit({ key, softDeleted: false, trashKey: null, reason });
64
+ }
65
+ async restoreFromTrash(trashKey) {
66
+ const metaKey = `${trashKey}${TRASH_META_SUFFIX}`;
67
+ const meta = await this.readTrashMeta(metaKey);
68
+ const originalKey = meta?.originalKey ?? null;
69
+ if (!originalKey) {
70
+ throw new deletion_guard_1.DeletionGuardError('Cannot restore: missing trash metadata', trashKey);
71
+ }
72
+ await this.copyObject({ sourceKey: trashKey, destinationKey: originalKey });
73
+ await this.hardDelete(trashKey);
74
+ await this.bestEffortHardDelete(metaKey);
75
+ this.logger.warn(`[storage-audit] restored ${trashKey} -> ${originalKey}`);
76
+ return originalKey;
77
+ }
78
+ async purgeTrash(olderThanDays) {
79
+ const maxAgeDays = olderThanDays ?? this.policy.trashRetentionDays;
80
+ const cutoff = Date.now() - maxAgeDays * MS_PER_DAY;
81
+ const objects = await this.inner.listObjects({
82
+ prefix: this.policy.trashPrefix,
83
+ });
84
+ let purged = 0;
85
+ for (const obj of objects) {
86
+ if (obj.key.endsWith(TRASH_META_SUFFIX))
87
+ continue;
88
+ if (obj.lastModified.getTime() >= cutoff)
89
+ continue;
90
+ await this.hardDelete(obj.key);
91
+ await this.bestEffortHardDelete(`${obj.key}${TRASH_META_SUFFIX}`);
92
+ purged++;
93
+ }
94
+ if (purged > 0) {
95
+ this.logger.warn(`[storage-audit] purged ${purged} trashed object(s) older than ${maxAgeDays} day(s)`);
96
+ }
97
+ return purged;
98
+ }
99
+ async moveToTrash(key, reason) {
100
+ const stamp = new Date().toISOString().replace(/[:.]/g, '-');
101
+ const trashKey = `${this.policy.trashPrefix}${stamp}/${key}`;
102
+ await this.copyObject({ sourceKey: key, destinationKey: trashKey });
103
+ const meta = {
104
+ originalKey: key,
105
+ deletedAt: new Date().toISOString(),
106
+ reason,
107
+ };
108
+ await this.inner.uploadStream(stream_1.Readable.from([JSON.stringify(meta, null, 2)]), {
109
+ key: `${trashKey}${TRASH_META_SUFFIX}`,
110
+ contentType: 'application/json',
111
+ });
112
+ await this.inner.deleteObject({ key });
113
+ this.logger.warn(`[storage-audit] soft-deleted ${key} -> ${trashKey}${reason ? ` (${reason})` : ''}`);
114
+ return trashKey;
115
+ }
116
+ async hardDelete(key) {
117
+ (0, deletion_guard_1.validateKeyStructure)(key);
118
+ const allowed = (0, deletion_guard_1.isWithinAllowedPrefix)(key, this.policy.allowedPrefixes) ||
119
+ key.startsWith(this.policy.trashPrefix);
120
+ if (!allowed) {
121
+ throw new deletion_guard_1.DeletionGuardError('Refusing to hard-delete a key outside protected prefixes', key);
122
+ }
123
+ await this.inner.deleteObject({ key });
124
+ }
125
+ async bestEffortHardDelete(key) {
126
+ try {
127
+ await this.hardDelete(key);
128
+ }
129
+ catch {
130
+ this.logger.warn(`[storage-audit] could not remove sidecar ${key}`);
131
+ }
132
+ }
133
+ async readTrashMeta(metaKey) {
134
+ try {
135
+ const stream = (await this.inner.downloadStream({
136
+ key: metaKey,
137
+ }));
138
+ const chunks = [];
139
+ for await (const chunk of stream) {
140
+ chunks.push(Buffer.from(chunk));
141
+ }
142
+ return JSON.parse(Buffer.concat(chunks).toString('utf8'));
143
+ }
144
+ catch {
145
+ return null;
146
+ }
147
+ }
148
+ async emit(event) {
149
+ if (!this.listener)
150
+ return;
151
+ try {
152
+ await this.listener(event);
153
+ }
154
+ catch (error) {
155
+ const message = error instanceof Error ? error.message : String(error);
156
+ this.logger.warn(`[storage-audit] deletion listener failed: ${message}`);
157
+ }
158
+ }
159
+ }
160
+ exports.SafeStorageAdapter = SafeStorageAdapter;
161
+ //# sourceMappingURL=safe-storage.adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safe-storage.adapter.js","sourceRoot":"","sources":["../../src/storage/safe-storage.adapter.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,11 @@ export interface StorageObject {
20
20
  }
21
21
  export interface DeleteOptions {
22
22
  key: string;
23
+ reason?: string;
24
+ }
25
+ export interface CopyOptions {
26
+ sourceKey: string;
27
+ destinationKey: string;
23
28
  }
24
29
  export interface PresignedUrlOptions {
25
30
  key: string;
@@ -35,4 +40,5 @@ export interface IStorageAdapter {
35
40
  deleteObject(options: DeleteOptions): Promise<void>;
36
41
  generatePresignedUrl(options: PresignedUrlOptions): Promise<string>;
37
42
  objectExists(key: string): Promise<boolean>;
43
+ copyObject?(options: CopyOptions): Promise<void>;
38
44
  }
@@ -4,7 +4,10 @@ export declare class StorageService {
4
4
  private configService;
5
5
  private readonly logger;
6
6
  private adapter;
7
+ private safeAdapter;
7
8
  constructor(configService: DBDockConfigService);
8
9
  private initializeAdapter;
9
10
  getAdapter(): IStorageAdapter;
11
+ restoreFromTrash(trashKey: string): Promise<string>;
12
+ purgeTrash(olderThanDays?: number): Promise<number>;
10
13
  }
@@ -18,10 +18,13 @@ const s3_adapter_1 = require("./adapters/s3.adapter");
18
18
  const r2_adapter_1 = require("./adapters/r2.adapter");
19
19
  const cloudinary_adapter_1 = require("./adapters/cloudinary.adapter");
20
20
  const config_schema_1 = require("../config/config.schema");
21
+ const safe_storage_adapter_1 = require("./safe-storage.adapter");
22
+ const deletion_guard_1 = require("./deletion-guard");
21
23
  let StorageService = StorageService_1 = class StorageService {
22
24
  configService;
23
25
  logger = new common_1.Logger(StorageService_1.name);
24
26
  adapter;
27
+ safeAdapter;
25
28
  constructor(configService) {
26
29
  this.configService = configService;
27
30
  this.initializeAdapter();
@@ -45,7 +48,7 @@ let StorageService = StorageService_1 = class StorageService {
45
48
  });
46
49
  this.logger.log('Initialized S3 storage adapter');
47
50
  break;
48
- case config_schema_1.StorageProvider.R2:
51
+ case config_schema_1.StorageProvider.R2: {
49
52
  if (!storageConfig.accessKeyId || !storageConfig.secretAccessKey) {
50
53
  throw new Error('R2 credentials are required');
51
54
  }
@@ -75,8 +78,10 @@ let StorageService = StorageService_1 = class StorageService {
75
78
  });
76
79
  this.logger.log('Initialized R2 storage adapter');
77
80
  break;
81
+ }
78
82
  case config_schema_1.StorageProvider.CLOUDINARY:
79
- if (!storageConfig.cloudinaryApiKey || !storageConfig.cloudinaryApiSecret) {
83
+ if (!storageConfig.cloudinaryApiKey ||
84
+ !storageConfig.cloudinaryApiSecret) {
80
85
  throw new Error('Cloudinary credentials are required (cloudinaryApiKey, cloudinaryApiSecret)');
81
86
  }
82
87
  if (!storageConfig.cloudinaryCloudName) {
@@ -91,12 +96,22 @@ let StorageService = StorageService_1 = class StorageService {
91
96
  this.logger.log('Initialized Cloudinary storage adapter');
92
97
  break;
93
98
  default:
94
- throw new Error(`Unknown storage provider: ${storageConfig.provider}`);
99
+ throw new Error(`Unknown storage provider: ${String(storageConfig.provider)}`);
95
100
  }
101
+ const policy = (0, deletion_guard_1.resolveDeletionGuardPolicy)(storageConfig.deletionSafety);
102
+ this.safeAdapter = new safe_storage_adapter_1.SafeStorageAdapter(this.adapter, policy);
103
+ this.adapter = this.safeAdapter;
104
+ this.logger.log(`Deletion guard active (recycleBin=${policy.recycleBin}, trashRetentionDays=${policy.trashRetentionDays})`);
96
105
  }
97
106
  getAdapter() {
98
107
  return this.adapter;
99
108
  }
109
+ async restoreFromTrash(trashKey) {
110
+ return this.safeAdapter.restoreFromTrash(trashKey);
111
+ }
112
+ async purgeTrash(olderThanDays) {
113
+ return this.safeAdapter.purgeTrash(olderThanDays);
114
+ }
100
115
  };
101
116
  exports.StorageService = StorageService;
102
117
  exports.StorageService = StorageService = StorageService_1 = __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"storage.service.js","sourceRoot":"","sources":["../../src/storage/storage.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storage.service.js","sourceRoot":"","sources":["../../src/storage/storage.service.ts"],"names":[],"mappings":"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"}
@@ -4,15 +4,39 @@ exports.DBDockLogger = void 0;
4
4
  exports.maskCredentials = maskCredentials;
5
5
  const common_1 = require("@nestjs/common");
6
6
  const SENSITIVE_PATTERNS = [
7
- { pattern: /password['":\s]*['"]?([^'"}\s,]+)/gi, replacement: 'password: ********' },
8
- { pattern: /secret['":\s]*['"]?([^'"}\s,]+)/gi, replacement: 'secret: ********' },
9
- { pattern: /accesskey['":\s]*['"]?([^'"}\s,]+)/gi, replacement: 'accessKey: ********' },
10
- { pattern: /secretkey['":\s]*['"]?([^'"}\s,]+)/gi, replacement: 'secretKey: ********' },
11
- { pattern: /apikey['":\s]*['"]?([^'"}\s,]+)/gi, replacement: 'apiKey: ********' },
12
- { pattern: /apisecret['":\s]*['"]?([^'"}\s,]+)/gi, replacement: 'apiSecret: ********' },
13
- { pattern: /webhook['":\s]*['"]?(https?:\/\/[^'"}\s,]+)/gi, replacement: 'webhook: ********' },
7
+ {
8
+ pattern: /password['":\s]*['"]?([^'"}\s,]+)/gi,
9
+ replacement: 'password: ********',
10
+ },
11
+ {
12
+ pattern: /secret['":\s]*['"]?([^'"}\s,]+)/gi,
13
+ replacement: 'secret: ********',
14
+ },
15
+ {
16
+ pattern: /accesskey['":\s]*['"]?([^'"}\s,]+)/gi,
17
+ replacement: 'accessKey: ********',
18
+ },
19
+ {
20
+ pattern: /secretkey['":\s]*['"]?([^'"}\s,]+)/gi,
21
+ replacement: 'secretKey: ********',
22
+ },
23
+ {
24
+ pattern: /apikey['":\s]*['"]?([^'"}\s,]+)/gi,
25
+ replacement: 'apiKey: ********',
26
+ },
27
+ {
28
+ pattern: /apisecret['":\s]*['"]?([^'"}\s,]+)/gi,
29
+ replacement: 'apiSecret: ********',
30
+ },
31
+ {
32
+ pattern: /webhook['":\s]*['"]?(https?:\/\/[^'"}\s,]+)/gi,
33
+ replacement: 'webhook: ********',
34
+ },
14
35
  { pattern: /PGPASSWORD=([^\s]+)/gi, replacement: 'PGPASSWORD=********' },
15
- { pattern: /Bearer\s+([A-Za-z0-9\-._~+/]+=*)/gi, replacement: 'Bearer ********' },
36
+ {
37
+ pattern: /Bearer\s+([A-Za-z0-9\-._~+/]+=*)/gi,
38
+ replacement: 'Bearer ********',
39
+ },
16
40
  { pattern: /Basic\s+([A-Za-z0-9+/]+=*)/gi, replacement: 'Basic ********' },
17
41
  ];
18
42
  function maskCredentials(message) {