@foundatiofx/fetchclient 1.0.1 → 1.1.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 (106) hide show
  1. package/esm/mod.js +3 -1
  2. package/esm/src/CircuitBreaker.js +356 -0
  3. package/esm/src/CircuitBreakerMiddleware.js +167 -0
  4. package/esm/src/DefaultHelpers.js +23 -0
  5. package/esm/src/FetchClient.js +1 -1
  6. package/esm/src/FetchClientCache.js +85 -8
  7. package/esm/src/FetchClientProvider.js +58 -3
  8. package/esm/src/mocks/MockHistory.js +63 -0
  9. package/esm/src/mocks/MockRegistry.js +267 -0
  10. package/esm/src/mocks/MockResponseBuilder.js +88 -0
  11. package/esm/src/mocks/mod.js +24 -0
  12. package/esm/src/mocks/types.js +1 -0
  13. package/package.json +12 -2
  14. package/readme.md +117 -7
  15. package/script/mod.js +9 -1
  16. package/script/src/CircuitBreaker.js +361 -0
  17. package/script/src/CircuitBreakerMiddleware.js +174 -0
  18. package/script/src/DefaultHelpers.js +26 -0
  19. package/script/src/FetchClient.js +1 -1
  20. package/script/src/FetchClientCache.js +85 -8
  21. package/script/src/FetchClientProvider.js +58 -3
  22. package/script/src/mocks/MockHistory.js +67 -0
  23. package/script/src/mocks/MockRegistry.js +271 -0
  24. package/script/src/mocks/MockResponseBuilder.js +92 -0
  25. package/script/src/mocks/mod.js +29 -0
  26. package/script/src/mocks/types.js +2 -0
  27. package/types/deps/jsr.io/@std/assert/1.0.18/almost_equals.d.ts.map +1 -0
  28. package/types/deps/jsr.io/@std/assert/1.0.18/array_includes.d.ts.map +1 -0
  29. package/types/deps/jsr.io/@std/assert/1.0.18/assert.d.ts.map +1 -0
  30. package/types/deps/jsr.io/@std/assert/{1.0.14 → 1.0.18}/assertion_error.d.ts.map +1 -1
  31. package/types/deps/jsr.io/@std/assert/1.0.18/equal.d.ts.map +1 -0
  32. package/types/deps/jsr.io/@std/assert/{1.0.14 → 1.0.18}/equals.d.ts.map +1 -1
  33. package/types/deps/jsr.io/@std/assert/{1.0.14 → 1.0.18}/exists.d.ts.map +1 -1
  34. package/types/deps/jsr.io/@std/assert/{1.0.14 → 1.0.18}/fail.d.ts.map +1 -1
  35. package/types/deps/jsr.io/@std/assert/{1.0.14 → 1.0.18}/false.d.ts.map +1 -1
  36. package/types/deps/jsr.io/@std/assert/{1.0.14 → 1.0.18}/greater.d.ts.map +1 -1
  37. package/types/deps/jsr.io/@std/assert/{1.0.14 → 1.0.18}/greater_or_equal.d.ts.map +1 -1
  38. package/types/deps/jsr.io/@std/assert/{1.0.14 → 1.0.18}/instance_of.d.ts.map +1 -1
  39. package/types/deps/jsr.io/@std/assert/{1.0.14 → 1.0.18}/is_error.d.ts.map +1 -1
  40. package/types/deps/jsr.io/@std/assert/{1.0.14 → 1.0.18}/less.d.ts.map +1 -1
  41. package/types/deps/jsr.io/@std/assert/{1.0.14 → 1.0.18}/less_or_equal.d.ts.map +1 -1
  42. package/types/deps/jsr.io/@std/assert/{1.0.14 → 1.0.18}/match.d.ts.map +1 -1
  43. package/types/deps/jsr.io/@std/assert/{1.0.14 → 1.0.18}/mod.d.ts.map +1 -1
  44. package/types/deps/jsr.io/@std/assert/{1.0.14 → 1.0.18}/not_equals.d.ts.map +1 -1
  45. package/types/deps/jsr.io/@std/assert/{1.0.14 → 1.0.18}/not_instance_of.d.ts.map +1 -1
  46. package/types/deps/jsr.io/@std/assert/{1.0.14 → 1.0.18}/not_match.d.ts.map +1 -1
  47. package/types/deps/jsr.io/@std/assert/{1.0.14 → 1.0.18}/not_strict_equals.d.ts.map +1 -1
  48. package/types/deps/jsr.io/@std/assert/{1.0.14 → 1.0.18}/object_match.d.ts.map +1 -1
  49. package/types/deps/jsr.io/@std/assert/{1.0.14 → 1.0.18}/rejects.d.ts.map +1 -1
  50. package/types/deps/jsr.io/@std/assert/{1.0.14 → 1.0.18}/strict_equals.d.ts.map +1 -1
  51. package/types/deps/jsr.io/@std/assert/{1.0.14 → 1.0.18}/string_includes.d.ts.map +1 -1
  52. package/types/deps/jsr.io/@std/assert/{1.0.14 → 1.0.18}/throws.d.ts.map +1 -1
  53. package/types/deps/jsr.io/@std/assert/{1.0.14 → 1.0.18}/unimplemented.d.ts.map +1 -1
  54. package/types/deps/jsr.io/@std/assert/{1.0.14 → 1.0.18}/unreachable.d.ts.map +1 -1
  55. package/types/deps/jsr.io/@std/internal/1.0.12/build_message.d.ts.map +1 -0
  56. package/types/deps/jsr.io/@std/internal/{1.0.10 → 1.0.12}/diff.d.ts.map +1 -1
  57. package/types/deps/jsr.io/@std/internal/1.0.12/diff_str.d.ts.map +1 -0
  58. package/types/deps/jsr.io/@std/internal/{1.0.10 → 1.0.12}/format.d.ts.map +1 -1
  59. package/types/deps/jsr.io/@std/internal/{1.0.10 → 1.0.12}/styles.d.ts.map +1 -1
  60. package/types/deps/jsr.io/@std/internal/1.0.12/types.d.ts.map +1 -0
  61. package/types/mod.d.ts +3 -1
  62. package/types/mod.d.ts.map +1 -1
  63. package/types/src/CircuitBreaker.d.ts +154 -0
  64. package/types/src/CircuitBreaker.d.ts.map +1 -0
  65. package/types/src/CircuitBreakerMiddleware.d.ts +93 -0
  66. package/types/src/CircuitBreakerMiddleware.d.ts.map +1 -0
  67. package/types/src/DefaultHelpers.d.ts +19 -0
  68. package/types/src/DefaultHelpers.d.ts.map +1 -1
  69. package/types/src/FetchClient.d.ts.map +1 -1
  70. package/types/src/FetchClientCache.d.ts +26 -1
  71. package/types/src/FetchClientCache.d.ts.map +1 -1
  72. package/types/src/FetchClientProvider.d.ts +24 -0
  73. package/types/src/FetchClientProvider.d.ts.map +1 -1
  74. package/types/src/RequestOptions.d.ts +6 -1
  75. package/types/src/RequestOptions.d.ts.map +1 -1
  76. package/types/src/mocks/MockHistory.d.ts +22 -0
  77. package/types/src/mocks/MockHistory.d.ts.map +1 -0
  78. package/types/src/mocks/MockRegistry.d.ts +113 -0
  79. package/types/src/mocks/MockRegistry.d.ts.map +1 -0
  80. package/types/src/mocks/MockResponseBuilder.d.ts +60 -0
  81. package/types/src/mocks/MockResponseBuilder.d.ts.map +1 -0
  82. package/types/src/mocks/mod.d.ts +26 -0
  83. package/types/src/mocks/mod.d.ts.map +1 -0
  84. package/types/src/mocks/types.d.ts +47 -0
  85. package/types/src/mocks/types.d.ts.map +1 -0
  86. package/types/src/tests/Caching.test.d.ts.map +1 -0
  87. package/types/src/tests/CircuitBreaker.test.d.ts.map +1 -0
  88. package/types/src/tests/ErrorHandling.test.d.ts.map +1 -0
  89. package/types/src/tests/HttpMethods.test.d.ts.map +1 -0
  90. package/types/src/tests/Integration.test.d.ts.map +1 -0
  91. package/types/src/tests/JsonParsing.test.d.ts.map +1 -0
  92. package/types/src/tests/Middleware.test.d.ts.map +1 -0
  93. package/types/src/tests/MockRegistry.test.d.ts.map +1 -0
  94. package/types/src/tests/Provider.test.d.ts.map +1 -0
  95. package/types/src/tests/RateLimit.test.d.ts.map +1 -0
  96. package/types/src/tests/TimeoutAbort.test.d.ts.map +1 -0
  97. package/types/src/tests/UrlBuilding.test.d.ts.map +1 -0
  98. package/types/deps/jsr.io/@std/assert/1.0.14/almost_equals.d.ts.map +0 -1
  99. package/types/deps/jsr.io/@std/assert/1.0.14/array_includes.d.ts.map +0 -1
  100. package/types/deps/jsr.io/@std/assert/1.0.14/assert.d.ts.map +0 -1
  101. package/types/deps/jsr.io/@std/assert/1.0.14/equal.d.ts.map +0 -1
  102. package/types/deps/jsr.io/@std/internal/1.0.10/build_message.d.ts.map +0 -1
  103. package/types/deps/jsr.io/@std/internal/1.0.10/diff_str.d.ts.map +0 -1
  104. package/types/deps/jsr.io/@std/internal/1.0.10/types.d.ts.map +0 -1
  105. package/types/src/FetchClient.test.d.ts.map +0 -1
  106. package/types/src/RateLimit.test.d.ts.map +0 -1
@@ -0,0 +1,154 @@
1
+ /**
2
+ * Circuit breaker state.
3
+ * - CLOSED: Normal operation, requests pass through
4
+ * - OPEN: Circuit tripped, requests blocked
5
+ * - HALF_OPEN: Testing if service recovered
6
+ */
7
+ export type CircuitState = "CLOSED" | "OPEN" | "HALF_OPEN";
8
+ /**
9
+ * Options for configuring a circuit breaker group.
10
+ */
11
+ export interface GroupCircuitBreakerOptions {
12
+ /** Number of failures before opening the circuit (default: 5) */
13
+ failureThreshold?: number;
14
+ /** Time window in ms for counting failures (default: 60000) */
15
+ failureWindowMs?: number;
16
+ /** Time in ms to stay OPEN before trying HALF_OPEN (default: 30000) */
17
+ openDurationMs?: number;
18
+ /** Number of successes in HALF_OPEN to close circuit (default: 2) */
19
+ successThreshold?: number;
20
+ /** Max concurrent requests allowed in HALF_OPEN state (default: 1) */
21
+ halfOpenMaxAttempts?: number;
22
+ /** Callback when circuit state changes */
23
+ onStateChange?: (from: CircuitState, to: CircuitState) => void;
24
+ }
25
+ /**
26
+ * Options for configuring the circuit breaker.
27
+ */
28
+ export interface CircuitBreakerOptions extends GroupCircuitBreakerOptions {
29
+ /** Function to determine which group a URL belongs to (default: returns "global") */
30
+ getGroupFunc?: (url: string) => string;
31
+ /** Per-group configuration overrides */
32
+ groups?: Record<string, GroupCircuitBreakerOptions>;
33
+ /** Callback when any circuit opens */
34
+ onOpen?: (group: string) => void;
35
+ /** Callback when any circuit closes */
36
+ onClose?: (group: string) => void;
37
+ /** Callback when any circuit enters half-open */
38
+ onHalfOpen?: (group: string) => void;
39
+ }
40
+ /**
41
+ * Circuit breaker for preventing cascading failures.
42
+ *
43
+ * When a service starts failing (returning 5xx errors, timing out, etc.),
44
+ * the circuit breaker "opens" and blocks further requests for a period,
45
+ * allowing the service time to recover.
46
+ *
47
+ * @example
48
+ * ```typescript
49
+ * const breaker = new CircuitBreaker({
50
+ * failureThreshold: 5, // Open after 5 failures
51
+ * openDurationMs: 30000, // Stay open for 30 seconds
52
+ * successThreshold: 2, // Close after 2 successes in HALF_OPEN
53
+ * });
54
+ *
55
+ * // Before making a request
56
+ * if (!breaker.isAllowed(url)) {
57
+ * // Circuit is open, don't make request
58
+ * return;
59
+ * }
60
+ *
61
+ * // After getting a response
62
+ * if (response.status >= 500) {
63
+ * breaker.recordFailure(url);
64
+ * } else {
65
+ * breaker.recordSuccess(url);
66
+ * }
67
+ * ```
68
+ */
69
+ export declare class CircuitBreaker {
70
+ #private;
71
+ constructor(options?: CircuitBreakerOptions);
72
+ /**
73
+ * Checks if a request to the given URL is allowed.
74
+ * Call this before making a request.
75
+ *
76
+ * @param url - The URL being requested
77
+ * @returns true if the request is allowed, false if circuit is open
78
+ */
79
+ isAllowed(url: string): boolean;
80
+ /**
81
+ * Records a successful response.
82
+ * Call this after receiving a successful (non-failure) response.
83
+ *
84
+ * @param url - The URL that was requested
85
+ */
86
+ recordSuccess(url: string): void;
87
+ /**
88
+ * Records a failed response.
89
+ * Call this after receiving a failure response (5xx, timeout, network error).
90
+ *
91
+ * @param url - The URL that was requested
92
+ */
93
+ recordFailure(url: string): void;
94
+ /**
95
+ * Gets the current state of the circuit for a URL.
96
+ *
97
+ * @param url - The URL to check
98
+ * @returns The current circuit state
99
+ */
100
+ getState(url: string): CircuitState;
101
+ /**
102
+ * Gets the number of failures in the current window for a URL.
103
+ *
104
+ * @param url - The URL to check
105
+ * @returns The failure count
106
+ */
107
+ getFailureCount(url: string): number;
108
+ /**
109
+ * Gets the time since the circuit opened for a URL.
110
+ *
111
+ * @param url - The URL to check
112
+ * @returns Time in ms since circuit opened, or null if not open
113
+ */
114
+ getTimeSinceOpen(url: string): number | null;
115
+ /**
116
+ * Gets the time remaining before the circuit transitions to HALF_OPEN.
117
+ *
118
+ * @param url - The URL to check
119
+ * @returns Time in ms until HALF_OPEN, or null if not applicable
120
+ */
121
+ getTimeUntilHalfOpen(url: string): number | null;
122
+ /**
123
+ * Manually resets (closes) the circuit for a URL or all circuits.
124
+ *
125
+ * @param url - Optional URL to reset. If omitted, resets all circuits.
126
+ */
127
+ reset(url?: string): void;
128
+ /**
129
+ * Manually trips (opens) the circuit for a URL.
130
+ *
131
+ * @param url - The URL to trip the circuit for
132
+ */
133
+ trip(url: string): void;
134
+ /**
135
+ * Sets options for a specific group.
136
+ *
137
+ * @param group - The group name
138
+ * @param options - The options to set
139
+ */
140
+ setGroupOptions(group: string, options: GroupCircuitBreakerOptions): void;
141
+ }
142
+ /**
143
+ * Groups URLs by their domain (hostname).
144
+ * Useful for per-domain circuit breakers.
145
+ *
146
+ * @example
147
+ * ```typescript
148
+ * const breaker = new CircuitBreaker({
149
+ * getGroupFunc: groupByDomain,
150
+ * });
151
+ * ```
152
+ */
153
+ export declare function groupByDomain(url: string): string;
154
+ //# sourceMappingURL=CircuitBreaker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CircuitBreaker.d.ts","sourceRoot":"","sources":["../../src/src/CircuitBreaker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,iEAAiE;IACjE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,+DAA+D;IAC/D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uEAAuE;IACvE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qEAAqE;IACrE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,sEAAsE;IACtE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,0CAA0C;IAC1C,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,KAAK,IAAI,CAAC;CAChE;AAED;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,0BAA0B;IACvE,qFAAqF;IACrF,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IACvC,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;IACpD,sCAAsC;IACtC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,uCAAuC;IACvC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,iDAAiD;IACjD,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC;AAqBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qBAAa,cAAc;;gBAQb,OAAO,CAAC,EAAE,qBAAqB;IAiH3C;;;;;;OAMG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAgC/B;;;;;OAKG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IA4BhC;;;;;OAKG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IA+BhC;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY;IAiBnC;;;;;OAKG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAUpC;;;;;OAKG;IACH,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAO5C;;;;;OAKG;IACH,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAahD;;;;OAIG;IACH,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAezB;;;;OAIG;IACH,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAMvB;;;;;OAKG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,0BAA0B,GAAG,IAAI;CAG1E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMjD"}
@@ -0,0 +1,93 @@
1
+ import { CircuitBreaker, type CircuitBreakerOptions, type CircuitState } from "./CircuitBreaker.js";
2
+ import type { FetchClientMiddleware } from "./FetchClientMiddleware.js";
3
+ /**
4
+ * Options for the circuit breaker middleware.
5
+ */
6
+ export interface CircuitBreakerMiddlewareOptions extends CircuitBreakerOptions {
7
+ /** Whether to throw CircuitOpenError instead of returning 503 (default: false) */
8
+ throwOnOpen?: boolean;
9
+ /** Custom error message when circuit is open */
10
+ errorMessage?: string;
11
+ /**
12
+ * Function to determine if a response is a failure.
13
+ * Default: status >= 500 or status === 429
14
+ */
15
+ isFailure?: (response: Response) => boolean;
16
+ }
17
+ /**
18
+ * Error thrown when a request is blocked due to an open circuit.
19
+ */
20
+ export declare class CircuitOpenError extends Error {
21
+ /** The group whose circuit is open */
22
+ readonly group: string;
23
+ /** The current circuit state */
24
+ readonly state: CircuitState;
25
+ /** When the circuit was opened (timestamp) */
26
+ readonly openedAt: number;
27
+ /** Suggested retry time in seconds */
28
+ readonly retryAfter: number;
29
+ constructor(group: string, state: CircuitState, openedAt: number, retryAfter: number, message?: string);
30
+ }
31
+ /**
32
+ * Middleware that implements the circuit breaker pattern.
33
+ *
34
+ * When a service starts failing (5xx errors, timeouts, network errors),
35
+ * the circuit breaker opens and blocks further requests for a period,
36
+ * returning 503 Service Unavailable immediately without hitting the API.
37
+ *
38
+ * @example
39
+ * ```typescript
40
+ * const middleware = new CircuitBreakerMiddleware({
41
+ * failureThreshold: 5,
42
+ * openDurationMs: 30000,
43
+ * });
44
+ *
45
+ * provider.useMiddleware(middleware.middleware());
46
+ * ```
47
+ */
48
+ export declare class CircuitBreakerMiddleware {
49
+ #private;
50
+ constructor(options?: CircuitBreakerMiddlewareOptions);
51
+ /**
52
+ * Gets the underlying circuit breaker instance.
53
+ */
54
+ get circuitBreaker(): CircuitBreaker;
55
+ /**
56
+ * Creates the middleware function for use with FetchClient.
57
+ *
58
+ * @returns The middleware function
59
+ */
60
+ middleware(): FetchClientMiddleware;
61
+ }
62
+ /**
63
+ * Creates a circuit breaker middleware with the given options.
64
+ *
65
+ * @param options - Circuit breaker configuration
66
+ * @returns The middleware function
67
+ *
68
+ * @example
69
+ * ```typescript
70
+ * provider.useMiddleware(createCircuitBreakerMiddleware({
71
+ * failureThreshold: 5,
72
+ * openDurationMs: 30000,
73
+ * }));
74
+ * ```
75
+ */
76
+ export declare function createCircuitBreakerMiddleware(options?: CircuitBreakerMiddlewareOptions): FetchClientMiddleware;
77
+ /**
78
+ * Creates a per-domain circuit breaker middleware.
79
+ * Each domain gets its own circuit breaker.
80
+ *
81
+ * @param options - Circuit breaker configuration
82
+ * @returns The middleware function
83
+ *
84
+ * @example
85
+ * ```typescript
86
+ * provider.useMiddleware(createPerDomainCircuitBreakerMiddleware({
87
+ * failureThreshold: 5,
88
+ * openDurationMs: 30000,
89
+ * }));
90
+ * ```
91
+ */
92
+ export declare function createPerDomainCircuitBreakerMiddleware(options?: Omit<CircuitBreakerMiddlewareOptions, "getGroupFunc">): FetchClientMiddleware;
93
+ //# sourceMappingURL=CircuitBreakerMiddleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CircuitBreakerMiddleware.d.ts","sourceRoot":"","sources":["../../src/src/CircuitBreakerMiddleware.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EAElB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAGxE;;GAEG;AACH,MAAM,WAAW,+BAAgC,SAAQ,qBAAqB;IAC5E,kFAAkF;IAClF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gDAAgD;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC;CAC7C;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,sCAAsC;IACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,gCAAgC;IAChC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,8CAA8C;IAC9C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,sCAAsC;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAG1B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM;CASnB;AAUD;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,wBAAwB;;gBAQvB,OAAO,CAAC,EAAE,+BAA+B;IASrD;;OAEG;IACH,IAAI,cAAc,IAAI,cAAc,CAEnC;IAED;;;;OAIG;IACH,UAAU,IAAI,qBAAqB;CAmEpC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,CAAC,EAAE,+BAA+B,GACxC,qBAAqB,CAGvB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uCAAuC,CACrD,OAAO,CAAC,EAAE,IAAI,CAAC,+BAA+B,EAAE,cAAc,CAAC,GAC9D,qBAAqB,CAKvB"}
@@ -1,10 +1,12 @@
1
1
  import type { FetchClient } from "./FetchClient.js";
2
+ import type { FetchClientCache } from "./FetchClientCache.js";
2
3
  import type { FetchClientMiddleware } from "./FetchClientMiddleware.js";
3
4
  import type { FetchClientOptions } from "./FetchClientOptions.js";
4
5
  import { type FetchClientProvider } from "./FetchClientProvider.js";
5
6
  import type { FetchClientResponse } from "./FetchClientResponse.js";
6
7
  import type { ProblemDetails } from "./ProblemDetails.js";
7
8
  import type { RateLimitMiddlewareOptions } from "./RateLimitMiddleware.js";
9
+ import type { CircuitBreakerMiddlewareOptions } from "./CircuitBreakerMiddleware.js";
8
10
  import type { GetRequestOptions, RequestOptions } from "./RequestOptions.js";
9
11
  /**
10
12
  * Gets a FetchClient instance from the current provider.
@@ -62,6 +64,11 @@ export declare function deleteJSON<T>(url: string, options?: RequestOptions): Pr
62
64
  * @returns The current FetchClientProvider.
63
65
  */
64
66
  export declare function getCurrentProvider(): FetchClientProvider;
67
+ /**
68
+ * Gets the cache from the current provider.
69
+ * @returns The FetchClientCache instance.
70
+ */
71
+ export declare function getCache(): FetchClientCache;
65
72
  /**
66
73
  * Sets the function that retrieves the current FetchClientProvider using whatever scoping mechanism is available.
67
74
  * @param getProviderFunc - The function that retrieves the current FetchClientProvider.
@@ -103,4 +110,16 @@ export declare function useRateLimit(options: RateLimitMiddlewareOptions): void;
103
110
  * @param options - The rate limiting configuration options.
104
111
  */
105
112
  export declare function usePerDomainRateLimit(options: Omit<RateLimitMiddlewareOptions, "getGroupFunc">): void;
113
+ /**
114
+ * Enables circuit breaker for any FetchClient instances created by the current provider.
115
+ * The circuit breaker monitors failures and blocks requests when a service is failing.
116
+ * @param options - The circuit breaker configuration options.
117
+ */
118
+ export declare function useCircuitBreaker(options?: CircuitBreakerMiddlewareOptions): void;
119
+ /**
120
+ * Enables per-domain circuit breaker for any FetchClient instances created by the current provider.
121
+ * Each domain gets its own circuit breaker, so failures on one domain don't affect others.
122
+ * @param options - The circuit breaker configuration options.
123
+ */
124
+ export declare function usePerDomainCircuitBreaker(options?: Omit<CircuitBreakerMiddlewareOptions, "getGroupFunc">): void;
106
125
  //# sourceMappingURL=DefaultHelpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultHelpers.d.ts","sourceRoot":"","sources":["../../src/src/DefaultHelpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAI7E;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,WAAW,CAExE;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,CAAC,EACvB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAEjC;AAED;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EACxB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,EACjC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAEjC;AAED;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CAAC,CAAC,EACvB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EACtB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAEjC;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,CAAC,EACzB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EACtB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAEjC;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAC1B,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAEjC;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,mBAAmB,CAMxD;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,eAAe,EAAE,MAAM,mBAAmB,GAAG,IAAI,QAGlD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,QAEzC;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,eAAe,EAAE,MAAM,MAAM,GAAG,IAAI,QAGrC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,QAGnE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,qBAAqB,QAE9D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,QAExD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,0BAA0B,QAGpC;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,IAAI,CAAC,0BAA0B,EAAE,cAAc,CAAC,QAG1D"}
1
+ {"version":3,"file":"DefaultHelpers.d.ts","sourceRoot":"","sources":["../../src/src/DefaultHelpers.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"FetchClient.d.ts","sourceRoot":"","sources":["../../src/src/FetchClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FetchClient.d.ts","sourceRoot":"","sources":["../../src/src/FetchClient.ts"],"names":[],"mappings":"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"}
@@ -2,11 +2,16 @@
2
2
  * Represents a cache key used in the FetchClientCache.
3
3
  */
4
4
  export type CacheKey = string[] | string;
5
+ /**
6
+ * Represents a cache tag used for grouping and invalidating cache entries.
7
+ */
8
+ export type CacheTag = string;
5
9
  /**
6
10
  * Represents an entry in the FetchClientCache.
7
11
  */
8
12
  type CacheEntry = {
9
13
  key: CacheKey;
14
+ tags: CacheTag[];
10
15
  lastAccess: Date;
11
16
  expires: Date;
12
17
  response: Response;
@@ -16,13 +21,15 @@ type CacheEntry = {
16
21
  */
17
22
  export declare class FetchClientCache {
18
23
  private cache;
24
+ private tagIndex;
19
25
  /**
20
26
  * Sets a response in the cache with the specified key.
21
27
  * @param key - The cache key.
22
28
  * @param response - The response to be cached.
23
29
  * @param cacheDuration - The duration for which the response should be cached (in milliseconds).
30
+ * @param tags - Optional tags for grouping and invalidating cache entries.
24
31
  */
25
- set(key: CacheKey, response: Response, cacheDuration?: number): void;
32
+ set(key: CacheKey, response: Response, cacheDuration?: number, tags?: CacheTag[]): void;
26
33
  /**
27
34
  * Retrieves a response from the cache with the specified key.
28
35
  * @param key - The cache key.
@@ -41,6 +48,23 @@ export declare class FetchClientCache {
41
48
  * @returns The number of responses that were deleted.
42
49
  */
43
50
  deleteAll(prefix: CacheKey): number;
51
+ /**
52
+ * Deletes all responses from the cache that have the specified tag.
53
+ * @param tag - The cache tag.
54
+ * @returns The number of responses that were deleted.
55
+ */
56
+ deleteByTag(tag: CacheTag): number;
57
+ /**
58
+ * Gets all tags currently in use in the cache.
59
+ * @returns An array of all cache tags.
60
+ */
61
+ getTags(): CacheTag[];
62
+ /**
63
+ * Gets the tags associated with a cache entry.
64
+ * @param key - The cache key.
65
+ * @returns The tags associated with the entry, or an empty array if not found.
66
+ */
67
+ getEntryTags(key: CacheKey): CacheTag[];
44
68
  /**
45
69
  * Checks if a response exists in the cache with the specified key.
46
70
  * @param key - The cache key.
@@ -57,6 +81,7 @@ export declare class FetchClientCache {
57
81
  */
58
82
  clear(): void;
59
83
  private getHash;
84
+ private removeTagAssociations;
60
85
  }
61
86
  export {};
62
87
  //# sourceMappingURL=FetchClientCache.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FetchClientCache.d.ts","sourceRoot":"","sources":["../../src/src/FetchClientCache.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC;AAEzC;;GAEG;AACH,KAAK,UAAU,GAAG;IAChB,GAAG,EAAE,QAAQ,CAAC;IACd,UAAU,EAAE,IAAI,CAAC;IACjB,OAAO,EAAE,IAAI,CAAC;IACd,QAAQ,EAAE,QAAQ,CAAC;CACpB,CAAC;AAEF;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAiC;IAE9C;;;;;OAKG;IACI,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAS3E;;;;OAIG;IACI,GAAG,CAAC,GAAG,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI;IAgB1C;;;;OAIG;IACI,MAAM,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO;IAIrC;;;;OAIG;IACI,SAAS,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM;IAc1C;;;;OAIG;IACI,GAAG,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO;IAIlC;;;OAGG;IACI,MAAM,IAAI,gBAAgB,CAAC,UAAU,CAAC;IAI7C;;OAEG;IACI,KAAK,IAAI,IAAI;IAIpB,OAAO,CAAC,OAAO;CAOhB"}
1
+ {"version":3,"file":"FetchClientCache.d.ts","sourceRoot":"","sources":["../../src/src/FetchClientCache.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC;AAEzC;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAE9B;;GAEG;AACH,KAAK,UAAU,GAAG;IAChB,GAAG,EAAE,QAAQ,CAAC;IACd,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,UAAU,EAAE,IAAI,CAAC;IACjB,OAAO,EAAE,IAAI,CAAC;IACd,QAAQ,EAAE,QAAQ,CAAC;CACpB,CAAC;AAEF;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,QAAQ,CAAoC;IAEpD;;;;;;OAMG;IACI,GAAG,CACR,GAAG,EAAE,QAAQ,EACb,QAAQ,EAAE,QAAQ,EAClB,aAAa,CAAC,EAAE,MAAM,EACtB,IAAI,CAAC,EAAE,QAAQ,EAAE,GAChB,IAAI;IA2BP;;;;OAIG;IACI,GAAG,CAAC,GAAG,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI;IAkB1C;;;;OAIG;IACI,MAAM,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO;IAWrC;;;;OAIG;IACI,SAAS,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM;IAgB1C;;;;OAIG;IACI,WAAW,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM;IAqBzC;;;OAGG;IACI,OAAO,IAAI,QAAQ,EAAE;IAM5B;;;;OAIG;IACI,YAAY,CAAC,GAAG,EAAE,QAAQ,GAAG,QAAQ,EAAE;IAK9C;;;;OAIG;IACI,GAAG,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO;IAIlC;;;OAGG;IACI,MAAM,IAAI,gBAAgB,CAAC,UAAU,CAAC;IAI7C;;OAEG;IACI,KAAK,IAAI,IAAI;IAKpB,OAAO,CAAC,OAAO;IAQf,OAAO,CAAC,qBAAqB;CAW9B"}
@@ -7,6 +7,8 @@ import type { FetchClientOptions } from "./FetchClientOptions.js";
7
7
  import { type IObjectEvent } from "./ObjectEvent.js";
8
8
  import { type RateLimitMiddlewareOptions } from "./RateLimitMiddleware.js";
9
9
  import { type RateLimiter } from "./RateLimiter.js";
10
+ import { type CircuitBreakerMiddlewareOptions } from "./CircuitBreakerMiddleware.js";
11
+ import { type CircuitBreaker } from "./CircuitBreaker.js";
10
12
  type Fetch = typeof globalThis.fetch;
11
13
  /**
12
14
  * Represents a provider for creating instances of the FetchClient class with shared default options and cache.
@@ -103,6 +105,28 @@ export declare class FetchClientProvider {
103
105
  * Removes the rate limiting middleware from all FetchClient instances created by this provider.
104
106
  */
105
107
  removeRateLimit(): void;
108
+ /**
109
+ * Enables circuit breaker for all FetchClient instances created by this provider.
110
+ * The circuit breaker monitors failures and blocks requests when a service is failing,
111
+ * allowing time for recovery.
112
+ * @param options - The circuit breaker configuration options.
113
+ */
114
+ useCircuitBreaker(options?: CircuitBreakerMiddlewareOptions): void;
115
+ /**
116
+ * Enables per-domain circuit breaker for all FetchClient instances created by this provider.
117
+ * Each domain gets its own circuit breaker, so failures on one domain don't affect others.
118
+ * @param options - The circuit breaker configuration options.
119
+ */
120
+ usePerDomainCircuitBreaker(options?: Omit<CircuitBreakerMiddlewareOptions, "getGroupFunc">): void;
121
+ /**
122
+ * Gets the circuit breaker instance.
123
+ * @returns The circuit breaker instance, or undefined if not enabled.
124
+ */
125
+ get circuitBreaker(): CircuitBreaker | undefined;
126
+ /**
127
+ * Removes the circuit breaker middleware from all FetchClient instances created by this provider.
128
+ */
129
+ removeCircuitBreaker(): void;
106
130
  }
107
131
  export declare const defaultInstance: FetchClientProvider;
108
132
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"FetchClientProvider.d.ts","sourceRoot":"","sources":["../../src/src/FetchClientProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,KAAK,YAAY,EAAe,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEnE,KAAK,KAAK,GAAG,OAAO,UAAU,CAAC,KAAK,CAAC;AAErC;;GAEG;AACH,qBAAa,mBAAmB;;IAQ9B;;;OAGG;gBACS,KAAK,CAAC,EAAE,KAAK;IAyBzB;;OAEG;IACH,IAAW,KAAK,IAAI,KAAK,GAAG,SAAS,CAEpC;IAED;;OAEG;IACH,IAAW,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,EAExC;IAED;;OAEG;IACH,IAAW,SAAS,IAAI,OAAO,CAE9B;IAED;;OAEG;IACH,IAAW,OAAO,IAAI,YAAY,CAAC,OAAO,CAAC,CAE1C;IAED;;OAEG;IACH,IAAW,YAAY,IAAI,MAAM,CAEhC;IAED;;OAEG;IACH,IAAW,OAAO,IAAI,OAAO,CAE5B;IAED;;OAEG;IACH,IAAW,OAAO,IAAI,kBAAkB,CAEvC;IAED;;OAEG;IACH,IAAW,OAAO,CAAC,KAAK,EAAE,kBAAkB,EAE3C;IAED;;OAEG;IACH,IAAW,KAAK,IAAI,gBAAgB,CAEnC;IAED;;;;OAIG;IACI,cAAc,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,WAAW;IAchE;;OAEG;IACI,YAAY,CAAC,OAAO,EAAE,kBAAkB;IAO/C;;;OAGG;IACI,kBAAkB,CAAC,eAAe,EAAE,MAAM,MAAM,GAAG,IAAI;IAO9D;;;OAGG;IACI,iBAAiB,CACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAQpE;;;OAGG;IACI,UAAU,CAAC,GAAG,EAAE,MAAM;IAO7B;;;OAGG;IACI,aAAa,CAAC,UAAU,EAAE,qBAAqB;IAUtD;;;OAGG;IACI,YAAY,CAAC,OAAO,EAAE,0BAA0B;IAKvD;;;OAGG;IACI,qBAAqB,CAC1B,OAAO,EAAE,IAAI,CAAC,0BAA0B,EAAE,cAAc,CAAC;IAS3D;;;OAGG;IACH,IAAW,WAAW,IAAI,WAAW,GAAG,SAAS,CAEhD;IAED;;OAEG;IACI,eAAe;CAMvB;AAGD,eAAO,MAAM,eAAe,EAAE,mBAA8B,CAAC"}
1
+ {"version":3,"file":"FetchClientProvider.d.ts","sourceRoot":"","sources":["../../src/src/FetchClientProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,KAAK,YAAY,EAAe,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAEL,KAAK,+BAA+B,EACrC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,KAAK,cAAc,EAEpB,MAAM,qBAAqB,CAAC;AAE7B,KAAK,KAAK,GAAG,OAAO,UAAU,CAAC,KAAK,CAAC;AAErC;;GAEG;AACH,qBAAa,mBAAmB;;IAW9B;;;OAGG;gBACS,KAAK,CAAC,EAAE,KAAK;IAyBzB;;OAEG;IACH,IAAW,KAAK,IAAI,KAAK,GAAG,SAAS,CAEpC;IAED;;OAEG;IACH,IAAW,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,EAExC;IAED;;OAEG;IACH,IAAW,SAAS,IAAI,OAAO,CAE9B;IAED;;OAEG;IACH,IAAW,OAAO,IAAI,YAAY,CAAC,OAAO,CAAC,CAE1C;IAED;;OAEG;IACH,IAAW,YAAY,IAAI,MAAM,CAEhC;IAED;;OAEG;IACH,IAAW,OAAO,IAAI,OAAO,CAE5B;IAED;;OAEG;IACH,IAAW,OAAO,IAAI,kBAAkB,CAEvC;IAED;;OAEG;IACH,IAAW,OAAO,CAAC,KAAK,EAAE,kBAAkB,EAE3C;IAED;;OAEG;IACH,IAAW,KAAK,IAAI,gBAAgB,CAEnC;IAED;;;;OAIG;IACI,cAAc,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,WAAW;IAchE;;OAEG;IACI,YAAY,CAAC,OAAO,EAAE,kBAAkB;IAO/C;;;OAGG;IACI,kBAAkB,CAAC,eAAe,EAAE,MAAM,MAAM,GAAG,IAAI;IAO9D;;;OAGG;IACI,iBAAiB,CACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAQpE;;;OAGG;IACI,UAAU,CAAC,GAAG,EAAE,MAAM;IAO7B;;;OAGG;IACI,aAAa,CAAC,UAAU,EAAE,qBAAqB;IAUtD;;;OAGG;IACI,YAAY,CAAC,OAAO,EAAE,0BAA0B;IAMvD;;;OAGG;IACI,qBAAqB,CAC1B,OAAO,EAAE,IAAI,CAAC,0BAA0B,EAAE,cAAc,CAAC;IAU3D;;;OAGG;IACH,IAAW,WAAW,IAAI,WAAW,GAAG,SAAS,CAEhD;IAED;;OAEG;IACI,eAAe;IAWtB;;;;;OAKG;IACI,iBAAiB,CAAC,OAAO,CAAC,EAAE,+BAA+B;IAOlE;;;;OAIG;IACI,0BAA0B,CAC/B,OAAO,CAAC,EAAE,IAAI,CAAC,+BAA+B,EAAE,cAAc,CAAC;IAWjE;;;OAGG;IACH,IAAW,cAAc,IAAI,cAAc,GAAG,SAAS,CAEtD;IAED;;OAEG;IACI,oBAAoB;CAU5B;AAGD,eAAO,MAAM,eAAe,EAAE,mBAA8B,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { CacheKey } from "./FetchClientCache.js";
1
+ import type { CacheKey, CacheTag } from "./FetchClientCache.js";
2
2
  import type { FetchClientResponse } from "./FetchClientResponse.js";
3
3
  /**
4
4
  * Represents the options for making a request using the FetchClient.
@@ -60,5 +60,10 @@ export type GetRequestOptions = RequestOptions & {
60
60
  * The duration for which the response should be cached, in milliseconds.
61
61
  */
62
62
  cacheDuration?: number;
63
+ /**
64
+ * Tags for grouping and invalidating cache entries. Multiple entries can share
65
+ * the same tag, allowing bulk invalidation via `cache.deleteByTag(tag)`.
66
+ */
67
+ cacheTags?: CacheTag[];
63
68
  };
64
69
  //# sourceMappingURL=RequestOptions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RequestOptions.d.ts","sourceRoot":"","sources":["../../src/src/RequestOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpE;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEjC;;OAEG;IACH,kCAAkC,CAAC,EAAE,OAAO,CAAC;IAE7C;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE/B;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,KAAK,OAAO,GAAG,IAAI,CAAC;IAExE;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;IAErB;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;CACnE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE5B;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG;IAC/C;;OAEG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC"}
1
+ {"version":3,"file":"RequestOptions.d.ts","sourceRoot":"","sources":["../../src/src/RequestOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpE;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEjC;;OAEG;IACH,kCAAkC,CAAC,EAAE,OAAO,CAAC;IAE7C;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE/B;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,KAAK,OAAO,GAAG,IAAI,CAAC;IAExE;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;IAErB;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;CACnE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE5B;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG;IAC/C;;OAEG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;CACxB,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { MockHistory } from "./types.js";
2
+ /**
3
+ * Implementation of MockHistory that tracks recorded requests.
4
+ */
5
+ export declare class MockHistoryImpl implements MockHistory {
6
+ #private;
7
+ get get(): Request[];
8
+ get post(): Request[];
9
+ get put(): Request[];
10
+ get patch(): Request[];
11
+ get delete(): Request[];
12
+ get all(): Request[];
13
+ /**
14
+ * Records a request in the history.
15
+ */
16
+ record(request: Request): void;
17
+ /**
18
+ * Clears all recorded history.
19
+ */
20
+ clear(): void;
21
+ }
22
+ //# sourceMappingURL=MockHistory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockHistory.d.ts","sourceRoot":"","sources":["../../../src/src/mocks/MockHistory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;GAEG;AACH,qBAAa,eAAgB,YAAW,WAAW;;IAQjD,IAAI,GAAG,IAAI,OAAO,EAAE,CAEnB;IAED,IAAI,IAAI,IAAI,OAAO,EAAE,CAEpB;IAED,IAAI,GAAG,IAAI,OAAO,EAAE,CAEnB;IAED,IAAI,KAAK,IAAI,OAAO,EAAE,CAErB;IAED,IAAI,MAAM,IAAI,OAAO,EAAE,CAEtB;IAED,IAAI,GAAG,IAAI,OAAO,EAAE,CAEnB;IAED;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAsB9B;;OAEG;IACH,KAAK,IAAI,IAAI;CAQd"}
@@ -0,0 +1,113 @@
1
+ import type { FetchClient } from "../FetchClient.js";
2
+ import type { FetchClientProvider } from "../FetchClientProvider.js";
3
+ import { MockResponseBuilder } from "./MockResponseBuilder.js";
4
+ import type { MockHistory } from "./types.js";
5
+ type Fetch = typeof globalThis.fetch;
6
+ /**
7
+ * A registry for defining mock responses that can be installed on a
8
+ * FetchClient or FetchClientProvider, or used as a standalone fetch replacement.
9
+ *
10
+ * @example Install on FetchClientProvider
11
+ * ```typescript
12
+ * const mocks = new MockRegistry();
13
+ * mocks.onGet('/api/users').reply(200, [{ id: 1 }]);
14
+ *
15
+ * const provider = new FetchClientProvider();
16
+ * mocks.install(provider);
17
+ *
18
+ * const client = provider.getFetchClient();
19
+ * const response = await client.getJSON('/api/users');
20
+ * ```
21
+ *
22
+ * @example Use as standalone fetch replacement
23
+ * ```typescript
24
+ * const mocks = new MockRegistry();
25
+ * mocks.onGet('/api/users').reply(200, [{ id: 1 }]);
26
+ *
27
+ * // Use directly as fetch
28
+ * const response = await mocks.fetch('/api/users');
29
+ *
30
+ * // Or pass to any library expecting a fetch function
31
+ * const client = new SomeHttpClient({ fetch: mocks.fetch });
32
+ * ```
33
+ */
34
+ export declare class MockRegistry {
35
+ #private;
36
+ /**
37
+ * Creates a mock for GET requests matching the given URL.
38
+ * @param url - URL string or RegExp to match
39
+ */
40
+ onGet(url: string | RegExp): MockResponseBuilder<MockRegistry>;
41
+ /**
42
+ * Creates a mock for POST requests matching the given URL.
43
+ * @param url - URL string or RegExp to match
44
+ */
45
+ onPost(url: string | RegExp): MockResponseBuilder<MockRegistry>;
46
+ /**
47
+ * Creates a mock for PUT requests matching the given URL.
48
+ * @param url - URL string or RegExp to match
49
+ */
50
+ onPut(url: string | RegExp): MockResponseBuilder<MockRegistry>;
51
+ /**
52
+ * Creates a mock for PATCH requests matching the given URL.
53
+ * @param url - URL string or RegExp to match
54
+ */
55
+ onPatch(url: string | RegExp): MockResponseBuilder<MockRegistry>;
56
+ /**
57
+ * Creates a mock for DELETE requests matching the given URL.
58
+ * @param url - URL string or RegExp to match
59
+ */
60
+ onDelete(url: string | RegExp): MockResponseBuilder<MockRegistry>;
61
+ /**
62
+ * Creates a mock for any HTTP method matching the given URL.
63
+ * @param url - URL string or RegExp to match
64
+ */
65
+ onAny(url: string | RegExp): MockResponseBuilder<MockRegistry>;
66
+ /**
67
+ * Installs the mock registry on a FetchClient or FetchClientProvider.
68
+ * Replaces the fetch implementation to intercept requests.
69
+ *
70
+ * @param target - The FetchClient or FetchClientProvider to install on
71
+ * @throws Error if already installed on another target
72
+ */
73
+ install(target: FetchClientProvider | FetchClient): void;
74
+ /**
75
+ * Restores the original fetch implementation.
76
+ */
77
+ restore(): void;
78
+ /**
79
+ * Gets the recorded request history.
80
+ */
81
+ get history(): MockHistory;
82
+ /**
83
+ * Gets the mock fetch function for standalone use.
84
+ * This allows using MockRegistry with any code that accepts a fetch function.
85
+ *
86
+ * @example
87
+ * ```typescript
88
+ * const mocks = new MockRegistry();
89
+ * mocks.onGet('/api/data').reply(200, { value: 42 });
90
+ *
91
+ * // Use directly
92
+ * const response = await mocks.fetch('/api/data');
93
+ *
94
+ * // Or pass to other libraries
95
+ * const client = new SomeClient({ fetch: mocks.fetch });
96
+ * ```
97
+ */
98
+ get fetch(): Fetch;
99
+ /**
100
+ * Clears all mocks and history.
101
+ */
102
+ reset(): void;
103
+ /**
104
+ * Clears all mocks but keeps history.
105
+ */
106
+ resetMocks(): void;
107
+ /**
108
+ * Clears history but keeps mocks.
109
+ */
110
+ resetHistory(): void;
111
+ }
112
+ export {};
113
+ //# sourceMappingURL=MockRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockRegistry.d.ts","sourceRoot":"","sources":["../../../src/src/mocks/MockRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAkB,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9D,KAAK,KAAK,GAAG,OAAO,UAAU,CAAC,KAAK,CAAC;AAErC;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,YAAY;;IAMvB;;;OAGG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,mBAAmB,CAAC,YAAY,CAAC;IAI9D;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,mBAAmB,CAAC,YAAY,CAAC;IAI/D;;;OAGG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,mBAAmB,CAAC,YAAY,CAAC;IAI9D;;;OAGG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,mBAAmB,CAAC,YAAY,CAAC;IAIhE;;;OAGG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,mBAAmB,CAAC,YAAY,CAAC;IAIjE;;;OAGG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,mBAAmB,CAAC,YAAY,CAAC;IAoB9D;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,EAAE,mBAAmB,GAAG,WAAW,GAAG,IAAI;IAyBxD;;OAEG;IACH,OAAO,IAAI,IAAI;IAkIf;;OAEG;IACH,IAAI,OAAO,IAAI,WAAW,CAEzB;IAED;;;;;;;;;;;;;;;OAeG;IACH,IAAI,KAAK,IAAI,KAAK,CAOjB;IAED;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACH,YAAY,IAAI,IAAI;CAGrB"}