@fgrzl/fetch 1.1.0-alpha.7 → 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,335 +0,0 @@
1
- /**
2
- * @fileoverview Enhanced fetch client with intercept middleware architecture.
3
- */
4
- /**
5
- * Enhanced HTTP client with intercept middleware architecture.
6
- *
7
- * Features:
8
- * - 🎯 Smart defaults (JSON content-type, same-origin credentials)
9
- * - 🔧 Powerful middleware system for cross-cutting concerns
10
- * - 🛡️ Consistent error handling (never throws, always returns response)
11
- * - 📦 TypeScript-first with full type inference
12
- * - 🚀 Modern async/await API
13
- *
14
- * @example Basic usage:
15
- * ```typescript
16
- * const client = new FetchClient();
17
- *
18
- * // GET request - just works
19
- * const users = await client.get<User[]>('/api/users');
20
- * if (users.ok) {
21
- * console.log(users.data); // Type is User[]
22
- * }
23
- *
24
- * // POST request - JSON by default
25
- * const result = await client.post('/api/users', { name: 'John' });
26
- * ```
27
- *
28
- * @example With middleware:
29
- * ```typescript
30
- * const client = new FetchClient();
31
- *
32
- * // Add auth middleware
33
- * client.use((request, next) => {
34
- * request.headers = { ...request.headers, Authorization: 'Bearer token' };
35
- * return next(request);
36
- * });
37
- *
38
- * // Now all requests include auth
39
- * const data = await client.get('/api/protected');
40
- * ```
41
- */
42
- export class FetchClient {
43
- constructor(config = {}) {
44
- this.middlewares = [];
45
- this.credentials = config.credentials ?? 'same-origin';
46
- }
47
- use(middleware) {
48
- this.middlewares.push(middleware);
49
- return this;
50
- }
51
- async request(url, init = {}) {
52
- // Create the execution chain
53
- let index = 0;
54
- const execute = async (request) => {
55
- // Use provided request or fall back to original
56
- const currentRequest = request || { ...init, url };
57
- const currentUrl = currentRequest.url || url;
58
- if (index >= this.middlewares.length) {
59
- // Core fetch - end of middleware chain
60
- const { url: _, ...requestInit } = currentRequest; // Remove url from request init
61
- return this.coreFetch(requestInit, currentUrl);
62
- }
63
- const middleware = this.middlewares[index++];
64
- if (!middleware) {
65
- const { url: _, ...requestInit } = currentRequest;
66
- return this.coreFetch(requestInit, currentUrl);
67
- }
68
- return middleware(currentRequest, execute);
69
- };
70
- const result = await execute();
71
- return result;
72
- }
73
- async coreFetch(request, url) {
74
- try {
75
- const finalInit = {
76
- credentials: this.credentials,
77
- ...request,
78
- };
79
- // Convert Headers object to plain object for better compatibility
80
- if (finalInit.headers instanceof Headers) {
81
- const headersObj = {};
82
- finalInit.headers.forEach((value, key) => {
83
- headersObj[key] = value;
84
- });
85
- finalInit.headers = headersObj;
86
- }
87
- const response = await fetch(url, finalInit);
88
- const data = await this.parseResponse(response);
89
- return {
90
- data: response.ok ? data : null,
91
- status: response.status,
92
- statusText: response.statusText,
93
- headers: response.headers,
94
- url: response.url,
95
- ok: response.ok,
96
- ...(response.ok
97
- ? {}
98
- : {
99
- error: {
100
- message: response.statusText,
101
- body: data,
102
- },
103
- }),
104
- };
105
- }
106
- catch (error) {
107
- if (error instanceof TypeError && error.message.includes('fetch')) {
108
- return {
109
- data: null,
110
- status: 0,
111
- statusText: 'Network Error',
112
- headers: new Headers(),
113
- url,
114
- ok: false,
115
- error: {
116
- message: 'Failed to fetch',
117
- body: error,
118
- },
119
- };
120
- }
121
- throw error;
122
- }
123
- }
124
- async parseResponse(res) {
125
- const contentType = res.headers.get('content-type') || '';
126
- if (contentType.includes('application/json')) {
127
- return res.json();
128
- }
129
- if (contentType.includes('text/')) {
130
- return res.text();
131
- }
132
- if (contentType.includes('application/octet-stream') ||
133
- contentType.includes('image/') ||
134
- contentType.includes('video/') ||
135
- contentType.includes('audio/')) {
136
- return res.blob();
137
- }
138
- if (res.body) {
139
- const text = await res.text();
140
- return text || null;
141
- }
142
- return null;
143
- }
144
- // Helper method to build URL with query parameters
145
- buildUrlWithParams(url, params) {
146
- if (!params) {
147
- return url;
148
- }
149
- const urlObj = new URL(url, url.startsWith('http') ? undefined : 'http://localhost');
150
- Object.entries(params).forEach(([key, value]) => {
151
- if (value !== undefined && value !== null) {
152
- urlObj.searchParams.set(key, String(value));
153
- }
154
- });
155
- // If the original URL was relative, return just the pathname + search
156
- if (!url.startsWith('http')) {
157
- return urlObj.pathname + urlObj.search;
158
- }
159
- return urlObj.toString();
160
- }
161
- // 🎯 PIT OF SUCCESS: Convenience methods with smart defaults
162
- /**
163
- * HEAD request with query parameter support.
164
- *
165
- * HEAD requests are used to retrieve metadata about a resource without downloading
166
- * the response body. Useful for checking if a resource exists, getting content length,
167
- * last modified date, etc.
168
- *
169
- * @template T - Expected response data type (will be null for HEAD requests)
170
- * @param url - Request URL
171
- * @param params - Query parameters to append to URL
172
- * @returns Promise resolving to typed response (data will always be null)
173
- *
174
- * @example Check if resource exists:
175
- * ```typescript
176
- * const headResponse = await client.head('/api/large-file.zip');
177
- * if (headResponse.ok) {
178
- * const contentLength = headResponse.headers.get('content-length');
179
- * const lastModified = headResponse.headers.get('last-modified');
180
- * console.log(`File size: ${contentLength} bytes`);
181
- * }
182
- * ```
183
- *
184
- * @example Check with query parameters:
185
- * ```typescript
186
- * const exists = await client.head('/api/users', { id: 123 });
187
- * if (exists.status === 404) {
188
- * console.log('User not found');
189
- * }
190
- * ```
191
- */
192
- head(url, params) {
193
- const finalUrl = this.buildUrlWithParams(url, params);
194
- return this.request(finalUrl, { method: 'HEAD' });
195
- }
196
- /**
197
- * HEAD request that returns useful metadata about a resource.
198
- *
199
- * This is a convenience method that extracts common metadata from HEAD responses
200
- * for easier consumption.
201
- *
202
- * @param url - Request URL
203
- * @param params - Query parameters to append to URL
204
- * @returns Promise resolving to response with extracted metadata
205
- *
206
- * @example Get resource metadata:
207
- * ```typescript
208
- * const metadata = await client.headMetadata('/api/large-file.zip');
209
- * if (metadata.ok) {
210
- * console.log('File exists:', metadata.exists);
211
- * console.log('Content type:', metadata.contentType);
212
- * console.log('Size:', metadata.contentLength, 'bytes');
213
- * console.log('Last modified:', metadata.lastModified);
214
- * }
215
- * ```
216
- */
217
- async headMetadata(url, params) {
218
- const response = await this.head(url, params);
219
- const contentLengthHeader = response.headers.get('content-length');
220
- const lastModifiedHeader = response.headers.get('last-modified');
221
- return {
222
- ...response,
223
- exists: response.ok,
224
- contentType: response.headers.get('content-type') || undefined,
225
- contentLength: contentLengthHeader ? parseInt(contentLengthHeader, 10) : undefined,
226
- lastModified: lastModifiedHeader ? new Date(lastModifiedHeader) : undefined,
227
- etag: response.headers.get('etag') || undefined,
228
- cacheControl: response.headers.get('cache-control') || undefined,
229
- };
230
- }
231
- /**
232
- * GET request with query parameter support.
233
- *
234
- * @template T - Expected response data type
235
- * @param url - Request URL
236
- * @param params - Query parameters to append to URL
237
- * @returns Promise resolving to typed response
238
- *
239
- * @example
240
- * ```typescript
241
- * const users = await client.get<User[]>('/api/users');
242
- * const filteredUsers = await client.get<User[]>('/api/users', { status: 'active', limit: 10 });
243
- * if (users.ok) console.log(users.data);
244
- * ```
245
- */
246
- get(url, params) {
247
- const finalUrl = this.buildUrlWithParams(url, params);
248
- return this.request(finalUrl, { method: 'GET' });
249
- }
250
- /**
251
- * POST request with automatic JSON serialization.
252
- *
253
- * @template T - Expected response data type
254
- * @param url - Request URL
255
- * @param body - Request body (auto-serialized to JSON)
256
- * @param headers - Additional headers (Content-Type: application/json is default)
257
- * @returns Promise resolving to typed response
258
- *
259
- * @example
260
- * ```typescript
261
- * const result = await client.post<User>('/api/users', { name: 'John' });
262
- * ```
263
- */
264
- post(url, body, headers) {
265
- const requestHeaders = {
266
- 'Content-Type': 'application/json',
267
- ...(headers ?? {}),
268
- };
269
- return this.request(url, {
270
- method: 'POST',
271
- headers: requestHeaders,
272
- ...(body !== undefined ? { body: JSON.stringify(body) } : {}),
273
- });
274
- }
275
- /**
276
- * PUT request with automatic JSON serialization.
277
- *
278
- * @template T - Expected response data type
279
- * @param url - Request URL
280
- * @param body - Request body (auto-serialized to JSON)
281
- * @param headers - Additional headers (Content-Type: application/json is default)
282
- * @returns Promise resolving to typed response
283
- */
284
- put(url, body, headers) {
285
- const requestHeaders = {
286
- 'Content-Type': 'application/json',
287
- ...(headers ?? {}),
288
- };
289
- return this.request(url, {
290
- method: 'PUT',
291
- headers: requestHeaders,
292
- ...(body !== undefined ? { body: JSON.stringify(body) } : {}),
293
- });
294
- }
295
- /**
296
- * PATCH request with automatic JSON serialization.
297
- *
298
- * @template T - Expected response data type
299
- * @param url - Request URL
300
- * @param body - Request body (auto-serialized to JSON)
301
- * @param headers - Additional headers (Content-Type: application/json is default)
302
- * @returns Promise resolving to typed response
303
- */
304
- patch(url, body, headers) {
305
- const requestHeaders = {
306
- 'Content-Type': 'application/json',
307
- ...(headers ?? {}),
308
- };
309
- return this.request(url, {
310
- method: 'PATCH',
311
- headers: requestHeaders,
312
- ...(body !== undefined ? { body: JSON.stringify(body) } : {}),
313
- });
314
- }
315
- /**
316
- * DELETE request with query parameter support.
317
- *
318
- * @template T - Expected response data type
319
- * @param url - Request URL
320
- * @param params - Query parameters to append to URL
321
- * @returns Promise resolving to typed response
322
- *
323
- * @example
324
- * ```typescript
325
- * const result = await client.del('/api/users/123');
326
- * const bulkResult = await client.del('/api/users', { status: 'inactive', force: true });
327
- * if (result.ok) console.log('Deleted successfully');
328
- * ```
329
- */
330
- del(url, params) {
331
- const finalUrl = this.buildUrlWithParams(url, params);
332
- return this.request(finalUrl, { method: 'DELETE' });
333
- }
334
- }
335
- //# sourceMappingURL=fetch-client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fetch-client.js","sourceRoot":"","sources":["../../src/client/fetch-client.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- /**
2
- * @fileoverview Client module exports - "Pit of Success" design.
3
- *
4
- * This module provides a clean, discoverable API:
5
- * 🎯 Level 1: FetchClient class (what 90% of users need)
6
- * 🎯 Level 2: Types for TypeScript users (auto-discovered via IntelliSense)
7
- */
8
- export { FetchClient } from './fetch-client';
9
- export type { FetchMiddleware } from './fetch-client';
10
- export type { FetchResponse, FetchClientOptions } from './types';
11
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC"}
@@ -1,10 +0,0 @@
1
- /**
2
- * @fileoverview Client module exports - "Pit of Success" design.
3
- *
4
- * This module provides a clean, discoverable API:
5
- * 🎯 Level 1: FetchClient class (what 90% of users need)
6
- * 🎯 Level 2: Types for TypeScript users (auto-discovered via IntelliSense)
7
- */
8
- // 🎯 LEVEL 1: Main client class - the "pit of success" entry point
9
- export { FetchClient } from './fetch-client';
10
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,mEAAmE;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC"}
@@ -1,63 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,8 +0,0 @@
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
- export {};
8
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -1,64 +0,0 @@
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
@@ -1 +0,0 @@
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,73 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1 +0,0 @@
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"}
@@ -1,31 +0,0 @@
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
@@ -1 +0,0 @@
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"}