@freshguard/freshguard-core 0.13.2 → 0.15.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.
- package/CHANGELOG.md +15 -1
- package/README.md +74 -1
- package/SKILL.md +229 -0
- package/dist/cli/index.d.ts +13 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +74 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/connectors/azure-sql.d.ts +121 -0
- package/dist/connectors/azure-sql.d.ts.map +1 -0
- package/dist/connectors/azure-sql.js +489 -0
- package/dist/connectors/azure-sql.js.map +1 -0
- package/dist/connectors/base-connector.d.ts +139 -0
- package/dist/connectors/base-connector.d.ts.map +1 -1
- package/dist/connectors/base-connector.js +160 -3
- package/dist/connectors/base-connector.js.map +1 -1
- package/dist/connectors/bigquery.d.ts +100 -0
- package/dist/connectors/bigquery.d.ts.map +1 -1
- package/dist/connectors/bigquery.js +143 -2
- package/dist/connectors/bigquery.js.map +1 -1
- package/dist/connectors/duckdb.d.ts +96 -0
- package/dist/connectors/duckdb.d.ts.map +1 -1
- package/dist/connectors/duckdb.js +144 -7
- package/dist/connectors/duckdb.js.map +1 -1
- package/dist/connectors/index.d.ts +28 -0
- package/dist/connectors/index.d.ts.map +1 -1
- package/dist/connectors/index.js +28 -0
- package/dist/connectors/index.js.map +1 -1
- package/dist/connectors/mssql.d.ts +119 -0
- package/dist/connectors/mssql.d.ts.map +1 -0
- package/dist/connectors/mssql.js +483 -0
- package/dist/connectors/mssql.js.map +1 -0
- package/dist/connectors/mysql.d.ts +85 -0
- package/dist/connectors/mysql.d.ts.map +1 -1
- package/dist/connectors/mysql.js +118 -3
- package/dist/connectors/mysql.js.map +1 -1
- package/dist/connectors/postgres.d.ts +85 -0
- package/dist/connectors/postgres.d.ts.map +1 -1
- package/dist/connectors/postgres.js +113 -6
- package/dist/connectors/postgres.js.map +1 -1
- package/dist/connectors/redshift.d.ts +90 -0
- package/dist/connectors/redshift.d.ts.map +1 -1
- package/dist/connectors/redshift.js +131 -7
- package/dist/connectors/redshift.js.map +1 -1
- package/dist/connectors/snowflake.d.ts +108 -0
- package/dist/connectors/snowflake.d.ts.map +1 -1
- package/dist/connectors/snowflake.js +137 -3
- package/dist/connectors/snowflake.js.map +1 -1
- package/dist/connectors/synapse.d.ts +123 -0
- package/dist/connectors/synapse.d.ts.map +1 -0
- package/dist/connectors/synapse.js +495 -0
- package/dist/connectors/synapse.js.map +1 -0
- package/dist/db/index.d.ts +25 -0
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +23 -0
- package/dist/db/index.js.map +1 -1
- package/dist/db/migrate.d.ts +23 -0
- package/dist/db/migrate.d.ts.map +1 -1
- package/dist/db/migrate.js +38 -0
- package/dist/db/migrate.js.map +1 -1
- package/dist/db/schema.d.ts +11 -0
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +70 -0
- package/dist/db/schema.js.map +1 -1
- package/dist/errors/debug-factory.d.ts +38 -0
- package/dist/errors/debug-factory.d.ts.map +1 -1
- package/dist/errors/debug-factory.js +40 -0
- package/dist/errors/debug-factory.js.map +1 -1
- package/dist/errors/index.d.ts +59 -0
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +110 -7
- package/dist/errors/index.js.map +1 -1
- package/dist/index.d.ts +32 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -1
- package/dist/index.js.map +1 -1
- package/dist/metadata/duckdb-storage.d.ts +3 -0
- package/dist/metadata/duckdb-storage.d.ts.map +1 -1
- package/dist/metadata/duckdb-storage.js +6 -0
- package/dist/metadata/duckdb-storage.js.map +1 -1
- package/dist/metadata/factory.d.ts +30 -0
- package/dist/metadata/factory.d.ts.map +1 -1
- package/dist/metadata/factory.js +31 -0
- package/dist/metadata/factory.js.map +1 -1
- package/dist/metadata/index.d.ts +26 -0
- package/dist/metadata/index.d.ts.map +1 -1
- package/dist/metadata/index.js +26 -0
- package/dist/metadata/index.js.map +1 -1
- package/dist/metadata/interface.d.ts +33 -0
- package/dist/metadata/interface.d.ts.map +1 -1
- package/dist/metadata/interface.js +3 -0
- package/dist/metadata/interface.js.map +1 -1
- package/dist/metadata/postgresql-storage.d.ts +3 -0
- package/dist/metadata/postgresql-storage.d.ts.map +1 -1
- package/dist/metadata/postgresql-storage.js +12 -2
- package/dist/metadata/postgresql-storage.js.map +1 -1
- package/dist/metadata/schema-config.d.ts +53 -0
- package/dist/metadata/schema-config.d.ts.map +1 -1
- package/dist/metadata/schema-config.js +64 -0
- package/dist/metadata/schema-config.js.map +1 -1
- package/dist/metadata/types.d.ts +3 -0
- package/dist/metadata/types.d.ts.map +1 -1
- package/dist/metadata/types.js +3 -0
- package/dist/metadata/types.js.map +1 -1
- package/dist/monitor/baseline-calculator.d.ts +56 -0
- package/dist/monitor/baseline-calculator.d.ts.map +1 -1
- package/dist/monitor/baseline-calculator.js +72 -0
- package/dist/monitor/baseline-calculator.js.map +1 -1
- package/dist/monitor/baseline-config.d.ts +77 -0
- package/dist/monitor/baseline-config.d.ts.map +1 -1
- package/dist/monitor/baseline-config.js +79 -1
- package/dist/monitor/baseline-config.js.map +1 -1
- package/dist/monitor/freshness.d.ts +40 -0
- package/dist/monitor/freshness.d.ts.map +1 -1
- package/dist/monitor/freshness.js +82 -3
- package/dist/monitor/freshness.js.map +1 -1
- package/dist/monitor/index.d.ts +29 -0
- package/dist/monitor/index.d.ts.map +1 -1
- package/dist/monitor/index.js +29 -0
- package/dist/monitor/index.js.map +1 -1
- package/dist/monitor/schema-baseline.d.ts +45 -0
- package/dist/monitor/schema-baseline.d.ts.map +1 -1
- package/dist/monitor/schema-baseline.js +63 -5
- package/dist/monitor/schema-baseline.js.map +1 -1
- package/dist/monitor/schema-changes.d.ts +45 -0
- package/dist/monitor/schema-changes.d.ts.map +1 -1
- package/dist/monitor/schema-changes.js +85 -0
- package/dist/monitor/schema-changes.js.map +1 -1
- package/dist/monitor/volume.d.ts +43 -0
- package/dist/monitor/volume.d.ts.map +1 -1
- package/dist/monitor/volume.js +89 -0
- package/dist/monitor/volume.js.map +1 -1
- package/dist/observability/logger.d.ts +91 -0
- package/dist/observability/logger.d.ts.map +1 -1
- package/dist/observability/logger.js +108 -0
- package/dist/observability/logger.js.map +1 -1
- package/dist/observability/metrics.d.ts +140 -0
- package/dist/observability/metrics.d.ts.map +1 -1
- package/dist/observability/metrics.js +184 -7
- package/dist/observability/metrics.js.map +1 -1
- package/dist/resilience/circuit-breaker.d.ts +112 -2
- package/dist/resilience/circuit-breaker.d.ts.map +1 -1
- package/dist/resilience/circuit-breaker.js +140 -6
- package/dist/resilience/circuit-breaker.js.map +1 -1
- package/dist/resilience/index.d.ts +9 -0
- package/dist/resilience/index.d.ts.map +1 -1
- package/dist/resilience/index.js +13 -0
- package/dist/resilience/index.js.map +1 -1
- package/dist/resilience/retry-policy.d.ts +105 -0
- package/dist/resilience/retry-policy.d.ts.map +1 -1
- package/dist/resilience/retry-policy.js +158 -7
- package/dist/resilience/retry-policy.js.map +1 -1
- package/dist/resilience/timeout-manager.d.ts +137 -0
- package/dist/resilience/timeout-manager.d.ts.map +1 -1
- package/dist/resilience/timeout-manager.js +151 -4
- package/dist/resilience/timeout-manager.js.map +1 -1
- package/dist/security/query-analyzer.d.ts +124 -0
- package/dist/security/query-analyzer.d.ts.map +1 -1
- package/dist/security/query-analyzer.js +150 -9
- package/dist/security/query-analyzer.js.map +1 -1
- package/dist/security/schema-cache.d.ts +152 -0
- package/dist/security/schema-cache.d.ts.map +1 -1
- package/dist/security/schema-cache.js +144 -12
- package/dist/security/schema-cache.js.map +1 -1
- package/dist/types/connector.d.ts +68 -1
- package/dist/types/connector.d.ts.map +1 -1
- package/dist/types/connector.js +38 -15
- package/dist/types/connector.js.map +1 -1
- package/dist/types/driver-results.d.ts +28 -0
- package/dist/types/driver-results.d.ts.map +1 -1
- package/dist/types/driver-results.js +12 -0
- package/dist/types/driver-results.js.map +1 -1
- package/dist/types.d.ts +113 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -1
- package/dist/validation/index.d.ts +8 -0
- package/dist/validation/index.d.ts.map +1 -1
- package/dist/validation/index.js +12 -0
- package/dist/validation/index.js.map +1 -1
- package/dist/validation/runtime-validator.d.ts +98 -0
- package/dist/validation/runtime-validator.d.ts.map +1 -1
- package/dist/validation/runtime-validator.js +114 -1
- package/dist/validation/runtime-validator.js.map +1 -1
- package/dist/validation/sanitizers.d.ts +59 -0
- package/dist/validation/sanitizers.d.ts.map +1 -1
- package/dist/validation/sanitizers.js +104 -20
- package/dist/validation/sanitizers.js.map +1 -1
- package/dist/validation/schemas.d.ts +73 -0
- package/dist/validation/schemas.d.ts.map +1 -1
- package/dist/validation/schemas.js +132 -5
- package/dist/validation/schemas.js.map +1 -1
- package/dist/validators/index.d.ts +54 -0
- package/dist/validators/index.d.ts.map +1 -1
- package/dist/validators/index.js +93 -2
- package/dist/validators/index.js.map +1 -1
- package/package.json +6 -2
|
@@ -1,21 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Circuit Breaker implementation for FreshGuard Core Phase 2
|
|
3
|
+
*
|
|
4
|
+
* Implements the Circuit Breaker pattern to provide resilience against
|
|
5
|
+
* cascading failures and fast-fail behavior for unhealthy services.
|
|
6
|
+
* Includes integrated observability with structured logging and metrics.
|
|
7
|
+
*
|
|
8
|
+
* States: CLOSED → OPEN → HALF_OPEN → CLOSED/OPEN
|
|
9
|
+
*
|
|
10
|
+
* @license MIT
|
|
11
|
+
*/
|
|
1
12
|
import type { StructuredLogger } from '../observability/logger.js';
|
|
2
13
|
import type { MetricsCollector } from '../observability/metrics.js';
|
|
14
|
+
/**
|
|
15
|
+
* Circuit breaker states
|
|
16
|
+
*/
|
|
3
17
|
export declare enum CircuitBreakerState {
|
|
4
|
-
CLOSED = "CLOSED"
|
|
5
|
-
OPEN = "OPEN"
|
|
18
|
+
CLOSED = "CLOSED",// Normal operation
|
|
19
|
+
OPEN = "OPEN",// Failing fast
|
|
6
20
|
HALF_OPEN = "HALF_OPEN"
|
|
7
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* Circuit breaker configuration
|
|
24
|
+
*/
|
|
8
25
|
export interface CircuitBreakerConfig {
|
|
26
|
+
/** Failure threshold to trip the circuit */
|
|
9
27
|
failureThreshold: number;
|
|
28
|
+
/** Success threshold to close circuit from half-open */
|
|
10
29
|
successThreshold: number;
|
|
30
|
+
/** Time to wait before attempting recovery (ms) */
|
|
11
31
|
recoveryTimeout: number;
|
|
32
|
+
/** Window size for tracking failures */
|
|
12
33
|
windowSize: number;
|
|
34
|
+
/** Custom error classifier */
|
|
13
35
|
errorFilter?: (error: Error) => boolean;
|
|
36
|
+
/** Circuit name for logging/monitoring */
|
|
14
37
|
name?: string;
|
|
38
|
+
/** Logger instance for observability */
|
|
15
39
|
logger?: StructuredLogger;
|
|
40
|
+
/** Metrics collector for observability */
|
|
16
41
|
metrics?: MetricsCollector;
|
|
42
|
+
/** Enable detailed logging */
|
|
17
43
|
enableDetailedLogging?: boolean;
|
|
18
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* Circuit breaker statistics
|
|
47
|
+
*/
|
|
19
48
|
export interface CircuitBreakerStats {
|
|
20
49
|
state: CircuitBreakerState;
|
|
21
50
|
totalCalls: number;
|
|
@@ -28,6 +57,9 @@ export interface CircuitBreakerStats {
|
|
|
28
57
|
failureRate: number;
|
|
29
58
|
uptime: number;
|
|
30
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* Circuit breaker execution result
|
|
62
|
+
*/
|
|
31
63
|
export type CircuitBreakerResult<T> = {
|
|
32
64
|
success: true;
|
|
33
65
|
data: T;
|
|
@@ -37,16 +69,25 @@ export type CircuitBreakerResult<T> = {
|
|
|
37
69
|
error: CircuitBreakerError;
|
|
38
70
|
executionTime: number;
|
|
39
71
|
};
|
|
72
|
+
/**
|
|
73
|
+
* Base circuit breaker error
|
|
74
|
+
*/
|
|
40
75
|
export declare class CircuitBreakerError extends Error {
|
|
41
76
|
readonly circuitName: string;
|
|
42
77
|
readonly state: CircuitBreakerState;
|
|
43
78
|
readonly timestamp: Date;
|
|
44
79
|
constructor(message: string, circuitName: string, state: CircuitBreakerState);
|
|
45
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* Circuit open error (fast-fail)
|
|
83
|
+
*/
|
|
46
84
|
export declare class CircuitOpenError extends CircuitBreakerError {
|
|
47
85
|
readonly nextAttemptTime: Date;
|
|
48
86
|
constructor(circuitName: string, nextAttemptTime: Date);
|
|
49
87
|
}
|
|
88
|
+
/**
|
|
89
|
+
* Circuit Breaker with sliding window failure tracking and integrated observability
|
|
90
|
+
*/
|
|
50
91
|
export declare class CircuitBreaker {
|
|
51
92
|
private state;
|
|
52
93
|
private failureWindow;
|
|
@@ -64,30 +105,99 @@ export declare class CircuitBreaker {
|
|
|
64
105
|
private readonly enableDetailedLogging;
|
|
65
106
|
private lastStateChangeTime;
|
|
66
107
|
constructor(config: CircuitBreakerConfig);
|
|
108
|
+
/**
|
|
109
|
+
* Execute a function with circuit breaker protection
|
|
110
|
+
*/
|
|
67
111
|
execute<T>(fn: () => Promise<T>): Promise<T>;
|
|
112
|
+
/**
|
|
113
|
+
* Execute with result wrapper (no throwing)
|
|
114
|
+
*/
|
|
68
115
|
executeWithResult<T>(fn: () => Promise<T>): Promise<CircuitBreakerResult<T>>;
|
|
116
|
+
/**
|
|
117
|
+
* Handle successful execution
|
|
118
|
+
*/
|
|
69
119
|
private onSuccess;
|
|
120
|
+
/**
|
|
121
|
+
* Handle failed execution
|
|
122
|
+
*/
|
|
70
123
|
private onFailure;
|
|
124
|
+
/**
|
|
125
|
+
* Trip the circuit to OPEN state
|
|
126
|
+
*/
|
|
71
127
|
private tripCircuit;
|
|
128
|
+
/**
|
|
129
|
+
* Change circuit state with logging and metrics
|
|
130
|
+
*/
|
|
72
131
|
private changeState;
|
|
132
|
+
/**
|
|
133
|
+
* Record current metrics
|
|
134
|
+
*/
|
|
73
135
|
private recordMetrics;
|
|
136
|
+
/**
|
|
137
|
+
* Reset failure count (when circuit is healthy)
|
|
138
|
+
*/
|
|
74
139
|
private resetFailureCount;
|
|
140
|
+
/**
|
|
141
|
+
* Get current circuit breaker statistics
|
|
142
|
+
*/
|
|
75
143
|
getStats(): CircuitBreakerStats;
|
|
144
|
+
/**
|
|
145
|
+
* Check if circuit is available for calls
|
|
146
|
+
*/
|
|
76
147
|
isCallable(): boolean;
|
|
148
|
+
/**
|
|
149
|
+
* Force circuit to CLOSED state (for testing/admin)
|
|
150
|
+
*/
|
|
77
151
|
reset(): void;
|
|
152
|
+
/**
|
|
153
|
+
* Force circuit to OPEN state (for testing/admin)
|
|
154
|
+
*/
|
|
78
155
|
trip(): void;
|
|
156
|
+
/**
|
|
157
|
+
* Get circuit name
|
|
158
|
+
*/
|
|
79
159
|
getName(): string;
|
|
160
|
+
/**
|
|
161
|
+
* Get current state
|
|
162
|
+
*/
|
|
80
163
|
getState(): CircuitBreakerState;
|
|
81
164
|
}
|
|
165
|
+
/**
|
|
166
|
+
* Create a circuit breaker with default configuration for database operations
|
|
167
|
+
*/
|
|
82
168
|
export declare function createDatabaseCircuitBreaker(name: string): CircuitBreaker;
|
|
169
|
+
/**
|
|
170
|
+
* Create a circuit breaker with default configuration for external API calls
|
|
171
|
+
*/
|
|
83
172
|
export declare function createApiCircuitBreaker(name: string): CircuitBreaker;
|
|
173
|
+
/**
|
|
174
|
+
* Create a circuit breaker registry for managing multiple circuits
|
|
175
|
+
*/
|
|
84
176
|
export declare class CircuitBreakerRegistry {
|
|
85
177
|
private readonly circuits;
|
|
178
|
+
/**
|
|
179
|
+
* Get or create a circuit breaker
|
|
180
|
+
*/
|
|
86
181
|
getOrCreate(name: string, config?: CircuitBreakerConfig): CircuitBreaker;
|
|
182
|
+
/**
|
|
183
|
+
* Get all circuit breakers
|
|
184
|
+
*/
|
|
87
185
|
getAllCircuits(): Map<string, CircuitBreaker>;
|
|
186
|
+
/**
|
|
187
|
+
* Get statistics for all circuits
|
|
188
|
+
*/
|
|
88
189
|
getAllStats(): Record<string, CircuitBreakerStats>;
|
|
190
|
+
/**
|
|
191
|
+
* Reset all circuits
|
|
192
|
+
*/
|
|
89
193
|
resetAll(): void;
|
|
194
|
+
/**
|
|
195
|
+
* Remove a circuit breaker
|
|
196
|
+
*/
|
|
90
197
|
remove(name: string): boolean;
|
|
198
|
+
/**
|
|
199
|
+
* Clear all circuit breakers
|
|
200
|
+
*/
|
|
91
201
|
clear(): void;
|
|
92
202
|
}
|
|
93
203
|
export declare const defaultCircuitBreakerRegistry: CircuitBreakerRegistry;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"circuit-breaker.d.ts","sourceRoot":"","sources":["../../src/resilience/circuit-breaker.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"circuit-breaker.d.ts","sourceRoot":"","sources":["../../src/resilience/circuit-breaker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Circuit Breaker implementation for FreshGuard Core Phase 2
|
|
3
|
+
*
|
|
4
|
+
* Implements the Circuit Breaker pattern to provide resilience against
|
|
5
|
+
* cascading failures and fast-fail behavior for unhealthy services.
|
|
6
|
+
* Includes integrated observability with structured logging and metrics.
|
|
7
|
+
*
|
|
8
|
+
* States: CLOSED → OPEN → HALF_OPEN → CLOSED/OPEN
|
|
9
|
+
*
|
|
10
|
+
* @license MIT
|
|
11
|
+
*/
|
|
1
12
|
import { createComponentLogger } from '../observability/logger.js';
|
|
2
13
|
import { createComponentMetrics } from '../observability/metrics.js';
|
|
14
|
+
// ==============================================
|
|
15
|
+
// Types and Interfaces
|
|
16
|
+
// ==============================================
|
|
17
|
+
/**
|
|
18
|
+
* Circuit breaker states
|
|
19
|
+
*/
|
|
3
20
|
export var CircuitBreakerState;
|
|
4
21
|
(function (CircuitBreakerState) {
|
|
5
22
|
CircuitBreakerState["CLOSED"] = "CLOSED";
|
|
6
23
|
CircuitBreakerState["OPEN"] = "OPEN";
|
|
7
|
-
CircuitBreakerState["HALF_OPEN"] = "HALF_OPEN";
|
|
24
|
+
CircuitBreakerState["HALF_OPEN"] = "HALF_OPEN"; // Testing if service recovered
|
|
8
25
|
})(CircuitBreakerState || (CircuitBreakerState = {}));
|
|
26
|
+
// ==============================================
|
|
27
|
+
// Error Classes
|
|
28
|
+
// ==============================================
|
|
29
|
+
/**
|
|
30
|
+
* Base circuit breaker error
|
|
31
|
+
*/
|
|
9
32
|
export class CircuitBreakerError extends Error {
|
|
10
33
|
circuitName;
|
|
11
34
|
state;
|
|
@@ -18,6 +41,9 @@ export class CircuitBreakerError extends Error {
|
|
|
18
41
|
this.timestamp = new Date();
|
|
19
42
|
}
|
|
20
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Circuit open error (fast-fail)
|
|
46
|
+
*/
|
|
21
47
|
export class CircuitOpenError extends CircuitBreakerError {
|
|
22
48
|
nextAttemptTime;
|
|
23
49
|
constructor(circuitName, nextAttemptTime) {
|
|
@@ -26,6 +52,12 @@ export class CircuitOpenError extends CircuitBreakerError {
|
|
|
26
52
|
this.nextAttemptTime = nextAttemptTime;
|
|
27
53
|
}
|
|
28
54
|
}
|
|
55
|
+
// ==============================================
|
|
56
|
+
// Circuit Breaker Implementation
|
|
57
|
+
// ==============================================
|
|
58
|
+
/**
|
|
59
|
+
* Circuit Breaker with sliding window failure tracking and integrated observability
|
|
60
|
+
*/
|
|
29
61
|
export class CircuitBreaker {
|
|
30
62
|
state = CircuitBreakerState.CLOSED;
|
|
31
63
|
failureWindow = [];
|
|
@@ -46,16 +78,18 @@ export class CircuitBreaker {
|
|
|
46
78
|
this.config = {
|
|
47
79
|
failureThreshold: config.failureThreshold ?? 5,
|
|
48
80
|
successThreshold: config.successThreshold ?? 3,
|
|
49
|
-
recoveryTimeout: config.recoveryTimeout ?? 60000,
|
|
81
|
+
recoveryTimeout: config.recoveryTimeout ?? 60000, // 1 minute
|
|
50
82
|
windowSize: config.windowSize ?? 100,
|
|
51
|
-
errorFilter: config.errorFilter ?? (() => true),
|
|
83
|
+
errorFilter: config.errorFilter ?? (() => true), // Count all errors by default
|
|
52
84
|
name: config.name ?? 'Circuit',
|
|
53
85
|
enableDetailedLogging: config.enableDetailedLogging ?? false
|
|
54
86
|
};
|
|
55
87
|
this.lastStateChangeTime = new Date();
|
|
88
|
+
// Initialize observability
|
|
56
89
|
this.logger = config.logger ?? createComponentLogger('circuit-breaker');
|
|
57
90
|
this.metrics = config.metrics ?? createComponentMetrics('circuit_breaker');
|
|
58
91
|
this.enableDetailedLogging = config.enableDetailedLogging !== false;
|
|
92
|
+
// Validate configuration
|
|
59
93
|
if (this.config.failureThreshold <= 0) {
|
|
60
94
|
throw new Error('Failure threshold must be positive');
|
|
61
95
|
}
|
|
@@ -65,6 +99,7 @@ export class CircuitBreaker {
|
|
|
65
99
|
if (this.config.recoveryTimeout < 0) {
|
|
66
100
|
throw new Error('Recovery timeout cannot be negative');
|
|
67
101
|
}
|
|
102
|
+
// Log circuit breaker initialization
|
|
68
103
|
this.logger.info('Circuit breaker initialized', {
|
|
69
104
|
circuitName: this.config.name,
|
|
70
105
|
failureThreshold: this.config.failureThreshold,
|
|
@@ -72,14 +107,20 @@ export class CircuitBreaker {
|
|
|
72
107
|
recoveryTimeout: this.config.recoveryTimeout,
|
|
73
108
|
windowSize: this.config.windowSize
|
|
74
109
|
});
|
|
110
|
+
// Initialize metrics
|
|
75
111
|
this.recordMetrics();
|
|
76
112
|
}
|
|
113
|
+
/**
|
|
114
|
+
* Execute a function with circuit breaker protection
|
|
115
|
+
*/
|
|
77
116
|
async execute(fn) {
|
|
78
117
|
const startTime = Date.now();
|
|
79
118
|
try {
|
|
119
|
+
// Check if circuit is open
|
|
80
120
|
if (this.state === CircuitBreakerState.OPEN) {
|
|
81
121
|
if (Date.now() < (this.nextAttemptTime?.getTime() ?? 0)) {
|
|
82
122
|
this.rejectedCalls++;
|
|
123
|
+
// Log rejected call
|
|
83
124
|
if (this.enableDetailedLogging) {
|
|
84
125
|
this.logger.debug('Circuit breaker rejected call', {
|
|
85
126
|
circuitName: this.config.name,
|
|
@@ -91,10 +132,12 @@ export class CircuitBreaker {
|
|
|
91
132
|
throw new CircuitOpenError(this.config.name, attemptTime);
|
|
92
133
|
}
|
|
93
134
|
else {
|
|
135
|
+
// Time to attempt recovery
|
|
94
136
|
this.changeState(CircuitBreakerState.HALF_OPEN);
|
|
95
137
|
this.successCount = 0;
|
|
96
138
|
}
|
|
97
139
|
}
|
|
140
|
+
// Execute the function
|
|
98
141
|
const result = await fn();
|
|
99
142
|
const executionTime = Date.now() - startTime;
|
|
100
143
|
this.onSuccess(executionTime);
|
|
@@ -106,6 +149,9 @@ export class CircuitBreaker {
|
|
|
106
149
|
throw error;
|
|
107
150
|
}
|
|
108
151
|
}
|
|
152
|
+
/**
|
|
153
|
+
* Execute with result wrapper (no throwing)
|
|
154
|
+
*/
|
|
109
155
|
async executeWithResult(fn) {
|
|
110
156
|
const startTime = Date.now();
|
|
111
157
|
try {
|
|
@@ -128,12 +174,16 @@ export class CircuitBreaker {
|
|
|
128
174
|
};
|
|
129
175
|
}
|
|
130
176
|
}
|
|
177
|
+
/**
|
|
178
|
+
* Handle successful execution
|
|
179
|
+
*/
|
|
131
180
|
onSuccess(executionTime) {
|
|
132
181
|
this.totalCalls++;
|
|
133
182
|
this.successfulCalls++;
|
|
134
183
|
this.lastSuccessTime = new Date();
|
|
135
184
|
switch (this.state) {
|
|
136
185
|
case CircuitBreakerState.CLOSED:
|
|
186
|
+
// Already closed, nothing to do
|
|
137
187
|
this.resetFailureCount();
|
|
138
188
|
break;
|
|
139
189
|
case CircuitBreakerState.HALF_OPEN:
|
|
@@ -146,10 +196,12 @@ export class CircuitBreaker {
|
|
|
146
196
|
}
|
|
147
197
|
break;
|
|
148
198
|
case CircuitBreakerState.OPEN:
|
|
199
|
+
// This shouldn't happen, but handle gracefully
|
|
149
200
|
this.changeState(CircuitBreakerState.HALF_OPEN);
|
|
150
201
|
this.successCount = 1;
|
|
151
202
|
break;
|
|
152
203
|
}
|
|
204
|
+
// Log successful execution
|
|
153
205
|
if (this.enableDetailedLogging) {
|
|
154
206
|
this.logger.debug('Circuit breaker execution succeeded', {
|
|
155
207
|
circuitName: this.config.name,
|
|
@@ -159,13 +211,19 @@ export class CircuitBreaker {
|
|
|
159
211
|
totalCalls: this.totalCalls
|
|
160
212
|
});
|
|
161
213
|
}
|
|
214
|
+
// Record metrics
|
|
162
215
|
this.recordMetrics();
|
|
163
216
|
}
|
|
217
|
+
/**
|
|
218
|
+
* Handle failed execution
|
|
219
|
+
*/
|
|
164
220
|
onFailure(error, executionTime) {
|
|
165
221
|
this.totalCalls++;
|
|
166
222
|
this.failedCalls++;
|
|
167
223
|
this.lastFailureTime = new Date();
|
|
224
|
+
// Check if this error should be counted
|
|
168
225
|
if (!this.config.errorFilter(error)) {
|
|
226
|
+
// Log filtered error
|
|
169
227
|
if (this.enableDetailedLogging) {
|
|
170
228
|
this.logger.debug('Circuit breaker execution failed (filtered)', {
|
|
171
229
|
circuitName: this.config.name,
|
|
@@ -177,9 +235,11 @@ export class CircuitBreaker {
|
|
|
177
235
|
}
|
|
178
236
|
return;
|
|
179
237
|
}
|
|
238
|
+
// Add failure to sliding window
|
|
180
239
|
const now = new Date();
|
|
181
240
|
this.failureWindow.push(now);
|
|
182
|
-
|
|
241
|
+
// Clean old failures outside window
|
|
242
|
+
const cutoff = new Date(now.getTime() - (5 * 60 * 1000)); // 5 minute window
|
|
183
243
|
this.failureWindow = this.failureWindow.filter(time => time > cutoff);
|
|
184
244
|
const previousState = this.state;
|
|
185
245
|
switch (this.state) {
|
|
@@ -189,12 +249,15 @@ export class CircuitBreaker {
|
|
|
189
249
|
}
|
|
190
250
|
break;
|
|
191
251
|
case CircuitBreakerState.HALF_OPEN:
|
|
252
|
+
// Any failure in half-open state trips the circuit
|
|
192
253
|
this.tripCircuit();
|
|
193
254
|
break;
|
|
194
255
|
case CircuitBreakerState.OPEN:
|
|
256
|
+
// Already open, extend the timeout
|
|
195
257
|
this.nextAttemptTime = new Date(Date.now() + this.config.recoveryTimeout);
|
|
196
258
|
break;
|
|
197
259
|
}
|
|
260
|
+
// Log failed execution
|
|
198
261
|
if (this.enableDetailedLogging) {
|
|
199
262
|
this.logger.warn('Circuit breaker execution failed', {
|
|
200
263
|
circuitName: this.config.name,
|
|
@@ -208,6 +271,7 @@ export class CircuitBreaker {
|
|
|
208
271
|
});
|
|
209
272
|
}
|
|
210
273
|
else {
|
|
274
|
+
// Always log state changes, even with minimal logging
|
|
211
275
|
if (previousState !== this.state) {
|
|
212
276
|
this.logger.warn('Circuit breaker state changed due to failure', {
|
|
213
277
|
circuitName: this.config.name,
|
|
@@ -217,12 +281,17 @@ export class CircuitBreaker {
|
|
|
217
281
|
});
|
|
218
282
|
}
|
|
219
283
|
}
|
|
284
|
+
// Record metrics
|
|
220
285
|
this.recordMetrics();
|
|
221
286
|
}
|
|
287
|
+
/**
|
|
288
|
+
* Trip the circuit to OPEN state
|
|
289
|
+
*/
|
|
222
290
|
tripCircuit() {
|
|
223
291
|
this.changeState(CircuitBreakerState.OPEN);
|
|
224
292
|
this.successCount = 0;
|
|
225
293
|
this.nextAttemptTime = new Date(Date.now() + this.config.recoveryTimeout);
|
|
294
|
+
// Log circuit tripping (always log this important event)
|
|
226
295
|
this.logger.error('Circuit breaker tripped to OPEN state', {
|
|
227
296
|
circuitName: this.config.name,
|
|
228
297
|
failureCount: this.failureWindow.length,
|
|
@@ -230,6 +299,9 @@ export class CircuitBreaker {
|
|
|
230
299
|
nextAttemptTime: this.nextAttemptTime.toISOString()
|
|
231
300
|
});
|
|
232
301
|
}
|
|
302
|
+
/**
|
|
303
|
+
* Change circuit state with logging and metrics
|
|
304
|
+
*/
|
|
233
305
|
changeState(newState) {
|
|
234
306
|
const previousState = this.state;
|
|
235
307
|
if (previousState === newState) {
|
|
@@ -237,21 +309,32 @@ export class CircuitBreaker {
|
|
|
237
309
|
}
|
|
238
310
|
this.state = newState;
|
|
239
311
|
this.lastStateChangeTime = new Date();
|
|
312
|
+
// Log state change (always log state changes)
|
|
240
313
|
this.logger.info('Circuit breaker state changed', {
|
|
241
314
|
circuitName: this.config.name,
|
|
242
315
|
previousState,
|
|
243
316
|
newState,
|
|
244
317
|
timeInPreviousState: Date.now() - this.lastStateChangeTime.getTime()
|
|
245
318
|
});
|
|
319
|
+
// Record metrics
|
|
246
320
|
this.recordMetrics();
|
|
247
321
|
}
|
|
322
|
+
/**
|
|
323
|
+
* Record current metrics
|
|
324
|
+
*/
|
|
248
325
|
recordMetrics() {
|
|
249
326
|
this.metrics.recordCircuitBreakerState(this.config.name, this.state, this.failedCalls, this.successfulCalls);
|
|
250
327
|
}
|
|
328
|
+
/**
|
|
329
|
+
* Reset failure count (when circuit is healthy)
|
|
330
|
+
*/
|
|
251
331
|
resetFailureCount() {
|
|
252
332
|
this.failureWindow = [];
|
|
253
333
|
this.successCount = 0;
|
|
254
334
|
}
|
|
335
|
+
/**
|
|
336
|
+
* Get current circuit breaker statistics
|
|
337
|
+
*/
|
|
255
338
|
getStats() {
|
|
256
339
|
const failureRate = this.totalCalls > 0
|
|
257
340
|
? (this.failedCalls / this.totalCalls) * 100
|
|
@@ -272,6 +355,9 @@ export class CircuitBreaker {
|
|
|
272
355
|
uptime: Math.round(uptime * 100) / 100
|
|
273
356
|
};
|
|
274
357
|
}
|
|
358
|
+
/**
|
|
359
|
+
* Check if circuit is available for calls
|
|
360
|
+
*/
|
|
275
361
|
isCallable() {
|
|
276
362
|
switch (this.state) {
|
|
277
363
|
case CircuitBreakerState.CLOSED:
|
|
@@ -282,6 +368,9 @@ export class CircuitBreaker {
|
|
|
282
368
|
return Date.now() >= (this.nextAttemptTime?.getTime() ?? 0);
|
|
283
369
|
}
|
|
284
370
|
}
|
|
371
|
+
/**
|
|
372
|
+
* Force circuit to CLOSED state (for testing/admin)
|
|
373
|
+
*/
|
|
285
374
|
reset() {
|
|
286
375
|
this.state = CircuitBreakerState.CLOSED;
|
|
287
376
|
this.resetFailureCount();
|
|
@@ -293,24 +382,40 @@ export class CircuitBreaker {
|
|
|
293
382
|
this.lastFailureTime = null;
|
|
294
383
|
this.lastSuccessTime = null;
|
|
295
384
|
}
|
|
385
|
+
/**
|
|
386
|
+
* Force circuit to OPEN state (for testing/admin)
|
|
387
|
+
*/
|
|
296
388
|
trip() {
|
|
297
389
|
this.tripCircuit();
|
|
298
390
|
}
|
|
391
|
+
/**
|
|
392
|
+
* Get circuit name
|
|
393
|
+
*/
|
|
299
394
|
getName() {
|
|
300
395
|
return this.config.name;
|
|
301
396
|
}
|
|
397
|
+
/**
|
|
398
|
+
* Get current state
|
|
399
|
+
*/
|
|
302
400
|
getState() {
|
|
303
401
|
return this.state;
|
|
304
402
|
}
|
|
305
403
|
}
|
|
404
|
+
// ==============================================
|
|
405
|
+
// Factory Functions
|
|
406
|
+
// ==============================================
|
|
407
|
+
/**
|
|
408
|
+
* Create a circuit breaker with default configuration for database operations
|
|
409
|
+
*/
|
|
306
410
|
export function createDatabaseCircuitBreaker(name) {
|
|
307
411
|
return new CircuitBreaker({
|
|
308
412
|
name: `db-${name}`,
|
|
309
413
|
failureThreshold: 5,
|
|
310
414
|
successThreshold: 3,
|
|
311
|
-
recoveryTimeout: 60000,
|
|
415
|
+
recoveryTimeout: 60000, // 1 minute
|
|
312
416
|
windowSize: 100,
|
|
313
417
|
errorFilter: (error) => {
|
|
418
|
+
// Don't count validation errors or authentication errors
|
|
314
419
|
return !(error.name === 'ValidationError' ||
|
|
315
420
|
error.name === 'AuthenticationError' ||
|
|
316
421
|
error.message.includes('authentication') ||
|
|
@@ -318,14 +423,18 @@ export function createDatabaseCircuitBreaker(name) {
|
|
|
318
423
|
}
|
|
319
424
|
});
|
|
320
425
|
}
|
|
426
|
+
/**
|
|
427
|
+
* Create a circuit breaker with default configuration for external API calls
|
|
428
|
+
*/
|
|
321
429
|
export function createApiCircuitBreaker(name) {
|
|
322
430
|
return new CircuitBreaker({
|
|
323
431
|
name: `api-${name}`,
|
|
324
432
|
failureThreshold: 3,
|
|
325
433
|
successThreshold: 2,
|
|
326
|
-
recoveryTimeout: 30000,
|
|
434
|
+
recoveryTimeout: 30000, // 30 seconds
|
|
327
435
|
windowSize: 50,
|
|
328
436
|
errorFilter: (error) => {
|
|
437
|
+
// Count 5xx errors but not 4xx client errors
|
|
329
438
|
if (error.message.includes('status')) {
|
|
330
439
|
const statusMatch = /status\s+(\d+)/i.exec(error.message);
|
|
331
440
|
if (statusMatch?.[1]) {
|
|
@@ -337,8 +446,14 @@ export function createApiCircuitBreaker(name) {
|
|
|
337
446
|
}
|
|
338
447
|
});
|
|
339
448
|
}
|
|
449
|
+
/**
|
|
450
|
+
* Create a circuit breaker registry for managing multiple circuits
|
|
451
|
+
*/
|
|
340
452
|
export class CircuitBreakerRegistry {
|
|
341
453
|
circuits = new Map();
|
|
454
|
+
/**
|
|
455
|
+
* Get or create a circuit breaker
|
|
456
|
+
*/
|
|
342
457
|
getOrCreate(name, config) {
|
|
343
458
|
let circuit = this.circuits.get(name);
|
|
344
459
|
if (!circuit) {
|
|
@@ -354,9 +469,15 @@ export class CircuitBreakerRegistry {
|
|
|
354
469
|
}
|
|
355
470
|
return circuit;
|
|
356
471
|
}
|
|
472
|
+
/**
|
|
473
|
+
* Get all circuit breakers
|
|
474
|
+
*/
|
|
357
475
|
getAllCircuits() {
|
|
358
476
|
return new Map(this.circuits);
|
|
359
477
|
}
|
|
478
|
+
/**
|
|
479
|
+
* Get statistics for all circuits
|
|
480
|
+
*/
|
|
360
481
|
getAllStats() {
|
|
361
482
|
const stats = {};
|
|
362
483
|
for (const [name, circuit] of this.circuits) {
|
|
@@ -364,17 +485,30 @@ export class CircuitBreakerRegistry {
|
|
|
364
485
|
}
|
|
365
486
|
return stats;
|
|
366
487
|
}
|
|
488
|
+
/**
|
|
489
|
+
* Reset all circuits
|
|
490
|
+
*/
|
|
367
491
|
resetAll() {
|
|
368
492
|
for (const circuit of this.circuits.values()) {
|
|
369
493
|
circuit.reset();
|
|
370
494
|
}
|
|
371
495
|
}
|
|
496
|
+
/**
|
|
497
|
+
* Remove a circuit breaker
|
|
498
|
+
*/
|
|
372
499
|
remove(name) {
|
|
373
500
|
return this.circuits.delete(name);
|
|
374
501
|
}
|
|
502
|
+
/**
|
|
503
|
+
* Clear all circuit breakers
|
|
504
|
+
*/
|
|
375
505
|
clear() {
|
|
376
506
|
this.circuits.clear();
|
|
377
507
|
}
|
|
378
508
|
}
|
|
509
|
+
// ==============================================
|
|
510
|
+
// Default Registry
|
|
511
|
+
// ==============================================
|
|
512
|
+
// Global circuit breaker registry (can be replaced with DI in production)
|
|
379
513
|
export const defaultCircuitBreakerRegistry = new CircuitBreakerRegistry();
|
|
380
514
|
//# sourceMappingURL=circuit-breaker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../../src/resilience/circuit-breaker.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../../src/resilience/circuit-breaker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,iDAAiD;AACjD,uBAAuB;AACvB,iDAAiD;AAEjD;;GAEG;AACH,MAAM,CAAN,IAAY,mBAIX;AAJD,WAAY,mBAAmB;IAC7B,wCAAiB,CAAA;IACjB,oCAAa,CAAA;IACb,8CAAuB,CAAA,CAAC,+BAA+B;AACzD,CAAC,EAJW,mBAAmB,KAAnB,mBAAmB,QAI9B;AAuDD,iDAAiD;AACjD,gBAAgB;AAChB,iDAAiD;AAEjD;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5B,WAAW,CAAS;IACpB,KAAK,CAAsB;IAC3B,SAAS,CAAO;IAEhC,YAAY,OAAe,EAAE,WAAmB,EAAE,KAA0B;QAC1E,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;IAC9B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,mBAAmB;IACvC,eAAe,CAAO;IAEtC,YAAY,WAAmB,EAAE,eAAqB;QACpD,KAAK,CACH,oBAAoB,WAAW,sCAAsC,EACrE,WAAW,EACX,mBAAmB,CAAC,IAAI,CACzB,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IACzC,CAAC;CACF;AAED,iDAAiD;AACjD,iCAAiC;AACjC,iDAAiD;AAEjD;;GAEG;AACH,MAAM,OAAO,cAAc;IACjB,KAAK,GAAwB,mBAAmB,CAAC,MAAM,CAAC;IACxD,aAAa,GAAW,EAAE,CAAC;IAC3B,YAAY,GAAG,CAAC,CAAC;IACjB,UAAU,GAAG,CAAC,CAAC;IACf,eAAe,GAAG,CAAC,CAAC;IACpB,WAAW,GAAG,CAAC,CAAC;IAChB,aAAa,GAAG,CAAC,CAAC;IAClB,eAAe,GAAgB,IAAI,CAAC;IACpC,eAAe,GAAgB,IAAI,CAAC;IACpC,eAAe,GAAgB,IAAI,CAAC;IAC3B,MAAM,CAA6D;IACnE,MAAM,CAAmB;IACzB,OAAO,CAAmB;IAC1B,qBAAqB,CAAU;IACxC,mBAAmB,CAAO;IAElC,YAAY,MAA4B;QACtC,IAAI,CAAC,MAAM,GAAG;YACZ,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,CAAC;YAC9C,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,CAAC;YAC9C,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,KAAK,EAAE,WAAW;YAC7D,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,GAAG;YACpC,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,CAAC,GAAY,EAAE,CAAC,IAAI,CAAC,EAAE,8BAA8B;YACxF,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,SAAS;YAC9B,qBAAqB,EAAE,MAAM,CAAC,qBAAqB,IAAI,KAAK;SAC7D,CAAC;QAEF,IAAI,CAAC,mBAAmB,GAAG,IAAI,IAAI,EAAE,CAAC;QAEtC,2BAA2B;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,qBAAqB,CAAC,iBAAiB,CAAC,CAAC;QACxE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,sBAAsB,CAAC,iBAAiB,CAAC,CAAC;QAC3E,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,KAAK,KAAK,CAAC;QAEpE,yBAAyB;QACzB,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,IAAI,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,IAAI,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;QAED,qCAAqC;QACrC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE;YAC9C,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;YAC7B,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB;YAC9C,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB;YAC9C,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe;YAC5C,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;SACnC,CAAC,CAAC;QAEH,qBAAqB;QACrB,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAI,EAAoB;QACnC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,IAAI,CAAC;YACH,2BAA2B;YAC3B,IAAI,IAAI,CAAC,KAAK,KAAK,mBAAmB,CAAC,IAAI,EAAE,CAAC;gBAC5C,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;oBACxD,IAAI,CAAC,aAAa,EAAE,CAAC;oBAErB,oBAAoB;oBACpB,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;wBAC/B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE;4BACjD,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;4BAC7B,aAAa,EAAE,IAAI,CAAC,aAAa;4BACjC,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,WAAW,EAAE,IAAI,SAAS;yBAClE,CAAC,CAAC;oBACL,CAAC;oBAED,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,IAAI,EAAE,CAAC;oBACvD,MAAM,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;gBAC5D,CAAC;qBAAM,CAAC;oBACN,2BAA2B;oBAC3B,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;oBAChD,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;gBACxB,CAAC;YACH,CAAC;YAED,uBAAuB;YACvB,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC;YAC1B,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAE7C,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;YAC9B,OAAO,MAAM,CAAC;QAEhB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAC7C,IAAI,CAAC,SAAS,CAAC,KAAc,EAAE,aAAa,CAAC,CAAC;YAC9C,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CAAI,EAAoB;QAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACtC,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAE7C,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,MAAM;gBACZ,aAAa;aACd,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAE7C,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,mBAAmB;oBACzC,CAAC,CAAC,KAAK;oBACP,CAAC,CAAC,IAAI,mBAAmB,CACpB,KAAe,CAAC,OAAO,EACxB,IAAI,CAAC,MAAM,CAAC,IAAI,EAChB,IAAI,CAAC,KAAK,CACX;gBACL,aAAa;aACd,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,SAAS,CAAC,aAAqB;QACrC,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,eAAe,GAAG,IAAI,IAAI,EAAE,CAAC;QAElC,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;YACnB,KAAK,mBAAmB,CAAC,MAAM;gBAC7B,gCAAgC;gBAChC,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACzB,MAAM;YAER,KAAK,mBAAmB,CAAC,SAAS;gBAChC,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;oBACtD,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;oBAC7C,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;oBACtB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;oBAC5B,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC3B,CAAC;gBACD,MAAM;YAER,KAAK,mBAAmB,CAAC,IAAI;gBAC3B,+CAA+C;gBAC/C,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;gBAChD,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;gBACtB,MAAM;QACV,CAAC;QAED,2BAA2B;QAC3B,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,EAAE;gBACvD,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;gBAC7B,aAAa;gBACb,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,UAAU,EAAE,IAAI,CAAC,UAAU;aAC5B,CAAC,CAAC;QACL,CAAC;QAED,iBAAiB;QACjB,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACK,SAAS,CAAC,KAAY,EAAE,aAAqB;QACnD,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,eAAe,GAAG,IAAI,IAAI,EAAE,CAAC;QAElC,wCAAwC;QACxC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;YACpC,qBAAqB;YACrB,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC/B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,6CAA6C,EAAE;oBAC/D,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;oBAC7B,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC,IAAI;oBACjC,YAAY,EAAE,KAAK,CAAC,OAAO;oBAC3B,aAAa;oBACb,KAAK,EAAE,IAAI,CAAC,KAAK;iBAClB,CAAC,CAAC;YACL,CAAC;YACD,OAAO;QACT,CAAC;QAED,gCAAgC;QAChC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE7B,oCAAoC;QACpC,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,kBAAkB;QAC5E,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;QAEtE,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC;QAEjC,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;YACnB,KAAK,mBAAmB,CAAC,MAAM;gBAC7B,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;oBAC9D,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,CAAC;gBACD,MAAM;YAER,KAAK,mBAAmB,CAAC,SAAS;gBAChC,mDAAmD;gBACnD,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,MAAM;YAER,KAAK,mBAAmB,CAAC,IAAI;gBAC3B,mCAAmC;gBACnC,IAAI,CAAC,eAAe,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;gBAC1E,MAAM;QACV,CAAC;QAED,uBAAuB;QACvB,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kCAAkC,EAAE;gBACnD,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;gBAC7B,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC,IAAI;gBACjC,YAAY,EAAE,KAAK,CAAC,OAAO;gBAC3B,aAAa;gBACb,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM;gBACvC,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB;gBAC9C,YAAY,EAAE,aAAa,KAAK,IAAI,CAAC,KAAK;aAC3C,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,sDAAsD;YACtD,IAAI,aAAa,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;gBACjC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8CAA8C,EAAE;oBAC/D,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;oBAC7B,aAAa;oBACb,QAAQ,EAAE,IAAI,CAAC,KAAK;oBACpB,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM;iBACxC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,iBAAiB;QACjB,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACK,WAAW;QACjB,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,eAAe,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAE1E,yDAAyD;QACzD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uCAAuC,EAAE;YACzD,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;YAC7B,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM;YACvC,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe;YAC5C,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE;SACpD,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,QAA6B;QAC/C,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC;QACjC,IAAI,aAAa,KAAK,QAAQ,EAAE,CAAC;YAC/B,OAAO;QACT,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;QACtB,IAAI,CAAC,mBAAmB,GAAG,IAAI,IAAI,EAAE,CAAC;QAEtC,8CAA8C;QAC9C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,EAAE;YAChD,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;YAC7B,aAAa;YACb,QAAQ;YACR,mBAAmB,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE;SACrE,CAAC,CAAC;QAEH,iBAAiB;QACjB,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACK,aAAa;QACnB,IAAI,CAAC,OAAO,CAAC,yBAAyB,CACpC,IAAI,CAAC,MAAM,CAAC,IAAI,EAChB,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,eAAe,CACrB,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,iBAAiB;QACvB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC;YACrC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG;YAC5C,CAAC,CAAC,CAAC,CAAC;QAEN,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC;YAChC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC;YAClD,CAAC,CAAC,GAAG,CAAC;QAER,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC,GAAG,GAAG;YAChD,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG;SACvC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,UAAU;QACR,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;YACnB,KAAK,mBAAmB,CAAC,MAAM;gBAC7B,OAAO,IAAI,CAAC;YACd,KAAK,mBAAmB,CAAC,SAAS;gBAChC,OAAO,IAAI,CAAC;YACd,KAAK,mBAAmB,CAAC,IAAI;gBAC3B,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,KAAK,GAAG,mBAAmB,CAAC,MAAM,CAAC;QACxC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,IAAI;QACF,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,OAAO;QACL,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF;AAED,iDAAiD;AACjD,oBAAoB;AACpB,iDAAiD;AAEjD;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAAC,IAAY;IACvD,OAAO,IAAI,cAAc,CAAC;QACxB,IAAI,EAAE,MAAM,IAAI,EAAE;QAClB,gBAAgB,EAAE,CAAC;QACnB,gBAAgB,EAAE,CAAC;QACnB,eAAe,EAAE,KAAK,EAAE,WAAW;QACnC,UAAU,EAAE,GAAG;QACf,WAAW,EAAE,CAAC,KAAK,EAAW,EAAE;YAC9B,yDAAyD;YACzD,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,iBAAiB;gBAChC,KAAK,CAAC,IAAI,KAAK,qBAAqB;gBACpC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC;gBACxC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;QACpD,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAY;IAClD,OAAO,IAAI,cAAc,CAAC;QACxB,IAAI,EAAE,OAAO,IAAI,EAAE;QACnB,gBAAgB,EAAE,CAAC;QACnB,gBAAgB,EAAE,CAAC;QACnB,eAAe,EAAE,KAAK,EAAE,aAAa;QACrC,UAAU,EAAE,EAAE;QACd,WAAW,EAAE,CAAC,KAAK,EAAW,EAAE;YAC9B,6CAA6C;YAC7C,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACrC,MAAM,WAAW,GAAG,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC1D,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrB,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;oBACxC,OAAO,MAAM,IAAI,GAAG,CAAC;gBACvB,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,sBAAsB;IAChB,QAAQ,GAAG,IAAI,GAAG,EAA0B,CAAC;IAE9D;;OAEG;IACH,WAAW,CAAC,IAAY,EAAE,MAA6B;QACrD,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEtC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gBACjD,IAAI;gBACJ,gBAAgB,EAAE,CAAC;gBACnB,gBAAgB,EAAE,CAAC;gBACnB,eAAe,EAAE,KAAK;gBACtB,UAAU,EAAE,GAAG;aAChB,CAAC;YACF,OAAO,GAAG,IAAI,cAAc,CAAC,WAAW,CAAC,CAAC;YAC1C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACnC,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,WAAW;QACT,MAAM,KAAK,GAAwC,EAAE,CAAC;QAEtD,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QACnC,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YAC7C,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,IAAY;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;CACF;AAED,iDAAiD;AACjD,mBAAmB;AACnB,iDAAiD;AAEjD,0EAA0E;AAC1E,MAAM,CAAC,MAAM,6BAA6B,GAAG,IAAI,sBAAsB,EAAE,CAAC"}
|