@byigitt/wbackup 1.0.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/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/manager.d.ts +33 -0
- package/dist/manager.d.ts.map +1 -0
- package/dist/manager.js +114 -0
- package/dist/manager.js.map +1 -0
- package/dist/registry.d.ts +16 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +43 -0
- package/dist/registry.js.map +1 -0
- package/dist/strategies/backup/index.d.ts +7 -0
- package/dist/strategies/backup/index.d.ts.map +1 -0
- package/dist/strategies/backup/index.js +5 -0
- package/dist/strategies/backup/index.js.map +1 -0
- package/dist/strategies/backup/mongodb.d.ts +29 -0
- package/dist/strategies/backup/mongodb.d.ts.map +1 -0
- package/dist/strategies/backup/mongodb.js +80 -0
- package/dist/strategies/backup/mongodb.js.map +1 -0
- package/dist/strategies/backup/mysql.d.ts +53 -0
- package/dist/strategies/backup/mysql.d.ts.map +1 -0
- package/dist/strategies/backup/mysql.js +92 -0
- package/dist/strategies/backup/mysql.js.map +1 -0
- package/dist/strategies/backup/postgresql.d.ts +46 -0
- package/dist/strategies/backup/postgresql.d.ts.map +1 -0
- package/dist/strategies/backup/postgresql.js +116 -0
- package/dist/strategies/backup/postgresql.js.map +1 -0
- package/dist/strategies/delivery/discord.d.ts +29 -0
- package/dist/strategies/delivery/discord.d.ts.map +1 -0
- package/dist/strategies/delivery/discord.js +110 -0
- package/dist/strategies/delivery/discord.js.map +1 -0
- package/dist/strategies/delivery/index.d.ts +5 -0
- package/dist/strategies/delivery/index.d.ts.map +1 -0
- package/dist/strategies/delivery/index.js +4 -0
- package/dist/strategies/delivery/index.js.map +1 -0
- package/dist/strategies/delivery/telegram.d.ts +54 -0
- package/dist/strategies/delivery/telegram.d.ts.map +1 -0
- package/dist/strategies/delivery/telegram.js +120 -0
- package/dist/strategies/delivery/telegram.js.map +1 -0
- package/dist/types.d.ts +61 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +25 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +114 -0
- package/dist/utils.js.map +1 -0
- package/package.json +56 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { BackupManager, backup } from './manager.js';
|
|
2
|
+
export type { SimpleBackupOptions } from './manager.js';
|
|
3
|
+
export { registry, registerBackupStrategy, registerDeliveryStrategy } from './registry.js';
|
|
4
|
+
export { BackupError } from './utils.js';
|
|
5
|
+
export type { BackupResult, DeliveryResult, BackupMetadata, BackupStrategy, DeliveryStrategy, BackupManagerConfig, BackupManagerResult, OnSuccessCallback, OnErrorCallback, OnProgressCallback, } from './types.js';
|
|
6
|
+
export { MongoBackupStrategy, createMongoBackupStrategy, PostgresBackupStrategy, createPostgresBackupStrategy, MySQLBackupStrategy, createMySQLBackupStrategy, } from './strategies/backup/index.js';
|
|
7
|
+
export type { MongoConfig, PostgresConfig, MySQLConfig, } from './strategies/backup/index.js';
|
|
8
|
+
export { DiscordDeliveryStrategy, createDiscordDeliveryStrategy, TelegramDeliveryStrategy, createTelegramDeliveryStrategy, } from './strategies/delivery/index.js';
|
|
9
|
+
export type { DiscordConfig, TelegramConfig, } from './strategies/delivery/index.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACrD,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD,OAAO,EAAE,QAAQ,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAE3F,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGzC,YAAY,EACV,YAAY,EACZ,cAAc,EACd,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,sBAAsB,EACtB,4BAA4B,EAC5B,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,8BAA8B,CAAC;AAEtC,YAAY,EACV,WAAW,EACX,cAAc,EACd,WAAW,GACZ,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,wBAAwB,EACxB,8BAA8B,GAC/B,MAAM,gCAAgC,CAAC;AAExC,YAAY,EACV,aAAa,EACb,cAAc,GACf,MAAM,gCAAgC,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// Register default strategies
|
|
2
|
+
import { registerBackupStrategy, registerDeliveryStrategy } from './registry.js';
|
|
3
|
+
import { createMongoBackupStrategy } from './strategies/backup/mongodb.js';
|
|
4
|
+
import { createPostgresBackupStrategy } from './strategies/backup/postgresql.js';
|
|
5
|
+
import { createDiscordDeliveryStrategy } from './strategies/delivery/discord.js';
|
|
6
|
+
registerBackupStrategy('mongodb', createMongoBackupStrategy);
|
|
7
|
+
registerBackupStrategy('postgresql', createPostgresBackupStrategy);
|
|
8
|
+
registerBackupStrategy('postgres', createPostgresBackupStrategy);
|
|
9
|
+
registerDeliveryStrategy('discord', createDiscordDeliveryStrategy);
|
|
10
|
+
// Core exports
|
|
11
|
+
export { BackupManager, backup } from './manager.js';
|
|
12
|
+
export { registry, registerBackupStrategy, registerDeliveryStrategy } from './registry.js';
|
|
13
|
+
export { BackupError } from './utils.js';
|
|
14
|
+
// Backup strategy exports
|
|
15
|
+
export { MongoBackupStrategy, createMongoBackupStrategy, PostgresBackupStrategy, createPostgresBackupStrategy, MySQLBackupStrategy, createMySQLBackupStrategy, } from './strategies/backup/index.js';
|
|
16
|
+
// Delivery strategy exports
|
|
17
|
+
export { DiscordDeliveryStrategy, createDiscordDeliveryStrategy, TelegramDeliveryStrategy, createTelegramDeliveryStrategy, } from './strategies/delivery/index.js';
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACjF,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,EAAE,6BAA6B,EAAE,MAAM,kCAAkC,CAAC;AAEjF,sBAAsB,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;AAC7D,sBAAsB,CAAC,YAAY,EAAE,4BAA4B,CAAC,CAAC;AACnE,sBAAsB,CAAC,UAAU,EAAE,4BAA4B,CAAC,CAAC;AAEjE,wBAAwB,CAAC,SAAS,EAAE,6BAA6B,CAAC,CAAC;AAEnE,eAAe;AACf,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAGrD,OAAO,EAAE,QAAQ,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAE3F,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAgBzC,0BAA0B;AAC1B,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,sBAAsB,EACtB,4BAA4B,EAC5B,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,8BAA8B,CAAC;AAQtC,4BAA4B;AAC5B,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,wBAAwB,EACxB,8BAA8B,GAC/B,MAAM,gCAAgC,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { BackupManagerResult, OnSuccessCallback, OnErrorCallback, OnProgressCallback } from './types.js';
|
|
2
|
+
export declare class BackupManager {
|
|
3
|
+
private databaseConfig?;
|
|
4
|
+
private deliveryConfig?;
|
|
5
|
+
private shouldCompress;
|
|
6
|
+
private shouldRetainBackup;
|
|
7
|
+
private onSuccessCallback?;
|
|
8
|
+
private onErrorCallback?;
|
|
9
|
+
private onProgressCallback?;
|
|
10
|
+
database(type: string, config: Record<string, unknown>): this;
|
|
11
|
+
delivery(type: string, config: Record<string, unknown>): this;
|
|
12
|
+
compress(enabled: boolean): this;
|
|
13
|
+
retainBackup(enabled: boolean): this;
|
|
14
|
+
onSuccess(callback: OnSuccessCallback): this;
|
|
15
|
+
onError(callback: OnErrorCallback): this;
|
|
16
|
+
onProgress(callback: OnProgressCallback): this;
|
|
17
|
+
run(): Promise<BackupManagerResult>;
|
|
18
|
+
private progress;
|
|
19
|
+
}
|
|
20
|
+
export interface SimpleBackupOptions {
|
|
21
|
+
database: string;
|
|
22
|
+
connectionString: string;
|
|
23
|
+
databaseName?: string;
|
|
24
|
+
webhook: {
|
|
25
|
+
type: string;
|
|
26
|
+
url: string;
|
|
27
|
+
username?: string;
|
|
28
|
+
};
|
|
29
|
+
compress?: boolean;
|
|
30
|
+
retainBackup?: boolean;
|
|
31
|
+
}
|
|
32
|
+
export declare function backup(options: SimpleBackupOptions): Promise<BackupManagerResult>;
|
|
33
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAIpB,qBAAa,aAAa;IACxB,OAAO,CAAC,cAAc,CAAC,CAAoD;IAC3E,OAAO,CAAC,cAAc,CAAC,CAAoD;IAC3E,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,iBAAiB,CAAC,CAAoB;IAC9C,OAAO,CAAC,eAAe,CAAC,CAAkB;IAC1C,OAAO,CAAC,kBAAkB,CAAC,CAAqB;IAEhD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAK7D,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAK7D,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAKhC,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAKpC,SAAS,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAK5C,OAAO,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAKxC,UAAU,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAKxC,GAAG,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAoEzC,OAAO,CAAC,QAAQ;CAGjB;AAGD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,wBAAgB,MAAM,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAoBjF"}
|
package/dist/manager.js
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { registry } from './registry.js';
|
|
2
|
+
import { BackupError } from './utils.js';
|
|
3
|
+
export class BackupManager {
|
|
4
|
+
databaseConfig;
|
|
5
|
+
deliveryConfig;
|
|
6
|
+
shouldCompress = true;
|
|
7
|
+
shouldRetainBackup = false;
|
|
8
|
+
onSuccessCallback;
|
|
9
|
+
onErrorCallback;
|
|
10
|
+
onProgressCallback;
|
|
11
|
+
database(type, config) {
|
|
12
|
+
this.databaseConfig = { type, config };
|
|
13
|
+
return this;
|
|
14
|
+
}
|
|
15
|
+
delivery(type, config) {
|
|
16
|
+
this.deliveryConfig = { type, config };
|
|
17
|
+
return this;
|
|
18
|
+
}
|
|
19
|
+
compress(enabled) {
|
|
20
|
+
this.shouldCompress = enabled;
|
|
21
|
+
return this;
|
|
22
|
+
}
|
|
23
|
+
retainBackup(enabled) {
|
|
24
|
+
this.shouldRetainBackup = enabled;
|
|
25
|
+
return this;
|
|
26
|
+
}
|
|
27
|
+
onSuccess(callback) {
|
|
28
|
+
this.onSuccessCallback = callback;
|
|
29
|
+
return this;
|
|
30
|
+
}
|
|
31
|
+
onError(callback) {
|
|
32
|
+
this.onErrorCallback = callback;
|
|
33
|
+
return this;
|
|
34
|
+
}
|
|
35
|
+
onProgress(callback) {
|
|
36
|
+
this.onProgressCallback = callback;
|
|
37
|
+
return this;
|
|
38
|
+
}
|
|
39
|
+
async run() {
|
|
40
|
+
if (!this.databaseConfig) {
|
|
41
|
+
throw new Error('Database configuration is required. Call .database() first.');
|
|
42
|
+
}
|
|
43
|
+
if (!this.deliveryConfig) {
|
|
44
|
+
throw new Error('Delivery configuration is required. Call .delivery() first.');
|
|
45
|
+
}
|
|
46
|
+
const startTime = Date.now();
|
|
47
|
+
const backupStrategy = registry.getBackupStrategy(this.databaseConfig.type);
|
|
48
|
+
const deliveryStrategy = registry.getDeliveryStrategy(this.deliveryConfig.type);
|
|
49
|
+
let backupResult;
|
|
50
|
+
try {
|
|
51
|
+
// Phase 1: Backup
|
|
52
|
+
this.progress('backup', `Starting ${backupStrategy.name} backup...`);
|
|
53
|
+
const backupConfig = { ...this.databaseConfig.config, compress: this.shouldCompress };
|
|
54
|
+
const validatedBackupConfig = backupStrategy.configSchema.parse(backupConfig);
|
|
55
|
+
backupResult = await backupStrategy.backup(validatedBackupConfig);
|
|
56
|
+
this.progress('backup', `Backup completed: ${backupResult.fileName}`);
|
|
57
|
+
// Phase 2: Delivery
|
|
58
|
+
this.progress('delivery', `Sending to ${deliveryStrategy.name}...`);
|
|
59
|
+
const validatedDeliveryConfig = deliveryStrategy.configSchema.parse(this.deliveryConfig.config);
|
|
60
|
+
const deliveryResult = await deliveryStrategy.deliver(validatedDeliveryConfig, backupResult);
|
|
61
|
+
if (!deliveryResult.success) {
|
|
62
|
+
throw new BackupError(deliveryResult.error ?? 'Delivery failed', 'delivery');
|
|
63
|
+
}
|
|
64
|
+
this.progress('delivery', 'Delivery completed successfully');
|
|
65
|
+
// Phase 3: Cleanup
|
|
66
|
+
if (!this.shouldRetainBackup) {
|
|
67
|
+
this.progress('cleanup', 'Cleaning up temporary files...');
|
|
68
|
+
await backupStrategy.cleanup(backupResult.filePath);
|
|
69
|
+
this.progress('cleanup', 'Cleanup completed');
|
|
70
|
+
}
|
|
71
|
+
const result = {
|
|
72
|
+
backup: backupResult,
|
|
73
|
+
delivery: deliveryResult,
|
|
74
|
+
totalDuration: Date.now() - startTime,
|
|
75
|
+
};
|
|
76
|
+
await this.onSuccessCallback?.(result);
|
|
77
|
+
return result;
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
const phase = error instanceof BackupError ? error.phase : 'backup';
|
|
81
|
+
// Attempt cleanup on failure
|
|
82
|
+
if (backupResult && !this.shouldRetainBackup) {
|
|
83
|
+
await backupStrategy.cleanup(backupResult.filePath).catch(() => { });
|
|
84
|
+
}
|
|
85
|
+
if (this.onErrorCallback) {
|
|
86
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
87
|
+
await this.onErrorCallback(err, phase);
|
|
88
|
+
}
|
|
89
|
+
throw error;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
progress(phase, message) {
|
|
93
|
+
this.onProgressCallback?.(phase, message);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
export function backup(options) {
|
|
97
|
+
const manager = new BackupManager()
|
|
98
|
+
.database(options.database, {
|
|
99
|
+
connectionString: options.connectionString,
|
|
100
|
+
database: options.databaseName,
|
|
101
|
+
})
|
|
102
|
+
.delivery(options.webhook.type, {
|
|
103
|
+
webhookUrl: options.webhook.url,
|
|
104
|
+
username: options.webhook.username,
|
|
105
|
+
});
|
|
106
|
+
if (options.compress !== undefined) {
|
|
107
|
+
manager.compress(options.compress);
|
|
108
|
+
}
|
|
109
|
+
if (options.retainBackup !== undefined) {
|
|
110
|
+
manager.retainBackup(options.retainBackup);
|
|
111
|
+
}
|
|
112
|
+
return manager.run();
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { BackupStrategy, DeliveryStrategy } from './types.js';
|
|
2
|
+
declare class Registry {
|
|
3
|
+
private readonly backupStrategies;
|
|
4
|
+
private readonly deliveryStrategies;
|
|
5
|
+
registerBackup<TConfig>(name: string, factory: () => BackupStrategy<TConfig>): void;
|
|
6
|
+
registerDelivery<TConfig>(name: string, factory: () => DeliveryStrategy<TConfig>): void;
|
|
7
|
+
getBackupStrategy(name: string): BackupStrategy;
|
|
8
|
+
getDeliveryStrategy(name: string): DeliveryStrategy;
|
|
9
|
+
listBackupStrategies(): string[];
|
|
10
|
+
listDeliveryStrategies(): string[];
|
|
11
|
+
}
|
|
12
|
+
export declare const registry: Registry;
|
|
13
|
+
export declare const registerBackupStrategy: <TConfig>(name: string, factory: () => BackupStrategy<TConfig>) => void;
|
|
14
|
+
export declare const registerDeliveryStrategy: <TConfig>(name: string, factory: () => DeliveryStrategy<TConfig>) => void;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EAGjB,MAAM,YAAY,CAAC;AAEpB,cAAM,QAAQ;IACZ,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA4C;IAC7E,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA8C;IAEjF,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC,OAAO,CAAC,GAAG,IAAI;IAOnF,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC,OAAO,CAAC,GAAG,IAAI;IAOvF,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc;IAS/C,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB;IASnD,oBAAoB,IAAI,MAAM,EAAE;IAIhC,sBAAsB,IAAI,MAAM,EAAE;CAGnC;AAED,eAAO,MAAM,QAAQ,UAAiB,CAAC;AAGvC,eAAO,MAAM,sBAAsB,GA5ClB,OAAO,QAAQ,MAAM,WAAW,MAAM,cAAc,CAAC,OAAO,CAAC,KAAG,IA4CL,CAAC;AAC7E,eAAO,MAAM,wBAAwB,GAtClB,OAAO,QAAQ,MAAM,WAAW,MAAM,gBAAgB,CAAC,OAAO,CAAC,KAAG,IAsCL,CAAC"}
|
package/dist/registry.js
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
class Registry {
|
|
2
|
+
backupStrategies = new Map();
|
|
3
|
+
deliveryStrategies = new Map();
|
|
4
|
+
registerBackup(name, factory) {
|
|
5
|
+
if (this.backupStrategies.has(name)) {
|
|
6
|
+
throw new Error(`Backup strategy "${name}" is already registered`);
|
|
7
|
+
}
|
|
8
|
+
this.backupStrategies.set(name, factory);
|
|
9
|
+
}
|
|
10
|
+
registerDelivery(name, factory) {
|
|
11
|
+
if (this.deliveryStrategies.has(name)) {
|
|
12
|
+
throw new Error(`Delivery strategy "${name}" is already registered`);
|
|
13
|
+
}
|
|
14
|
+
this.deliveryStrategies.set(name, factory);
|
|
15
|
+
}
|
|
16
|
+
getBackupStrategy(name) {
|
|
17
|
+
const factory = this.backupStrategies.get(name);
|
|
18
|
+
if (!factory) {
|
|
19
|
+
const available = Array.from(this.backupStrategies.keys()).join(', ');
|
|
20
|
+
throw new Error(`Unknown backup strategy "${name}". Available: ${available || 'none'}`);
|
|
21
|
+
}
|
|
22
|
+
return factory();
|
|
23
|
+
}
|
|
24
|
+
getDeliveryStrategy(name) {
|
|
25
|
+
const factory = this.deliveryStrategies.get(name);
|
|
26
|
+
if (!factory) {
|
|
27
|
+
const available = Array.from(this.deliveryStrategies.keys()).join(', ');
|
|
28
|
+
throw new Error(`Unknown delivery strategy "${name}". Available: ${available || 'none'}`);
|
|
29
|
+
}
|
|
30
|
+
return factory();
|
|
31
|
+
}
|
|
32
|
+
listBackupStrategies() {
|
|
33
|
+
return Array.from(this.backupStrategies.keys());
|
|
34
|
+
}
|
|
35
|
+
listDeliveryStrategies() {
|
|
36
|
+
return Array.from(this.deliveryStrategies.keys());
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export const registry = new Registry();
|
|
40
|
+
// Convenience functions that delegate to the singleton registry
|
|
41
|
+
export const registerBackupStrategy = registry.registerBackup.bind(registry);
|
|
42
|
+
export const registerDeliveryStrategy = registry.registerDelivery.bind(registry);
|
|
43
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAOA,MAAM,QAAQ;IACK,gBAAgB,GAAG,IAAI,GAAG,EAAiC,CAAC;IAC5D,kBAAkB,GAAG,IAAI,GAAG,EAAmC,CAAC;IAEjF,cAAc,CAAU,IAAY,EAAE,OAAsC;QAC1E,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,yBAAyB,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,OAAgC,CAAC,CAAC;IACpE,CAAC;IAED,gBAAgB,CAAU,IAAY,EAAE,OAAwC;QAC9E,IAAI,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,yBAAyB,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,EAAE,OAAkC,CAAC,CAAC;IACxE,CAAC;IAED,iBAAiB,CAAC,IAAY;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtE,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,iBAAiB,SAAS,IAAI,MAAM,EAAE,CAAC,CAAC;QAC1F,CAAC;QACD,OAAO,OAAO,EAAE,CAAC;IACnB,CAAC;IAED,mBAAmB,CAAC,IAAY;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxE,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,iBAAiB,SAAS,IAAI,MAAM,EAAE,CAAC,CAAC;QAC5F,CAAC;QACD,OAAO,OAAO,EAAE,CAAC;IACnB,CAAC;IAED,oBAAoB;QAClB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,sBAAsB;QACpB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;CACF;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;AAEvC,gEAAgE;AAChE,MAAM,CAAC,MAAM,sBAAsB,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC7E,MAAM,CAAC,MAAM,wBAAwB,GAAG,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { MongoBackupStrategy, createMongoBackupStrategy } from './mongodb.js';
|
|
2
|
+
export type { MongoConfig } from './mongodb.js';
|
|
3
|
+
export { PostgresBackupStrategy, createPostgresBackupStrategy } from './postgresql.js';
|
|
4
|
+
export type { PostgresConfig } from './postgresql.js';
|
|
5
|
+
export { MySQLBackupStrategy, createMySQLBackupStrategy } from './mysql.js';
|
|
6
|
+
export type { MySQLConfig } from './mysql.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/strategies/backup/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAC9E,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,EAAE,sBAAsB,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AACvF,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGtD,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAC5E,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { MongoBackupStrategy, createMongoBackupStrategy } from './mongodb.js';
|
|
2
|
+
export { PostgresBackupStrategy, createPostgresBackupStrategy } from './postgresql.js';
|
|
3
|
+
// Extension stubs - not registered by default
|
|
4
|
+
export { MySQLBackupStrategy, createMySQLBackupStrategy } from './mysql.js';
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/strategies/backup/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAG9E,OAAO,EAAE,sBAAsB,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAGvF,8CAA8C;AAC9C,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { BackupResult, BackupStrategy } from '../../types.js';
|
|
3
|
+
declare const MongoConfigSchema: z.ZodObject<{
|
|
4
|
+
connectionString: z.ZodString;
|
|
5
|
+
database: z.ZodOptional<z.ZodString>;
|
|
6
|
+
collection: z.ZodOptional<z.ZodString>;
|
|
7
|
+
compress: z.ZodDefault<z.ZodBoolean>;
|
|
8
|
+
authenticationDatabase: z.ZodOptional<z.ZodString>;
|
|
9
|
+
additionalArgs: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
10
|
+
}, z.core.$strip>;
|
|
11
|
+
export type MongoConfig = z.infer<typeof MongoConfigSchema>;
|
|
12
|
+
export declare class MongoBackupStrategy implements BackupStrategy<MongoConfig> {
|
|
13
|
+
readonly name = "mongodb";
|
|
14
|
+
readonly configSchema: z.ZodObject<{
|
|
15
|
+
connectionString: z.ZodString;
|
|
16
|
+
database: z.ZodOptional<z.ZodString>;
|
|
17
|
+
collection: z.ZodOptional<z.ZodString>;
|
|
18
|
+
compress: z.ZodDefault<z.ZodBoolean>;
|
|
19
|
+
authenticationDatabase: z.ZodOptional<z.ZodString>;
|
|
20
|
+
additionalArgs: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
21
|
+
}, z.core.$strip>;
|
|
22
|
+
backup(config: MongoConfig): Promise<BackupResult>;
|
|
23
|
+
cleanup(filePath: string): Promise<void>;
|
|
24
|
+
private buildArgs;
|
|
25
|
+
private extractDatabaseName;
|
|
26
|
+
}
|
|
27
|
+
export declare function createMongoBackupStrategy(): BackupStrategy<MongoConfig>;
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=mongodb.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongodb.d.ts","sourceRoot":"","sources":["../../../src/strategies/backup/mongodb.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AASnE,QAAA,MAAM,iBAAiB;;;;;;;iBAOrB,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,qBAAa,mBAAoB,YAAW,cAAc,CAAC,WAAW,CAAC;IACrE,QAAQ,CAAC,IAAI,aAAa;IAC1B,QAAQ,CAAC,YAAY;;;;;;;sBAAqB;IAEpC,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAsClD,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9C,OAAO,CAAC,SAAS;IAiBjB,OAAO,CAAC,mBAAmB;CAa5B;AAED,wBAAgB,yBAAyB,IAAI,cAAc,CAAC,WAAW,CAAC,CAEvE"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { basename } from 'node:path';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { generateTempPath, compressFile, getFileSize, removeFile, runCommand, } from '../../utils.js';
|
|
4
|
+
const MongoConfigSchema = z.object({
|
|
5
|
+
connectionString: z.string().min(1, 'Connection string is required'),
|
|
6
|
+
database: z.string().optional(),
|
|
7
|
+
collection: z.string().optional(),
|
|
8
|
+
compress: z.boolean().default(true),
|
|
9
|
+
authenticationDatabase: z.string().optional(),
|
|
10
|
+
additionalArgs: z.array(z.string()).default([]),
|
|
11
|
+
});
|
|
12
|
+
export class MongoBackupStrategy {
|
|
13
|
+
name = 'mongodb';
|
|
14
|
+
configSchema = MongoConfigSchema;
|
|
15
|
+
async backup(config) {
|
|
16
|
+
const validatedConfig = this.configSchema.parse(config);
|
|
17
|
+
const startTime = Date.now();
|
|
18
|
+
const archivePath = generateTempPath('mongodb-backup', '.archive');
|
|
19
|
+
const args = this.buildArgs(validatedConfig, archivePath);
|
|
20
|
+
await runCommand({
|
|
21
|
+
command: 'mongodump',
|
|
22
|
+
args,
|
|
23
|
+
notFoundMessage: 'mongodump not found. Please install MongoDB Database Tools.',
|
|
24
|
+
});
|
|
25
|
+
let finalPath = archivePath;
|
|
26
|
+
let compressed = false;
|
|
27
|
+
if (validatedConfig.compress) {
|
|
28
|
+
finalPath = await compressFile(archivePath);
|
|
29
|
+
compressed = true;
|
|
30
|
+
}
|
|
31
|
+
const sizeBytes = await getFileSize(finalPath);
|
|
32
|
+
return {
|
|
33
|
+
filePath: finalPath,
|
|
34
|
+
fileName: basename(finalPath),
|
|
35
|
+
sizeBytes,
|
|
36
|
+
database: this.extractDatabaseName(validatedConfig),
|
|
37
|
+
createdAt: new Date(),
|
|
38
|
+
compressed,
|
|
39
|
+
metadata: {
|
|
40
|
+
type: 'mongodb',
|
|
41
|
+
duration: Date.now() - startTime,
|
|
42
|
+
collection: validatedConfig.collection,
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
async cleanup(filePath) {
|
|
47
|
+
await removeFile(filePath);
|
|
48
|
+
}
|
|
49
|
+
buildArgs(config, archivePath) {
|
|
50
|
+
const args = [`--uri=${config.connectionString}`, `--archive=${archivePath}`];
|
|
51
|
+
if (config.database) {
|
|
52
|
+
args.push(`--db=${config.database}`);
|
|
53
|
+
}
|
|
54
|
+
if (config.collection) {
|
|
55
|
+
args.push(`--collection=${config.collection}`);
|
|
56
|
+
}
|
|
57
|
+
if (config.authenticationDatabase) {
|
|
58
|
+
args.push(`--authenticationDatabase=${config.authenticationDatabase}`);
|
|
59
|
+
}
|
|
60
|
+
args.push(...config.additionalArgs);
|
|
61
|
+
return args;
|
|
62
|
+
}
|
|
63
|
+
extractDatabaseName(config) {
|
|
64
|
+
if (config.database) {
|
|
65
|
+
return config.database;
|
|
66
|
+
}
|
|
67
|
+
try {
|
|
68
|
+
const url = new URL(config.connectionString);
|
|
69
|
+
const dbFromPath = url.pathname.slice(1).split('?')[0];
|
|
70
|
+
return dbFromPath || 'all-databases';
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return 'mongodb';
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
export function createMongoBackupStrategy() {
|
|
78
|
+
return new MongoBackupStrategy();
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=mongodb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongodb.js","sourceRoot":"","sources":["../../../src/strategies/backup/mongodb.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,UAAU,EACV,UAAU,GACX,MAAM,gBAAgB,CAAC;AAExB,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,+BAA+B,CAAC;IACpE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACnC,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7C,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CAChD,CAAC,CAAC;AAIH,MAAM,OAAO,mBAAmB;IACrB,IAAI,GAAG,SAAS,CAAC;IACjB,YAAY,GAAG,iBAAiB,CAAC;IAE1C,KAAK,CAAC,MAAM,CAAC,MAAmB;QAC9B,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,MAAM,WAAW,GAAG,gBAAgB,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;QACnE,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;QAE1D,MAAM,UAAU,CAAC;YACf,OAAO,EAAE,WAAW;YACpB,IAAI;YACJ,eAAe,EAAE,6DAA6D;SAC/E,CAAC,CAAC;QAEH,IAAI,SAAS,GAAG,WAAW,CAAC;QAC5B,IAAI,UAAU,GAAG,KAAK,CAAC;QAEvB,IAAI,eAAe,CAAC,QAAQ,EAAE,CAAC;YAC7B,SAAS,GAAG,MAAM,YAAY,CAAC,WAAW,CAAC,CAAC;YAC5C,UAAU,GAAG,IAAI,CAAC;QACpB,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,SAAS,CAAC,CAAC;QAE/C,OAAO;YACL,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE,QAAQ,CAAC,SAAS,CAAC;YAC7B,SAAS;YACT,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC;YACnD,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,UAAU;YACV,QAAQ,EAAE;gBACR,IAAI,EAAE,SAAS;gBACf,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;gBAChC,UAAU,EAAE,eAAe,CAAC,UAAU;aACvC;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,QAAgB;QAC5B,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC;IAEO,SAAS,CAAC,MAAmB,EAAE,WAAmB;QACxD,MAAM,IAAI,GAAa,CAAC,SAAS,MAAM,CAAC,gBAAgB,EAAE,EAAE,aAAa,WAAW,EAAE,CAAC,CAAC;QAExF,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,IAAI,CAAC,IAAI,CAAC,QAAQ,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,gBAAgB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,MAAM,CAAC,sBAAsB,EAAE,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,4BAA4B,MAAM,CAAC,sBAAsB,EAAE,CAAC,CAAC;QACzE,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,mBAAmB,CAAC,MAAmB;QAC7C,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,OAAO,MAAM,CAAC,QAAQ,CAAC;QACzB,CAAC;QAED,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;YAC7C,MAAM,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACvD,OAAO,UAAU,IAAI,eAAe,CAAC;QACvC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,yBAAyB;IACvC,OAAO,IAAI,mBAAmB,EAAE,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MySQL Backup Strategy
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* ```typescript
|
|
6
|
+
* import { registerBackupStrategy, createMySQLBackupStrategy } from 'wbackup';
|
|
7
|
+
*
|
|
8
|
+
* registerBackupStrategy('mysql', createMySQLBackupStrategy);
|
|
9
|
+
*
|
|
10
|
+
* const manager = new BackupManager()
|
|
11
|
+
* .database('mysql', {
|
|
12
|
+
* host: 'localhost',
|
|
13
|
+
* user: 'root',
|
|
14
|
+
* password: 'secret',
|
|
15
|
+
* database: 'mydb',
|
|
16
|
+
* })
|
|
17
|
+
* .delivery('discord', { webhookUrl: '...' });
|
|
18
|
+
*
|
|
19
|
+
* await manager.run();
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
import { z } from 'zod';
|
|
23
|
+
import type { BackupResult, BackupStrategy } from '../../types.js';
|
|
24
|
+
declare const MySQLConfigSchema: z.ZodObject<{
|
|
25
|
+
host: z.ZodDefault<z.ZodString>;
|
|
26
|
+
port: z.ZodDefault<z.ZodNumber>;
|
|
27
|
+
user: z.ZodString;
|
|
28
|
+
password: z.ZodString;
|
|
29
|
+
database: z.ZodString;
|
|
30
|
+
compress: z.ZodDefault<z.ZodBoolean>;
|
|
31
|
+
singleTransaction: z.ZodDefault<z.ZodBoolean>;
|
|
32
|
+
additionalArgs: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
33
|
+
}, z.core.$strip>;
|
|
34
|
+
export type MySQLConfig = z.infer<typeof MySQLConfigSchema>;
|
|
35
|
+
export declare class MySQLBackupStrategy implements BackupStrategy<MySQLConfig> {
|
|
36
|
+
readonly name = "mysql";
|
|
37
|
+
readonly configSchema: z.ZodObject<{
|
|
38
|
+
host: z.ZodDefault<z.ZodString>;
|
|
39
|
+
port: z.ZodDefault<z.ZodNumber>;
|
|
40
|
+
user: z.ZodString;
|
|
41
|
+
password: z.ZodString;
|
|
42
|
+
database: z.ZodString;
|
|
43
|
+
compress: z.ZodDefault<z.ZodBoolean>;
|
|
44
|
+
singleTransaction: z.ZodDefault<z.ZodBoolean>;
|
|
45
|
+
additionalArgs: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
46
|
+
}, z.core.$strip>;
|
|
47
|
+
backup(config: MySQLConfig): Promise<BackupResult>;
|
|
48
|
+
cleanup(filePath: string): Promise<void>;
|
|
49
|
+
private buildArgs;
|
|
50
|
+
}
|
|
51
|
+
export declare function createMySQLBackupStrategy(): BackupStrategy<MySQLConfig>;
|
|
52
|
+
export {};
|
|
53
|
+
//# sourceMappingURL=mysql.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mysql.d.ts","sourceRoot":"","sources":["../../../src/strategies/backup/mysql.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AASnE,QAAA,MAAM,iBAAiB;;;;;;;;;iBASrB,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,qBAAa,mBAAoB,YAAW,cAAc,CAAC,WAAW,CAAC;IACrE,QAAQ,CAAC,IAAI,WAAW;IACxB,QAAQ,CAAC,YAAY;;;;;;;;;sBAAqB;IAEpC,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAwClD,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9C,OAAO,CAAC,SAAS;CAiBlB;AAED,wBAAgB,yBAAyB,IAAI,cAAc,CAAC,WAAW,CAAC,CAEvE"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MySQL Backup Strategy
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* ```typescript
|
|
6
|
+
* import { registerBackupStrategy, createMySQLBackupStrategy } from 'wbackup';
|
|
7
|
+
*
|
|
8
|
+
* registerBackupStrategy('mysql', createMySQLBackupStrategy);
|
|
9
|
+
*
|
|
10
|
+
* const manager = new BackupManager()
|
|
11
|
+
* .database('mysql', {
|
|
12
|
+
* host: 'localhost',
|
|
13
|
+
* user: 'root',
|
|
14
|
+
* password: 'secret',
|
|
15
|
+
* database: 'mydb',
|
|
16
|
+
* })
|
|
17
|
+
* .delivery('discord', { webhookUrl: '...' });
|
|
18
|
+
*
|
|
19
|
+
* await manager.run();
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
import { basename } from 'node:path';
|
|
23
|
+
import { z } from 'zod';
|
|
24
|
+
import { generateTempPath, compressFile, getFileSize, removeFile, runCommand, } from '../../utils.js';
|
|
25
|
+
const MySQLConfigSchema = z.object({
|
|
26
|
+
host: z.string().default('localhost'),
|
|
27
|
+
port: z.number().default(3306),
|
|
28
|
+
user: z.string(),
|
|
29
|
+
password: z.string(),
|
|
30
|
+
database: z.string(),
|
|
31
|
+
compress: z.boolean().default(true),
|
|
32
|
+
singleTransaction: z.boolean().default(true),
|
|
33
|
+
additionalArgs: z.array(z.string()).default([]),
|
|
34
|
+
});
|
|
35
|
+
export class MySQLBackupStrategy {
|
|
36
|
+
name = 'mysql';
|
|
37
|
+
configSchema = MySQLConfigSchema;
|
|
38
|
+
async backup(config) {
|
|
39
|
+
const validatedConfig = this.configSchema.parse(config);
|
|
40
|
+
const startTime = Date.now();
|
|
41
|
+
const outputPath = generateTempPath('mysql-backup', '.sql');
|
|
42
|
+
const args = this.buildArgs(validatedConfig, outputPath);
|
|
43
|
+
await runCommand({
|
|
44
|
+
command: 'mysqldump',
|
|
45
|
+
args,
|
|
46
|
+
env: { ...process.env, MYSQL_PWD: validatedConfig.password },
|
|
47
|
+
notFoundMessage: 'mysqldump not found. Please install MySQL client tools.',
|
|
48
|
+
});
|
|
49
|
+
let finalPath = outputPath;
|
|
50
|
+
let compressed = false;
|
|
51
|
+
if (validatedConfig.compress) {
|
|
52
|
+
finalPath = await compressFile(outputPath);
|
|
53
|
+
compressed = true;
|
|
54
|
+
}
|
|
55
|
+
const sizeBytes = await getFileSize(finalPath);
|
|
56
|
+
return {
|
|
57
|
+
filePath: finalPath,
|
|
58
|
+
fileName: basename(finalPath),
|
|
59
|
+
sizeBytes,
|
|
60
|
+
database: validatedConfig.database,
|
|
61
|
+
createdAt: new Date(),
|
|
62
|
+
compressed,
|
|
63
|
+
metadata: {
|
|
64
|
+
type: 'mysql',
|
|
65
|
+
duration: Date.now() - startTime,
|
|
66
|
+
host: validatedConfig.host,
|
|
67
|
+
port: validatedConfig.port,
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
async cleanup(filePath) {
|
|
72
|
+
await removeFile(filePath);
|
|
73
|
+
}
|
|
74
|
+
buildArgs(config, outputPath) {
|
|
75
|
+
const args = [
|
|
76
|
+
`--host=${config.host}`,
|
|
77
|
+
`--port=${config.port}`,
|
|
78
|
+
`--user=${config.user}`,
|
|
79
|
+
`--result-file=${outputPath}`,
|
|
80
|
+
];
|
|
81
|
+
if (config.singleTransaction) {
|
|
82
|
+
args.push('--single-transaction');
|
|
83
|
+
}
|
|
84
|
+
args.push(...config.additionalArgs);
|
|
85
|
+
args.push(config.database);
|
|
86
|
+
return args;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
export function createMySQLBackupStrategy() {
|
|
90
|
+
return new MySQLBackupStrategy();
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=mysql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mysql.js","sourceRoot":"","sources":["../../../src/strategies/backup/mysql.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { BackupResult, BackupStrategy } from '../../types.js';
|
|
3
|
+
declare const PostgresConfigSchema: z.ZodObject<{
|
|
4
|
+
connectionString: z.ZodString;
|
|
5
|
+
format: z.ZodDefault<z.ZodEnum<{
|
|
6
|
+
custom: "custom";
|
|
7
|
+
plain: "plain";
|
|
8
|
+
directory: "directory";
|
|
9
|
+
tar: "tar";
|
|
10
|
+
}>>;
|
|
11
|
+
compress: z.ZodDefault<z.ZodBoolean>;
|
|
12
|
+
schema: z.ZodOptional<z.ZodString>;
|
|
13
|
+
table: z.ZodOptional<z.ZodString>;
|
|
14
|
+
dataOnly: z.ZodDefault<z.ZodBoolean>;
|
|
15
|
+
schemaOnly: z.ZodDefault<z.ZodBoolean>;
|
|
16
|
+
clean: z.ZodDefault<z.ZodBoolean>;
|
|
17
|
+
additionalArgs: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
18
|
+
}, z.core.$strip>;
|
|
19
|
+
export type PostgresConfig = z.infer<typeof PostgresConfigSchema>;
|
|
20
|
+
export declare class PostgresBackupStrategy implements BackupStrategy<PostgresConfig> {
|
|
21
|
+
readonly name = "postgresql";
|
|
22
|
+
readonly configSchema: z.ZodObject<{
|
|
23
|
+
connectionString: z.ZodString;
|
|
24
|
+
format: z.ZodDefault<z.ZodEnum<{
|
|
25
|
+
custom: "custom";
|
|
26
|
+
plain: "plain";
|
|
27
|
+
directory: "directory";
|
|
28
|
+
tar: "tar";
|
|
29
|
+
}>>;
|
|
30
|
+
compress: z.ZodDefault<z.ZodBoolean>;
|
|
31
|
+
schema: z.ZodOptional<z.ZodString>;
|
|
32
|
+
table: z.ZodOptional<z.ZodString>;
|
|
33
|
+
dataOnly: z.ZodDefault<z.ZodBoolean>;
|
|
34
|
+
schemaOnly: z.ZodDefault<z.ZodBoolean>;
|
|
35
|
+
clean: z.ZodDefault<z.ZodBoolean>;
|
|
36
|
+
additionalArgs: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
37
|
+
}, z.core.$strip>;
|
|
38
|
+
backup(config: PostgresConfig): Promise<BackupResult>;
|
|
39
|
+
cleanup(filePath: string): Promise<void>;
|
|
40
|
+
private buildArgs;
|
|
41
|
+
private buildEnv;
|
|
42
|
+
private extractDatabaseName;
|
|
43
|
+
}
|
|
44
|
+
export declare function createPostgresBackupStrategy(): BackupStrategy<PostgresConfig>;
|
|
45
|
+
export {};
|
|
46
|
+
//# sourceMappingURL=postgresql.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgresql.d.ts","sourceRoot":"","sources":["../../../src/strategies/backup/postgresql.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AASnE,QAAA,MAAM,oBAAoB;;;;;;;;;;;;;;;iBAUxB,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AASlE,qBAAa,sBAAuB,YAAW,cAAc,CAAC,cAAc,CAAC;IAC3E,QAAQ,CAAC,IAAI,gBAAgB;IAC7B,QAAQ,CAAC,YAAY;;;;;;;;;;;;;;;sBAAwB;IAEvC,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC;IA4CrD,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9C,OAAO,CAAC,SAAS;IA4BjB,OAAO,CAAC,QAAQ;IAehB,OAAO,CAAC,mBAAmB;CAU5B;AAED,wBAAgB,4BAA4B,IAAI,cAAc,CAAC,cAAc,CAAC,CAE7E"}
|