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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. package/README.md +15 -12
  2. package/dist/cjs/client/fetch-client.d.ts +189 -0
  3. package/dist/cjs/client/fetch-client.d.ts.map +1 -0
  4. package/dist/cjs/client/fetch-client.js +339 -0
  5. package/dist/cjs/client/fetch-client.js.map +1 -0
  6. package/dist/cjs/client/index.d.ts +11 -0
  7. package/dist/cjs/client/index.d.ts.map +1 -0
  8. package/dist/cjs/client/index.js +14 -0
  9. package/dist/cjs/client/index.js.map +1 -0
  10. package/dist/cjs/client/types.d.ts +63 -0
  11. package/dist/cjs/client/types.d.ts.map +1 -0
  12. package/dist/cjs/client/types.js +9 -0
  13. package/dist/cjs/client/types.js.map +1 -0
  14. package/dist/{errors.d.ts → cjs/errors/index.d.ts} +20 -3
  15. package/dist/cjs/errors/index.d.ts.map +1 -0
  16. package/dist/{errors.js → cjs/errors/index.js} +23 -3
  17. package/dist/cjs/errors/index.js.map +1 -0
  18. package/dist/cjs/index.d.ts +65 -0
  19. package/dist/cjs/index.d.ts.map +1 -0
  20. package/dist/cjs/index.js +118 -0
  21. package/dist/cjs/index.js.map +1 -0
  22. package/dist/cjs/middleware/authentication/authentication.d.ts +31 -0
  23. package/dist/cjs/middleware/authentication/authentication.d.ts.map +1 -0
  24. package/dist/cjs/middleware/authentication/authentication.js +93 -0
  25. package/dist/cjs/middleware/authentication/authentication.js.map +1 -0
  26. package/dist/cjs/middleware/authentication/index.d.ts +37 -0
  27. package/dist/cjs/middleware/authentication/index.d.ts.map +1 -0
  28. package/dist/cjs/middleware/authentication/index.js +42 -0
  29. package/dist/cjs/middleware/authentication/index.js.map +1 -0
  30. package/dist/cjs/middleware/authentication/types.d.ts +73 -0
  31. package/dist/cjs/middleware/authentication/types.d.ts.map +1 -0
  32. package/dist/cjs/middleware/authentication/types.js +6 -0
  33. package/dist/cjs/middleware/authentication/types.js.map +1 -0
  34. package/dist/cjs/middleware/authorization/authorization.d.ts +30 -0
  35. package/dist/cjs/middleware/authorization/authorization.d.ts.map +1 -0
  36. package/dist/cjs/middleware/authorization/authorization.js +82 -0
  37. package/dist/cjs/middleware/authorization/authorization.js.map +1 -0
  38. package/dist/cjs/middleware/authorization/index.d.ts +36 -0
  39. package/dist/cjs/middleware/authorization/index.d.ts.map +1 -0
  40. package/dist/cjs/middleware/authorization/index.js +41 -0
  41. package/dist/cjs/middleware/authorization/index.js.map +1 -0
  42. package/dist/cjs/middleware/authorization/types.d.ts +67 -0
  43. package/dist/cjs/middleware/authorization/types.d.ts.map +1 -0
  44. package/dist/cjs/middleware/authorization/types.js +6 -0
  45. package/dist/cjs/middleware/authorization/types.js.map +1 -0
  46. package/dist/cjs/middleware/cache/cache.d.ts +41 -0
  47. package/dist/cjs/middleware/cache/cache.d.ts.map +1 -0
  48. package/dist/cjs/middleware/cache/cache.js +191 -0
  49. package/dist/cjs/middleware/cache/cache.js.map +1 -0
  50. package/dist/cjs/middleware/cache/index.d.ts +44 -0
  51. package/dist/cjs/middleware/cache/index.d.ts.map +1 -0
  52. package/dist/cjs/middleware/cache/index.js +50 -0
  53. package/dist/cjs/middleware/cache/index.js.map +1 -0
  54. package/dist/cjs/middleware/cache/types.d.ts +89 -0
  55. package/dist/cjs/middleware/cache/types.d.ts.map +1 -0
  56. package/dist/cjs/middleware/cache/types.js +6 -0
  57. package/dist/cjs/middleware/cache/types.js.map +1 -0
  58. package/dist/cjs/middleware/csrf/csrf.d.ts +34 -0
  59. package/dist/cjs/middleware/csrf/csrf.d.ts.map +1 -0
  60. package/dist/cjs/middleware/csrf/csrf.js +94 -0
  61. package/dist/cjs/middleware/csrf/csrf.js.map +1 -0
  62. package/dist/cjs/middleware/csrf/index.d.ts +57 -0
  63. package/dist/cjs/middleware/csrf/index.d.ts.map +1 -0
  64. package/dist/cjs/middleware/csrf/index.js +62 -0
  65. package/dist/cjs/middleware/csrf/index.js.map +1 -0
  66. package/dist/cjs/middleware/csrf/types.d.ts +57 -0
  67. package/dist/cjs/middleware/csrf/types.d.ts.map +1 -0
  68. package/dist/cjs/middleware/csrf/types.js +6 -0
  69. package/dist/cjs/middleware/csrf/types.js.map +1 -0
  70. package/dist/cjs/middleware/index.d.ts +115 -0
  71. package/dist/cjs/middleware/index.d.ts.map +1 -0
  72. package/dist/cjs/middleware/index.js +153 -0
  73. package/dist/cjs/middleware/index.js.map +1 -0
  74. package/dist/cjs/middleware/logging/index.d.ts +42 -0
  75. package/dist/cjs/middleware/logging/index.d.ts.map +1 -0
  76. package/dist/cjs/middleware/logging/index.js +47 -0
  77. package/dist/cjs/middleware/logging/index.js.map +1 -0
  78. package/dist/cjs/middleware/logging/logging.d.ts +29 -0
  79. package/dist/cjs/middleware/logging/logging.d.ts.map +1 -0
  80. package/dist/cjs/middleware/logging/logging.js +171 -0
  81. package/dist/cjs/middleware/logging/logging.js.map +1 -0
  82. package/dist/cjs/middleware/logging/types.d.ts +90 -0
  83. package/dist/cjs/middleware/logging/types.d.ts.map +1 -0
  84. package/dist/cjs/middleware/logging/types.js +6 -0
  85. package/dist/cjs/middleware/logging/types.js.map +1 -0
  86. package/dist/cjs/middleware/rate-limit/index.d.ts +16 -0
  87. package/dist/cjs/middleware/rate-limit/index.d.ts.map +1 -0
  88. package/dist/cjs/middleware/rate-limit/index.js +21 -0
  89. package/dist/cjs/middleware/rate-limit/index.js.map +1 -0
  90. package/dist/cjs/middleware/rate-limit/rate-limit.d.ts +14 -0
  91. package/dist/cjs/middleware/rate-limit/rate-limit.d.ts.map +1 -0
  92. package/dist/cjs/middleware/rate-limit/rate-limit.js +87 -0
  93. package/dist/cjs/middleware/rate-limit/rate-limit.js.map +1 -0
  94. package/dist/cjs/middleware/rate-limit/types.d.ts +97 -0
  95. package/dist/cjs/middleware/rate-limit/types.d.ts.map +1 -0
  96. package/dist/cjs/middleware/rate-limit/types.js +6 -0
  97. package/dist/cjs/middleware/rate-limit/types.js.map +1 -0
  98. package/dist/cjs/middleware/retry/index.d.ts +6 -0
  99. package/dist/cjs/middleware/retry/index.d.ts.map +1 -0
  100. package/dist/cjs/middleware/retry/index.js +11 -0
  101. package/dist/cjs/middleware/retry/index.js.map +1 -0
  102. package/dist/cjs/middleware/retry/retry.d.ts +39 -0
  103. package/dist/cjs/middleware/retry/retry.d.ts.map +1 -0
  104. package/dist/cjs/middleware/retry/retry.js +144 -0
  105. package/dist/cjs/middleware/retry/retry.js.map +1 -0
  106. package/dist/cjs/middleware/retry/types.d.ts +61 -0
  107. package/dist/cjs/middleware/retry/types.d.ts.map +1 -0
  108. package/dist/cjs/middleware/retry/types.js +6 -0
  109. package/dist/cjs/middleware/retry/types.js.map +1 -0
  110. package/dist/client/fetch-client.d.ts +189 -0
  111. package/dist/client/fetch-client.d.ts.map +1 -0
  112. package/dist/client/fetch-client.js +335 -0
  113. package/dist/client/fetch-client.js.map +1 -0
  114. package/dist/client/index.d.ts +11 -0
  115. package/dist/client/index.d.ts.map +1 -0
  116. package/dist/client/index.js +10 -0
  117. package/dist/client/index.js.map +1 -0
  118. package/dist/client/types.d.ts +63 -0
  119. package/dist/client/types.d.ts.map +1 -0
  120. package/dist/client/types.js +8 -0
  121. package/dist/client/types.js.map +1 -0
  122. package/dist/errors/index.d.ts +64 -0
  123. package/dist/errors/index.d.ts.map +1 -0
  124. package/dist/errors/index.js +73 -0
  125. package/dist/errors/index.js.map +1 -0
  126. package/dist/index.d.ts +49 -20
  127. package/dist/index.d.ts.map +1 -0
  128. package/dist/index.js +86 -42
  129. package/dist/index.js.map +1 -1
  130. package/dist/middleware/authentication/authentication.d.ts +31 -0
  131. package/dist/middleware/authentication/authentication.d.ts.map +1 -0
  132. package/dist/middleware/authentication/authentication.js +90 -0
  133. package/dist/middleware/authentication/authentication.js.map +1 -0
  134. package/dist/middleware/authentication/index.d.ts +37 -0
  135. package/dist/middleware/authentication/index.d.ts.map +1 -0
  136. package/dist/middleware/authentication/index.js +37 -0
  137. package/dist/middleware/authentication/index.js.map +1 -0
  138. package/dist/middleware/authentication/types.d.ts +73 -0
  139. package/dist/middleware/authentication/types.d.ts.map +1 -0
  140. package/dist/middleware/authentication/types.js +5 -0
  141. package/dist/middleware/authentication/types.js.map +1 -0
  142. package/dist/middleware/authorization/authorization.d.ts +30 -0
  143. package/dist/middleware/authorization/authorization.d.ts.map +1 -0
  144. package/dist/middleware/authorization/authorization.js +79 -0
  145. package/dist/middleware/authorization/authorization.js.map +1 -0
  146. package/dist/middleware/authorization/index.d.ts +36 -0
  147. package/dist/middleware/authorization/index.d.ts.map +1 -0
  148. package/dist/middleware/authorization/index.js +36 -0
  149. package/dist/middleware/authorization/index.js.map +1 -0
  150. package/dist/middleware/authorization/types.d.ts +67 -0
  151. package/dist/middleware/authorization/types.d.ts.map +1 -0
  152. package/dist/middleware/authorization/types.js +5 -0
  153. package/dist/middleware/authorization/types.js.map +1 -0
  154. package/dist/middleware/cache/cache.d.ts +41 -0
  155. package/dist/middleware/cache/cache.d.ts.map +1 -0
  156. package/dist/middleware/cache/cache.js +186 -0
  157. package/dist/middleware/cache/cache.js.map +1 -0
  158. package/dist/middleware/cache/index.d.ts +44 -0
  159. package/dist/middleware/cache/index.d.ts.map +1 -0
  160. package/dist/middleware/cache/index.js +44 -0
  161. package/dist/middleware/cache/index.js.map +1 -0
  162. package/dist/middleware/cache/types.d.ts +89 -0
  163. package/dist/middleware/cache/types.d.ts.map +1 -0
  164. package/dist/middleware/cache/types.js +5 -0
  165. package/dist/middleware/cache/types.js.map +1 -0
  166. package/dist/middleware/csrf/csrf.d.ts +34 -0
  167. package/dist/middleware/csrf/csrf.d.ts.map +1 -0
  168. package/dist/middleware/csrf/csrf.js +91 -0
  169. package/dist/middleware/csrf/csrf.js.map +1 -0
  170. package/dist/middleware/csrf/index.d.ts +57 -0
  171. package/dist/middleware/csrf/index.d.ts.map +1 -0
  172. package/dist/middleware/csrf/index.js +57 -0
  173. package/dist/middleware/csrf/index.js.map +1 -0
  174. package/dist/middleware/csrf/types.d.ts +57 -0
  175. package/dist/middleware/csrf/types.d.ts.map +1 -0
  176. package/dist/middleware/csrf/types.js +5 -0
  177. package/dist/middleware/csrf/types.js.map +1 -0
  178. package/dist/middleware/index.d.ts +115 -0
  179. package/dist/middleware/index.d.ts.map +1 -0
  180. package/dist/middleware/index.js +134 -0
  181. package/dist/middleware/index.js.map +1 -0
  182. package/dist/middleware/logging/index.d.ts +42 -0
  183. package/dist/middleware/logging/index.d.ts.map +1 -0
  184. package/dist/middleware/logging/index.js +42 -0
  185. package/dist/middleware/logging/index.js.map +1 -0
  186. package/dist/middleware/logging/logging.d.ts +29 -0
  187. package/dist/middleware/logging/logging.d.ts.map +1 -0
  188. package/dist/middleware/logging/logging.js +168 -0
  189. package/dist/middleware/logging/logging.js.map +1 -0
  190. package/dist/middleware/logging/types.d.ts +90 -0
  191. package/dist/middleware/logging/types.d.ts.map +1 -0
  192. package/dist/middleware/logging/types.js +5 -0
  193. package/dist/middleware/logging/types.js.map +1 -0
  194. package/dist/middleware/rate-limit/index.d.ts +16 -0
  195. package/dist/middleware/rate-limit/index.d.ts.map +1 -0
  196. package/dist/middleware/rate-limit/index.js +16 -0
  197. package/dist/middleware/rate-limit/index.js.map +1 -0
  198. package/dist/middleware/rate-limit/rate-limit.d.ts +14 -0
  199. package/dist/middleware/rate-limit/rate-limit.d.ts.map +1 -0
  200. package/dist/middleware/rate-limit/rate-limit.js +84 -0
  201. package/dist/middleware/rate-limit/rate-limit.js.map +1 -0
  202. package/dist/middleware/rate-limit/types.d.ts +97 -0
  203. package/dist/middleware/rate-limit/types.d.ts.map +1 -0
  204. package/dist/middleware/rate-limit/types.js +5 -0
  205. package/dist/middleware/rate-limit/types.js.map +1 -0
  206. package/dist/middleware/retry/index.d.ts +6 -0
  207. package/dist/middleware/retry/index.d.ts.map +1 -0
  208. package/dist/middleware/retry/index.js +6 -0
  209. package/dist/middleware/retry/index.js.map +1 -0
  210. package/dist/middleware/retry/retry.d.ts +39 -0
  211. package/dist/middleware/retry/retry.d.ts.map +1 -0
  212. package/dist/middleware/retry/retry.js +141 -0
  213. package/dist/middleware/retry/retry.js.map +1 -0
  214. package/dist/middleware/retry/types.d.ts +61 -0
  215. package/dist/middleware/retry/types.d.ts.map +1 -0
  216. package/dist/middleware/retry/types.js +5 -0
  217. package/dist/middleware/retry/types.js.map +1 -0
  218. package/package.json +42 -8
  219. package/dist/client.d.ts +0 -133
  220. package/dist/client.js +0 -166
  221. package/dist/client.js.map +0 -1
  222. package/dist/csrf.d.ts +0 -32
  223. package/dist/csrf.js +0 -53
  224. package/dist/csrf.js.map +0 -1
  225. package/dist/errors.js.map +0 -1
  226. package/dist/test-utils.d.ts +0 -24
  227. package/dist/test-utils.js +0 -52
  228. package/dist/test-utils.js.map +0 -1
  229. package/dist/unauthorized.d.ts +0 -27
  230. package/dist/unauthorized.js +0 -41
  231. package/dist/unauthorized.js.map +0 -1
package/dist/client.d.ts DELETED
@@ -1,133 +0,0 @@
1
- /**
2
- * Middleware function that processes requests before they are sent.
3
- * Can modify request options and URL.
4
- * @param req - The request configuration object
5
- * @param url - The request URL
6
- * @returns A promise that resolves to a tuple of [modified request, modified URL]
7
- */
8
- export type RequestMiddleware = (req: RequestInit, url: string) => Promise<[RequestInit, string]>;
9
- /**
10
- * Middleware function that processes responses after they are received.
11
- * Can modify or replace the response.
12
- * @param res - The response object
13
- * @returns A promise that resolves to the modified response
14
- */
15
- export type ResponseMiddleware = (res: Response) => Promise<Response>;
16
- /**
17
- * Typed response wrapper that includes response metadata.
18
- * @template T - The type of the response data
19
- */
20
- export interface FetchResponse<T> {
21
- /** The parsed response data */
22
- data: T;
23
- /** HTTP status code */
24
- status: number;
25
- /** HTTP status text */
26
- statusText: string;
27
- /** Response headers */
28
- headers: Headers;
29
- /** The original URL */
30
- url: string;
31
- /** Whether the response was successful (status 200-299) */
32
- ok: boolean;
33
- /** Error information if the request failed */
34
- error?: {
35
- message: string;
36
- body?: any;
37
- };
38
- }
39
- /**
40
- * Configuration options for FetchClient.
41
- */
42
- export interface FetchClientConfig {
43
- /** Controls whether credentials are sent with requests. Defaults to 'same-origin'. */
44
- credentials?: RequestCredentials;
45
- }
46
- /**
47
- * A configurable HTTP client with middleware support.
48
- *
49
- * @example
50
- * ```typescript
51
- * const client = new FetchClient({
52
- * credentials: 'same-origin'
53
- * });
54
- *
55
- * // Add middleware
56
- * client.useRequestMiddleware(async (req, url) => {
57
- * return [{ ...req, headers: { ...req.headers, 'Auth': 'token' } }, url];
58
- * });
59
- *
60
- * // Make requests
61
- * const data = await client.get('/api/users');
62
- * ```
63
- */
64
- export declare class FetchClient {
65
- private requestMiddlewares;
66
- private responseMiddlewares;
67
- private credentials;
68
- /**
69
- * Creates a new FetchClient instance.
70
- * @param config - Configuration options for the client
71
- */
72
- constructor(config?: FetchClientConfig);
73
- /**
74
- * Adds a request middleware to the client.
75
- * Request middlewares are executed in the order they are added.
76
- * @param middleware - The middleware function to add
77
- */
78
- useRequestMiddleware(middleware: RequestMiddleware): void;
79
- /**
80
- * Adds a response middleware to the client.
81
- * Response middlewares are executed in the order they are added.
82
- * @param middleware - The middleware function to add
83
- */
84
- useResponseMiddleware(middleware: ResponseMiddleware): void;
85
- /**
86
- * Makes an HTTP request with middleware processing.
87
- *
88
- * @template T - The expected response type
89
- * @param url - The URL to request
90
- * @param init - Request configuration options
91
- * @returns Promise that resolves to a FetchResponse containing the data and metadata
92
- */
93
- request<T = any>(url: string, init?: RequestInit): Promise<FetchResponse<T>>;
94
- /**
95
- * Makes a GET request.
96
- * @template T - The expected response type
97
- * @param url - The URL to request
98
- * @returns Promise that resolves to a FetchResponse containing the data and metadata
99
- */
100
- get<T>(url: string): Promise<FetchResponse<T>>;
101
- /**
102
- * Helper method for requests with JSON body.
103
- * @template T - The expected response type
104
- * @param url - The URL to request
105
- * @param method - The HTTP method
106
- * @param body - The request body data (will be JSON stringified)
107
- * @returns Promise that resolves to a FetchResponse containing the data and metadata
108
- */
109
- private requestWithJsonBody;
110
- /**
111
- * Makes a POST request with JSON body.
112
- * @template T - The expected response type
113
- * @param url - The URL to request
114
- * @param body - The request body data (will be JSON stringified)
115
- * @returns Promise that resolves to a FetchResponse containing the data and metadata
116
- */
117
- post<T>(url: string, body?: any): Promise<FetchResponse<T>>;
118
- /**
119
- * Makes a PUT request with JSON body.
120
- * @template T - The expected response type
121
- * @param url - The URL to request
122
- * @param body - The request body data (will be JSON stringified)
123
- * @returns Promise that resolves to a FetchResponse containing the data and metadata
124
- */
125
- put<T>(url: string, body?: any): Promise<FetchResponse<T>>;
126
- /**
127
- * Makes a DELETE request.
128
- * @template T - The expected response type
129
- * @param url - The URL to request
130
- * @returns Promise that resolves to a FetchResponse containing the data and metadata
131
- */
132
- del<T>(url: string): Promise<FetchResponse<T>>;
133
- }
package/dist/client.js DELETED
@@ -1,166 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FetchClient = void 0;
4
- /**
5
- * A configurable HTTP client with middleware support.
6
- *
7
- * @example
8
- * ```typescript
9
- * const client = new FetchClient({
10
- * credentials: 'same-origin'
11
- * });
12
- *
13
- * // Add middleware
14
- * client.useRequestMiddleware(async (req, url) => {
15
- * return [{ ...req, headers: { ...req.headers, 'Auth': 'token' } }, url];
16
- * });
17
- *
18
- * // Make requests
19
- * const data = await client.get('/api/users');
20
- * ```
21
- */
22
- class FetchClient {
23
- /**
24
- * Creates a new FetchClient instance.
25
- * @param config - Configuration options for the client
26
- */
27
- constructor(config = {}) {
28
- this.requestMiddlewares = [];
29
- this.responseMiddlewares = [];
30
- this.credentials = config.credentials ?? 'same-origin';
31
- }
32
- /**
33
- * Adds a request middleware to the client.
34
- * Request middlewares are executed in the order they are added.
35
- * @param middleware - The middleware function to add
36
- */
37
- useRequestMiddleware(middleware) {
38
- this.requestMiddlewares.push(middleware);
39
- }
40
- /**
41
- * Adds a response middleware to the client.
42
- * Response middlewares are executed in the order they are added.
43
- * @param middleware - The middleware function to add
44
- */
45
- useResponseMiddleware(middleware) {
46
- this.responseMiddlewares.push(middleware);
47
- }
48
- /**
49
- * Makes an HTTP request with middleware processing.
50
- *
51
- * @template T - The expected response type
52
- * @param url - The URL to request
53
- * @param init - Request configuration options
54
- * @returns Promise that resolves to a FetchResponse containing the data and metadata
55
- */
56
- async request(url, init = {}) {
57
- try {
58
- for (const mw of this.requestMiddlewares) {
59
- [init, url] = await mw(init, url);
60
- }
61
- let res = await fetch(url, {
62
- credentials: this.credentials,
63
- ...init,
64
- });
65
- for (const mw of this.responseMiddlewares) {
66
- res = await mw(res);
67
- }
68
- const responseMetadata = {
69
- status: res.status,
70
- statusText: res.statusText,
71
- headers: res.headers,
72
- url: res.url,
73
- ok: res.ok,
74
- };
75
- if (!res.ok) {
76
- const body = await res.json().catch(() => ({}));
77
- return {
78
- ...responseMetadata,
79
- data: null,
80
- error: {
81
- message: res.statusText,
82
- body,
83
- },
84
- };
85
- }
86
- const data = await res.json();
87
- return {
88
- ...responseMetadata,
89
- data,
90
- };
91
- }
92
- catch (error) {
93
- // Handle network errors and other exceptions
94
- if (error instanceof TypeError && error.message.includes('fetch')) {
95
- return {
96
- status: 0,
97
- statusText: 'Network Error',
98
- headers: new Headers(),
99
- url,
100
- ok: false,
101
- data: null,
102
- error: {
103
- message: 'Failed to fetch',
104
- body: error,
105
- },
106
- };
107
- }
108
- // Re-throw unexpected errors
109
- throw error;
110
- }
111
- }
112
- /**
113
- * Makes a GET request.
114
- * @template T - The expected response type
115
- * @param url - The URL to request
116
- * @returns Promise that resolves to a FetchResponse containing the data and metadata
117
- */
118
- get(url) {
119
- return this.request(url, { method: 'GET' });
120
- }
121
- /**
122
- * Helper method for requests with JSON body.
123
- * @template T - The expected response type
124
- * @param url - The URL to request
125
- * @param method - The HTTP method
126
- * @param body - The request body data (will be JSON stringified)
127
- * @returns Promise that resolves to a FetchResponse containing the data and metadata
128
- */
129
- requestWithJsonBody(url, method, body) {
130
- return this.request(url, {
131
- method,
132
- body: JSON.stringify(body),
133
- });
134
- }
135
- /**
136
- * Makes a POST request with JSON body.
137
- * @template T - The expected response type
138
- * @param url - The URL to request
139
- * @param body - The request body data (will be JSON stringified)
140
- * @returns Promise that resolves to a FetchResponse containing the data and metadata
141
- */
142
- post(url, body) {
143
- return this.requestWithJsonBody(url, 'POST', body ?? {});
144
- }
145
- /**
146
- * Makes a PUT request with JSON body.
147
- * @template T - The expected response type
148
- * @param url - The URL to request
149
- * @param body - The request body data (will be JSON stringified)
150
- * @returns Promise that resolves to a FetchResponse containing the data and metadata
151
- */
152
- put(url, body) {
153
- return this.requestWithJsonBody(url, 'PUT', body ?? {});
154
- }
155
- /**
156
- * Makes a DELETE request.
157
- * @template T - The expected response type
158
- * @param url - The URL to request
159
- * @returns Promise that resolves to a FetchResponse containing the data and metadata
160
- */
161
- del(url) {
162
- return this.request(url, { method: 'DELETE' });
163
- }
164
- }
165
- exports.FetchClient = FetchClient;
166
- //# sourceMappingURL=client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/csrf.d.ts DELETED
@@ -1,32 +0,0 @@
1
- import { FetchClient } from './client';
2
- /**
3
- * Configuration options for CSRF protection middleware.
4
- */
5
- interface CsrfConfig {
6
- /** Name of the cookie that contains the CSRF token */
7
- cookieName: string;
8
- /** Name of the HTTP header to send the CSRF token in */
9
- headerName: string;
10
- }
11
- /**
12
- * Configures CSRF protection for a FetchClient.
13
- *
14
- * This function adds middleware that:
15
- * - Reads CSRF tokens from cookies and includes them in request headers
16
- * - Updates CSRF tokens from response headers back to cookies
17
- * - Automatically sets Content-Type to application/json for requests
18
- *
19
- * @param client - The FetchClient instance to configure
20
- * @param config - CSRF configuration options
21
- *
22
- * @example
23
- * ```typescript
24
- * const client = new FetchClient();
25
- * useCSRF(client, {
26
- * cookieName: 'csrf_token',
27
- * headerName: 'X-CSRF-Token'
28
- * });
29
- * ```
30
- */
31
- export declare function useCSRF(client: FetchClient, config: CsrfConfig): void;
32
- export {};
package/dist/csrf.js DELETED
@@ -1,53 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useCSRF = useCSRF;
4
- /**
5
- * Creates a request middleware that adds CSRF token to requests.
6
- * Reads the token from a cookie and adds it as a header.
7
- *
8
- * @param config - CSRF configuration options
9
- * @returns Request middleware function
10
- */
11
- function csrfMiddleware(config) {
12
- return async (req, url) => {
13
- const cookie = document.cookie.match(new RegExp(`${config.cookieName}=([^;]+)`));
14
- const token = cookie?.[1];
15
- const headers = {
16
- ...req.headers,
17
- 'Content-Type': 'application/json',
18
- ...(token && { [config.headerName]: token }),
19
- };
20
- return [{ ...req, headers }, url];
21
- };
22
- }
23
- /**
24
- * Configures CSRF protection for a FetchClient.
25
- *
26
- * This function adds middleware that:
27
- * - Reads CSRF tokens from cookies and includes them in request headers
28
- * - Updates CSRF tokens from response headers back to cookies
29
- * - Automatically sets Content-Type to application/json for requests
30
- *
31
- * @param client - The FetchClient instance to configure
32
- * @param config - CSRF configuration options
33
- *
34
- * @example
35
- * ```typescript
36
- * const client = new FetchClient();
37
- * useCSRF(client, {
38
- * cookieName: 'csrf_token',
39
- * headerName: 'X-CSRF-Token'
40
- * });
41
- * ```
42
- */
43
- function useCSRF(client, config) {
44
- client.useRequestMiddleware(csrfMiddleware(config));
45
- client.useResponseMiddleware(async (res) => {
46
- const csrfToken = res.headers.get(config.headerName);
47
- if (csrfToken) {
48
- document.cookie = `${config.cookieName}=${csrfToken}; path=/;`;
49
- }
50
- return res;
51
- });
52
- }
53
- //# sourceMappingURL=csrf.js.map
package/dist/csrf.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"csrf.js","sourceRoot":"","sources":["../src/csrf.ts"],"names":[],"mappings":";;AAsDA,0BASC;AAnDD;;;;;;GAMG;AACH,SAAS,cAAc,CAAC,MAAkB;IACxC,OAAO,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACxB,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAClC,IAAI,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,UAAU,CAAC,CAC3C,CAAC;QACF,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,OAAO,GAAG;YACd,GAAG,GAAG,CAAC,OAAO;YACd,cAAc,EAAE,kBAAkB;YAClC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC;SAC7C,CAAC;QACF,OAAO,CAAC,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;IACpC,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,SAAgB,OAAO,CAAC,MAAmB,EAAE,MAAkB;IAC7D,MAAM,CAAC,oBAAoB,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IACpD,MAAM,CAAC,qBAAqB,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACzC,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACrD,IAAI,SAAS,EAAE,CAAC;YACd,QAAQ,CAAC,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,IAAI,SAAS,WAAW,CAAC;QACjE,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH;;GAEG;AACH,MAAa,UAAW,SAAQ,KAAK;IAInC;;;;OAIG;IACH,YAAY,OAAe,EAAE,KAAa;QACxC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;AAdD,gCAcC;AAED;;GAEG;AACH,MAAa,SAAU,SAAQ,UAAU;IAQvC;;;;;;OAMG;IACH,YAAY,MAAc,EAAE,UAAkB,EAAE,IAAS,EAAE,GAAW;QACpE,KAAK,CAAC,QAAQ,MAAM,IAAI,UAAU,OAAO,GAAG,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAtBD,8BAsBC;AAED;;GAEG;AACH,MAAa,YAAa,SAAQ,UAAU;IAC1C;;;;;OAKG;IACH,YAAY,OAAe,EAAE,GAAW,EAAE,KAAa;QACrD,KAAK,CAAC,qBAAqB,GAAG,KAAK,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;QACrD,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAXD,oCAWC"}
@@ -1,24 +0,0 @@
1
- /**
2
- * @fileoverview Shared test utilities to reduce duplication across test files.
3
- */
4
- /**
5
- * Sets up mock fetch for testing with automatic cleanup.
6
- * @returns Object with mockFetch function and cleanup utilities
7
- */
8
- export declare function setupMockFetch(): {
9
- mockFetch: import("vitest").Mock<(...args: any[]) => any>;
10
- setup: () => void;
11
- cleanup: () => void;
12
- };
13
- /**
14
- * Creates a mock Response object for testing.
15
- * @param data - The response data to be JSON stringified
16
- * @param status - HTTP status code (default: 200)
17
- * @param headers - Additional headers (default: {})
18
- * @returns Mock Response object
19
- */
20
- export declare function createMockResponse(data: any, status?: number, headers?: Record<string, string>): Response;
21
- /**
22
- * Clears all cookies in the document for testing.
23
- */
24
- export declare function clearAllCookies(): void;
@@ -1,52 +0,0 @@
1
- "use strict";
2
- /**
3
- * @fileoverview Shared test utilities to reduce duplication across test files.
4
- */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.setupMockFetch = setupMockFetch;
7
- exports.createMockResponse = createMockResponse;
8
- exports.clearAllCookies = clearAllCookies;
9
- const vitest_1 = require("vitest");
10
- /**
11
- * Sets up mock fetch for testing with automatic cleanup.
12
- * @returns Object with mockFetch function and cleanup utilities
13
- */
14
- function setupMockFetch() {
15
- const mockFetch = vitest_1.vi.fn();
16
- const originalFetch = globalThis.fetch;
17
- const setup = () => {
18
- vitest_1.vi.resetAllMocks();
19
- globalThis.fetch = mockFetch;
20
- };
21
- const cleanup = () => {
22
- globalThis.fetch = originalFetch;
23
- };
24
- return { mockFetch, setup, cleanup };
25
- }
26
- /**
27
- * Creates a mock Response object for testing.
28
- * @param data - The response data to be JSON stringified
29
- * @param status - HTTP status code (default: 200)
30
- * @param headers - Additional headers (default: {})
31
- * @returns Mock Response object
32
- */
33
- function createMockResponse(data, status = 200, headers = {}) {
34
- return new Response(JSON.stringify(data), {
35
- status,
36
- headers: {
37
- 'Content-Type': 'application/json',
38
- ...headers,
39
- },
40
- });
41
- }
42
- /**
43
- * Clears all cookies in the document for testing.
44
- */
45
- function clearAllCookies() {
46
- document.cookie.split(';').forEach((c) => {
47
- const eqPos = c.indexOf('=');
48
- const name = eqPos > -1 ? c.substring(0, eqPos) : c;
49
- document.cookie = `${name.trim()}=;expires=Thu, 01 Jan 1970 00:00:00 GMT;path=/`;
50
- });
51
- }
52
- //# sourceMappingURL=test-utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-utils.js","sourceRoot":"","sources":["../src/test-utils.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAQH,wCAcC;AASD,gDAYC;AAKD,0CAMC;AApDD,mCAA4B;AAE5B;;;GAGG;AACH,SAAgB,cAAc;IAC5B,MAAM,SAAS,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC;IAC1B,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC;IAEvC,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,WAAE,CAAC,aAAa,EAAE,CAAC;QACnB,UAAU,CAAC,KAAK,GAAG,SAAS,CAAC;IAC/B,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,UAAU,CAAC,KAAK,GAAG,aAAa,CAAC;IACnC,CAAC,CAAC;IAEF,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AACvC,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,kBAAkB,CAChC,IAAS,EACT,SAAiB,GAAG,EACpB,UAAkC,EAAE;IAEpC,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;QACxC,MAAM;QACN,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,GAAG,OAAO;SACX;KACF,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe;IAC7B,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QACvC,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,QAAQ,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,gDAAgD,CAAC;IACnF,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1,27 +0,0 @@
1
- import { FetchClient } from './client';
2
- /**
3
- * Configuration options for unauthorized redirect middleware.
4
- */
5
- export interface UnauthorizedConfig {
6
- /** Path to redirect to when a 401 Unauthorized response is received */
7
- loginPath: string;
8
- }
9
- /**
10
- * Configures automatic redirection for unauthorized responses.
11
- *
12
- * When a 401 Unauthorized response is received, this middleware will
13
- * automatically redirect the browser to the specified login page,
14
- * including the current URL as a returnTo parameter for post-login redirection.
15
- *
16
- * @param client - The FetchClient instance to configure
17
- * @param config - Configuration options including the login path
18
- *
19
- * @example
20
- * ```typescript
21
- * const client = new FetchClient();
22
- * useUnauthorized(client, {
23
- * loginPath: '/login'
24
- * });
25
- * ```
26
- */
27
- export declare function useUnauthorized(client: FetchClient, config: UnauthorizedConfig): void;
@@ -1,41 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useUnauthorized = useUnauthorized;
4
- /**
5
- * Creates a response middleware that handles 401 Unauthorized responses
6
- * by redirecting to a login page with a return URL.
7
- *
8
- * @param config - Configuration options
9
- * @returns Response middleware function
10
- */
11
- function unauthorizedRedirectMiddleware(config) {
12
- return async (res) => {
13
- if (res.status === 401) {
14
- const returnTo = encodeURIComponent(window.location.pathname + window.location.search);
15
- window.location.href = `${config.loginPath}?returnTo=${returnTo}`;
16
- }
17
- return res;
18
- };
19
- }
20
- /**
21
- * Configures automatic redirection for unauthorized responses.
22
- *
23
- * When a 401 Unauthorized response is received, this middleware will
24
- * automatically redirect the browser to the specified login page,
25
- * including the current URL as a returnTo parameter for post-login redirection.
26
- *
27
- * @param client - The FetchClient instance to configure
28
- * @param config - Configuration options including the login path
29
- *
30
- * @example
31
- * ```typescript
32
- * const client = new FetchClient();
33
- * useUnauthorized(client, {
34
- * loginPath: '/login'
35
- * });
36
- * ```
37
- */
38
- function useUnauthorized(client, config) {
39
- client.useResponseMiddleware(unauthorizedRedirectMiddleware(config));
40
- }
41
- //# sourceMappingURL=unauthorized.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"unauthorized.js","sourceRoot":"","sources":["../src/unauthorized.ts"],"names":[],"mappings":";;AAiDA,0CAKC;AA5CD;;;;;;GAMG;AACH,SAAS,8BAA8B,CACrC,MAA0B;IAE1B,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE;QACnB,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,kBAAkB,CACjC,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAClD,CAAC;YACF,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,MAAM,CAAC,SAAS,aAAa,QAAQ,EAAE,CAAC;QACpE,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,SAAgB,eAAe,CAC7B,MAAmB,EACnB,MAA0B;IAE1B,MAAM,CAAC,qBAAqB,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC,CAAC;AACvE,CAAC"}