@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
package/CHANGELOG.md ADDED
@@ -0,0 +1,50 @@
1
+ # Changelog
2
+
3
+ ## [1.1.0-alpha.12] - 2025-08-14
4
+
5
+ ### Added
6
+
7
+ - New features and enhancements
8
+
9
+ ### Changed
10
+
11
+ - Updated dependencies and improvements
12
+
13
+ ### Fixed
14
+
15
+ - Bug fixes and patches
16
+
17
+ All notable changes to this project will be documented in this file.
18
+
19
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
20
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
21
+
22
+ ## [Unreleased]
23
+
24
+ ### Added
25
+
26
+ - Initial release of @fgrzl/fetch
27
+ - TypeScript-first HTTP client with middleware support
28
+ - Built-in CSRF protection middleware
29
+ - Smart authorization middleware with redirect handling
30
+ - Authentication middleware with bearer token support
31
+ - Retry middleware with configurable strategies
32
+ - Response caching middleware
33
+ - Rate limiting middleware
34
+ - Comprehensive logging middleware
35
+ - Pre-built middleware stacks for common use cases
36
+ - Excellent TypeScript support with full type safety
37
+ - Zero dependencies
38
+ - Modern build system with tsup
39
+ - Comprehensive test suite (99.43% coverage)
40
+ - Detailed documentation with examples
41
+
42
+ ### Changed
43
+
44
+ ### Deprecated
45
+
46
+ ### Removed
47
+
48
+ ### Fixed
49
+
50
+ ### Security
@@ -0,0 +1,327 @@
1
+ # Contributing to @fgrzl/fetch
2
+
3
+ Thank you for your interest in contributing! This guide will help you get started.
4
+
5
+ ## 🚀 Getting Started
6
+
7
+ ### Prerequisites
8
+
9
+ - Node.js 18+ and npm 9+
10
+ - Git
11
+ - Code editor (VS Code recommended)
12
+
13
+ ### Development Setup
14
+
15
+ ```bash
16
+ # Clone the repository
17
+ git clone https://github.com/fgrzl/fetch.git
18
+ cd fetch
19
+
20
+ # Install dependencies
21
+ npm install
22
+
23
+ # Run tests to ensure everything works
24
+ npm test
25
+ ```
26
+
27
+ ## 📋 Development Workflow
28
+
29
+ ### 1. Branch Strategy
30
+
31
+ We follow GitFlow:
32
+
33
+ - `main` - Production releases
34
+ - `develop` - Active development
35
+ - `feature/*` - New features
36
+ - `fix/*` - Bug fixes
37
+ - `hotfix/*` - Critical fixes
38
+
39
+ ### 2. Making Changes
40
+
41
+ ```bash
42
+ # Create feature branch from develop
43
+ git checkout develop
44
+ git pull origin develop
45
+ git checkout -b feature/your-feature-name
46
+
47
+ # Make your changes...
48
+
49
+ # Run the development commands
50
+ npm run dev # Watch mode for development
51
+ npm run test:watch # Watch tests
52
+ npm run lint # Check code style
53
+ ```
54
+
55
+ ### 3. Quality Checks
56
+
57
+ Before submitting, ensure your code passes:
58
+
59
+ ```bash
60
+ npm run test:coverage # All tests with coverage
61
+ npm run lint:check # ESLint checks
62
+ npm run format:check # Prettier formatting
63
+ npm run build # TypeScript compilation
64
+ ```
65
+
66
+ ### 4. Commit Guidelines
67
+
68
+ We use [Conventional Commits](https://www.conventionalcommits.org/):
69
+
70
+ ```bash
71
+ feat: add CSRF middleware
72
+ fix: handle network timeout correctly
73
+ docs: update middleware examples
74
+ test: add edge case for retry logic
75
+ chore: update dependencies
76
+ ```
77
+
78
+ ## 🧪 Testing
79
+
80
+ ### Test Structure
81
+
82
+ ```
83
+ test/
84
+ ├── unit/ # Unit tests
85
+ ├── integration/ # Integration tests
86
+ ├── edge-cases.test.ts # Edge cases and error scenarios
87
+ └── test-utils.ts # Testing utilities
88
+ ```
89
+
90
+ ### Writing Tests
91
+
92
+ ```typescript
93
+ import { describe, it, expect } from "vitest";
94
+ import { FetchClient } from "../src";
95
+
96
+ describe("Feature Name", () => {
97
+ it("should handle expected case", async () => {
98
+ // Arrange
99
+ const client = new FetchClient();
100
+
101
+ // Act
102
+ const result = await client.get("/test");
103
+
104
+ // Assert
105
+ expect(result.ok).toBe(true);
106
+ });
107
+
108
+ it("should handle error case", async () => {
109
+ // Test error scenarios
110
+ });
111
+ });
112
+ ```
113
+
114
+ ### Test Coverage Requirements
115
+
116
+ - Maintain **>95%** line coverage
117
+ - Test both success and error paths
118
+ - Include edge cases and error scenarios
119
+
120
+ ## 🛠 Code Standards
121
+
122
+ ### TypeScript Guidelines
123
+
124
+ - Use strict TypeScript settings
125
+ - Prefer `interface` over `type` for object shapes
126
+ - Export types alongside implementations
127
+ - Add JSDoc comments for public APIs
128
+
129
+ ### Code Style
130
+
131
+ - Use Prettier for formatting (configured in `.prettierrc`)
132
+ - Follow ESLint rules (configured in `eslint.config.ts`)
133
+ - Use meaningful variable names
134
+ - Keep functions focused and testable
135
+
136
+ ### Example Code Style
137
+
138
+ ```typescript
139
+ /**
140
+ * Creates a new HTTP client with smart defaults.
141
+ *
142
+ * @param config - Optional configuration
143
+ * @returns Configured FetchClient instance
144
+ */
145
+ export function createClient(config?: ClientConfig): FetchClient {
146
+ const client = new FetchClient(config);
147
+
148
+ // Apply smart defaults
149
+ useCSRF(client);
150
+ useRetry(client);
151
+
152
+ return client;
153
+ }
154
+ ```
155
+
156
+ ## 📦 Adding New Features
157
+
158
+ ### 1. Middleware Development
159
+
160
+ New middleware should:
161
+
162
+ - Follow the existing patterns in `src/middleware/`
163
+ - Include comprehensive tests
164
+ - Have TypeScript types exported
165
+ - Include documentation
166
+
167
+ Example structure:
168
+
169
+ ```
170
+ src/middleware/my-feature/
171
+ ├── index.ts # Public exports
172
+ ├── my-feature.ts # Implementation
173
+ └── types.ts # TypeScript types
174
+
175
+ test/middleware/
176
+ └── my-feature.test.ts # Tests
177
+
178
+ docs/middleware/
179
+ └── my-feature.md # Documentation
180
+ ```
181
+
182
+ ### 2. Client Features
183
+
184
+ When modifying `FetchClient`:
185
+
186
+ - Maintain backward compatibility
187
+ - Add appropriate TypeScript types
188
+ - Test integration with existing middleware
189
+ - Update documentation
190
+
191
+ ## 📚 Documentation
192
+
193
+ ### Writing Documentation
194
+
195
+ - Use clear, concise language
196
+ - Include code examples
197
+ - Cover common use cases
198
+ - Document error scenarios
199
+
200
+ ### Documentation Structure
201
+
202
+ ```
203
+ docs/
204
+ ├── *.md # Main guides
205
+ └── middleware/ # Middleware-specific docs
206
+ └── *.md
207
+ ```
208
+
209
+ ## 🚀 Pull Request Process
210
+
211
+ ### 1. Before Submitting
212
+
213
+ - [ ] Tests pass (`npm test`)
214
+ - [ ] Linting passes (`npm run lint:check`)
215
+ - [ ] Build succeeds (`npm run build`)
216
+ - [ ] Documentation updated if needed
217
+ - [ ] CHANGELOG.md updated (for significant changes)
218
+
219
+ ### 2. PR Template
220
+
221
+ ```markdown
222
+ ## Description
223
+
224
+ Brief description of changes
225
+
226
+ ## Type of Change
227
+
228
+ - [ ] Bug fix
229
+ - [ ] New feature
230
+ - [ ] Breaking change
231
+ - [ ] Documentation update
232
+
233
+ ## Testing
234
+
235
+ - [ ] Added/updated tests
236
+ - [ ] All tests pass
237
+ - [ ] Manual testing completed
238
+
239
+ ## Checklist
240
+
241
+ - [ ] Code follows style guidelines
242
+ - [ ] Self-review completed
243
+ - [ ] Documentation updated
244
+ - [ ] No breaking changes (or properly documented)
245
+ ```
246
+
247
+ ### 3. Review Process
248
+
249
+ 1. Automated checks must pass
250
+ 2. Maintainer review required
251
+ 3. Address feedback
252
+ 4. Final approval and merge
253
+
254
+ ## 🐛 Reporting Issues
255
+
256
+ ### Bug Reports
257
+
258
+ Include:
259
+
260
+ - Library version
261
+ - Node.js version
262
+ - Minimal reproduction code
263
+ - Expected vs actual behavior
264
+ - Error messages/stack traces
265
+
266
+ ### Feature Requests
267
+
268
+ Include:
269
+
270
+ - Use case description
271
+ - Proposed API (if applicable)
272
+ - Alternative solutions considered
273
+ - Willing to implement? (We love contributors!)
274
+
275
+ ## 🤝 Code of Conduct
276
+
277
+ ### Be Respectful
278
+
279
+ - Use inclusive language
280
+ - Be constructive in feedback
281
+ - Help create a welcoming environment
282
+
283
+ ### Be Collaborative
284
+
285
+ - Ask questions when unsure
286
+ - Share knowledge
287
+ - Help others learn
288
+
289
+ ## 💡 Getting Help
290
+
291
+ - **Questions**: Open a discussion
292
+ - **Bugs**: Create an issue
293
+ - **Features**: Start with a discussion
294
+ - **Chat**: Reach out to maintainers
295
+
296
+ ## 📊 Development Scripts
297
+
298
+ ```bash
299
+ # Development
300
+ npm run dev # Watch mode
301
+ npm run test:watch # Watch tests
302
+
303
+ # Quality
304
+ npm run test # Run all tests
305
+ npm run test:coverage # Tests with coverage
306
+ npm run lint # Fix linting issues
307
+ npm run lint:check # Check linting only
308
+ npm run format # Fix formatting
309
+ npm run format:check # Check formatting only
310
+
311
+ # Building
312
+ npm run build # Production build
313
+ npm run clean # Clean build artifacts
314
+
315
+ # Documentation
316
+ npm run docs:serve # Serve docs locally
317
+ ```
318
+
319
+ ## 🏆 Recognition
320
+
321
+ Contributors are recognized in:
322
+
323
+ - Repository contributors list
324
+ - Release notes for significant contributions
325
+ - Special thanks for major features
326
+
327
+ Thank you for making @fgrzl/fetch better! 🎉
package/README.md CHANGED
@@ -3,51 +3,55 @@
3
3
 
4
4
  # @fgrzl/fetch
5
5
 
6
- A lightweight, middleware-friendly fetch client for TypeScript projects.
6
+ A production-ready HTTP client for TypeScript that **just works** out of the box.
7
7
 
8
8
  ## ✨ Features
9
9
 
10
10
  - **Pit of Success Design**: Simple defaults that just work, customizable when needed
11
11
  - Simple API: `api.get('/api/user')`
12
12
  - Built-in CSRF token support (XSRF-TOKEN standard)
13
- - Automatic 401 redirect handling
13
+ - Smart 401 redirect handling with return URL preservation
14
14
  - Retry middleware with configurable strategies
15
15
  - Custom middleware support (request/response)
16
16
  - TypeScript-first, small and dependency-free
17
17
 
18
18
  ## 📦 Installation
19
19
 
20
+ **Install**
21
+
20
22
  ```bash
21
23
  npm install @fgrzl/fetch
22
24
  ```
23
25
 
24
- ## 🚀 Quick Start
25
-
26
- **Level 1: Just works with defaults**
26
+ **Use immediately** - no configuration required:
27
27
 
28
28
  ```ts
29
29
  import api from "@fgrzl/fetch";
30
30
 
31
- const response = await api.get("/api/user");
32
- if (response.ok) {
33
- console.log(response.data); // Your typed data
31
+ // It just works! 🎉
32
+ const users = await api.get("/api/users");
33
+ const newUser = await api.post("/api/users", { name: "John" });
34
+
35
+ // Built-in error handling
36
+ if (users.ok) {
37
+ console.log("Users:", users.data);
34
38
  } else {
35
- console.error(`Error ${response.status}:`, response.error?.message);
39
+ console.error("Error:", users.error?.message);
36
40
  }
37
41
  ```
38
42
 
39
- **Level 2: Custom configuration when needed**
43
+ **Need custom config?** Add it when you need it:
40
44
 
41
45
  ```ts
42
- import { FetchClient, useCSRF, useAuthorization, useRetry } from "@fgrzl/fetch";
46
+ import { FetchClient, useAuthentication } from "@fgrzl/fetch";
43
47
 
44
- const client = new FetchClient({
45
- credentials: "same-origin",
48
+ const authClient = useAuthentication(new FetchClient(), {
49
+ tokenProvider: () => localStorage.getItem("token") || "",
46
50
  });
47
51
 
48
52
  // Smart defaults - just works
49
53
  useCSRF(client);
50
- useAuthorization(client);
54
+ useAuthorization(client); // Redirects to /login with return URL
51
55
  useRetry(client);
52
56
 
53
57
  // All requests now return FetchResponse<T>
@@ -63,16 +67,41 @@ if (userResponse.ok) {
63
67
  }
64
68
  ```
65
69
 
66
- ---
70
+ ## ✨ What You Get Out of the Box
71
+
72
+ - **Zero Configuration** - Works immediately with smart defaults
73
+ - **CSRF Protection** - Automatic XSRF-TOKEN handling
74
+ - **Retry Logic** - Exponential backoff for failed requests
75
+ - **Request Logging** - Built-in observability
76
+ - **TypeScript First** - Full type safety and IntelliSense
77
+ - **Middleware System** - Composable and extensible
78
+
79
+ ## 📚 Documentation
80
+
81
+ Ready to go deeper? Check out our comprehensive guides:
82
+
83
+ - **[Getting Started](docs/getting-started.md)** - Installation and basic usage
84
+ - **[Configuration](docs/configuration.md)** - Advanced client setup
85
+ - **[Middleware](docs/middleware.md)** - Authentication, caching, retries
86
+ - **[Error Handling](docs/error-handling.md)** - Robust error management
87
+ - **[TypeScript Guide](docs/typescript.md)** - Type-safe API calls
88
+ - **[Troubleshooting](docs/troubleshooting.md)** - Common issues and solutions
89
+
90
+ ### 🔧 For Maintainers
91
+
92
+ - **[Release Guide](docs/releases.md)** - How to create releases
93
+ - **[Contributing](CONTRIBUTING.md)** - Development setup and guidelines
94
+
95
+ ## 🏗️ Architecture
67
96
 
68
- ## Documentation
97
+ Built on a **"pit of success"** philosophy where:
69
98
 
70
- - [Project Overview](docs/overview.md)
71
- - [Middleware](docs/middleware.md)
72
- - [Error Handling](docs/errors.md)
73
- - [Testing](docs/testing.md)
99
+ - Simple things are simple (`api.get("/path")`)
100
+ - Complex things are possible (custom middleware stacks)
101
+ - TypeScript guides you to correct usage
102
+ - Smart defaults handle 80% of use cases
74
103
 
75
- ---
104
+ [Learn more about our architecture →](docs/architecture.md)
76
105
 
77
106
  ## License
78
107