@bernierllc/backoff-retry 0.1.1 → 0.3.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 (137) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +110 -0
  3. package/dist/enhancement-manager.d.ts +205 -0
  4. package/dist/enhancement-manager.d.ts.map +1 -0
  5. package/dist/enhancement-manager.js +533 -0
  6. package/dist/enhancement-manager.js.map +1 -0
  7. package/dist/index.d.ts +3 -0
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +4 -0
  10. package/dist/index.js.map +1 -1
  11. package/dist/memory-protection.js +1 -1
  12. package/dist/memory-protection.js.map +1 -1
  13. package/dist/neveradmin/components/RetryAnalyticsPage.d.ts +15 -0
  14. package/dist/neveradmin/components/RetryAnalyticsPage.d.ts.map +1 -0
  15. package/dist/neveradmin/components/RetryAnalyticsPage.js +28 -0
  16. package/dist/neveradmin/components/RetryAnalyticsPage.js.map +1 -0
  17. package/dist/neveradmin/components/RetryConfigurationPage.d.ts +15 -0
  18. package/dist/neveradmin/components/RetryConfigurationPage.d.ts.map +1 -0
  19. package/dist/neveradmin/components/RetryConfigurationPage.js +28 -0
  20. package/dist/neveradmin/components/RetryConfigurationPage.js.map +1 -0
  21. package/dist/neveradmin/components/RetryEnhancementsPage.d.ts +15 -0
  22. package/dist/neveradmin/components/RetryEnhancementsPage.d.ts.map +1 -0
  23. package/dist/neveradmin/components/RetryEnhancementsPage.js +28 -0
  24. package/dist/neveradmin/components/RetryEnhancementsPage.js.map +1 -0
  25. package/dist/neveradmin/components/RetryOperationsPage.d.ts +15 -0
  26. package/dist/neveradmin/components/RetryOperationsPage.d.ts.map +1 -0
  27. package/dist/neveradmin/components/RetryOperationsPage.js +28 -0
  28. package/dist/neveradmin/components/RetryOperationsPage.js.map +1 -0
  29. package/dist/neveradmin/components/RetryOverviewPage.d.ts +15 -0
  30. package/dist/neveradmin/components/RetryOverviewPage.d.ts.map +1 -0
  31. package/dist/neveradmin/components/RetryOverviewPage.js +28 -0
  32. package/dist/neveradmin/components/RetryOverviewPage.js.map +1 -0
  33. package/dist/neveradmin/components/index.d.ts +7 -0
  34. package/dist/neveradmin/components/index.d.ts.map +1 -0
  35. package/dist/neveradmin/components/index.js +32 -0
  36. package/dist/neveradmin/components/index.js.map +1 -0
  37. package/dist/neveradmin/components/types.d.ts +64 -0
  38. package/dist/neveradmin/components/types.d.ts.map +1 -0
  39. package/dist/neveradmin/components/types.js +10 -0
  40. package/dist/neveradmin/components/types.js.map +1 -0
  41. package/dist/neveradmin/hooks/index.d.ts +5 -0
  42. package/dist/neveradmin/hooks/index.d.ts.map +1 -0
  43. package/dist/neveradmin/hooks/index.js +28 -0
  44. package/dist/neveradmin/hooks/index.js.map +1 -0
  45. package/dist/neveradmin/hooks/useRetryConfiguration.d.ts +23 -0
  46. package/dist/neveradmin/hooks/useRetryConfiguration.d.ts.map +1 -0
  47. package/dist/neveradmin/hooks/useRetryConfiguration.js +162 -0
  48. package/dist/neveradmin/hooks/useRetryConfiguration.js.map +1 -0
  49. package/dist/neveradmin/hooks/useRetryEnhancements.d.ts +39 -0
  50. package/dist/neveradmin/hooks/useRetryEnhancements.d.ts.map +1 -0
  51. package/dist/neveradmin/hooks/useRetryEnhancements.js +197 -0
  52. package/dist/neveradmin/hooks/useRetryEnhancements.js.map +1 -0
  53. package/dist/neveradmin/hooks/useRetryOperations.d.ts +28 -0
  54. package/dist/neveradmin/hooks/useRetryOperations.d.ts.map +1 -0
  55. package/dist/neveradmin/hooks/useRetryOperations.js +166 -0
  56. package/dist/neveradmin/hooks/useRetryOperations.js.map +1 -0
  57. package/dist/neveradmin/hooks/useRetryStats.d.ts +19 -0
  58. package/dist/neveradmin/hooks/useRetryStats.d.ts.map +1 -0
  59. package/dist/neveradmin/hooks/useRetryStats.js +81 -0
  60. package/dist/neveradmin/hooks/useRetryStats.js.map +1 -0
  61. package/dist/neveradmin/index.d.ts +6 -0
  62. package/dist/neveradmin/index.d.ts.map +1 -0
  63. package/dist/neveradmin/index.js +29 -0
  64. package/dist/neveradmin/index.js.map +1 -0
  65. package/dist/neveradmin/registration.d.ts +33 -0
  66. package/dist/neveradmin/registration.d.ts.map +1 -0
  67. package/dist/neveradmin/registration.js +96 -0
  68. package/dist/neveradmin/registration.js.map +1 -0
  69. package/dist/neveradmin/types.d.ts +88 -0
  70. package/dist/neveradmin/types.d.ts.map +1 -0
  71. package/dist/neveradmin/types.js +10 -0
  72. package/dist/neveradmin/types.js.map +1 -0
  73. package/dist/neveradmin/utils/formatting.d.ts +41 -0
  74. package/dist/neveradmin/utils/formatting.d.ts.map +1 -0
  75. package/dist/neveradmin/utils/formatting.js +142 -0
  76. package/dist/neveradmin/utils/formatting.js.map +1 -0
  77. package/dist/neveradmin/utils/index.d.ts +4 -0
  78. package/dist/neveradmin/utils/index.d.ts.map +1 -0
  79. package/dist/neveradmin/utils/index.js +27 -0
  80. package/dist/neveradmin/utils/index.js.map +1 -0
  81. package/dist/neveradmin/utils/permissions.d.ts +74 -0
  82. package/dist/neveradmin/utils/permissions.d.ts.map +1 -0
  83. package/dist/neveradmin/utils/permissions.js +152 -0
  84. package/dist/neveradmin/utils/permissions.js.map +1 -0
  85. package/dist/neveradmin/utils/validation.d.ts +38 -0
  86. package/dist/neveradmin/utils/validation.d.ts.map +1 -0
  87. package/dist/neveradmin/utils/validation.js +142 -0
  88. package/dist/neveradmin/utils/validation.js.map +1 -0
  89. package/dist/retry-manager.d.ts +32 -11
  90. package/dist/retry-manager.d.ts.map +1 -1
  91. package/dist/retry-manager.js +128 -82
  92. package/dist/retry-manager.js.map +1 -1
  93. package/dist/security/index.d.ts +3 -0
  94. package/dist/security/index.d.ts.map +1 -0
  95. package/dist/security/index.js +26 -0
  96. package/dist/security/index.js.map +1 -0
  97. package/dist/security/secure-storage.d.ts +61 -0
  98. package/dist/security/secure-storage.d.ts.map +1 -0
  99. package/dist/security/secure-storage.js +418 -0
  100. package/dist/security/secure-storage.js.map +1 -0
  101. package/dist/security/security-manager.d.ts +172 -0
  102. package/dist/security/security-manager.d.ts.map +1 -0
  103. package/dist/security/security-manager.js +417 -0
  104. package/dist/security/security-manager.js.map +1 -0
  105. package/dist/storage/backend-selector.d.ts +96 -0
  106. package/dist/storage/backend-selector.d.ts.map +1 -0
  107. package/dist/storage/backend-selector.js +466 -0
  108. package/dist/storage/backend-selector.js.map +1 -0
  109. package/dist/storage/index.d.ts +7 -0
  110. package/dist/storage/index.d.ts.map +1 -0
  111. package/dist/storage/index.js +30 -0
  112. package/dist/storage/index.js.map +1 -0
  113. package/dist/storage/memory-storage.d.ts +55 -0
  114. package/dist/storage/memory-storage.d.ts.map +1 -0
  115. package/dist/storage/memory-storage.js +106 -0
  116. package/dist/storage/memory-storage.js.map +1 -0
  117. package/dist/storage/postgresql-storage.d.ts +77 -0
  118. package/dist/storage/postgresql-storage.d.ts.map +1 -0
  119. package/dist/storage/postgresql-storage.js +314 -0
  120. package/dist/storage/postgresql-storage.js.map +1 -0
  121. package/dist/storage/redis-cluster-storage.d.ts +88 -0
  122. package/dist/storage/redis-cluster-storage.d.ts.map +1 -0
  123. package/dist/storage/redis-cluster-storage.js +414 -0
  124. package/dist/storage/redis-cluster-storage.js.map +1 -0
  125. package/dist/storage/redis-storage.d.ts +67 -0
  126. package/dist/storage/redis-storage.d.ts.map +1 -0
  127. package/dist/storage/redis-storage.js +236 -0
  128. package/dist/storage/redis-storage.js.map +1 -0
  129. package/dist/storage/types.d.ts +55 -0
  130. package/dist/storage/types.d.ts.map +1 -0
  131. package/dist/storage/types.js +10 -0
  132. package/dist/storage/types.js.map +1 -0
  133. package/dist/types.d.ts +7 -32
  134. package/dist/types.d.ts.map +1 -1
  135. package/dist/types.js +1 -0
  136. package/dist/types.js.map +1 -1
  137. package/package.json +15 -2
@@ -0,0 +1,466 @@
1
+ "use strict";
2
+ /*
3
+ Copyright (c) 2025 Bernier LLC
4
+
5
+ This file is licensed to the client under a limited-use license.
6
+ The client may use and modify this code *only within the scope of the project it was delivered for*.
7
+ Redistribution or use in other products or commercial offerings is not permitted without written consent from Bernier LLC.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.StorageBackendSelector = void 0;
11
+ const memory_storage_1 = require("./memory-storage");
12
+ const redis_storage_1 = require("./redis-storage");
13
+ const postgresql_storage_1 = require("./postgresql-storage");
14
+ const redis_cluster_storage_1 = require("./redis-cluster-storage");
15
+ /**
16
+ * Storage backend selector that implements priority-based fallback logic
17
+ */
18
+ class StorageBackendSelector {
19
+ constructor() {
20
+ this.backendInfo = [];
21
+ this.config = this.getDefaultConfig();
22
+ }
23
+ /**
24
+ * Get the default storage backend configuration with priority order
25
+ */
26
+ getDefaultConfig() {
27
+ return [
28
+ {
29
+ priority: 1,
30
+ type: 'postgresql',
31
+ enabled: true,
32
+ fallbackTo: ['mongodb', 'redis-cluster', 'redis', 'memory']
33
+ },
34
+ {
35
+ priority: 2,
36
+ type: 'mongodb',
37
+ enabled: true,
38
+ fallbackTo: ['redis-cluster', 'redis', 'memory']
39
+ },
40
+ {
41
+ priority: 3,
42
+ type: 'redis-cluster',
43
+ enabled: true,
44
+ fallbackTo: ['redis', 'memory']
45
+ },
46
+ {
47
+ priority: 4,
48
+ type: 'redis',
49
+ enabled: true,
50
+ fallbackTo: ['memory']
51
+ },
52
+ {
53
+ priority: 5,
54
+ type: 'memory',
55
+ enabled: true,
56
+ fallbackTo: []
57
+ }
58
+ ];
59
+ }
60
+ /**
61
+ * Detect environment variables for each backend type
62
+ */
63
+ detectEnvironmentVariables() {
64
+ // PostgreSQL detection
65
+ const postgresqlConfig = this.config.find(c => c.type === 'postgresql');
66
+ if (postgresqlConfig) {
67
+ const envVars = ['DATABASE_URL', 'POSTGRES_URL', 'POSTGRES_CONNECTION_STRING'];
68
+ for (const envVar of envVars) {
69
+ if (process.env[envVar]) {
70
+ postgresqlConfig.connectionString = process.env[envVar];
71
+ break;
72
+ }
73
+ }
74
+ }
75
+ // MongoDB detection
76
+ const mongodbConfig = this.config.find(c => c.type === 'mongodb');
77
+ if (mongodbConfig) {
78
+ const envVars = ['MONGODB_URL', 'MONGO_URL', 'MONGODB_CONNECTION_STRING'];
79
+ for (const envVar of envVars) {
80
+ if (process.env[envVar]) {
81
+ mongodbConfig.connectionString = process.env[envVar];
82
+ break;
83
+ }
84
+ }
85
+ }
86
+ // Redis Cluster detection
87
+ const redisClusterConfig = this.config.find(c => c.type === 'redis-cluster');
88
+ if (redisClusterConfig) {
89
+ const envVars = ['REDIS_CLUSTER_URL', 'REDIS_CLUSTER_NODES'];
90
+ for (const envVar of envVars) {
91
+ if (process.env[envVar]) {
92
+ redisClusterConfig.connectionString = process.env[envVar];
93
+ break;
94
+ }
95
+ }
96
+ }
97
+ // Redis detection
98
+ const redisConfig = this.config.find(c => c.type === 'redis');
99
+ if (redisConfig) {
100
+ const envVars = ['REDIS_URL', 'REDIS_CONNECTION_STRING'];
101
+ for (const envVar of envVars) {
102
+ if (process.env[envVar]) {
103
+ redisConfig.connectionString = process.env[envVar];
104
+ break;
105
+ }
106
+ }
107
+ }
108
+ // Handle manual overrides
109
+ this.handleManualOverrides();
110
+ }
111
+ /**
112
+ * Handle manual override environment variables
113
+ */
114
+ handleManualOverrides() {
115
+ // Force specific storage type
116
+ if (process.env.BACKOFF_RETRY_STORAGE_TYPE) {
117
+ const forcedType = process.env.BACKOFF_RETRY_STORAGE_TYPE;
118
+ this.config.forEach(config => {
119
+ config.enabled = config.type === forcedType;
120
+ });
121
+ }
122
+ // Override priority order
123
+ if (process.env.BACKOFF_RETRY_STORAGE_PRIORITY) {
124
+ const priorityOrder = process.env.BACKOFF_RETRY_STORAGE_PRIORITY.split(',');
125
+ // First, set priorities for mentioned types
126
+ priorityOrder.forEach((type, index) => {
127
+ const config = this.config.find(c => c.type === type.trim());
128
+ if (config) {
129
+ config.priority = index + 1;
130
+ }
131
+ });
132
+ // Then, set lower priorities for types not mentioned
133
+ const mentionedTypes = priorityOrder.map(t => t.trim());
134
+ let nextPriority = priorityOrder.length + 1;
135
+ this.config.forEach(config => {
136
+ if (!mentionedTypes.includes(config.type)) {
137
+ config.priority = nextPriority++;
138
+ }
139
+ });
140
+ }
141
+ // Disable specific backends
142
+ if (process.env.BACKOFF_RETRY_STORAGE_DISABLE) {
143
+ const disabledTypes = process.env.BACKOFF_RETRY_STORAGE_DISABLE.split(',');
144
+ disabledTypes.forEach(type => {
145
+ const config = this.config.find(c => c.type === type.trim());
146
+ if (config) {
147
+ config.enabled = false;
148
+ }
149
+ });
150
+ }
151
+ }
152
+ /**
153
+ * Test connection to a storage backend
154
+ */
155
+ async testConnection(backend) {
156
+ const startTime = Date.now();
157
+ try {
158
+ switch (backend.type) {
159
+ case 'postgresql':
160
+ return await this.testPostgreSQLConnection(backend);
161
+ case 'mongodb':
162
+ return await this.testMongoDBConnection(backend);
163
+ case 'redis-cluster':
164
+ return await this.testRedisClusterConnection(backend);
165
+ case 'redis':
166
+ return await this.testRedisConnection(backend);
167
+ case 'memory':
168
+ return await this.testMemoryConnection(backend);
169
+ default:
170
+ return {
171
+ success: false,
172
+ error: `Unknown backend type: ${backend.type}`
173
+ };
174
+ }
175
+ }
176
+ catch (error) {
177
+ return {
178
+ success: false,
179
+ error: error instanceof Error ? error.message : 'Unknown error',
180
+ latency: Date.now() - startTime
181
+ };
182
+ }
183
+ }
184
+ /**
185
+ * Test PostgreSQL connection
186
+ */
187
+ async testPostgreSQLConnection(backend) {
188
+ if (!backend.connectionString) {
189
+ return {
190
+ success: false,
191
+ error: 'No PostgreSQL connection string provided'
192
+ };
193
+ }
194
+ try {
195
+ // Validate the connection string format
196
+ const isValidUrl = backend.connectionString.startsWith('postgresql://') ||
197
+ backend.connectionString.startsWith('postgres://');
198
+ if (!isValidUrl) {
199
+ return {
200
+ success: false,
201
+ error: 'Invalid PostgreSQL connection string format'
202
+ };
203
+ }
204
+ // Test actual connection by creating a temporary storage instance
205
+ const tempStorage = new postgresql_storage_1.PostgreSQLStorage(backend.connectionString, backend.options);
206
+ const isConnected = await tempStorage.testConnection();
207
+ await tempStorage.close();
208
+ if (!isConnected) {
209
+ return {
210
+ success: false,
211
+ error: 'Failed to connect to PostgreSQL database'
212
+ };
213
+ }
214
+ return {
215
+ success: true,
216
+ latency: 0,
217
+ capabilities: ['persistent', 'acid', 'transactions', 'advanced-querying', 'jsonb', 'indexing']
218
+ };
219
+ }
220
+ catch (error) {
221
+ return {
222
+ success: false,
223
+ error: error instanceof Error ? error.message : 'PostgreSQL connection test failed'
224
+ };
225
+ }
226
+ }
227
+ /**
228
+ * Test MongoDB connection
229
+ */
230
+ async testMongoDBConnection(backend) {
231
+ if (!backend.connectionString) {
232
+ return {
233
+ success: false,
234
+ error: 'No MongoDB connection string provided'
235
+ };
236
+ }
237
+ try {
238
+ // Validate connection string format
239
+ const isValidUrl = backend.connectionString.startsWith('mongodb://') ||
240
+ backend.connectionString.startsWith('mongodb+srv://');
241
+ if (!isValidUrl) {
242
+ return {
243
+ success: false,
244
+ error: 'Invalid MongoDB connection string format'
245
+ };
246
+ }
247
+ return {
248
+ success: true,
249
+ latency: 0,
250
+ capabilities: ['persistent', 'flexible-schema', 'horizontal-scaling', 'aggregation']
251
+ };
252
+ }
253
+ catch (error) {
254
+ return {
255
+ success: false,
256
+ error: error instanceof Error ? error.message : 'MongoDB connection test failed'
257
+ };
258
+ }
259
+ }
260
+ /**
261
+ * Test Redis Cluster connection
262
+ */
263
+ async testRedisClusterConnection(backend) {
264
+ if (!backend.connectionString) {
265
+ return {
266
+ success: false,
267
+ error: 'No Redis Cluster connection string provided'
268
+ };
269
+ }
270
+ try {
271
+ // Validate connection string format
272
+ const isValidUrl = backend.connectionString.startsWith('redis://') ||
273
+ backend.connectionString.startsWith('rediss://');
274
+ if (!isValidUrl) {
275
+ return {
276
+ success: false,
277
+ error: 'Invalid Redis Cluster connection string format'
278
+ };
279
+ }
280
+ // Test actual connection by creating a temporary storage instance
281
+ const tempStorage = new redis_cluster_storage_1.RedisClusterStorage(backend.connectionString, backend.options);
282
+ const isConnected = await tempStorage.testConnection();
283
+ await tempStorage.close();
284
+ if (!isConnected) {
285
+ return {
286
+ success: false,
287
+ error: 'Failed to connect to Redis Cluster'
288
+ };
289
+ }
290
+ return {
291
+ success: true,
292
+ latency: 0,
293
+ capabilities: ['persistent', 'high-availability', 'distributed', 'fast-access', 'auto-failover', 'load-balancing']
294
+ };
295
+ }
296
+ catch (error) {
297
+ return {
298
+ success: false,
299
+ error: error instanceof Error ? error.message : 'Redis Cluster connection test failed'
300
+ };
301
+ }
302
+ }
303
+ /**
304
+ * Test Redis connection
305
+ */
306
+ async testRedisConnection(backend) {
307
+ if (!backend.connectionString) {
308
+ return {
309
+ success: false,
310
+ error: 'No Redis connection string provided'
311
+ };
312
+ }
313
+ try {
314
+ // Validate connection string format
315
+ const isValidUrl = backend.connectionString.startsWith('redis://') ||
316
+ backend.connectionString.startsWith('rediss://');
317
+ if (!isValidUrl) {
318
+ return {
319
+ success: false,
320
+ error: 'Invalid Redis connection string format'
321
+ };
322
+ }
323
+ return {
324
+ success: true,
325
+ latency: 0,
326
+ capabilities: ['persistent', 'fast-access', 'simple-setup']
327
+ };
328
+ }
329
+ catch (error) {
330
+ return {
331
+ success: false,
332
+ error: error instanceof Error ? error.message : 'Redis connection test failed'
333
+ };
334
+ }
335
+ }
336
+ /**
337
+ * Test Memory connection (always available)
338
+ */
339
+ async testMemoryConnection(backend) {
340
+ return {
341
+ success: true,
342
+ latency: 0,
343
+ capabilities: ['fast-access', 'simple-setup', 'no-persistence']
344
+ };
345
+ }
346
+ /**
347
+ * Select the best available storage backend
348
+ */
349
+ async selectBackend() {
350
+ // Detect environment variables
351
+ this.detectEnvironmentVariables();
352
+ // Sort by priority (lowest number = highest priority)
353
+ const sortedConfig = this.config.sort((a, b) => a.priority - b.priority);
354
+ // Test each backend in priority order
355
+ for (const backend of sortedConfig) {
356
+ if (!backend.enabled) {
357
+ this.backendInfo.push({
358
+ type: backend.type,
359
+ priority: backend.priority,
360
+ available: false,
361
+ connectionString: backend.connectionString,
362
+ testResult: {
363
+ success: false,
364
+ error: 'Backend disabled'
365
+ }
366
+ });
367
+ continue;
368
+ }
369
+ const testResult = await this.testConnection(backend);
370
+ this.backendInfo.push({
371
+ type: backend.type,
372
+ priority: backend.priority,
373
+ available: testResult.success,
374
+ connectionString: backend.connectionString,
375
+ testResult
376
+ });
377
+ if (testResult.success) {
378
+ const createdBackend = await this.createBackend(backend);
379
+ if (createdBackend) {
380
+ this.selectedBackend = createdBackend;
381
+ return this.selectedBackend;
382
+ }
383
+ else {
384
+ // Backend test passed but creation failed (not implemented)
385
+ this.backendInfo[this.backendInfo.length - 1].available = false;
386
+ this.backendInfo[this.backendInfo.length - 1].testResult = {
387
+ success: false,
388
+ error: `${backend.type} storage not yet implemented`
389
+ };
390
+ }
391
+ }
392
+ }
393
+ // If no backend is available, create memory backend as fallback
394
+ this.selectedBackend = new memory_storage_1.MemoryStorage();
395
+ return this.selectedBackend;
396
+ }
397
+ /**
398
+ * Create a storage backend instance
399
+ */
400
+ async createBackend(backend) {
401
+ switch (backend.type) {
402
+ case 'postgresql':
403
+ if (!backend.connectionString) {
404
+ throw new Error('PostgreSQL connection string required');
405
+ }
406
+ return new postgresql_storage_1.PostgreSQLStorage(backend.connectionString, backend.options);
407
+ case 'mongodb':
408
+ // TODO: Implement MongoDB storage
409
+ // For now, return null to indicate this backend is not available
410
+ return null;
411
+ case 'redis-cluster':
412
+ if (!backend.connectionString) {
413
+ throw new Error('Redis Cluster connection string required');
414
+ }
415
+ return new redis_cluster_storage_1.RedisClusterStorage(backend.connectionString, backend.options);
416
+ case 'redis':
417
+ if (!backend.connectionString) {
418
+ throw new Error('Redis connection string required');
419
+ }
420
+ return new redis_storage_1.RedisStorage(backend.connectionString, backend.options);
421
+ case 'memory':
422
+ return new memory_storage_1.MemoryStorage();
423
+ default:
424
+ throw new Error(`Unknown backend type: ${backend.type}`);
425
+ }
426
+ }
427
+ /**
428
+ * Get information about all tested backends
429
+ */
430
+ getBackendInfo() {
431
+ return this.backendInfo;
432
+ }
433
+ /**
434
+ * Get the currently selected backend
435
+ */
436
+ getSelectedBackend() {
437
+ return this.selectedBackend;
438
+ }
439
+ /**
440
+ * Get the configuration for all backends
441
+ */
442
+ getConfig() {
443
+ return this.config;
444
+ }
445
+ /**
446
+ * Update the configuration for a specific backend
447
+ */
448
+ updateConfig(type, updates) {
449
+ const config = this.config.find(c => c.type === type);
450
+ if (config) {
451
+ Object.assign(config, updates);
452
+ }
453
+ }
454
+ /**
455
+ * Cleanup resources and close connections
456
+ */
457
+ async cleanup() {
458
+ if (this.selectedBackend) {
459
+ await this.selectedBackend.close();
460
+ this.selectedBackend = undefined;
461
+ }
462
+ this.backendInfo = [];
463
+ }
464
+ }
465
+ exports.StorageBackendSelector = StorageBackendSelector;
466
+ //# sourceMappingURL=backend-selector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend-selector.js","sourceRoot":"","sources":["../../src/storage/backend-selector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export * from './memory-storage';
2
+ export * from './redis-storage';
3
+ export * from './postgresql-storage';
4
+ export * from './redis-cluster-storage';
5
+ export * from './backend-selector';
6
+ export * from './types';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAQA,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,SAAS,CAAC"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ /*
3
+ Copyright (c) 2025 Bernier LLC
4
+
5
+ This file is licensed to the client under a limited-use license.
6
+ The client may use and modify this code *only within the scope of the project it was delivered for*.
7
+ Redistribution or use in other products or commercial offerings is not permitted without written consent from Bernier LLC.
8
+ */
9
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ var desc = Object.getOwnPropertyDescriptor(m, k);
12
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
+ desc = { enumerable: true, get: function() { return m[k]; } };
14
+ }
15
+ Object.defineProperty(o, k2, desc);
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
21
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
22
+ };
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ __exportStar(require("./memory-storage"), exports);
25
+ __exportStar(require("./redis-storage"), exports);
26
+ __exportStar(require("./postgresql-storage"), exports);
27
+ __exportStar(require("./redis-cluster-storage"), exports);
28
+ __exportStar(require("./backend-selector"), exports);
29
+ __exportStar(require("./types"), exports);
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":";AAAA;;;;;;EAME;;;;;;;;;;;;;;;;AAEF,mDAAiC;AACjC,kDAAgC;AAChC,uDAAqC;AACrC,0DAAwC;AACxC,qDAAmC;AACnC,0CAAwB"}
@@ -0,0 +1,55 @@
1
+ import { RetryState } from '../types';
2
+ import { StorageBackend, StorageStats } from './types';
3
+ /**
4
+ * In-memory storage backend for retry states
5
+ */
6
+ export declare class MemoryStorage implements StorageBackend {
7
+ private storage;
8
+ private lastAccess;
9
+ private lastWrite;
10
+ /**
11
+ * Store a retry state
12
+ */
13
+ set(key: string, value: RetryState): Promise<void>;
14
+ /**
15
+ * Get a retry state
16
+ */
17
+ get(key: string): Promise<RetryState | null>;
18
+ /**
19
+ * Delete a retry state
20
+ */
21
+ delete(key: string): Promise<void>;
22
+ /**
23
+ * List all retry states
24
+ */
25
+ list(): Promise<RetryState[]>;
26
+ /**
27
+ * Clear all retry states
28
+ */
29
+ clear(): Promise<void>;
30
+ /**
31
+ * Get storage statistics
32
+ */
33
+ getStats(): Promise<StorageStats>;
34
+ /**
35
+ * Test the connection (always true for memory storage)
36
+ */
37
+ testConnection(): Promise<boolean>;
38
+ /**
39
+ * Close the connection (no-op for memory storage)
40
+ */
41
+ close(): Promise<void>;
42
+ /**
43
+ * Get the underlying Map for direct access (use with caution)
44
+ */
45
+ getStorageMap(): Map<string, RetryState>;
46
+ /**
47
+ * Get the number of stored items
48
+ */
49
+ getSize(): number;
50
+ /**
51
+ * Check if a key exists
52
+ */
53
+ has(key: string): boolean;
54
+ }
55
+ //# sourceMappingURL=memory-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-storage.d.ts","sourceRoot":"","sources":["../../src/storage/memory-storage.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvD;;GAEG;AACH,qBAAa,aAAc,YAAW,cAAc;IAClD,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,SAAS,CAAoB;IAErC;;OAEG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxD;;OAEG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAKlD;;OAEG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAKnC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,YAAY,CAAC;IAmBvC;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAIxC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;OAEG;IACH,aAAa,IAAI,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC;IAIxC;;OAEG;IACH,OAAO,IAAI,MAAM;IAIjB;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;CAG1B"}