@fgrzl/fetch 1.1.0-alpha.2 → 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.
- package/README.md +31 -1090
- package/dist/cjs/client/fetch-client.d.ts +189 -0
- package/dist/cjs/client/fetch-client.d.ts.map +1 -0
- package/dist/cjs/client/fetch-client.js +339 -0
- package/dist/cjs/client/fetch-client.js.map +1 -0
- package/dist/cjs/client/index.d.ts +11 -0
- package/dist/cjs/client/index.d.ts.map +1 -0
- package/dist/cjs/client/index.js +14 -0
- package/dist/cjs/client/index.js.map +1 -0
- package/dist/cjs/client/types.d.ts +63 -0
- package/dist/cjs/client/types.d.ts.map +1 -0
- package/dist/cjs/client/types.js +9 -0
- package/dist/cjs/client/types.js.map +1 -0
- package/dist/{errors.d.ts → cjs/errors/index.d.ts} +20 -3
- package/dist/cjs/errors/index.d.ts.map +1 -0
- package/dist/{errors.js → cjs/errors/index.js} +23 -3
- package/dist/cjs/errors/index.js.map +1 -0
- package/dist/cjs/index.d.ts +65 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +118 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/middleware/authentication/authentication.d.ts +31 -0
- package/dist/cjs/middleware/authentication/authentication.d.ts.map +1 -0
- package/dist/cjs/middleware/authentication/authentication.js +93 -0
- package/dist/cjs/middleware/authentication/authentication.js.map +1 -0
- package/dist/cjs/middleware/authentication/index.d.ts +37 -0
- package/dist/cjs/middleware/authentication/index.d.ts.map +1 -0
- package/dist/cjs/middleware/authentication/index.js +42 -0
- package/dist/cjs/middleware/authentication/index.js.map +1 -0
- package/dist/cjs/middleware/authentication/types.d.ts +73 -0
- package/dist/cjs/middleware/authentication/types.d.ts.map +1 -0
- package/dist/cjs/middleware/authentication/types.js +6 -0
- package/dist/cjs/middleware/authentication/types.js.map +1 -0
- package/dist/cjs/middleware/authorization/authorization.d.ts +30 -0
- package/dist/cjs/middleware/authorization/authorization.d.ts.map +1 -0
- package/dist/cjs/middleware/authorization/authorization.js +82 -0
- package/dist/cjs/middleware/authorization/authorization.js.map +1 -0
- package/dist/cjs/middleware/authorization/index.d.ts +36 -0
- package/dist/cjs/middleware/authorization/index.d.ts.map +1 -0
- package/dist/cjs/middleware/authorization/index.js +41 -0
- package/dist/cjs/middleware/authorization/index.js.map +1 -0
- package/dist/cjs/middleware/authorization/types.d.ts +67 -0
- package/dist/cjs/middleware/authorization/types.d.ts.map +1 -0
- package/dist/cjs/middleware/authorization/types.js +6 -0
- package/dist/cjs/middleware/authorization/types.js.map +1 -0
- package/dist/cjs/middleware/cache/cache.d.ts +41 -0
- package/dist/cjs/middleware/cache/cache.d.ts.map +1 -0
- package/dist/cjs/middleware/cache/cache.js +191 -0
- package/dist/cjs/middleware/cache/cache.js.map +1 -0
- package/dist/cjs/middleware/cache/index.d.ts +44 -0
- package/dist/cjs/middleware/cache/index.d.ts.map +1 -0
- package/dist/cjs/middleware/cache/index.js +50 -0
- package/dist/cjs/middleware/cache/index.js.map +1 -0
- package/dist/cjs/middleware/cache/types.d.ts +89 -0
- package/dist/cjs/middleware/cache/types.d.ts.map +1 -0
- package/dist/cjs/middleware/cache/types.js +6 -0
- package/dist/cjs/middleware/cache/types.js.map +1 -0
- package/dist/cjs/middleware/csrf/csrf.d.ts +34 -0
- package/dist/cjs/middleware/csrf/csrf.d.ts.map +1 -0
- package/dist/cjs/middleware/csrf/csrf.js +94 -0
- package/dist/cjs/middleware/csrf/csrf.js.map +1 -0
- package/dist/cjs/middleware/csrf/index.d.ts +57 -0
- package/dist/cjs/middleware/csrf/index.d.ts.map +1 -0
- package/dist/cjs/middleware/csrf/index.js +62 -0
- package/dist/cjs/middleware/csrf/index.js.map +1 -0
- package/dist/cjs/middleware/csrf/types.d.ts +57 -0
- package/dist/cjs/middleware/csrf/types.d.ts.map +1 -0
- package/dist/cjs/middleware/csrf/types.js +6 -0
- package/dist/cjs/middleware/csrf/types.js.map +1 -0
- package/dist/cjs/middleware/index.d.ts +115 -0
- package/dist/cjs/middleware/index.d.ts.map +1 -0
- package/dist/cjs/middleware/index.js +153 -0
- package/dist/cjs/middleware/index.js.map +1 -0
- package/dist/cjs/middleware/logging/index.d.ts +42 -0
- package/dist/cjs/middleware/logging/index.d.ts.map +1 -0
- package/dist/cjs/middleware/logging/index.js +47 -0
- package/dist/cjs/middleware/logging/index.js.map +1 -0
- package/dist/cjs/middleware/logging/logging.d.ts +29 -0
- package/dist/cjs/middleware/logging/logging.d.ts.map +1 -0
- package/dist/cjs/middleware/logging/logging.js +171 -0
- package/dist/cjs/middleware/logging/logging.js.map +1 -0
- package/dist/cjs/middleware/logging/types.d.ts +90 -0
- package/dist/cjs/middleware/logging/types.d.ts.map +1 -0
- package/dist/cjs/middleware/logging/types.js +6 -0
- package/dist/cjs/middleware/logging/types.js.map +1 -0
- package/dist/cjs/middleware/rate-limit/index.d.ts +16 -0
- package/dist/cjs/middleware/rate-limit/index.d.ts.map +1 -0
- package/dist/cjs/middleware/rate-limit/index.js +21 -0
- package/dist/cjs/middleware/rate-limit/index.js.map +1 -0
- package/dist/cjs/middleware/rate-limit/rate-limit.d.ts +14 -0
- package/dist/cjs/middleware/rate-limit/rate-limit.d.ts.map +1 -0
- package/dist/cjs/middleware/rate-limit/rate-limit.js +87 -0
- package/dist/cjs/middleware/rate-limit/rate-limit.js.map +1 -0
- package/dist/cjs/middleware/rate-limit/types.d.ts +97 -0
- package/dist/cjs/middleware/rate-limit/types.d.ts.map +1 -0
- package/dist/cjs/middleware/rate-limit/types.js +6 -0
- package/dist/cjs/middleware/rate-limit/types.js.map +1 -0
- package/dist/cjs/middleware/retry/index.d.ts +6 -0
- package/dist/cjs/middleware/retry/index.d.ts.map +1 -0
- package/dist/cjs/middleware/retry/index.js +11 -0
- package/dist/cjs/middleware/retry/index.js.map +1 -0
- package/dist/cjs/middleware/retry/retry.d.ts +39 -0
- package/dist/cjs/middleware/retry/retry.d.ts.map +1 -0
- package/dist/cjs/middleware/retry/retry.js +144 -0
- package/dist/cjs/middleware/retry/retry.js.map +1 -0
- package/dist/cjs/middleware/retry/types.d.ts +61 -0
- package/dist/cjs/middleware/retry/types.d.ts.map +1 -0
- package/dist/cjs/middleware/retry/types.js +6 -0
- package/dist/cjs/middleware/retry/types.js.map +1 -0
- package/dist/client/fetch-client.d.ts +189 -0
- package/dist/client/fetch-client.d.ts.map +1 -0
- package/dist/client/fetch-client.js +335 -0
- package/dist/client/fetch-client.js.map +1 -0
- package/dist/client/index.d.ts +11 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +10 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/types.d.ts +63 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/types.js +8 -0
- package/dist/client/types.js.map +1 -0
- package/dist/errors/index.d.ts +64 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +73 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/index.d.ts +49 -20
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +86 -42
- package/dist/index.js.map +1 -1
- package/dist/middleware/authentication/authentication.d.ts +31 -0
- package/dist/middleware/authentication/authentication.d.ts.map +1 -0
- package/dist/middleware/authentication/authentication.js +90 -0
- package/dist/middleware/authentication/authentication.js.map +1 -0
- package/dist/middleware/authentication/index.d.ts +37 -0
- package/dist/middleware/authentication/index.d.ts.map +1 -0
- package/dist/middleware/authentication/index.js +37 -0
- package/dist/middleware/authentication/index.js.map +1 -0
- package/dist/middleware/authentication/types.d.ts +73 -0
- package/dist/middleware/authentication/types.d.ts.map +1 -0
- package/dist/middleware/authentication/types.js +5 -0
- package/dist/middleware/authentication/types.js.map +1 -0
- package/dist/middleware/authorization/authorization.d.ts +30 -0
- package/dist/middleware/authorization/authorization.d.ts.map +1 -0
- package/dist/middleware/authorization/authorization.js +79 -0
- package/dist/middleware/authorization/authorization.js.map +1 -0
- package/dist/middleware/authorization/index.d.ts +36 -0
- package/dist/middleware/authorization/index.d.ts.map +1 -0
- package/dist/middleware/authorization/index.js +36 -0
- package/dist/middleware/authorization/index.js.map +1 -0
- package/dist/middleware/authorization/types.d.ts +67 -0
- package/dist/middleware/authorization/types.d.ts.map +1 -0
- package/dist/middleware/authorization/types.js +5 -0
- package/dist/middleware/authorization/types.js.map +1 -0
- package/dist/middleware/cache/cache.d.ts +41 -0
- package/dist/middleware/cache/cache.d.ts.map +1 -0
- package/dist/middleware/cache/cache.js +186 -0
- package/dist/middleware/cache/cache.js.map +1 -0
- package/dist/middleware/cache/index.d.ts +44 -0
- package/dist/middleware/cache/index.d.ts.map +1 -0
- package/dist/middleware/cache/index.js +44 -0
- package/dist/middleware/cache/index.js.map +1 -0
- package/dist/middleware/cache/types.d.ts +89 -0
- package/dist/middleware/cache/types.d.ts.map +1 -0
- package/dist/middleware/cache/types.js +5 -0
- package/dist/middleware/cache/types.js.map +1 -0
- package/dist/middleware/csrf/csrf.d.ts +34 -0
- package/dist/middleware/csrf/csrf.d.ts.map +1 -0
- package/dist/middleware/csrf/csrf.js +91 -0
- package/dist/middleware/csrf/csrf.js.map +1 -0
- package/dist/middleware/csrf/index.d.ts +57 -0
- package/dist/middleware/csrf/index.d.ts.map +1 -0
- package/dist/middleware/csrf/index.js +57 -0
- package/dist/middleware/csrf/index.js.map +1 -0
- package/dist/middleware/csrf/types.d.ts +57 -0
- package/dist/middleware/csrf/types.d.ts.map +1 -0
- package/dist/middleware/csrf/types.js +5 -0
- package/dist/middleware/csrf/types.js.map +1 -0
- package/dist/middleware/index.d.ts +115 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +134 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/logging/index.d.ts +42 -0
- package/dist/middleware/logging/index.d.ts.map +1 -0
- package/dist/middleware/logging/index.js +42 -0
- package/dist/middleware/logging/index.js.map +1 -0
- package/dist/middleware/logging/logging.d.ts +29 -0
- package/dist/middleware/logging/logging.d.ts.map +1 -0
- package/dist/middleware/logging/logging.js +168 -0
- package/dist/middleware/logging/logging.js.map +1 -0
- package/dist/middleware/logging/types.d.ts +90 -0
- package/dist/middleware/logging/types.d.ts.map +1 -0
- package/dist/middleware/logging/types.js +5 -0
- package/dist/middleware/logging/types.js.map +1 -0
- package/dist/middleware/rate-limit/index.d.ts +16 -0
- package/dist/middleware/rate-limit/index.d.ts.map +1 -0
- package/dist/middleware/rate-limit/index.js +16 -0
- package/dist/middleware/rate-limit/index.js.map +1 -0
- package/dist/middleware/rate-limit/rate-limit.d.ts +14 -0
- package/dist/middleware/rate-limit/rate-limit.d.ts.map +1 -0
- package/dist/middleware/rate-limit/rate-limit.js +84 -0
- package/dist/middleware/rate-limit/rate-limit.js.map +1 -0
- package/dist/middleware/rate-limit/types.d.ts +97 -0
- package/dist/middleware/rate-limit/types.d.ts.map +1 -0
- package/dist/middleware/rate-limit/types.js +5 -0
- package/dist/middleware/rate-limit/types.js.map +1 -0
- package/dist/middleware/retry/index.d.ts +6 -0
- package/dist/middleware/retry/index.d.ts.map +1 -0
- package/dist/middleware/retry/index.js +6 -0
- package/dist/middleware/retry/index.js.map +1 -0
- package/dist/middleware/retry/retry.d.ts +39 -0
- package/dist/middleware/retry/retry.d.ts.map +1 -0
- package/dist/middleware/retry/retry.js +141 -0
- package/dist/middleware/retry/retry.js.map +1 -0
- package/dist/middleware/retry/types.d.ts +61 -0
- package/dist/middleware/retry/types.d.ts.map +1 -0
- package/dist/middleware/retry/types.js +5 -0
- package/dist/middleware/retry/types.js.map +1 -0
- package/package.json +43 -9
- package/dist/client.d.ts +0 -111
- package/dist/client.js +0 -140
- package/dist/client.js.map +0 -1
- package/dist/csrf.d.ts +0 -32
- package/dist/csrf.js +0 -53
- package/dist/csrf.js.map +0 -1
- package/dist/errors.js.map +0 -1
- package/dist/test-utils.d.ts +0 -24
- package/dist/test-utils.js +0 -52
- package/dist/test-utils.js.map +0 -1
- package/dist/unauthorized.d.ts +0 -27
- package/dist/unauthorized.js +0 -41
- package/dist/unauthorized.js.map +0 -1
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @fileoverview Custom error classes
|
|
2
|
+
* @fileoverview Custom error classes - "Pit of Success" pattern.
|
|
3
|
+
*
|
|
4
|
+
* 🎯 LEVEL 1: HttpError, NetworkError - Most common error types you'll catch
|
|
5
|
+
* 🎯 LEVEL 2: FetchError - Base error class for advanced error handling
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* try {
|
|
10
|
+
* await client.get('/api/data');
|
|
11
|
+
* } catch (error) {
|
|
12
|
+
* if (error instanceof HttpError) {
|
|
13
|
+
* console.log(`HTTP ${error.status}: ${error.statusText}`);
|
|
14
|
+
* } else if (error instanceof NetworkError) {
|
|
15
|
+
* console.log('Network connection failed');
|
|
16
|
+
* }
|
|
17
|
+
* }
|
|
18
|
+
* ```
|
|
3
19
|
*/
|
|
4
20
|
/**
|
|
5
21
|
* Base error class for all fetch client errors.
|
|
@@ -23,7 +39,7 @@ export declare class HttpError extends FetchError {
|
|
|
23
39
|
/** The HTTP status text */
|
|
24
40
|
readonly statusText: string;
|
|
25
41
|
/** The response body (if available) */
|
|
26
|
-
readonly body:
|
|
42
|
+
readonly body: unknown;
|
|
27
43
|
/**
|
|
28
44
|
* Creates a new HttpError.
|
|
29
45
|
* @param status - HTTP status code
|
|
@@ -31,7 +47,7 @@ export declare class HttpError extends FetchError {
|
|
|
31
47
|
* @param body - Response body
|
|
32
48
|
* @param url - The request URL
|
|
33
49
|
*/
|
|
34
|
-
constructor(status: number, statusText: string, body:
|
|
50
|
+
constructor(status: number, statusText: string, body: unknown, url: string);
|
|
35
51
|
}
|
|
36
52
|
/**
|
|
37
53
|
* Error thrown when a network request fails completely.
|
|
@@ -45,3 +61,4 @@ export declare class NetworkError extends FetchError {
|
|
|
45
61
|
*/
|
|
46
62
|
constructor(message: string, url: string, cause?: Error);
|
|
47
63
|
}
|
|
64
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/errors/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH;;GAEG;AACH,qBAAa,UAAW,SAAQ,KAAK;IACnC,gCAAgC;IAChC,SAAgB,KAAK,CAAC,EAAE,KAAK,CAAC;IAE9B;;;;OAIG;gBACS,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAO3C;AAID;;GAEG;AACH,qBAAa,SAAU,SAAQ,UAAU;IACvC,2BAA2B;IAC3B,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,2BAA2B;IAC3B,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,uCAAuC;IACvC,SAAgB,IAAI,EAAE,OAAO,CAAC;IAE9B;;;;;;OAMG;gBACS,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM;CAO3E;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,UAAU;IAC1C;;;;;OAKG;gBACS,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAIxD"}
|
|
@@ -1,9 +1,26 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* @fileoverview Custom error classes
|
|
3
|
+
* @fileoverview Custom error classes - "Pit of Success" pattern.
|
|
4
|
+
*
|
|
5
|
+
* 🎯 LEVEL 1: HttpError, NetworkError - Most common error types you'll catch
|
|
6
|
+
* 🎯 LEVEL 2: FetchError - Base error class for advanced error handling
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* try {
|
|
11
|
+
* await client.get('/api/data');
|
|
12
|
+
* } catch (error) {
|
|
13
|
+
* if (error instanceof HttpError) {
|
|
14
|
+
* console.log(`HTTP ${error.status}: ${error.statusText}`);
|
|
15
|
+
* } else if (error instanceof NetworkError) {
|
|
16
|
+
* console.log('Network connection failed');
|
|
17
|
+
* }
|
|
18
|
+
* }
|
|
19
|
+
* ```
|
|
4
20
|
*/
|
|
5
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
22
|
exports.NetworkError = exports.HttpError = exports.FetchError = void 0;
|
|
23
|
+
// 🎯 LEVEL 2: Base error class (for advanced use cases)
|
|
7
24
|
/**
|
|
8
25
|
* Base error class for all fetch client errors.
|
|
9
26
|
*/
|
|
@@ -16,10 +33,13 @@ class FetchError extends Error {
|
|
|
16
33
|
constructor(message, cause) {
|
|
17
34
|
super(message);
|
|
18
35
|
this.name = 'FetchError';
|
|
19
|
-
|
|
36
|
+
if (cause !== undefined) {
|
|
37
|
+
this.cause = cause;
|
|
38
|
+
}
|
|
20
39
|
}
|
|
21
40
|
}
|
|
22
41
|
exports.FetchError = FetchError;
|
|
42
|
+
// 🎯 LEVEL 1: Most commonly used error types
|
|
23
43
|
/**
|
|
24
44
|
* Error thrown when an HTTP request fails with a non-2xx status code.
|
|
25
45
|
*/
|
|
@@ -56,4 +76,4 @@ class NetworkError extends FetchError {
|
|
|
56
76
|
}
|
|
57
77
|
}
|
|
58
78
|
exports.NetworkError = NetworkError;
|
|
59
|
-
//# sourceMappingURL=
|
|
79
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/errors/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;;;AAEH,wDAAwD;AAExD;;GAEG;AACH,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,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,CAAC;IACH,CAAC;CACF;AAhBD,gCAgBC;AAED,6CAA6C;AAE7C;;GAEG;AACH,MAAa,SAAU,SAAQ,UAAU;IAQvC;;;;;;OAMG;IACH,YAAY,MAAc,EAAE,UAAkB,EAAE,IAAa,EAAE,GAAW;QACxE,KAAK,CAAC,QAAQ,MAAM,IAAI,UAAU,OAAO,GAAG,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Main library entry point with "pit of success" architecture.
|
|
3
|
+
*
|
|
4
|
+
* This module exports everything users need in order of discoverability:
|
|
5
|
+
* 1. Pre-configured client with smart defaults (80% of users start here)
|
|
6
|
+
* 2. FetchClient for custom configurations
|
|
7
|
+
* 3. Individual middleware functions for specific needs
|
|
8
|
+
* 4. Pre-built middleware stacks for common scenarios
|
|
9
|
+
* 5. Types for TypeScript users
|
|
10
|
+
*/
|
|
11
|
+
import { FetchClient } from './client/fetch-client';
|
|
12
|
+
/**
|
|
13
|
+
* 🎯 PIT OF SUCCESS: Pre-configured fetch client (Level 1 - 80% of users)
|
|
14
|
+
*
|
|
15
|
+
* This client is ready to use out of the box with production-ready middleware:
|
|
16
|
+
* - Authentication support (configure your token provider)
|
|
17
|
+
* - Automatic retries with exponential backoff
|
|
18
|
+
* - Response caching for GET requests
|
|
19
|
+
* - Request/response logging
|
|
20
|
+
* - Rate limiting protection
|
|
21
|
+
* - Same-origin credentials for session-based auth (cookies)
|
|
22
|
+
*
|
|
23
|
+
* @example Just import and use:
|
|
24
|
+
* ```typescript
|
|
25
|
+
* import api from '@fgrzl/fetch';
|
|
26
|
+
*
|
|
27
|
+
* // Works immediately - no setup required!
|
|
28
|
+
* const users = await api.get('/api/users');
|
|
29
|
+
* const newUser = await api.post('/api/users', { name: 'John' });
|
|
30
|
+
*
|
|
31
|
+
* // With query parameters
|
|
32
|
+
* const activeUsers = await api.get('/api/users', { status: 'active', limit: 10 });
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* @example Configure authentication:
|
|
36
|
+
* ```typescript
|
|
37
|
+
* import api from '@fgrzl/fetch';
|
|
38
|
+
* import { useAuthentication } from '@fgrzl/fetch/middleware';
|
|
39
|
+
*
|
|
40
|
+
* const authClient = useAuthentication(api, {
|
|
41
|
+
* tokenProvider: () => localStorage.getItem('auth-token') || ''
|
|
42
|
+
* });
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
45
|
+
* @example For token-only auth (no cookies):
|
|
46
|
+
* ```typescript
|
|
47
|
+
* import { FetchClient, useAuthentication } from '@fgrzl/fetch';
|
|
48
|
+
*
|
|
49
|
+
* const tokenClient = useAuthentication(new FetchClient({
|
|
50
|
+
* credentials: 'omit' // Don't send cookies
|
|
51
|
+
* }), {
|
|
52
|
+
* tokenProvider: () => getJWTToken()
|
|
53
|
+
* });
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
declare const api: FetchClient;
|
|
57
|
+
export default api;
|
|
58
|
+
export { FetchClient } from './client/fetch-client';
|
|
59
|
+
export { FetchError, HttpError, NetworkError } from './errors';
|
|
60
|
+
export { useAuthentication, createAuthenticationMiddleware, useAuthorization, createAuthorizationMiddleware, useCache, createCacheMiddleware, useCSRF, useLogging, createLoggingMiddleware, useRateLimit, createRateLimitMiddleware, useRetry, createRetryMiddleware, } from './middleware';
|
|
61
|
+
export { useProductionStack, useDevelopmentStack, useBasicStack, } from './middleware';
|
|
62
|
+
export type { FetchMiddleware as InterceptMiddleware } from './client/fetch-client';
|
|
63
|
+
export type { FetchResponse, FetchClientOptions } from './client/types';
|
|
64
|
+
export type { AuthenticationOptions, AuthTokenProvider, AuthorizationOptions, UnauthorizedHandler, CacheOptions, CacheStorage, CacheEntry, CacheKeyGenerator, LoggingOptions, Logger, LogLevel, RateLimitOptions, RateLimitAlgorithm, RetryOptions, } from './middleware';
|
|
65
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGpD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,QAAA,MAAM,GAAG,aAwBR,CAAC;AAGF,eAAe,GAAG,CAAC;AAGnB,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG/D,OAAO,EAEL,iBAAiB,EACjB,8BAA8B,EAE9B,gBAAgB,EAChB,6BAA6B,EAE7B,QAAQ,EACR,qBAAqB,EAErB,OAAO,EAEP,UAAU,EACV,uBAAuB,EAEvB,YAAY,EACZ,yBAAyB,EAEzB,QAAQ,EACR,qBAAqB,GACtB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,GACd,MAAM,cAAc,CAAC;AAGtB,YAAY,EAAE,eAAe,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACpF,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAGxE,YAAY,EAEV,qBAAqB,EACrB,iBAAiB,EAEjB,oBAAoB,EACpB,mBAAmB,EAEnB,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,iBAAiB,EAEjB,cAAc,EACd,MAAM,EACN,QAAQ,EAER,gBAAgB,EAChB,kBAAkB,EAElB,YAAY,GACb,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Main library entry point with "pit of success" architecture.
|
|
4
|
+
*
|
|
5
|
+
* This module exports everything users need in order of discoverability:
|
|
6
|
+
* 1. Pre-configured client with smart defaults (80% of users start here)
|
|
7
|
+
* 2. FetchClient for custom configurations
|
|
8
|
+
* 3. Individual middleware functions for specific needs
|
|
9
|
+
* 4. Pre-built middleware stacks for common scenarios
|
|
10
|
+
* 5. Types for TypeScript users
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.useBasicStack = exports.useDevelopmentStack = exports.useProductionStack = exports.createRetryMiddleware = exports.useRetry = exports.createRateLimitMiddleware = exports.useRateLimit = exports.createLoggingMiddleware = exports.useLogging = exports.useCSRF = exports.createCacheMiddleware = exports.useCache = exports.createAuthorizationMiddleware = exports.useAuthorization = exports.createAuthenticationMiddleware = exports.useAuthentication = exports.NetworkError = exports.HttpError = exports.FetchError = exports.FetchClient = void 0;
|
|
14
|
+
const fetch_client_1 = require("./client/fetch-client");
|
|
15
|
+
const middleware_1 = require("./middleware");
|
|
16
|
+
/**
|
|
17
|
+
* 🎯 PIT OF SUCCESS: Pre-configured fetch client (Level 1 - 80% of users)
|
|
18
|
+
*
|
|
19
|
+
* This client is ready to use out of the box with production-ready middleware:
|
|
20
|
+
* - Authentication support (configure your token provider)
|
|
21
|
+
* - Automatic retries with exponential backoff
|
|
22
|
+
* - Response caching for GET requests
|
|
23
|
+
* - Request/response logging
|
|
24
|
+
* - Rate limiting protection
|
|
25
|
+
* - Same-origin credentials for session-based auth (cookies)
|
|
26
|
+
*
|
|
27
|
+
* @example Just import and use:
|
|
28
|
+
* ```typescript
|
|
29
|
+
* import api from '@fgrzl/fetch';
|
|
30
|
+
*
|
|
31
|
+
* // Works immediately - no setup required!
|
|
32
|
+
* const users = await api.get('/api/users');
|
|
33
|
+
* const newUser = await api.post('/api/users', { name: 'John' });
|
|
34
|
+
*
|
|
35
|
+
* // With query parameters
|
|
36
|
+
* const activeUsers = await api.get('/api/users', { status: 'active', limit: 10 });
|
|
37
|
+
* ```
|
|
38
|
+
*
|
|
39
|
+
* @example Configure authentication:
|
|
40
|
+
* ```typescript
|
|
41
|
+
* import api from '@fgrzl/fetch';
|
|
42
|
+
* import { useAuthentication } from '@fgrzl/fetch/middleware';
|
|
43
|
+
*
|
|
44
|
+
* const authClient = useAuthentication(api, {
|
|
45
|
+
* tokenProvider: () => localStorage.getItem('auth-token') || ''
|
|
46
|
+
* });
|
|
47
|
+
* ```
|
|
48
|
+
*
|
|
49
|
+
* @example For token-only auth (no cookies):
|
|
50
|
+
* ```typescript
|
|
51
|
+
* import { FetchClient, useAuthentication } from '@fgrzl/fetch';
|
|
52
|
+
*
|
|
53
|
+
* const tokenClient = useAuthentication(new FetchClient({
|
|
54
|
+
* credentials: 'omit' // Don't send cookies
|
|
55
|
+
* }), {
|
|
56
|
+
* tokenProvider: () => getJWTToken()
|
|
57
|
+
* });
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
const api = (0, middleware_1.useProductionStack)(new fetch_client_1.FetchClient({
|
|
61
|
+
// Smart default: include cookies for session-based auth
|
|
62
|
+
// Can be overridden by creating a custom FetchClient
|
|
63
|
+
credentials: 'same-origin',
|
|
64
|
+
}), {
|
|
65
|
+
// Smart defaults - users can override as needed
|
|
66
|
+
retry: {
|
|
67
|
+
maxRetries: 2,
|
|
68
|
+
delay: 1000,
|
|
69
|
+
},
|
|
70
|
+
cache: {
|
|
71
|
+
ttl: 5 * 60 * 1000, // 5 minutes
|
|
72
|
+
methods: ['GET'],
|
|
73
|
+
},
|
|
74
|
+
logging: {
|
|
75
|
+
level: 'info',
|
|
76
|
+
},
|
|
77
|
+
rateLimit: {
|
|
78
|
+
maxRequests: 100,
|
|
79
|
+
windowMs: 60 * 1000, // 100 requests per minute
|
|
80
|
+
},
|
|
81
|
+
});
|
|
82
|
+
// 🎯 LEVEL 1: Export the production-ready client as default
|
|
83
|
+
exports.default = api;
|
|
84
|
+
// 🎯 LEVEL 2: FetchClient for custom configurations
|
|
85
|
+
var fetch_client_2 = require("./client/fetch-client");
|
|
86
|
+
Object.defineProperty(exports, "FetchClient", { enumerable: true, get: function () { return fetch_client_2.FetchClient; } });
|
|
87
|
+
var errors_1 = require("./errors");
|
|
88
|
+
Object.defineProperty(exports, "FetchError", { enumerable: true, get: function () { return errors_1.FetchError; } });
|
|
89
|
+
Object.defineProperty(exports, "HttpError", { enumerable: true, get: function () { return errors_1.HttpError; } });
|
|
90
|
+
Object.defineProperty(exports, "NetworkError", { enumerable: true, get: function () { return errors_1.NetworkError; } });
|
|
91
|
+
// 🎯 LEVEL 3: Individual middleware functions (import from our comprehensive middleware index)
|
|
92
|
+
var middleware_2 = require("./middleware");
|
|
93
|
+
// Authentication
|
|
94
|
+
Object.defineProperty(exports, "useAuthentication", { enumerable: true, get: function () { return middleware_2.useAuthentication; } });
|
|
95
|
+
Object.defineProperty(exports, "createAuthenticationMiddleware", { enumerable: true, get: function () { return middleware_2.createAuthenticationMiddleware; } });
|
|
96
|
+
// Authorization
|
|
97
|
+
Object.defineProperty(exports, "useAuthorization", { enumerable: true, get: function () { return middleware_2.useAuthorization; } });
|
|
98
|
+
Object.defineProperty(exports, "createAuthorizationMiddleware", { enumerable: true, get: function () { return middleware_2.createAuthorizationMiddleware; } });
|
|
99
|
+
// Cache
|
|
100
|
+
Object.defineProperty(exports, "useCache", { enumerable: true, get: function () { return middleware_2.useCache; } });
|
|
101
|
+
Object.defineProperty(exports, "createCacheMiddleware", { enumerable: true, get: function () { return middleware_2.createCacheMiddleware; } });
|
|
102
|
+
// CSRF
|
|
103
|
+
Object.defineProperty(exports, "useCSRF", { enumerable: true, get: function () { return middleware_2.useCSRF; } });
|
|
104
|
+
// Logging
|
|
105
|
+
Object.defineProperty(exports, "useLogging", { enumerable: true, get: function () { return middleware_2.useLogging; } });
|
|
106
|
+
Object.defineProperty(exports, "createLoggingMiddleware", { enumerable: true, get: function () { return middleware_2.createLoggingMiddleware; } });
|
|
107
|
+
// Rate Limiting
|
|
108
|
+
Object.defineProperty(exports, "useRateLimit", { enumerable: true, get: function () { return middleware_2.useRateLimit; } });
|
|
109
|
+
Object.defineProperty(exports, "createRateLimitMiddleware", { enumerable: true, get: function () { return middleware_2.createRateLimitMiddleware; } });
|
|
110
|
+
// Retry
|
|
111
|
+
Object.defineProperty(exports, "useRetry", { enumerable: true, get: function () { return middleware_2.useRetry; } });
|
|
112
|
+
Object.defineProperty(exports, "createRetryMiddleware", { enumerable: true, get: function () { return middleware_2.createRetryMiddleware; } });
|
|
113
|
+
// 🎯 LEVEL 4: Pre-built middleware stacks for common scenarios
|
|
114
|
+
var middleware_3 = require("./middleware");
|
|
115
|
+
Object.defineProperty(exports, "useProductionStack", { enumerable: true, get: function () { return middleware_3.useProductionStack; } });
|
|
116
|
+
Object.defineProperty(exports, "useDevelopmentStack", { enumerable: true, get: function () { return middleware_3.useDevelopmentStack; } });
|
|
117
|
+
Object.defineProperty(exports, "useBasicStack", { enumerable: true, get: function () { return middleware_3.useBasicStack; } });
|
|
118
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AAEH,wDAAoD;AACpD,6CAAkD;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,MAAM,GAAG,GAAG,IAAA,+BAAkB,EAC5B,IAAI,0BAAW,CAAC;IACd,wDAAwD;IACxD,qDAAqD;IACrD,WAAW,EAAE,aAAa;CAC3B,CAAC,EACF;IACE,gDAAgD;IAChD,KAAK,EAAE;QACL,UAAU,EAAE,CAAC;QACb,KAAK,EAAE,IAAI;KACZ;IACD,KAAK,EAAE;QACL,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,YAAY;QAChC,OAAO,EAAE,CAAC,KAAK,CAAC;KACjB;IACD,OAAO,EAAE;QACP,KAAK,EAAE,MAAM;KACd;IACD,SAAS,EAAE;QACT,WAAW,EAAE,GAAG;QAChB,QAAQ,EAAE,EAAE,GAAG,IAAI,EAAE,0BAA0B;KAChD;CACF,CACF,CAAC;AAEF,4DAA4D;AAC5D,kBAAe,GAAG,CAAC;AAEnB,oDAAoD;AACpD,sDAAoD;AAA3C,2GAAA,WAAW,OAAA;AACpB,mCAA+D;AAAtD,oGAAA,UAAU,OAAA;AAAE,mGAAA,SAAS,OAAA;AAAE,sGAAA,YAAY,OAAA;AAE5C,+FAA+F;AAC/F,2CAqBsB;AApBpB,iBAAiB;AACjB,+GAAA,iBAAiB,OAAA;AACjB,4HAAA,8BAA8B,OAAA;AAC9B,gBAAgB;AAChB,8GAAA,gBAAgB,OAAA;AAChB,2HAAA,6BAA6B,OAAA;AAC7B,QAAQ;AACR,sGAAA,QAAQ,OAAA;AACR,mHAAA,qBAAqB,OAAA;AACrB,OAAO;AACP,qGAAA,OAAO,OAAA;AACP,UAAU;AACV,wGAAA,UAAU,OAAA;AACV,qHAAA,uBAAuB,OAAA;AACvB,gBAAgB;AAChB,0GAAA,YAAY,OAAA;AACZ,uHAAA,yBAAyB,OAAA;AACzB,QAAQ;AACR,sGAAA,QAAQ,OAAA;AACR,mHAAA,qBAAqB,OAAA;AAGvB,+DAA+D;AAC/D,2CAIsB;AAHpB,gHAAA,kBAAkB,OAAA;AAClB,iHAAA,mBAAmB,OAAA;AACnB,2GAAA,aAAa,OAAA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Authentication middleware implementation.
|
|
3
|
+
*/
|
|
4
|
+
import type { FetchMiddleware } from '../../client/fetch-client';
|
|
5
|
+
import type { AuthenticationOptions } from './types';
|
|
6
|
+
/**
|
|
7
|
+
* Creates authentication middleware with smart defaults.
|
|
8
|
+
* Automatically adds Bearer tokens to requests.
|
|
9
|
+
*
|
|
10
|
+
* @param options - Authentication configuration options
|
|
11
|
+
* @returns Authentication middleware for use with FetchClient
|
|
12
|
+
*
|
|
13
|
+
* @example Basic usage:
|
|
14
|
+
* ```typescript
|
|
15
|
+
* const authClient = useAuthentication(client, {
|
|
16
|
+
* tokenProvider: () => localStorage.getItem('token') || ''
|
|
17
|
+
* });
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* @example Async token provider:
|
|
21
|
+
* ```typescript
|
|
22
|
+
* const authClient = useAuthentication(client, {
|
|
23
|
+
* tokenProvider: async () => {
|
|
24
|
+
* const token = await getAuthToken();
|
|
25
|
+
* return token || '';
|
|
26
|
+
* }
|
|
27
|
+
* });
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export declare function createAuthenticationMiddleware(options: AuthenticationOptions): FetchMiddleware;
|
|
31
|
+
//# sourceMappingURL=authentication.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authentication.d.ts","sourceRoot":"","sources":["../../../../src/middleware/authentication/authentication.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAoCrD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,qBAAqB,GAC7B,eAAe,CAkDjB"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Authentication middleware implementation.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createAuthenticationMiddleware = createAuthenticationMiddleware;
|
|
7
|
+
/**
|
|
8
|
+
* Checks if a URL should skip authentication based on configured patterns.
|
|
9
|
+
*/
|
|
10
|
+
function shouldSkipAuth(url, skipPatterns = []) {
|
|
11
|
+
return skipPatterns.some((pattern) => {
|
|
12
|
+
if (typeof pattern === 'string') {
|
|
13
|
+
return url.includes(pattern);
|
|
14
|
+
}
|
|
15
|
+
return pattern.test(url);
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Checks if a URL should include authentication based on configured patterns.
|
|
20
|
+
*/
|
|
21
|
+
function shouldIncludeAuth(url, includePatterns) {
|
|
22
|
+
if (!includePatterns || includePatterns.length === 0) {
|
|
23
|
+
return true; // Include by default if no patterns specified
|
|
24
|
+
}
|
|
25
|
+
return includePatterns.some((pattern) => {
|
|
26
|
+
if (typeof pattern === 'string') {
|
|
27
|
+
return url.includes(pattern);
|
|
28
|
+
}
|
|
29
|
+
return pattern.test(url);
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Creates authentication middleware with smart defaults.
|
|
34
|
+
* Automatically adds Bearer tokens to requests.
|
|
35
|
+
*
|
|
36
|
+
* @param options - Authentication configuration options
|
|
37
|
+
* @returns Authentication middleware for use with FetchClient
|
|
38
|
+
*
|
|
39
|
+
* @example Basic usage:
|
|
40
|
+
* ```typescript
|
|
41
|
+
* const authClient = useAuthentication(client, {
|
|
42
|
+
* tokenProvider: () => localStorage.getItem('token') || ''
|
|
43
|
+
* });
|
|
44
|
+
* ```
|
|
45
|
+
*
|
|
46
|
+
* @example Async token provider:
|
|
47
|
+
* ```typescript
|
|
48
|
+
* const authClient = useAuthentication(client, {
|
|
49
|
+
* tokenProvider: async () => {
|
|
50
|
+
* const token = await getAuthToken();
|
|
51
|
+
* return token || '';
|
|
52
|
+
* }
|
|
53
|
+
* });
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
function createAuthenticationMiddleware(options) {
|
|
57
|
+
const { tokenProvider, headerName = 'Authorization', tokenType = 'Bearer', skipPatterns = [], includePatterns, } = options;
|
|
58
|
+
return async (request, next) => {
|
|
59
|
+
const url = request.url || '';
|
|
60
|
+
const parsedUrl = new URL(url);
|
|
61
|
+
const pathname = parsedUrl.pathname;
|
|
62
|
+
// Skip authentication if:
|
|
63
|
+
// 1. URL matches a skip pattern
|
|
64
|
+
// 2. URL doesn't match include patterns (if specified)
|
|
65
|
+
if (shouldSkipAuth(pathname, skipPatterns) ||
|
|
66
|
+
!shouldIncludeAuth(pathname, includePatterns)) {
|
|
67
|
+
return next(request);
|
|
68
|
+
}
|
|
69
|
+
try {
|
|
70
|
+
// Get auth token (may be async)
|
|
71
|
+
const token = await tokenProvider();
|
|
72
|
+
// Skip if no token available
|
|
73
|
+
if (!token) {
|
|
74
|
+
return next(request);
|
|
75
|
+
}
|
|
76
|
+
// Add auth header to request
|
|
77
|
+
const headers = new Headers(request.headers);
|
|
78
|
+
headers.set(headerName, `${tokenType} ${token}`);
|
|
79
|
+
// Create modified request with auth header
|
|
80
|
+
const modifiedRequest = {
|
|
81
|
+
...request,
|
|
82
|
+
headers,
|
|
83
|
+
};
|
|
84
|
+
return next(modifiedRequest);
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
// If token provider fails, proceed without auth
|
|
88
|
+
// This ensures network requests don't fail due to auth issues
|
|
89
|
+
return next(request);
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=authentication.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authentication.js","sourceRoot":"","sources":["../../../../src/middleware/authentication/authentication.ts"],"names":[],"mappings":";AAAA;;GAEG;;AA+DH,wEAoDC;AA9GD;;GAEG;AACH,SAAS,cAAc,CACrB,GAAW,EACX,eAAoC,EAAE;IAEtC,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;QACnC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CACxB,GAAW,EACX,eAAqC;IAErC,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrD,OAAO,IAAI,CAAC,CAAC,8CAA8C;IAC7D,CAAC;IAED,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;QACtC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,SAAgB,8BAA8B,CAC5C,OAA8B;IAE9B,MAAM,EACJ,aAAa,EACb,UAAU,GAAG,eAAe,EAC5B,SAAS,GAAG,QAAQ,EACpB,YAAY,GAAG,EAAE,EACjB,eAAe,GAChB,GAAG,OAAO,CAAC;IAEZ,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC7B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QAEpC,0BAA0B;QAC1B,gCAAgC;QAChC,uDAAuD;QACvD,IACE,cAAc,CAAC,QAAQ,EAAE,YAAY,CAAC;YACtC,CAAC,iBAAiB,CAAC,QAAQ,EAAE,eAAe,CAAC,EAC7C,CAAC;YACD,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;QAED,IAAI,CAAC;YACH,gCAAgC;YAChC,MAAM,KAAK,GAAG,MAAM,aAAa,EAAE,CAAC;YAEpC,6BAA6B;YAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;YACvB,CAAC;YAED,6BAA6B;YAC7B,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,SAAS,IAAI,KAAK,EAAE,CAAC,CAAC;YAEjD,2CAA2C;YAC3C,MAAM,eAAe,GAAG;gBACtB,GAAG,OAAO;gBACV,OAAO;aACR,CAAC;YAEF,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,gDAAgD;YAChD,8DAA8D;YAC9D,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Authentication middleware - "pit of success" API.
|
|
3
|
+
*/
|
|
4
|
+
import type { FetchClient } from '../../client/fetch-client';
|
|
5
|
+
import type { AuthenticationOptions } from './types';
|
|
6
|
+
export type { AuthenticationOptions, AuthTokenProvider } from './types';
|
|
7
|
+
export { createAuthenticationMiddleware } from './authentication';
|
|
8
|
+
/**
|
|
9
|
+
* "Pit of success" API for adding authentication to a FetchClient.
|
|
10
|
+
* Automatically adds Bearer tokens to requests.
|
|
11
|
+
*
|
|
12
|
+
* @param client - The FetchClient to add authentication to
|
|
13
|
+
* @param options - Authentication configuration
|
|
14
|
+
* @returns A new FetchClient with authentication middleware
|
|
15
|
+
*
|
|
16
|
+
* @example Basic token from localStorage:
|
|
17
|
+
* ```typescript
|
|
18
|
+
* const authClient = useAuthentication(client, {
|
|
19
|
+
* tokenProvider: () => localStorage.getItem('auth-token') || ''
|
|
20
|
+
* });
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* @example Async token with refresh:
|
|
24
|
+
* ```typescript
|
|
25
|
+
* const authClient = useAuthentication(client, {
|
|
26
|
+
* tokenProvider: async () => {
|
|
27
|
+
* let token = localStorage.getItem('auth-token');
|
|
28
|
+
* if (!token || isExpired(token)) {
|
|
29
|
+
* token = await refreshToken();
|
|
30
|
+
* }
|
|
31
|
+
* return token || '';
|
|
32
|
+
* }
|
|
33
|
+
* });
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare function useAuthentication(client: FetchClient, options: AuthenticationOptions): FetchClient;
|
|
37
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/middleware/authentication/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAIrD,YAAY,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AACxE,OAAO,EAAE,8BAA8B,EAAE,MAAM,kBAAkB,CAAC;AAElE;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,qBAAqB,GAC7B,WAAW,CAEb"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Authentication middleware - "pit of success" API.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createAuthenticationMiddleware = void 0;
|
|
7
|
+
exports.useAuthentication = useAuthentication;
|
|
8
|
+
const authentication_1 = require("./authentication");
|
|
9
|
+
var authentication_2 = require("./authentication");
|
|
10
|
+
Object.defineProperty(exports, "createAuthenticationMiddleware", { enumerable: true, get: function () { return authentication_2.createAuthenticationMiddleware; } });
|
|
11
|
+
/**
|
|
12
|
+
* "Pit of success" API for adding authentication to a FetchClient.
|
|
13
|
+
* Automatically adds Bearer tokens to requests.
|
|
14
|
+
*
|
|
15
|
+
* @param client - The FetchClient to add authentication to
|
|
16
|
+
* @param options - Authentication configuration
|
|
17
|
+
* @returns A new FetchClient with authentication middleware
|
|
18
|
+
*
|
|
19
|
+
* @example Basic token from localStorage:
|
|
20
|
+
* ```typescript
|
|
21
|
+
* const authClient = useAuthentication(client, {
|
|
22
|
+
* tokenProvider: () => localStorage.getItem('auth-token') || ''
|
|
23
|
+
* });
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* @example Async token with refresh:
|
|
27
|
+
* ```typescript
|
|
28
|
+
* const authClient = useAuthentication(client, {
|
|
29
|
+
* tokenProvider: async () => {
|
|
30
|
+
* let token = localStorage.getItem('auth-token');
|
|
31
|
+
* if (!token || isExpired(token)) {
|
|
32
|
+
* token = await refreshToken();
|
|
33
|
+
* }
|
|
34
|
+
* return token || '';
|
|
35
|
+
* }
|
|
36
|
+
* });
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
function useAuthentication(client, options) {
|
|
40
|
+
return client.use((0, authentication_1.createAuthenticationMiddleware)(options));
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/middleware/authentication/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAsCH,8CAKC;AAvCD,qDAAkE;AAIlE,mDAAkE;AAAzD,gIAAA,8BAA8B,OAAA;AAEvC;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,SAAgB,iBAAiB,CAC/B,MAAmB,EACnB,OAA8B;IAE9B,OAAO,MAAM,CAAC,GAAG,CAAC,IAAA,+CAA8B,EAAC,OAAO,CAAC,CAAC,CAAC;AAC7D,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Authentication middleware types and configuration.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Authentication token provider function.
|
|
6
|
+
* Should return the current auth token or empty string if not available.
|
|
7
|
+
*/
|
|
8
|
+
export type AuthTokenProvider = () => string | Promise<string>;
|
|
9
|
+
/**
|
|
10
|
+
* Authentication configuration options - optimized for "pit of success".
|
|
11
|
+
*
|
|
12
|
+
* Smart defaults:
|
|
13
|
+
* - Uses standard Authorization header with Bearer token
|
|
14
|
+
* - Applies to all requests by default
|
|
15
|
+
* - Graceful handling when token is unavailable
|
|
16
|
+
*/
|
|
17
|
+
export interface AuthenticationOptions {
|
|
18
|
+
/**
|
|
19
|
+
* Function to get the current authentication token.
|
|
20
|
+
* Can be synchronous or asynchronous.
|
|
21
|
+
*
|
|
22
|
+
* @returns The auth token or empty string if not available
|
|
23
|
+
*
|
|
24
|
+
* @example Token from localStorage:
|
|
25
|
+
* ```typescript
|
|
26
|
+
* const getToken = () => localStorage.getItem('auth-token') || '';
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* @example Async token refresh:
|
|
30
|
+
* ```typescript
|
|
31
|
+
* const getToken = async () => {
|
|
32
|
+
* const token = localStorage.getItem('auth-token');
|
|
33
|
+
* if (!token || isExpired(token)) {
|
|
34
|
+
* return await refreshToken();
|
|
35
|
+
* }
|
|
36
|
+
* return token;
|
|
37
|
+
* };
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
tokenProvider: AuthTokenProvider;
|
|
41
|
+
/**
|
|
42
|
+
* Header name for the authentication token (default: 'Authorization')
|
|
43
|
+
* The token will be prefixed with the tokenType
|
|
44
|
+
*/
|
|
45
|
+
headerName?: string;
|
|
46
|
+
/**
|
|
47
|
+
* Token type prefix (default: 'Bearer')
|
|
48
|
+
* Common alternatives: 'Token', 'JWT', 'ApiKey'
|
|
49
|
+
*/
|
|
50
|
+
tokenType?: string;
|
|
51
|
+
/**
|
|
52
|
+
* Skip authentication for requests matching these URL patterns
|
|
53
|
+
* Useful for public endpoints that don't need auth
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```typescript
|
|
57
|
+
* skipPatterns: [/^\/public\//, '/health', '/login']
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
skipPatterns?: (RegExp | string)[];
|
|
61
|
+
/**
|
|
62
|
+
* Only apply authentication to requests matching these patterns
|
|
63
|
+
* If specified, only these patterns will get auth headers
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```typescript
|
|
67
|
+
* includePatterns: [/^\/api\//, '/graphql']
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
includePatterns?: (RegExp | string)[];
|
|
71
|
+
}
|
|
72
|
+
export {};
|
|
73
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/middleware/authentication/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAE/D;;;;;;;GAOG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,aAAa,EAAE,iBAAiB,CAAC;IAEjC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAEnC;;;;;;;;OAQG;IACH,eAAe,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;CACvC;AAGD,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/middleware/authentication/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Authorization middleware implementation.
|
|
3
|
+
*/
|
|
4
|
+
import type { FetchMiddleware } from '../../client/fetch-client';
|
|
5
|
+
import type { AuthorizationOptions } from './types';
|
|
6
|
+
/**
|
|
7
|
+
* Creates authorization middleware with smart defaults.
|
|
8
|
+
* Handles 401/403 responses by calling configured handlers.
|
|
9
|
+
*
|
|
10
|
+
* @param options - Authorization configuration options
|
|
11
|
+
* @returns Authorization middleware for use with FetchClient
|
|
12
|
+
*
|
|
13
|
+
* @example Basic redirect on 401:
|
|
14
|
+
* ```typescript
|
|
15
|
+
* const authzClient = useAuthorization(client, {
|
|
16
|
+
* onUnauthorized: () => window.location.href = '/login'
|
|
17
|
+
* });
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* @example Handle both 401 and 403:
|
|
21
|
+
* ```typescript
|
|
22
|
+
* const authzClient = useAuthorization(client, {
|
|
23
|
+
* onUnauthorized: () => redirectToLogin(),
|
|
24
|
+
* onForbidden: () => showAccessDeniedMessage(),
|
|
25
|
+
* statusCodes: [401, 403]
|
|
26
|
+
* });
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export declare function createAuthorizationMiddleware(options: AuthorizationOptions): FetchMiddleware;
|
|
30
|
+
//# sourceMappingURL=authorization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorization.d.ts","sourceRoot":"","sources":["../../../../src/middleware/authorization/authorization.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAyBpD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,oBAAoB,GAC5B,eAAe,CAuCjB"}
|