@autonomaai/service-utils 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/dist/env.d.ts +7 -0
  2. package/dist/env.d.ts.map +1 -0
  3. package/dist/env.js +12 -0
  4. package/dist/env.js.map +1 -0
  5. package/dist/fastify.d.ts +15 -0
  6. package/dist/fastify.d.ts.map +1 -0
  7. package/dist/fastify.js +57 -0
  8. package/dist/fastify.js.map +1 -0
  9. package/dist/health.d.ts +17 -0
  10. package/dist/health.d.ts.map +1 -0
  11. package/dist/health.js +15 -0
  12. package/dist/health.js.map +1 -0
  13. package/dist/index.d.ts +6 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +6 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/logger.d.ts +8 -0
  18. package/dist/logger.d.ts.map +1 -0
  19. package/dist/logger.js +22 -0
  20. package/dist/logger.js.map +1 -0
  21. package/dist/resilience/bulkhead.d.ts +95 -0
  22. package/dist/resilience/bulkhead.d.ts.map +1 -0
  23. package/dist/resilience/bulkhead.js +186 -0
  24. package/dist/resilience/bulkhead.js.map +1 -0
  25. package/dist/resilience/circuit-breaker.d.ts +111 -0
  26. package/dist/resilience/circuit-breaker.d.ts.map +1 -0
  27. package/dist/resilience/circuit-breaker.js +267 -0
  28. package/dist/resilience/circuit-breaker.js.map +1 -0
  29. package/dist/resilience/index.d.ts +15 -0
  30. package/dist/resilience/index.d.ts.map +1 -0
  31. package/dist/resilience/index.js +15 -0
  32. package/dist/resilience/index.js.map +1 -0
  33. package/dist/resilience/rate-limiter.d.ts +115 -0
  34. package/dist/resilience/rate-limiter.d.ts.map +1 -0
  35. package/dist/resilience/rate-limiter.js +257 -0
  36. package/dist/resilience/rate-limiter.js.map +1 -0
  37. package/dist/resilience/retry.d.ts +63 -0
  38. package/dist/resilience/retry.d.ts.map +1 -0
  39. package/dist/resilience/retry.js +190 -0
  40. package/dist/resilience/retry.js.map +1 -0
  41. package/dist/resilience/timeout.d.ts +62 -0
  42. package/dist/resilience/timeout.d.ts.map +1 -0
  43. package/dist/resilience/timeout.js +135 -0
  44. package/dist/resilience/timeout.js.map +1 -0
  45. package/dist/resilience/types.d.ts +163 -0
  46. package/dist/resilience/types.d.ts.map +1 -0
  47. package/dist/resilience/types.js +64 -0
  48. package/dist/resilience/types.js.map +1 -0
  49. package/package.json +52 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../src/resilience/rate-limiter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Retry Pattern with Exponential Backoff
3
+ *
4
+ * Automatically retries failed operations with configurable:
5
+ * - Max attempts
6
+ * - Exponential backoff
7
+ * - Jitter (randomization)
8
+ * - Retryable exceptions
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * // Using retry function
13
+ * const result = await retry(
14
+ * () => fetchData(),
15
+ * {
16
+ * maxAttempts: 3,
17
+ * initialDelay: 100,
18
+ * backoffMultiplier: 2,
19
+ * jitter: true
20
+ * }
21
+ * );
22
+ *
23
+ * // Using decorator
24
+ * class ApiClient {
25
+ * @withRetry({ maxAttempts: 3 })
26
+ * async fetchData(): Promise<Data> {
27
+ * // ...
28
+ * }
29
+ * }
30
+ * ```
31
+ */
32
+ import { RetryConfig } from './types.js';
33
+ /**
34
+ * Execute a function with retry logic
35
+ *
36
+ * @param fn - Async function to execute
37
+ * @param config - Retry configuration
38
+ * @returns Result from the function
39
+ * @throws RetryExhaustedError if all retries fail
40
+ */
41
+ export declare function retry<T>(fn: () => Promise<T>, config?: Partial<RetryConfig>): Promise<T>;
42
+ /**
43
+ * Decorator to add retry logic to a method
44
+ */
45
+ export declare function withRetry(config?: Partial<RetryConfig>): <T extends (...args: any[]) => Promise<any>>(target: any, propertyKey: string, descriptor: TypedPropertyDescriptor<T>) => TypedPropertyDescriptor<T>;
46
+ /**
47
+ * Create a retry wrapper function
48
+ */
49
+ export declare function createRetry(config?: Partial<RetryConfig>): <T>(fn: () => Promise<T>) => Promise<T>;
50
+ /**
51
+ * Retry with specific configuration presets
52
+ */
53
+ export declare const retryPresets: {
54
+ /** Fast retry for transient errors */
55
+ fast: Partial<RetryConfig>;
56
+ /** Standard retry for API calls */
57
+ standard: Partial<RetryConfig>;
58
+ /** Aggressive retry for critical operations */
59
+ aggressive: Partial<RetryConfig>;
60
+ /** Conservative retry for rate-limited APIs */
61
+ conservative: Partial<RetryConfig>;
62
+ };
63
+ //# sourceMappingURL=retry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/resilience/retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,WAAW,EAAuB,MAAM,YAAY,CAAC;AAwE9D;;;;;;;GAOG;AACH,wBAAsB,KAAK,CAAC,CAAC,EAC3B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAC5B,OAAO,CAAC,CAAC,CAAC,CAsCZ;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,IACpC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,EACzD,QAAQ,GAAG,EACX,aAAa,MAAM,EACnB,YAAY,uBAAuB,CAAC,CAAC,CAAC,gCAUzC;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAC5B,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAEzC;AAED;;GAEG;AACH,eAAO,MAAM,YAAY;IACvB,sCAAsC;UAOjC,OAAO,CAAC,WAAW,CAAC;IAEzB,mCAAmC;cAO9B,OAAO,CAAC,WAAW,CAAC;IAEzB,+CAA+C;gBAO1C,OAAO,CAAC,WAAW,CAAC;IAEzB,+CAA+C;kBAO1C,OAAO,CAAC,WAAW,CAAC;CAC1B,CAAC"}
@@ -0,0 +1,190 @@
1
+ /**
2
+ * Retry Pattern with Exponential Backoff
3
+ *
4
+ * Automatically retries failed operations with configurable:
5
+ * - Max attempts
6
+ * - Exponential backoff
7
+ * - Jitter (randomization)
8
+ * - Retryable exceptions
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * // Using retry function
13
+ * const result = await retry(
14
+ * () => fetchData(),
15
+ * {
16
+ * maxAttempts: 3,
17
+ * initialDelay: 100,
18
+ * backoffMultiplier: 2,
19
+ * jitter: true
20
+ * }
21
+ * );
22
+ *
23
+ * // Using decorator
24
+ * class ApiClient {
25
+ * @withRetry({ maxAttempts: 3 })
26
+ * async fetchData(): Promise<Data> {
27
+ * // ...
28
+ * }
29
+ * }
30
+ * ```
31
+ */
32
+ import { RetryExhaustedError } from './types.js';
33
+ const DEFAULT_CONFIG = {
34
+ maxAttempts: 3,
35
+ initialDelay: 100,
36
+ maxDelay: 30000,
37
+ backoffMultiplier: 2,
38
+ jitter: true,
39
+ jitterFactor: 0.1,
40
+ retryableErrors: [],
41
+ nonRetryableErrors: []
42
+ };
43
+ /**
44
+ * Calculate delay for a given attempt
45
+ */
46
+ function calculateDelay(attempt, config) {
47
+ let delay = config.initialDelay * Math.pow(config.backoffMultiplier, attempt - 1);
48
+ delay = Math.min(delay, config.maxDelay);
49
+ if (config.jitter) {
50
+ const jitterFactor = config.jitterFactor || 0.1;
51
+ const jitterRange = delay * jitterFactor;
52
+ delay += Math.random() * jitterRange * 2 - jitterRange;
53
+ }
54
+ return Math.max(0, delay);
55
+ }
56
+ /**
57
+ * Check if an error should be retried
58
+ */
59
+ function shouldRetry(error, config) {
60
+ // Check non-retryable errors first
61
+ if (config.nonRetryableErrors?.length) {
62
+ for (const nonRetryable of config.nonRetryableErrors) {
63
+ if (typeof nonRetryable === 'string') {
64
+ if (error.message.includes(nonRetryable) || error.name === nonRetryable) {
65
+ return false;
66
+ }
67
+ }
68
+ else if (error instanceof nonRetryable) {
69
+ return false;
70
+ }
71
+ }
72
+ }
73
+ // If no retryable errors specified, retry all
74
+ if (!config.retryableErrors?.length) {
75
+ return true;
76
+ }
77
+ // Check retryable errors
78
+ for (const retryable of config.retryableErrors) {
79
+ if (typeof retryable === 'string') {
80
+ if (error.message.includes(retryable) || error.name === retryable) {
81
+ return true;
82
+ }
83
+ }
84
+ else if (error instanceof retryable) {
85
+ return true;
86
+ }
87
+ }
88
+ return false;
89
+ }
90
+ /**
91
+ * Sleep for a given number of milliseconds
92
+ */
93
+ function sleep(ms) {
94
+ return new Promise(resolve => setTimeout(resolve, ms));
95
+ }
96
+ /**
97
+ * Execute a function with retry logic
98
+ *
99
+ * @param fn - Async function to execute
100
+ * @param config - Retry configuration
101
+ * @returns Result from the function
102
+ * @throws RetryExhaustedError if all retries fail
103
+ */
104
+ export async function retry(fn, config) {
105
+ const mergedConfig = { ...DEFAULT_CONFIG, ...config };
106
+ let lastError;
107
+ for (let attempt = 1; attempt <= mergedConfig.maxAttempts; attempt++) {
108
+ try {
109
+ return await fn();
110
+ }
111
+ catch (error) {
112
+ lastError = error;
113
+ // Check if this is the last attempt
114
+ if (attempt === mergedConfig.maxAttempts) {
115
+ console.error(`All ${mergedConfig.maxAttempts} attempts failed:`, lastError.message);
116
+ throw new RetryExhaustedError(mergedConfig.maxAttempts, lastError);
117
+ }
118
+ // Check if error is retryable
119
+ if (!shouldRetry(lastError, mergedConfig)) {
120
+ console.error('Non-retryable error:', lastError.message);
121
+ throw lastError;
122
+ }
123
+ // Calculate delay and wait
124
+ const delay = calculateDelay(attempt, mergedConfig);
125
+ console.warn(`Attempt ${attempt}/${mergedConfig.maxAttempts} failed: ${lastError.message}. ` +
126
+ `Retrying in ${delay.toFixed(0)}ms`);
127
+ // Call retry callback if provided
128
+ mergedConfig.onRetry?.(lastError, attempt, delay);
129
+ await sleep(delay);
130
+ }
131
+ }
132
+ // This should never be reached, but TypeScript needs it
133
+ throw lastError;
134
+ }
135
+ /**
136
+ * Decorator to add retry logic to a method
137
+ */
138
+ export function withRetry(config) {
139
+ return function (target, propertyKey, descriptor) {
140
+ const originalMethod = descriptor.value;
141
+ descriptor.value = async function (...args) {
142
+ return retry(() => originalMethod.apply(this, args), config);
143
+ };
144
+ return descriptor;
145
+ };
146
+ }
147
+ /**
148
+ * Create a retry wrapper function
149
+ */
150
+ export function createRetry(config) {
151
+ return (fn) => retry(fn, config);
152
+ }
153
+ /**
154
+ * Retry with specific configuration presets
155
+ */
156
+ export const retryPresets = {
157
+ /** Fast retry for transient errors */
158
+ fast: {
159
+ maxAttempts: 3,
160
+ initialDelay: 50,
161
+ maxDelay: 500,
162
+ backoffMultiplier: 2,
163
+ jitter: true
164
+ },
165
+ /** Standard retry for API calls */
166
+ standard: {
167
+ maxAttempts: 3,
168
+ initialDelay: 100,
169
+ maxDelay: 5000,
170
+ backoffMultiplier: 2,
171
+ jitter: true
172
+ },
173
+ /** Aggressive retry for critical operations */
174
+ aggressive: {
175
+ maxAttempts: 5,
176
+ initialDelay: 200,
177
+ maxDelay: 30000,
178
+ backoffMultiplier: 2,
179
+ jitter: true
180
+ },
181
+ /** Conservative retry for rate-limited APIs */
182
+ conservative: {
183
+ maxAttempts: 3,
184
+ initialDelay: 1000,
185
+ maxDelay: 60000,
186
+ backoffMultiplier: 3,
187
+ jitter: true
188
+ }
189
+ };
190
+ //# sourceMappingURL=retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/resilience/retry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Timeout Pattern
3
+ *
4
+ * Ensures operations complete within a specified time limit.
5
+ * Prevents hanging operations from blocking resources.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * try {
10
+ * const result = await withTimeout(
11
+ * () => fetchData(),
12
+ * { timeout: 5000, message: 'Fetch data timed out' }
13
+ * );
14
+ * } catch (error) {
15
+ * if (error instanceof TimeoutError) {
16
+ * // Handle timeout
17
+ * }
18
+ * }
19
+ * ```
20
+ */
21
+ import { TimeoutConfig } from './types.js';
22
+ /**
23
+ * Execute a function with a timeout
24
+ *
25
+ * @param fn - Async function to execute
26
+ * @param config - Timeout configuration
27
+ * @returns Result from the function
28
+ * @throws TimeoutError if operation exceeds timeout
29
+ */
30
+ export declare function timeout<T>(fn: () => Promise<T>, config?: Partial<TimeoutConfig>): Promise<T>;
31
+ /**
32
+ * Decorator to apply timeout to a method
33
+ */
34
+ export declare function withTimeout(config?: Partial<TimeoutConfig>): <T extends (...args: any[]) => Promise<any>>(target: any, propertyKey: string, descriptor: TypedPropertyDescriptor<T>) => TypedPropertyDescriptor<T>;
35
+ /**
36
+ * Create a timeout wrapper function
37
+ */
38
+ export declare function createTimeout(config?: Partial<TimeoutConfig>): <T>(fn: () => Promise<T>) => Promise<T>;
39
+ /**
40
+ * Timeout presets for common use cases
41
+ */
42
+ export declare const timeoutPresets: {
43
+ /** Fast timeout for health checks */
44
+ healthCheck: Partial<TimeoutConfig>;
45
+ /** Standard timeout for API calls */
46
+ api: Partial<TimeoutConfig>;
47
+ /** Extended timeout for complex operations */
48
+ extended: Partial<TimeoutConfig>;
49
+ /** Long timeout for batch operations */
50
+ batch: Partial<TimeoutConfig>;
51
+ /** Short timeout for cache operations */
52
+ cache: Partial<TimeoutConfig>;
53
+ };
54
+ /**
55
+ * Create a racing timeout - returns first result or times out
56
+ */
57
+ export declare function raceWithTimeout<T>(promises: Array<Promise<T>>, config?: Partial<TimeoutConfig>): Promise<T>;
58
+ /**
59
+ * Execute with deadline (absolute time)
60
+ */
61
+ export declare function withDeadline<T>(fn: () => Promise<T>, deadline: Date, message?: string): Promise<T>;
62
+ //# sourceMappingURL=timeout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeout.d.ts","sourceRoot":"","sources":["../../src/resilience/timeout.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,aAAa,EAAgB,MAAM,YAAY,CAAC;AAOzD;;;;;;;GAOG;AACH,wBAAsB,OAAO,CAAC,CAAC,EAC7B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAC9B,OAAO,CAAC,CAAC,CAAC,CA8BZ;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,IACxC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,EACzD,QAAQ,GAAG,EACX,aAAa,MAAM,EACnB,YAAY,uBAAuB,CAAC,CAAC,CAAC,gCAUzC;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAC9B,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAEzC;AAED;;GAEG;AACH,eAAO,MAAM,cAAc;IACzB,qCAAqC;iBAIhC,OAAO,CAAC,aAAa,CAAC;IAE3B,qCAAqC;SAIhC,OAAO,CAAC,aAAa,CAAC;IAE3B,8CAA8C;cAIzC,OAAO,CAAC,aAAa,CAAC;IAE3B,wCAAwC;WAInC,OAAO,CAAC,aAAa,CAAC;IAE3B,yCAAyC;WAIpC,OAAO,CAAC,aAAa,CAAC;CAC5B,CAAC;AAEF;;GAEG;AACH,wBAAsB,eAAe,CAAC,CAAC,EACrC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAC3B,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAC9B,OAAO,CAAC,CAAC,CAAC,CAWZ;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAClC,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,QAAQ,EAAE,IAAI,EACd,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,CAAC,CAAC,CAUZ"}
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Timeout Pattern
3
+ *
4
+ * Ensures operations complete within a specified time limit.
5
+ * Prevents hanging operations from blocking resources.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * try {
10
+ * const result = await withTimeout(
11
+ * () => fetchData(),
12
+ * { timeout: 5000, message: 'Fetch data timed out' }
13
+ * );
14
+ * } catch (error) {
15
+ * if (error instanceof TimeoutError) {
16
+ * // Handle timeout
17
+ * }
18
+ * }
19
+ * ```
20
+ */
21
+ import { TimeoutError } from './types.js';
22
+ const DEFAULT_CONFIG = {
23
+ timeout: 30000,
24
+ message: undefined
25
+ };
26
+ /**
27
+ * Execute a function with a timeout
28
+ *
29
+ * @param fn - Async function to execute
30
+ * @param config - Timeout configuration
31
+ * @returns Result from the function
32
+ * @throws TimeoutError if operation exceeds timeout
33
+ */
34
+ export async function timeout(fn, config) {
35
+ const mergedConfig = { ...DEFAULT_CONFIG, ...config };
36
+ return new Promise((resolve, reject) => {
37
+ let settled = false;
38
+ const timer = setTimeout(() => {
39
+ if (!settled) {
40
+ settled = true;
41
+ mergedConfig.onTimeout?.();
42
+ reject(new TimeoutError(mergedConfig.timeout, mergedConfig.message));
43
+ }
44
+ }, mergedConfig.timeout);
45
+ fn()
46
+ .then(result => {
47
+ if (!settled) {
48
+ settled = true;
49
+ clearTimeout(timer);
50
+ resolve(result);
51
+ }
52
+ })
53
+ .catch(error => {
54
+ if (!settled) {
55
+ settled = true;
56
+ clearTimeout(timer);
57
+ reject(error);
58
+ }
59
+ });
60
+ });
61
+ }
62
+ /**
63
+ * Decorator to apply timeout to a method
64
+ */
65
+ export function withTimeout(config) {
66
+ return function (target, propertyKey, descriptor) {
67
+ const originalMethod = descriptor.value;
68
+ descriptor.value = async function (...args) {
69
+ return timeout(() => originalMethod.apply(this, args), config);
70
+ };
71
+ return descriptor;
72
+ };
73
+ }
74
+ /**
75
+ * Create a timeout wrapper function
76
+ */
77
+ export function createTimeout(config) {
78
+ return (fn) => timeout(fn, config);
79
+ }
80
+ /**
81
+ * Timeout presets for common use cases
82
+ */
83
+ export const timeoutPresets = {
84
+ /** Fast timeout for health checks */
85
+ healthCheck: {
86
+ timeout: 1000,
87
+ message: 'Health check timed out'
88
+ },
89
+ /** Standard timeout for API calls */
90
+ api: {
91
+ timeout: 10000,
92
+ message: 'API call timed out'
93
+ },
94
+ /** Extended timeout for complex operations */
95
+ extended: {
96
+ timeout: 30000,
97
+ message: 'Operation timed out'
98
+ },
99
+ /** Long timeout for batch operations */
100
+ batch: {
101
+ timeout: 120000,
102
+ message: 'Batch operation timed out'
103
+ },
104
+ /** Short timeout for cache operations */
105
+ cache: {
106
+ timeout: 100,
107
+ message: 'Cache operation timed out'
108
+ }
109
+ };
110
+ /**
111
+ * Create a racing timeout - returns first result or times out
112
+ */
113
+ export async function raceWithTimeout(promises, config) {
114
+ const mergedConfig = { ...DEFAULT_CONFIG, ...config };
115
+ const timeoutPromise = new Promise((_, reject) => {
116
+ setTimeout(() => {
117
+ mergedConfig.onTimeout?.();
118
+ reject(new TimeoutError(mergedConfig.timeout, mergedConfig.message));
119
+ }, mergedConfig.timeout);
120
+ });
121
+ return Promise.race([...promises, timeoutPromise]);
122
+ }
123
+ /**
124
+ * Execute with deadline (absolute time)
125
+ */
126
+ export async function withDeadline(fn, deadline, message) {
127
+ const now = Date.now();
128
+ const deadlineMs = deadline.getTime();
129
+ const remainingMs = deadlineMs - now;
130
+ if (remainingMs <= 0) {
131
+ throw new TimeoutError(0, message || 'Deadline already passed');
132
+ }
133
+ return timeout(fn, { timeout: remainingMs, message });
134
+ }
135
+ //# sourceMappingURL=timeout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeout.js","sourceRoot":"","sources":["../../src/resilience/timeout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,163 @@
1
+ /**
2
+ * Resilience Pattern Types
3
+ *
4
+ * Type definitions for all resilience patterns.
5
+ */
6
+ /**
7
+ * Circuit breaker states
8
+ */
9
+ export declare enum CircuitState {
10
+ CLOSED = "closed",
11
+ OPEN = "open",
12
+ HALF_OPEN = "half_open"
13
+ }
14
+ /**
15
+ * Circuit breaker configuration
16
+ */
17
+ export interface CircuitBreakerConfig {
18
+ /** Unique name for this circuit breaker */
19
+ name: string;
20
+ /** Number of failures before opening circuit */
21
+ failureThreshold: number;
22
+ /** Time in ms before attempting recovery */
23
+ recoveryTimeout: number;
24
+ /** Max calls allowed in half-open state */
25
+ halfOpenMaxCalls: number;
26
+ /** Failure rate threshold (0-1) to trip breaker */
27
+ failureRateThreshold?: number;
28
+ /** Exceptions that don't count as failures */
29
+ excludedErrors?: Array<new (...args: any[]) => Error>;
30
+ /** Callback when circuit opens */
31
+ onOpen?: () => void;
32
+ /** Callback when circuit closes */
33
+ onClose?: () => void;
34
+ /** Callback when circuit enters half-open */
35
+ onHalfOpen?: () => void;
36
+ }
37
+ /**
38
+ * Circuit breaker statistics
39
+ */
40
+ export interface CircuitBreakerStats {
41
+ totalCalls: number;
42
+ successfulCalls: number;
43
+ failedCalls: number;
44
+ rejectedCalls: number;
45
+ lastFailureTime?: number;
46
+ lastSuccessTime?: number;
47
+ state: CircuitState;
48
+ }
49
+ /**
50
+ * Retry policy configuration
51
+ */
52
+ export interface RetryConfig {
53
+ /** Maximum number of attempts */
54
+ maxAttempts: number;
55
+ /** Initial delay in ms */
56
+ initialDelay: number;
57
+ /** Maximum delay in ms */
58
+ maxDelay: number;
59
+ /** Backoff multiplier */
60
+ backoffMultiplier: number;
61
+ /** Add jitter to delays */
62
+ jitter: boolean;
63
+ /** Jitter factor (0-1) */
64
+ jitterFactor?: number;
65
+ /** Error codes/types that are retryable */
66
+ retryableErrors?: Array<string | (new (...args: any[]) => Error)>;
67
+ /** Error codes/types that should NOT be retried */
68
+ nonRetryableErrors?: Array<string | (new (...args: any[]) => Error)>;
69
+ /** Callback on each retry */
70
+ onRetry?: (error: Error, attempt: number, delay: number) => void;
71
+ }
72
+ /**
73
+ * Bulkhead configuration
74
+ */
75
+ export interface BulkheadConfig {
76
+ /** Maximum concurrent executions */
77
+ maxConcurrent: number;
78
+ /** Maximum queued requests */
79
+ maxQueued: number;
80
+ /** Queue timeout in ms */
81
+ queueTimeout: number;
82
+ /** Callback when bulkhead is full */
83
+ onReject?: () => void;
84
+ }
85
+ /**
86
+ * Rate limiter configuration
87
+ */
88
+ export interface RateLimiterConfig {
89
+ /** Time window in ms */
90
+ windowMs: number;
91
+ /** Maximum requests per window */
92
+ maxRequests: number;
93
+ /** Key generator function */
94
+ keyGenerator?: (context: any) => string;
95
+ /** Skip successful requests */
96
+ skipSuccessfulRequests?: boolean;
97
+ /** Skip failed requests */
98
+ skipFailedRequests?: boolean;
99
+ /** Callback when rate limit exceeded */
100
+ onLimitReached?: (key: string) => void;
101
+ }
102
+ /**
103
+ * Timeout configuration
104
+ */
105
+ export interface TimeoutConfig {
106
+ /** Timeout in ms */
107
+ timeout: number;
108
+ /** Custom timeout error message */
109
+ message?: string;
110
+ /** Callback on timeout */
111
+ onTimeout?: () => void;
112
+ }
113
+ /**
114
+ * Fallback configuration
115
+ */
116
+ export interface FallbackConfig<T> {
117
+ /** Fallback strategy */
118
+ strategy: 'cache' | 'default' | 'function' | 'error';
119
+ /** Default value for 'default' strategy */
120
+ defaultValue?: T;
121
+ /** Fallback function for 'function' strategy */
122
+ fallbackFn?: () => T | Promise<T>;
123
+ /** Cache TTL in ms for 'cache' strategy */
124
+ cacheTTL?: number;
125
+ }
126
+ /**
127
+ * Combined resilience options
128
+ */
129
+ export interface ResilienceOptions<T = any> {
130
+ circuitBreaker?: Partial<CircuitBreakerConfig>;
131
+ retry?: Partial<RetryConfig>;
132
+ bulkhead?: Partial<BulkheadConfig>;
133
+ rateLimiter?: Partial<RateLimiterConfig>;
134
+ timeout?: Partial<TimeoutConfig>;
135
+ fallback?: FallbackConfig<T>;
136
+ }
137
+ /**
138
+ * Error types
139
+ */
140
+ export declare class CircuitBreakerOpenError extends Error {
141
+ readonly name: string;
142
+ readonly retryAfter: number;
143
+ constructor(name: string, retryAfter: number);
144
+ }
145
+ export declare class BulkheadFullError extends Error {
146
+ readonly name: string;
147
+ constructor(name: string);
148
+ }
149
+ export declare class RateLimitExceededError extends Error {
150
+ readonly key: string;
151
+ readonly retryAfter: number;
152
+ constructor(key: string, retryAfter: number);
153
+ }
154
+ export declare class TimeoutError extends Error {
155
+ readonly timeout: number;
156
+ constructor(timeout: number, message?: string);
157
+ }
158
+ export declare class RetryExhaustedError extends Error {
159
+ readonly attempts: number;
160
+ readonly lastError: Error;
161
+ constructor(attempts: number, lastError: Error);
162
+ }
163
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/resilience/types.ts"],"names":[],"mappings":"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"}