@fgrzl/fetch 1.1.0-alpha.8 → 1.1.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 (224) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/CONTRIBUTING.md +327 -0
  3. package/README.md +50 -21
  4. package/dist/cjs/index.js +1110 -105
  5. package/dist/cjs/index.js.map +1 -1
  6. package/dist/cjs/index.min.js +2 -0
  7. package/dist/cjs/index.min.js.map +1 -0
  8. package/dist/index.d.ts +1381 -10
  9. package/dist/index.js +1066 -91
  10. package/dist/index.js.map +1 -1
  11. package/dist/index.min.js +2 -0
  12. package/dist/index.min.js.map +1 -0
  13. package/package.json +14 -5
  14. package/dist/cjs/client/fetch-client.d.ts +0 -189
  15. package/dist/cjs/client/fetch-client.d.ts.map +0 -1
  16. package/dist/cjs/client/fetch-client.js +0 -339
  17. package/dist/cjs/client/fetch-client.js.map +0 -1
  18. package/dist/cjs/client/index.d.ts +0 -11
  19. package/dist/cjs/client/index.d.ts.map +0 -1
  20. package/dist/cjs/client/index.js +0 -14
  21. package/dist/cjs/client/index.js.map +0 -1
  22. package/dist/cjs/client/types.d.ts +0 -63
  23. package/dist/cjs/client/types.d.ts.map +0 -1
  24. package/dist/cjs/client/types.js +0 -9
  25. package/dist/cjs/client/types.js.map +0 -1
  26. package/dist/cjs/errors/index.d.ts +0 -64
  27. package/dist/cjs/errors/index.d.ts.map +0 -1
  28. package/dist/cjs/errors/index.js +0 -79
  29. package/dist/cjs/errors/index.js.map +0 -1
  30. package/dist/cjs/index.d.ts +0 -65
  31. package/dist/cjs/index.d.ts.map +0 -1
  32. package/dist/cjs/middleware/authentication/authentication.d.ts +0 -31
  33. package/dist/cjs/middleware/authentication/authentication.d.ts.map +0 -1
  34. package/dist/cjs/middleware/authentication/authentication.js +0 -93
  35. package/dist/cjs/middleware/authentication/authentication.js.map +0 -1
  36. package/dist/cjs/middleware/authentication/index.d.ts +0 -37
  37. package/dist/cjs/middleware/authentication/index.d.ts.map +0 -1
  38. package/dist/cjs/middleware/authentication/index.js +0 -42
  39. package/dist/cjs/middleware/authentication/index.js.map +0 -1
  40. package/dist/cjs/middleware/authentication/types.d.ts +0 -73
  41. package/dist/cjs/middleware/authentication/types.d.ts.map +0 -1
  42. package/dist/cjs/middleware/authentication/types.js +0 -6
  43. package/dist/cjs/middleware/authentication/types.js.map +0 -1
  44. package/dist/cjs/middleware/authorization/authorization.d.ts +0 -30
  45. package/dist/cjs/middleware/authorization/authorization.d.ts.map +0 -1
  46. package/dist/cjs/middleware/authorization/authorization.js +0 -82
  47. package/dist/cjs/middleware/authorization/authorization.js.map +0 -1
  48. package/dist/cjs/middleware/authorization/index.d.ts +0 -36
  49. package/dist/cjs/middleware/authorization/index.d.ts.map +0 -1
  50. package/dist/cjs/middleware/authorization/index.js +0 -41
  51. package/dist/cjs/middleware/authorization/index.js.map +0 -1
  52. package/dist/cjs/middleware/authorization/types.d.ts +0 -67
  53. package/dist/cjs/middleware/authorization/types.d.ts.map +0 -1
  54. package/dist/cjs/middleware/authorization/types.js +0 -6
  55. package/dist/cjs/middleware/authorization/types.js.map +0 -1
  56. package/dist/cjs/middleware/cache/cache.d.ts +0 -41
  57. package/dist/cjs/middleware/cache/cache.d.ts.map +0 -1
  58. package/dist/cjs/middleware/cache/cache.js +0 -191
  59. package/dist/cjs/middleware/cache/cache.js.map +0 -1
  60. package/dist/cjs/middleware/cache/index.d.ts +0 -44
  61. package/dist/cjs/middleware/cache/index.d.ts.map +0 -1
  62. package/dist/cjs/middleware/cache/index.js +0 -50
  63. package/dist/cjs/middleware/cache/index.js.map +0 -1
  64. package/dist/cjs/middleware/cache/types.d.ts +0 -89
  65. package/dist/cjs/middleware/cache/types.d.ts.map +0 -1
  66. package/dist/cjs/middleware/cache/types.js +0 -6
  67. package/dist/cjs/middleware/cache/types.js.map +0 -1
  68. package/dist/cjs/middleware/csrf/csrf.d.ts +0 -34
  69. package/dist/cjs/middleware/csrf/csrf.d.ts.map +0 -1
  70. package/dist/cjs/middleware/csrf/csrf.js +0 -94
  71. package/dist/cjs/middleware/csrf/csrf.js.map +0 -1
  72. package/dist/cjs/middleware/csrf/index.d.ts +0 -57
  73. package/dist/cjs/middleware/csrf/index.d.ts.map +0 -1
  74. package/dist/cjs/middleware/csrf/index.js +0 -62
  75. package/dist/cjs/middleware/csrf/index.js.map +0 -1
  76. package/dist/cjs/middleware/csrf/types.d.ts +0 -57
  77. package/dist/cjs/middleware/csrf/types.d.ts.map +0 -1
  78. package/dist/cjs/middleware/csrf/types.js +0 -6
  79. package/dist/cjs/middleware/csrf/types.js.map +0 -1
  80. package/dist/cjs/middleware/index.d.ts +0 -115
  81. package/dist/cjs/middleware/index.d.ts.map +0 -1
  82. package/dist/cjs/middleware/index.js +0 -153
  83. package/dist/cjs/middleware/index.js.map +0 -1
  84. package/dist/cjs/middleware/logging/index.d.ts +0 -42
  85. package/dist/cjs/middleware/logging/index.d.ts.map +0 -1
  86. package/dist/cjs/middleware/logging/index.js +0 -47
  87. package/dist/cjs/middleware/logging/index.js.map +0 -1
  88. package/dist/cjs/middleware/logging/logging.d.ts +0 -29
  89. package/dist/cjs/middleware/logging/logging.d.ts.map +0 -1
  90. package/dist/cjs/middleware/logging/logging.js +0 -171
  91. package/dist/cjs/middleware/logging/logging.js.map +0 -1
  92. package/dist/cjs/middleware/logging/types.d.ts +0 -90
  93. package/dist/cjs/middleware/logging/types.d.ts.map +0 -1
  94. package/dist/cjs/middleware/logging/types.js +0 -6
  95. package/dist/cjs/middleware/logging/types.js.map +0 -1
  96. package/dist/cjs/middleware/rate-limit/index.d.ts +0 -16
  97. package/dist/cjs/middleware/rate-limit/index.d.ts.map +0 -1
  98. package/dist/cjs/middleware/rate-limit/index.js +0 -21
  99. package/dist/cjs/middleware/rate-limit/index.js.map +0 -1
  100. package/dist/cjs/middleware/rate-limit/rate-limit.d.ts +0 -14
  101. package/dist/cjs/middleware/rate-limit/rate-limit.d.ts.map +0 -1
  102. package/dist/cjs/middleware/rate-limit/rate-limit.js +0 -87
  103. package/dist/cjs/middleware/rate-limit/rate-limit.js.map +0 -1
  104. package/dist/cjs/middleware/rate-limit/types.d.ts +0 -97
  105. package/dist/cjs/middleware/rate-limit/types.d.ts.map +0 -1
  106. package/dist/cjs/middleware/rate-limit/types.js +0 -6
  107. package/dist/cjs/middleware/rate-limit/types.js.map +0 -1
  108. package/dist/cjs/middleware/retry/index.d.ts +0 -6
  109. package/dist/cjs/middleware/retry/index.d.ts.map +0 -1
  110. package/dist/cjs/middleware/retry/index.js +0 -11
  111. package/dist/cjs/middleware/retry/index.js.map +0 -1
  112. package/dist/cjs/middleware/retry/retry.d.ts +0 -39
  113. package/dist/cjs/middleware/retry/retry.d.ts.map +0 -1
  114. package/dist/cjs/middleware/retry/retry.js +0 -144
  115. package/dist/cjs/middleware/retry/retry.js.map +0 -1
  116. package/dist/cjs/middleware/retry/types.d.ts +0 -61
  117. package/dist/cjs/middleware/retry/types.d.ts.map +0 -1
  118. package/dist/cjs/middleware/retry/types.js +0 -6
  119. package/dist/cjs/middleware/retry/types.js.map +0 -1
  120. package/dist/client/fetch-client.d.ts +0 -189
  121. package/dist/client/fetch-client.d.ts.map +0 -1
  122. package/dist/client/fetch-client.js +0 -335
  123. package/dist/client/fetch-client.js.map +0 -1
  124. package/dist/client/index.d.ts +0 -11
  125. package/dist/client/index.d.ts.map +0 -1
  126. package/dist/client/index.js +0 -10
  127. package/dist/client/index.js.map +0 -1
  128. package/dist/client/types.d.ts +0 -63
  129. package/dist/client/types.d.ts.map +0 -1
  130. package/dist/client/types.js +0 -8
  131. package/dist/client/types.js.map +0 -1
  132. package/dist/errors/index.d.ts +0 -64
  133. package/dist/errors/index.d.ts.map +0 -1
  134. package/dist/errors/index.js +0 -73
  135. package/dist/errors/index.js.map +0 -1
  136. package/dist/index.d.ts.map +0 -1
  137. package/dist/middleware/authentication/authentication.d.ts +0 -31
  138. package/dist/middleware/authentication/authentication.d.ts.map +0 -1
  139. package/dist/middleware/authentication/authentication.js +0 -90
  140. package/dist/middleware/authentication/authentication.js.map +0 -1
  141. package/dist/middleware/authentication/index.d.ts +0 -37
  142. package/dist/middleware/authentication/index.d.ts.map +0 -1
  143. package/dist/middleware/authentication/index.js +0 -37
  144. package/dist/middleware/authentication/index.js.map +0 -1
  145. package/dist/middleware/authentication/types.d.ts +0 -73
  146. package/dist/middleware/authentication/types.d.ts.map +0 -1
  147. package/dist/middleware/authentication/types.js +0 -5
  148. package/dist/middleware/authentication/types.js.map +0 -1
  149. package/dist/middleware/authorization/authorization.d.ts +0 -30
  150. package/dist/middleware/authorization/authorization.d.ts.map +0 -1
  151. package/dist/middleware/authorization/authorization.js +0 -79
  152. package/dist/middleware/authorization/authorization.js.map +0 -1
  153. package/dist/middleware/authorization/index.d.ts +0 -36
  154. package/dist/middleware/authorization/index.d.ts.map +0 -1
  155. package/dist/middleware/authorization/index.js +0 -36
  156. package/dist/middleware/authorization/index.js.map +0 -1
  157. package/dist/middleware/authorization/types.d.ts +0 -67
  158. package/dist/middleware/authorization/types.d.ts.map +0 -1
  159. package/dist/middleware/authorization/types.js +0 -5
  160. package/dist/middleware/authorization/types.js.map +0 -1
  161. package/dist/middleware/cache/cache.d.ts +0 -41
  162. package/dist/middleware/cache/cache.d.ts.map +0 -1
  163. package/dist/middleware/cache/cache.js +0 -186
  164. package/dist/middleware/cache/cache.js.map +0 -1
  165. package/dist/middleware/cache/index.d.ts +0 -44
  166. package/dist/middleware/cache/index.d.ts.map +0 -1
  167. package/dist/middleware/cache/index.js +0 -44
  168. package/dist/middleware/cache/index.js.map +0 -1
  169. package/dist/middleware/cache/types.d.ts +0 -89
  170. package/dist/middleware/cache/types.d.ts.map +0 -1
  171. package/dist/middleware/cache/types.js +0 -5
  172. package/dist/middleware/cache/types.js.map +0 -1
  173. package/dist/middleware/csrf/csrf.d.ts +0 -34
  174. package/dist/middleware/csrf/csrf.d.ts.map +0 -1
  175. package/dist/middleware/csrf/csrf.js +0 -91
  176. package/dist/middleware/csrf/csrf.js.map +0 -1
  177. package/dist/middleware/csrf/index.d.ts +0 -57
  178. package/dist/middleware/csrf/index.d.ts.map +0 -1
  179. package/dist/middleware/csrf/index.js +0 -57
  180. package/dist/middleware/csrf/index.js.map +0 -1
  181. package/dist/middleware/csrf/types.d.ts +0 -57
  182. package/dist/middleware/csrf/types.d.ts.map +0 -1
  183. package/dist/middleware/csrf/types.js +0 -5
  184. package/dist/middleware/csrf/types.js.map +0 -1
  185. package/dist/middleware/index.d.ts +0 -115
  186. package/dist/middleware/index.d.ts.map +0 -1
  187. package/dist/middleware/index.js +0 -134
  188. package/dist/middleware/index.js.map +0 -1
  189. package/dist/middleware/logging/index.d.ts +0 -42
  190. package/dist/middleware/logging/index.d.ts.map +0 -1
  191. package/dist/middleware/logging/index.js +0 -42
  192. package/dist/middleware/logging/index.js.map +0 -1
  193. package/dist/middleware/logging/logging.d.ts +0 -29
  194. package/dist/middleware/logging/logging.d.ts.map +0 -1
  195. package/dist/middleware/logging/logging.js +0 -168
  196. package/dist/middleware/logging/logging.js.map +0 -1
  197. package/dist/middleware/logging/types.d.ts +0 -90
  198. package/dist/middleware/logging/types.d.ts.map +0 -1
  199. package/dist/middleware/logging/types.js +0 -5
  200. package/dist/middleware/logging/types.js.map +0 -1
  201. package/dist/middleware/rate-limit/index.d.ts +0 -16
  202. package/dist/middleware/rate-limit/index.d.ts.map +0 -1
  203. package/dist/middleware/rate-limit/index.js +0 -16
  204. package/dist/middleware/rate-limit/index.js.map +0 -1
  205. package/dist/middleware/rate-limit/rate-limit.d.ts +0 -14
  206. package/dist/middleware/rate-limit/rate-limit.d.ts.map +0 -1
  207. package/dist/middleware/rate-limit/rate-limit.js +0 -84
  208. package/dist/middleware/rate-limit/rate-limit.js.map +0 -1
  209. package/dist/middleware/rate-limit/types.d.ts +0 -97
  210. package/dist/middleware/rate-limit/types.d.ts.map +0 -1
  211. package/dist/middleware/rate-limit/types.js +0 -5
  212. package/dist/middleware/rate-limit/types.js.map +0 -1
  213. package/dist/middleware/retry/index.d.ts +0 -6
  214. package/dist/middleware/retry/index.d.ts.map +0 -1
  215. package/dist/middleware/retry/index.js +0 -6
  216. package/dist/middleware/retry/index.js.map +0 -1
  217. package/dist/middleware/retry/retry.d.ts +0 -39
  218. package/dist/middleware/retry/retry.d.ts.map +0 -1
  219. package/dist/middleware/retry/retry.js +0 -141
  220. package/dist/middleware/retry/retry.js.map +0 -1
  221. package/dist/middleware/retry/types.d.ts +0 -61
  222. package/dist/middleware/retry/types.d.ts.map +0 -1
  223. package/dist/middleware/retry/types.js +0 -5
  224. package/dist/middleware/retry/types.js.map +0 -1
@@ -1,57 +0,0 @@
1
- /**
2
- * @fileoverview CSRF protection middleware types and configuration.
3
- */
4
- /**
5
- * CSRF token provider function.
6
- * Should return the current CSRF token or empty string if not available.
7
- */
8
- export type CSRFTokenProvider = () => string;
9
- /**
10
- * CSRF configuration options - optimized for "pit of success".
11
- *
12
- * Smart defaults:
13
- * - Uses standard X-XSRF-TOKEN header
14
- * - Automatically extracts token from XSRF-TOKEN cookie
15
- * - Only adds token to state-changing methods (POST, PUT, PATCH, DELETE)
16
- */
17
- export interface CSRFOptions {
18
- /**
19
- * Function to get the current CSRF token.
20
- * Default: extracts from XSRF-TOKEN cookie (standard Rails/Laravel convention)
21
- *
22
- * @returns The CSRF token or empty string if not available
23
- *
24
- * @example Custom token provider:
25
- * ```typescript
26
- * const getToken = () => localStorage.getItem('csrf-token') || '';
27
- * ```
28
- */
29
- tokenProvider?: CSRFTokenProvider;
30
- /**
31
- * Header name to use for CSRF token (default: 'X-XSRF-TOKEN')
32
- * Common alternatives: 'X-CSRF-Token', 'X-CSRFToken'
33
- */
34
- headerName?: string;
35
- /**
36
- * Cookie name to read token from when using default provider (default: 'XSRF-TOKEN')
37
- * Common alternatives: 'csrf-token', '_token'
38
- */
39
- cookieName?: string;
40
- /**
41
- * HTTP methods that require CSRF protection (default: ['POST', 'PUT', 'PATCH', 'DELETE'])
42
- * GET and HEAD requests typically don't need CSRF tokens
43
- */
44
- protectedMethods?: string[];
45
- /**
46
- * Skip CSRF protection for requests matching these URL patterns
47
- * Useful for external API calls that don't need CSRF tokens
48
- *
49
- * @example
50
- * ```typescript
51
- * skipPatterns: [/^https:\/\/api\.external\.com\//, '/public-api/']
52
- * ```
53
- */
54
- skipPatterns?: (RegExp | string)[];
55
- }
56
- export {};
57
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/middleware/csrf/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,MAAM,CAAC;AAE7C;;;;;;;GAOG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;;;;;;;OAUG;IACH,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAElC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE5B;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;CACpC;AAGD,OAAO,EAAE,CAAC"}
@@ -1,5 +0,0 @@
1
- /**
2
- * @fileoverview CSRF protection middleware types and configuration.
3
- */
4
- export {};
5
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/middleware/csrf/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -1,115 +0,0 @@
1
- /**
2
- * @fileoverview Complete middleware collection for FetchClient - "pit of success" APIs.
3
- *
4
- * This module provides a comprehensive set of middleware for common HTTP client concerns:
5
- * - 🔐 Authentication: Bearer token injection
6
- * - 🛡️ Authorization: 401/403 response handling
7
- * - 💾 Cache: Response caching with TTL
8
- * - 🔒 CSRF: Cross-site request forgery protection
9
- * - 📝 Logging: Request/response logging
10
- * - 🚦 Rate Limiting: Request rate limiting with token bucket
11
- * - 🔄 Retry: Automatic retry with backoff
12
- *
13
- * Each middleware follows the "pit of success" pattern with:
14
- * - Smart defaults for common scenarios
15
- * - Simple `use{Middleware}()` convenience functions
16
- * - Advanced `create{Middleware}Middleware()` for custom scenarios
17
- * - Comprehensive TypeScript support
18
- *
19
- * @example Quick setup with multiple middleware:
20
- * ```typescript
21
- * import { FetchClient } from '@fgrzl/fetch';
22
- * import { useAuthentication, useRetry, useLogging } from '@fgrzl/fetch/middleware';
23
- *
24
- * const client = new FetchClient();
25
- * const enhancedClient = useAuthentication(client, {
26
- * tokenProvider: () => localStorage.getItem('auth-token') || ''
27
- * })
28
- * .pipe(useRetry, { retries: 3 })
29
- * .pipe(useLogging);
30
- * ```
31
- */
32
- export type { AuthenticationOptions, AuthTokenProvider, } from './authentication';
33
- export { useAuthentication, createAuthenticationMiddleware, } from './authentication';
34
- export type { AuthorizationOptions, UnauthorizedHandler, } from './authorization';
35
- export { useAuthorization, createAuthorizationMiddleware, } from './authorization';
36
- export type { CacheOptions, CacheStorage, CacheEntry, CacheKeyGenerator, } from './cache';
37
- export { useCache, createCacheMiddleware } from './cache';
38
- export { useCSRF } from './csrf';
39
- export type { LoggingOptions, Logger, LogLevel } from './logging';
40
- export { useLogging, createLoggingMiddleware } from './logging';
41
- export type { RateLimitOptions, RateLimitAlgorithm } from './rate-limit';
42
- export { useRateLimit, createRateLimitMiddleware } from './rate-limit';
43
- export type { RetryOptions } from './retry';
44
- export { useRetry, createRetryMiddleware } from './retry';
45
- /**
46
- * Common middleware combinations for typical use cases.
47
- * These provide pre-configured middleware stacks for common scenarios.
48
- */
49
- import type { FetchClient } from '../client/fetch-client';
50
- import { useAuthentication } from './authentication';
51
- import { useRetry } from './retry';
52
- import { useLogging } from './logging';
53
- import { useCache } from './cache';
54
- import { useRateLimit } from './rate-limit';
55
- /**
56
- * Production-ready middleware stack with authentication, retry, logging, and caching.
57
- * Perfect for API clients that need reliability and observability.
58
- *
59
- * @param client - The FetchClient to enhance
60
- * @param config - Configuration for each middleware
61
- * @returns Enhanced FetchClient with production middleware stack
62
- *
63
- * @example
64
- * ```typescript
65
- * const apiClient = useProductionStack(new FetchClient(), {
66
- * auth: { tokenProvider: () => getAuthToken() },
67
- * cache: { ttl: 5 * 60 * 1000 }, // 5 minutes
68
- * logging: { level: 'info' }
69
- * });
70
- * ```
71
- */
72
- export declare function useProductionStack(client: FetchClient, config?: {
73
- auth?: Parameters<typeof useAuthentication>[1];
74
- retry?: Parameters<typeof useRetry>[1];
75
- cache?: Parameters<typeof useCache>[1];
76
- logging?: Parameters<typeof useLogging>[1];
77
- rateLimit?: Parameters<typeof useRateLimit>[1];
78
- }): FetchClient;
79
- /**
80
- * Development-friendly middleware stack with comprehensive logging and retries.
81
- * Perfect for local development and debugging.
82
- *
83
- * @param client - The FetchClient to enhance
84
- * @param config - Configuration for development middleware
85
- * @returns Enhanced FetchClient with development middleware stack
86
- *
87
- * @example
88
- * ```typescript
89
- * const devClient = useDevelopmentStack(new FetchClient(), {
90
- * auth: { tokenProvider: () => 'dev-token' }
91
- * });
92
- * ```
93
- */
94
- export declare function useDevelopmentStack(client: FetchClient, config?: {
95
- auth?: Parameters<typeof useAuthentication>[1];
96
- }): FetchClient;
97
- /**
98
- * Basic middleware stack with just authentication and retry.
99
- * Perfect for simple API clients that need minimal overhead.
100
- *
101
- * @param client - The FetchClient to enhance
102
- * @param config - Basic configuration
103
- * @returns Enhanced FetchClient with basic middleware stack
104
- *
105
- * @example
106
- * ```typescript
107
- * const basicClient = useBasicStack(new FetchClient(), {
108
- * auth: { tokenProvider: () => getToken() }
109
- * });
110
- * ```
111
- */
112
- export declare function useBasicStack(client: FetchClient, config: {
113
- auth: Parameters<typeof useAuthentication>[1];
114
- }): FetchClient;
115
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAGH,YAAY,EACV,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,iBAAiB,EACjB,8BAA8B,GAC/B,MAAM,kBAAkB,CAAC;AAG1B,YAAY,EACV,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,gBAAgB,EAChB,6BAA6B,GAC9B,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,iBAAiB,GAClB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAG1D,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAGjC,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAElE,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAGhE,YAAY,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEzE,OAAO,EAAE,YAAY,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAGvE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAE1D;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,WAAW,EACnB,MAAM,GAAE;IACN,IAAI,CAAC,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/C,KAAK,CAAC,EAAE,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,KAAK,CAAC,EAAE,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,OAAO,CAAC,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,SAAS,CAAC,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;CAC3C,GACL,WAAW,CAyBb;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,WAAW,EACnB,MAAM,GAAE;IACN,IAAI,CAAC,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;CAC3C,GACL,WAAW,CAsBb;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE;IACN,IAAI,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;CAC/C,GACA,WAAW,CAEb"}
@@ -1,134 +0,0 @@
1
- /**
2
- * @fileoverview Complete middleware collection for FetchClient - "pit of success" APIs.
3
- *
4
- * This module provides a comprehensive set of middleware for common HTTP client concerns:
5
- * - 🔐 Authentication: Bearer token injection
6
- * - 🛡️ Authorization: 401/403 response handling
7
- * - 💾 Cache: Response caching with TTL
8
- * - 🔒 CSRF: Cross-site request forgery protection
9
- * - 📝 Logging: Request/response logging
10
- * - 🚦 Rate Limiting: Request rate limiting with token bucket
11
- * - 🔄 Retry: Automatic retry with backoff
12
- *
13
- * Each middleware follows the "pit of success" pattern with:
14
- * - Smart defaults for common scenarios
15
- * - Simple `use{Middleware}()` convenience functions
16
- * - Advanced `create{Middleware}Middleware()` for custom scenarios
17
- * - Comprehensive TypeScript support
18
- *
19
- * @example Quick setup with multiple middleware:
20
- * ```typescript
21
- * import { FetchClient } from '@fgrzl/fetch';
22
- * import { useAuthentication, useRetry, useLogging } from '@fgrzl/fetch/middleware';
23
- *
24
- * const client = new FetchClient();
25
- * const enhancedClient = useAuthentication(client, {
26
- * tokenProvider: () => localStorage.getItem('auth-token') || ''
27
- * })
28
- * .pipe(useRetry, { retries: 3 })
29
- * .pipe(useLogging);
30
- * ```
31
- */
32
- export { useAuthentication, createAuthenticationMiddleware, } from './authentication';
33
- export { useAuthorization, createAuthorizationMiddleware, } from './authorization';
34
- export { useCache, createCacheMiddleware } from './cache';
35
- // 🔒 CSRF middleware
36
- export { useCSRF } from './csrf';
37
- export { useLogging, createLoggingMiddleware } from './logging';
38
- export { useRateLimit, createRateLimitMiddleware } from './rate-limit';
39
- export { useRetry, createRetryMiddleware } from './retry';
40
- import { useAuthentication } from './authentication';
41
- import { useRetry } from './retry';
42
- import { useLogging } from './logging';
43
- import { useCache } from './cache';
44
- import { useRateLimit } from './rate-limit';
45
- /**
46
- * Production-ready middleware stack with authentication, retry, logging, and caching.
47
- * Perfect for API clients that need reliability and observability.
48
- *
49
- * @param client - The FetchClient to enhance
50
- * @param config - Configuration for each middleware
51
- * @returns Enhanced FetchClient with production middleware stack
52
- *
53
- * @example
54
- * ```typescript
55
- * const apiClient = useProductionStack(new FetchClient(), {
56
- * auth: { tokenProvider: () => getAuthToken() },
57
- * cache: { ttl: 5 * 60 * 1000 }, // 5 minutes
58
- * logging: { level: 'info' }
59
- * });
60
- * ```
61
- */
62
- export function useProductionStack(client, config = {}) {
63
- let enhanced = client;
64
- // Apply middleware in order: auth → cache → retry → rate-limit → logging
65
- if (config.auth) {
66
- enhanced = useAuthentication(enhanced, config.auth);
67
- }
68
- if (config.cache !== undefined) {
69
- enhanced = useCache(enhanced, config.cache);
70
- }
71
- if (config.retry !== undefined) {
72
- enhanced = useRetry(enhanced, config.retry);
73
- }
74
- if (config.rateLimit !== undefined) {
75
- enhanced = useRateLimit(enhanced, config.rateLimit);
76
- }
77
- if (config.logging !== undefined) {
78
- enhanced = useLogging(enhanced, config.logging);
79
- }
80
- return enhanced;
81
- }
82
- /**
83
- * Development-friendly middleware stack with comprehensive logging and retries.
84
- * Perfect for local development and debugging.
85
- *
86
- * @param client - The FetchClient to enhance
87
- * @param config - Configuration for development middleware
88
- * @returns Enhanced FetchClient with development middleware stack
89
- *
90
- * @example
91
- * ```typescript
92
- * const devClient = useDevelopmentStack(new FetchClient(), {
93
- * auth: { tokenProvider: () => 'dev-token' }
94
- * });
95
- * ```
96
- */
97
- export function useDevelopmentStack(client, config = {}) {
98
- let enhanced = client;
99
- if (config.auth) {
100
- enhanced = useAuthentication(enhanced, config.auth);
101
- }
102
- // Development-optimized settings
103
- enhanced = useRetry(enhanced, {
104
- maxRetries: 1,
105
- delay: 100,
106
- });
107
- enhanced = useLogging(enhanced, {
108
- level: 'debug',
109
- includeRequestHeaders: true,
110
- includeResponseHeaders: true,
111
- includeRequestBody: true,
112
- includeResponseBody: true,
113
- });
114
- return enhanced;
115
- }
116
- /**
117
- * Basic middleware stack with just authentication and retry.
118
- * Perfect for simple API clients that need minimal overhead.
119
- *
120
- * @param client - The FetchClient to enhance
121
- * @param config - Basic configuration
122
- * @returns Enhanced FetchClient with basic middleware stack
123
- *
124
- * @example
125
- * ```typescript
126
- * const basicClient = useBasicStack(new FetchClient(), {
127
- * auth: { tokenProvider: () => getToken() }
128
- * });
129
- * ```
130
- */
131
- export function useBasicStack(client, config) {
132
- return useRetry(useAuthentication(client, config.auth), { maxRetries: 2 });
133
- }
134
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"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"}
@@ -1,42 +0,0 @@
1
- /**
2
- * @fileoverview Logging middleware - "pit of success" API.
3
- */
4
- import type { FetchClient } from '../../client/fetch-client';
5
- import type { LoggingOptions } from './types';
6
- export type { LoggingOptions, Logger, LogEntry, LogLevel } from './types';
7
- export { createLoggingMiddleware } from './logging';
8
- /**
9
- * "Pit of success" API for adding logging to a FetchClient.
10
- * Logs HTTP requests and responses for debugging and monitoring.
11
- *
12
- * @param client - The FetchClient to add logging to
13
- * @param options - Logging configuration options
14
- * @returns A new FetchClient with logging middleware
15
- *
16
- * @example Basic logging to console:
17
- * ```typescript
18
- * const loggedClient = useLogging(client);
19
- *
20
- * // Logs: → GET /api/users
21
- * // Logs: ← GET /api/users → 200 (245ms)
22
- * await loggedClient.get('/api/users');
23
- * ```
24
- *
25
- * @example Custom log level and headers:
26
- * ```typescript
27
- * const loggedClient = useLogging(client, {
28
- * level: 'debug',
29
- * includeRequestHeaders: true,
30
- * includeResponseHeaders: true
31
- * });
32
- * ```
33
- *
34
- * @example Skip health check endpoints:
35
- * ```typescript
36
- * const loggedClient = useLogging(client, {
37
- * skipPatterns: ['/health', '/metrics', '/ping']
38
- * });
39
- * ```
40
- */
41
- export declare function useLogging(client: FetchClient, options?: LoggingOptions): FetchClient;
42
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/middleware/logging/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAI9C,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAEpD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE,cAAmB,GAC3B,WAAW,CAEb"}
@@ -1,42 +0,0 @@
1
- /**
2
- * @fileoverview Logging middleware - "pit of success" API.
3
- */
4
- import { createLoggingMiddleware } from './logging';
5
- export { createLoggingMiddleware } from './logging';
6
- /**
7
- * "Pit of success" API for adding logging to a FetchClient.
8
- * Logs HTTP requests and responses for debugging and monitoring.
9
- *
10
- * @param client - The FetchClient to add logging to
11
- * @param options - Logging configuration options
12
- * @returns A new FetchClient with logging middleware
13
- *
14
- * @example Basic logging to console:
15
- * ```typescript
16
- * const loggedClient = useLogging(client);
17
- *
18
- * // Logs: → GET /api/users
19
- * // Logs: ← GET /api/users → 200 (245ms)
20
- * await loggedClient.get('/api/users');
21
- * ```
22
- *
23
- * @example Custom log level and headers:
24
- * ```typescript
25
- * const loggedClient = useLogging(client, {
26
- * level: 'debug',
27
- * includeRequestHeaders: true,
28
- * includeResponseHeaders: true
29
- * });
30
- * ```
31
- *
32
- * @example Skip health check endpoints:
33
- * ```typescript
34
- * const loggedClient = useLogging(client, {
35
- * skipPatterns: ['/health', '/metrics', '/ping']
36
- * });
37
- * ```
38
- */
39
- export function useLogging(client, options = {}) {
40
- return client.use(createLoggingMiddleware(options));
41
- }
42
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/middleware/logging/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAIpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAEpD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,UAAU,UAAU,CACxB,MAAmB,EACnB,UAA0B,EAAE;IAE5B,OAAO,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC;AACtD,CAAC"}
@@ -1,29 +0,0 @@
1
- /**
2
- * @fileoverview Logging middleware implementation.
3
- */
4
- import type { FetchMiddleware } from '../../client/fetch-client';
5
- import type { LoggingOptions } from './types';
6
- /**
7
- * Creates logging middleware with smart defaults.
8
- * Logs HTTP requests and responses for debugging and monitoring.
9
- *
10
- * @param options - Logging configuration options
11
- * @returns Logging middleware for use with FetchClient
12
- *
13
- * @example Basic logging:
14
- * ```typescript
15
- * const loggedClient = useLogging(client);
16
- * // Logs all requests to console
17
- * ```
18
- *
19
- * @example Custom logger:
20
- * ```typescript
21
- * const loggedClient = useLogging(client, {
22
- * logger: winston.createLogger({...}),
23
- * level: 'debug',
24
- * includeRequestHeaders: true
25
- * });
26
- * ```
27
- */
28
- export declare function createLoggingMiddleware(options?: LoggingOptions): FetchMiddleware;
29
- //# sourceMappingURL=logging.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../../../src/middleware/logging/logging.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAA8B,MAAM,SAAS,CAAC;AA2D1E;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,GAAE,cAAmB,GAC3B,eAAe,CAmGjB"}
@@ -1,168 +0,0 @@
1
- /**
2
- * @fileoverview Logging middleware implementation.
3
- */
4
- /**
5
- * Default console logger implementation.
6
- */
7
- const defaultLogger = {
8
- // eslint-disable-next-line no-console -- allow console.debug in logger implementation
9
- debug: (message, data) => console.debug(message, data),
10
- // eslint-disable-next-line no-console -- allow console.info in logger implementation
11
- info: (message, data) => console.info(message, data),
12
- // eslint-disable-next-line no-console -- allow console.warn in logger implementation
13
- warn: (message, data) => console.warn(message, data),
14
- // eslint-disable-next-line no-console -- allow console.error in logger implementation
15
- error: (message, data) => console.error(message, data),
16
- };
17
- /**
18
- * Log level priority for filtering.
19
- */
20
- const LOG_LEVELS = {
21
- debug: 0,
22
- info: 1,
23
- warn: 2,
24
- error: 3,
25
- };
26
- /**
27
- * Default log formatter.
28
- */
29
- const defaultFormatter = (entry) => {
30
- const { method, url, status, duration } = entry;
31
- let message = `${method} ${url}`;
32
- if (status) {
33
- message += ` → ${status}`;
34
- }
35
- if (duration) {
36
- message += ` (${duration}ms)`;
37
- }
38
- return message;
39
- };
40
- /**
41
- * Checks if a URL should skip logging based on configured patterns.
42
- */
43
- function shouldSkipLogging(url, skipPatterns = []) {
44
- return skipPatterns.some((pattern) => {
45
- if (typeof pattern === 'string') {
46
- return url.includes(pattern);
47
- }
48
- return pattern.test(url);
49
- });
50
- }
51
- /**
52
- * Creates logging middleware with smart defaults.
53
- * Logs HTTP requests and responses for debugging and monitoring.
54
- *
55
- * @param options - Logging configuration options
56
- * @returns Logging middleware for use with FetchClient
57
- *
58
- * @example Basic logging:
59
- * ```typescript
60
- * const loggedClient = useLogging(client);
61
- * // Logs all requests to console
62
- * ```
63
- *
64
- * @example Custom logger:
65
- * ```typescript
66
- * const loggedClient = useLogging(client, {
67
- * logger: winston.createLogger({...}),
68
- * level: 'debug',
69
- * includeRequestHeaders: true
70
- * });
71
- * ```
72
- */
73
- export function createLoggingMiddleware(options = {}) {
74
- const { level = 'info', logger = defaultLogger, includeRequestHeaders = false, includeResponseHeaders = false, includeRequestBody = false, includeResponseBody = false, skipPatterns = [], formatter = defaultFormatter, } = options;
75
- const minLevel = LOG_LEVELS[level];
76
- return async (request, next) => {
77
- const url = request.url || '';
78
- const method = (request.method || 'GET').toUpperCase();
79
- // Skip logging if URL matches skip patterns
80
- if (shouldSkipLogging(url, skipPatterns)) {
81
- return next(request);
82
- }
83
- const startTime = Date.now();
84
- // Log request start (debug level)
85
- if (LOG_LEVELS.debug >= minLevel) {
86
- const requestHeaders = includeRequestHeaders
87
- ? getHeadersObject(request.headers)
88
- : undefined;
89
- const requestBody = includeRequestBody ? request.body : undefined;
90
- const requestEntry = {
91
- level: 'debug',
92
- timestamp: startTime,
93
- method,
94
- url,
95
- ...(requestHeaders && { requestHeaders }),
96
- ...(requestBody && { requestBody }),
97
- };
98
- logger.debug(`→ ${formatter(requestEntry)}`, requestEntry);
99
- }
100
- try {
101
- const response = await next(request);
102
- const duration = Date.now() - startTime;
103
- // Determine log level based on response status
104
- const logLevel = response.status >= 400 ? 'error' : 'info';
105
- // Log response (info/error level)
106
- if (LOG_LEVELS[logLevel] >= minLevel) {
107
- const responseHeaders = includeResponseHeaders
108
- ? getHeadersObject(response.headers)
109
- : undefined;
110
- const responseBody = includeResponseBody ? response.data : undefined;
111
- const responseEntry = {
112
- level: logLevel,
113
- timestamp: Date.now(),
114
- method,
115
- url,
116
- status: response.status,
117
- duration,
118
- ...(responseHeaders ? { responseHeaders } : {}),
119
- ...(responseBody !== undefined ? { responseBody } : {}),
120
- };
121
- const logMessage = `← ${formatter(responseEntry)}`;
122
- if (logLevel === 'error') {
123
- logger.error(logMessage, responseEntry);
124
- }
125
- else {
126
- logger.info(logMessage, responseEntry);
127
- }
128
- }
129
- return response;
130
- }
131
- catch (error) {
132
- const duration = Date.now() - startTime;
133
- // Log error
134
- if (LOG_LEVELS.error >= minLevel) {
135
- const errorEntry = {
136
- level: 'error',
137
- timestamp: Date.now(),
138
- method,
139
- url,
140
- duration,
141
- error: error instanceof Error ? error : new Error(String(error)),
142
- };
143
- logger.error(`✗ ${formatter(errorEntry)}`, errorEntry);
144
- }
145
- throw error;
146
- }
147
- };
148
- }
149
- /**
150
- * Convert Headers object to plain object.
151
- */
152
- function getHeadersObject(headers) {
153
- if (!headers) {
154
- return undefined;
155
- }
156
- const obj = {};
157
- if (headers instanceof Headers) {
158
- headers.forEach((value, key) => {
159
- obj[key] = value;
160
- });
161
- return obj;
162
- }
163
- else {
164
- // It's already a Record<string, string>
165
- return headers;
166
- }
167
- }
168
- //# sourceMappingURL=logging.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logging.js","sourceRoot":"","sources":["../../../src/middleware/logging/logging.ts"],"names":[],"mappings":"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"}