bunqueue 1.9.7 → 1.9.8

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 (145) hide show
  1. package/dist/application/backgroundTasks.d.ts +3 -6
  2. package/dist/application/backgroundTasks.d.ts.map +1 -1
  3. package/dist/application/backgroundTasks.js +9 -172
  4. package/dist/application/backgroundTasks.js.map +1 -1
  5. package/dist/application/cleanupTasks.d.ts +1 -1
  6. package/dist/application/cleanupTasks.d.ts.map +1 -1
  7. package/dist/application/cleanupTasks.js +57 -22
  8. package/dist/application/cleanupTasks.js.map +1 -1
  9. package/dist/application/clientTracking.d.ts +22 -0
  10. package/dist/application/clientTracking.d.ts.map +1 -0
  11. package/dist/application/clientTracking.js +122 -0
  12. package/dist/application/clientTracking.js.map +1 -0
  13. package/dist/application/contextFactory.d.ts +97 -0
  14. package/dist/application/contextFactory.d.ts.map +1 -0
  15. package/dist/application/contextFactory.js +169 -0
  16. package/dist/application/contextFactory.js.map +1 -0
  17. package/dist/application/dependencyProcessor.d.ts +11 -0
  18. package/dist/application/dependencyProcessor.d.ts.map +1 -0
  19. package/dist/application/dependencyProcessor.js +69 -0
  20. package/dist/application/dependencyProcessor.js.map +1 -0
  21. package/dist/application/dlqManager.d.ts +12 -0
  22. package/dist/application/dlqManager.d.ts.map +1 -1
  23. package/dist/application/dlqManager.js +36 -0
  24. package/dist/application/dlqManager.js.map +1 -1
  25. package/dist/application/lockManager.d.ts +2 -49
  26. package/dist/application/lockManager.d.ts.map +1 -1
  27. package/dist/application/lockManager.js +73 -262
  28. package/dist/application/lockManager.js.map +1 -1
  29. package/dist/application/lockOperations.d.ts +39 -0
  30. package/dist/application/lockOperations.d.ts.map +1 -0
  31. package/dist/application/lockOperations.js +101 -0
  32. package/dist/application/lockOperations.js.map +1 -0
  33. package/dist/application/operations/ack.d.ts +0 -5
  34. package/dist/application/operations/ack.d.ts.map +1 -1
  35. package/dist/application/operations/ack.js +30 -258
  36. package/dist/application/operations/ack.js.map +1 -1
  37. package/dist/application/operations/ackHelpers.d.ts +78 -0
  38. package/dist/application/operations/ackHelpers.d.ts.map +1 -0
  39. package/dist/application/operations/ackHelpers.js +162 -0
  40. package/dist/application/operations/ackHelpers.js.map +1 -0
  41. package/dist/application/operations/jobManagement.d.ts +2 -0
  42. package/dist/application/operations/jobManagement.d.ts.map +1 -1
  43. package/dist/application/operations/jobManagement.js +8 -0
  44. package/dist/application/operations/jobManagement.js.map +1 -1
  45. package/dist/application/operations/push.d.ts.map +1 -1
  46. package/dist/application/operations/push.js +8 -2
  47. package/dist/application/operations/push.js.map +1 -1
  48. package/dist/application/operations/queryOperations.d.ts +11 -0
  49. package/dist/application/operations/queryOperations.d.ts.map +1 -1
  50. package/dist/application/operations/queryOperations.js +32 -0
  51. package/dist/application/operations/queryOperations.js.map +1 -1
  52. package/dist/application/queueManager.d.ts +3 -11
  53. package/dist/application/queueManager.d.ts.map +1 -1
  54. package/dist/application/queueManager.js +90 -243
  55. package/dist/application/queueManager.js.map +1 -1
  56. package/dist/application/stallDetection.d.ts +11 -0
  57. package/dist/application/stallDetection.d.ts.map +1 -0
  58. package/dist/application/stallDetection.js +128 -0
  59. package/dist/application/stallDetection.js.map +1 -0
  60. package/dist/domain/queue/dependencyTracker.d.ts +74 -0
  61. package/dist/domain/queue/dependencyTracker.d.ts.map +1 -0
  62. package/dist/domain/queue/dependencyTracker.js +126 -0
  63. package/dist/domain/queue/dependencyTracker.js.map +1 -0
  64. package/dist/domain/queue/dlqShard.d.ts +59 -0
  65. package/dist/domain/queue/dlqShard.d.ts.map +1 -0
  66. package/dist/domain/queue/dlqShard.js +165 -0
  67. package/dist/domain/queue/dlqShard.js.map +1 -0
  68. package/dist/domain/queue/limiterManager.d.ts +44 -0
  69. package/dist/domain/queue/limiterManager.d.ts.map +1 -0
  70. package/dist/domain/queue/limiterManager.js +99 -0
  71. package/dist/domain/queue/limiterManager.js.map +1 -0
  72. package/dist/domain/queue/shard.d.ts +29 -122
  73. package/dist/domain/queue/shard.d.ts.map +1 -1
  74. package/dist/domain/queue/shard.js +152 -426
  75. package/dist/domain/queue/shard.js.map +1 -1
  76. package/dist/domain/queue/temporalManager.d.ts +81 -0
  77. package/dist/domain/queue/temporalManager.d.ts.map +1 -0
  78. package/dist/domain/queue/temporalManager.js +149 -0
  79. package/dist/domain/queue/temporalManager.js.map +1 -0
  80. package/dist/domain/queue/uniqueKeyManager.d.ts +32 -0
  81. package/dist/domain/queue/uniqueKeyManager.d.ts.map +1 -0
  82. package/dist/domain/queue/uniqueKeyManager.js +87 -0
  83. package/dist/domain/queue/uniqueKeyManager.js.map +1 -0
  84. package/dist/infrastructure/backup/s3Backup.d.ts +3 -40
  85. package/dist/infrastructure/backup/s3Backup.d.ts.map +1 -1
  86. package/dist/infrastructure/backup/s3Backup.js +10 -182
  87. package/dist/infrastructure/backup/s3Backup.js.map +1 -1
  88. package/dist/infrastructure/backup/s3BackupConfig.d.ts +67 -0
  89. package/dist/infrastructure/backup/s3BackupConfig.d.ts.map +1 -0
  90. package/dist/infrastructure/backup/s3BackupConfig.js +48 -0
  91. package/dist/infrastructure/backup/s3BackupConfig.js.map +1 -0
  92. package/dist/infrastructure/backup/s3BackupOperations.d.ts +23 -0
  93. package/dist/infrastructure/backup/s3BackupOperations.d.ts.map +1 -0
  94. package/dist/infrastructure/backup/s3BackupOperations.js +170 -0
  95. package/dist/infrastructure/backup/s3BackupOperations.js.map +1 -0
  96. package/dist/infrastructure/persistence/sqlite.d.ts +4 -13
  97. package/dist/infrastructure/persistence/sqlite.d.ts.map +1 -1
  98. package/dist/infrastructure/persistence/sqlite.js +23 -178
  99. package/dist/infrastructure/persistence/sqlite.js.map +1 -1
  100. package/dist/infrastructure/persistence/sqliteBatch.d.ts +38 -0
  101. package/dist/infrastructure/persistence/sqliteBatch.d.ts.map +1 -0
  102. package/dist/infrastructure/persistence/sqliteBatch.js +124 -0
  103. package/dist/infrastructure/persistence/sqliteBatch.js.map +1 -0
  104. package/dist/infrastructure/persistence/sqliteSerializer.d.ts +17 -0
  105. package/dist/infrastructure/persistence/sqliteSerializer.d.ts.map +1 -0
  106. package/dist/infrastructure/persistence/sqliteSerializer.js +81 -0
  107. package/dist/infrastructure/persistence/sqliteSerializer.js.map +1 -0
  108. package/dist/infrastructure/server/handler.d.ts.map +1 -1
  109. package/dist/infrastructure/server/handler.js +1 -186
  110. package/dist/infrastructure/server/handler.js.map +1 -1
  111. package/dist/infrastructure/server/handlerRoutes.d.ts +23 -0
  112. package/dist/infrastructure/server/handlerRoutes.d.ts.map +1 -0
  113. package/dist/infrastructure/server/handlerRoutes.js +190 -0
  114. package/dist/infrastructure/server/handlerRoutes.js.map +1 -0
  115. package/dist/infrastructure/server/http.d.ts +4 -25
  116. package/dist/infrastructure/server/http.d.ts.map +1 -1
  117. package/dist/infrastructure/server/http.js +43 -285
  118. package/dist/infrastructure/server/http.js.map +1 -1
  119. package/dist/infrastructure/server/httpEndpoints.d.ts +19 -0
  120. package/dist/infrastructure/server/httpEndpoints.d.ts.map +1 -0
  121. package/dist/infrastructure/server/httpEndpoints.js +151 -0
  122. package/dist/infrastructure/server/httpEndpoints.js.map +1 -0
  123. package/dist/infrastructure/server/sseHandler.d.ts +27 -0
  124. package/dist/infrastructure/server/sseHandler.d.ts.map +1 -0
  125. package/dist/infrastructure/server/sseHandler.js +77 -0
  126. package/dist/infrastructure/server/sseHandler.js.map +1 -0
  127. package/dist/infrastructure/server/wsHandler.d.ts +31 -0
  128. package/dist/infrastructure/server/wsHandler.d.ts.map +1 -0
  129. package/dist/infrastructure/server/wsHandler.js +63 -0
  130. package/dist/infrastructure/server/wsHandler.js.map +1 -0
  131. package/dist/mcp/index.js +3 -465
  132. package/dist/mcp/index.js.map +1 -1
  133. package/dist/mcp/mcpHandlers.d.ts +129 -0
  134. package/dist/mcp/mcpHandlers.d.ts.map +1 -0
  135. package/dist/mcp/mcpHandlers.js +204 -0
  136. package/dist/mcp/mcpHandlers.js.map +1 -0
  137. package/dist/mcp/mcpTools.d.ts +15 -0
  138. package/dist/mcp/mcpTools.d.ts.map +1 -0
  139. package/dist/mcp/mcpTools.js +277 -0
  140. package/dist/mcp/mcpTools.js.map +1 -0
  141. package/package.json +2 -2
  142. package/dist/cli/dashboard.d.ts +0 -32
  143. package/dist/cli/dashboard.d.ts.map +0 -1
  144. package/dist/cli/dashboard.js +0 -183
  145. package/dist/cli/dashboard.js.map +0 -1
@@ -6,14 +6,8 @@
6
6
  */
7
7
  import { S3Client } from 'bun';
8
8
  import { backupLog } from '../../shared/logger';
9
- import { VERSION } from '../../shared/version';
10
- /** Default configuration values */
11
- const DEFAULTS = {
12
- intervalMs: 6 * 60 * 60 * 1000, // 6 hours
13
- retention: 7,
14
- prefix: 'backups/',
15
- region: 'us-east-1',
16
- };
9
+ import { DEFAULTS, configFromEnv, validateConfig, } from './s3BackupConfig';
10
+ import { performBackup, listBackups, restoreBackup, cleanupOldBackups } from './s3BackupOperations';
17
11
  /**
18
12
  * S3 Backup Manager
19
13
  * Handles automated and manual backups to S3-compatible storage
@@ -50,37 +44,13 @@ export class S3BackupManager {
50
44
  * Create configuration from environment variables
51
45
  */
52
46
  static fromEnv(databasePath) {
53
- return {
54
- enabled: process.env.S3_BACKUP_ENABLED === '1' || process.env.S3_BACKUP_ENABLED === 'true',
55
- accessKeyId: process.env.S3_ACCESS_KEY_ID ?? process.env.AWS_ACCESS_KEY_ID ?? '',
56
- secretAccessKey: process.env.S3_SECRET_ACCESS_KEY ?? process.env.AWS_SECRET_ACCESS_KEY ?? '',
57
- bucket: process.env.S3_BUCKET ?? process.env.AWS_BUCKET ?? '',
58
- endpoint: process.env.S3_ENDPOINT ?? process.env.AWS_ENDPOINT,
59
- region: process.env.S3_REGION ?? process.env.AWS_REGION ?? DEFAULTS.region,
60
- intervalMs: parseInt(process.env.S3_BACKUP_INTERVAL ?? '', 10) || DEFAULTS.intervalMs,
61
- retention: parseInt(process.env.S3_BACKUP_RETENTION ?? '', 10) || DEFAULTS.retention,
62
- prefix: process.env.S3_BACKUP_PREFIX ?? DEFAULTS.prefix,
63
- databasePath,
64
- };
47
+ return configFromEnv(databasePath);
65
48
  }
66
49
  /**
67
50
  * Validate configuration
68
51
  */
69
52
  validate() {
70
- const errors = [];
71
- if (!this.config.accessKeyId) {
72
- errors.push('S3_ACCESS_KEY_ID is required');
73
- }
74
- if (!this.config.secretAccessKey) {
75
- errors.push('S3_SECRET_ACCESS_KEY is required');
76
- }
77
- if (!this.config.bucket) {
78
- errors.push('S3_BUCKET is required');
79
- }
80
- if (!this.config.databasePath) {
81
- errors.push('Database path is required');
82
- }
83
- return { valid: errors.length === 0, errors };
53
+ return validateConfig(this.config);
84
54
  }
85
55
  /**
86
56
  * Start automated backup scheduler
@@ -138,55 +108,12 @@ export class S3BackupManager {
138
108
  return { success: false, error: 'Backup already in progress' };
139
109
  }
140
110
  this.isBackupInProgress = true;
141
- const startTime = Date.now();
142
111
  try {
143
- // Check if database file exists
144
- const dbFile = Bun.file(this.config.databasePath);
145
- const exists = await dbFile.exists();
146
- if (!exists) {
147
- throw new Error(`Database file not found: ${this.config.databasePath}`);
112
+ const result = await performBackup(this.config, this.client);
113
+ if (result.success) {
114
+ await cleanupOldBackups(this.config, this.client);
148
115
  }
149
- // Generate backup key with timestamp
150
- const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
151
- const key = `${this.config.prefix}bunqueue-${timestamp}.db`;
152
- // Read database file
153
- const data = await dbFile.arrayBuffer();
154
- const size = data.byteLength;
155
- // Calculate checksum
156
- const hasher = new Bun.CryptoHasher('sha256');
157
- hasher.update(new Uint8Array(data));
158
- const checksum = hasher.digest('hex');
159
- // Upload to S3
160
- const s3File = this.client.file(key);
161
- await s3File.write(new Uint8Array(data), {
162
- type: 'application/x-sqlite3',
163
- });
164
- // Upload metadata
165
- const metadata = {
166
- timestamp: new Date().toISOString(),
167
- version: VERSION,
168
- size,
169
- checksum,
170
- };
171
- const metadataKey = `${key}.meta.json`;
172
- await this.client.file(metadataKey).write(JSON.stringify(metadata, null, 2), {
173
- type: 'application/json',
174
- });
175
- const duration = Date.now() - startTime;
176
- backupLog.info('Backup completed', {
177
- key,
178
- size: `${(size / 1024 / 1024).toFixed(2)} MB`,
179
- duration: `${duration}ms`,
180
- checksum: checksum.substring(0, 16) + '...',
181
- });
182
- // Clean up old backups
183
- await this.cleanupOldBackups();
184
- return { success: true, key, size, duration };
185
- }
186
- catch (error) {
187
- const message = error instanceof Error ? error.message : String(error);
188
- backupLog.error('Backup failed', { error: message });
189
- return { success: false, error: message };
116
+ return result;
190
117
  }
191
118
  finally {
192
119
  this.isBackupInProgress = false;
@@ -196,112 +123,13 @@ export class S3BackupManager {
196
123
  * List available backups
197
124
  */
198
125
  async listBackups() {
199
- try {
200
- const result = await this.client.list({
201
- prefix: this.config.prefix,
202
- maxKeys: 100,
203
- });
204
- if (!result.contents) {
205
- return [];
206
- }
207
- return result.contents
208
- .filter((item) => typeof item.key === 'string' &&
209
- item.key.endsWith('.db') &&
210
- !item.key.endsWith('.meta.json'))
211
- .map((item) => {
212
- const lastMod = item.lastModified;
213
- // Handle both Date and string types from S3 response
214
- const lastModDate = lastMod ? new Date(lastMod) : new Date();
215
- return {
216
- key: item.key,
217
- size: item.size ?? 0,
218
- lastModified: lastModDate,
219
- };
220
- })
221
- .sort((a, b) => b.lastModified.getTime() - a.lastModified.getTime());
222
- }
223
- catch (error) {
224
- backupLog.error('Failed to list backups', { error: String(error) });
225
- return [];
226
- }
126
+ return listBackups(this.config, this.client);
227
127
  }
228
128
  /**
229
129
  * Restore from a backup
230
130
  */
231
131
  async restore(key) {
232
- const startTime = Date.now();
233
- try {
234
- // Verify backup exists
235
- const s3File = this.client.file(key);
236
- const exists = await s3File.exists();
237
- if (!exists) {
238
- throw new Error(`Backup not found: ${key}`);
239
- }
240
- // Download backup
241
- const data = await s3File.arrayBuffer();
242
- // Verify checksum if metadata exists
243
- const metadataKey = `${key}.meta.json`;
244
- const metadataFile = this.client.file(metadataKey);
245
- const metadataExists = await metadataFile.exists();
246
- if (metadataExists) {
247
- const metadataRaw = (await metadataFile.json());
248
- const hasher = new Bun.CryptoHasher('sha256');
249
- hasher.update(new Uint8Array(data));
250
- const checksum = hasher.digest('hex');
251
- if (checksum !== metadataRaw.checksum) {
252
- throw new Error('Backup checksum mismatch - file may be corrupted');
253
- }
254
- }
255
- // Write to database path
256
- await Bun.write(this.config.databasePath, new Uint8Array(data));
257
- const duration = Date.now() - startTime;
258
- backupLog.info('Restore completed', {
259
- key,
260
- size: `${(data.byteLength / 1024 / 1024).toFixed(2)} MB`,
261
- duration: `${duration}ms`,
262
- });
263
- return { success: true, key, size: data.byteLength, duration };
264
- }
265
- catch (error) {
266
- const message = error instanceof Error ? error.message : String(error);
267
- backupLog.error('Restore failed', { error: message });
268
- return { success: false, error: message };
269
- }
270
- }
271
- /**
272
- * Clean up old backups based on retention policy
273
- */
274
- async cleanupOldBackups() {
275
- try {
276
- const backups = await this.listBackups();
277
- if (backups.length <= this.config.retention) {
278
- return;
279
- }
280
- // Sort by date (newest first) and get backups to delete
281
- const toDelete = backups.slice(this.config.retention);
282
- for (const backup of toDelete) {
283
- try {
284
- // Delete backup file
285
- await this.client.delete(backup.key);
286
- // Delete metadata file if exists
287
- const metadataKey = `${backup.key}.meta.json`;
288
- const metadataFile = this.client.file(metadataKey);
289
- if (await metadataFile.exists()) {
290
- await this.client.delete(metadataKey);
291
- }
292
- backupLog.info('Deleted old backup', { key: backup.key });
293
- }
294
- catch (err) {
295
- backupLog.warn('Failed to delete old backup', {
296
- key: backup.key,
297
- error: String(err),
298
- });
299
- }
300
- }
301
- }
302
- catch (error) {
303
- backupLog.warn('Failed to cleanup old backups', { error: String(error) });
304
- }
132
+ return restoreBackup(key, this.config, this.client);
305
133
  }
306
134
  /**
307
135
  * Get backup status
@@ -1 +1 @@
1
- {"version":3,"file":"s3Backup.js","sourceRoot":"","sources":["../../../src/infrastructure/backup/s3Backup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"s3Backup.js","sourceRoot":"","sources":["../../../src/infrastructure/backup/s3Backup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * S3 Backup Configuration
3
+ * Types and configuration factory
4
+ */
5
+ /** S3 Backup configuration */
6
+ export interface S3BackupConfig {
7
+ /** Enable S3 backup */
8
+ enabled: boolean;
9
+ /** S3 access key ID */
10
+ accessKeyId: string;
11
+ /** S3 secret access key */
12
+ secretAccessKey: string;
13
+ /** S3 bucket name */
14
+ bucket: string;
15
+ /** S3 endpoint (optional, for non-AWS S3-compatible services) */
16
+ endpoint?: string;
17
+ /** S3 region (optional, default: us-east-1) */
18
+ region?: string;
19
+ /** Backup interval in milliseconds (default: 6 hours) */
20
+ intervalMs: number;
21
+ /** Number of backups to retain (default: 7) */
22
+ retention: number;
23
+ /** Prefix for backup files (default: 'backups/') */
24
+ prefix: string;
25
+ /** Path to the SQLite database file */
26
+ databasePath: string;
27
+ }
28
+ /** Backup result */
29
+ export interface BackupResult {
30
+ success: boolean;
31
+ key?: string;
32
+ size?: number;
33
+ duration?: number;
34
+ error?: string;
35
+ }
36
+ /** Backup metadata stored in S3 */
37
+ export interface BackupMetadata {
38
+ timestamp: string;
39
+ version: string;
40
+ size: number;
41
+ checksum: string;
42
+ }
43
+ /** Backup list item */
44
+ export interface BackupItem {
45
+ key: string;
46
+ size: number;
47
+ lastModified: Date;
48
+ }
49
+ /** Default configuration values */
50
+ export declare const DEFAULTS: {
51
+ readonly intervalMs: number;
52
+ readonly retention: 7;
53
+ readonly prefix: "backups/";
54
+ readonly region: "us-east-1";
55
+ };
56
+ /**
57
+ * Create configuration from environment variables
58
+ */
59
+ export declare function configFromEnv(databasePath: string): S3BackupConfig;
60
+ /**
61
+ * Validate configuration
62
+ */
63
+ export declare function validateConfig(config: S3BackupConfig): {
64
+ valid: boolean;
65
+ errors: string[];
66
+ };
67
+ //# sourceMappingURL=s3BackupConfig.d.ts.map
@@ -0,0 +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,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * S3 Backup Configuration
3
+ * Types and configuration factory
4
+ */
5
+ /** Default configuration values */
6
+ export const DEFAULTS = {
7
+ intervalMs: 6 * 60 * 60 * 1000, // 6 hours
8
+ retention: 7,
9
+ prefix: 'backups/',
10
+ region: 'us-east-1',
11
+ };
12
+ /**
13
+ * Create configuration from environment variables
14
+ */
15
+ export function configFromEnv(databasePath) {
16
+ return {
17
+ enabled: process.env.S3_BACKUP_ENABLED === '1' || process.env.S3_BACKUP_ENABLED === 'true',
18
+ accessKeyId: process.env.S3_ACCESS_KEY_ID ?? process.env.AWS_ACCESS_KEY_ID ?? '',
19
+ secretAccessKey: process.env.S3_SECRET_ACCESS_KEY ?? process.env.AWS_SECRET_ACCESS_KEY ?? '',
20
+ bucket: process.env.S3_BUCKET ?? process.env.AWS_BUCKET ?? '',
21
+ endpoint: process.env.S3_ENDPOINT ?? process.env.AWS_ENDPOINT,
22
+ region: process.env.S3_REGION ?? process.env.AWS_REGION ?? DEFAULTS.region,
23
+ intervalMs: parseInt(process.env.S3_BACKUP_INTERVAL ?? '', 10) || DEFAULTS.intervalMs,
24
+ retention: parseInt(process.env.S3_BACKUP_RETENTION ?? '', 10) || DEFAULTS.retention,
25
+ prefix: process.env.S3_BACKUP_PREFIX ?? DEFAULTS.prefix,
26
+ databasePath,
27
+ };
28
+ }
29
+ /**
30
+ * Validate configuration
31
+ */
32
+ export function validateConfig(config) {
33
+ const errors = [];
34
+ if (!config.accessKeyId) {
35
+ errors.push('S3_ACCESS_KEY_ID is required');
36
+ }
37
+ if (!config.secretAccessKey) {
38
+ errors.push('S3_SECRET_ACCESS_KEY is required');
39
+ }
40
+ if (!config.bucket) {
41
+ errors.push('S3_BUCKET is required');
42
+ }
43
+ if (!config.databasePath) {
44
+ errors.push('Database path is required');
45
+ }
46
+ return { valid: errors.length === 0, errors };
47
+ }
48
+ //# sourceMappingURL=s3BackupConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"s3BackupConfig.js","sourceRoot":"","sources":["../../../src/infrastructure/backup/s3BackupConfig.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAkDH,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,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,MAAM;QAC1F,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE;QAChF,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,EAAE;QAC5F,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE;QAC7D,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY;QAC7D,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,QAAQ,CAAC,MAAM;QAC1E,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC,UAAU;QACrF,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC,SAAS;QACpF,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,QAAQ,CAAC,MAAM;QACvD,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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * S3 Backup Operations
3
+ * Core backup, restore, list, and cleanup operations
4
+ */
5
+ import type { S3Client } from 'bun';
6
+ import type { S3BackupConfig, BackupResult, BackupItem } from './s3BackupConfig';
7
+ /**
8
+ * Perform a backup to S3
9
+ */
10
+ export declare function performBackup(config: S3BackupConfig, client: S3Client): Promise<BackupResult>;
11
+ /**
12
+ * List available backups
13
+ */
14
+ export declare function listBackups(config: S3BackupConfig, client: S3Client): Promise<BackupItem[]>;
15
+ /**
16
+ * Restore from a backup
17
+ */
18
+ export declare function restoreBackup(key: string, config: S3BackupConfig, client: S3Client): Promise<BackupResult>;
19
+ /**
20
+ * Clean up old backups based on retention policy
21
+ */
22
+ export declare function cleanupOldBackups(config: S3BackupConfig, client: S3Client): Promise<void>;
23
+ //# sourceMappingURL=s3BackupOperations.d.ts.map
@@ -0,0 +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,CA2DvB;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,CAgDvB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAkC/F"}
@@ -0,0 +1,170 @@
1
+ /**
2
+ * S3 Backup Operations
3
+ * Core backup, restore, list, and cleanup operations
4
+ */
5
+ import { backupLog } from '../../shared/logger';
6
+ import { VERSION } from '../../shared/version';
7
+ /**
8
+ * Perform a backup to S3
9
+ */
10
+ export async function performBackup(config, client) {
11
+ const startTime = Date.now();
12
+ try {
13
+ // Check if database file exists
14
+ const dbFile = Bun.file(config.databasePath);
15
+ const exists = await dbFile.exists();
16
+ if (!exists) {
17
+ throw new Error(`Database file not found: ${config.databasePath}`);
18
+ }
19
+ // Generate backup key with timestamp
20
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
21
+ const key = `${config.prefix}bunqueue-${timestamp}.db`;
22
+ // Read database file
23
+ const data = await dbFile.arrayBuffer();
24
+ const size = data.byteLength;
25
+ // Calculate checksum
26
+ const hasher = new Bun.CryptoHasher('sha256');
27
+ hasher.update(new Uint8Array(data));
28
+ const checksum = hasher.digest('hex');
29
+ // Upload to S3
30
+ const s3File = client.file(key);
31
+ await s3File.write(new Uint8Array(data), {
32
+ type: 'application/x-sqlite3',
33
+ });
34
+ // Upload metadata
35
+ const metadata = {
36
+ timestamp: new Date().toISOString(),
37
+ version: VERSION,
38
+ size,
39
+ checksum,
40
+ };
41
+ const metadataKey = `${key}.meta.json`;
42
+ await client.file(metadataKey).write(JSON.stringify(metadata, null, 2), {
43
+ type: 'application/json',
44
+ });
45
+ const duration = Date.now() - startTime;
46
+ backupLog.info('Backup completed', {
47
+ key,
48
+ size: `${(size / 1024 / 1024).toFixed(2)} MB`,
49
+ duration: `${duration}ms`,
50
+ checksum: checksum.substring(0, 16) + '...',
51
+ });
52
+ return { success: true, key, size, duration };
53
+ }
54
+ catch (error) {
55
+ const message = error instanceof Error ? error.message : String(error);
56
+ backupLog.error('Backup failed', { error: message });
57
+ return { success: false, error: message };
58
+ }
59
+ }
60
+ /**
61
+ * List available backups
62
+ */
63
+ export async function listBackups(config, client) {
64
+ try {
65
+ const result = await client.list({
66
+ prefix: config.prefix,
67
+ maxKeys: 100,
68
+ });
69
+ if (!result.contents) {
70
+ return [];
71
+ }
72
+ return result.contents
73
+ .filter((item) => typeof item.key === 'string' &&
74
+ item.key.endsWith('.db') &&
75
+ !item.key.endsWith('.meta.json'))
76
+ .map((item) => {
77
+ const lastMod = item.lastModified;
78
+ const lastModDate = lastMod ? new Date(lastMod) : new Date();
79
+ return {
80
+ key: item.key,
81
+ size: item.size ?? 0,
82
+ lastModified: lastModDate,
83
+ };
84
+ })
85
+ .sort((a, b) => b.lastModified.getTime() - a.lastModified.getTime());
86
+ }
87
+ catch (error) {
88
+ backupLog.error('Failed to list backups', { error: String(error) });
89
+ return [];
90
+ }
91
+ }
92
+ /**
93
+ * Restore from a backup
94
+ */
95
+ export async function restoreBackup(key, config, client) {
96
+ const startTime = Date.now();
97
+ try {
98
+ // Verify backup exists
99
+ const s3File = client.file(key);
100
+ const exists = await s3File.exists();
101
+ if (!exists) {
102
+ throw new Error(`Backup not found: ${key}`);
103
+ }
104
+ // Download backup
105
+ const data = await s3File.arrayBuffer();
106
+ // Verify checksum if metadata exists
107
+ const metadataKey = `${key}.meta.json`;
108
+ const metadataFile = client.file(metadataKey);
109
+ const metadataExists = await metadataFile.exists();
110
+ if (metadataExists) {
111
+ const metadataRaw = (await metadataFile.json());
112
+ const hasher = new Bun.CryptoHasher('sha256');
113
+ hasher.update(new Uint8Array(data));
114
+ const checksum = hasher.digest('hex');
115
+ if (checksum !== metadataRaw.checksum) {
116
+ throw new Error('Backup checksum mismatch - file may be corrupted');
117
+ }
118
+ }
119
+ // Write to database path
120
+ await Bun.write(config.databasePath, new Uint8Array(data));
121
+ const duration = Date.now() - startTime;
122
+ backupLog.info('Restore completed', {
123
+ key,
124
+ size: `${(data.byteLength / 1024 / 1024).toFixed(2)} MB`,
125
+ duration: `${duration}ms`,
126
+ });
127
+ return { success: true, key, size: data.byteLength, duration };
128
+ }
129
+ catch (error) {
130
+ const message = error instanceof Error ? error.message : String(error);
131
+ backupLog.error('Restore failed', { error: message });
132
+ return { success: false, error: message };
133
+ }
134
+ }
135
+ /**
136
+ * Clean up old backups based on retention policy
137
+ */
138
+ export async function cleanupOldBackups(config, client) {
139
+ try {
140
+ const backups = await listBackups(config, client);
141
+ if (backups.length <= config.retention) {
142
+ return;
143
+ }
144
+ // Sort by date (newest first) and get backups to delete
145
+ const toDelete = backups.slice(config.retention);
146
+ for (const backup of toDelete) {
147
+ try {
148
+ // Delete backup file
149
+ await client.delete(backup.key);
150
+ // Delete metadata file if exists
151
+ const metadataKey = `${backup.key}.meta.json`;
152
+ const metadataFile = client.file(metadataKey);
153
+ if (await metadataFile.exists()) {
154
+ await client.delete(metadataKey);
155
+ }
156
+ backupLog.info('Deleted old backup', { key: backup.key });
157
+ }
158
+ catch (err) {
159
+ backupLog.warn('Failed to delete old backup', {
160
+ key: backup.key,
161
+ error: String(err),
162
+ });
163
+ }
164
+ }
165
+ }
166
+ catch (error) {
167
+ backupLog.warn('Failed to cleanup old backups', { error: String(error) });
168
+ }
169
+ }
170
+ //# sourceMappingURL=s3BackupOperations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"s3BackupOperations.js","sourceRoot":"","sources":["../../../src/infrastructure/backup/s3BackupOperations.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@
3
3
  * Persistence layer using Bun's native SQLite
4
4
  * Uses MessagePack for ~2-3x faster serialization than JSON
5
5
  */
6
- import { type Job, type JobId } from '../../domain/types/job';
6
+ import type { Job, JobId } from '../../domain/types/job';
7
7
  import type { CronJob } from '../../domain/types/cron';
8
8
  import type { DlqEntry } from '../../domain/types/dlq';
9
9
  /** SQLite configuration */
@@ -23,12 +23,10 @@ export interface SqliteConfig {
23
23
  export declare class SqliteStorage {
24
24
  private readonly db;
25
25
  private readonly statements;
26
- private writeBuffer;
27
- private readonly writeBufferSize;
28
- private writeBufferTimer;
29
- private readonly batchInsertCache;
26
+ private readonly batchManager;
27
+ private readonly writeBuffer;
30
28
  constructor(config: SqliteConfig);
31
- /** Flush write buffer to disk. Returns number of jobs flushed, or throws on error. */
29
+ /** Flush write buffer to disk. Returns number of jobs flushed. */
32
30
  flushWriteBuffer(): number;
33
31
  private migrate;
34
32
  /**
@@ -57,18 +55,11 @@ export declare class SqliteStorage {
57
55
  getResult(jobId: JobId): unknown;
58
56
  /** Insert batch of jobs (adds to buffer) */
59
57
  insertJobsBatch(jobs: Job[]): void;
60
- /** Internal: Insert batch directly using multi-row INSERT for 50-100x speedup */
61
- private insertJobsBatchInternal;
62
- /** Get or create cached prepared statement for batch insert */
63
- private getBatchInsertStmt;
64
- /** Insert a chunk of jobs with single multi-row INSERT */
65
- private insertJobsChunk;
66
58
  loadPendingJobs(): Job[];
67
59
  loadActiveJobs(): Job[];
68
60
  saveCron(cron: CronJob): void;
69
61
  loadCronJobs(): CronJob[];
70
62
  deleteCron(name: string): void;
71
- private rowToJob;
72
63
  close(): void;
73
64
  getSize(): number;
74
65
  }
@@ -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;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,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;IAGvE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAsD;gBAE3E,MAAM,EAAE,YAAY;IAoBhC,sFAAsF;IACtF,gBAAgB,IAAI,MAAM;IAoB1B,OAAO,CAAC,OAAO;IAgBf;;;;OAIG;IACH,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI;IAe5C,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;IAKhD,wCAAwC;IACxC,YAAY,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAMnC,iCAAiC;IACjC,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAIlC,wCAAwC;IACxC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIlC,2BAA2B;IAC3B,OAAO,IAAI,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;IAsClC,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,+DAA+D;IAC/D,OAAO,CAAC,kBAAkB;IAmB1B,0DAA0D;IAC1D,OAAO,CAAC,eAAe;IAsCvB,eAAe,IAAI,GAAG,EAAE;IAOxB,cAAc,IAAI,GAAG,EAAE;IASvB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAiB7B,YAAY,IAAI,OAAO,EAAE;IAgBzB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM9B,OAAO,CAAC,QAAQ;IA4ChB,KAAK,IAAI,IAAI;IAwBb,OAAO,IAAI,MAAM;CAIlB"}
1
+ {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/persistence/sqlite.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAOvD,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;IACjF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAClD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;gBAE9B,MAAM,EAAE,YAAY;IAqBhC,kEAAkE;IAClE,gBAAgB,IAAI,MAAM;IAI1B,OAAO,CAAC,OAAO;IAgBf;;;;OAIG;IACH,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI;IAQ5C,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;IAIhD,wCAAwC;IACxC,YAAY,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAMnC,iCAAiC;IACjC,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAIlC,wCAAwC;IACxC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIlC,2BAA2B;IAC3B,OAAO,IAAI,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;IA4BlC,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;IAMlC,eAAe,IAAI,GAAG,EAAE;IAOxB,cAAc,IAAI,GAAG,EAAE;IASvB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAiB7B,YAAY,IAAI,OAAO,EAAE;IAgBzB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM9B,KAAK,IAAI,IAAI;IAkBb,OAAO,IAAI,MAAM;CAIlB"}