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

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,64 @@
1
+ /**
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
+ * ```
19
+ */
20
+ /**
21
+ * Base error class for all fetch client errors.
22
+ */
23
+ export declare class FetchError extends Error {
24
+ /** Optional underlying cause */
25
+ readonly cause?: Error;
26
+ /**
27
+ * Creates a new FetchError.
28
+ * @param message - Error message
29
+ * @param cause - Optional underlying cause
30
+ */
31
+ constructor(message: string, cause?: Error);
32
+ }
33
+ /**
34
+ * Error thrown when an HTTP request fails with a non-2xx status code.
35
+ */
36
+ export declare class HttpError extends FetchError {
37
+ /** The HTTP status code */
38
+ readonly status: number;
39
+ /** The HTTP status text */
40
+ readonly statusText: string;
41
+ /** The response body (if available) */
42
+ readonly body: unknown;
43
+ /**
44
+ * Creates a new HttpError.
45
+ * @param status - HTTP status code
46
+ * @param statusText - HTTP status text
47
+ * @param body - Response body
48
+ * @param url - The request URL
49
+ */
50
+ constructor(status: number, statusText: string, body: unknown, url: string);
51
+ }
52
+ /**
53
+ * Error thrown when a network request fails completely.
54
+ */
55
+ export declare class NetworkError extends FetchError {
56
+ /**
57
+ * Creates a new NetworkError.
58
+ * @param message - Error message
59
+ * @param url - The request URL
60
+ * @param cause - The underlying network error
61
+ */
62
+ constructor(message: string, url: string, cause?: Error);
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"}
@@ -0,0 +1,73 @@
1
+ /**
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
+ * ```
19
+ */
20
+ // 🎯 LEVEL 2: Base error class (for advanced use cases)
21
+ /**
22
+ * Base error class for all fetch client errors.
23
+ */
24
+ export class FetchError extends Error {
25
+ /**
26
+ * Creates a new FetchError.
27
+ * @param message - Error message
28
+ * @param cause - Optional underlying cause
29
+ */
30
+ constructor(message, cause) {
31
+ super(message);
32
+ this.name = 'FetchError';
33
+ if (cause !== undefined) {
34
+ this.cause = cause;
35
+ }
36
+ }
37
+ }
38
+ // 🎯 LEVEL 1: Most commonly used error types
39
+ /**
40
+ * Error thrown when an HTTP request fails with a non-2xx status code.
41
+ */
42
+ export class HttpError extends FetchError {
43
+ /**
44
+ * Creates a new HttpError.
45
+ * @param status - HTTP status code
46
+ * @param statusText - HTTP status text
47
+ * @param body - Response body
48
+ * @param url - The request URL
49
+ */
50
+ constructor(status, statusText, body, url) {
51
+ super(`HTTP ${status} ${statusText} at ${url}`);
52
+ this.name = 'HttpError';
53
+ this.status = status;
54
+ this.statusText = statusText;
55
+ this.body = body;
56
+ }
57
+ }
58
+ /**
59
+ * Error thrown when a network request fails completely.
60
+ */
61
+ export class NetworkError extends FetchError {
62
+ /**
63
+ * Creates a new NetworkError.
64
+ * @param message - Error message
65
+ * @param url - The request URL
66
+ * @param cause - The underlying network error
67
+ */
68
+ constructor(message, url, cause) {
69
+ super(`Network error for ${url}: ${message}`, cause);
70
+ this.name = 'NetworkError';
71
+ }
72
+ }
73
+ //# 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,MAAM,OAAO,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;AAED,6CAA6C;AAE7C;;GAEG;AACH,MAAM,OAAO,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;AAED;;GAEG;AACH,MAAM,OAAO,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"}
package/dist/index.d.ts CHANGED
@@ -1,36 +1,65 @@
1
1
  /**
2
- * @fileoverview Default configured fetch client with CSRF protection and unauthorized handling.
2
+ * @fileoverview Main library entry point with "pit of success" architecture.
3
3
  *
4
- * This module exports a pre-configured FetchClient instance with:
5
- * - Same-origin credentials policy
6
- * - CSRF protection using 'csrf_token' cookie and 'X-CSRF-Token' header
7
- * - Automatic redirect to '/login' on 401 Unauthorized responses
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
8
10
  */
9
- import { FetchClient } from './client';
11
+ import { FetchClient } from './client/fetch-client';
10
12
  /**
11
- * Pre-configured fetch client with CSRF protection and unauthorized handling.
13
+ * 🎯 PIT OF SUCCESS: Pre-configured fetch client (Level 1 - 80% of users)
12
14
  *
13
- * This client is ready to use for applications that need:
14
- * - CSRF protection
15
- * - Automatic login redirects on authentication failures
16
- * - Same-origin cookie handling
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)
17
22
  *
18
- * @example
23
+ * @example Just import and use:
19
24
  * ```typescript
20
25
  * import api from '@fgrzl/fetch';
21
26
  *
22
- * // GET request
27
+ * // Works immediately - no setup required!
23
28
  * const users = await api.get('/api/users');
24
- *
25
- * // POST request (automatically includes CSRF token)
26
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
+ * });
27
54
  * ```
28
55
  */
29
56
  declare const api: FetchClient;
30
57
  export default api;
58
+ export { FetchClient } from './client/fetch-client';
31
59
  export { FetchError, HttpError, NetworkError } from './errors';
32
- export { FetchClient } from './client';
33
- export type { RequestMiddleware, ResponseMiddleware, FetchClientConfig, FetchResponse, } from './client';
34
- export { useCSRF } from './csrf';
35
- export { useUnauthorized } from './unauthorized';
36
- export type { UnauthorizedConfig } from './unauthorized';
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"}
package/dist/index.js CHANGED
@@ -1,58 +1,102 @@
1
- "use strict";
2
1
  /**
3
- * @fileoverview Default configured fetch client with CSRF protection and unauthorized handling.
2
+ * @fileoverview Main library entry point with "pit of success" architecture.
4
3
  *
5
- * This module exports a pre-configured FetchClient instance with:
6
- * - Same-origin credentials policy
7
- * - CSRF protection using 'csrf_token' cookie and 'X-CSRF-Token' header
8
- * - Automatic redirect to '/login' on 401 Unauthorized responses
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
9
10
  */
10
- Object.defineProperty(exports, "__esModule", { value: true });
11
- exports.useUnauthorized = exports.useCSRF = exports.FetchClient = exports.NetworkError = exports.HttpError = exports.FetchError = void 0;
12
- const client_1 = require("./client");
13
- const csrf_1 = require("./csrf");
14
- const unauthorized_1 = require("./unauthorized");
11
+ import { FetchClient } from './client/fetch-client';
12
+ import { useProductionStack } from './middleware';
15
13
  /**
16
- * Pre-configured fetch client with CSRF protection and unauthorized handling.
14
+ * 🎯 PIT OF SUCCESS: Pre-configured fetch client (Level 1 - 80% of users)
17
15
  *
18
- * This client is ready to use for applications that need:
19
- * - CSRF protection
20
- * - Automatic login redirects on authentication failures
21
- * - Same-origin cookie handling
16
+ * This client is ready to use out of the box with production-ready middleware:
17
+ * - Authentication support (configure your token provider)
18
+ * - Automatic retries with exponential backoff
19
+ * - Response caching for GET requests
20
+ * - Request/response logging
21
+ * - Rate limiting protection
22
+ * - Same-origin credentials for session-based auth (cookies)
22
23
  *
23
- * @example
24
+ * @example Just import and use:
24
25
  * ```typescript
25
26
  * import api from '@fgrzl/fetch';
26
27
  *
27
- * // GET request
28
+ * // Works immediately - no setup required!
28
29
  * const users = await api.get('/api/users');
29
- *
30
- * // POST request (automatically includes CSRF token)
31
30
  * const newUser = await api.post('/api/users', { name: 'John' });
31
+ *
32
+ * // With query parameters
33
+ * const activeUsers = await api.get('/api/users', { status: 'active', limit: 10 });
34
+ * ```
35
+ *
36
+ * @example Configure authentication:
37
+ * ```typescript
38
+ * import api from '@fgrzl/fetch';
39
+ * import { useAuthentication } from '@fgrzl/fetch/middleware';
40
+ *
41
+ * const authClient = useAuthentication(api, {
42
+ * tokenProvider: () => localStorage.getItem('auth-token') || ''
43
+ * });
44
+ * ```
45
+ *
46
+ * @example For token-only auth (no cookies):
47
+ * ```typescript
48
+ * import { FetchClient, useAuthentication } from '@fgrzl/fetch';
49
+ *
50
+ * const tokenClient = useAuthentication(new FetchClient({
51
+ * credentials: 'omit' // Don't send cookies
52
+ * }), {
53
+ * tokenProvider: () => getJWTToken()
54
+ * });
32
55
  * ```
33
56
  */
34
- const api = new client_1.FetchClient({
57
+ const api = useProductionStack(new FetchClient({
58
+ // Smart default: include cookies for session-based auth
59
+ // Can be overridden by creating a custom FetchClient
35
60
  credentials: 'same-origin',
61
+ }), {
62
+ // Smart defaults - users can override as needed
63
+ retry: {
64
+ maxRetries: 2,
65
+ delay: 1000,
66
+ },
67
+ cache: {
68
+ ttl: 5 * 60 * 1000, // 5 minutes
69
+ methods: ['GET'],
70
+ },
71
+ logging: {
72
+ level: 'info',
73
+ },
74
+ rateLimit: {
75
+ maxRequests: 100,
76
+ windowMs: 60 * 1000, // 100 requests per minute
77
+ },
36
78
  });
37
- // Configure CSRF protection
38
- (0, csrf_1.useCSRF)(api, {
39
- cookieName: 'csrf_token',
40
- headerName: 'X-CSRF-Token',
41
- });
42
- // Configure unauthorized redirect
43
- (0, unauthorized_1.useUnauthorized)(api, {
44
- loginPath: '/login',
45
- });
46
- exports.default = api;
47
- // Export error classes and types for consumers
48
- var errors_1 = require("./errors");
49
- Object.defineProperty(exports, "FetchError", { enumerable: true, get: function () { return errors_1.FetchError; } });
50
- Object.defineProperty(exports, "HttpError", { enumerable: true, get: function () { return errors_1.HttpError; } });
51
- Object.defineProperty(exports, "NetworkError", { enumerable: true, get: function () { return errors_1.NetworkError; } });
52
- var client_2 = require("./client");
53
- Object.defineProperty(exports, "FetchClient", { enumerable: true, get: function () { return client_2.FetchClient; } });
54
- var csrf_2 = require("./csrf");
55
- Object.defineProperty(exports, "useCSRF", { enumerable: true, get: function () { return csrf_2.useCSRF; } });
56
- var unauthorized_2 = require("./unauthorized");
57
- Object.defineProperty(exports, "useUnauthorized", { enumerable: true, get: function () { return unauthorized_2.useUnauthorized; } });
79
+ // 🎯 LEVEL 1: Export the production-ready client as default
80
+ export default api;
81
+ // 🎯 LEVEL 2: FetchClient for custom configurations
82
+ export { FetchClient } from './client/fetch-client';
83
+ export { FetchError, HttpError, NetworkError } from './errors';
84
+ // 🎯 LEVEL 3: Individual middleware functions (import from our comprehensive middleware index)
85
+ export {
86
+ // Authentication
87
+ useAuthentication, createAuthenticationMiddleware,
88
+ // Authorization
89
+ useAuthorization, createAuthorizationMiddleware,
90
+ // Cache
91
+ useCache, createCacheMiddleware,
92
+ // CSRF
93
+ useCSRF,
94
+ // Logging
95
+ useLogging, createLoggingMiddleware,
96
+ // Rate Limiting
97
+ useRateLimit, createRateLimitMiddleware,
98
+ // Retry
99
+ useRetry, createRetryMiddleware, } from './middleware';
100
+ // 🎯 LEVEL 4: Pre-built middleware stacks for common scenarios
101
+ export { useProductionStack, useDevelopmentStack, useBasicStack, } from './middleware';
58
102
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAEH,qCAAuC;AACvC,iCAAiC;AACjC,iDAAiD;AAEjD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,GAAG,GAAG,IAAI,oBAAW,CAAC;IAC1B,WAAW,EAAE,aAAa;CAC3B,CAAC,CAAC;AAEH,4BAA4B;AAC5B,IAAA,cAAO,EAAC,GAAG,EAAE;IACX,UAAU,EAAE,YAAY;IACxB,UAAU,EAAE,cAAc;CAC3B,CAAC,CAAC;AAEH,kCAAkC;AAClC,IAAA,8BAAe,EAAC,GAAG,EAAE;IACnB,SAAS,EAAE,QAAQ;CACpB,CAAC,CAAC;AAEH,kBAAe,GAAG,CAAC;AAEnB,+CAA+C;AAC/C,mCAA+D;AAAtD,oGAAA,UAAU,OAAA;AAAE,mGAAA,SAAS,OAAA;AAAE,sGAAA,YAAY,OAAA;AAC5C,mCAAuC;AAA9B,qGAAA,WAAW,OAAA;AAOpB,+BAAiC;AAAxB,+FAAA,OAAO,OAAA;AAChB,+CAAiD;AAAxC,+GAAA,eAAe,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,MAAM,GAAG,GAAG,kBAAkB,CAC5B,IAAI,WAAW,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,eAAe,GAAG,CAAC;AAEnB,oDAAoD;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE/D,+FAA+F;AAC/F,OAAO;AACL,iBAAiB;AACjB,iBAAiB,EACjB,8BAA8B;AAC9B,gBAAgB;AAChB,gBAAgB,EAChB,6BAA6B;AAC7B,QAAQ;AACR,QAAQ,EACR,qBAAqB;AACrB,OAAO;AACP,OAAO;AACP,UAAU;AACV,UAAU,EACV,uBAAuB;AACvB,gBAAgB;AAChB,YAAY,EACZ,yBAAyB;AACzB,QAAQ;AACR,QAAQ,EACR,qBAAqB,GACtB,MAAM,cAAc,CAAC;AAEtB,+DAA+D;AAC/D,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,GACd,MAAM,cAAc,CAAC"}
@@ -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,90 @@
1
+ /**
2
+ * @fileoverview Authentication middleware implementation.
3
+ */
4
+ /**
5
+ * Checks if a URL should skip authentication based on configured patterns.
6
+ */
7
+ function shouldSkipAuth(url, skipPatterns = []) {
8
+ return skipPatterns.some((pattern) => {
9
+ if (typeof pattern === 'string') {
10
+ return url.includes(pattern);
11
+ }
12
+ return pattern.test(url);
13
+ });
14
+ }
15
+ /**
16
+ * Checks if a URL should include authentication based on configured patterns.
17
+ */
18
+ function shouldIncludeAuth(url, includePatterns) {
19
+ if (!includePatterns || includePatterns.length === 0) {
20
+ return true; // Include by default if no patterns specified
21
+ }
22
+ return includePatterns.some((pattern) => {
23
+ if (typeof pattern === 'string') {
24
+ return url.includes(pattern);
25
+ }
26
+ return pattern.test(url);
27
+ });
28
+ }
29
+ /**
30
+ * Creates authentication middleware with smart defaults.
31
+ * Automatically adds Bearer tokens to requests.
32
+ *
33
+ * @param options - Authentication configuration options
34
+ * @returns Authentication middleware for use with FetchClient
35
+ *
36
+ * @example Basic usage:
37
+ * ```typescript
38
+ * const authClient = useAuthentication(client, {
39
+ * tokenProvider: () => localStorage.getItem('token') || ''
40
+ * });
41
+ * ```
42
+ *
43
+ * @example Async token provider:
44
+ * ```typescript
45
+ * const authClient = useAuthentication(client, {
46
+ * tokenProvider: async () => {
47
+ * const token = await getAuthToken();
48
+ * return token || '';
49
+ * }
50
+ * });
51
+ * ```
52
+ */
53
+ export function createAuthenticationMiddleware(options) {
54
+ const { tokenProvider, headerName = 'Authorization', tokenType = 'Bearer', skipPatterns = [], includePatterns, } = options;
55
+ return async (request, next) => {
56
+ const url = request.url || '';
57
+ const parsedUrl = new URL(url);
58
+ const pathname = parsedUrl.pathname;
59
+ // Skip authentication if:
60
+ // 1. URL matches a skip pattern
61
+ // 2. URL doesn't match include patterns (if specified)
62
+ if (shouldSkipAuth(pathname, skipPatterns) ||
63
+ !shouldIncludeAuth(pathname, includePatterns)) {
64
+ return next(request);
65
+ }
66
+ try {
67
+ // Get auth token (may be async)
68
+ const token = await tokenProvider();
69
+ // Skip if no token available
70
+ if (!token) {
71
+ return next(request);
72
+ }
73
+ // Add auth header to request
74
+ const headers = new Headers(request.headers);
75
+ headers.set(headerName, `${tokenType} ${token}`);
76
+ // Create modified request with auth header
77
+ const modifiedRequest = {
78
+ ...request,
79
+ headers,
80
+ };
81
+ return next(modifiedRequest);
82
+ }
83
+ catch {
84
+ // If token provider fails, proceed without auth
85
+ // This ensures network requests don't fail due to auth issues
86
+ return next(request);
87
+ }
88
+ };
89
+ }
90
+ //# sourceMappingURL=authentication.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authentication.js","sourceRoot":"","sources":["../../../src/middleware/authentication/authentication.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;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,MAAM,UAAU,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,37 @@
1
+ /**
2
+ * @fileoverview Authentication middleware - "pit of success" API.
3
+ */
4
+ import { createAuthenticationMiddleware } from './authentication';
5
+ export { createAuthenticationMiddleware } from './authentication';
6
+ /**
7
+ * "Pit of success" API for adding authentication to a FetchClient.
8
+ * Automatically adds Bearer tokens to requests.
9
+ *
10
+ * @param client - The FetchClient to add authentication to
11
+ * @param options - Authentication configuration
12
+ * @returns A new FetchClient with authentication middleware
13
+ *
14
+ * @example Basic token from localStorage:
15
+ * ```typescript
16
+ * const authClient = useAuthentication(client, {
17
+ * tokenProvider: () => localStorage.getItem('auth-token') || ''
18
+ * });
19
+ * ```
20
+ *
21
+ * @example Async token with refresh:
22
+ * ```typescript
23
+ * const authClient = useAuthentication(client, {
24
+ * tokenProvider: async () => {
25
+ * let token = localStorage.getItem('auth-token');
26
+ * if (!token || isExpired(token)) {
27
+ * token = await refreshToken();
28
+ * }
29
+ * return token || '';
30
+ * }
31
+ * });
32
+ * ```
33
+ */
34
+ export function useAuthentication(client, options) {
35
+ return client.use(createAuthenticationMiddleware(options));
36
+ }
37
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/middleware/authentication/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,8BAA8B,EAAE,MAAM,kBAAkB,CAAC;AAIlE,OAAO,EAAE,8BAA8B,EAAE,MAAM,kBAAkB,CAAC;AAElE;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAAmB,EACnB,OAA8B;IAE9B,OAAO,MAAM,CAAC,GAAG,CAAC,8BAA8B,CAAC,OAAO,CAAC,CAAC,CAAC;AAC7D,CAAC"}