bunqueue 1.1.3 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/README.md +37 -0
  2. package/dist/application/dlqManager.d.ts.map +1 -1
  3. package/dist/application/dlqManager.js +11 -3
  4. package/dist/application/dlqManager.js.map +1 -1
  5. package/dist/application/eventsManager.d.ts +10 -1
  6. package/dist/application/eventsManager.d.ts.map +1 -1
  7. package/dist/application/eventsManager.js +91 -21
  8. package/dist/application/eventsManager.js.map +1 -1
  9. package/dist/application/operations/ack.d.ts +16 -1
  10. package/dist/application/operations/ack.d.ts.map +1 -1
  11. package/dist/application/operations/ack.js +269 -5
  12. package/dist/application/operations/ack.js.map +1 -1
  13. package/dist/application/operations/jobManagement.d.ts.map +1 -1
  14. package/dist/application/operations/jobManagement.js +17 -3
  15. package/dist/application/operations/jobManagement.js.map +1 -1
  16. package/dist/application/operations/pull.d.ts +1 -0
  17. package/dist/application/operations/pull.d.ts.map +1 -1
  18. package/dist/application/operations/pull.js +106 -8
  19. package/dist/application/operations/pull.js.map +1 -1
  20. package/dist/application/operations/push.d.ts.map +1 -1
  21. package/dist/application/operations/push.js +9 -0
  22. package/dist/application/operations/push.js.map +1 -1
  23. package/dist/application/operations/queueControl.d.ts +4 -1
  24. package/dist/application/operations/queueControl.d.ts.map +1 -1
  25. package/dist/application/operations/queueControl.js +16 -13
  26. package/dist/application/operations/queueControl.js.map +1 -1
  27. package/dist/application/queueManager.d.ts +28 -2
  28. package/dist/application/queueManager.d.ts.map +1 -1
  29. package/dist/application/queueManager.js +132 -34
  30. package/dist/application/queueManager.js.map +1 -1
  31. package/dist/application/webhookManager.d.ts +7 -1
  32. package/dist/application/webhookManager.d.ts.map +1 -1
  33. package/dist/application/webhookManager.js +38 -6
  34. package/dist/application/webhookManager.js.map +1 -1
  35. package/dist/application/workerManager.d.ts +5 -1
  36. package/dist/application/workerManager.d.ts.map +1 -1
  37. package/dist/application/workerManager.js +35 -10
  38. package/dist/application/workerManager.js.map +1 -1
  39. package/dist/bunqueue +0 -0
  40. package/dist/cli/commands/backup.d.ts +20 -0
  41. package/dist/cli/commands/backup.d.ts.map +1 -0
  42. package/dist/cli/commands/backup.js +143 -0
  43. package/dist/cli/commands/backup.js.map +1 -0
  44. package/dist/cli/help.d.ts.map +1 -1
  45. package/dist/cli/help.js +6 -0
  46. package/dist/cli/help.js.map +1 -1
  47. package/dist/cli/index.d.ts.map +1 -1
  48. package/dist/cli/index.js +27 -0
  49. package/dist/cli/index.js.map +1 -1
  50. package/dist/domain/queue/priorityQueue.d.ts +15 -0
  51. package/dist/domain/queue/priorityQueue.d.ts.map +1 -1
  52. package/dist/domain/queue/priorityQueue.js +40 -0
  53. package/dist/domain/queue/priorityQueue.js.map +1 -1
  54. package/dist/domain/queue/shard.d.ts +67 -0
  55. package/dist/domain/queue/shard.d.ts.map +1 -1
  56. package/dist/domain/queue/shard.js +198 -0
  57. package/dist/domain/queue/shard.js.map +1 -1
  58. package/dist/infrastructure/backup/index.d.ts +5 -0
  59. package/dist/infrastructure/backup/index.d.ts.map +1 -0
  60. package/dist/infrastructure/backup/index.js +5 -0
  61. package/dist/infrastructure/backup/index.js.map +1 -0
  62. package/dist/infrastructure/backup/s3Backup.d.ts +101 -0
  63. package/dist/infrastructure/backup/s3Backup.d.ts.map +1 -0
  64. package/dist/infrastructure/backup/s3Backup.js +313 -0
  65. package/dist/infrastructure/backup/s3Backup.js.map +1 -0
  66. package/dist/infrastructure/persistence/sqlite.d.ts +3 -1
  67. package/dist/infrastructure/persistence/sqlite.d.ts.map +1 -1
  68. package/dist/infrastructure/persistence/sqlite.js +25 -4
  69. package/dist/infrastructure/persistence/sqlite.js.map +1 -1
  70. package/dist/infrastructure/scheduler/cronScheduler.d.ts +7 -0
  71. package/dist/infrastructure/scheduler/cronScheduler.d.ts.map +1 -1
  72. package/dist/infrastructure/scheduler/cronScheduler.js +49 -18
  73. package/dist/infrastructure/scheduler/cronScheduler.js.map +1 -1
  74. package/dist/infrastructure/server/handlers/advanced.d.ts +1 -1
  75. package/dist/infrastructure/server/handlers/advanced.d.ts.map +1 -1
  76. package/dist/infrastructure/server/handlers/advanced.js +14 -11
  77. package/dist/infrastructure/server/handlers/advanced.js.map +1 -1
  78. package/dist/infrastructure/server/handlers/core.d.ts +2 -2
  79. package/dist/infrastructure/server/handlers/core.d.ts.map +1 -1
  80. package/dist/infrastructure/server/handlers/core.js +6 -12
  81. package/dist/infrastructure/server/handlers/core.js.map +1 -1
  82. package/dist/infrastructure/server/http.d.ts.map +1 -1
  83. package/dist/infrastructure/server/http.js +22 -27
  84. package/dist/infrastructure/server/http.js.map +1 -1
  85. package/dist/infrastructure/server/rateLimiter.d.ts +4 -3
  86. package/dist/infrastructure/server/rateLimiter.d.ts.map +1 -1
  87. package/dist/infrastructure/server/rateLimiter.js +71 -19
  88. package/dist/infrastructure/server/rateLimiter.js.map +1 -1
  89. package/dist/main.js +18 -0
  90. package/dist/main.js.map +1 -1
  91. package/dist/shared/hash.d.ts +4 -4
  92. package/dist/shared/hash.d.ts.map +1 -1
  93. package/dist/shared/hash.js +20 -4
  94. package/dist/shared/hash.js.map +1 -1
  95. package/dist/shared/lock.d.ts +7 -1
  96. package/dist/shared/lock.d.ts.map +1 -1
  97. package/dist/shared/lock.js +75 -40
  98. package/dist/shared/lock.js.map +1 -1
  99. package/dist/shared/logger.d.ts +1 -0
  100. package/dist/shared/logger.d.ts.map +1 -1
  101. package/dist/shared/logger.js +1 -0
  102. package/dist/shared/logger.js.map +1 -1
  103. package/dist/shared/lru.d.ts +55 -0
  104. package/dist/shared/lru.d.ts.map +1 -1
  105. package/dist/shared/lru.js +165 -2
  106. package/dist/shared/lru.js.map +1 -1
  107. package/dist/shared/minHeap.d.ts +35 -0
  108. package/dist/shared/minHeap.d.ts.map +1 -0
  109. package/dist/shared/minHeap.js +116 -0
  110. package/dist/shared/minHeap.js.map +1 -0
  111. package/package.json +1 -1
@@ -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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"}
@@ -43,8 +43,10 @@ export declare class SqliteStorage {
43
43
  getResult(jobId: JobId): unknown;
44
44
  /** Insert batch of jobs (adds to buffer) */
45
45
  insertJobsBatch(jobs: Job[]): void;
46
- /** Internal: Insert batch directly with transaction */
46
+ /** Internal: Insert batch directly using multi-row INSERT for 50-100x speedup */
47
47
  private insertJobsBatchInternal;
48
+ /** Insert a chunk of jobs with single multi-row INSERT */
49
+ private insertJobsChunk;
48
50
  loadPendingJobs(): Job[];
49
51
  loadActiveJobs(): Job[];
50
52
  saveCron(cron: CronJob): void;
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/persistence/sqlite.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,KAAK,EAAS,MAAM,wBAAwB,CAAC;AACrE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAqBvD,2BAA2B;AAC3B,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sDAAsD;IACtD,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAW;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsD;IAGjF,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,gBAAgB,CAA+C;gBAE3D,MAAM,EAAE,YAAY;IAgBhC,iCAAiC;IACjC,gBAAgB,IAAI,IAAI;IASxB,OAAO,CAAC,OAAO;IAgBf,0DAA0D;IAC1D,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IASzB,6CAA6C;IAC7C,kBAAkB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IA6BlC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAIjD,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAItD,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAMhD,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IAM9B,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAI7B,MAAM,CAAC,EAAE,EAAE,KAAK,GAAG,GAAG,GAAG,IAAI;IAK7B,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAIhD,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAOhC,4CAA4C;IAC5C,eAAe,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAUlC,uDAAuD;IACvD,OAAO,CAAC,uBAAuB;IAoC/B,eAAe,IAAI,GAAG,EAAE;IAOxB,cAAc,IAAI,GAAG,EAAE;IASvB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAgB7B,YAAY,IAAI,OAAO,EAAE;IAezB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM9B,OAAO,CAAC,QAAQ;IA2ChB,KAAK,IAAI,IAAI;IAab,OAAO,IAAI,MAAM;CAIlB"}
1
+ {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/persistence/sqlite.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,KAAK,EAAS,MAAM,wBAAwB,CAAC;AACrE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAqBvD,2BAA2B;AAC3B,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sDAAsD;IACtD,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAW;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsD;IAGjF,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,gBAAgB,CAA+C;gBAE3D,MAAM,EAAE,YAAY;IAgBhC,iCAAiC;IACjC,gBAAgB,IAAI,IAAI;IASxB,OAAO,CAAC,OAAO;IAgBf,0DAA0D;IAC1D,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IASzB,6CAA6C;IAC7C,kBAAkB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IA6BlC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAIjD,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAItD,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAMhD,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IAM9B,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAI7B,MAAM,CAAC,EAAE,EAAE,KAAK,GAAG,GAAG,GAAG,IAAI;IAK7B,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAIhD,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAOhC,4CAA4C;IAC5C,eAAe,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAUlC,iFAAiF;IACjF,OAAO,CAAC,uBAAuB;IAgB/B,0DAA0D;IAC1D,OAAO,CAAC,eAAe;IA6CvB,eAAe,IAAI,GAAG,EAAE;IAOxB,cAAc,IAAI,GAAG,EAAE;IASvB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAgB7B,YAAY,IAAI,OAAO,EAAE;IAezB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM9B,OAAO,CAAC,QAAQ;IA2ChB,KAAK,IAAI,IAAI;IAab,OAAO,IAAI,MAAM;CAIlB"}
@@ -123,17 +123,38 @@ export class SqliteStorage {
123
123
  this.flushWriteBuffer();
124
124
  }
125
125
  }
126
- /** Internal: Insert batch directly with transaction */
126
+ /** Internal: Insert batch directly using multi-row INSERT for 50-100x speedup */
127
127
  insertJobsBatchInternal(jobs) {
128
128
  if (jobs.length === 0)
129
129
  return;
130
- const stmt = this.statements.get('insertJob');
130
+ const now = Date.now();
131
+ const COLS_PER_ROW = 22;
132
+ // SQLite has a limit of ~999 variables, so batch in chunks
133
+ const MAX_ROWS_PER_INSERT = Math.floor(999 / COLS_PER_ROW);
131
134
  this.db.transaction(() => {
132
- for (const job of jobs) {
133
- stmt.run(job.id, job.queue, pack(job.data), job.priority, job.createdAt, job.runAt, job.attempts, job.maxAttempts, job.backoff, job.ttl, job.timeout, job.uniqueKey, job.customId, job.dependsOn.length > 0 ? pack(job.dependsOn) : null, job.parentId, job.tags.length > 0 ? pack(job.tags) : null, job.runAt > Date.now() ? 'delayed' : 'waiting', job.lifo ? 1 : 0, job.groupId, job.removeOnComplete ? 1 : 0, job.removeOnFail ? 1 : 0, job.stallTimeout);
135
+ for (let offset = 0; offset < jobs.length; offset += MAX_ROWS_PER_INSERT) {
136
+ const chunk = jobs.slice(offset, offset + MAX_ROWS_PER_INSERT);
137
+ this.insertJobsChunk(chunk, now);
134
138
  }
135
139
  })();
136
140
  }
141
+ /** Insert a chunk of jobs with single multi-row INSERT */
142
+ insertJobsChunk(jobs, now) {
143
+ // Build placeholders: (?, ?, ...), (?, ?, ...), ...
144
+ const rowPlaceholder = '(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)';
145
+ const placeholders = jobs.map(() => rowPlaceholder).join(', ');
146
+ const sql = `INSERT INTO jobs (
147
+ id, queue, data, priority, created_at, run_at, attempts, max_attempts,
148
+ backoff, ttl, timeout, unique_key, custom_id, depends_on, parent_id,
149
+ tags, state, lifo, group_id, remove_on_complete, remove_on_fail, stall_timeout
150
+ ) VALUES ${placeholders}`;
151
+ // Flatten all values
152
+ const values = [];
153
+ for (const job of jobs) {
154
+ values.push(job.id, job.queue, pack(job.data), job.priority, job.createdAt, job.runAt, job.attempts, job.maxAttempts, job.backoff, job.ttl, job.timeout, job.uniqueKey, job.customId, job.dependsOn.length > 0 ? pack(job.dependsOn) : null, job.parentId, job.tags.length > 0 ? pack(job.tags) : null, job.runAt > now ? 'delayed' : 'waiting', job.lifo ? 1 : 0, job.groupId, job.removeOnComplete ? 1 : 0, job.removeOnFail ? 1 : 0, job.stallTimeout);
155
+ }
156
+ this.db.prepare(sql).run(...values);
157
+ }
137
158
  // ============ Query Operations ============
138
159
  loadPendingJobs() {
139
160
  const rows = this.db
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../../src/infrastructure/persistence/sqlite.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../../src/infrastructure/persistence/sqlite.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Cron Scheduler
3
3
  * Manages scheduled jobs and executes them on time
4
+ * Uses min-heap for O(k log n) tick instead of O(n) full scan
4
5
  */
5
6
  import { type CronJob, type CronJobInput } from '../../domain/types/cron';
6
7
  import type { JobInput } from '../../domain/types/job';
@@ -13,10 +14,14 @@ export type PushJobCallback = (queue: string, input: JobInput) => Promise<void>;
13
14
  /**
14
15
  * Cron Scheduler
15
16
  * Periodically checks and executes due cron jobs
17
+ * Optimized with min-heap for O(k log n) tick where k = due crons
16
18
  */
17
19
  export declare class CronScheduler {
18
20
  private readonly config;
21
+ /** Map for O(1) lookup by name */
19
22
  private readonly cronJobs;
23
+ /** Min-heap ordered by nextRun for O(k log n) tick */
24
+ private readonly cronHeap;
20
25
  private checkInterval;
21
26
  private pushJob;
22
27
  constructor(config?: CronSchedulerConfig);
@@ -54,10 +59,12 @@ export declare class CronScheduler {
54
59
  load(crons: CronJob[]): void;
55
60
  /**
56
61
  * Check and execute due cron jobs
62
+ * O(k log n) where k = number of due crons, instead of O(n) full scan
57
63
  */
58
64
  private tick;
59
65
  /**
60
66
  * Get scheduler stats
67
+ * O(1) for nextRun using min-heap peek
61
68
  */
62
69
  getStats(): {
63
70
  total: number;
@@ -1 +1 @@
1
- {"version":3,"file":"cronScheduler.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/scheduler/cronScheduler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,YAAY,EAA4B,MAAM,yBAAyB,CAAC;AACpG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AASvD,mCAAmC;AACnC,MAAM,WAAW,mBAAmB;IAClC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAMD,6BAA6B;AAC7B,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEhF;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IACvD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8B;IACvD,OAAO,CAAC,aAAa,CAA+C;IACpE,OAAO,CAAC,OAAO,CAAgC;gBAEnC,MAAM,GAAE,mBAAwB;IAI5C;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAIhD;;OAEG;IACH,KAAK,IAAI,IAAI;IAUb;;OAEG;IACH,IAAI,IAAI,IAAI;IAQZ;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO;IAkCjC;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAQ7B;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAItC;;OAEG;IACH,IAAI,IAAI,OAAO,EAAE;IAIjB;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI;IAO5B;;OAEG;YACW,IAAI;IA6ClB;;OAEG;IACH,QAAQ,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE;CAmBvE"}
1
+ {"version":3,"file":"cronScheduler.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/scheduler/cronScheduler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,YAAY,EAA4B,MAAM,yBAAyB,CAAC;AACpG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAUvD,mCAAmC;AACnC,MAAM,WAAW,mBAAmB;IAClC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAMD,6BAA6B;AAC7B,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEhF;;;;GAIG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IACvD,kCAAkC;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8B;IACvD,sDAAsD;IACtD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyD;IAClF,OAAO,CAAC,aAAa,CAA+C;IACpE,OAAO,CAAC,OAAO,CAAgC;gBAEnC,MAAM,GAAE,mBAAwB;IAI5C;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAIhD;;OAEG;IACH,KAAK,IAAI,IAAI;IAUb;;OAEG;IACH,IAAI,IAAI,IAAI;IAQZ;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO;IAmCjC;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAW7B;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAItC;;OAEG;IACH,IAAI,IAAI,OAAO,EAAE;IAIjB;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI;IAS5B;;;OAGG;YACW,IAAI;IAkElB;;;OAGG;IACH,QAAQ,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE;CAmBvE"}
@@ -1,20 +1,26 @@
1
1
  /**
2
2
  * Cron Scheduler
3
3
  * Manages scheduled jobs and executes them on time
4
+ * Uses min-heap for O(k log n) tick instead of O(n) full scan
4
5
  */
5
6
  import { createCronJob, isAtLimit } from '../../domain/types/cron';
6
7
  import { validateCronExpression, getNextCronRun, getNextIntervalRun, expandCronShortcut, } from './cronParser';
7
8
  import { cronLog } from '../../shared/logger';
9
+ import { MinHeap } from '../../shared/minHeap';
8
10
  const DEFAULT_CONFIG = {
9
11
  checkIntervalMs: 1000,
10
12
  };
11
13
  /**
12
14
  * Cron Scheduler
13
15
  * Periodically checks and executes due cron jobs
16
+ * Optimized with min-heap for O(k log n) tick where k = due crons
14
17
  */
15
18
  export class CronScheduler {
16
19
  config;
20
+ /** Map for O(1) lookup by name */
17
21
  cronJobs = new Map();
22
+ /** Min-heap ordered by nextRun for O(k log n) tick */
23
+ cronHeap = new MinHeap((a, b) => a.nextRun - b.nextRun);
18
24
  checkInterval = null;
19
25
  pushJob = null;
20
26
  constructor(config = {}) {
@@ -75,6 +81,7 @@ export class CronScheduler {
75
81
  // Create cron job
76
82
  const cron = createCronJob(input, nextRun);
77
83
  this.cronJobs.set(cron.name, cron);
84
+ this.cronHeap.push(cron);
78
85
  cronLog.info('Added job', { name: cron.name, nextRun: new Date(nextRun).toISOString() });
79
86
  return cron;
80
87
  }
@@ -82,11 +89,14 @@ export class CronScheduler {
82
89
  * Remove a cron job
83
90
  */
84
91
  remove(name) {
85
- const deleted = this.cronJobs.delete(name);
86
- if (deleted) {
87
- cronLog.info('Removed job', { name });
88
- }
89
- return deleted;
92
+ const cron = this.cronJobs.get(name);
93
+ if (!cron)
94
+ return false;
95
+ this.cronJobs.delete(name);
96
+ // Remove from heap - O(n) but rare operation
97
+ this.cronHeap.removeWhere((c) => c.name === name);
98
+ cronLog.info('Removed job', { name });
99
+ return true;
90
100
  }
91
101
  /**
92
102
  * Get a cron job by name
@@ -107,23 +117,31 @@ export class CronScheduler {
107
117
  for (const cron of crons) {
108
118
  this.cronJobs.set(cron.name, cron);
109
119
  }
120
+ // Rebuild heap from loaded crons - O(n)
121
+ this.cronHeap.buildFrom(crons);
110
122
  cronLog.info('Loaded jobs', { count: crons.length });
111
123
  }
112
124
  /**
113
125
  * Check and execute due cron jobs
126
+ * O(k log n) where k = number of due crons, instead of O(n) full scan
114
127
  */
115
128
  async tick() {
116
129
  if (!this.pushJob)
117
130
  return;
118
131
  const now = Date.now();
119
- for (const [name, cron] of this.cronJobs) {
120
- // Skip if not due
121
- if (cron.nextRun > now)
122
- continue;
123
- // Skip if at limit
132
+ const toReinsert = [];
133
+ const toRemove = [];
134
+ // Process only due crons from heap - O(k log n)
135
+ while (!this.cronHeap.isEmpty) {
136
+ const cron = this.cronHeap.peek();
137
+ if (!cron || cron.nextRun > now)
138
+ break;
139
+ // Remove from heap
140
+ this.cronHeap.pop();
141
+ // Check if at limit
124
142
  if (isAtLimit(cron)) {
125
- cronLog.info('Job reached execution limit', { name });
126
- this.cronJobs.delete(name);
143
+ cronLog.info('Job reached execution limit', { name: cron.name });
144
+ toRemove.push(cron.name);
127
145
  continue;
128
146
  }
129
147
  try {
@@ -142,29 +160,42 @@ export class CronScheduler {
142
160
  else if (cron.repeatEvery) {
143
161
  cron.nextRun = getNextIntervalRun(cron.repeatEvery, now);
144
162
  }
163
+ // Re-insert with new nextRun
164
+ toReinsert.push(cron);
145
165
  cronLog.info('Executed job', {
146
- name,
166
+ name: cron.name,
147
167
  executions: cron.executions,
148
168
  nextRun: new Date(cron.nextRun).toISOString(),
149
169
  });
150
170
  }
151
171
  catch (err) {
152
- cronLog.error('Failed to execute job', { name, error: String(err) });
172
+ cronLog.error('Failed to execute job', { name: cron.name, error: String(err) });
173
+ // Re-insert even on failure to retry next tick
174
+ toReinsert.push(cron);
153
175
  }
154
176
  }
177
+ // Re-insert processed crons with updated nextRun
178
+ for (const cron of toReinsert) {
179
+ this.cronHeap.push(cron);
180
+ }
181
+ // Remove limit-reached crons from map
182
+ for (const name of toRemove) {
183
+ this.cronJobs.delete(name);
184
+ }
155
185
  }
156
186
  /**
157
187
  * Get scheduler stats
188
+ * O(1) for nextRun using min-heap peek
158
189
  */
159
190
  getStats() {
160
- let nextRun = null;
191
+ // Use heap peek for O(1) nextRun instead of O(n) scan
192
+ const nextCron = this.cronHeap.peek();
193
+ const nextRun = nextCron && !isAtLimit(nextCron) ? nextCron.nextRun : null;
194
+ // Count pending (crons not at limit) - still O(n) but called rarely
161
195
  let pending = 0;
162
196
  for (const cron of this.cronJobs.values()) {
163
197
  if (!isAtLimit(cron)) {
164
198
  pending++;
165
- if (nextRun === null || cron.nextRun < nextRun) {
166
- nextRun = cron.nextRun;
167
- }
168
199
  }
169
200
  }
170
201
  return {