@felixgeelhaar/govee-api-client 1.1.0 → 2.0.1

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 (68) hide show
  1. package/README.md +160 -7
  2. package/dist/GoveeClient.d.ts +31 -0
  3. package/dist/GoveeClient.d.ts.map +1 -1
  4. package/dist/GoveeClient.js +33 -0
  5. package/dist/GoveeClient.js.map +1 -1
  6. package/dist/errors/GoveeApiError.d.ts +1 -1
  7. package/dist/errors/GoveeApiError.d.ts.map +1 -1
  8. package/dist/errors/GoveeApiError.js +9 -2
  9. package/dist/errors/GoveeApiError.js.map +1 -1
  10. package/dist/errors/ValidationError.d.ts +28 -0
  11. package/dist/errors/ValidationError.d.ts.map +1 -0
  12. package/dist/errors/ValidationError.js +44 -0
  13. package/dist/errors/ValidationError.js.map +1 -0
  14. package/dist/errors/index.d.ts +1 -0
  15. package/dist/errors/index.d.ts.map +1 -1
  16. package/dist/errors/index.js +1 -0
  17. package/dist/errors/index.js.map +1 -1
  18. package/dist/index.d.ts +1 -0
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +2 -0
  21. package/dist/index.js.map +1 -1
  22. package/dist/infrastructure/GoveeDeviceRepository.d.ts.map +1 -1
  23. package/dist/infrastructure/GoveeDeviceRepository.js +26 -3
  24. package/dist/infrastructure/GoveeDeviceRepository.js.map +1 -1
  25. package/dist/infrastructure/SlidingWindowRateLimiter.d.ts +83 -0
  26. package/dist/infrastructure/SlidingWindowRateLimiter.d.ts.map +1 -0
  27. package/dist/infrastructure/SlidingWindowRateLimiter.js +218 -0
  28. package/dist/infrastructure/SlidingWindowRateLimiter.js.map +1 -0
  29. package/dist/infrastructure/index.d.ts +2 -0
  30. package/dist/infrastructure/index.d.ts.map +1 -1
  31. package/dist/infrastructure/index.js +2 -0
  32. package/dist/infrastructure/index.js.map +1 -1
  33. package/dist/infrastructure/response-schemas.d.ts +82 -0
  34. package/dist/infrastructure/response-schemas.d.ts.map +1 -0
  35. package/dist/infrastructure/response-schemas.js +59 -0
  36. package/dist/infrastructure/response-schemas.js.map +1 -0
  37. package/dist/infrastructure/retry/IntegrationGuide.d.ts +133 -0
  38. package/dist/infrastructure/retry/IntegrationGuide.d.ts.map +1 -0
  39. package/dist/infrastructure/retry/IntegrationGuide.js +295 -0
  40. package/dist/infrastructure/retry/IntegrationGuide.js.map +1 -0
  41. package/dist/infrastructure/retry/RetryConfigPresets.d.ts +114 -0
  42. package/dist/infrastructure/retry/RetryConfigPresets.d.ts.map +1 -0
  43. package/dist/infrastructure/retry/RetryConfigPresets.js +406 -0
  44. package/dist/infrastructure/retry/RetryConfigPresets.js.map +1 -0
  45. package/dist/infrastructure/retry/RetryPolicy.d.ts +148 -0
  46. package/dist/infrastructure/retry/RetryPolicy.d.ts.map +1 -0
  47. package/dist/infrastructure/retry/RetryPolicy.js +373 -0
  48. package/dist/infrastructure/retry/RetryPolicy.js.map +1 -0
  49. package/dist/infrastructure/retry/RetryableRepository.d.ts +75 -0
  50. package/dist/infrastructure/retry/RetryableRepository.d.ts.map +1 -0
  51. package/dist/infrastructure/retry/RetryableRepository.js +142 -0
  52. package/dist/infrastructure/retry/RetryableRepository.js.map +1 -0
  53. package/dist/infrastructure/retry/RetryableRequest.d.ts +132 -0
  54. package/dist/infrastructure/retry/RetryableRequest.d.ts.map +1 -0
  55. package/dist/infrastructure/retry/RetryableRequest.js +248 -0
  56. package/dist/infrastructure/retry/RetryableRequest.js.map +1 -0
  57. package/dist/infrastructure/retry/index.d.ts +35 -0
  58. package/dist/infrastructure/retry/index.d.ts.map +1 -0
  59. package/dist/infrastructure/retry/index.js +36 -0
  60. package/dist/infrastructure/retry/index.js.map +1 -0
  61. package/dist/services/GoveeControlService.d.ts +53 -0
  62. package/dist/services/GoveeControlService.d.ts.map +1 -1
  63. package/dist/services/GoveeControlService.js +138 -12
  64. package/dist/services/GoveeControlService.js.map +1 -1
  65. package/docs/EXAMPLES.md +799 -0
  66. package/docs/LLM_API_REFERENCE.md +425 -0
  67. package/docs/TYPE_DEFINITIONS.md +803 -0
  68. package/package.json +25 -16
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Integration Guide for Retry Logic with Govee API Client
3
+ *
4
+ * This file provides comprehensive examples and integration patterns for
5
+ * adding retry logic to the Govee API client after rate limiting is implemented.
6
+ */
7
+ import { Logger } from 'pino';
8
+ import { GoveeControlService } from '../../services/GoveeControlService';
9
+ import { RetryPolicy, RetryableRepository } from './index';
10
+ /**
11
+ * INTEGRATION EXAMPLE 1: Basic Retry-Enabled Repository
12
+ *
13
+ * This example shows how to wrap the existing GoveeDeviceRepository
14
+ * with retry functionality using default Govee API optimized settings.
15
+ */
16
+ export declare function createBasicRetryRepository(apiKey: string, logger?: Logger): RetryableRepository;
17
+ /**
18
+ * INTEGRATION EXAMPLE 2: Production-Ready Service with Retry Logic
19
+ *
20
+ * This example shows how to integrate retry logic into the GoveeControlService
21
+ * for production environments with conservative retry policies.
22
+ */
23
+ export declare function createProductionGoveeService(apiKey: string, logger: Logger): GoveeControlService;
24
+ /**
25
+ * INTEGRATION EXAMPLE 3: Custom Retry Configuration for Specific Use Cases
26
+ *
27
+ * This example demonstrates creating custom retry policies for different
28
+ * operational scenarios.
29
+ */
30
+ export declare class CustomRetryConfigurations {
31
+ /**
32
+ * Configuration for bulk operations that need to be resilient
33
+ */
34
+ static createBulkOperationConfig(logger?: Logger): RetryPolicy;
35
+ /**
36
+ * Configuration for real-time operations that need fast failure
37
+ */
38
+ static createRealTimeConfig(logger?: Logger): RetryPolicy;
39
+ /**
40
+ * Configuration optimized for rate-limited APIs
41
+ */
42
+ static createRateLimitOptimizedConfig(logger?: Logger): RetryPolicy;
43
+ }
44
+ /**
45
+ * INTEGRATION EXAMPLE 4: Service with Multiple Retry Strategies
46
+ *
47
+ * This example shows how to use different retry strategies for different
48
+ * types of operations within the same service.
49
+ */
50
+ export declare class AdvancedGoveeService {
51
+ private readonly bulkRepository;
52
+ private readonly realTimeRepository;
53
+ private readonly baseRepository;
54
+ private readonly logger;
55
+ constructor(apiKey: string, logger: Logger);
56
+ /**
57
+ * Bulk device discovery with resilient retry logic
58
+ */
59
+ discoverAllDevices(): Promise<import("../..").GoveeDevice[]>;
60
+ /**
61
+ * Real-time device state check with fast failure
62
+ */
63
+ getDeviceStateRealTime(deviceId: string, sku: string): Promise<import("../..").DeviceState>;
64
+ /**
65
+ * Get comprehensive retry metrics across all strategies
66
+ */
67
+ getRetryMetrics(): {
68
+ bulk: Readonly<import("./RetryPolicy").RetryMetrics>;
69
+ realTime: Readonly<import("./RetryPolicy").RetryMetrics>;
70
+ };
71
+ /**
72
+ * Reset all retry metrics
73
+ */
74
+ resetMetrics(): void;
75
+ }
76
+ /**
77
+ * INTEGRATION EXAMPLE 5: Monitoring and Observability Integration
78
+ *
79
+ * This example shows how to integrate retry metrics with monitoring systems.
80
+ */
81
+ export declare class RetryMetricsCollector {
82
+ private readonly retryableRepository;
83
+ private readonly logger;
84
+ private readonly metricsIntervalMs;
85
+ private metricsInterval?;
86
+ constructor(retryableRepository: RetryableRepository, logger: Logger, metricsIntervalMs?: number);
87
+ /**
88
+ * Start collecting and logging retry metrics
89
+ */
90
+ startMetricsCollection(): void;
91
+ /**
92
+ * Stop metrics collection
93
+ */
94
+ stopMetricsCollection(): void;
95
+ /**
96
+ * Get current metrics snapshot
97
+ */
98
+ getMetricsSnapshot(): {
99
+ timestamp: string;
100
+ total_attempts: number;
101
+ successful_retries: number;
102
+ failed_retries: number;
103
+ success_rate: number;
104
+ average_retry_delay_ms: number;
105
+ circuit_breaker_state: "closed" | "open" | "half-open";
106
+ last_error: {
107
+ name: string;
108
+ code: string;
109
+ message: string;
110
+ timestamp: string;
111
+ stack?: string;
112
+ cause?: unknown;
113
+ } | undefined;
114
+ last_retry: string | undefined;
115
+ };
116
+ }
117
+ /**
118
+ * INTEGRATION EXAMPLE 6: Environment-Specific Configuration Factory
119
+ *
120
+ * This factory creates appropriate retry configurations based on environment.
121
+ */
122
+ export declare class RetryConfigFactory {
123
+ /**
124
+ * Create retry configuration based on environment
125
+ */
126
+ static createForEnvironment(environment: 'development' | 'testing' | 'staging' | 'production', logger?: Logger): RetryPolicy;
127
+ /**
128
+ * Create retry configuration for specific use cases
129
+ */
130
+ static createForUseCase(useCase: 'bulk' | 'realtime' | 'background' | 'interactive', logger?: Logger): RetryPolicy;
131
+ }
132
+ export { RetryExecutorFactory } from './RetryableRequest';
133
+ //# sourceMappingURL=IntegrationGuide.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IntegrationGuide.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/retry/IntegrationGuide.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EACL,WAAW,EAEX,mBAAmB,EAIpB,MAAM,SAAS,CAAC;AAEjB;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAiB/F;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,mBAAmB,CA6BhG;AAED;;;;;GAKG;AACH,qBAAa,yBAAyB;IACpC;;OAEG;IACH,MAAM,CAAC,yBAAyB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW;IAe9D;;OAEG;IACH,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW;IAezD;;OAEG;IACH,MAAM,CAAC,8BAA8B,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW;CAGpE;AAED;;;;;GAKG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAsB;IACrD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAsB;IACzD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;IACvD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAmC1C;;OAEG;IACG,kBAAkB;IAsBxB;;OAEG;IACG,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAqB1D;;OAEG;IACH,eAAe;;;;IAOf;;OAEG;IACH,YAAY;CAIb;AAED;;;;GAIG;AACH,qBAAa,qBAAqB;IAI9B,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IALpC,OAAO,CAAC,eAAe,CAAC,CAAiB;gBAGtB,mBAAmB,EAAE,mBAAmB,EACxC,MAAM,EAAE,MAAM,EACd,iBAAiB,GAAE,MAAc;IAGpD;;OAEG;IACH,sBAAsB;IAsBtB;;OAEG;IACH,qBAAqB;IAOrB;;OAEG;IACH,kBAAkB;;;;;;;;;;;;;;;;;;CAgBnB;AAED;;;;GAIG;AACH,qBAAa,kBAAkB;IAC7B;;OAEG;IACH,MAAM,CAAC,oBAAoB,CACzB,WAAW,EAAE,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG,YAAY,EACjE,MAAM,CAAC,EAAE,MAAM,GACd,WAAW;IAuBd;;OAEG;IACH,MAAM,CAAC,gBAAgB,CACrB,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,YAAY,GAAG,aAAa,EAC3D,MAAM,CAAC,EAAE,MAAM,GACd,WAAW;CAkBf;AAGD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,295 @@
1
+ /**
2
+ * Integration Guide for Retry Logic with Govee API Client
3
+ *
4
+ * This file provides comprehensive examples and integration patterns for
5
+ * adding retry logic to the Govee API client after rate limiting is implemented.
6
+ */
7
+ import { GoveeDeviceRepository } from '../GoveeDeviceRepository';
8
+ import { GoveeControlService } from '../../services/GoveeControlService';
9
+ import { RetryPolicy, RetryExecutor, RetryableRepository, RetryConfigPresets, RetryExecutorFactory, } from './index';
10
+ /**
11
+ * INTEGRATION EXAMPLE 1: Basic Retry-Enabled Repository
12
+ *
13
+ * This example shows how to wrap the existing GoveeDeviceRepository
14
+ * with retry functionality using default Govee API optimized settings.
15
+ */
16
+ export function createBasicRetryRepository(apiKey, logger) {
17
+ // Create the base repository
18
+ const baseRepository = new GoveeDeviceRepository({
19
+ apiKey,
20
+ timeout: 30000,
21
+ logger,
22
+ });
23
+ // Wrap with retry functionality
24
+ const retryableRepository = new RetryableRepository({
25
+ repository: baseRepository,
26
+ retryExecutor: RetryExecutorFactory.createForGoveeApi(logger),
27
+ logger,
28
+ enableRequestIds: true,
29
+ });
30
+ return retryableRepository;
31
+ }
32
+ /**
33
+ * INTEGRATION EXAMPLE 2: Production-Ready Service with Retry Logic
34
+ *
35
+ * This example shows how to integrate retry logic into the GoveeControlService
36
+ * for production environments with conservative retry policies.
37
+ */
38
+ export function createProductionGoveeService(apiKey, logger) {
39
+ // Create base repository
40
+ const baseRepository = new GoveeDeviceRepository({
41
+ apiKey,
42
+ timeout: 30000,
43
+ logger,
44
+ });
45
+ // Create production-optimized retry executor
46
+ const retryPolicy = RetryPolicy.createConservative(logger);
47
+ const retryExecutor = new RetryExecutor(retryPolicy, {
48
+ logger,
49
+ enableRequestLogging: true,
50
+ enablePerformanceTracking: true,
51
+ });
52
+ // Wrap repository with retry logic
53
+ const retryableRepository = new RetryableRepository({
54
+ repository: baseRepository,
55
+ retryExecutor,
56
+ logger,
57
+ });
58
+ // Create service with retry-enabled repository
59
+ return new GoveeControlService({
60
+ repository: retryableRepository,
61
+ rateLimit: 100, // 100 requests per minute
62
+ logger,
63
+ });
64
+ }
65
+ /**
66
+ * INTEGRATION EXAMPLE 3: Custom Retry Configuration for Specific Use Cases
67
+ *
68
+ * This example demonstrates creating custom retry policies for different
69
+ * operational scenarios.
70
+ */
71
+ export class CustomRetryConfigurations {
72
+ /**
73
+ * Configuration for bulk operations that need to be resilient
74
+ */
75
+ static createBulkOperationConfig(logger) {
76
+ const builder = RetryConfigPresets.custom()
77
+ .withExponentialBackoff(2000, 60000, 1.5) // Start at 2s, max 1min, gentle growth
78
+ .withDecorrelatedJitter(0.2) // Sophisticated jitter
79
+ .withBasicConditions(5, 300000, [429, 502, 503, 504]) // 5 attempts, 5min total
80
+ .withBasicCircuitBreaker(7, 60000, 3) // Higher failure threshold
81
+ .withMetrics(true);
82
+ if (logger) {
83
+ builder.withLogger(logger);
84
+ }
85
+ return new RetryPolicy(builder.build());
86
+ }
87
+ /**
88
+ * Configuration for real-time operations that need fast failure
89
+ */
90
+ static createRealTimeConfig(logger) {
91
+ const builder = RetryConfigPresets.custom()
92
+ .withLinearBackoff(500, 2000) // Quick linear backoff
93
+ .withEqualJitter(0.1) // Low jitter
94
+ .withBasicConditions(2, 5000, [429, 503, 504]) // Quick failure
95
+ .withBasicCircuitBreaker(3, 10000, 1) // Fast circuit breaking
96
+ .withMetrics(true);
97
+ if (logger) {
98
+ builder.withLogger(logger);
99
+ }
100
+ return new RetryPolicy(builder.build());
101
+ }
102
+ /**
103
+ * Configuration optimized for rate-limited APIs
104
+ */
105
+ static createRateLimitOptimizedConfig(logger) {
106
+ return new RetryPolicy(RetryConfigPresets.rateLimitAware(logger));
107
+ }
108
+ }
109
+ /**
110
+ * INTEGRATION EXAMPLE 4: Service with Multiple Retry Strategies
111
+ *
112
+ * This example shows how to use different retry strategies for different
113
+ * types of operations within the same service.
114
+ */
115
+ export class AdvancedGoveeService {
116
+ constructor(apiKey, logger) {
117
+ this.logger = logger;
118
+ // Create base repository
119
+ this.baseRepository = new GoveeDeviceRepository({
120
+ apiKey,
121
+ timeout: 30000,
122
+ logger,
123
+ });
124
+ // Create bulk operations repository (resilient, slower)
125
+ const bulkRetryExecutor = new RetryExecutor(CustomRetryConfigurations.createBulkOperationConfig(logger), { logger, enableRequestLogging: true, enablePerformanceTracking: true });
126
+ this.bulkRepository = new RetryableRepository({
127
+ repository: this.baseRepository,
128
+ retryExecutor: bulkRetryExecutor,
129
+ logger,
130
+ });
131
+ // Create real-time repository (fast failure)
132
+ const realTimeRetryExecutor = new RetryExecutor(CustomRetryConfigurations.createRealTimeConfig(logger), { logger, enableRequestLogging: true, enablePerformanceTracking: true });
133
+ this.realTimeRepository = new RetryableRepository({
134
+ repository: this.baseRepository,
135
+ retryExecutor: realTimeRetryExecutor,
136
+ logger,
137
+ });
138
+ }
139
+ /**
140
+ * Bulk device discovery with resilient retry logic
141
+ */
142
+ async discoverAllDevices() {
143
+ this.logger.info('Starting bulk device discovery');
144
+ const result = await this.bulkRepository.findAllWithRetryResult();
145
+ this.logger.info({
146
+ devices: result.data?.length || 0,
147
+ attempts: result.totalAttempts,
148
+ totalTime: result.totalTimeMs,
149
+ success: result.success,
150
+ }, 'Bulk device discovery completed');
151
+ if (!result.success) {
152
+ throw result.error;
153
+ }
154
+ return result.data;
155
+ }
156
+ /**
157
+ * Real-time device state check with fast failure
158
+ */
159
+ async getDeviceStateRealTime(deviceId, sku) {
160
+ this.logger.debug({ deviceId, sku }, 'Getting device state (real-time)');
161
+ const result = await this.realTimeRepository.findStateWithRetryResult(deviceId, sku);
162
+ if (!result.success) {
163
+ this.logger.warn({
164
+ deviceId,
165
+ sku,
166
+ attempts: result.totalAttempts,
167
+ error: result.error?.toObject(),
168
+ }, 'Real-time state check failed');
169
+ throw result.error;
170
+ }
171
+ return result.data;
172
+ }
173
+ /**
174
+ * Get comprehensive retry metrics across all strategies
175
+ */
176
+ getRetryMetrics() {
177
+ return {
178
+ bulk: this.bulkRepository.getRetryMetrics(),
179
+ realTime: this.realTimeRepository.getRetryMetrics(),
180
+ };
181
+ }
182
+ /**
183
+ * Reset all retry metrics
184
+ */
185
+ resetMetrics() {
186
+ this.bulkRepository.resetRetryMetrics();
187
+ this.realTimeRepository.resetRetryMetrics();
188
+ }
189
+ }
190
+ /**
191
+ * INTEGRATION EXAMPLE 5: Monitoring and Observability Integration
192
+ *
193
+ * This example shows how to integrate retry metrics with monitoring systems.
194
+ */
195
+ export class RetryMetricsCollector {
196
+ constructor(retryableRepository, logger, metricsIntervalMs = 60000 // 1 minute
197
+ ) {
198
+ this.retryableRepository = retryableRepository;
199
+ this.logger = logger;
200
+ this.metricsIntervalMs = metricsIntervalMs;
201
+ }
202
+ /**
203
+ * Start collecting and logging retry metrics
204
+ */
205
+ startMetricsCollection() {
206
+ this.metricsInterval = setInterval(() => {
207
+ const metrics = this.retryableRepository.getRetryMetrics();
208
+ this.logger.info({
209
+ retry_metrics: {
210
+ total_attempts: metrics.totalAttempts,
211
+ successful_retries: metrics.successfulRetries,
212
+ failed_retries: metrics.failedRetries,
213
+ total_retry_time_ms: metrics.totalRetryTimeMs,
214
+ average_retry_delay_ms: metrics.averageRetryDelayMs,
215
+ circuit_breaker_state: metrics.circuitBreakerState,
216
+ success_rate: metrics.totalAttempts > 0 ? metrics.successfulRetries / metrics.totalAttempts : 0,
217
+ },
218
+ }, 'Retry metrics collected');
219
+ }, this.metricsIntervalMs);
220
+ }
221
+ /**
222
+ * Stop metrics collection
223
+ */
224
+ stopMetricsCollection() {
225
+ if (this.metricsInterval) {
226
+ clearInterval(this.metricsInterval);
227
+ this.metricsInterval = undefined;
228
+ }
229
+ }
230
+ /**
231
+ * Get current metrics snapshot
232
+ */
233
+ getMetricsSnapshot() {
234
+ const metrics = this.retryableRepository.getRetryMetrics();
235
+ return {
236
+ timestamp: new Date().toISOString(),
237
+ total_attempts: metrics.totalAttempts,
238
+ successful_retries: metrics.successfulRetries,
239
+ failed_retries: metrics.failedRetries,
240
+ success_rate: metrics.totalAttempts > 0 ? (metrics.successfulRetries / metrics.totalAttempts) * 100 : 0,
241
+ average_retry_delay_ms: metrics.averageRetryDelayMs,
242
+ circuit_breaker_state: metrics.circuitBreakerState,
243
+ last_error: metrics.lastError?.toObject(),
244
+ last_retry: metrics.lastRetryTimestamp?.toISOString(),
245
+ };
246
+ }
247
+ }
248
+ /**
249
+ * INTEGRATION EXAMPLE 6: Environment-Specific Configuration Factory
250
+ *
251
+ * This factory creates appropriate retry configurations based on environment.
252
+ */
253
+ export class RetryConfigFactory {
254
+ /**
255
+ * Create retry configuration based on environment
256
+ */
257
+ static createForEnvironment(environment, logger) {
258
+ switch (environment) {
259
+ case 'development':
260
+ return new RetryPolicy(RetryConfigPresets.development(logger));
261
+ case 'testing':
262
+ return new RetryPolicy(RetryConfigPresets.testing(logger));
263
+ case 'staging':
264
+ // Use production-like settings but with more logging
265
+ return new RetryPolicy({
266
+ ...RetryConfigPresets.production(logger),
267
+ enableMetrics: true,
268
+ });
269
+ case 'production':
270
+ return new RetryPolicy(RetryConfigPresets.production(logger));
271
+ default:
272
+ throw new Error(`Unknown environment: ${environment}`);
273
+ }
274
+ }
275
+ /**
276
+ * Create retry configuration for specific use cases
277
+ */
278
+ static createForUseCase(useCase, logger) {
279
+ switch (useCase) {
280
+ case 'bulk':
281
+ return CustomRetryConfigurations.createBulkOperationConfig(logger);
282
+ case 'realtime':
283
+ return CustomRetryConfigurations.createRealTimeConfig(logger);
284
+ case 'background':
285
+ return new RetryPolicy(RetryConfigPresets.networkResilient(logger));
286
+ case 'interactive':
287
+ return new RetryPolicy(RetryConfigPresets.highFrequency(logger));
288
+ default:
289
+ throw new Error(`Unknown use case: ${useCase}`);
290
+ }
291
+ }
292
+ }
293
+ // Re-export for convenience
294
+ export { RetryExecutorFactory } from './RetryableRequest';
295
+ //# sourceMappingURL=IntegrationGuide.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IntegrationGuide.js","sourceRoot":"","sources":["../../../src/infrastructure/retry/IntegrationGuide.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EACL,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAElB,oBAAoB,GACrB,MAAM,SAAS,CAAC;AAEjB;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CAAC,MAAc,EAAE,MAAe;IACxE,6BAA6B;IAC7B,MAAM,cAAc,GAAG,IAAI,qBAAqB,CAAC;QAC/C,MAAM;QACN,OAAO,EAAE,KAAK;QACd,MAAM;KACP,CAAC,CAAC;IAEH,gCAAgC;IAChC,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,CAAC;QAClD,UAAU,EAAE,cAAc;QAC1B,aAAa,EAAE,oBAAoB,CAAC,iBAAiB,CAAC,MAAM,CAAC;QAC7D,MAAM;QACN,gBAAgB,EAAE,IAAI;KACvB,CAAC,CAAC;IAEH,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAAC,MAAc,EAAE,MAAc;IACzE,yBAAyB;IACzB,MAAM,cAAc,GAAG,IAAI,qBAAqB,CAAC;QAC/C,MAAM;QACN,OAAO,EAAE,KAAK;QACd,MAAM;KACP,CAAC,CAAC;IAEH,6CAA6C;IAC7C,MAAM,WAAW,GAAG,WAAW,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3D,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,WAAW,EAAE;QACnD,MAAM;QACN,oBAAoB,EAAE,IAAI;QAC1B,yBAAyB,EAAE,IAAI;KAChC,CAAC,CAAC;IAEH,mCAAmC;IACnC,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,CAAC;QAClD,UAAU,EAAE,cAAc;QAC1B,aAAa;QACb,MAAM;KACP,CAAC,CAAC;IAEH,+CAA+C;IAC/C,OAAO,IAAI,mBAAmB,CAAC;QAC7B,UAAU,EAAE,mBAAmB;QAC/B,SAAS,EAAE,GAAG,EAAE,0BAA0B;QAC1C,MAAM;KACP,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,OAAO,yBAAyB;IACpC;;OAEG;IACH,MAAM,CAAC,yBAAyB,CAAC,MAAe;QAC9C,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,EAAE;aACxC,sBAAsB,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,uCAAuC;aAChF,sBAAsB,CAAC,GAAG,CAAC,CAAC,uBAAuB;aACnD,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,yBAAyB;aAC9E,uBAAuB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,2BAA2B;aAChE,WAAW,CAAC,IAAI,CAAC,CAAC;QAErB,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC;QAED,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,oBAAoB,CAAC,MAAe;QACzC,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,EAAE;aACxC,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,uBAAuB;aACpD,eAAe,CAAC,GAAG,CAAC,CAAC,aAAa;aAClC,mBAAmB,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,gBAAgB;aAC9D,uBAAuB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,wBAAwB;aAC7D,WAAW,CAAC,IAAI,CAAC,CAAC;QAErB,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC;QAED,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,8BAA8B,CAAC,MAAe;QACnD,OAAO,IAAI,WAAW,CAAC,kBAAkB,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IACpE,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAO,oBAAoB;IAM/B,YAAY,MAAc,EAAE,MAAc;QACxC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,yBAAyB;QACzB,IAAI,CAAC,cAAc,GAAG,IAAI,qBAAqB,CAAC;YAC9C,MAAM;YACN,OAAO,EAAE,KAAK;YACd,MAAM;SACP,CAAC,CAAC;QAEH,wDAAwD;QACxD,MAAM,iBAAiB,GAAG,IAAI,aAAa,CACzC,yBAAyB,CAAC,yBAAyB,CAAC,MAAM,CAAC,EAC3D,EAAE,MAAM,EAAE,oBAAoB,EAAE,IAAI,EAAE,yBAAyB,EAAE,IAAI,EAAE,CACxE,CAAC;QAEF,IAAI,CAAC,cAAc,GAAG,IAAI,mBAAmB,CAAC;YAC5C,UAAU,EAAE,IAAI,CAAC,cAAc;YAC/B,aAAa,EAAE,iBAAiB;YAChC,MAAM;SACP,CAAC,CAAC;QAEH,6CAA6C;QAC7C,MAAM,qBAAqB,GAAG,IAAI,aAAa,CAC7C,yBAAyB,CAAC,oBAAoB,CAAC,MAAM,CAAC,EACtD,EAAE,MAAM,EAAE,oBAAoB,EAAE,IAAI,EAAE,yBAAyB,EAAE,IAAI,EAAE,CACxE,CAAC;QAEF,IAAI,CAAC,kBAAkB,GAAG,IAAI,mBAAmB,CAAC;YAChD,UAAU,EAAE,IAAI,CAAC,cAAc;YAC/B,aAAa,EAAE,qBAAqB;YACpC,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB;QACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAEnD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,sBAAsB,EAAE,CAAC;QAElE,IAAI,CAAC,MAAM,CAAC,IAAI,CACd;YACE,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC;YACjC,QAAQ,EAAE,MAAM,CAAC,aAAa;YAC9B,SAAS,EAAE,MAAM,CAAC,WAAW;YAC7B,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,EACD,iCAAiC,CAClC,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,MAAM,CAAC,KAAK,CAAC;QACrB,CAAC;QAED,OAAO,MAAM,CAAC,IAAK,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,sBAAsB,CAAC,QAAgB,EAAE,GAAW;QACxD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,kCAAkC,CAAC,CAAC;QAEzE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAErF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,CAAC,IAAI,CACd;gBACE,QAAQ;gBACR,GAAG;gBACH,QAAQ,EAAE,MAAM,CAAC,aAAa;gBAC9B,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE;aAChC,EACD,8BAA8B,CAC/B,CAAC;YACF,MAAM,MAAM,CAAC,KAAK,CAAC;QACrB,CAAC;QAED,OAAO,MAAM,CAAC,IAAK,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE;YAC3C,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,eAAe,EAAE;SACpD,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,YAAY;QACV,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE,CAAC;QACxC,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,EAAE,CAAC;IAC9C,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,qBAAqB;IAGhC,YACmB,mBAAwC,EACxC,MAAc,EACd,oBAA4B,KAAK,CAAC,WAAW;;QAF7C,wBAAmB,GAAnB,mBAAmB,CAAqB;QACxC,WAAM,GAAN,MAAM,CAAQ;QACd,sBAAiB,GAAjB,iBAAiB,CAAgB;IACjD,CAAC;IAEJ;;OAEG;IACH,sBAAsB;QACpB,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;YACtC,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,eAAe,EAAE,CAAC;YAE3D,IAAI,CAAC,MAAM,CAAC,IAAI,CACd;gBACE,aAAa,EAAE;oBACb,cAAc,EAAE,OAAO,CAAC,aAAa;oBACrC,kBAAkB,EAAE,OAAO,CAAC,iBAAiB;oBAC7C,cAAc,EAAE,OAAO,CAAC,aAAa;oBACrC,mBAAmB,EAAE,OAAO,CAAC,gBAAgB;oBAC7C,sBAAsB,EAAE,OAAO,CAAC,mBAAmB;oBACnD,qBAAqB,EAAE,OAAO,CAAC,mBAAmB;oBAClD,YAAY,EACV,OAAO,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;iBACpF;aACF,EACD,yBAAyB,CAC1B,CAAC;QACJ,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,qBAAqB;QACnB,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACpC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QACnC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,kBAAkB;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,eAAe,EAAE,CAAC;QAE3D,OAAO;YACL,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,cAAc,EAAE,OAAO,CAAC,aAAa;YACrC,kBAAkB,EAAE,OAAO,CAAC,iBAAiB;YAC7C,cAAc,EAAE,OAAO,CAAC,aAAa;YACrC,YAAY,EACV,OAAO,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3F,sBAAsB,EAAE,OAAO,CAAC,mBAAmB;YACnD,qBAAqB,EAAE,OAAO,CAAC,mBAAmB;YAClD,UAAU,EAAE,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAE;YACzC,UAAU,EAAE,OAAO,CAAC,kBAAkB,EAAE,WAAW,EAAE;SACtD,CAAC;IACJ,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,kBAAkB;IAC7B;;OAEG;IACH,MAAM,CAAC,oBAAoB,CACzB,WAAiE,EACjE,MAAe;QAEf,QAAQ,WAAW,EAAE,CAAC;YACpB,KAAK,aAAa;gBAChB,OAAO,IAAI,WAAW,CAAC,kBAAkB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;YAEjE,KAAK,SAAS;gBACZ,OAAO,IAAI,WAAW,CAAC,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YAE7D,KAAK,SAAS;gBACZ,qDAAqD;gBACrD,OAAO,IAAI,WAAW,CAAC;oBACrB,GAAG,kBAAkB,CAAC,UAAU,CAAC,MAAM,CAAC;oBACxC,aAAa,EAAE,IAAI;iBACpB,CAAC,CAAC;YAEL,KAAK,YAAY;gBACf,OAAO,IAAI,WAAW,CAAC,kBAAkB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;YAEhE;gBACE,MAAM,IAAI,KAAK,CAAC,wBAAwB,WAAW,EAAE,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,gBAAgB,CACrB,OAA2D,EAC3D,MAAe;QAEf,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,MAAM;gBACT,OAAO,yBAAyB,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC;YAErE,KAAK,UAAU;gBACb,OAAO,yBAAyB,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;YAEhE,KAAK,YAAY;gBACf,OAAO,IAAI,WAAW,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;YAEtE,KAAK,aAAa;gBAChB,OAAO,IAAI,WAAW,CAAC,kBAAkB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;YAEnE;gBACE,MAAM,IAAI,KAAK,CAAC,qBAAqB,OAAO,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;CACF;AAED,4BAA4B;AAC5B,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,114 @@
1
+ import { Logger } from 'pino';
2
+ import { RetryPolicyConfig, BackoffStrategy, JitterConfig, RetryCondition, CircuitBreakerConfig } from './RetryPolicy';
3
+ /**
4
+ * Environment-specific retry configuration presets
5
+ */
6
+ export declare class RetryConfigPresets {
7
+ /**
8
+ * Development environment configuration - aggressive retries for testing
9
+ */
10
+ static development(logger?: Logger): RetryPolicyConfig;
11
+ /**
12
+ * Testing environment configuration - predictable behavior
13
+ */
14
+ static testing(logger?: Logger): RetryPolicyConfig;
15
+ /**
16
+ * Production environment configuration - conservative and reliable
17
+ */
18
+ static production(logger?: Logger): RetryPolicyConfig;
19
+ /**
20
+ * High-frequency operations configuration - optimized for frequent API calls
21
+ */
22
+ static highFrequency(logger?: Logger): RetryPolicyConfig;
23
+ /**
24
+ * Rate-limit aware configuration - optimized for APIs with strict rate limits
25
+ */
26
+ static rateLimitAware(logger?: Logger): RetryPolicyConfig;
27
+ /**
28
+ * Network-resilient configuration - optimized for unreliable networks
29
+ */
30
+ static networkResilient(logger?: Logger): RetryPolicyConfig;
31
+ /**
32
+ * Custom configuration builder for specific use cases
33
+ */
34
+ static custom(): RetryConfigBuilder;
35
+ }
36
+ /**
37
+ * Fluent builder for creating custom retry configurations
38
+ */
39
+ export declare class RetryConfigBuilder {
40
+ private config;
41
+ /**
42
+ * Set backoff strategy
43
+ */
44
+ withBackoff(strategy: BackoffStrategy): this;
45
+ /**
46
+ * Set exponential backoff with defaults
47
+ */
48
+ withExponentialBackoff(initialDelayMs?: number, maxDelayMs?: number, multiplier?: number): this;
49
+ /**
50
+ * Set linear backoff
51
+ */
52
+ withLinearBackoff(initialDelayMs?: number, maxDelayMs?: number): this;
53
+ /**
54
+ * Set fixed backoff
55
+ */
56
+ withFixedBackoff(delayMs?: number): this;
57
+ /**
58
+ * Set custom backoff function
59
+ */
60
+ withCustomBackoff(initialDelayMs: number, maxDelayMs: number, customBackoff: (attempt: number, error: any) => number): this;
61
+ /**
62
+ * Set jitter configuration
63
+ */
64
+ withJitter(jitter: JitterConfig): this;
65
+ /**
66
+ * Set no jitter
67
+ */
68
+ withoutJitter(): this;
69
+ /**
70
+ * Set equal jitter
71
+ */
72
+ withEqualJitter(factor?: number): this;
73
+ /**
74
+ * Set full jitter
75
+ */
76
+ withFullJitter(factor?: number): this;
77
+ /**
78
+ * Set decorrelated jitter
79
+ */
80
+ withDecorrelatedJitter(factor?: number): this;
81
+ /**
82
+ * Set retry conditions
83
+ */
84
+ withConditions(conditions: RetryCondition): this;
85
+ /**
86
+ * Set basic retry conditions
87
+ */
88
+ withBasicConditions(maxAttempts?: number, maxTotalTimeMs?: number, retryableStatusCodes?: number[]): this;
89
+ /**
90
+ * Set circuit breaker configuration
91
+ */
92
+ withCircuitBreaker(circuitBreaker: CircuitBreakerConfig): this;
93
+ /**
94
+ * Enable circuit breaker with defaults
95
+ */
96
+ withBasicCircuitBreaker(failureThreshold?: number, recoveryTimeoutMs?: number, halfOpenSuccessThreshold?: number): this;
97
+ /**
98
+ * Disable circuit breaker
99
+ */
100
+ withoutCircuitBreaker(): this;
101
+ /**
102
+ * Set logger
103
+ */
104
+ withLogger(logger: Logger): this;
105
+ /**
106
+ * Enable or disable metrics
107
+ */
108
+ withMetrics(enabled?: boolean): this;
109
+ /**
110
+ * Build the final configuration
111
+ */
112
+ build(): RetryPolicyConfig;
113
+ }
114
+ //# sourceMappingURL=RetryConfigPresets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RetryConfigPresets.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/retry/RetryConfigPresets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,cAAc,EACd,oBAAoB,EACrB,MAAM,eAAe,CAAC;AAGvB;;GAEG;AACH,qBAAa,kBAAkB;IAC7B;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,iBAAiB;IA6BtD;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,iBAAiB;IA2BlD;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,iBAAiB;IA6BrD;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,iBAAiB;IA4BxD;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,iBAAiB;IAoCzD;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,iBAAiB;IAoC3D;;OAEG;IACH,MAAM,CAAC,MAAM,IAAI,kBAAkB;CAGpC;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAkC;IAEhD;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAK5C;;OAEG;IACH,sBAAsB,CACpB,cAAc,GAAE,MAAa,EAC7B,UAAU,GAAE,MAAc,EAC1B,UAAU,GAAE,MAAY,GACvB,IAAI;IAUP;;OAEG;IACH,iBAAiB,CAAC,cAAc,GAAE,MAAa,EAAE,UAAU,GAAE,MAAc,GAAG,IAAI;IASlF;;OAEG;IACH,gBAAgB,CAAC,OAAO,GAAE,MAAa,GAAG,IAAI;IAS9C;;OAEG;IACH,iBAAiB,CACf,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,MAAM,GACrD,IAAI;IAUP;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAKtC;;OAEG;IACH,aAAa,IAAI,IAAI;IAKrB;;OAEG;IACH,eAAe,CAAC,MAAM,GAAE,MAAY,GAAG,IAAI;IAK3C;;OAEG;IACH,cAAc,CAAC,MAAM,GAAE,MAAY,GAAG,IAAI;IAK1C;;OAEG;IACH,sBAAsB,CAAC,MAAM,GAAE,MAAY,GAAG,IAAI;IAKlD;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,cAAc,GAAG,IAAI;IAKhD;;OAEG;IACH,mBAAmB,CACjB,WAAW,GAAE,MAAU,EACvB,cAAc,GAAE,MAAc,EAC9B,oBAAoB,GAAE,MAAM,EAAyB,GACpD,IAAI;IAUP;;OAEG;IACH,kBAAkB,CAAC,cAAc,EAAE,oBAAoB,GAAG,IAAI;IAK9D;;OAEG;IACH,uBAAuB,CACrB,gBAAgB,GAAE,MAAU,EAC5B,iBAAiB,GAAE,MAAc,EACjC,wBAAwB,GAAE,MAAU,GACnC,IAAI;IAUP;;OAEG;IACH,qBAAqB,IAAI,IAAI;IAU7B;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAKhC;;OAEG;IACH,WAAW,CAAC,OAAO,GAAE,OAAc,GAAG,IAAI;IAK1C;;OAEG;IACH,KAAK,IAAI,iBAAiB;CAqC3B"}