bunqueue 2.1.4 → 2.1.5
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 +46 -35
- package/dist/infrastructure/backup/s3BackupConfig.d.ts.map +1 -1
- package/dist/infrastructure/backup/s3BackupConfig.js +6 -0
- package/dist/infrastructure/backup/s3BackupConfig.js.map +1 -1
- package/dist/infrastructure/backup/s3BackupOperations.d.ts.map +1 -1
- package/dist/infrastructure/backup/s3BackupOperations.js +53 -17
- package/dist/infrastructure/backup/s3BackupOperations.js.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<a href="https://
|
|
2
|
+
<a href="https://bunqueue.dev/">
|
|
3
3
|
<img src=".github/banner.svg" alt="bunqueue" width="400" />
|
|
4
4
|
</a>
|
|
5
5
|
</p>
|
|
6
|
+
|
|
6
7
|
<p align="center">
|
|
7
8
|
<a href="https://github.com/egeominotti/bunqueue/stargazers"><img src="https://img.shields.io/github/stars/egeominotti/bunqueue?style=flat" alt="GitHub Stars"></a>
|
|
8
9
|
<a href="https://www.npmjs.com/package/bunqueue"><img src="https://img.shields.io/npm/dm/bunqueue" alt="npm downloads"></a>
|
|
@@ -16,29 +17,30 @@
|
|
|
16
17
|
</p>
|
|
17
18
|
|
|
18
19
|
<p align="center">
|
|
19
|
-
<a href="https://
|
|
20
|
-
<a href="https://
|
|
20
|
+
<a href="https://bunqueue.dev/"><strong>Documentation</strong></a> ·
|
|
21
|
+
<a href="https://bunqueue.dev/guide/benchmarks/"><strong>Benchmarks</strong></a>
|
|
21
22
|
</p>
|
|
22
23
|
|
|
23
24
|
---
|
|
24
25
|
|
|
25
26
|
## Why bunqueue?
|
|
26
27
|
|
|
27
|
-
| Library
|
|
28
|
-
|
|
29
|
-
| BullMQ
|
|
30
|
-
| Agenda
|
|
31
|
-
| pg-boss
|
|
28
|
+
| Library | Requires |
|
|
29
|
+
| ------------ | ----------- |
|
|
30
|
+
| BullMQ | Redis |
|
|
31
|
+
| Agenda | MongoDB |
|
|
32
|
+
| pg-boss | PostgreSQL |
|
|
32
33
|
| **bunqueue** | **Nothing** |
|
|
33
34
|
|
|
34
35
|
- **BullMQ-compatible API** — Same `Queue`, `Worker`, `QueueEvents`
|
|
35
36
|
- **Zero dependencies** — No Redis, no MongoDB
|
|
36
37
|
- **SQLite persistence** — Survives restarts, WAL mode for concurrent access
|
|
37
|
-
- **Up to 286K ops/sec** — [Verified benchmarks](https://
|
|
38
|
+
- **Up to 286K ops/sec** — [Verified benchmarks](https://bunqueue.dev/guide/benchmarks/)
|
|
38
39
|
|
|
39
40
|
## When to use bunqueue
|
|
40
41
|
|
|
41
42
|
**Great for:**
|
|
43
|
+
|
|
42
44
|
- Single-server deployments
|
|
43
45
|
- Prototypes and MVPs
|
|
44
46
|
- Moderate to high workloads (up to 286K ops/sec)
|
|
@@ -46,6 +48,7 @@
|
|
|
46
48
|
- Embedded use cases (CLI tools, edge functions, serverless)
|
|
47
49
|
|
|
48
50
|
**Not ideal for:**
|
|
51
|
+
|
|
49
52
|
- Multi-region distributed systems requiring HA
|
|
50
53
|
- Workloads that need automatic failover today
|
|
51
54
|
- Systems already running Redis with existing infrastructure
|
|
@@ -68,13 +71,13 @@ bun add bunqueue
|
|
|
68
71
|
|
|
69
72
|
bunqueue runs in two modes depending on your architecture:
|
|
70
73
|
|
|
71
|
-
|
|
|
72
|
-
|
|
73
|
-
| **How it works** | Queue runs inside your process
|
|
74
|
-
| **Setup**
|
|
75
|
-
| **Performance**
|
|
76
|
-
| **Best for**
|
|
77
|
-
| **Scaling**
|
|
74
|
+
| | Embedded | Server (TCP) |
|
|
75
|
+
| ---------------- | ------------------------------------- | -------------------------------------------- |
|
|
76
|
+
| **How it works** | Queue runs inside your process | Standalone server, clients connect via TCP |
|
|
77
|
+
| **Setup** | `bun add bunqueue` | `docker run` or `bunqueue start` |
|
|
78
|
+
| **Performance** | 286K ops/sec | 149K ops/sec |
|
|
79
|
+
| **Best for** | Single-process apps, CLIs, serverless | Multiple workers, separate producer/consumer |
|
|
80
|
+
| **Scaling** | Same process only | Multiple clients across machines |
|
|
78
81
|
|
|
79
82
|
### Embedded Mode
|
|
80
83
|
|
|
@@ -85,10 +88,14 @@ import { Queue, Worker } from 'bunqueue/client';
|
|
|
85
88
|
|
|
86
89
|
const queue = new Queue('emails', { embedded: true });
|
|
87
90
|
|
|
88
|
-
const worker = new Worker(
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
91
|
+
const worker = new Worker(
|
|
92
|
+
'emails',
|
|
93
|
+
async (job) => {
|
|
94
|
+
console.log('Processing:', job.data);
|
|
95
|
+
return { sent: true };
|
|
96
|
+
},
|
|
97
|
+
{ embedded: true }
|
|
98
|
+
);
|
|
92
99
|
|
|
93
100
|
await queue.add('welcome', { to: 'user@example.com' });
|
|
94
101
|
```
|
|
@@ -111,9 +118,13 @@ import { Queue, Worker } from 'bunqueue/client';
|
|
|
111
118
|
|
|
112
119
|
const queue = new Queue('tasks', { connection: { host: 'localhost', port: 6789 } });
|
|
113
120
|
|
|
114
|
-
const worker = new Worker(
|
|
115
|
-
|
|
116
|
-
|
|
121
|
+
const worker = new Worker(
|
|
122
|
+
'tasks',
|
|
123
|
+
async (job) => {
|
|
124
|
+
return { done: true };
|
|
125
|
+
},
|
|
126
|
+
{ connection: { host: 'localhost', port: 6789 } }
|
|
127
|
+
);
|
|
117
128
|
|
|
118
129
|
await queue.add('process', { data: 'hello' });
|
|
119
130
|
```
|
|
@@ -122,12 +133,12 @@ await queue.add('process', { data: 'hello' });
|
|
|
122
133
|
|
|
123
134
|
SQLite handles surprisingly high throughput for single-node deployments:
|
|
124
135
|
|
|
125
|
-
| Mode
|
|
126
|
-
|
|
127
|
-
| Embedded | 286K ops/sec
|
|
128
|
-
| TCP
|
|
136
|
+
| Mode | Peak Throughput | Use Case |
|
|
137
|
+
| -------- | --------------- | ------------------- |
|
|
138
|
+
| Embedded | 286K ops/sec | Same process |
|
|
139
|
+
| TCP | 149K ops/sec | Distributed workers |
|
|
129
140
|
|
|
130
|
-
> Run `bun run bench` to verify on your hardware. [Full benchmark methodology →](https://
|
|
141
|
+
> Run `bun run bench` to verify on your hardware. [Full benchmark methodology →](https://bunqueue.dev/guide/benchmarks/)
|
|
131
142
|
|
|
132
143
|
## Monitoring
|
|
133
144
|
|
|
@@ -141,14 +152,14 @@ docker compose --profile monitoring up -d
|
|
|
141
152
|
|
|
142
153
|
## Documentation
|
|
143
154
|
|
|
144
|
-
**[Read the full documentation →](https://
|
|
155
|
+
**[Read the full documentation →](https://bunqueue.dev/)**
|
|
145
156
|
|
|
146
|
-
- [Quick Start](https://
|
|
147
|
-
- [Queue API](https://
|
|
148
|
-
- [Worker API](https://
|
|
149
|
-
- [Server Mode](https://
|
|
150
|
-
- [Benchmarks](https://
|
|
151
|
-
- [CLI Reference](https://
|
|
157
|
+
- [Quick Start](https://bunqueue.dev/guide/quickstart/)
|
|
158
|
+
- [Queue API](https://bunqueue.dev/guide/queue/)
|
|
159
|
+
- [Worker API](https://bunqueue.dev/guide/worker/)
|
|
160
|
+
- [Server Mode](https://bunqueue.dev/guide/server/)
|
|
161
|
+
- [Benchmarks](https://bunqueue.dev/guide/benchmarks/)
|
|
162
|
+
- [CLI Reference](https://bunqueue.dev/guide/cli/)
|
|
152
163
|
|
|
153
164
|
## License
|
|
154
165
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s3BackupConfig.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/backup/s3BackupConfig.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,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;AAED,mCAAmC;AACnC,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,uBAAuB;AACvB,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,IAAI,CAAC;CACpB;AAED,mCAAmC;AACnC,eAAO,MAAM,QAAQ;;;;;CAKX,CAAC;AAEX;;GAEG;AACH,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,cAAc,CAalE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"s3BackupConfig.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/backup/s3BackupConfig.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,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;AAED,mCAAmC;AACnC,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,uBAAuB;AACvB,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,IAAI,CAAC;CACpB;AAED,mCAAmC;AACnC,eAAO,MAAM,QAAQ;;;;;CAKX,CAAC;AAEX;;GAEG;AACH,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,cAAc,CAalE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAwB3F"}
|
|
@@ -43,6 +43,12 @@ export function validateConfig(config) {
|
|
|
43
43
|
if (!config.databasePath) {
|
|
44
44
|
errors.push('Database path is required');
|
|
45
45
|
}
|
|
46
|
+
if (config.retention < 1) {
|
|
47
|
+
errors.push('Retention must be at least 1');
|
|
48
|
+
}
|
|
49
|
+
if (config.intervalMs < 60000) {
|
|
50
|
+
errors.push('Backup interval must be at least 60 seconds');
|
|
51
|
+
}
|
|
46
52
|
return { valid: errors.length === 0, errors };
|
|
47
53
|
}
|
|
48
54
|
//# sourceMappingURL=s3BackupConfig.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s3BackupConfig.js","sourceRoot":"","sources":["../../../src/infrastructure/backup/s3BackupConfig.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAuDH,mCAAmC;AACnC,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,UAAU;IAC1C,SAAS,EAAE,CAAC;IACZ,MAAM,EAAE,UAAU;IAClB,MAAM,EAAE,WAAW;CACX,CAAC;AAEX;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,YAAoB;IAChD,OAAO;QACL,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,iBAAiB,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,iBAAiB,KAAK,MAAM;QAClF,WAAW,EAAE,GAAG,CAAC,GAAG,CAAC,gBAAgB,IAAI,GAAG,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE;QACxE,eAAe,EAAE,GAAG,CAAC,GAAG,CAAC,oBAAoB,IAAI,GAAG,CAAC,GAAG,CAAC,qBAAqB,IAAI,EAAE;QACpF,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE;QACrD,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,GAAG,CAAC,YAAY;QACrD,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,IAAI,QAAQ,CAAC,MAAM;QAClE,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC,UAAU;QACjF,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,mBAAmB,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC,SAAS;QAChF,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,gBAAgB,IAAI,QAAQ,CAAC,MAAM;QACnD,YAAY;KACb,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAAsB;IACnD,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;AAChD,CAAC"}
|
|
1
|
+
{"version":3,"file":"s3BackupConfig.js","sourceRoot":"","sources":["../../../src/infrastructure/backup/s3BackupConfig.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAuDH,mCAAmC;AACnC,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,UAAU;IAC1C,SAAS,EAAE,CAAC;IACZ,MAAM,EAAE,UAAU;IAClB,MAAM,EAAE,WAAW;CACX,CAAC;AAEX;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,YAAoB;IAChD,OAAO;QACL,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,iBAAiB,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,iBAAiB,KAAK,MAAM;QAClF,WAAW,EAAE,GAAG,CAAC,GAAG,CAAC,gBAAgB,IAAI,GAAG,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE;QACxE,eAAe,EAAE,GAAG,CAAC,GAAG,CAAC,oBAAoB,IAAI,GAAG,CAAC,GAAG,CAAC,qBAAqB,IAAI,EAAE;QACpF,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE;QACrD,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,GAAG,CAAC,YAAY;QACrD,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,IAAI,QAAQ,CAAC,MAAM;QAClE,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC,UAAU;QACjF,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,mBAAmB,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC,SAAS;QAChF,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,gBAAgB,IAAI,QAAQ,CAAC,MAAM;QACnD,YAAY;KACb,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAAsB;IACnD,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,GAAG,KAAK,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;AAChD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s3BackupOperations.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/backup/s3BackupOperations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAGpC,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAkB,UAAU,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"s3BackupOperations.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/backup/s3BackupOperations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAGpC,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAkB,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAkBjG;;GAEG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,QAAQ,GACf,OAAO,CAAC,YAAY,CAAC,CAoEvB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAwCjG;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,QAAQ,GACf,OAAO,CAAC,YAAY,CAAC,CAgEvB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA8B/F"}
|
|
@@ -4,6 +4,20 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { backupLog } from '../../shared/logger';
|
|
6
6
|
import { VERSION } from '../../shared/version';
|
|
7
|
+
/** Async gzip compress using Web Streams API (non-blocking) */
|
|
8
|
+
async function gzipAsync(data) {
|
|
9
|
+
const stream = new Blob([data])
|
|
10
|
+
.stream()
|
|
11
|
+
.pipeThrough(new CompressionStream('gzip'));
|
|
12
|
+
return new Uint8Array(await new Response(stream).arrayBuffer());
|
|
13
|
+
}
|
|
14
|
+
/** Async gzip decompress using Web Streams API (non-blocking) */
|
|
15
|
+
async function gunzipAsync(data) {
|
|
16
|
+
const stream = new Blob([data])
|
|
17
|
+
.stream()
|
|
18
|
+
.pipeThrough(new DecompressionStream('gzip'));
|
|
19
|
+
return new Uint8Array(await new Response(stream).arrayBuffer());
|
|
20
|
+
}
|
|
7
21
|
/**
|
|
8
22
|
* Perform a backup to S3
|
|
9
23
|
*/
|
|
@@ -16,14 +30,24 @@ export async function performBackup(config, client) {
|
|
|
16
30
|
if (!exists) {
|
|
17
31
|
throw new Error(`Database file not found: ${config.databasePath}`);
|
|
18
32
|
}
|
|
33
|
+
// Checkpoint WAL to ensure all data is in the main database file
|
|
34
|
+
try {
|
|
35
|
+
const { Database } = await import('bun:sqlite');
|
|
36
|
+
const db = new Database(config.databasePath);
|
|
37
|
+
db.run('PRAGMA wal_checkpoint(TRUNCATE)');
|
|
38
|
+
db.close();
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// Ignore - database might be locked or not in WAL mode
|
|
42
|
+
}
|
|
19
43
|
// Generate backup key with timestamp
|
|
20
44
|
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
21
45
|
const key = `${config.prefix}bunqueue-${timestamp}.db`;
|
|
22
46
|
// Read database file
|
|
23
|
-
const data = await
|
|
47
|
+
const data = await Bun.file(config.databasePath).arrayBuffer();
|
|
24
48
|
const originalSize = data.byteLength;
|
|
25
49
|
// Compress with gzip for efficient storage
|
|
26
|
-
const compressed =
|
|
50
|
+
const compressed = await gzipAsync(new Uint8Array(data));
|
|
27
51
|
const compressedSize = compressed.byteLength;
|
|
28
52
|
// Calculate checksum of original data (for integrity verification)
|
|
29
53
|
const hasher = new Bun.CryptoHasher('sha256');
|
|
@@ -61,14 +85,20 @@ export async function performBackup(config, client) {
|
|
|
61
85
|
*/
|
|
62
86
|
export async function listBackups(config, client) {
|
|
63
87
|
try {
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
88
|
+
const allContents = [];
|
|
89
|
+
let continuationToken;
|
|
90
|
+
do {
|
|
91
|
+
const result = await client.list({
|
|
92
|
+
prefix: config.prefix,
|
|
93
|
+
maxKeys: 100,
|
|
94
|
+
...(continuationToken ? { continuationToken } : {}),
|
|
95
|
+
});
|
|
96
|
+
if (result.contents) {
|
|
97
|
+
allContents.push(...result.contents);
|
|
98
|
+
}
|
|
99
|
+
continuationToken = result.isTruncated ? result.nextContinuationToken : undefined;
|
|
100
|
+
} while (continuationToken);
|
|
101
|
+
return allContents
|
|
72
102
|
.filter((item) => typeof item.key === 'string' &&
|
|
73
103
|
item.key.endsWith('.db') &&
|
|
74
104
|
!item.key.endsWith('.meta.json'))
|
|
@@ -116,7 +146,7 @@ export async function restoreBackup(key, config, client) {
|
|
|
116
146
|
new Uint8Array(compressedData)[0] === 0x1f &&
|
|
117
147
|
new Uint8Array(compressedData)[1] === 0x8b);
|
|
118
148
|
const data = isCompressed
|
|
119
|
-
?
|
|
149
|
+
? await gunzipAsync(new Uint8Array(compressedData))
|
|
120
150
|
: new Uint8Array(compressedData);
|
|
121
151
|
// Verify checksum if metadata exists
|
|
122
152
|
if (metadataRaw?.checksum) {
|
|
@@ -127,6 +157,11 @@ export async function restoreBackup(key, config, client) {
|
|
|
127
157
|
throw new Error('Backup checksum mismatch - file may be corrupted');
|
|
128
158
|
}
|
|
129
159
|
}
|
|
160
|
+
// Validate SQLite format
|
|
161
|
+
const header = new TextDecoder().decode(data.slice(0, 16));
|
|
162
|
+
if (!header.startsWith('SQLite format 3')) {
|
|
163
|
+
throw new Error('Restored data is not a valid SQLite database');
|
|
164
|
+
}
|
|
130
165
|
// Write to database path
|
|
131
166
|
await Bun.write(config.databasePath, data);
|
|
132
167
|
const duration = Date.now() - startTime;
|
|
@@ -144,11 +179,12 @@ export async function restoreBackup(key, config, client) {
|
|
|
144
179
|
export async function cleanupOldBackups(config, client) {
|
|
145
180
|
try {
|
|
146
181
|
const backups = await listBackups(config, client);
|
|
147
|
-
|
|
182
|
+
const retention = Math.max(config.retention, 1);
|
|
183
|
+
if (backups.length <= retention) {
|
|
148
184
|
return;
|
|
149
185
|
}
|
|
150
186
|
// Sort by date (newest first) and get backups to delete
|
|
151
|
-
const toDelete = backups.slice(
|
|
187
|
+
const toDelete = backups.slice(retention);
|
|
152
188
|
for (const backup of toDelete) {
|
|
153
189
|
try {
|
|
154
190
|
// Delete backup file
|
|
@@ -160,13 +196,13 @@ export async function cleanupOldBackups(config, client) {
|
|
|
160
196
|
await client.delete(metadataKey);
|
|
161
197
|
}
|
|
162
198
|
}
|
|
163
|
-
catch {
|
|
164
|
-
|
|
199
|
+
catch (error) {
|
|
200
|
+
backupLog.warn('Failed to delete old backup', { key: backup.key, error: String(error) });
|
|
165
201
|
}
|
|
166
202
|
}
|
|
167
203
|
}
|
|
168
|
-
catch {
|
|
169
|
-
|
|
204
|
+
catch (error) {
|
|
205
|
+
backupLog.error('Backup cleanup failed', { error: String(error) });
|
|
170
206
|
}
|
|
171
207
|
}
|
|
172
208
|
//# sourceMappingURL=s3BackupOperations.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s3BackupOperations.js","sourceRoot":"","sources":["../../../src/infrastructure/backup/s3BackupOperations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAG/C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAsB,EACtB,MAAgB;IAEhB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,gCAAgC;QAChC,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;QAErC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,4BAA4B,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QACrE,CAAC;QAED,qCAAqC;QACrC,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACjE,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM,YAAY,SAAS,KAAK,CAAC;QAEvD,qBAAqB;QACrB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"s3BackupOperations.js","sourceRoot":"","sources":["../../../src/infrastructure/backup/s3BackupOperations.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bunqueue",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.5",
|
|
4
4
|
"description": "High-performance job queue server written in TypeScript. SQLite persistence, cron scheduling, priorities, retries, DLQ, webhooks. Minimal dependencies.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/main.js",
|
|
@@ -102,12 +102,12 @@
|
|
|
102
102
|
"license": "MIT",
|
|
103
103
|
"repository": {
|
|
104
104
|
"type": "git",
|
|
105
|
-
"url": "git+https://github.com/egeominotti/
|
|
105
|
+
"url": "git+https://github.com/egeominotti/bunqueue.git"
|
|
106
106
|
},
|
|
107
107
|
"bugs": {
|
|
108
|
-
"url": "https://github.com/egeominotti/
|
|
108
|
+
"url": "https://github.com/egeominotti/bunqueue/issues"
|
|
109
109
|
},
|
|
110
|
-
"homepage": "https://
|
|
110
|
+
"homepage": "https://bunqueue.dev",
|
|
111
111
|
"engines": {
|
|
112
112
|
"node": ">=18.0.0",
|
|
113
113
|
"bun": ">=1.0.0"
|