@freshguard/freshguard-core 0.11.2

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 (180) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +644 -0
  3. package/dist/cli/index.d.ts +3 -0
  4. package/dist/cli/index.d.ts.map +1 -0
  5. package/dist/cli/index.js +350 -0
  6. package/dist/cli/index.js.map +1 -0
  7. package/dist/connectors/base-connector.d.ts +62 -0
  8. package/dist/connectors/base-connector.d.ts.map +1 -0
  9. package/dist/connectors/base-connector.js +549 -0
  10. package/dist/connectors/base-connector.js.map +1 -0
  11. package/dist/connectors/bigquery.d.ts +38 -0
  12. package/dist/connectors/bigquery.d.ts.map +1 -0
  13. package/dist/connectors/bigquery.js +406 -0
  14. package/dist/connectors/bigquery.js.map +1 -0
  15. package/dist/connectors/duckdb.d.ts +36 -0
  16. package/dist/connectors/duckdb.d.ts.map +1 -0
  17. package/dist/connectors/duckdb.js +364 -0
  18. package/dist/connectors/duckdb.js.map +1 -0
  19. package/dist/connectors/index.d.ts +7 -0
  20. package/dist/connectors/index.d.ts.map +1 -0
  21. package/dist/connectors/index.js +7 -0
  22. package/dist/connectors/index.js.map +1 -0
  23. package/dist/connectors/mysql.d.ts +32 -0
  24. package/dist/connectors/mysql.d.ts.map +1 -0
  25. package/dist/connectors/mysql.js +348 -0
  26. package/dist/connectors/mysql.js.map +1 -0
  27. package/dist/connectors/postgres.d.ts +31 -0
  28. package/dist/connectors/postgres.d.ts.map +1 -0
  29. package/dist/connectors/postgres.js +326 -0
  30. package/dist/connectors/postgres.js.map +1 -0
  31. package/dist/connectors/redshift.d.ts +32 -0
  32. package/dist/connectors/redshift.d.ts.map +1 -0
  33. package/dist/connectors/redshift.js +366 -0
  34. package/dist/connectors/redshift.js.map +1 -0
  35. package/dist/connectors/snowflake.d.ts +43 -0
  36. package/dist/connectors/snowflake.d.ts.map +1 -0
  37. package/dist/connectors/snowflake.js +442 -0
  38. package/dist/connectors/snowflake.js.map +1 -0
  39. package/dist/db/index.d.ts +9 -0
  40. package/dist/db/index.d.ts.map +1 -0
  41. package/dist/db/index.js +10 -0
  42. package/dist/db/index.js.map +1 -0
  43. package/dist/db/migrate.d.ts +12 -0
  44. package/dist/db/migrate.d.ts.map +1 -0
  45. package/dist/db/migrate.js +114 -0
  46. package/dist/db/migrate.js.map +1 -0
  47. package/dist/db/schema.d.ts +2053 -0
  48. package/dist/db/schema.d.ts.map +1 -0
  49. package/dist/db/schema.js +164 -0
  50. package/dist/db/schema.js.map +1 -0
  51. package/dist/errors/debug-factory.d.ts +23 -0
  52. package/dist/errors/debug-factory.d.ts.map +1 -0
  53. package/dist/errors/debug-factory.js +149 -0
  54. package/dist/errors/debug-factory.js.map +1 -0
  55. package/dist/errors/index.d.ts +119 -0
  56. package/dist/errors/index.d.ts.map +1 -0
  57. package/dist/errors/index.js +341 -0
  58. package/dist/errors/index.js.map +1 -0
  59. package/dist/index.d.ts +9 -0
  60. package/dist/index.d.ts.map +1 -0
  61. package/dist/index.js +6 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/metadata/duckdb-storage.d.ts +31 -0
  64. package/dist/metadata/duckdb-storage.d.ts.map +1 -0
  65. package/dist/metadata/duckdb-storage.js +230 -0
  66. package/dist/metadata/duckdb-storage.js.map +1 -0
  67. package/dist/metadata/factory.d.ts +4 -0
  68. package/dist/metadata/factory.d.ts.map +1 -0
  69. package/dist/metadata/factory.js +23 -0
  70. package/dist/metadata/factory.js.map +1 -0
  71. package/dist/metadata/index.d.ts +6 -0
  72. package/dist/metadata/index.d.ts.map +1 -0
  73. package/dist/metadata/index.js +4 -0
  74. package/dist/metadata/index.js.map +1 -0
  75. package/dist/metadata/interface.d.ts +26 -0
  76. package/dist/metadata/interface.d.ts.map +1 -0
  77. package/dist/metadata/interface.js +2 -0
  78. package/dist/metadata/interface.js.map +1 -0
  79. package/dist/metadata/postgresql-storage.d.ts +32 -0
  80. package/dist/metadata/postgresql-storage.d.ts.map +1 -0
  81. package/dist/metadata/postgresql-storage.js +242 -0
  82. package/dist/metadata/postgresql-storage.js.map +1 -0
  83. package/dist/metadata/schema-config.d.ts +30 -0
  84. package/dist/metadata/schema-config.d.ts.map +1 -0
  85. package/dist/metadata/schema-config.js +94 -0
  86. package/dist/metadata/schema-config.js.map +1 -0
  87. package/dist/metadata/types.d.ts +35 -0
  88. package/dist/metadata/types.d.ts.map +1 -0
  89. package/dist/metadata/types.js +2 -0
  90. package/dist/metadata/types.js.map +1 -0
  91. package/dist/monitor/baseline-calculator.d.ts +30 -0
  92. package/dist/monitor/baseline-calculator.d.ts.map +1 -0
  93. package/dist/monitor/baseline-calculator.js +192 -0
  94. package/dist/monitor/baseline-calculator.js.map +1 -0
  95. package/dist/monitor/baseline-config.d.ts +37 -0
  96. package/dist/monitor/baseline-config.d.ts.map +1 -0
  97. package/dist/monitor/baseline-config.js +156 -0
  98. package/dist/monitor/baseline-config.js.map +1 -0
  99. package/dist/monitor/freshness.d.ts +5 -0
  100. package/dist/monitor/freshness.d.ts.map +1 -0
  101. package/dist/monitor/freshness.js +239 -0
  102. package/dist/monitor/freshness.js.map +1 -0
  103. package/dist/monitor/index.d.ts +5 -0
  104. package/dist/monitor/index.d.ts.map +1 -0
  105. package/dist/monitor/index.js +5 -0
  106. package/dist/monitor/index.js.map +1 -0
  107. package/dist/monitor/schema-baseline.d.ts +22 -0
  108. package/dist/monitor/schema-baseline.d.ts.map +1 -0
  109. package/dist/monitor/schema-baseline.js +211 -0
  110. package/dist/monitor/schema-baseline.js.map +1 -0
  111. package/dist/monitor/schema-changes.d.ts +5 -0
  112. package/dist/monitor/schema-changes.d.ts.map +1 -0
  113. package/dist/monitor/schema-changes.js +289 -0
  114. package/dist/monitor/schema-changes.js.map +1 -0
  115. package/dist/monitor/volume.d.ts +5 -0
  116. package/dist/monitor/volume.d.ts.map +1 -0
  117. package/dist/monitor/volume.js +262 -0
  118. package/dist/monitor/volume.js.map +1 -0
  119. package/dist/observability/logger.d.ts +63 -0
  120. package/dist/observability/logger.d.ts.map +1 -0
  121. package/dist/observability/logger.js +282 -0
  122. package/dist/observability/logger.js.map +1 -0
  123. package/dist/observability/metrics.d.ts +106 -0
  124. package/dist/observability/metrics.d.ts.map +1 -0
  125. package/dist/observability/metrics.js +441 -0
  126. package/dist/observability/metrics.js.map +1 -0
  127. package/dist/query-analyzer.js +526 -0
  128. package/dist/resilience/circuit-breaker.d.ts +94 -0
  129. package/dist/resilience/circuit-breaker.d.ts.map +1 -0
  130. package/dist/resilience/circuit-breaker.js +379 -0
  131. package/dist/resilience/circuit-breaker.js.map +1 -0
  132. package/dist/resilience/index.d.ts +7 -0
  133. package/dist/resilience/index.d.ts.map +1 -0
  134. package/dist/resilience/index.js +7 -0
  135. package/dist/resilience/index.js.map +1 -0
  136. package/dist/resilience/retry-policy.d.ts +87 -0
  137. package/dist/resilience/retry-policy.d.ts.map +1 -0
  138. package/dist/resilience/retry-policy.js +423 -0
  139. package/dist/resilience/retry-policy.js.map +1 -0
  140. package/dist/resilience/timeout-manager.d.ts +97 -0
  141. package/dist/resilience/timeout-manager.d.ts.map +1 -0
  142. package/dist/resilience/timeout-manager.js +339 -0
  143. package/dist/resilience/timeout-manager.js.map +1 -0
  144. package/dist/security/query-analyzer.d.ts +82 -0
  145. package/dist/security/query-analyzer.d.ts.map +1 -0
  146. package/dist/security/query-analyzer.js +381 -0
  147. package/dist/security/query-analyzer.js.map +1 -0
  148. package/dist/security/schema-cache.d.ts +95 -0
  149. package/dist/security/schema-cache.d.ts.map +1 -0
  150. package/dist/security/schema-cache.js +344 -0
  151. package/dist/security/schema-cache.js.map +1 -0
  152. package/dist/types/connector.d.ts +68 -0
  153. package/dist/types/connector.d.ts.map +1 -0
  154. package/dist/types/connector.js +26 -0
  155. package/dist/types/connector.js.map +1 -0
  156. package/dist/types.d.ts +244 -0
  157. package/dist/types.d.ts.map +1 -0
  158. package/dist/types.js +2 -0
  159. package/dist/types.js.map +1 -0
  160. package/dist/validation/index.d.ts +7 -0
  161. package/dist/validation/index.d.ts.map +1 -0
  162. package/dist/validation/index.js +5 -0
  163. package/dist/validation/index.js.map +1 -0
  164. package/dist/validation/runtime-validator.d.ts +70 -0
  165. package/dist/validation/runtime-validator.d.ts.map +1 -0
  166. package/dist/validation/runtime-validator.js +206 -0
  167. package/dist/validation/runtime-validator.js.map +1 -0
  168. package/dist/validation/sanitizers.d.ts +56 -0
  169. package/dist/validation/sanitizers.d.ts.map +1 -0
  170. package/dist/validation/sanitizers.js +264 -0
  171. package/dist/validation/sanitizers.js.map +1 -0
  172. package/dist/validation/schemas.d.ts +224 -0
  173. package/dist/validation/schemas.d.ts.map +1 -0
  174. package/dist/validation/schemas.js +263 -0
  175. package/dist/validation/schemas.js.map +1 -0
  176. package/dist/validators/index.d.ts +18 -0
  177. package/dist/validators/index.d.ts.map +1 -0
  178. package/dist/validators/index.js +209 -0
  179. package/dist/validators/index.js.map +1 -0
  180. package/package.json +91 -0
@@ -0,0 +1,379 @@
1
+ import { createComponentLogger } from '../observability/logger.js';
2
+ import { createComponentMetrics } from '../observability/metrics.js';
3
+ export var CircuitBreakerState;
4
+ (function (CircuitBreakerState) {
5
+ CircuitBreakerState["CLOSED"] = "CLOSED";
6
+ CircuitBreakerState["OPEN"] = "OPEN";
7
+ CircuitBreakerState["HALF_OPEN"] = "HALF_OPEN";
8
+ })(CircuitBreakerState || (CircuitBreakerState = {}));
9
+ export class CircuitBreakerError extends Error {
10
+ circuitName;
11
+ state;
12
+ timestamp;
13
+ constructor(message, circuitName, state) {
14
+ super(message);
15
+ this.name = 'CircuitBreakerError';
16
+ this.circuitName = circuitName;
17
+ this.state = state;
18
+ this.timestamp = new Date();
19
+ }
20
+ }
21
+ export class CircuitOpenError extends CircuitBreakerError {
22
+ nextAttemptTime;
23
+ constructor(circuitName, nextAttemptTime) {
24
+ super(`Circuit breaker '${circuitName}' is OPEN - calls are being rejected`, circuitName, CircuitBreakerState.OPEN);
25
+ this.name = 'CircuitOpenError';
26
+ this.nextAttemptTime = nextAttemptTime;
27
+ }
28
+ }
29
+ export class CircuitBreaker {
30
+ state = CircuitBreakerState.CLOSED;
31
+ failureWindow = [];
32
+ successCount = 0;
33
+ totalCalls = 0;
34
+ successfulCalls = 0;
35
+ failedCalls = 0;
36
+ rejectedCalls = 0;
37
+ lastFailureTime = null;
38
+ lastSuccessTime = null;
39
+ nextAttemptTime = null;
40
+ config;
41
+ logger;
42
+ metrics;
43
+ enableDetailedLogging;
44
+ lastStateChangeTime;
45
+ constructor(config) {
46
+ this.config = {
47
+ failureThreshold: config.failureThreshold || 5,
48
+ successThreshold: config.successThreshold || 3,
49
+ recoveryTimeout: config.recoveryTimeout || 60000,
50
+ windowSize: config.windowSize || 100,
51
+ errorFilter: config.errorFilter || (() => true),
52
+ name: config.name || 'Circuit',
53
+ enableDetailedLogging: config.enableDetailedLogging || false
54
+ };
55
+ this.lastStateChangeTime = new Date();
56
+ this.logger = config.logger || createComponentLogger('circuit-breaker');
57
+ this.metrics = config.metrics || createComponentMetrics('circuit_breaker');
58
+ this.enableDetailedLogging = config.enableDetailedLogging !== false;
59
+ if (this.config.failureThreshold <= 0) {
60
+ throw new Error('Failure threshold must be positive');
61
+ }
62
+ if (this.config.successThreshold <= 0) {
63
+ throw new Error('Success threshold must be positive');
64
+ }
65
+ if (this.config.recoveryTimeout < 0) {
66
+ throw new Error('Recovery timeout cannot be negative');
67
+ }
68
+ this.logger.info('Circuit breaker initialized', {
69
+ circuitName: this.config.name,
70
+ failureThreshold: this.config.failureThreshold,
71
+ successThreshold: this.config.successThreshold,
72
+ recoveryTimeout: this.config.recoveryTimeout,
73
+ windowSize: this.config.windowSize
74
+ });
75
+ this.recordMetrics();
76
+ }
77
+ async execute(fn) {
78
+ const startTime = Date.now();
79
+ try {
80
+ if (this.state === CircuitBreakerState.OPEN) {
81
+ if (Date.now() < (this.nextAttemptTime?.getTime() || 0)) {
82
+ this.rejectedCalls++;
83
+ if (this.enableDetailedLogging) {
84
+ this.logger.debug('Circuit breaker rejected call', {
85
+ circuitName: this.config.name,
86
+ rejectedCalls: this.rejectedCalls,
87
+ nextAttemptTime: this.nextAttemptTime.toISOString()
88
+ });
89
+ }
90
+ throw new CircuitOpenError(this.config.name, this.nextAttemptTime);
91
+ }
92
+ else {
93
+ this.changeState(CircuitBreakerState.HALF_OPEN);
94
+ this.successCount = 0;
95
+ }
96
+ }
97
+ const result = await fn();
98
+ const executionTime = Date.now() - startTime;
99
+ this.onSuccess(executionTime);
100
+ return result;
101
+ }
102
+ catch (error) {
103
+ const executionTime = Date.now() - startTime;
104
+ this.onFailure(error, executionTime);
105
+ throw error;
106
+ }
107
+ }
108
+ async executeWithResult(fn) {
109
+ const startTime = Date.now();
110
+ try {
111
+ const result = await this.execute(fn);
112
+ const executionTime = Date.now() - startTime;
113
+ return {
114
+ success: true,
115
+ data: result,
116
+ executionTime
117
+ };
118
+ }
119
+ catch (error) {
120
+ const executionTime = Date.now() - startTime;
121
+ return {
122
+ success: false,
123
+ error: error instanceof CircuitBreakerError
124
+ ? error
125
+ : new CircuitBreakerError(error.message, this.config.name, this.state),
126
+ executionTime
127
+ };
128
+ }
129
+ }
130
+ onSuccess(executionTime) {
131
+ this.totalCalls++;
132
+ this.successfulCalls++;
133
+ this.lastSuccessTime = new Date();
134
+ switch (this.state) {
135
+ case CircuitBreakerState.CLOSED:
136
+ this.resetFailureCount();
137
+ break;
138
+ case CircuitBreakerState.HALF_OPEN:
139
+ this.successCount++;
140
+ if (this.successCount >= this.config.successThreshold) {
141
+ this.changeState(CircuitBreakerState.CLOSED);
142
+ this.successCount = 0;
143
+ this.nextAttemptTime = null;
144
+ this.resetFailureCount();
145
+ }
146
+ break;
147
+ case CircuitBreakerState.OPEN:
148
+ this.changeState(CircuitBreakerState.HALF_OPEN);
149
+ this.successCount = 1;
150
+ break;
151
+ }
152
+ if (this.enableDetailedLogging) {
153
+ this.logger.debug('Circuit breaker execution succeeded', {
154
+ circuitName: this.config.name,
155
+ executionTime,
156
+ state: this.state,
157
+ successCount: this.successCount,
158
+ totalCalls: this.totalCalls
159
+ });
160
+ }
161
+ this.recordMetrics();
162
+ }
163
+ onFailure(error, executionTime) {
164
+ this.totalCalls++;
165
+ this.failedCalls++;
166
+ this.lastFailureTime = new Date();
167
+ if (!this.config.errorFilter(error)) {
168
+ if (this.enableDetailedLogging) {
169
+ this.logger.debug('Circuit breaker execution failed (filtered)', {
170
+ circuitName: this.config.name,
171
+ errorType: error.constructor.name,
172
+ errorMessage: error.message,
173
+ executionTime,
174
+ state: this.state
175
+ });
176
+ }
177
+ return;
178
+ }
179
+ const now = new Date();
180
+ this.failureWindow.push(now);
181
+ const cutoff = new Date(now.getTime() - (5 * 60 * 1000));
182
+ this.failureWindow = this.failureWindow.filter(time => time > cutoff);
183
+ const previousState = this.state;
184
+ switch (this.state) {
185
+ case CircuitBreakerState.CLOSED:
186
+ if (this.failureWindow.length >= this.config.failureThreshold) {
187
+ this.tripCircuit();
188
+ }
189
+ break;
190
+ case CircuitBreakerState.HALF_OPEN:
191
+ this.tripCircuit();
192
+ break;
193
+ case CircuitBreakerState.OPEN:
194
+ this.nextAttemptTime = new Date(Date.now() + this.config.recoveryTimeout);
195
+ break;
196
+ }
197
+ if (this.enableDetailedLogging) {
198
+ this.logger.warn('Circuit breaker execution failed', {
199
+ circuitName: this.config.name,
200
+ errorType: error.constructor.name,
201
+ errorMessage: error.message,
202
+ executionTime,
203
+ state: this.state,
204
+ failureCount: this.failureWindow.length,
205
+ failureThreshold: this.config.failureThreshold,
206
+ stateChanged: previousState !== this.state
207
+ });
208
+ }
209
+ else {
210
+ if (previousState !== this.state) {
211
+ this.logger.warn('Circuit breaker state changed due to failure', {
212
+ circuitName: this.config.name,
213
+ previousState,
214
+ newState: this.state,
215
+ failureCount: this.failureWindow.length
216
+ });
217
+ }
218
+ }
219
+ this.recordMetrics();
220
+ }
221
+ tripCircuit() {
222
+ this.changeState(CircuitBreakerState.OPEN);
223
+ this.successCount = 0;
224
+ this.nextAttemptTime = new Date(Date.now() + this.config.recoveryTimeout);
225
+ this.logger.error('Circuit breaker tripped to OPEN state', {
226
+ circuitName: this.config.name,
227
+ failureCount: this.failureWindow.length,
228
+ recoveryTimeout: this.config.recoveryTimeout,
229
+ nextAttemptTime: this.nextAttemptTime.toISOString()
230
+ });
231
+ }
232
+ changeState(newState) {
233
+ const previousState = this.state;
234
+ if (previousState === newState) {
235
+ return;
236
+ }
237
+ this.state = newState;
238
+ this.lastStateChangeTime = new Date();
239
+ this.logger.info('Circuit breaker state changed', {
240
+ circuitName: this.config.name,
241
+ previousState,
242
+ newState,
243
+ timeInPreviousState: Date.now() - this.lastStateChangeTime.getTime()
244
+ });
245
+ this.recordMetrics();
246
+ }
247
+ recordMetrics() {
248
+ this.metrics.recordCircuitBreakerState(this.config.name, this.state, this.failedCalls, this.successfulCalls);
249
+ }
250
+ resetFailureCount() {
251
+ this.failureWindow = [];
252
+ this.successCount = 0;
253
+ }
254
+ getStats() {
255
+ const failureRate = this.totalCalls > 0
256
+ ? (this.failedCalls / this.totalCalls) * 100
257
+ : 0;
258
+ const uptime = this.totalCalls > 0
259
+ ? ((this.successfulCalls / this.totalCalls) * 100)
260
+ : 100;
261
+ return {
262
+ state: this.state,
263
+ totalCalls: this.totalCalls,
264
+ successfulCalls: this.successfulCalls,
265
+ failedCalls: this.failedCalls,
266
+ rejectedCalls: this.rejectedCalls,
267
+ lastFailureTime: this.lastFailureTime,
268
+ lastSuccessTime: this.lastSuccessTime,
269
+ nextAttemptTime: this.nextAttemptTime,
270
+ failureRate: Math.round(failureRate * 100) / 100,
271
+ uptime: Math.round(uptime * 100) / 100
272
+ };
273
+ }
274
+ isCallable() {
275
+ switch (this.state) {
276
+ case CircuitBreakerState.CLOSED:
277
+ return true;
278
+ case CircuitBreakerState.HALF_OPEN:
279
+ return true;
280
+ case CircuitBreakerState.OPEN:
281
+ return Date.now() >= (this.nextAttemptTime?.getTime() || 0);
282
+ }
283
+ }
284
+ reset() {
285
+ this.state = CircuitBreakerState.CLOSED;
286
+ this.resetFailureCount();
287
+ this.nextAttemptTime = null;
288
+ this.totalCalls = 0;
289
+ this.successfulCalls = 0;
290
+ this.failedCalls = 0;
291
+ this.rejectedCalls = 0;
292
+ this.lastFailureTime = null;
293
+ this.lastSuccessTime = null;
294
+ }
295
+ trip() {
296
+ this.tripCircuit();
297
+ }
298
+ getName() {
299
+ return this.config.name;
300
+ }
301
+ getState() {
302
+ return this.state;
303
+ }
304
+ }
305
+ export function createDatabaseCircuitBreaker(name) {
306
+ return new CircuitBreaker({
307
+ name: `db-${name}`,
308
+ failureThreshold: 5,
309
+ successThreshold: 3,
310
+ recoveryTimeout: 60000,
311
+ windowSize: 100,
312
+ errorFilter: (error) => {
313
+ return !(error.name === 'ValidationError' ||
314
+ error.name === 'AuthenticationError' ||
315
+ error.message.includes('authentication') ||
316
+ error.message.includes('authorization'));
317
+ }
318
+ });
319
+ }
320
+ export function createApiCircuitBreaker(name) {
321
+ return new CircuitBreaker({
322
+ name: `api-${name}`,
323
+ failureThreshold: 3,
324
+ successThreshold: 2,
325
+ recoveryTimeout: 30000,
326
+ windowSize: 50,
327
+ errorFilter: (error) => {
328
+ if (error.message.includes('status')) {
329
+ const statusMatch = /status\s+(\d+)/i.exec(error.message);
330
+ if (statusMatch?.[1]) {
331
+ const status = parseInt(statusMatch[1]);
332
+ return status >= 500;
333
+ }
334
+ }
335
+ return true;
336
+ }
337
+ });
338
+ }
339
+ export class CircuitBreakerRegistry {
340
+ circuits = new Map();
341
+ getOrCreate(name, config) {
342
+ let circuit = this.circuits.get(name);
343
+ if (!circuit) {
344
+ const finalConfig = config ? { ...config, name } : {
345
+ name,
346
+ failureThreshold: 5,
347
+ successThreshold: 3,
348
+ recoveryTimeout: 60000,
349
+ windowSize: 100
350
+ };
351
+ circuit = new CircuitBreaker(finalConfig);
352
+ this.circuits.set(name, circuit);
353
+ }
354
+ return circuit;
355
+ }
356
+ getAllCircuits() {
357
+ return new Map(this.circuits);
358
+ }
359
+ getAllStats() {
360
+ const stats = {};
361
+ for (const [name, circuit] of this.circuits) {
362
+ stats[name] = circuit.getStats();
363
+ }
364
+ return stats;
365
+ }
366
+ resetAll() {
367
+ for (const circuit of this.circuits.values()) {
368
+ circuit.reset();
369
+ }
370
+ }
371
+ remove(name) {
372
+ return this.circuits.delete(name);
373
+ }
374
+ clear() {
375
+ this.circuits.clear();
376
+ }
377
+ }
378
+ export const defaultCircuitBreakerRegistry = new CircuitBreakerRegistry();
379
+ //# sourceMappingURL=circuit-breaker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../../src/resilience/circuit-breaker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export * from './circuit-breaker.js';
2
+ export * from './retry-policy.js';
3
+ export * from './timeout-manager.js';
4
+ export { createDatabaseCircuitBreaker, createApiCircuitBreaker, defaultCircuitBreakerRegistry } from './circuit-breaker.js';
5
+ export { executeWithRetry, executeWithDatabaseRetry, executeWithApiRetry, defaultRetryPolicyRegistry, DATABASE_RETRY_CONFIG, API_RETRY_CONFIG } from './retry-policy.js';
6
+ export { withTimeout, withTimeoutResult, createDatabaseTimeout, createApiTimeout, defaultTimeoutRegistry } from './timeout-manager.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resilience/index.ts"],"names":[],"mappings":"AAWA,cAAc,sBAAsB,CAAC;AAGrC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,sBAAsB,CAAC;AAGrC,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,EACvB,6BAA6B,EAC9B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,gBAAgB,EAChB,wBAAwB,EACxB,mBAAmB,EACnB,0BAA0B,EAC1B,qBAAqB,EACrB,gBAAgB,EACjB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from './circuit-breaker.js';
2
+ export * from './retry-policy.js';
3
+ export * from './timeout-manager.js';
4
+ export { createDatabaseCircuitBreaker, createApiCircuitBreaker, defaultCircuitBreakerRegistry } from './circuit-breaker.js';
5
+ export { executeWithRetry, executeWithDatabaseRetry, executeWithApiRetry, defaultRetryPolicyRegistry, DATABASE_RETRY_CONFIG, API_RETRY_CONFIG } from './retry-policy.js';
6
+ export { withTimeout, withTimeoutResult, createDatabaseTimeout, createApiTimeout, defaultTimeoutRegistry } from './timeout-manager.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resilience/index.ts"],"names":[],"mappings":"AAWA,cAAc,sBAAsB,CAAC;AAGrC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,sBAAsB,CAAC;AAGrC,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,EACvB,6BAA6B,EAC9B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,gBAAgB,EAChB,wBAAwB,EACxB,mBAAmB,EACnB,0BAA0B,EAC1B,qBAAqB,EACrB,gBAAgB,EACjB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,87 @@
1
+ import type { StructuredLogger } from '../observability/logger.js';
2
+ import type { MetricsCollector } from '../observability/metrics.js';
3
+ export interface RetryConfig {
4
+ maxAttempts: number;
5
+ baseDelay: number;
6
+ maxDelay: number;
7
+ backoffMultiplier: number;
8
+ enableJitter: boolean;
9
+ retryCondition?: (error: Error, attempt: number) => boolean;
10
+ delayFunction?: (attempt: number, baseDelay: number, maxDelay: number) => number;
11
+ attemptTimeout?: number;
12
+ name?: string;
13
+ logger?: StructuredLogger;
14
+ metrics?: MetricsCollector;
15
+ enableDetailedLogging?: boolean;
16
+ }
17
+ export interface RetryAttempt {
18
+ attempt: number;
19
+ startTime: Date;
20
+ endTime: Date | null;
21
+ duration: number;
22
+ error: Error | null;
23
+ delay: number;
24
+ success: boolean;
25
+ }
26
+ export interface RetryResult<T> {
27
+ success: boolean;
28
+ data?: T;
29
+ error?: Error;
30
+ attempts: RetryAttempt[];
31
+ totalDuration: number;
32
+ totalAttempts: number;
33
+ }
34
+ export interface RetryStats {
35
+ totalExecutions: number;
36
+ successfulExecutions: number;
37
+ failedExecutions: number;
38
+ totalAttempts: number;
39
+ averageAttempts: number;
40
+ averageDuration: number;
41
+ successRate: number;
42
+ lastExecutionTime: Date | null;
43
+ }
44
+ export declare class RetryExhaustedError extends Error {
45
+ readonly attempts: RetryAttempt[];
46
+ readonly totalDuration: number;
47
+ readonly lastError: Error;
48
+ constructor(attempts: RetryAttempt[], totalDuration: number, lastError: Error);
49
+ }
50
+ export declare class AttemptTimeoutError extends Error {
51
+ readonly attemptNumber: number;
52
+ readonly timeout: number;
53
+ constructor(attemptNumber: number, timeout: number);
54
+ }
55
+ export declare const DATABASE_RETRY_CONFIG: RetryConfig;
56
+ export declare const API_RETRY_CONFIG: RetryConfig;
57
+ export declare class RetryPolicy {
58
+ private readonly config;
59
+ private readonly logger;
60
+ private readonly metrics;
61
+ private readonly enableDetailedLogging;
62
+ private stats;
63
+ constructor(config?: Partial<RetryConfig>);
64
+ execute<T>(fn: () => Promise<T>): Promise<T>;
65
+ executeWithResult<T>(fn: () => Promise<T>): Promise<RetryResult<T>>;
66
+ private updateStats;
67
+ getStats(): RetryStats;
68
+ resetStats(): void;
69
+ getConfig(): Required<RetryConfig>;
70
+ withConfig(config: Partial<RetryConfig>): RetryPolicy;
71
+ }
72
+ export declare function executeWithRetry<T>(fn: () => Promise<T>, config?: RetryConfig): Promise<T>;
73
+ export declare function executeWithDatabaseRetry<T>(fn: () => Promise<T>): Promise<T>;
74
+ export declare function executeWithApiRetry<T>(fn: () => Promise<T>): Promise<T>;
75
+ export declare class RetryPolicyRegistry {
76
+ private readonly policies;
77
+ register(name: string, config: RetryConfig): RetryPolicy;
78
+ get(name: string): RetryPolicy | undefined;
79
+ getOrCreate(name: string, config?: RetryConfig): RetryPolicy;
80
+ getAllPolicies(): Map<string, RetryPolicy>;
81
+ getAllStats(): Record<string, RetryStats>;
82
+ resetAllStats(): void;
83
+ remove(name: string): boolean;
84
+ clear(): void;
85
+ }
86
+ export declare const defaultRetryPolicyRegistry: RetryPolicyRegistry;
87
+ //# sourceMappingURL=retry-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry-policy.d.ts","sourceRoot":"","sources":["../../src/resilience/retry-policy.ts"],"names":[],"mappings":"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"}