@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,106 @@
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.MemoryStorage = void 0;
11
+ /**
12
+ * In-memory storage backend for retry states
13
+ */
14
+ class MemoryStorage {
15
+ constructor() {
16
+ this.storage = new Map();
17
+ this.lastAccess = new Date();
18
+ this.lastWrite = new Date();
19
+ }
20
+ /**
21
+ * Store a retry state
22
+ */
23
+ async set(key, value) {
24
+ this.storage.set(key, value);
25
+ this.lastWrite = new Date();
26
+ }
27
+ /**
28
+ * Get a retry state
29
+ */
30
+ async get(key) {
31
+ this.lastAccess = new Date();
32
+ return this.storage.get(key) || null;
33
+ }
34
+ /**
35
+ * Delete a retry state
36
+ */
37
+ async delete(key) {
38
+ this.storage.delete(key);
39
+ this.lastWrite = new Date();
40
+ }
41
+ /**
42
+ * List all retry states
43
+ */
44
+ async list() {
45
+ this.lastAccess = new Date();
46
+ return Array.from(this.storage.values());
47
+ }
48
+ /**
49
+ * Clear all retry states
50
+ */
51
+ async clear() {
52
+ this.storage.clear();
53
+ this.lastWrite = new Date();
54
+ }
55
+ /**
56
+ * Get storage statistics
57
+ */
58
+ async getStats() {
59
+ const keys = Array.from(this.storage.keys());
60
+ const values = Array.from(this.storage.values());
61
+ const totalSize = values.reduce((size, value) => {
62
+ return size + JSON.stringify(value).length;
63
+ }, 0);
64
+ return {
65
+ totalKeys: keys.length,
66
+ totalSize,
67
+ averageKeySize: keys.length > 0 ? totalSize / keys.length : 0,
68
+ oldestKey: keys.length > 0 ? keys[0] : undefined,
69
+ newestKey: keys.length > 0 ? keys[keys.length - 1] : undefined,
70
+ lastAccess: this.lastAccess,
71
+ lastWrite: this.lastWrite
72
+ };
73
+ }
74
+ /**
75
+ * Test the connection (always true for memory storage)
76
+ */
77
+ async testConnection() {
78
+ return true;
79
+ }
80
+ /**
81
+ * Close the connection (no-op for memory storage)
82
+ */
83
+ async close() {
84
+ // No cleanup needed for memory storage
85
+ }
86
+ /**
87
+ * Get the underlying Map for direct access (use with caution)
88
+ */
89
+ getStorageMap() {
90
+ return this.storage;
91
+ }
92
+ /**
93
+ * Get the number of stored items
94
+ */
95
+ getSize() {
96
+ return this.storage.size;
97
+ }
98
+ /**
99
+ * Check if a key exists
100
+ */
101
+ has(key) {
102
+ return this.storage.has(key);
103
+ }
104
+ }
105
+ exports.MemoryStorage = MemoryStorage;
106
+ //# sourceMappingURL=memory-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-storage.js","sourceRoot":"","sources":["../../src/storage/memory-storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ import { RetryState } from '../types';
2
+ import { StorageBackend, StorageStats } from './types';
3
+ /**
4
+ * PostgreSQL storage backend for retry states
5
+ */
6
+ export declare class PostgreSQLStorage implements StorageBackend {
7
+ private client;
8
+ private pool;
9
+ private connectionString;
10
+ private options;
11
+ private tableName;
12
+ private lastAccess;
13
+ private lastWrite;
14
+ private isInitialized;
15
+ constructor(connectionString: string, options?: Record<string, any>);
16
+ /**
17
+ * Initialize the PostgreSQL client and create table if needed
18
+ */
19
+ private initializeClient;
20
+ /**
21
+ * Create the retry_states table if it doesn't exist
22
+ */
23
+ private createTableIfNotExists;
24
+ /**
25
+ * Store a retry state
26
+ */
27
+ set(key: string, value: RetryState): Promise<void>;
28
+ /**
29
+ * Get a retry state
30
+ */
31
+ get(key: string): Promise<RetryState | null>;
32
+ /**
33
+ * Delete a retry state
34
+ */
35
+ delete(key: string): Promise<void>;
36
+ /**
37
+ * List all retry states
38
+ */
39
+ list(): Promise<RetryState[]>;
40
+ /**
41
+ * Clear all retry states
42
+ */
43
+ clear(): Promise<void>;
44
+ /**
45
+ * Get storage statistics
46
+ */
47
+ getStats(): Promise<StorageStats>;
48
+ /**
49
+ * Test the connection
50
+ */
51
+ testConnection(): Promise<boolean>;
52
+ /**
53
+ * Close the connection
54
+ */
55
+ close(): Promise<void>;
56
+ /**
57
+ * Get PostgreSQL server info
58
+ */
59
+ getServerInfo(): Promise<Record<string, any>>;
60
+ /**
61
+ * Execute a transaction
62
+ */
63
+ executeTransaction<T>(callback: (client: any) => Promise<T>): Promise<T>;
64
+ /**
65
+ * Get retry states with pagination
66
+ */
67
+ listPaginated(limit?: number, offset?: number): Promise<RetryState[]>;
68
+ /**
69
+ * Get retry states by status
70
+ */
71
+ listByStatus(status: string): Promise<RetryState[]>;
72
+ /**
73
+ * Clean up old retry states
74
+ */
75
+ cleanupOldStates(maxAgeHours?: number): Promise<number>;
76
+ }
77
+ //# sourceMappingURL=postgresql-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgresql-storage.d.ts","sourceRoot":"","sources":["../../src/storage/postgresql-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,iBAAkB,YAAW,cAAc;IACtD,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,IAAI,CAAM;IAClB,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,aAAa,CAAkB;gBAE3B,gBAAgB,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM;IAMvE;;OAEG;YACW,gBAAgB;IAuB9B;;OAEG;YACW,sBAAsB;IAgBpC;;OAEG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBxD;;OAEG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAqBlD;;OAEG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAenC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ5B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,YAAY,CAAC;IAiCvC;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAUxC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ5B;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAiBnD;;OAEG;IACG,kBAAkB,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAkB9E;;OAEG;IACG,aAAa,CAAC,KAAK,GAAE,MAAY,EAAE,MAAM,GAAE,MAAU,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAoBnF;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAoBzD;;OAEG;IACG,gBAAgB,CAAC,WAAW,GAAE,MAAW,GAAG,OAAO,CAAC,MAAM,CAAC;CAalE"}
@@ -0,0 +1,314 @@
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.PostgreSQLStorage = void 0;
44
+ /**
45
+ * PostgreSQL storage backend for retry states
46
+ */
47
+ class PostgreSQLStorage {
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.tableName = options.tableName || 'retry_states';
55
+ }
56
+ /**
57
+ * Initialize the PostgreSQL client and create table if needed
58
+ */
59
+ async initializeClient() {
60
+ if (this.isInitialized)
61
+ return;
62
+ try {
63
+ // Dynamic import to avoid requiring pg package if not used
64
+ const { Pool } = await Promise.resolve().then(() => __importStar(require('pg')));
65
+ this.pool = new Pool({
66
+ connectionString: this.connectionString,
67
+ max: this.options.maxConnections || 10,
68
+ idleTimeoutMillis: this.options.idleTimeoutMillis || 30000,
69
+ connectionTimeoutMillis: this.options.connectionTimeoutMillis || 2000,
70
+ ...this.options
71
+ });
72
+ // Test connection and create table
73
+ await this.createTableIfNotExists();
74
+ this.isInitialized = true;
75
+ }
76
+ catch (error) {
77
+ throw new Error(`Failed to connect to PostgreSQL: ${error instanceof Error ? error.message : 'Unknown error'}`);
78
+ }
79
+ }
80
+ /**
81
+ * Create the retry_states table if it doesn't exist
82
+ */
83
+ async createTableIfNotExists() {
84
+ const createTableQuery = `
85
+ CREATE TABLE IF NOT EXISTS ${this.tableName} (
86
+ id VARCHAR(255) PRIMARY KEY,
87
+ state JSONB NOT NULL,
88
+ created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
89
+ updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
90
+ );
91
+
92
+ CREATE INDEX IF NOT EXISTS idx_${this.tableName}_created_at ON ${this.tableName}(created_at);
93
+ CREATE INDEX IF NOT EXISTS idx_${this.tableName}_updated_at ON ${this.tableName}(updated_at);
94
+ `;
95
+ await this.pool.query(createTableQuery);
96
+ }
97
+ /**
98
+ * Store a retry state
99
+ */
100
+ async set(key, value) {
101
+ await this.initializeClient();
102
+ const query = `
103
+ INSERT INTO ${this.tableName} (id, state, updated_at)
104
+ VALUES ($1, $2, NOW())
105
+ ON CONFLICT (id)
106
+ DO UPDATE SET
107
+ state = $2,
108
+ updated_at = NOW()
109
+ `;
110
+ await this.pool.query(query, [key, JSON.stringify(value)]);
111
+ this.lastWrite = new Date();
112
+ }
113
+ /**
114
+ * Get a retry state
115
+ */
116
+ async get(key) {
117
+ await this.initializeClient();
118
+ const query = `SELECT state FROM ${this.tableName} WHERE id = $1`;
119
+ const result = await this.pool.query(query, [key]);
120
+ this.lastAccess = new Date();
121
+ if (result.rows.length === 0)
122
+ return null;
123
+ try {
124
+ const state = result.rows[0].state;
125
+ if (!state) {
126
+ throw new Error('Retry state is null or undefined');
127
+ }
128
+ return typeof state === 'string' ? JSON.parse(state) : state;
129
+ }
130
+ catch (error) {
131
+ throw new Error(`Failed to parse retry state from PostgreSQL: ${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 query = `DELETE FROM ${this.tableName} WHERE id = $1`;
140
+ await this.pool.query(query, [key]);
141
+ this.lastWrite = new Date();
142
+ }
143
+ /**
144
+ * List all retry states
145
+ */
146
+ async list() {
147
+ await this.initializeClient();
148
+ const query = `SELECT state FROM ${this.tableName} ORDER BY created_at ASC`;
149
+ const result = await this.pool.query(query);
150
+ this.lastAccess = new Date();
151
+ return result.rows.map((row) => {
152
+ const state = row.state;
153
+ if (!state)
154
+ return null;
155
+ return typeof state === 'string' ? JSON.parse(state) : state;
156
+ }).filter((state) => state !== null);
157
+ }
158
+ /**
159
+ * Clear all retry states
160
+ */
161
+ async clear() {
162
+ await this.initializeClient();
163
+ const query = `DELETE FROM ${this.tableName}`;
164
+ await this.pool.query(query);
165
+ this.lastWrite = new Date();
166
+ }
167
+ /**
168
+ * Get storage statistics
169
+ */
170
+ async getStats() {
171
+ await this.initializeClient();
172
+ const countQuery = `SELECT COUNT(*) as total FROM ${this.tableName}`;
173
+ const sizeQuery = `
174
+ SELECT
175
+ pg_total_relation_size('${this.tableName}') as total_size,
176
+ pg_relation_size('${this.tableName}') as table_size
177
+ `;
178
+ const oldestQuery = `SELECT id, created_at FROM ${this.tableName} ORDER BY created_at ASC LIMIT 1`;
179
+ const newestQuery = `SELECT id, created_at FROM ${this.tableName} ORDER BY created_at DESC LIMIT 1`;
180
+ const [countResult, sizeResult, oldestResult, newestResult] = await Promise.all([
181
+ this.pool.query(countQuery),
182
+ this.pool.query(sizeQuery),
183
+ this.pool.query(oldestQuery),
184
+ this.pool.query(newestQuery)
185
+ ]);
186
+ const totalKeys = parseInt(countResult.rows[0].total);
187
+ const totalSize = parseInt(sizeResult.rows[0].total_size);
188
+ return {
189
+ totalKeys,
190
+ totalSize,
191
+ averageKeySize: totalKeys > 0 ? totalSize / totalKeys : 0,
192
+ oldestKey: oldestResult.rows.length > 0 ? oldestResult.rows[0].id : undefined,
193
+ newestKey: newestResult.rows.length > 0 ? newestResult.rows[0].id : undefined,
194
+ lastAccess: this.lastAccess,
195
+ lastWrite: this.lastWrite
196
+ };
197
+ }
198
+ /**
199
+ * Test the connection
200
+ */
201
+ async testConnection() {
202
+ try {
203
+ await this.initializeClient();
204
+ await this.pool.query('SELECT 1');
205
+ return true;
206
+ }
207
+ catch {
208
+ return false;
209
+ }
210
+ }
211
+ /**
212
+ * Close the connection
213
+ */
214
+ async close() {
215
+ if (this.pool) {
216
+ await this.pool.end();
217
+ this.pool = null;
218
+ this.isInitialized = false;
219
+ }
220
+ }
221
+ /**
222
+ * Get PostgreSQL server info
223
+ */
224
+ async getServerInfo() {
225
+ await this.initializeClient();
226
+ try {
227
+ const versionQuery = 'SELECT version() as version';
228
+ const result = await this.pool.query(versionQuery);
229
+ return {
230
+ version: result.rows[0].version,
231
+ tableName: this.tableName,
232
+ connectionString: this.connectionString.replace(/:[^:@]*@/, ':***@') // Hide password
233
+ };
234
+ }
235
+ catch (error) {
236
+ return { error: error instanceof Error ? error.message : 'Unknown error' };
237
+ }
238
+ }
239
+ /**
240
+ * Execute a transaction
241
+ */
242
+ async executeTransaction(callback) {
243
+ await this.initializeClient();
244
+ const client = await this.pool.connect();
245
+ try {
246
+ await client.query('BEGIN');
247
+ const result = await callback(client);
248
+ await client.query('COMMIT');
249
+ return result;
250
+ }
251
+ catch (error) {
252
+ await client.query('ROLLBACK');
253
+ throw error;
254
+ }
255
+ finally {
256
+ client.release();
257
+ }
258
+ }
259
+ /**
260
+ * Get retry states with pagination
261
+ */
262
+ async listPaginated(limit = 100, offset = 0) {
263
+ await this.initializeClient();
264
+ const query = `
265
+ SELECT state
266
+ FROM ${this.tableName}
267
+ ORDER BY created_at ASC
268
+ LIMIT $1 OFFSET $2
269
+ `;
270
+ const result = await this.pool.query(query, [limit, offset]);
271
+ this.lastAccess = new Date();
272
+ return result.rows.map((row) => {
273
+ const state = row.state;
274
+ if (!state)
275
+ return null;
276
+ return typeof state === 'string' ? JSON.parse(state) : state;
277
+ }).filter((state) => state !== null);
278
+ }
279
+ /**
280
+ * Get retry states by status
281
+ */
282
+ async listByStatus(status) {
283
+ await this.initializeClient();
284
+ const query = `
285
+ SELECT state
286
+ FROM ${this.tableName}
287
+ WHERE state->>'status' = $1
288
+ ORDER BY created_at ASC
289
+ `;
290
+ const result = await this.pool.query(query, [status]);
291
+ this.lastAccess = new Date();
292
+ return result.rows.map((row) => {
293
+ const state = row.state;
294
+ if (!state)
295
+ return null;
296
+ return typeof state === 'string' ? JSON.parse(state) : state;
297
+ }).filter((state) => state !== null);
298
+ }
299
+ /**
300
+ * Clean up old retry states
301
+ */
302
+ async cleanupOldStates(maxAgeHours = 24) {
303
+ await this.initializeClient();
304
+ const query = `
305
+ DELETE FROM ${this.tableName}
306
+ WHERE updated_at < NOW() - INTERVAL '${maxAgeHours} hours'
307
+ `;
308
+ const result = await this.pool.query(query);
309
+ this.lastWrite = new Date();
310
+ return result.rowCount;
311
+ }
312
+ }
313
+ exports.PostgreSQLStorage = PostgreSQLStorage;
314
+ //# sourceMappingURL=postgresql-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgresql-storage.js","sourceRoot":"","sources":["../../src/storage/postgresql-storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ import { RetryState } from '../types';
2
+ import { StorageBackend, StorageStats } from './types';
3
+ /**
4
+ * Redis Cluster storage backend for retry states
5
+ */
6
+ export declare class RedisClusterStorage implements StorageBackend {
7
+ private cluster;
8
+ private connectionString;
9
+ private options;
10
+ private prefix;
11
+ private lastAccess;
12
+ private lastWrite;
13
+ private isInitialized;
14
+ constructor(connectionString: string, options?: Record<string, any>);
15
+ /**
16
+ * Initialize the Redis Cluster client
17
+ */
18
+ private initializeClient;
19
+ /**
20
+ * Parse cluster nodes from connection string
21
+ */
22
+ private parseClusterNodes;
23
+ /**
24
+ * Get the full key name with prefix
25
+ */
26
+ private getFullKey;
27
+ /**
28
+ * Store a retry state
29
+ */
30
+ set(key: string, value: RetryState): Promise<void>;
31
+ /**
32
+ * Get a retry state
33
+ */
34
+ get(key: string): Promise<RetryState | null>;
35
+ /**
36
+ * Delete a retry state
37
+ */
38
+ delete(key: string): Promise<void>;
39
+ /**
40
+ * List all retry states
41
+ */
42
+ list(): Promise<RetryState[]>;
43
+ /**
44
+ * Clear all retry states
45
+ */
46
+ clear(): Promise<void>;
47
+ /**
48
+ * Get storage statistics
49
+ */
50
+ getStats(): Promise<StorageStats>;
51
+ /**
52
+ * Test the connection
53
+ */
54
+ testConnection(): Promise<boolean>;
55
+ /**
56
+ * Close the connection
57
+ */
58
+ close(): Promise<void>;
59
+ /**
60
+ * Get cluster information
61
+ */
62
+ getClusterInfo(): Promise<Record<string, any>>;
63
+ /**
64
+ * Set expiration for a key
65
+ */
66
+ setExpiration(key: string, seconds: number): Promise<void>;
67
+ /**
68
+ * Get time to live for a key
69
+ */
70
+ getTTL(key: string): Promise<number>;
71
+ /**
72
+ * Get retry states with pagination
73
+ */
74
+ listPaginated(limit?: number, offset?: number): Promise<RetryState[]>;
75
+ /**
76
+ * Get retry states by status using SCAN
77
+ */
78
+ listByStatus(status: string): Promise<RetryState[]>;
79
+ /**
80
+ * Clean up old retry states using SCAN
81
+ */
82
+ cleanupOldStates(maxAgeHours?: number): Promise<number>;
83
+ /**
84
+ * Get cluster health status
85
+ */
86
+ getClusterHealth(): Promise<Record<string, any>>;
87
+ }
88
+ //# sourceMappingURL=redis-cluster-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis-cluster-storage.d.ts","sourceRoot":"","sources":["../../src/storage/redis-cluster-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,mBAAoB,YAAW,cAAc;IACxD,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,aAAa,CAAkB;gBAE3B,gBAAgB,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM;IAMvE;;OAEG;YACW,gBAAgB;IAkC9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;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;IAkB5B;;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;IAQ5B;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IA+BpD;;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;IAO1C;;OAEG;IACG,aAAa,CAAC,KAAK,GAAE,MAAY,EAAE,MAAM,GAAE,MAAU,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IA8BnF;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAkCzD;;OAEG;IACG,gBAAgB,CAAC,WAAW,GAAE,MAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IA2CjE;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CA6BvD"}