@fgrzl/fetch 1.1.0-alpha.8 → 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,36 +0,0 @@
1
- /**
2
- * @fileoverview Authorization middleware - "pit of success" API.
3
- */
4
- import type { FetchClient } from '../../client/fetch-client';
5
- import type { AuthorizationOptions } from './types';
6
- export type { AuthorizationOptions, UnauthorizedHandler } from './types';
7
- export { createAuthorizationMiddleware } from './authorization';
8
- /**
9
- * "Pit of success" API for adding authorization handling to a FetchClient.
10
- * Automatically handles 401 Unauthorized responses.
11
- *
12
- * @param client - The FetchClient to add authorization handling to
13
- * @param options - Authorization configuration
14
- * @returns A new FetchClient with authorization middleware
15
- *
16
- * @example Basic redirect on 401:
17
- * ```typescript
18
- * const authzClient = useAuthorization(client, {
19
- * onUnauthorized: () => {
20
- * localStorage.removeItem('auth-token');
21
- * window.location.href = '/login';
22
- * }
23
- * });
24
- * ```
25
- *
26
- * @example Handle multiple status codes:
27
- * ```typescript
28
- * const authzClient = useAuthorization(client, {
29
- * onUnauthorized: () => redirectToLogin(),
30
- * onForbidden: () => showAccessDenied(),
31
- * statusCodes: [401, 403]
32
- * });
33
- * ```
34
- */
35
- export declare function useAuthorization(client: FetchClient, options: AuthorizationOptions): FetchClient;
36
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/middleware/authorization/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAIpD,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AACzE,OAAO,EAAE,6BAA6B,EAAE,MAAM,iBAAiB,CAAC;AAEhE;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,oBAAoB,GAC5B,WAAW,CAEb"}
@@ -1,41 +0,0 @@
1
- "use strict";
2
- /**
3
- * @fileoverview Authorization middleware - "pit of success" API.
4
- */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.createAuthorizationMiddleware = void 0;
7
- exports.useAuthorization = useAuthorization;
8
- const authorization_1 = require("./authorization");
9
- var authorization_2 = require("./authorization");
10
- Object.defineProperty(exports, "createAuthorizationMiddleware", { enumerable: true, get: function () { return authorization_2.createAuthorizationMiddleware; } });
11
- /**
12
- * "Pit of success" API for adding authorization handling to a FetchClient.
13
- * Automatically handles 401 Unauthorized responses.
14
- *
15
- * @param client - The FetchClient to add authorization handling to
16
- * @param options - Authorization configuration
17
- * @returns A new FetchClient with authorization middleware
18
- *
19
- * @example Basic redirect on 401:
20
- * ```typescript
21
- * const authzClient = useAuthorization(client, {
22
- * onUnauthorized: () => {
23
- * localStorage.removeItem('auth-token');
24
- * window.location.href = '/login';
25
- * }
26
- * });
27
- * ```
28
- *
29
- * @example Handle multiple status codes:
30
- * ```typescript
31
- * const authzClient = useAuthorization(client, {
32
- * onUnauthorized: () => redirectToLogin(),
33
- * onForbidden: () => showAccessDenied(),
34
- * statusCodes: [401, 403]
35
- * });
36
- * ```
37
- */
38
- function useAuthorization(client, options) {
39
- return client.use((0, authorization_1.createAuthorizationMiddleware)(options));
40
- }
41
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/middleware/authorization/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAqCH,4CAKC;AAtCD,mDAAgE;AAIhE,iDAAgE;AAAvD,8HAAA,6BAA6B,OAAA;AAEtC;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,SAAgB,gBAAgB,CAC9B,MAAmB,EACnB,OAA6B;IAE7B,OAAO,MAAM,CAAC,GAAG,CAAC,IAAA,6CAA6B,EAAC,OAAO,CAAC,CAAC,CAAC;AAC5D,CAAC"}
@@ -1,67 +0,0 @@
1
- /**
2
- * @fileoverview Authorization middleware types and configuration.
3
- */
4
- import type { FetchResponse } from '../../client/types';
5
- /**
6
- * Handler function for unauthorized/forbidden responses.
7
- */
8
- export type UnauthorizedHandler = (response: FetchResponse<unknown>, request: RequestInit & {
9
- url?: string;
10
- }) => void | Promise<void>;
11
- /**
12
- * Authorization configuration options - optimized for "pit of success".
13
- *
14
- * Smart defaults:
15
- * - Handles 401 Unauthorized responses
16
- * - Optionally handles 403 Forbidden responses
17
- * - Graceful error handling
18
- */
19
- export interface AuthorizationOptions {
20
- /**
21
- * Handler called when 401 Unauthorized response is received.
22
- *
23
- * @param response - The 401 response object
24
- * @param request - The original request that was unauthorized
25
- *
26
- * @example Redirect to login:
27
- * ```typescript
28
- * onUnauthorized: () => {
29
- * window.location.href = '/login';
30
- * }
31
- * ```
32
- *
33
- * @example Clear token and reload:
34
- * ```typescript
35
- * onUnauthorized: () => {
36
- * localStorage.removeItem('auth-token');
37
- * window.location.reload();
38
- * }
39
- * ```
40
- */
41
- onUnauthorized: UnauthorizedHandler;
42
- /**
43
- * Handler called when 403 Forbidden response is received.
44
- * Optional - if not provided, 403 responses are ignored.
45
- *
46
- * @param response - The 403 response object
47
- * @param request - The original request that was forbidden
48
- */
49
- onForbidden?: UnauthorizedHandler;
50
- /**
51
- * Skip authorization handling for requests matching these URL patterns
52
- * Useful for login/public endpoints where 401 is expected
53
- *
54
- * @example
55
- * ```typescript
56
- * skipPatterns: ['/login', '/register', /^\/public\//]
57
- * ```
58
- */
59
- skipPatterns?: (RegExp | string)[];
60
- /**
61
- * Status codes to handle (default: [401])
62
- * You can add 403 if you want to handle forbidden responses
63
- */
64
- statusCodes?: number[];
65
- }
66
- export {};
67
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/middleware/authorization/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAChC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,EAChC,OAAO,EAAE,WAAW,GAAG;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,KACpC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1B;;;;;;;GAOG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,cAAc,EAAE,mBAAmB,CAAC;IAEpC;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAElC;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAEnC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAGD,OAAO,EAAE,CAAC"}
@@ -1,6 +0,0 @@
1
- "use strict";
2
- /**
3
- * @fileoverview Authorization middleware types and configuration.
4
- */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/middleware/authorization/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
@@ -1,41 +0,0 @@
1
- /**
2
- * @fileoverview Cache middleware implementation.
3
- */
4
- import type { FetchMiddleware } from '../../client/fetch-client';
5
- import type { CacheOptions, CacheStorage, CacheEntry } from './types';
6
- /**
7
- * Default in-memory cache storage implementation.
8
- */
9
- export declare class MemoryStorage implements CacheStorage {
10
- private cache;
11
- get(key: string): Promise<CacheEntry | null>;
12
- getWithExpiry(key: string): Promise<{
13
- entry: CacheEntry | null;
14
- isExpired: boolean;
15
- }>;
16
- set(key: string, entry: CacheEntry): Promise<void>;
17
- delete(key: string): Promise<void>;
18
- clear(): Promise<void>;
19
- }
20
- /**
21
- * Creates cache middleware with smart defaults.
22
- * Caches GET responses for faster subsequent requests.
23
- *
24
- * @param options - Cache configuration options
25
- * @returns Cache middleware for use with FetchClient
26
- *
27
- * @example Basic caching:
28
- * ```typescript
29
- * const cachedClient = useCache(client);
30
- * // GET requests will be cached for 5 minutes
31
- * ```
32
- *
33
- * @example Custom TTL:
34
- * ```typescript
35
- * const cachedClient = useCache(client, {
36
- * ttl: 10 * 60 * 1000 // 10 minutes
37
- * });
38
- * ```
39
- */
40
- export declare function createCacheMiddleware(options?: CacheOptions): FetchMiddleware;
41
- //# sourceMappingURL=cache.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../../src/middleware/cache/cache.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAEjE,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,UAAU,EAEX,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,qBAAa,aAAc,YAAW,YAAY;IAChD,OAAO,CAAC,KAAK,CAAiC;IAExC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAe5C,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;IAWrF,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B;AA2BD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,GAAE,YAAiB,GACzB,eAAe,CA0HjB"}
@@ -1,191 +0,0 @@
1
- "use strict";
2
- /**
3
- * @fileoverview Cache middleware implementation.
4
- */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.MemoryStorage = void 0;
7
- exports.createCacheMiddleware = createCacheMiddleware;
8
- /**
9
- * Default in-memory cache storage implementation.
10
- */
11
- class MemoryStorage {
12
- constructor() {
13
- this.cache = new Map();
14
- }
15
- async get(key) {
16
- const entry = this.cache.get(key);
17
- if (!entry) {
18
- return null;
19
- }
20
- // Check if expired
21
- if (Date.now() > entry.expiresAt) {
22
- this.cache.delete(key);
23
- return null;
24
- }
25
- return entry;
26
- }
27
- async getWithExpiry(key) {
28
- const entry = this.cache.get(key);
29
- if (!entry) {
30
- return { entry: null, isExpired: false };
31
- }
32
- const isExpired = Date.now() > entry.expiresAt;
33
- // Don't delete expired entries when using getWithExpiry - let the caller decide
34
- return { entry, isExpired };
35
- }
36
- async set(key, entry) {
37
- this.cache.set(key, entry);
38
- }
39
- async delete(key) {
40
- this.cache.delete(key);
41
- }
42
- async clear() {
43
- this.cache.clear();
44
- }
45
- }
46
- exports.MemoryStorage = MemoryStorage;
47
- /**
48
- * Default cache key generator.
49
- */
50
- const defaultKeyGenerator = (request) => {
51
- const url = request.url || '';
52
- const method = request.method || 'GET';
53
- const headers = request.headers ? JSON.stringify(request.headers) : '';
54
- return `${method}:${url}:${headers}`;
55
- };
56
- /**
57
- * Checks if a URL should skip caching based on configured patterns.
58
- */
59
- function shouldSkipCache(url, skipPatterns = []) {
60
- return skipPatterns.some((pattern) => {
61
- if (typeof pattern === 'string') {
62
- return url.includes(pattern);
63
- }
64
- return pattern.test(url);
65
- });
66
- }
67
- /**
68
- * Creates cache middleware with smart defaults.
69
- * Caches GET responses for faster subsequent requests.
70
- *
71
- * @param options - Cache configuration options
72
- * @returns Cache middleware for use with FetchClient
73
- *
74
- * @example Basic caching:
75
- * ```typescript
76
- * const cachedClient = useCache(client);
77
- * // GET requests will be cached for 5 minutes
78
- * ```
79
- *
80
- * @example Custom TTL:
81
- * ```typescript
82
- * const cachedClient = useCache(client, {
83
- * ttl: 10 * 60 * 1000 // 10 minutes
84
- * });
85
- * ```
86
- */
87
- function createCacheMiddleware(options = {}) {
88
- const { ttl = 5 * 60 * 1000, // 5 minutes
89
- methods = ['GET'], storage = new MemoryStorage(), keyGenerator = defaultKeyGenerator, skipPatterns = [], staleWhileRevalidate = false, } = options;
90
- return async (request, next) => {
91
- const method = (request.method || 'GET').toUpperCase();
92
- const url = request.url || '';
93
- // Skip caching if:
94
- // 1. Method is not in cached methods list
95
- // 2. URL matches a skip pattern
96
- if (!methods.includes(method) || shouldSkipCache(url, skipPatterns)) {
97
- return next(request);
98
- }
99
- const cacheKey = keyGenerator(request);
100
- try {
101
- // Try to get cached response with expiry info
102
- const { entry: cached, isExpired } = storage.getWithExpiry
103
- ? await storage.getWithExpiry(cacheKey)
104
- : await (async () => {
105
- const entry = await storage.get(cacheKey);
106
- return { entry, isExpired: false };
107
- })();
108
- if (cached && !isExpired) {
109
- // Return fresh cached response
110
- return {
111
- ...cached.response,
112
- headers: new Headers(cached.response.headers),
113
- data: cached.response.data,
114
- };
115
- }
116
- // If stale-while-revalidate and we have cached data (even expired), return it immediately
117
- // and update in background
118
- if (cached && staleWhileRevalidate) {
119
- // Return cached data immediately (even if stale)
120
- const cachedResponse = {
121
- ...cached.response,
122
- headers: new Headers(cached.response.headers),
123
- data: cached.response.data,
124
- };
125
- // Update cache in background if expired
126
- if (isExpired) {
127
- next(request)
128
- .then(async (freshResponse) => {
129
- const headersObj = {};
130
- freshResponse.headers.forEach((value, key) => {
131
- headersObj[key] = value;
132
- });
133
- const cacheEntry = {
134
- response: {
135
- status: freshResponse.status,
136
- statusText: freshResponse.statusText,
137
- headers: headersObj,
138
- data: freshResponse.data,
139
- },
140
- timestamp: Date.now(),
141
- expiresAt: Date.now() + ttl,
142
- };
143
- await storage.set(cacheKey, cacheEntry);
144
- })
145
- .catch(() => {
146
- // Ignore background update errors
147
- });
148
- }
149
- return cachedResponse;
150
- }
151
- // No cached data or not using stale-while-revalidate
152
- const response = await next(request);
153
- // Cache successful responses
154
- if (response.ok) {
155
- try {
156
- const headersObj = {};
157
- response.headers.forEach((value, key) => {
158
- headersObj[key] = value;
159
- });
160
- const cacheEntry = {
161
- response: {
162
- status: response.status,
163
- statusText: response.statusText,
164
- headers: headersObj,
165
- data: response.data,
166
- },
167
- timestamp: Date.now(),
168
- expiresAt: Date.now() + ttl,
169
- };
170
- await storage.set(cacheKey, cacheEntry);
171
- }
172
- catch {
173
- // Ignore cache storage errors, but still return the response
174
- }
175
- }
176
- return response;
177
- }
178
- catch (error) {
179
- // Only catch cache retrieval errors, let network errors through
180
- if (error && typeof error === 'object' && 'message' in error) {
181
- const errorMessage = error.message;
182
- if (errorMessage.includes('Network') || errorMessage.includes('fetch')) {
183
- throw error; // Re-throw network errors
184
- }
185
- }
186
- // If cache retrieval fails, just proceed with the request
187
- return next(request);
188
- }
189
- };
190
- }
191
- //# sourceMappingURL=cache.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../../src/middleware/cache/cache.ts"],"names":[],"mappings":"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"}
@@ -1,44 +0,0 @@
1
- /**
2
- * @fileoverview Cache middleware - "pit of success" API.
3
- */
4
- import type { FetchClient } from '../../client/fetch-client';
5
- import type { CacheOptions } from './types';
6
- export type { CacheOptions, CacheStorage, CacheEntry, CacheKeyGenerator, } from './types';
7
- export { createCacheMiddleware, MemoryStorage } from './cache';
8
- /**
9
- * "Pit of success" API for adding response caching to a FetchClient.
10
- * Caches GET responses for faster subsequent requests.
11
- *
12
- * @param client - The FetchClient to add caching to
13
- * @param options - Cache configuration options
14
- * @returns A new FetchClient with cache middleware
15
- *
16
- * @example Basic caching (5 minute TTL):
17
- * ```typescript
18
- * const cachedClient = useCache(client);
19
- *
20
- * // First call hits the network
21
- * await cachedClient.get('/api/data');
22
- *
23
- * // Second call returns cached data
24
- * await cachedClient.get('/api/data');
25
- * ```
26
- *
27
- * @example Custom TTL and methods:
28
- * ```typescript
29
- * const cachedClient = useCache(client, {
30
- * ttl: 10 * 60 * 1000, // 10 minutes
31
- * methods: ['GET', 'HEAD']
32
- * });
33
- * ```
34
- *
35
- * @example Stale-while-revalidate:
36
- * ```typescript
37
- * const cachedClient = useCache(client, {
38
- * staleWhileRevalidate: true
39
- * });
40
- * // Returns stale data immediately, updates cache in background
41
- * ```
42
- */
43
- export declare function useCache(client: FetchClient, options?: CacheOptions): FetchClient;
44
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/middleware/cache/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAI5C,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,iBAAiB,GAClB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,QAAQ,CACtB,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE,YAAiB,GACzB,WAAW,CAEb"}
@@ -1,50 +0,0 @@
1
- "use strict";
2
- /**
3
- * @fileoverview Cache middleware - "pit of success" API.
4
- */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.MemoryStorage = exports.createCacheMiddleware = void 0;
7
- exports.useCache = useCache;
8
- const cache_1 = require("./cache");
9
- var cache_2 = require("./cache");
10
- Object.defineProperty(exports, "createCacheMiddleware", { enumerable: true, get: function () { return cache_2.createCacheMiddleware; } });
11
- Object.defineProperty(exports, "MemoryStorage", { enumerable: true, get: function () { return cache_2.MemoryStorage; } });
12
- /**
13
- * "Pit of success" API for adding response caching to a FetchClient.
14
- * Caches GET responses for faster subsequent requests.
15
- *
16
- * @param client - The FetchClient to add caching to
17
- * @param options - Cache configuration options
18
- * @returns A new FetchClient with cache middleware
19
- *
20
- * @example Basic caching (5 minute TTL):
21
- * ```typescript
22
- * const cachedClient = useCache(client);
23
- *
24
- * // First call hits the network
25
- * await cachedClient.get('/api/data');
26
- *
27
- * // Second call returns cached data
28
- * await cachedClient.get('/api/data');
29
- * ```
30
- *
31
- * @example Custom TTL and methods:
32
- * ```typescript
33
- * const cachedClient = useCache(client, {
34
- * ttl: 10 * 60 * 1000, // 10 minutes
35
- * methods: ['GET', 'HEAD']
36
- * });
37
- * ```
38
- *
39
- * @example Stale-while-revalidate:
40
- * ```typescript
41
- * const cachedClient = useCache(client, {
42
- * staleWhileRevalidate: true
43
- * });
44
- * // Returns stale data immediately, updates cache in background
45
- * ```
46
- */
47
- function useCache(client, options = {}) {
48
- return client.use((0, cache_1.createCacheMiddleware)(options));
49
- }
50
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/middleware/cache/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAkDH,4BAKC;AAnDD,mCAAgD;AAShD,iCAA+D;AAAtD,8GAAA,qBAAqB,OAAA;AAAE,sGAAA,aAAa,OAAA;AAE7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,SAAgB,QAAQ,CACtB,MAAmB,EACnB,UAAwB,EAAE;IAE1B,OAAO,MAAM,CAAC,GAAG,CAAC,IAAA,6BAAqB,EAAC,OAAO,CAAC,CAAC,CAAC;AACpD,CAAC"}
@@ -1,89 +0,0 @@
1
- /**
2
- * @fileoverview Cache middleware types and configuration.
3
- */
4
- /**
5
- * Cache key generator function.
6
- * Should return a unique key for the request.
7
- */
8
- export type CacheKeyGenerator = (request: RequestInit & {
9
- url?: string;
10
- }) => string;
11
- /**
12
- * Cache storage interface.
13
- * Allows custom cache implementations.
14
- */
15
- export interface CacheStorage {
16
- get(key: string): Promise<CacheEntry | null>;
17
- getWithExpiry?(key: string): Promise<{
18
- entry: CacheEntry | null;
19
- isExpired: boolean;
20
- }>;
21
- set(key: string, entry: CacheEntry): Promise<void>;
22
- delete(key: string): Promise<void>;
23
- clear(): Promise<void>;
24
- }
25
- /**
26
- * Cached response entry.
27
- */
28
- export interface CacheEntry {
29
- response: {
30
- status: number;
31
- statusText: string;
32
- headers: Record<string, string>;
33
- data: unknown;
34
- };
35
- timestamp: number;
36
- expiresAt: number;
37
- }
38
- /**
39
- * Cache configuration options - optimized for "pit of success".
40
- *
41
- * Smart defaults:
42
- * - Only caches GET requests
43
- * - 5 minute default TTL
44
- * - Memory-based storage
45
- * - Automatic cache key generation
46
- */
47
- export interface CacheOptions {
48
- /**
49
- * Time to live in milliseconds (default: 300000 = 5 minutes)
50
- * How long responses should be cached
51
- */
52
- ttl?: number;
53
- /**
54
- * HTTP methods to cache (default: ['GET'])
55
- * Only these methods will be cached
56
- */
57
- methods?: string[];
58
- /**
59
- * Cache storage implementation (default: in-memory)
60
- * Can be replaced with localStorage, IndexedDB, etc.
61
- */
62
- storage?: CacheStorage;
63
- /**
64
- * Custom cache key generator (default: URL + method + headers)
65
- * Should return a unique key for each request
66
- *
67
- * @example Custom key generator:
68
- * ```typescript
69
- * keyGenerator: (request) => `${request.method}:${request.url}`
70
- * ```
71
- */
72
- keyGenerator?: CacheKeyGenerator;
73
- /**
74
- * Skip caching for requests matching these URL patterns
75
- *
76
- * @example
77
- * ```typescript
78
- * skipPatterns: [/\/api\/user/, '/dynamic-data']
79
- * ```
80
- */
81
- skipPatterns?: (RegExp | string)[];
82
- /**
83
- * Whether to serve stale cache entries while revalidating
84
- * When true, returns cached data immediately and updates cache in background
85
- */
86
- staleWhileRevalidate?: boolean;
87
- }
88
- export {};
89
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/middleware/cache/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAC9B,OAAO,EAAE,WAAW,GAAG;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,KACpC,MAAM,CAAC;AAEZ;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAC7C,aAAa,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACvF,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE;QACR,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,IAAI,EAAE,OAAO,CAAC;KACf,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB;;;OAGG;IACH,OAAO,CAAC,EAAE,YAAY,CAAC;IAEvB;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,iBAAiB,CAAC;IAEjC;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAEnC;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAGD,OAAO,EAAE,CAAC"}
@@ -1,6 +0,0 @@
1
- "use strict";
2
- /**
3
- * @fileoverview Cache middleware types and configuration.
4
- */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/middleware/cache/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
@@ -1,34 +0,0 @@
1
- /**
2
- * @fileoverview CSRF protection middleware implementation.
3
- */
4
- import type { FetchMiddleware } from '../../client/fetch-client';
5
- import type { CSRFOptions } from './types';
6
- /**
7
- * Creates CSRF protection middleware with smart defaults.
8
- * Automatically adds CSRF tokens to state-changing requests.
9
- *
10
- * @param options - CSRF configuration options (all optional for "pit of success")
11
- * @returns CSRF middleware for use with FetchClient
12
- *
13
- * @example Basic usage (uses cookies automatically):
14
- * ```typescript
15
- * const client = new FetchClient();
16
- * const csrfClient = useCSRF(client);
17
- * ```
18
- *
19
- * @example Custom token provider:
20
- * ```typescript
21
- * const csrfClient = useCSRF(client, {
22
- * tokenProvider: () => localStorage.getItem('csrf-token') || ''
23
- * });
24
- * ```
25
- *
26
- * @example Skip external APIs:
27
- * ```typescript
28
- * const csrfClient = useCSRF(client, {
29
- * skipPatterns: [/^https:\/\/api\.external\.com\//, '/webhook/']
30
- * });
31
- * ```
32
- */
33
- export declare function createCSRFMiddleware(options?: CSRFOptions): FetchMiddleware;
34
- //# sourceMappingURL=csrf.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"csrf.d.ts","sourceRoot":"","sources":["../../../../src/middleware/csrf/csrf.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAwC3C;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,GAAE,WAAgB,GACxB,eAAe,CA4CjB"}