bunqueue 1.1.3 → 1.1.4
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/README.md +37 -0
- package/dist/cli/commands/backup.d.ts +20 -0
- package/dist/cli/commands/backup.d.ts.map +1 -0
- package/dist/cli/commands/backup.js +143 -0
- package/dist/cli/commands/backup.js.map +1 -0
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +6 -0
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +27 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/infrastructure/backup/index.d.ts +5 -0
- package/dist/infrastructure/backup/index.d.ts.map +1 -0
- package/dist/infrastructure/backup/index.js +5 -0
- package/dist/infrastructure/backup/index.js.map +1 -0
- package/dist/infrastructure/backup/s3Backup.d.ts +101 -0
- package/dist/infrastructure/backup/s3Backup.d.ts.map +1 -0
- package/dist/infrastructure/backup/s3Backup.js +313 -0
- package/dist/infrastructure/backup/s3Backup.js.map +1 -0
- package/dist/main.js +15 -0
- package/dist/main.js.map +1 -1
- package/dist/shared/logger.d.ts +1 -0
- package/dist/shared/logger.d.ts.map +1 -1
- package/dist/shared/logger.js +1 -0
- package/dist/shared/logger.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -59,6 +59,8 @@ bunqueue
|
|
|
59
59
|
docker run -p 6789:6789 -p 6790:6790 ghcr.io/egeominotti/bunqueue
|
|
60
60
|
```
|
|
61
61
|
|
|
62
|
+
<img src=".github/terminal.png" alt="bunqueue server running" width="600" />
|
|
63
|
+
|
|
62
64
|
### Production Setup
|
|
63
65
|
|
|
64
66
|
For production, enable **persistence** and **authentication**:
|
|
@@ -672,6 +674,41 @@ curl -X POST http://localhost:6790/cron \
|
|
|
672
674
|
| `DATA_PATH` | - | SQLite database path (in-memory if not set) |
|
|
673
675
|
| `CORS_ALLOW_ORIGIN` | * | Allowed CORS origins |
|
|
674
676
|
|
|
677
|
+
### S3 Backup Configuration
|
|
678
|
+
|
|
679
|
+
| Variable | Default | Description |
|
|
680
|
+
|----------|---------|-------------|
|
|
681
|
+
| `S3_BACKUP_ENABLED` | 0 | Enable automated S3 backups (1/true) |
|
|
682
|
+
| `S3_ACCESS_KEY_ID` | - | S3 access key |
|
|
683
|
+
| `S3_SECRET_ACCESS_KEY` | - | S3 secret key |
|
|
684
|
+
| `S3_BUCKET` | - | S3 bucket name |
|
|
685
|
+
| `S3_REGION` | us-east-1 | S3 region |
|
|
686
|
+
| `S3_ENDPOINT` | - | Custom endpoint for S3-compatible services |
|
|
687
|
+
| `S3_BACKUP_INTERVAL` | 21600000 | Backup interval in ms (default: 6 hours) |
|
|
688
|
+
| `S3_BACKUP_RETENTION` | 7 | Number of backups to retain |
|
|
689
|
+
| `S3_BACKUP_PREFIX` | backups/ | Prefix for backup files |
|
|
690
|
+
|
|
691
|
+
**Supported S3 Providers:**
|
|
692
|
+
- AWS S3
|
|
693
|
+
- Cloudflare R2: `S3_ENDPOINT=https://<account-id>.r2.cloudflarestorage.com`
|
|
694
|
+
- MinIO: `S3_ENDPOINT=http://localhost:9000`
|
|
695
|
+
- DigitalOcean Spaces: `S3_ENDPOINT=https://<region>.digitaloceanspaces.com`
|
|
696
|
+
|
|
697
|
+
**CLI Commands:**
|
|
698
|
+
```bash
|
|
699
|
+
# Create backup immediately
|
|
700
|
+
bunqueue backup now
|
|
701
|
+
|
|
702
|
+
# List available backups
|
|
703
|
+
bunqueue backup list
|
|
704
|
+
|
|
705
|
+
# Restore from backup (requires --force)
|
|
706
|
+
bunqueue backup restore backups/bunqueue-2024-01-15.db --force
|
|
707
|
+
|
|
708
|
+
# Show backup status
|
|
709
|
+
bunqueue backup status
|
|
710
|
+
```
|
|
711
|
+
|
|
675
712
|
### Authentication
|
|
676
713
|
|
|
677
714
|
Enable authentication by setting `AUTH_TOKENS`:
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Backup Command Builders
|
|
3
|
+
* S3 backup operations (executed locally, not via TCP)
|
|
4
|
+
*/
|
|
5
|
+
/** Backup command result */
|
|
6
|
+
export interface BackupCommandResult {
|
|
7
|
+
success: boolean;
|
|
8
|
+
message: string;
|
|
9
|
+
data?: unknown;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Execute backup command directly (not via TCP)
|
|
13
|
+
* Returns result instead of building a command
|
|
14
|
+
*/
|
|
15
|
+
export declare function executeBackupCommand(args: string[]): Promise<BackupCommandResult>;
|
|
16
|
+
/**
|
|
17
|
+
* Check if a command is a backup command
|
|
18
|
+
*/
|
|
19
|
+
export declare function isBackupCommand(cmd: string): boolean;
|
|
20
|
+
//# sourceMappingURL=backup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/backup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,4BAA4B;AAC5B,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA8CvF;AAyGD;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEpD"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Backup Command Builders
|
|
3
|
+
* S3 backup operations (executed locally, not via TCP)
|
|
4
|
+
*/
|
|
5
|
+
import { parseArgs } from 'node:util';
|
|
6
|
+
import { S3BackupManager } from '../../infrastructure/backup';
|
|
7
|
+
import { CommandError, requireArg } from './types';
|
|
8
|
+
/**
|
|
9
|
+
* Execute backup command directly (not via TCP)
|
|
10
|
+
* Returns result instead of building a command
|
|
11
|
+
*/
|
|
12
|
+
export async function executeBackupCommand(args) {
|
|
13
|
+
const subcommand = args[0];
|
|
14
|
+
const subArgs = args.slice(1);
|
|
15
|
+
// Get database path from env
|
|
16
|
+
const dataPath = process.env.DATA_PATH ?? process.env.SQLITE_PATH;
|
|
17
|
+
if (!dataPath) {
|
|
18
|
+
return {
|
|
19
|
+
success: false,
|
|
20
|
+
message: 'DATA_PATH not set. Backup requires persistent storage.',
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
// Create backup manager
|
|
24
|
+
const config = S3BackupManager.fromEnv(dataPath);
|
|
25
|
+
const manager = new S3BackupManager(config);
|
|
26
|
+
// Validate configuration
|
|
27
|
+
const validation = manager.validate();
|
|
28
|
+
if (!validation.valid) {
|
|
29
|
+
return {
|
|
30
|
+
success: false,
|
|
31
|
+
message: `S3 configuration invalid:\n - ${validation.errors.join('\n - ')}`,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
switch (subcommand) {
|
|
35
|
+
case 'now':
|
|
36
|
+
case 'create':
|
|
37
|
+
return executeBackupNow(manager);
|
|
38
|
+
case 'list':
|
|
39
|
+
return executeBackupList(manager);
|
|
40
|
+
case 'restore':
|
|
41
|
+
return executeBackupRestore(manager, subArgs);
|
|
42
|
+
case 'status':
|
|
43
|
+
return executeBackupStatus(manager);
|
|
44
|
+
default:
|
|
45
|
+
throw new CommandError(`Unknown backup subcommand: ${subcommand}. Use: now, list, restore, status`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
async function executeBackupNow(manager) {
|
|
49
|
+
const result = await manager.backup();
|
|
50
|
+
if (result.success) {
|
|
51
|
+
return {
|
|
52
|
+
success: true,
|
|
53
|
+
message: `Backup created successfully`,
|
|
54
|
+
data: {
|
|
55
|
+
key: result.key,
|
|
56
|
+
size: `${((result.size ?? 0) / 1024 / 1024).toFixed(2)} MB`,
|
|
57
|
+
duration: `${result.duration}ms`,
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
return {
|
|
63
|
+
success: false,
|
|
64
|
+
message: `Backup failed: ${result.error}`,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
async function executeBackupList(manager) {
|
|
69
|
+
const backups = await manager.listBackups();
|
|
70
|
+
if (backups.length === 0) {
|
|
71
|
+
return {
|
|
72
|
+
success: true,
|
|
73
|
+
message: 'No backups found',
|
|
74
|
+
data: [],
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
success: true,
|
|
79
|
+
message: `Found ${backups.length} backup(s)`,
|
|
80
|
+
data: backups.map((b) => ({
|
|
81
|
+
key: b.key,
|
|
82
|
+
size: `${(b.size / 1024 / 1024).toFixed(2)} MB`,
|
|
83
|
+
date: b.lastModified.toISOString(),
|
|
84
|
+
})),
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
async function executeBackupRestore(manager, args) {
|
|
88
|
+
const { values, positionals } = parseArgs({
|
|
89
|
+
args,
|
|
90
|
+
options: {
|
|
91
|
+
force: { type: 'boolean', short: 'f', default: false },
|
|
92
|
+
},
|
|
93
|
+
allowPositionals: true,
|
|
94
|
+
strict: false,
|
|
95
|
+
});
|
|
96
|
+
const key = requireArg(positionals, 0, 'backup-key');
|
|
97
|
+
if (!values.force) {
|
|
98
|
+
return {
|
|
99
|
+
success: false,
|
|
100
|
+
message: 'Restore will OVERWRITE the current database. Use --force (-f) to confirm.\n' +
|
|
101
|
+
'WARNING: Stop the server before restoring!',
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
const result = await manager.restore(key);
|
|
105
|
+
if (result.success) {
|
|
106
|
+
return {
|
|
107
|
+
success: true,
|
|
108
|
+
message: `Restore completed successfully`,
|
|
109
|
+
data: {
|
|
110
|
+
key: result.key,
|
|
111
|
+
size: `${((result.size ?? 0) / 1024 / 1024).toFixed(2)} MB`,
|
|
112
|
+
duration: `${result.duration}ms`,
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
return {
|
|
118
|
+
success: false,
|
|
119
|
+
message: `Restore failed: ${result.error}`,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
function executeBackupStatus(manager) {
|
|
124
|
+
const status = manager.getStatus();
|
|
125
|
+
return Promise.resolve({
|
|
126
|
+
success: true,
|
|
127
|
+
message: 'Backup configuration',
|
|
128
|
+
data: {
|
|
129
|
+
enabled: status.enabled,
|
|
130
|
+
bucket: status.bucket,
|
|
131
|
+
endpoint: status.endpoint,
|
|
132
|
+
interval: `${Math.round(status.intervalMs / 1000 / 60)} minutes`,
|
|
133
|
+
retention: `${status.retention} backups`,
|
|
134
|
+
},
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Check if a command is a backup command
|
|
139
|
+
*/
|
|
140
|
+
export function isBackupCommand(cmd) {
|
|
141
|
+
return cmd === 'backup';
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=backup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../../../src/cli/commands/backup.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/help.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,gCAAgC;AAChC,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAED,sBAAsB;AACtB,wBAAgB,SAAS,IAAI,IAAI,
|
|
1
|
+
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,gCAAgC;AAChC,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAED,sBAAsB;AACtB,wBAAgB,SAAS,IAAI,IAAI,CA+FhC;AAED,wBAAwB;AACxB,wBAAgB,eAAe,IAAI,IAAI,CAmBtC;AAED,8BAA8B;AAC9B,wBAAgB,aAAa,IAAI,IAAI,CA+BpC;AAED,0BAA0B;AAC1B,wBAAgB,gBAAgB,IAAI,IAAI,CAqBvC"}
|
package/dist/cli/help.js
CHANGED
|
@@ -78,6 +78,12 @@ MONITORING:
|
|
|
78
78
|
metrics Show Prometheus metrics
|
|
79
79
|
health Health check
|
|
80
80
|
|
|
81
|
+
BACKUP (S3):
|
|
82
|
+
backup now Create backup immediately
|
|
83
|
+
backup list List available backups
|
|
84
|
+
backup restore <key> [-f] Restore from backup
|
|
85
|
+
backup status Show backup configuration
|
|
86
|
+
|
|
81
87
|
GLOBAL OPTIONS:
|
|
82
88
|
-H, --host <host> Server host (default: localhost)
|
|
83
89
|
-p, --port <port> TCP port (default: 6789)
|
package/dist/cli/help.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,gCAAgC;AAChC,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,EAAE,CAAC,CAAC;AACtC,CAAC;AAED,sBAAsB;AACtB,MAAM,UAAU,SAAS;IACvB,OAAO,CAAC,GAAG,CAAC
|
|
1
|
+
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,gCAAgC;AAChC,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,EAAE,CAAC,CAAC;AACtC,CAAC;AAED,sBAAsB;AACtB,MAAM,UAAU,SAAS;IACvB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6Fb,CAAC,CAAC;AACH,CAAC;AAED,wBAAwB;AACxB,MAAM,UAAU,eAAe;IAC7B,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;CAiBb,CAAC,CAAC;AACH,CAAC;AAED,8BAA8B;AAC9B,MAAM,UAAU,aAAa;IAC3B,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6Bb,CAAC,CAAC;AACH,CAAC;AAED,0BAA0B;AAC1B,MAAM,UAAU,gBAAgB;IAC9B,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;CAmBb,CAAC,CAAC;AACH,CAAC"}
|
package/dist/cli/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AAqEH,qBAAqB;AACrB,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAmE1C"}
|
package/dist/cli/index.js
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import { runServer } from './commands/server';
|
|
7
7
|
import { executeCommand } from './client';
|
|
8
8
|
import { printHelp, printVersion } from './help';
|
|
9
|
+
import { isBackupCommand, executeBackupCommand } from './commands/backup';
|
|
9
10
|
/** Version from package.json */
|
|
10
11
|
const VERSION = '1.0.7';
|
|
11
12
|
/** Parse global options from process.argv */
|
|
@@ -87,6 +88,32 @@ export async function main() {
|
|
|
87
88
|
printHelp();
|
|
88
89
|
process.exit(0);
|
|
89
90
|
}
|
|
91
|
+
// Backup command - executed locally, not via TCP
|
|
92
|
+
if (isBackupCommand(command)) {
|
|
93
|
+
try {
|
|
94
|
+
const result = await executeBackupCommand(commandArgs.slice(1));
|
|
95
|
+
if (options.json) {
|
|
96
|
+
console.log(JSON.stringify(result, null, 2));
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
console.log(result.message);
|
|
100
|
+
if (result.data) {
|
|
101
|
+
console.log(JSON.stringify(result.data, null, 2));
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
process.exit(result.success ? 0 : 1);
|
|
105
|
+
}
|
|
106
|
+
catch (err) {
|
|
107
|
+
if (err instanceof Error) {
|
|
108
|
+
console.error(`Error: ${err.message}`);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
console.error('Unknown error occurred');
|
|
112
|
+
}
|
|
113
|
+
process.exit(1);
|
|
114
|
+
}
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
90
117
|
// Client mode - execute command against server
|
|
91
118
|
try {
|
|
92
119
|
await executeCommand(command, commandArgs.slice(1), options);
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/backup/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,KAAK,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/infrastructure/backup/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAA0C,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* S3 Backup Module
|
|
3
|
+
* Automated database backup to S3-compatible storage
|
|
4
|
+
*
|
|
5
|
+
* Supports: AWS S3, Cloudflare R2, MinIO, DigitalOcean Spaces, etc.
|
|
6
|
+
*/
|
|
7
|
+
/** S3 Backup configuration */
|
|
8
|
+
export interface S3BackupConfig {
|
|
9
|
+
/** Enable S3 backup */
|
|
10
|
+
enabled: boolean;
|
|
11
|
+
/** S3 access key ID */
|
|
12
|
+
accessKeyId: string;
|
|
13
|
+
/** S3 secret access key */
|
|
14
|
+
secretAccessKey: string;
|
|
15
|
+
/** S3 bucket name */
|
|
16
|
+
bucket: string;
|
|
17
|
+
/** S3 endpoint (optional, for non-AWS S3-compatible services) */
|
|
18
|
+
endpoint?: string;
|
|
19
|
+
/** S3 region (optional, default: us-east-1) */
|
|
20
|
+
region?: string;
|
|
21
|
+
/** Backup interval in milliseconds (default: 6 hours) */
|
|
22
|
+
intervalMs: number;
|
|
23
|
+
/** Number of backups to retain (default: 7) */
|
|
24
|
+
retention: number;
|
|
25
|
+
/** Prefix for backup files (default: 'backups/') */
|
|
26
|
+
prefix: string;
|
|
27
|
+
/** Path to the SQLite database file */
|
|
28
|
+
databasePath: string;
|
|
29
|
+
}
|
|
30
|
+
/** Backup result */
|
|
31
|
+
export interface BackupResult {
|
|
32
|
+
success: boolean;
|
|
33
|
+
key?: string;
|
|
34
|
+
size?: number;
|
|
35
|
+
duration?: number;
|
|
36
|
+
error?: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* S3 Backup Manager
|
|
40
|
+
* Handles automated and manual backups to S3-compatible storage
|
|
41
|
+
*/
|
|
42
|
+
export declare class S3BackupManager {
|
|
43
|
+
private readonly config;
|
|
44
|
+
private readonly client;
|
|
45
|
+
private backupInterval;
|
|
46
|
+
private isBackupInProgress;
|
|
47
|
+
constructor(config: Partial<S3BackupConfig> & {
|
|
48
|
+
databasePath: string;
|
|
49
|
+
});
|
|
50
|
+
/**
|
|
51
|
+
* Create configuration from environment variables
|
|
52
|
+
*/
|
|
53
|
+
static fromEnv(databasePath: string): S3BackupConfig;
|
|
54
|
+
/**
|
|
55
|
+
* Validate configuration
|
|
56
|
+
*/
|
|
57
|
+
validate(): {
|
|
58
|
+
valid: boolean;
|
|
59
|
+
errors: string[];
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Start automated backup scheduler
|
|
63
|
+
*/
|
|
64
|
+
start(): void;
|
|
65
|
+
/**
|
|
66
|
+
* Stop automated backup scheduler
|
|
67
|
+
*/
|
|
68
|
+
stop(): void;
|
|
69
|
+
/**
|
|
70
|
+
* Perform a backup
|
|
71
|
+
*/
|
|
72
|
+
backup(): Promise<BackupResult>;
|
|
73
|
+
/**
|
|
74
|
+
* List available backups
|
|
75
|
+
*/
|
|
76
|
+
listBackups(): Promise<Array<{
|
|
77
|
+
key: string;
|
|
78
|
+
size: number;
|
|
79
|
+
lastModified: Date;
|
|
80
|
+
}>>;
|
|
81
|
+
/**
|
|
82
|
+
* Restore from a backup
|
|
83
|
+
*/
|
|
84
|
+
restore(key: string): Promise<BackupResult>;
|
|
85
|
+
/**
|
|
86
|
+
* Clean up old backups based on retention policy
|
|
87
|
+
*/
|
|
88
|
+
private cleanupOldBackups;
|
|
89
|
+
/**
|
|
90
|
+
* Get backup status
|
|
91
|
+
*/
|
|
92
|
+
getStatus(): {
|
|
93
|
+
enabled: boolean;
|
|
94
|
+
bucket: string;
|
|
95
|
+
endpoint: string;
|
|
96
|
+
intervalMs: number;
|
|
97
|
+
retention: number;
|
|
98
|
+
isRunning: boolean;
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=s3Backup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3Backup.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/backup/s3Backup.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,8BAA8B;AAC9B,MAAM,WAAW,cAAc;IAC7B,uBAAuB;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,uBAAuB;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,2BAA2B;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,UAAU,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,oBAAoB;AACpB,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAkBD;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAW;IAClC,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,kBAAkB,CAAS;gBAEvB,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE;IAwBtE;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,cAAc;IAepD;;OAEG;IACH,QAAQ,IAAI;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;IAmBhD;;OAEG;IACH,KAAK,IAAI,IAAI;IAkCb;;OAEG;IACH,IAAI,IAAI,IAAI;IAQZ;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC;IAwErC;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IAmCtF;;OAEG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAkDjD;;OAEG;YACW,iBAAiB;IAoC/B;;OAEG;IACH,SAAS,IAAI;QACX,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,OAAO,CAAC;KACpB;CAUF"}
|
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* S3 Backup Module
|
|
3
|
+
* Automated database backup to S3-compatible storage
|
|
4
|
+
*
|
|
5
|
+
* Supports: AWS S3, Cloudflare R2, MinIO, DigitalOcean Spaces, etc.
|
|
6
|
+
*/
|
|
7
|
+
import { S3Client } from 'bun';
|
|
8
|
+
import { backupLog } from '../../shared/logger';
|
|
9
|
+
/** Default configuration values */
|
|
10
|
+
const DEFAULTS = {
|
|
11
|
+
intervalMs: 6 * 60 * 60 * 1000, // 6 hours
|
|
12
|
+
retention: 7,
|
|
13
|
+
prefix: 'backups/',
|
|
14
|
+
region: 'us-east-1',
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* S3 Backup Manager
|
|
18
|
+
* Handles automated and manual backups to S3-compatible storage
|
|
19
|
+
*/
|
|
20
|
+
export class S3BackupManager {
|
|
21
|
+
config;
|
|
22
|
+
client;
|
|
23
|
+
backupInterval = null;
|
|
24
|
+
isBackupInProgress = false;
|
|
25
|
+
constructor(config) {
|
|
26
|
+
this.config = {
|
|
27
|
+
enabled: config.enabled ?? false,
|
|
28
|
+
accessKeyId: config.accessKeyId ?? '',
|
|
29
|
+
secretAccessKey: config.secretAccessKey ?? '',
|
|
30
|
+
bucket: config.bucket ?? '',
|
|
31
|
+
endpoint: config.endpoint,
|
|
32
|
+
region: config.region ?? DEFAULTS.region,
|
|
33
|
+
intervalMs: config.intervalMs ?? DEFAULTS.intervalMs,
|
|
34
|
+
retention: config.retention ?? DEFAULTS.retention,
|
|
35
|
+
prefix: config.prefix ?? DEFAULTS.prefix,
|
|
36
|
+
databasePath: config.databasePath,
|
|
37
|
+
};
|
|
38
|
+
// Initialize S3 client
|
|
39
|
+
this.client = new S3Client({
|
|
40
|
+
accessKeyId: this.config.accessKeyId,
|
|
41
|
+
secretAccessKey: this.config.secretAccessKey,
|
|
42
|
+
bucket: this.config.bucket,
|
|
43
|
+
endpoint: this.config.endpoint,
|
|
44
|
+
region: this.config.region,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Create configuration from environment variables
|
|
49
|
+
*/
|
|
50
|
+
static fromEnv(databasePath) {
|
|
51
|
+
return {
|
|
52
|
+
enabled: process.env.S3_BACKUP_ENABLED === '1' || process.env.S3_BACKUP_ENABLED === 'true',
|
|
53
|
+
accessKeyId: process.env.S3_ACCESS_KEY_ID ?? process.env.AWS_ACCESS_KEY_ID ?? '',
|
|
54
|
+
secretAccessKey: process.env.S3_SECRET_ACCESS_KEY ?? process.env.AWS_SECRET_ACCESS_KEY ?? '',
|
|
55
|
+
bucket: process.env.S3_BUCKET ?? process.env.AWS_BUCKET ?? '',
|
|
56
|
+
endpoint: process.env.S3_ENDPOINT ?? process.env.AWS_ENDPOINT,
|
|
57
|
+
region: process.env.S3_REGION ?? process.env.AWS_REGION ?? DEFAULTS.region,
|
|
58
|
+
intervalMs: parseInt(process.env.S3_BACKUP_INTERVAL ?? '', 10) || DEFAULTS.intervalMs,
|
|
59
|
+
retention: parseInt(process.env.S3_BACKUP_RETENTION ?? '', 10) || DEFAULTS.retention,
|
|
60
|
+
prefix: process.env.S3_BACKUP_PREFIX ?? DEFAULTS.prefix,
|
|
61
|
+
databasePath,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Validate configuration
|
|
66
|
+
*/
|
|
67
|
+
validate() {
|
|
68
|
+
const errors = [];
|
|
69
|
+
if (!this.config.accessKeyId) {
|
|
70
|
+
errors.push('S3_ACCESS_KEY_ID is required');
|
|
71
|
+
}
|
|
72
|
+
if (!this.config.secretAccessKey) {
|
|
73
|
+
errors.push('S3_SECRET_ACCESS_KEY is required');
|
|
74
|
+
}
|
|
75
|
+
if (!this.config.bucket) {
|
|
76
|
+
errors.push('S3_BUCKET is required');
|
|
77
|
+
}
|
|
78
|
+
if (!this.config.databasePath) {
|
|
79
|
+
errors.push('Database path is required');
|
|
80
|
+
}
|
|
81
|
+
return { valid: errors.length === 0, errors };
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Start automated backup scheduler
|
|
85
|
+
*/
|
|
86
|
+
start() {
|
|
87
|
+
if (!this.config.enabled) {
|
|
88
|
+
backupLog.info('S3 backup disabled');
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
const validation = this.validate();
|
|
92
|
+
if (!validation.valid) {
|
|
93
|
+
backupLog.error('S3 backup configuration invalid', { errors: validation.errors });
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
backupLog.info('S3 backup scheduler started', {
|
|
97
|
+
bucket: this.config.bucket,
|
|
98
|
+
endpoint: this.config.endpoint ?? 'AWS S3',
|
|
99
|
+
interval: `${Math.round(this.config.intervalMs / 1000 / 60)} minutes`,
|
|
100
|
+
retention: this.config.retention,
|
|
101
|
+
});
|
|
102
|
+
// Run initial backup after 1 minute
|
|
103
|
+
setTimeout(() => {
|
|
104
|
+
this.backup().catch((err) => {
|
|
105
|
+
backupLog.error('Initial backup failed', { error: String(err) });
|
|
106
|
+
});
|
|
107
|
+
}, 60 * 1000);
|
|
108
|
+
// Schedule periodic backups
|
|
109
|
+
this.backupInterval = setInterval(() => {
|
|
110
|
+
this.backup().catch((err) => {
|
|
111
|
+
backupLog.error('Scheduled backup failed', { error: String(err) });
|
|
112
|
+
});
|
|
113
|
+
}, this.config.intervalMs);
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Stop automated backup scheduler
|
|
117
|
+
*/
|
|
118
|
+
stop() {
|
|
119
|
+
if (this.backupInterval) {
|
|
120
|
+
clearInterval(this.backupInterval);
|
|
121
|
+
this.backupInterval = null;
|
|
122
|
+
backupLog.info('S3 backup scheduler stopped');
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Perform a backup
|
|
127
|
+
*/
|
|
128
|
+
async backup() {
|
|
129
|
+
if (this.isBackupInProgress) {
|
|
130
|
+
backupLog.warn('Backup already in progress, skipping');
|
|
131
|
+
return { success: false, error: 'Backup already in progress' };
|
|
132
|
+
}
|
|
133
|
+
this.isBackupInProgress = true;
|
|
134
|
+
const startTime = Date.now();
|
|
135
|
+
try {
|
|
136
|
+
// Check if database file exists
|
|
137
|
+
const dbFile = Bun.file(this.config.databasePath);
|
|
138
|
+
const exists = await dbFile.exists();
|
|
139
|
+
if (!exists) {
|
|
140
|
+
throw new Error(`Database file not found: ${this.config.databasePath}`);
|
|
141
|
+
}
|
|
142
|
+
// Generate backup key with timestamp
|
|
143
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
144
|
+
const key = `${this.config.prefix}bunqueue-${timestamp}.db`;
|
|
145
|
+
// Read database file
|
|
146
|
+
const data = await dbFile.arrayBuffer();
|
|
147
|
+
const size = data.byteLength;
|
|
148
|
+
// Calculate checksum
|
|
149
|
+
const hasher = new Bun.CryptoHasher('sha256');
|
|
150
|
+
hasher.update(new Uint8Array(data));
|
|
151
|
+
const checksum = hasher.digest('hex');
|
|
152
|
+
// Upload to S3
|
|
153
|
+
const s3File = this.client.file(key);
|
|
154
|
+
await s3File.write(new Uint8Array(data), {
|
|
155
|
+
type: 'application/x-sqlite3',
|
|
156
|
+
});
|
|
157
|
+
// Upload metadata
|
|
158
|
+
const metadata = {
|
|
159
|
+
timestamp: new Date().toISOString(),
|
|
160
|
+
version: process.env.npm_package_version ?? '1.0.0',
|
|
161
|
+
size,
|
|
162
|
+
checksum,
|
|
163
|
+
};
|
|
164
|
+
const metadataKey = `${key}.meta.json`;
|
|
165
|
+
await this.client.file(metadataKey).write(JSON.stringify(metadata, null, 2), {
|
|
166
|
+
type: 'application/json',
|
|
167
|
+
});
|
|
168
|
+
const duration = Date.now() - startTime;
|
|
169
|
+
backupLog.info('Backup completed', {
|
|
170
|
+
key,
|
|
171
|
+
size: `${(size / 1024 / 1024).toFixed(2)} MB`,
|
|
172
|
+
duration: `${duration}ms`,
|
|
173
|
+
checksum: checksum.substring(0, 16) + '...',
|
|
174
|
+
});
|
|
175
|
+
// Clean up old backups
|
|
176
|
+
await this.cleanupOldBackups();
|
|
177
|
+
return { success: true, key, size, duration };
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
181
|
+
backupLog.error('Backup failed', { error: message });
|
|
182
|
+
return { success: false, error: message };
|
|
183
|
+
}
|
|
184
|
+
finally {
|
|
185
|
+
this.isBackupInProgress = false;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* List available backups
|
|
190
|
+
*/
|
|
191
|
+
async listBackups() {
|
|
192
|
+
try {
|
|
193
|
+
const result = await this.client.list({
|
|
194
|
+
prefix: this.config.prefix,
|
|
195
|
+
maxKeys: 100,
|
|
196
|
+
});
|
|
197
|
+
if (!result.contents) {
|
|
198
|
+
return [];
|
|
199
|
+
}
|
|
200
|
+
return result.contents
|
|
201
|
+
.filter((item) => typeof item.key === 'string' &&
|
|
202
|
+
item.key.endsWith('.db') &&
|
|
203
|
+
!item.key.endsWith('.meta.json'))
|
|
204
|
+
.map((item) => {
|
|
205
|
+
const lastMod = item.lastModified;
|
|
206
|
+
// Handle both Date and string types from S3 response
|
|
207
|
+
const lastModDate = lastMod ? new Date(lastMod) : new Date();
|
|
208
|
+
return {
|
|
209
|
+
key: item.key,
|
|
210
|
+
size: item.size ?? 0,
|
|
211
|
+
lastModified: lastModDate,
|
|
212
|
+
};
|
|
213
|
+
})
|
|
214
|
+
.sort((a, b) => b.lastModified.getTime() - a.lastModified.getTime());
|
|
215
|
+
}
|
|
216
|
+
catch (error) {
|
|
217
|
+
backupLog.error('Failed to list backups', { error: String(error) });
|
|
218
|
+
return [];
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Restore from a backup
|
|
223
|
+
*/
|
|
224
|
+
async restore(key) {
|
|
225
|
+
const startTime = Date.now();
|
|
226
|
+
try {
|
|
227
|
+
// Verify backup exists
|
|
228
|
+
const s3File = this.client.file(key);
|
|
229
|
+
const exists = await s3File.exists();
|
|
230
|
+
if (!exists) {
|
|
231
|
+
throw new Error(`Backup not found: ${key}`);
|
|
232
|
+
}
|
|
233
|
+
// Download backup
|
|
234
|
+
const data = await s3File.arrayBuffer();
|
|
235
|
+
// Verify checksum if metadata exists
|
|
236
|
+
const metadataKey = `${key}.meta.json`;
|
|
237
|
+
const metadataFile = this.client.file(metadataKey);
|
|
238
|
+
const metadataExists = await metadataFile.exists();
|
|
239
|
+
if (metadataExists) {
|
|
240
|
+
const metadataRaw = (await metadataFile.json());
|
|
241
|
+
const hasher = new Bun.CryptoHasher('sha256');
|
|
242
|
+
hasher.update(new Uint8Array(data));
|
|
243
|
+
const checksum = hasher.digest('hex');
|
|
244
|
+
if (checksum !== metadataRaw.checksum) {
|
|
245
|
+
throw new Error('Backup checksum mismatch - file may be corrupted');
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
// Write to database path
|
|
249
|
+
await Bun.write(this.config.databasePath, new Uint8Array(data));
|
|
250
|
+
const duration = Date.now() - startTime;
|
|
251
|
+
backupLog.info('Restore completed', {
|
|
252
|
+
key,
|
|
253
|
+
size: `${(data.byteLength / 1024 / 1024).toFixed(2)} MB`,
|
|
254
|
+
duration: `${duration}ms`,
|
|
255
|
+
});
|
|
256
|
+
return { success: true, key, size: data.byteLength, duration };
|
|
257
|
+
}
|
|
258
|
+
catch (error) {
|
|
259
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
260
|
+
backupLog.error('Restore failed', { error: message });
|
|
261
|
+
return { success: false, error: message };
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Clean up old backups based on retention policy
|
|
266
|
+
*/
|
|
267
|
+
async cleanupOldBackups() {
|
|
268
|
+
try {
|
|
269
|
+
const backups = await this.listBackups();
|
|
270
|
+
if (backups.length <= this.config.retention) {
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
// Sort by date (newest first) and get backups to delete
|
|
274
|
+
const toDelete = backups.slice(this.config.retention);
|
|
275
|
+
for (const backup of toDelete) {
|
|
276
|
+
try {
|
|
277
|
+
// Delete backup file
|
|
278
|
+
await this.client.delete(backup.key);
|
|
279
|
+
// Delete metadata file if exists
|
|
280
|
+
const metadataKey = `${backup.key}.meta.json`;
|
|
281
|
+
const metadataFile = this.client.file(metadataKey);
|
|
282
|
+
if (await metadataFile.exists()) {
|
|
283
|
+
await this.client.delete(metadataKey);
|
|
284
|
+
}
|
|
285
|
+
backupLog.info('Deleted old backup', { key: backup.key });
|
|
286
|
+
}
|
|
287
|
+
catch (err) {
|
|
288
|
+
backupLog.warn('Failed to delete old backup', {
|
|
289
|
+
key: backup.key,
|
|
290
|
+
error: String(err),
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
catch (error) {
|
|
296
|
+
backupLog.warn('Failed to cleanup old backups', { error: String(error) });
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Get backup status
|
|
301
|
+
*/
|
|
302
|
+
getStatus() {
|
|
303
|
+
return {
|
|
304
|
+
enabled: this.config.enabled,
|
|
305
|
+
bucket: this.config.bucket,
|
|
306
|
+
endpoint: this.config.endpoint ?? 'AWS S3',
|
|
307
|
+
intervalMs: this.config.intervalMs,
|
|
308
|
+
retention: this.config.retention,
|
|
309
|
+
isRunning: this.backupInterval !== null,
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
//# sourceMappingURL=s3Backup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3Backup.js","sourceRoot":"","sources":["../../../src/infrastructure/backup/s3Backup.ts"],"names":[],"mappings":"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"}
|
package/dist/main.js
CHANGED
|
@@ -20,6 +20,7 @@ const clientCommands = [
|
|
|
20
20
|
'stats',
|
|
21
21
|
'metrics',
|
|
22
22
|
'health',
|
|
23
|
+
'backup',
|
|
23
24
|
];
|
|
24
25
|
const firstArg = process.argv[2];
|
|
25
26
|
const isClientCommand = firstArg && clientCommands.includes(firstArg);
|
|
@@ -39,6 +40,7 @@ import { createHttpServer } from './infrastructure/server/http';
|
|
|
39
40
|
import { Logger, serverLog, statsLog } from './shared/logger';
|
|
40
41
|
import { stopRateLimiter } from './infrastructure/server/rateLimiter';
|
|
41
42
|
import { VERSION } from './shared/version';
|
|
43
|
+
import { S3BackupManager } from './infrastructure/backup';
|
|
42
44
|
/** Load configuration from environment variables */
|
|
43
45
|
function loadConfig() {
|
|
44
46
|
return {
|
|
@@ -49,6 +51,7 @@ function loadConfig() {
|
|
|
49
51
|
dataPath: process.env.DATA_PATH ?? process.env.SQLITE_PATH,
|
|
50
52
|
corsOrigins: process.env.CORS_ALLOW_ORIGIN?.split(',').filter(Boolean) ?? ['*'],
|
|
51
53
|
requireAuthForMetrics: process.env.METRICS_AUTH === 'true',
|
|
54
|
+
s3BackupEnabled: process.env.S3_BACKUP_ENABLED === '1' || process.env.S3_BACKUP_ENABLED === 'true',
|
|
52
55
|
};
|
|
53
56
|
}
|
|
54
57
|
/** Print startup banner */
|
|
@@ -75,6 +78,7 @@ ${dim}────────────────────────
|
|
|
75
78
|
${green}●${reset} HTTP ${bold}${config.hostname}:${config.httpPort}${reset}
|
|
76
79
|
${yellow}●${reset} Data ${config.dataPath ?? 'in-memory'}
|
|
77
80
|
${yellow}●${reset} Auth ${config.authTokens.length > 0 ? `${green}enabled${reset}` : `${dim}disabled${reset}`}
|
|
81
|
+
${yellow}●${reset} Backup ${config.s3BackupEnabled ? `${green}S3 enabled${reset}` : `${dim}disabled${reset}`}
|
|
78
82
|
|
|
79
83
|
${dim}─────────────────────────────────────────────────${reset}
|
|
80
84
|
|
|
@@ -103,6 +107,13 @@ function startServer() {
|
|
|
103
107
|
corsOrigins: config.corsOrigins,
|
|
104
108
|
requireAuthForMetrics: config.requireAuthForMetrics,
|
|
105
109
|
});
|
|
110
|
+
// Initialize S3 backup manager
|
|
111
|
+
let backupManager = null;
|
|
112
|
+
if (config.dataPath) {
|
|
113
|
+
const backupConfig = S3BackupManager.fromEnv(config.dataPath);
|
|
114
|
+
backupManager = new S3BackupManager(backupConfig);
|
|
115
|
+
backupManager.start();
|
|
116
|
+
}
|
|
106
117
|
// Graceful shutdown
|
|
107
118
|
const shutdown = async (signal) => {
|
|
108
119
|
serverLog.info(`Received ${signal}, shutting down...`);
|
|
@@ -117,6 +128,10 @@ function startServer() {
|
|
|
117
128
|
serverLog.info(`Waiting for ${stats.active} active jobs...`);
|
|
118
129
|
await new Promise((r) => setTimeout(r, 1000));
|
|
119
130
|
}
|
|
131
|
+
// Stop backup manager
|
|
132
|
+
if (backupManager) {
|
|
133
|
+
backupManager.stop();
|
|
134
|
+
}
|
|
120
135
|
queueManager.shutdown();
|
|
121
136
|
stopRateLimiter();
|
|
122
137
|
serverLog.info('Shutdown complete');
|
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,kDAAkD;AAClD,MAAM,cAAc,GAAG;IACrB,MAAM;IACN,MAAM;IACN,KAAK;IACL,MAAM;IACN,KAAK;IACL,OAAO;IACP,KAAK;IACL,MAAM;IACN,QAAQ;IACR,SAAS;IACT,YAAY;IACZ,aAAa;IACb,OAAO;IACP,SAAS;IACT,QAAQ;CACT,CAAC;AAEF,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjC,MAAM,eAAe,GAAG,QAAQ,IAAI,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACtE,MAAM,cAAc,GAAG,QAAQ,KAAK,OAAO,CAAC;AAC5C,MAAM,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAE/F,qDAAqD;AACrD,IAAI,eAAe,IAAI,gBAAgB,IAAI,cAAc,EAAE,CAAC;IAC1D,KAAK,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AACxD,CAAC;KAAM,CAAC;IACN,oEAAoE;IACpE,WAAW,EAAE,CAAC;AAChB,CAAC;AAED,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
package/dist/shared/logger.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/shared/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,QAAQ,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,0CAA0C;AAC1C,qBAAa,MAAM;IAGL,OAAO,CAAC,QAAQ,CAAC,SAAS;IAFtC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAS;gBAEH,SAAS,EAAE,MAAM;IAE9C,8BAA8B;IAC9B,MAAM,CAAC,cAAc,IAAI,IAAI;IAI7B,oDAAoD;IACpD,MAAM,CAAC,eAAe,IAAI,IAAI;IAI9B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5D,OAAO,CAAC,GAAG;CA6BZ;AAED,sCAAsC;AACtC,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,qBAAqB;AACrB,eAAO,MAAM,SAAS,QAAyB,CAAC;AAChD,eAAO,MAAM,MAAM,QAAsB,CAAC;AAC1C,eAAO,MAAM,OAAO,QAAuB,CAAC;AAC5C,eAAO,MAAM,KAAK,QAAqB,CAAC;AACxC,eAAO,MAAM,OAAO,QAAuB,CAAC;AAC5C,eAAO,MAAM,QAAQ,QAAwB,CAAC;AAC9C,eAAO,MAAM,UAAU,QAA0B,CAAC;AAClD,eAAO,MAAM,QAAQ,QAAwB,CAAC;AAC9C,eAAO,MAAM,UAAU,QAA0B,CAAC"}
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/shared/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,QAAQ,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,0CAA0C;AAC1C,qBAAa,MAAM;IAGL,OAAO,CAAC,QAAQ,CAAC,SAAS;IAFtC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAS;gBAEH,SAAS,EAAE,MAAM;IAE9C,8BAA8B;IAC9B,MAAM,CAAC,cAAc,IAAI,IAAI;IAI7B,oDAAoD;IACpD,MAAM,CAAC,eAAe,IAAI,IAAI;IAI9B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5D,OAAO,CAAC,GAAG;CA6BZ;AAED,sCAAsC;AACtC,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,qBAAqB;AACrB,eAAO,MAAM,SAAS,QAAyB,CAAC;AAChD,eAAO,MAAM,MAAM,QAAsB,CAAC;AAC1C,eAAO,MAAM,OAAO,QAAuB,CAAC;AAC5C,eAAO,MAAM,KAAK,QAAqB,CAAC;AACxC,eAAO,MAAM,OAAO,QAAuB,CAAC;AAC5C,eAAO,MAAM,QAAQ,QAAwB,CAAC;AAC9C,eAAO,MAAM,UAAU,QAA0B,CAAC;AAClD,eAAO,MAAM,QAAQ,QAAwB,CAAC;AAC9C,eAAO,MAAM,UAAU,QAA0B,CAAC;AAClD,eAAO,MAAM,SAAS,QAAyB,CAAC"}
|
package/dist/shared/logger.js
CHANGED
|
@@ -74,4 +74,5 @@ export const statsLog = createLogger('Stats');
|
|
|
74
74
|
export const storageLog = createLogger('Storage');
|
|
75
75
|
export const queueLog = createLogger('Queue');
|
|
76
76
|
export const webhookLog = createLogger('Webhook');
|
|
77
|
+
export const backupLog = createLogger('Backup');
|
|
77
78
|
//# sourceMappingURL=logger.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/shared/logger.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/shared/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,0CAA0C;AAC1C,MAAM,OAAO,MAAM;IAGY;IAFrB,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;IAEhC,YAA6B,SAAiB;QAAjB,cAAS,GAAT,SAAS,CAAQ;IAAG,CAAC;IAElD,8BAA8B;IAC9B,MAAM,CAAC,cAAc;QACnB,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;IACzB,CAAC;IAED,oDAAoD;IACpD,MAAM,CAAC,eAAe;QACpB,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,IAA8B;QACnD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,IAA8B;QAClD,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,IAA8B;QAClD,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,IAA8B;QACnD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IAEO,GAAG,CAAC,KAAe,EAAE,OAAe,EAAE,IAA8B;QAC1E,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,MAAM,KAAK,GAAa;gBACtB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,KAAK;gBACL,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,OAAO;gBACP,GAAG,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC;aACtB,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC;YACrC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,QAAQ,KAAK,EAAE,CAAC;gBACd,KAAK,OAAO;oBACV,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,OAAO,GAAG,OAAO,EAAE,CAAC,CAAC;oBAChD,MAAM;gBACR,KAAK,MAAM;oBACT,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,OAAO,GAAG,OAAO,EAAE,CAAC,CAAC;oBAC9C,MAAM;gBACR,KAAK,MAAM;oBACT,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,OAAO,GAAG,OAAO,EAAE,CAAC,CAAC;oBAC/C,MAAM;gBACR,KAAK,OAAO;oBACV,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,OAAO,GAAG,OAAO,EAAE,CAAC,CAAC;oBAChD,MAAM;YACV,CAAC;QACH,CAAC;IACH,CAAC;;AAGH,sCAAsC;AACtC,MAAM,UAAU,YAAY,CAAC,SAAiB;IAC5C,OAAO,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC;AAC/B,CAAC;AAED,qBAAqB;AACrB,MAAM,CAAC,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;AAChD,MAAM,CAAC,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;AAC1C,MAAM,CAAC,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;AAC5C,MAAM,CAAC,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;AACxC,MAAM,CAAC,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;AAC5C,MAAM,CAAC,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;AAC9C,MAAM,CAAC,MAAM,UAAU,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;AAClD,MAAM,CAAC,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;AAC9C,MAAM,CAAC,MAAM,UAAU,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;AAClD,MAAM,CAAC,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bunqueue",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.4",
|
|
4
4
|
"description": "High-performance job queue server written in Bun. SQLite persistence, cron scheduling, priorities, retries, DLQ, webhooks. Minimal dependencies.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/main.js",
|