bunqueue 2.1.4 → 2.1.6

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 CHANGED
@@ -1,8 +1,9 @@
1
1
  <p align="center">
2
- <a href="https://egeominotti.github.io/bunqueue/">
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://egeominotti.github.io/bunqueue/"><strong>Documentation</strong></a> ·
20
- <a href="https://egeominotti.github.io/bunqueue/guide/benchmarks/"><strong>Benchmarks</strong></a>
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 | Requires |
28
- |---------|----------|
29
- | BullMQ | Redis |
30
- | Agenda | MongoDB |
31
- | pg-boss | PostgreSQL |
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://egeominotti.github.io/bunqueue/guide/benchmarks/)
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
- | | Embedded | Server (TCP) |
72
- |---|----------|-------------|
73
- | **How it works** | Queue runs inside your process | Standalone server, clients connect via TCP |
74
- | **Setup** | `bun add bunqueue` | `docker run` or `bunqueue start` |
75
- | **Performance** | 286K ops/sec | 149K ops/sec |
76
- | **Best for** | Single-process apps, CLIs, serverless | Multiple workers, separate producer/consumer |
77
- | **Scaling** | Same process only | Multiple clients across machines |
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('emails', async (job) => {
89
- console.log('Processing:', job.data);
90
- return { sent: true };
91
- }, { embedded: true });
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('tasks', async (job) => {
115
- return { done: true };
116
- }, { connection: { host: 'localhost', port: 6789 } });
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 | Peak Throughput | Use Case |
126
- |------|-----------------|----------|
127
- | Embedded | 286K ops/sec | Same process |
128
- | TCP | 149K ops/sec | Distributed workers |
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://egeominotti.github.io/bunqueue/guide/benchmarks/)
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://egeominotti.github.io/bunqueue/)**
155
+ **[Read the full documentation →](https://bunqueue.dev/)**
145
156
 
146
- - [Quick Start](https://egeominotti.github.io/bunqueue/guide/quickstart/)
147
- - [Queue API](https://egeominotti.github.io/bunqueue/guide/queue/)
148
- - [Worker API](https://egeominotti.github.io/bunqueue/guide/worker/)
149
- - [Server Mode](https://egeominotti.github.io/bunqueue/guide/server/)
150
- - [Benchmarks](https://egeominotti.github.io/bunqueue/guide/benchmarks/)
151
- - [CLI Reference](https://egeominotti.github.io/bunqueue/guide/cli/)
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,CAiB3F"}
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;AAEjG;;GAEG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,QAAQ,GACf,OAAO,CAAC,YAAY,CAAC,CA0DvB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAgCjG;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,QAAQ,GACf,OAAO,CAAC,YAAY,CAAC,CA0DvB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA6B/F"}
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 dbFile.arrayBuffer();
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 = Bun.gzipSync(new Uint8Array(data));
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 result = await client.list({
65
- prefix: config.prefix,
66
- maxKeys: 100,
67
- });
68
- if (!result.contents) {
69
- return [];
70
- }
71
- return result.contents
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
- ? Bun.gunzipSync(new Uint8Array(compressedData))
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
- if (backups.length <= config.retention) {
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(config.retention);
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
- // Ignore delete errors
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
- // Ignore cleanup errors
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":"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"}
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.4",
3
+ "version": "2.1.6",
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/bunQ.git"
105
+ "url": "git+https://github.com/egeominotti/bunqueue.git"
106
106
  },
107
107
  "bugs": {
108
- "url": "https://github.com/egeominotti/bunQ/issues"
108
+ "url": "https://github.com/egeominotti/bunqueue/issues"
109
109
  },
110
- "homepage": "https://github.com/egeominotti/bunQ#readme",
110
+ "homepage": "https://bunqueue.dev",
111
111
  "engines": {
112
112
  "node": ">=18.0.0",
113
113
  "bun": ">=1.0.0"