@fgrzl/fetch 1.1.0-alpha.3 → 1.1.0-alpha.7

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 (231) hide show
  1. package/README.md +15 -12
  2. package/dist/cjs/client/fetch-client.d.ts +189 -0
  3. package/dist/cjs/client/fetch-client.d.ts.map +1 -0
  4. package/dist/cjs/client/fetch-client.js +339 -0
  5. package/dist/cjs/client/fetch-client.js.map +1 -0
  6. package/dist/cjs/client/index.d.ts +11 -0
  7. package/dist/cjs/client/index.d.ts.map +1 -0
  8. package/dist/cjs/client/index.js +14 -0
  9. package/dist/cjs/client/index.js.map +1 -0
  10. package/dist/cjs/client/types.d.ts +63 -0
  11. package/dist/cjs/client/types.d.ts.map +1 -0
  12. package/dist/cjs/client/types.js +9 -0
  13. package/dist/cjs/client/types.js.map +1 -0
  14. package/dist/{errors.d.ts → cjs/errors/index.d.ts} +20 -3
  15. package/dist/cjs/errors/index.d.ts.map +1 -0
  16. package/dist/{errors.js → cjs/errors/index.js} +23 -3
  17. package/dist/cjs/errors/index.js.map +1 -0
  18. package/dist/cjs/index.d.ts +65 -0
  19. package/dist/cjs/index.d.ts.map +1 -0
  20. package/dist/cjs/index.js +118 -0
  21. package/dist/cjs/index.js.map +1 -0
  22. package/dist/cjs/middleware/authentication/authentication.d.ts +31 -0
  23. package/dist/cjs/middleware/authentication/authentication.d.ts.map +1 -0
  24. package/dist/cjs/middleware/authentication/authentication.js +93 -0
  25. package/dist/cjs/middleware/authentication/authentication.js.map +1 -0
  26. package/dist/cjs/middleware/authentication/index.d.ts +37 -0
  27. package/dist/cjs/middleware/authentication/index.d.ts.map +1 -0
  28. package/dist/cjs/middleware/authentication/index.js +42 -0
  29. package/dist/cjs/middleware/authentication/index.js.map +1 -0
  30. package/dist/cjs/middleware/authentication/types.d.ts +73 -0
  31. package/dist/cjs/middleware/authentication/types.d.ts.map +1 -0
  32. package/dist/cjs/middleware/authentication/types.js +6 -0
  33. package/dist/cjs/middleware/authentication/types.js.map +1 -0
  34. package/dist/cjs/middleware/authorization/authorization.d.ts +30 -0
  35. package/dist/cjs/middleware/authorization/authorization.d.ts.map +1 -0
  36. package/dist/cjs/middleware/authorization/authorization.js +82 -0
  37. package/dist/cjs/middleware/authorization/authorization.js.map +1 -0
  38. package/dist/cjs/middleware/authorization/index.d.ts +36 -0
  39. package/dist/cjs/middleware/authorization/index.d.ts.map +1 -0
  40. package/dist/cjs/middleware/authorization/index.js +41 -0
  41. package/dist/cjs/middleware/authorization/index.js.map +1 -0
  42. package/dist/cjs/middleware/authorization/types.d.ts +67 -0
  43. package/dist/cjs/middleware/authorization/types.d.ts.map +1 -0
  44. package/dist/cjs/middleware/authorization/types.js +6 -0
  45. package/dist/cjs/middleware/authorization/types.js.map +1 -0
  46. package/dist/cjs/middleware/cache/cache.d.ts +41 -0
  47. package/dist/cjs/middleware/cache/cache.d.ts.map +1 -0
  48. package/dist/cjs/middleware/cache/cache.js +191 -0
  49. package/dist/cjs/middleware/cache/cache.js.map +1 -0
  50. package/dist/cjs/middleware/cache/index.d.ts +44 -0
  51. package/dist/cjs/middleware/cache/index.d.ts.map +1 -0
  52. package/dist/cjs/middleware/cache/index.js +50 -0
  53. package/dist/cjs/middleware/cache/index.js.map +1 -0
  54. package/dist/cjs/middleware/cache/types.d.ts +89 -0
  55. package/dist/cjs/middleware/cache/types.d.ts.map +1 -0
  56. package/dist/cjs/middleware/cache/types.js +6 -0
  57. package/dist/cjs/middleware/cache/types.js.map +1 -0
  58. package/dist/cjs/middleware/csrf/csrf.d.ts +34 -0
  59. package/dist/cjs/middleware/csrf/csrf.d.ts.map +1 -0
  60. package/dist/cjs/middleware/csrf/csrf.js +94 -0
  61. package/dist/cjs/middleware/csrf/csrf.js.map +1 -0
  62. package/dist/cjs/middleware/csrf/index.d.ts +57 -0
  63. package/dist/cjs/middleware/csrf/index.d.ts.map +1 -0
  64. package/dist/cjs/middleware/csrf/index.js +62 -0
  65. package/dist/cjs/middleware/csrf/index.js.map +1 -0
  66. package/dist/cjs/middleware/csrf/types.d.ts +57 -0
  67. package/dist/cjs/middleware/csrf/types.d.ts.map +1 -0
  68. package/dist/cjs/middleware/csrf/types.js +6 -0
  69. package/dist/cjs/middleware/csrf/types.js.map +1 -0
  70. package/dist/cjs/middleware/index.d.ts +115 -0
  71. package/dist/cjs/middleware/index.d.ts.map +1 -0
  72. package/dist/cjs/middleware/index.js +153 -0
  73. package/dist/cjs/middleware/index.js.map +1 -0
  74. package/dist/cjs/middleware/logging/index.d.ts +42 -0
  75. package/dist/cjs/middleware/logging/index.d.ts.map +1 -0
  76. package/dist/cjs/middleware/logging/index.js +47 -0
  77. package/dist/cjs/middleware/logging/index.js.map +1 -0
  78. package/dist/cjs/middleware/logging/logging.d.ts +29 -0
  79. package/dist/cjs/middleware/logging/logging.d.ts.map +1 -0
  80. package/dist/cjs/middleware/logging/logging.js +171 -0
  81. package/dist/cjs/middleware/logging/logging.js.map +1 -0
  82. package/dist/cjs/middleware/logging/types.d.ts +90 -0
  83. package/dist/cjs/middleware/logging/types.d.ts.map +1 -0
  84. package/dist/cjs/middleware/logging/types.js +6 -0
  85. package/dist/cjs/middleware/logging/types.js.map +1 -0
  86. package/dist/cjs/middleware/rate-limit/index.d.ts +16 -0
  87. package/dist/cjs/middleware/rate-limit/index.d.ts.map +1 -0
  88. package/dist/cjs/middleware/rate-limit/index.js +21 -0
  89. package/dist/cjs/middleware/rate-limit/index.js.map +1 -0
  90. package/dist/cjs/middleware/rate-limit/rate-limit.d.ts +14 -0
  91. package/dist/cjs/middleware/rate-limit/rate-limit.d.ts.map +1 -0
  92. package/dist/cjs/middleware/rate-limit/rate-limit.js +87 -0
  93. package/dist/cjs/middleware/rate-limit/rate-limit.js.map +1 -0
  94. package/dist/cjs/middleware/rate-limit/types.d.ts +97 -0
  95. package/dist/cjs/middleware/rate-limit/types.d.ts.map +1 -0
  96. package/dist/cjs/middleware/rate-limit/types.js +6 -0
  97. package/dist/cjs/middleware/rate-limit/types.js.map +1 -0
  98. package/dist/cjs/middleware/retry/index.d.ts +6 -0
  99. package/dist/cjs/middleware/retry/index.d.ts.map +1 -0
  100. package/dist/cjs/middleware/retry/index.js +11 -0
  101. package/dist/cjs/middleware/retry/index.js.map +1 -0
  102. package/dist/cjs/middleware/retry/retry.d.ts +39 -0
  103. package/dist/cjs/middleware/retry/retry.d.ts.map +1 -0
  104. package/dist/cjs/middleware/retry/retry.js +144 -0
  105. package/dist/cjs/middleware/retry/retry.js.map +1 -0
  106. package/dist/cjs/middleware/retry/types.d.ts +61 -0
  107. package/dist/cjs/middleware/retry/types.d.ts.map +1 -0
  108. package/dist/cjs/middleware/retry/types.js +6 -0
  109. package/dist/cjs/middleware/retry/types.js.map +1 -0
  110. package/dist/client/fetch-client.d.ts +189 -0
  111. package/dist/client/fetch-client.d.ts.map +1 -0
  112. package/dist/client/fetch-client.js +335 -0
  113. package/dist/client/fetch-client.js.map +1 -0
  114. package/dist/client/index.d.ts +11 -0
  115. package/dist/client/index.d.ts.map +1 -0
  116. package/dist/client/index.js +10 -0
  117. package/dist/client/index.js.map +1 -0
  118. package/dist/client/types.d.ts +63 -0
  119. package/dist/client/types.d.ts.map +1 -0
  120. package/dist/client/types.js +8 -0
  121. package/dist/client/types.js.map +1 -0
  122. package/dist/errors/index.d.ts +64 -0
  123. package/dist/errors/index.d.ts.map +1 -0
  124. package/dist/errors/index.js +73 -0
  125. package/dist/errors/index.js.map +1 -0
  126. package/dist/index.d.ts +49 -20
  127. package/dist/index.d.ts.map +1 -0
  128. package/dist/index.js +86 -42
  129. package/dist/index.js.map +1 -1
  130. package/dist/middleware/authentication/authentication.d.ts +31 -0
  131. package/dist/middleware/authentication/authentication.d.ts.map +1 -0
  132. package/dist/middleware/authentication/authentication.js +90 -0
  133. package/dist/middleware/authentication/authentication.js.map +1 -0
  134. package/dist/middleware/authentication/index.d.ts +37 -0
  135. package/dist/middleware/authentication/index.d.ts.map +1 -0
  136. package/dist/middleware/authentication/index.js +37 -0
  137. package/dist/middleware/authentication/index.js.map +1 -0
  138. package/dist/middleware/authentication/types.d.ts +73 -0
  139. package/dist/middleware/authentication/types.d.ts.map +1 -0
  140. package/dist/middleware/authentication/types.js +5 -0
  141. package/dist/middleware/authentication/types.js.map +1 -0
  142. package/dist/middleware/authorization/authorization.d.ts +30 -0
  143. package/dist/middleware/authorization/authorization.d.ts.map +1 -0
  144. package/dist/middleware/authorization/authorization.js +79 -0
  145. package/dist/middleware/authorization/authorization.js.map +1 -0
  146. package/dist/middleware/authorization/index.d.ts +36 -0
  147. package/dist/middleware/authorization/index.d.ts.map +1 -0
  148. package/dist/middleware/authorization/index.js +36 -0
  149. package/dist/middleware/authorization/index.js.map +1 -0
  150. package/dist/middleware/authorization/types.d.ts +67 -0
  151. package/dist/middleware/authorization/types.d.ts.map +1 -0
  152. package/dist/middleware/authorization/types.js +5 -0
  153. package/dist/middleware/authorization/types.js.map +1 -0
  154. package/dist/middleware/cache/cache.d.ts +41 -0
  155. package/dist/middleware/cache/cache.d.ts.map +1 -0
  156. package/dist/middleware/cache/cache.js +186 -0
  157. package/dist/middleware/cache/cache.js.map +1 -0
  158. package/dist/middleware/cache/index.d.ts +44 -0
  159. package/dist/middleware/cache/index.d.ts.map +1 -0
  160. package/dist/middleware/cache/index.js +44 -0
  161. package/dist/middleware/cache/index.js.map +1 -0
  162. package/dist/middleware/cache/types.d.ts +89 -0
  163. package/dist/middleware/cache/types.d.ts.map +1 -0
  164. package/dist/middleware/cache/types.js +5 -0
  165. package/dist/middleware/cache/types.js.map +1 -0
  166. package/dist/middleware/csrf/csrf.d.ts +34 -0
  167. package/dist/middleware/csrf/csrf.d.ts.map +1 -0
  168. package/dist/middleware/csrf/csrf.js +91 -0
  169. package/dist/middleware/csrf/csrf.js.map +1 -0
  170. package/dist/middleware/csrf/index.d.ts +57 -0
  171. package/dist/middleware/csrf/index.d.ts.map +1 -0
  172. package/dist/middleware/csrf/index.js +57 -0
  173. package/dist/middleware/csrf/index.js.map +1 -0
  174. package/dist/middleware/csrf/types.d.ts +57 -0
  175. package/dist/middleware/csrf/types.d.ts.map +1 -0
  176. package/dist/middleware/csrf/types.js +5 -0
  177. package/dist/middleware/csrf/types.js.map +1 -0
  178. package/dist/middleware/index.d.ts +115 -0
  179. package/dist/middleware/index.d.ts.map +1 -0
  180. package/dist/middleware/index.js +134 -0
  181. package/dist/middleware/index.js.map +1 -0
  182. package/dist/middleware/logging/index.d.ts +42 -0
  183. package/dist/middleware/logging/index.d.ts.map +1 -0
  184. package/dist/middleware/logging/index.js +42 -0
  185. package/dist/middleware/logging/index.js.map +1 -0
  186. package/dist/middleware/logging/logging.d.ts +29 -0
  187. package/dist/middleware/logging/logging.d.ts.map +1 -0
  188. package/dist/middleware/logging/logging.js +168 -0
  189. package/dist/middleware/logging/logging.js.map +1 -0
  190. package/dist/middleware/logging/types.d.ts +90 -0
  191. package/dist/middleware/logging/types.d.ts.map +1 -0
  192. package/dist/middleware/logging/types.js +5 -0
  193. package/dist/middleware/logging/types.js.map +1 -0
  194. package/dist/middleware/rate-limit/index.d.ts +16 -0
  195. package/dist/middleware/rate-limit/index.d.ts.map +1 -0
  196. package/dist/middleware/rate-limit/index.js +16 -0
  197. package/dist/middleware/rate-limit/index.js.map +1 -0
  198. package/dist/middleware/rate-limit/rate-limit.d.ts +14 -0
  199. package/dist/middleware/rate-limit/rate-limit.d.ts.map +1 -0
  200. package/dist/middleware/rate-limit/rate-limit.js +84 -0
  201. package/dist/middleware/rate-limit/rate-limit.js.map +1 -0
  202. package/dist/middleware/rate-limit/types.d.ts +97 -0
  203. package/dist/middleware/rate-limit/types.d.ts.map +1 -0
  204. package/dist/middleware/rate-limit/types.js +5 -0
  205. package/dist/middleware/rate-limit/types.js.map +1 -0
  206. package/dist/middleware/retry/index.d.ts +6 -0
  207. package/dist/middleware/retry/index.d.ts.map +1 -0
  208. package/dist/middleware/retry/index.js +6 -0
  209. package/dist/middleware/retry/index.js.map +1 -0
  210. package/dist/middleware/retry/retry.d.ts +39 -0
  211. package/dist/middleware/retry/retry.d.ts.map +1 -0
  212. package/dist/middleware/retry/retry.js +141 -0
  213. package/dist/middleware/retry/retry.js.map +1 -0
  214. package/dist/middleware/retry/types.d.ts +61 -0
  215. package/dist/middleware/retry/types.d.ts.map +1 -0
  216. package/dist/middleware/retry/types.js +5 -0
  217. package/dist/middleware/retry/types.js.map +1 -0
  218. package/package.json +42 -8
  219. package/dist/client.d.ts +0 -133
  220. package/dist/client.js +0 -166
  221. package/dist/client.js.map +0 -1
  222. package/dist/csrf.d.ts +0 -32
  223. package/dist/csrf.js +0 -53
  224. package/dist/csrf.js.map +0 -1
  225. package/dist/errors.js.map +0 -1
  226. package/dist/test-utils.d.ts +0 -24
  227. package/dist/test-utils.js +0 -52
  228. package/dist/test-utils.js.map +0 -1
  229. package/dist/unauthorized.d.ts +0 -27
  230. package/dist/unauthorized.js +0 -41
  231. package/dist/unauthorized.js.map +0 -1
@@ -0,0 +1,63 @@
1
+ /**
2
+ * @fileoverview Type definitions for the HTTP client.
3
+ *
4
+ * This file contains core TypeScript interfaces and types for FetchClient.
5
+ * Designed for discoverability and type safety.
6
+ */
7
+ /**
8
+ * Typed response wrapper with consistent shape.
9
+ *
10
+ * ✅ Always returns this shape (never throws)
11
+ * ✅ Use `.ok` to check success
12
+ * ✅ Use `.data` for parsed response
13
+ * ✅ Use `.error` for failure details
14
+ *
15
+ * @template T - The expected type of the response data
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * const result = await client.get<User[]>('/api/users');
20
+ * if (result.ok) {
21
+ * console.log(result.data); // Type is User[]
22
+ * } else {
23
+ * console.error(result.error?.message); // Handle error
24
+ * }
25
+ * ```
26
+ */
27
+ export interface FetchResponse<T> {
28
+ /** The parsed response data (null if request failed) */
29
+ data: T | null;
30
+ /** HTTP status code (0 for network errors) */
31
+ status: number;
32
+ /** HTTP status text ('Network Error' for network failures) */
33
+ statusText: string;
34
+ /** Response headers */
35
+ headers: Headers;
36
+ /** The request URL */
37
+ url: string;
38
+ /** True if status 200-299, false otherwise */
39
+ ok: boolean;
40
+ /** Error details when ok is false */
41
+ error?: {
42
+ /** Human-readable error message */
43
+ message: string;
44
+ /** Raw error response body */
45
+ body?: unknown;
46
+ };
47
+ }
48
+ /**
49
+ * Configuration options for FetchClient.
50
+ *
51
+ * Optimized for "pit of success" - good defaults, minimal required config.
52
+ */
53
+ export interface FetchClientOptions {
54
+ /**
55
+ * Controls credential handling for requests.
56
+ *
57
+ * - 'same-origin' (default): Send cookies for same-origin requests
58
+ * - 'include': Always send cookies
59
+ * - 'omit': Never send cookies
60
+ */
61
+ credentials?: RequestCredentials;
62
+ }
63
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/client/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,wDAAwD;IACxD,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACf,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,UAAU,EAAE,MAAM,CAAC;IACnB,uBAAuB;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,sBAAsB;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,8CAA8C;IAC9C,EAAE,EAAE,OAAO,CAAC;IACZ,qCAAqC;IACrC,KAAK,CAAC,EAAE;QACN,mCAAmC;QACnC,OAAO,EAAE,MAAM,CAAC;QAChB,8BAA8B;QAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;CACH;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,kBAAkB,CAAC;CAClC"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Type definitions for the HTTP client.
4
+ *
5
+ * This file contains core TypeScript interfaces and types for FetchClient.
6
+ * Designed for discoverability and type safety.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/client/types.ts"],"names":[],"mappings":";AAAA;;;;;GAKG"}
@@ -1,5 +1,21 @@
1
1
  /**
2
- * @fileoverview Custom error classes for the fetch client.
2
+ * @fileoverview Custom error classes - "Pit of Success" pattern.
3
+ *
4
+ * 🎯 LEVEL 1: HttpError, NetworkError - Most common error types you'll catch
5
+ * 🎯 LEVEL 2: FetchError - Base error class for advanced error handling
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * try {
10
+ * await client.get('/api/data');
11
+ * } catch (error) {
12
+ * if (error instanceof HttpError) {
13
+ * console.log(`HTTP ${error.status}: ${error.statusText}`);
14
+ * } else if (error instanceof NetworkError) {
15
+ * console.log('Network connection failed');
16
+ * }
17
+ * }
18
+ * ```
3
19
  */
4
20
  /**
5
21
  * Base error class for all fetch client errors.
@@ -23,7 +39,7 @@ export declare class HttpError extends FetchError {
23
39
  /** The HTTP status text */
24
40
  readonly statusText: string;
25
41
  /** The response body (if available) */
26
- readonly body: any;
42
+ readonly body: unknown;
27
43
  /**
28
44
  * Creates a new HttpError.
29
45
  * @param status - HTTP status code
@@ -31,7 +47,7 @@ export declare class HttpError extends FetchError {
31
47
  * @param body - Response body
32
48
  * @param url - The request URL
33
49
  */
34
- constructor(status: number, statusText: string, body: any, url: string);
50
+ constructor(status: number, statusText: string, body: unknown, url: string);
35
51
  }
36
52
  /**
37
53
  * Error thrown when a network request fails completely.
@@ -45,3 +61,4 @@ export declare class NetworkError extends FetchError {
45
61
  */
46
62
  constructor(message: string, url: string, cause?: Error);
47
63
  }
64
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/errors/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH;;GAEG;AACH,qBAAa,UAAW,SAAQ,KAAK;IACnC,gCAAgC;IAChC,SAAgB,KAAK,CAAC,EAAE,KAAK,CAAC;IAE9B;;;;OAIG;gBACS,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAO3C;AAID;;GAEG;AACH,qBAAa,SAAU,SAAQ,UAAU;IACvC,2BAA2B;IAC3B,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,2BAA2B;IAC3B,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,uCAAuC;IACvC,SAAgB,IAAI,EAAE,OAAO,CAAC;IAE9B;;;;;;OAMG;gBACS,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM;CAO3E;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,UAAU;IAC1C;;;;;OAKG;gBACS,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAIxD"}
@@ -1,9 +1,26 @@
1
1
  "use strict";
2
2
  /**
3
- * @fileoverview Custom error classes for the fetch client.
3
+ * @fileoverview Custom error classes - "Pit of Success" pattern.
4
+ *
5
+ * 🎯 LEVEL 1: HttpError, NetworkError - Most common error types you'll catch
6
+ * 🎯 LEVEL 2: FetchError - Base error class for advanced error handling
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * try {
11
+ * await client.get('/api/data');
12
+ * } catch (error) {
13
+ * if (error instanceof HttpError) {
14
+ * console.log(`HTTP ${error.status}: ${error.statusText}`);
15
+ * } else if (error instanceof NetworkError) {
16
+ * console.log('Network connection failed');
17
+ * }
18
+ * }
19
+ * ```
4
20
  */
5
21
  Object.defineProperty(exports, "__esModule", { value: true });
6
22
  exports.NetworkError = exports.HttpError = exports.FetchError = void 0;
23
+ // 🎯 LEVEL 2: Base error class (for advanced use cases)
7
24
  /**
8
25
  * Base error class for all fetch client errors.
9
26
  */
@@ -16,10 +33,13 @@ class FetchError extends Error {
16
33
  constructor(message, cause) {
17
34
  super(message);
18
35
  this.name = 'FetchError';
19
- this.cause = cause;
36
+ if (cause !== undefined) {
37
+ this.cause = cause;
38
+ }
20
39
  }
21
40
  }
22
41
  exports.FetchError = FetchError;
42
+ // 🎯 LEVEL 1: Most commonly used error types
23
43
  /**
24
44
  * Error thrown when an HTTP request fails with a non-2xx status code.
25
45
  */
@@ -56,4 +76,4 @@ class NetworkError extends FetchError {
56
76
  }
57
77
  }
58
78
  exports.NetworkError = NetworkError;
59
- //# sourceMappingURL=errors.js.map
79
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/errors/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;;;AAEH,wDAAwD;AAExD;;GAEG;AACH,MAAa,UAAW,SAAQ,KAAK;IAInC;;;;OAIG;IACH,YAAY,OAAe,EAAE,KAAa;QACxC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QACzB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,CAAC;IACH,CAAC;CACF;AAhBD,gCAgBC;AAED,6CAA6C;AAE7C;;GAEG;AACH,MAAa,SAAU,SAAQ,UAAU;IAQvC;;;;;;OAMG;IACH,YAAY,MAAc,EAAE,UAAkB,EAAE,IAAa,EAAE,GAAW;QACxE,KAAK,CAAC,QAAQ,MAAM,IAAI,UAAU,OAAO,GAAG,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAtBD,8BAsBC;AAED;;GAEG;AACH,MAAa,YAAa,SAAQ,UAAU;IAC1C;;;;;OAKG;IACH,YAAY,OAAe,EAAE,GAAW,EAAE,KAAa;QACrD,KAAK,CAAC,qBAAqB,GAAG,KAAK,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;QACrD,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAXD,oCAWC"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * @fileoverview Main library entry point with "pit of success" architecture.
3
+ *
4
+ * This module exports everything users need in order of discoverability:
5
+ * 1. Pre-configured client with smart defaults (80% of users start here)
6
+ * 2. FetchClient for custom configurations
7
+ * 3. Individual middleware functions for specific needs
8
+ * 4. Pre-built middleware stacks for common scenarios
9
+ * 5. Types for TypeScript users
10
+ */
11
+ import { FetchClient } from './client/fetch-client';
12
+ /**
13
+ * 🎯 PIT OF SUCCESS: Pre-configured fetch client (Level 1 - 80% of users)
14
+ *
15
+ * This client is ready to use out of the box with production-ready middleware:
16
+ * - Authentication support (configure your token provider)
17
+ * - Automatic retries with exponential backoff
18
+ * - Response caching for GET requests
19
+ * - Request/response logging
20
+ * - Rate limiting protection
21
+ * - Same-origin credentials for session-based auth (cookies)
22
+ *
23
+ * @example Just import and use:
24
+ * ```typescript
25
+ * import api from '@fgrzl/fetch';
26
+ *
27
+ * // Works immediately - no setup required!
28
+ * const users = await api.get('/api/users');
29
+ * const newUser = await api.post('/api/users', { name: 'John' });
30
+ *
31
+ * // With query parameters
32
+ * const activeUsers = await api.get('/api/users', { status: 'active', limit: 10 });
33
+ * ```
34
+ *
35
+ * @example Configure authentication:
36
+ * ```typescript
37
+ * import api from '@fgrzl/fetch';
38
+ * import { useAuthentication } from '@fgrzl/fetch/middleware';
39
+ *
40
+ * const authClient = useAuthentication(api, {
41
+ * tokenProvider: () => localStorage.getItem('auth-token') || ''
42
+ * });
43
+ * ```
44
+ *
45
+ * @example For token-only auth (no cookies):
46
+ * ```typescript
47
+ * import { FetchClient, useAuthentication } from '@fgrzl/fetch';
48
+ *
49
+ * const tokenClient = useAuthentication(new FetchClient({
50
+ * credentials: 'omit' // Don't send cookies
51
+ * }), {
52
+ * tokenProvider: () => getJWTToken()
53
+ * });
54
+ * ```
55
+ */
56
+ declare const api: FetchClient;
57
+ export default api;
58
+ export { FetchClient } from './client/fetch-client';
59
+ export { FetchError, HttpError, NetworkError } from './errors';
60
+ export { useAuthentication, createAuthenticationMiddleware, useAuthorization, createAuthorizationMiddleware, useCache, createCacheMiddleware, useCSRF, useLogging, createLoggingMiddleware, useRateLimit, createRateLimitMiddleware, useRetry, createRetryMiddleware, } from './middleware';
61
+ export { useProductionStack, useDevelopmentStack, useBasicStack, } from './middleware';
62
+ export type { FetchMiddleware as InterceptMiddleware } from './client/fetch-client';
63
+ export type { FetchResponse, FetchClientOptions } from './client/types';
64
+ export type { AuthenticationOptions, AuthTokenProvider, AuthorizationOptions, UnauthorizedHandler, CacheOptions, CacheStorage, CacheEntry, CacheKeyGenerator, LoggingOptions, Logger, LogLevel, RateLimitOptions, RateLimitAlgorithm, RetryOptions, } from './middleware';
65
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGpD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,QAAA,MAAM,GAAG,aAwBR,CAAC;AAGF,eAAe,GAAG,CAAC;AAGnB,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG/D,OAAO,EAEL,iBAAiB,EACjB,8BAA8B,EAE9B,gBAAgB,EAChB,6BAA6B,EAE7B,QAAQ,EACR,qBAAqB,EAErB,OAAO,EAEP,UAAU,EACV,uBAAuB,EAEvB,YAAY,EACZ,yBAAyB,EAEzB,QAAQ,EACR,qBAAqB,GACtB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,GACd,MAAM,cAAc,CAAC;AAGtB,YAAY,EAAE,eAAe,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACpF,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAGxE,YAAY,EAEV,qBAAqB,EACrB,iBAAiB,EAEjB,oBAAoB,EACpB,mBAAmB,EAEnB,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,iBAAiB,EAEjB,cAAc,EACd,MAAM,EACN,QAAQ,EAER,gBAAgB,EAChB,kBAAkB,EAElB,YAAY,GACb,MAAM,cAAc,CAAC"}
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Main library entry point with "pit of success" architecture.
4
+ *
5
+ * This module exports everything users need in order of discoverability:
6
+ * 1. Pre-configured client with smart defaults (80% of users start here)
7
+ * 2. FetchClient for custom configurations
8
+ * 3. Individual middleware functions for specific needs
9
+ * 4. Pre-built middleware stacks for common scenarios
10
+ * 5. Types for TypeScript users
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.useBasicStack = exports.useDevelopmentStack = exports.useProductionStack = exports.createRetryMiddleware = exports.useRetry = exports.createRateLimitMiddleware = exports.useRateLimit = exports.createLoggingMiddleware = exports.useLogging = exports.useCSRF = exports.createCacheMiddleware = exports.useCache = exports.createAuthorizationMiddleware = exports.useAuthorization = exports.createAuthenticationMiddleware = exports.useAuthentication = exports.NetworkError = exports.HttpError = exports.FetchError = exports.FetchClient = void 0;
14
+ const fetch_client_1 = require("./client/fetch-client");
15
+ const middleware_1 = require("./middleware");
16
+ /**
17
+ * 🎯 PIT OF SUCCESS: Pre-configured fetch client (Level 1 - 80% of users)
18
+ *
19
+ * This client is ready to use out of the box with production-ready middleware:
20
+ * - Authentication support (configure your token provider)
21
+ * - Automatic retries with exponential backoff
22
+ * - Response caching for GET requests
23
+ * - Request/response logging
24
+ * - Rate limiting protection
25
+ * - Same-origin credentials for session-based auth (cookies)
26
+ *
27
+ * @example Just import and use:
28
+ * ```typescript
29
+ * import api from '@fgrzl/fetch';
30
+ *
31
+ * // Works immediately - no setup required!
32
+ * const users = await api.get('/api/users');
33
+ * const newUser = await api.post('/api/users', { name: 'John' });
34
+ *
35
+ * // With query parameters
36
+ * const activeUsers = await api.get('/api/users', { status: 'active', limit: 10 });
37
+ * ```
38
+ *
39
+ * @example Configure authentication:
40
+ * ```typescript
41
+ * import api from '@fgrzl/fetch';
42
+ * import { useAuthentication } from '@fgrzl/fetch/middleware';
43
+ *
44
+ * const authClient = useAuthentication(api, {
45
+ * tokenProvider: () => localStorage.getItem('auth-token') || ''
46
+ * });
47
+ * ```
48
+ *
49
+ * @example For token-only auth (no cookies):
50
+ * ```typescript
51
+ * import { FetchClient, useAuthentication } from '@fgrzl/fetch';
52
+ *
53
+ * const tokenClient = useAuthentication(new FetchClient({
54
+ * credentials: 'omit' // Don't send cookies
55
+ * }), {
56
+ * tokenProvider: () => getJWTToken()
57
+ * });
58
+ * ```
59
+ */
60
+ const api = (0, middleware_1.useProductionStack)(new fetch_client_1.FetchClient({
61
+ // Smart default: include cookies for session-based auth
62
+ // Can be overridden by creating a custom FetchClient
63
+ credentials: 'same-origin',
64
+ }), {
65
+ // Smart defaults - users can override as needed
66
+ retry: {
67
+ maxRetries: 2,
68
+ delay: 1000,
69
+ },
70
+ cache: {
71
+ ttl: 5 * 60 * 1000, // 5 minutes
72
+ methods: ['GET'],
73
+ },
74
+ logging: {
75
+ level: 'info',
76
+ },
77
+ rateLimit: {
78
+ maxRequests: 100,
79
+ windowMs: 60 * 1000, // 100 requests per minute
80
+ },
81
+ });
82
+ // 🎯 LEVEL 1: Export the production-ready client as default
83
+ exports.default = api;
84
+ // 🎯 LEVEL 2: FetchClient for custom configurations
85
+ var fetch_client_2 = require("./client/fetch-client");
86
+ Object.defineProperty(exports, "FetchClient", { enumerable: true, get: function () { return fetch_client_2.FetchClient; } });
87
+ var errors_1 = require("./errors");
88
+ Object.defineProperty(exports, "FetchError", { enumerable: true, get: function () { return errors_1.FetchError; } });
89
+ Object.defineProperty(exports, "HttpError", { enumerable: true, get: function () { return errors_1.HttpError; } });
90
+ Object.defineProperty(exports, "NetworkError", { enumerable: true, get: function () { return errors_1.NetworkError; } });
91
+ // 🎯 LEVEL 3: Individual middleware functions (import from our comprehensive middleware index)
92
+ var middleware_2 = require("./middleware");
93
+ // Authentication
94
+ Object.defineProperty(exports, "useAuthentication", { enumerable: true, get: function () { return middleware_2.useAuthentication; } });
95
+ Object.defineProperty(exports, "createAuthenticationMiddleware", { enumerable: true, get: function () { return middleware_2.createAuthenticationMiddleware; } });
96
+ // Authorization
97
+ Object.defineProperty(exports, "useAuthorization", { enumerable: true, get: function () { return middleware_2.useAuthorization; } });
98
+ Object.defineProperty(exports, "createAuthorizationMiddleware", { enumerable: true, get: function () { return middleware_2.createAuthorizationMiddleware; } });
99
+ // Cache
100
+ Object.defineProperty(exports, "useCache", { enumerable: true, get: function () { return middleware_2.useCache; } });
101
+ Object.defineProperty(exports, "createCacheMiddleware", { enumerable: true, get: function () { return middleware_2.createCacheMiddleware; } });
102
+ // CSRF
103
+ Object.defineProperty(exports, "useCSRF", { enumerable: true, get: function () { return middleware_2.useCSRF; } });
104
+ // Logging
105
+ Object.defineProperty(exports, "useLogging", { enumerable: true, get: function () { return middleware_2.useLogging; } });
106
+ Object.defineProperty(exports, "createLoggingMiddleware", { enumerable: true, get: function () { return middleware_2.createLoggingMiddleware; } });
107
+ // Rate Limiting
108
+ Object.defineProperty(exports, "useRateLimit", { enumerable: true, get: function () { return middleware_2.useRateLimit; } });
109
+ Object.defineProperty(exports, "createRateLimitMiddleware", { enumerable: true, get: function () { return middleware_2.createRateLimitMiddleware; } });
110
+ // Retry
111
+ Object.defineProperty(exports, "useRetry", { enumerable: true, get: function () { return middleware_2.useRetry; } });
112
+ Object.defineProperty(exports, "createRetryMiddleware", { enumerable: true, get: function () { return middleware_2.createRetryMiddleware; } });
113
+ // 🎯 LEVEL 4: Pre-built middleware stacks for common scenarios
114
+ var middleware_3 = require("./middleware");
115
+ Object.defineProperty(exports, "useProductionStack", { enumerable: true, get: function () { return middleware_3.useProductionStack; } });
116
+ Object.defineProperty(exports, "useDevelopmentStack", { enumerable: true, get: function () { return middleware_3.useDevelopmentStack; } });
117
+ Object.defineProperty(exports, "useBasicStack", { enumerable: true, get: function () { return middleware_3.useBasicStack; } });
118
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AAEH,wDAAoD;AACpD,6CAAkD;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,MAAM,GAAG,GAAG,IAAA,+BAAkB,EAC5B,IAAI,0BAAW,CAAC;IACd,wDAAwD;IACxD,qDAAqD;IACrD,WAAW,EAAE,aAAa;CAC3B,CAAC,EACF;IACE,gDAAgD;IAChD,KAAK,EAAE;QACL,UAAU,EAAE,CAAC;QACb,KAAK,EAAE,IAAI;KACZ;IACD,KAAK,EAAE;QACL,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,YAAY;QAChC,OAAO,EAAE,CAAC,KAAK,CAAC;KACjB;IACD,OAAO,EAAE;QACP,KAAK,EAAE,MAAM;KACd;IACD,SAAS,EAAE;QACT,WAAW,EAAE,GAAG;QAChB,QAAQ,EAAE,EAAE,GAAG,IAAI,EAAE,0BAA0B;KAChD;CACF,CACF,CAAC;AAEF,4DAA4D;AAC5D,kBAAe,GAAG,CAAC;AAEnB,oDAAoD;AACpD,sDAAoD;AAA3C,2GAAA,WAAW,OAAA;AACpB,mCAA+D;AAAtD,oGAAA,UAAU,OAAA;AAAE,mGAAA,SAAS,OAAA;AAAE,sGAAA,YAAY,OAAA;AAE5C,+FAA+F;AAC/F,2CAqBsB;AApBpB,iBAAiB;AACjB,+GAAA,iBAAiB,OAAA;AACjB,4HAAA,8BAA8B,OAAA;AAC9B,gBAAgB;AAChB,8GAAA,gBAAgB,OAAA;AAChB,2HAAA,6BAA6B,OAAA;AAC7B,QAAQ;AACR,sGAAA,QAAQ,OAAA;AACR,mHAAA,qBAAqB,OAAA;AACrB,OAAO;AACP,qGAAA,OAAO,OAAA;AACP,UAAU;AACV,wGAAA,UAAU,OAAA;AACV,qHAAA,uBAAuB,OAAA;AACvB,gBAAgB;AAChB,0GAAA,YAAY,OAAA;AACZ,uHAAA,yBAAyB,OAAA;AACzB,QAAQ;AACR,sGAAA,QAAQ,OAAA;AACR,mHAAA,qBAAqB,OAAA;AAGvB,+DAA+D;AAC/D,2CAIsB;AAHpB,gHAAA,kBAAkB,OAAA;AAClB,iHAAA,mBAAmB,OAAA;AACnB,2GAAA,aAAa,OAAA"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @fileoverview Authentication middleware implementation.
3
+ */
4
+ import type { FetchMiddleware } from '../../client/fetch-client';
5
+ import type { AuthenticationOptions } from './types';
6
+ /**
7
+ * Creates authentication middleware with smart defaults.
8
+ * Automatically adds Bearer tokens to requests.
9
+ *
10
+ * @param options - Authentication configuration options
11
+ * @returns Authentication middleware for use with FetchClient
12
+ *
13
+ * @example Basic usage:
14
+ * ```typescript
15
+ * const authClient = useAuthentication(client, {
16
+ * tokenProvider: () => localStorage.getItem('token') || ''
17
+ * });
18
+ * ```
19
+ *
20
+ * @example Async token provider:
21
+ * ```typescript
22
+ * const authClient = useAuthentication(client, {
23
+ * tokenProvider: async () => {
24
+ * const token = await getAuthToken();
25
+ * return token || '';
26
+ * }
27
+ * });
28
+ * ```
29
+ */
30
+ export declare function createAuthenticationMiddleware(options: AuthenticationOptions): FetchMiddleware;
31
+ //# sourceMappingURL=authentication.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authentication.d.ts","sourceRoot":"","sources":["../../../../src/middleware/authentication/authentication.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAoCrD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,qBAAqB,GAC7B,eAAe,CAkDjB"}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Authentication middleware implementation.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createAuthenticationMiddleware = createAuthenticationMiddleware;
7
+ /**
8
+ * Checks if a URL should skip authentication based on configured patterns.
9
+ */
10
+ function shouldSkipAuth(url, skipPatterns = []) {
11
+ return skipPatterns.some((pattern) => {
12
+ if (typeof pattern === 'string') {
13
+ return url.includes(pattern);
14
+ }
15
+ return pattern.test(url);
16
+ });
17
+ }
18
+ /**
19
+ * Checks if a URL should include authentication based on configured patterns.
20
+ */
21
+ function shouldIncludeAuth(url, includePatterns) {
22
+ if (!includePatterns || includePatterns.length === 0) {
23
+ return true; // Include by default if no patterns specified
24
+ }
25
+ return includePatterns.some((pattern) => {
26
+ if (typeof pattern === 'string') {
27
+ return url.includes(pattern);
28
+ }
29
+ return pattern.test(url);
30
+ });
31
+ }
32
+ /**
33
+ * Creates authentication middleware with smart defaults.
34
+ * Automatically adds Bearer tokens to requests.
35
+ *
36
+ * @param options - Authentication configuration options
37
+ * @returns Authentication middleware for use with FetchClient
38
+ *
39
+ * @example Basic usage:
40
+ * ```typescript
41
+ * const authClient = useAuthentication(client, {
42
+ * tokenProvider: () => localStorage.getItem('token') || ''
43
+ * });
44
+ * ```
45
+ *
46
+ * @example Async token provider:
47
+ * ```typescript
48
+ * const authClient = useAuthentication(client, {
49
+ * tokenProvider: async () => {
50
+ * const token = await getAuthToken();
51
+ * return token || '';
52
+ * }
53
+ * });
54
+ * ```
55
+ */
56
+ function createAuthenticationMiddleware(options) {
57
+ const { tokenProvider, headerName = 'Authorization', tokenType = 'Bearer', skipPatterns = [], includePatterns, } = options;
58
+ return async (request, next) => {
59
+ const url = request.url || '';
60
+ const parsedUrl = new URL(url);
61
+ const pathname = parsedUrl.pathname;
62
+ // Skip authentication if:
63
+ // 1. URL matches a skip pattern
64
+ // 2. URL doesn't match include patterns (if specified)
65
+ if (shouldSkipAuth(pathname, skipPatterns) ||
66
+ !shouldIncludeAuth(pathname, includePatterns)) {
67
+ return next(request);
68
+ }
69
+ try {
70
+ // Get auth token (may be async)
71
+ const token = await tokenProvider();
72
+ // Skip if no token available
73
+ if (!token) {
74
+ return next(request);
75
+ }
76
+ // Add auth header to request
77
+ const headers = new Headers(request.headers);
78
+ headers.set(headerName, `${tokenType} ${token}`);
79
+ // Create modified request with auth header
80
+ const modifiedRequest = {
81
+ ...request,
82
+ headers,
83
+ };
84
+ return next(modifiedRequest);
85
+ }
86
+ catch {
87
+ // If token provider fails, proceed without auth
88
+ // This ensures network requests don't fail due to auth issues
89
+ return next(request);
90
+ }
91
+ };
92
+ }
93
+ //# sourceMappingURL=authentication.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authentication.js","sourceRoot":"","sources":["../../../../src/middleware/authentication/authentication.ts"],"names":[],"mappings":";AAAA;;GAEG;;AA+DH,wEAoDC;AA9GD;;GAEG;AACH,SAAS,cAAc,CACrB,GAAW,EACX,eAAoC,EAAE;IAEtC,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;QACnC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CACxB,GAAW,EACX,eAAqC;IAErC,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrD,OAAO,IAAI,CAAC,CAAC,8CAA8C;IAC7D,CAAC;IAED,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;QACtC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,SAAgB,8BAA8B,CAC5C,OAA8B;IAE9B,MAAM,EACJ,aAAa,EACb,UAAU,GAAG,eAAe,EAC5B,SAAS,GAAG,QAAQ,EACpB,YAAY,GAAG,EAAE,EACjB,eAAe,GAChB,GAAG,OAAO,CAAC;IAEZ,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC7B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QAEpC,0BAA0B;QAC1B,gCAAgC;QAChC,uDAAuD;QACvD,IACE,cAAc,CAAC,QAAQ,EAAE,YAAY,CAAC;YACtC,CAAC,iBAAiB,CAAC,QAAQ,EAAE,eAAe,CAAC,EAC7C,CAAC;YACD,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;QAED,IAAI,CAAC;YACH,gCAAgC;YAChC,MAAM,KAAK,GAAG,MAAM,aAAa,EAAE,CAAC;YAEpC,6BAA6B;YAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;YACvB,CAAC;YAED,6BAA6B;YAC7B,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,SAAS,IAAI,KAAK,EAAE,CAAC,CAAC;YAEjD,2CAA2C;YAC3C,MAAM,eAAe,GAAG;gBACtB,GAAG,OAAO;gBACV,OAAO;aACR,CAAC;YAEF,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,gDAAgD;YAChD,8DAA8D;YAC9D,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * @fileoverview Authentication middleware - "pit of success" API.
3
+ */
4
+ import type { FetchClient } from '../../client/fetch-client';
5
+ import type { AuthenticationOptions } from './types';
6
+ export type { AuthenticationOptions, AuthTokenProvider } from './types';
7
+ export { createAuthenticationMiddleware } from './authentication';
8
+ /**
9
+ * "Pit of success" API for adding authentication to a FetchClient.
10
+ * Automatically adds Bearer tokens to requests.
11
+ *
12
+ * @param client - The FetchClient to add authentication to
13
+ * @param options - Authentication configuration
14
+ * @returns A new FetchClient with authentication middleware
15
+ *
16
+ * @example Basic token from localStorage:
17
+ * ```typescript
18
+ * const authClient = useAuthentication(client, {
19
+ * tokenProvider: () => localStorage.getItem('auth-token') || ''
20
+ * });
21
+ * ```
22
+ *
23
+ * @example Async token with refresh:
24
+ * ```typescript
25
+ * const authClient = useAuthentication(client, {
26
+ * tokenProvider: async () => {
27
+ * let token = localStorage.getItem('auth-token');
28
+ * if (!token || isExpired(token)) {
29
+ * token = await refreshToken();
30
+ * }
31
+ * return token || '';
32
+ * }
33
+ * });
34
+ * ```
35
+ */
36
+ export declare function useAuthentication(client: FetchClient, options: AuthenticationOptions): FetchClient;
37
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/middleware/authentication/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAIrD,YAAY,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AACxE,OAAO,EAAE,8BAA8B,EAAE,MAAM,kBAAkB,CAAC;AAElE;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,qBAAqB,GAC7B,WAAW,CAEb"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Authentication middleware - "pit of success" API.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createAuthenticationMiddleware = void 0;
7
+ exports.useAuthentication = useAuthentication;
8
+ const authentication_1 = require("./authentication");
9
+ var authentication_2 = require("./authentication");
10
+ Object.defineProperty(exports, "createAuthenticationMiddleware", { enumerable: true, get: function () { return authentication_2.createAuthenticationMiddleware; } });
11
+ /**
12
+ * "Pit of success" API for adding authentication to a FetchClient.
13
+ * Automatically adds Bearer tokens to requests.
14
+ *
15
+ * @param client - The FetchClient to add authentication to
16
+ * @param options - Authentication configuration
17
+ * @returns A new FetchClient with authentication middleware
18
+ *
19
+ * @example Basic token from localStorage:
20
+ * ```typescript
21
+ * const authClient = useAuthentication(client, {
22
+ * tokenProvider: () => localStorage.getItem('auth-token') || ''
23
+ * });
24
+ * ```
25
+ *
26
+ * @example Async token with refresh:
27
+ * ```typescript
28
+ * const authClient = useAuthentication(client, {
29
+ * tokenProvider: async () => {
30
+ * let token = localStorage.getItem('auth-token');
31
+ * if (!token || isExpired(token)) {
32
+ * token = await refreshToken();
33
+ * }
34
+ * return token || '';
35
+ * }
36
+ * });
37
+ * ```
38
+ */
39
+ function useAuthentication(client, options) {
40
+ return client.use((0, authentication_1.createAuthenticationMiddleware)(options));
41
+ }
42
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/middleware/authentication/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAsCH,8CAKC;AAvCD,qDAAkE;AAIlE,mDAAkE;AAAzD,gIAAA,8BAA8B,OAAA;AAEvC;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,SAAgB,iBAAiB,CAC/B,MAAmB,EACnB,OAA8B;IAE9B,OAAO,MAAM,CAAC,GAAG,CAAC,IAAA,+CAA8B,EAAC,OAAO,CAAC,CAAC,CAAC;AAC7D,CAAC"}