@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,414 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
22
+ }) : function(o, v) {
23
+ o["default"] = v;
24
+ });
25
+ var __importStar = (this && this.__importStar) || (function () {
26
+ var ownKeys = function(o) {
27
+ ownKeys = Object.getOwnPropertyNames || function (o) {
28
+ var ar = [];
29
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
30
+ return ar;
31
+ };
32
+ return ownKeys(o);
33
+ };
34
+ return function (mod) {
35
+ if (mod && mod.__esModule) return mod;
36
+ var result = {};
37
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
38
+ __setModuleDefault(result, mod);
39
+ return result;
40
+ };
41
+ })();
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.RedisClusterStorage = void 0;
44
+ /**
45
+ * Redis Cluster storage backend for retry states
46
+ */
47
+ class RedisClusterStorage {
48
+ constructor(connectionString, options = {}) {
49
+ this.lastAccess = new Date();
50
+ this.lastWrite = new Date();
51
+ this.isInitialized = false;
52
+ this.connectionString = connectionString;
53
+ this.options = options;
54
+ this.prefix = options.prefix || 'backoff-retry:';
55
+ }
56
+ /**
57
+ * Initialize the Redis Cluster client
58
+ */
59
+ async initializeClient() {
60
+ if (this.isInitialized)
61
+ return;
62
+ try {
63
+ // Dynamic import to avoid requiring ioredis package if not used
64
+ const Redis = await Promise.resolve().then(() => __importStar(require('ioredis')));
65
+ this.cluster = new Redis.Cluster(this.parseClusterNodes(this.connectionString), {
66
+ redisOptions: {
67
+ ...this.options,
68
+ lazyConnect: true,
69
+ maxRetriesPerRequest: 3,
70
+ enableReadyCheck: true,
71
+ },
72
+ clusterRetryStrategy: (times) => {
73
+ const delay = Math.min(times * 50, 2000);
74
+ return delay;
75
+ },
76
+ enableOfflineQueue: false,
77
+ maxRedirections: 16,
78
+ retryDelayOnFailover: 100,
79
+ ...this.options
80
+ });
81
+ await this.cluster.connect();
82
+ this.isInitialized = true;
83
+ }
84
+ catch (error) {
85
+ throw new Error(`Failed to connect to Redis Cluster: ${error instanceof Error ? error.message : 'Unknown error'}`);
86
+ }
87
+ }
88
+ /**
89
+ * Parse cluster nodes from connection string
90
+ */
91
+ parseClusterNodes(connectionString) {
92
+ if (connectionString.includes(',')) {
93
+ // Multiple nodes: redis://node1:6379,redis://node2:6379
94
+ return connectionString.split(',').map(node => node.trim());
95
+ }
96
+ else {
97
+ // Single node: redis://cluster-node:6379
98
+ return [connectionString];
99
+ }
100
+ }
101
+ /**
102
+ * Get the full key name with prefix
103
+ */
104
+ getFullKey(key) {
105
+ return `${this.prefix}${key}`;
106
+ }
107
+ /**
108
+ * Store a retry state
109
+ */
110
+ async set(key, value) {
111
+ await this.initializeClient();
112
+ const fullKey = this.getFullKey(key);
113
+ const serializedValue = JSON.stringify(value);
114
+ await this.cluster.set(fullKey, serializedValue);
115
+ this.lastWrite = new Date();
116
+ }
117
+ /**
118
+ * Get a retry state
119
+ */
120
+ async get(key) {
121
+ await this.initializeClient();
122
+ const fullKey = this.getFullKey(key);
123
+ const value = await this.cluster.get(fullKey);
124
+ this.lastAccess = new Date();
125
+ if (!value)
126
+ return null;
127
+ try {
128
+ return JSON.parse(value);
129
+ }
130
+ catch (error) {
131
+ throw new Error(`Failed to parse retry state from Redis Cluster: ${error instanceof Error ? error.message : 'Unknown error'}`);
132
+ }
133
+ }
134
+ /**
135
+ * Delete a retry state
136
+ */
137
+ async delete(key) {
138
+ await this.initializeClient();
139
+ const fullKey = this.getFullKey(key);
140
+ await this.cluster.del(fullKey);
141
+ this.lastWrite = new Date();
142
+ }
143
+ /**
144
+ * List all retry states
145
+ */
146
+ async list() {
147
+ await this.initializeClient();
148
+ const pattern = `${this.prefix}*`;
149
+ const keys = await this.cluster.keys(pattern);
150
+ this.lastAccess = new Date();
151
+ if (keys.length === 0)
152
+ return [];
153
+ const values = await Promise.all(keys.map(async (key) => {
154
+ const value = await this.cluster.get(key);
155
+ if (!value)
156
+ return null;
157
+ try {
158
+ return JSON.parse(value);
159
+ }
160
+ catch {
161
+ return null;
162
+ }
163
+ }));
164
+ return values.filter((value) => value !== null);
165
+ }
166
+ /**
167
+ * Clear all retry states
168
+ */
169
+ async clear() {
170
+ await this.initializeClient();
171
+ const pattern = `${this.prefix}*`;
172
+ const keys = await this.cluster.keys(pattern);
173
+ if (keys.length > 0) {
174
+ // Delete keys in batches to avoid overwhelming the cluster
175
+ const batchSize = 100;
176
+ for (let i = 0; i < keys.length; i += batchSize) {
177
+ const batch = keys.slice(i, i + batchSize);
178
+ await this.cluster.del(...batch);
179
+ }
180
+ }
181
+ this.lastWrite = new Date();
182
+ }
183
+ /**
184
+ * Get storage statistics
185
+ */
186
+ async getStats() {
187
+ await this.initializeClient();
188
+ const pattern = `${this.prefix}*`;
189
+ const keys = await this.cluster.keys(pattern);
190
+ if (keys.length === 0) {
191
+ return {
192
+ totalKeys: 0,
193
+ totalSize: 0,
194
+ averageKeySize: 0,
195
+ lastAccess: this.lastAccess,
196
+ lastWrite: this.lastWrite
197
+ };
198
+ }
199
+ // Get values for size calculation
200
+ const values = await Promise.all(keys.map(async (key) => {
201
+ const value = await this.cluster.get(key);
202
+ return value ? value.length : 0;
203
+ }));
204
+ const totalSize = values.reduce((sum, size) => sum + size, 0);
205
+ return {
206
+ totalKeys: keys.length,
207
+ totalSize,
208
+ averageKeySize: keys.length > 0 ? totalSize / keys.length : 0,
209
+ oldestKey: keys.length > 0 ? keys[0] : undefined,
210
+ newestKey: keys.length > 0 ? keys[keys.length - 1] : undefined,
211
+ lastAccess: this.lastAccess,
212
+ lastWrite: this.lastWrite
213
+ };
214
+ }
215
+ /**
216
+ * Test the connection
217
+ */
218
+ async testConnection() {
219
+ try {
220
+ await this.initializeClient();
221
+ await this.cluster.ping();
222
+ return true;
223
+ }
224
+ catch {
225
+ return false;
226
+ }
227
+ }
228
+ /**
229
+ * Close the connection
230
+ */
231
+ async close() {
232
+ if (this.cluster) {
233
+ await this.cluster.quit();
234
+ this.cluster = null;
235
+ this.isInitialized = false;
236
+ }
237
+ }
238
+ /**
239
+ * Get cluster information
240
+ */
241
+ async getClusterInfo() {
242
+ await this.initializeClient();
243
+ try {
244
+ const info = await this.cluster.info();
245
+ const nodes = await this.cluster.nodes();
246
+ const slots = await this.cluster.slots();
247
+ return {
248
+ info,
249
+ nodes: nodes.map((node) => ({
250
+ id: node.id,
251
+ host: node.host,
252
+ port: node.port,
253
+ flags: node.flags,
254
+ pingSent: node.pingSent,
255
+ pongRecv: node.pongRecv,
256
+ configEpoch: node.configEpoch,
257
+ linkState: node.linkState,
258
+ slots: node.slots
259
+ })),
260
+ slots,
261
+ totalNodes: nodes.length,
262
+ masterNodes: nodes.filter((node) => node.flags.includes('master')).length,
263
+ slaveNodes: nodes.filter((node) => node.flags.includes('slave')).length
264
+ };
265
+ }
266
+ catch (error) {
267
+ return { error: error instanceof Error ? error.message : 'Unknown error' };
268
+ }
269
+ }
270
+ /**
271
+ * Set expiration for a key
272
+ */
273
+ async setExpiration(key, seconds) {
274
+ await this.initializeClient();
275
+ const fullKey = this.getFullKey(key);
276
+ await this.cluster.expire(fullKey, seconds);
277
+ }
278
+ /**
279
+ * Get time to live for a key
280
+ */
281
+ async getTTL(key) {
282
+ await this.initializeClient();
283
+ const fullKey = this.getFullKey(key);
284
+ return await this.cluster.ttl(fullKey);
285
+ }
286
+ /**
287
+ * Get retry states with pagination
288
+ */
289
+ async listPaginated(limit = 100, offset = 0) {
290
+ await this.initializeClient();
291
+ const pattern = `${this.prefix}*`;
292
+ const keys = await this.cluster.keys(pattern);
293
+ // Sort keys for consistent pagination
294
+ keys.sort();
295
+ const paginatedKeys = keys.slice(offset, offset + limit);
296
+ if (paginatedKeys.length === 0)
297
+ return [];
298
+ const values = await Promise.all(paginatedKeys.map(async (key) => {
299
+ const value = await this.cluster.get(key);
300
+ if (!value)
301
+ return null;
302
+ try {
303
+ return JSON.parse(value);
304
+ }
305
+ catch {
306
+ return null;
307
+ }
308
+ }));
309
+ this.lastAccess = new Date();
310
+ return values.filter((value) => value !== null);
311
+ }
312
+ /**
313
+ * Get retry states by status using SCAN
314
+ */
315
+ async listByStatus(status) {
316
+ await this.initializeClient();
317
+ const pattern = `${this.prefix}*`;
318
+ const retryStates = [];
319
+ let cursor = '0';
320
+ do {
321
+ const [newCursor, keys] = await this.cluster.scan(cursor, 'MATCH', pattern, 'COUNT', '100');
322
+ cursor = newCursor;
323
+ if (keys.length > 0) {
324
+ const values = await Promise.all(keys.map(async (key) => {
325
+ const value = await this.cluster.get(key);
326
+ if (!value)
327
+ return null;
328
+ try {
329
+ const parsed = JSON.parse(value);
330
+ return parsed.status === status ? parsed : null;
331
+ }
332
+ catch {
333
+ return null;
334
+ }
335
+ }));
336
+ retryStates.push(...values.filter((value) => value !== null));
337
+ }
338
+ } while (cursor !== '0');
339
+ this.lastAccess = new Date();
340
+ return retryStates;
341
+ }
342
+ /**
343
+ * Clean up old retry states using SCAN
344
+ */
345
+ async cleanupOldStates(maxAgeHours = 24) {
346
+ await this.initializeClient();
347
+ const pattern = `${this.prefix}*`;
348
+ const cutoffTime = Date.now() - (maxAgeHours * 60 * 60 * 1000);
349
+ let deletedCount = 0;
350
+ let cursor = '0';
351
+ do {
352
+ const [newCursor, keys] = await this.cluster.scan(cursor, 'MATCH', pattern, 'COUNT', '100');
353
+ cursor = newCursor;
354
+ if (keys.length > 0) {
355
+ const keysToDelete = [];
356
+ for (const key of keys) {
357
+ const value = await this.cluster.get(key);
358
+ if (!value)
359
+ continue;
360
+ try {
361
+ const parsed = JSON.parse(value);
362
+ const lastAttempt = parsed.lastAttempt ? new Date(parsed.lastAttempt).getTime() : 0;
363
+ if (lastAttempt < cutoffTime) {
364
+ keysToDelete.push(key);
365
+ }
366
+ }
367
+ catch {
368
+ // Invalid JSON, delete it
369
+ keysToDelete.push(key);
370
+ }
371
+ }
372
+ if (keysToDelete.length > 0) {
373
+ await this.cluster.del(...keysToDelete);
374
+ deletedCount += keysToDelete.length;
375
+ }
376
+ }
377
+ } while (cursor !== '0');
378
+ this.lastWrite = new Date();
379
+ return deletedCount;
380
+ }
381
+ /**
382
+ * Get cluster health status
383
+ */
384
+ async getClusterHealth() {
385
+ await this.initializeClient();
386
+ try {
387
+ const nodes = await this.cluster.nodes();
388
+ const masters = nodes.filter((node) => node.flags.includes('master'));
389
+ const slaves = nodes.filter((node) => node.flags.includes('slave'));
390
+ return {
391
+ totalNodes: nodes.length,
392
+ masterNodes: masters.length,
393
+ slaveNodes: slaves.length,
394
+ healthy: masters.length > 0 && slaves.length >= masters.length,
395
+ replicationFactor: slaves.length / Math.max(masters.length, 1),
396
+ nodes: nodes.map((node) => ({
397
+ id: node.id,
398
+ role: node.flags.includes('master') ? 'master' : 'slave',
399
+ host: node.host,
400
+ port: node.port,
401
+ connected: node.linkState === 'connected'
402
+ }))
403
+ };
404
+ }
405
+ catch (error) {
406
+ return {
407
+ error: error instanceof Error ? error.message : 'Unknown error',
408
+ healthy: false
409
+ };
410
+ }
411
+ }
412
+ }
413
+ exports.RedisClusterStorage = RedisClusterStorage;
414
+ //# sourceMappingURL=redis-cluster-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis-cluster-storage.js","sourceRoot":"","sources":["../../src/storage/redis-cluster-storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import { RetryState } from '../types';
2
+ import { StorageBackend, StorageStats } from './types';
3
+ /**
4
+ * Redis storage backend for retry states
5
+ */
6
+ export declare class RedisStorage implements StorageBackend {
7
+ private client;
8
+ private connectionString;
9
+ private options;
10
+ private prefix;
11
+ private lastAccess;
12
+ private lastWrite;
13
+ constructor(connectionString: string, options?: Record<string, any>);
14
+ /**
15
+ * Initialize the Redis client
16
+ */
17
+ private initializeClient;
18
+ /**
19
+ * Get the full key name with prefix
20
+ */
21
+ private getFullKey;
22
+ /**
23
+ * Store a retry state
24
+ */
25
+ set(key: string, value: RetryState): Promise<void>;
26
+ /**
27
+ * Get a retry state
28
+ */
29
+ get(key: string): Promise<RetryState | null>;
30
+ /**
31
+ * Delete a retry state
32
+ */
33
+ delete(key: string): Promise<void>;
34
+ /**
35
+ * List all retry states
36
+ */
37
+ list(): Promise<RetryState[]>;
38
+ /**
39
+ * Clear all retry states
40
+ */
41
+ clear(): Promise<void>;
42
+ /**
43
+ * Get storage statistics
44
+ */
45
+ getStats(): Promise<StorageStats>;
46
+ /**
47
+ * Test the connection
48
+ */
49
+ testConnection(): Promise<boolean>;
50
+ /**
51
+ * Close the connection
52
+ */
53
+ close(): Promise<void>;
54
+ /**
55
+ * Get Redis client info
56
+ */
57
+ getClientInfo(): Promise<Record<string, any>>;
58
+ /**
59
+ * Set expiration for a key
60
+ */
61
+ setExpiration(key: string, seconds: number): Promise<void>;
62
+ /**
63
+ * Get time to live for a key
64
+ */
65
+ getTTL(key: string): Promise<number>;
66
+ }
67
+ //# sourceMappingURL=redis-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis-storage.d.ts","sourceRoot":"","sources":["../../src/storage/redis-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,YAAa,YAAW,cAAc;IACjD,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,SAAS,CAAoB;gBAEzB,gBAAgB,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM;IAMvE;;OAEG;YACW,gBAAgB;IAkB9B;;OAEG;IACH,OAAO,CAAC,UAAU;IAIlB;;OAEG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAUxD;;OAEG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAiBlD;;OAEG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IA0BnC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAa5B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,YAAY,CAAC;IAqCvC;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAUxC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAWnD;;OAEG;IACG,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOhE;;OAEG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAM3C"}