create-request 0.0.1-beta.22 → 0.0.1-beta.24
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 +366 -216
- package/dist/library/BaseRequest.d.ts +207 -51
- package/dist/library/BodyRequest.d.ts +25 -2
- package/dist/library/RequestError.d.ts +5 -2
- package/dist/library/ResponseWrapper.d.ts +17 -24
- package/dist/library/enums.d.ts +0 -11
- package/dist/library/index.cjs +2109 -0
- package/dist/library/index.cjs.map +1 -0
- package/dist/library/index.d.ts +2 -6
- package/dist/library/index.esm.js +2097 -1
- package/dist/library/index.esm.js.map +1 -1
- package/dist/library/index.esm.min.js +1 -0
- package/dist/library/index.esm.min.js.map +1 -0
- package/dist/library/index.min.cjs +1 -0
- package/dist/library/index.min.cjs.map +1 -0
- package/dist/library/requestFactories.d.ts +32 -30
- package/dist/library/requestMethods.d.ts +25 -18
- package/dist/library/types.d.ts +43 -4
- package/dist/library/utils/Config.d.ts +96 -0
- package/package.json +35 -12
- package/dist/library/index.js +0 -1
- package/dist/library/index.js.map +0 -1
- package/dist/library/types/cache.d.ts +0 -62
- package/dist/library/utils/CacheManager.d.ts +0 -82
- package/dist/library/utils/CacheStorage.d.ts +0 -49
- package/dist/library/utils/StorageProvider.d.ts +0 -33
|
@@ -6,79 +6,86 @@ import { HttpMethod } from "./enums.js";
|
|
|
6
6
|
* Used for retrieving data from an API endpoint.
|
|
7
7
|
*
|
|
8
8
|
* @example
|
|
9
|
-
* const request = new GetRequest()
|
|
10
|
-
* .withQueryParams({ id: '123' })
|
|
11
|
-
*
|
|
9
|
+
* const request = new GetRequest('/api/users')
|
|
10
|
+
* .withQueryParams({ id: '123' });
|
|
11
|
+
* const data = await request.getData();
|
|
12
12
|
*/
|
|
13
13
|
export declare class GetRequest extends BaseRequest {
|
|
14
14
|
protected method: HttpMethod;
|
|
15
|
+
constructor(url: string);
|
|
15
16
|
}
|
|
16
17
|
/**
|
|
17
18
|
* HTTP HEAD request implementation
|
|
18
19
|
* Similar to GET but returns only headers without a response body.
|
|
19
20
|
*
|
|
20
21
|
* @example
|
|
21
|
-
* const request = new HeadRequest()
|
|
22
|
-
*
|
|
22
|
+
* const request = new HeadRequest('/api/users/123');
|
|
23
|
+
* const response = await request.getResponse();
|
|
23
24
|
*/
|
|
24
25
|
export declare class HeadRequest extends BaseRequest {
|
|
25
26
|
protected method: HttpMethod;
|
|
27
|
+
constructor(url: string);
|
|
26
28
|
}
|
|
27
29
|
/**
|
|
28
30
|
* HTTP OPTIONS request implementation
|
|
29
31
|
* Used to describe the communication options for the target resource.
|
|
30
32
|
*
|
|
31
33
|
* @example
|
|
32
|
-
* const request = new OptionsRequest()
|
|
33
|
-
*
|
|
34
|
+
* const request = new OptionsRequest('/api/users');
|
|
35
|
+
* const response = await request.getResponse();
|
|
34
36
|
*/
|
|
35
37
|
export declare class OptionsRequest extends BaseRequest {
|
|
36
38
|
protected method: HttpMethod;
|
|
39
|
+
constructor(url: string);
|
|
37
40
|
}
|
|
38
41
|
/**
|
|
39
42
|
* HTTP DELETE request implementation
|
|
40
43
|
* Used to delete a resource on the server.
|
|
41
44
|
*
|
|
42
45
|
* @example
|
|
43
|
-
* const request = new DeleteRequest()
|
|
44
|
-
*
|
|
46
|
+
* const request = new DeleteRequest('/api/users/123');
|
|
47
|
+
* await request.getData();
|
|
45
48
|
*/
|
|
46
49
|
export declare class DeleteRequest extends BaseRequest {
|
|
47
50
|
protected method: HttpMethod;
|
|
51
|
+
constructor(url: string);
|
|
48
52
|
}
|
|
49
53
|
/**
|
|
50
54
|
* HTTP POST request implementation
|
|
51
55
|
* Used to create a new resource or submit data for processing.
|
|
52
56
|
*
|
|
53
57
|
* @example
|
|
54
|
-
* const request = new PostRequest()
|
|
55
|
-
* .withJson({ name: 'John', email: 'john@example.com' })
|
|
56
|
-
*
|
|
58
|
+
* const request = new PostRequest('/api/users')
|
|
59
|
+
* .withJson({ name: 'John', email: 'john@example.com' });
|
|
60
|
+
* const data = await request.getData();
|
|
57
61
|
*/
|
|
58
62
|
export declare class PostRequest extends BodyRequest {
|
|
59
63
|
protected method: HttpMethod;
|
|
64
|
+
constructor(url: string);
|
|
60
65
|
}
|
|
61
66
|
/**
|
|
62
67
|
* HTTP PUT request implementation
|
|
63
68
|
* Used to replace or update an existing resource.
|
|
64
69
|
*
|
|
65
70
|
* @example
|
|
66
|
-
* const request = new PutRequest()
|
|
67
|
-
* .withJson({ id: '123', name: 'John', email: 'john@example.com' })
|
|
68
|
-
*
|
|
71
|
+
* const request = new PutRequest('/api/users/123')
|
|
72
|
+
* .withJson({ id: '123', name: 'John', email: 'john@example.com' });
|
|
73
|
+
* const data = await request.getData();
|
|
69
74
|
*/
|
|
70
75
|
export declare class PutRequest extends BodyRequest {
|
|
71
76
|
protected method: HttpMethod;
|
|
77
|
+
constructor(url: string);
|
|
72
78
|
}
|
|
73
79
|
/**
|
|
74
80
|
* HTTP PATCH request implementation
|
|
75
81
|
* Used to apply partial modifications to a resource.
|
|
76
82
|
*
|
|
77
83
|
* @example
|
|
78
|
-
* const request = new PatchRequest()
|
|
79
|
-
* .withJson({ email: 'new.email@example.com' })
|
|
80
|
-
*
|
|
84
|
+
* const request = new PatchRequest('/api/users/123')
|
|
85
|
+
* .withJson({ email: 'new.email@example.com' });
|
|
86
|
+
* const data = await request.getData();
|
|
81
87
|
*/
|
|
82
88
|
export declare class PatchRequest extends BodyRequest {
|
|
83
89
|
protected method: HttpMethod;
|
|
90
|
+
constructor(url: string);
|
|
84
91
|
}
|
package/dist/library/types.d.ts
CHANGED
|
@@ -1,10 +1,49 @@
|
|
|
1
|
-
import { HttpMethod, RequestPriority, CredentialsPolicy, RequestMode, RedirectMode,
|
|
1
|
+
import { HttpMethod, RequestPriority, CredentialsPolicy, RequestMode, RedirectMode, SameSitePolicy } from "./enums";
|
|
2
2
|
import type { RequestError } from "./RequestError.js";
|
|
3
|
+
import type { ResponseWrapper } from "./ResponseWrapper.js";
|
|
3
4
|
export type Body = null | Blob | string | object | FormData | ArrayBuffer | URLSearchParams | ReadableStream;
|
|
4
5
|
export type RetryCallback = (options: {
|
|
5
6
|
attempt: number;
|
|
6
7
|
error: RequestError;
|
|
7
8
|
}) => void | Promise<void>;
|
|
9
|
+
/**
|
|
10
|
+
* Configuration object passed to request interceptors
|
|
11
|
+
* Contains all the information needed to make the request
|
|
12
|
+
*/
|
|
13
|
+
export interface RequestConfig {
|
|
14
|
+
url: string;
|
|
15
|
+
method: string;
|
|
16
|
+
headers: Record<string, string>;
|
|
17
|
+
body?: Body;
|
|
18
|
+
signal?: AbortSignal;
|
|
19
|
+
credentials?: RequestCredentials;
|
|
20
|
+
mode?: RequestMode | string;
|
|
21
|
+
redirect?: RedirectMode | string;
|
|
22
|
+
referrer?: string;
|
|
23
|
+
referrerPolicy?: ReferrerPolicy;
|
|
24
|
+
keepalive?: boolean;
|
|
25
|
+
priority?: RequestPriority | string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Request interceptor that can modify the request configuration or return an early response
|
|
29
|
+
* If it returns a Response, the request will be short-circuited and that response will be used
|
|
30
|
+
* @param config - The request configuration
|
|
31
|
+
* @returns Modified config, a Response to short-circuit, or a Promise of either
|
|
32
|
+
*/
|
|
33
|
+
export type RequestInterceptor = (config: RequestConfig) => RequestConfig | Response | Promise<RequestConfig | Response>;
|
|
34
|
+
/**
|
|
35
|
+
* Response interceptor that can transform the response
|
|
36
|
+
* @param response - The response wrapper
|
|
37
|
+
* @returns Modified response wrapper or a Promise of it
|
|
38
|
+
*/
|
|
39
|
+
export type ResponseInterceptor = (response: ResponseWrapper) => ResponseWrapper | Promise<ResponseWrapper>;
|
|
40
|
+
/**
|
|
41
|
+
* Error interceptor that can handle or transform errors
|
|
42
|
+
* Can return a ResponseWrapper to recover from the error
|
|
43
|
+
* @param error - The error that occurred
|
|
44
|
+
* @returns Modified error, a ResponseWrapper to recover, or a Promise of either
|
|
45
|
+
*/
|
|
46
|
+
export type ErrorInterceptor = (error: RequestError) => RequestError | ResponseWrapper | Promise<RequestError | ResponseWrapper>;
|
|
8
47
|
export interface CookieOptions {
|
|
9
48
|
value: string;
|
|
10
49
|
secure?: boolean;
|
|
@@ -16,12 +55,12 @@ export interface CookieOptions {
|
|
|
16
55
|
maxAge?: number;
|
|
17
56
|
}
|
|
18
57
|
export type CookiesRecord = Record<string, string | CookieOptions>;
|
|
19
|
-
export {
|
|
20
|
-
export interface RequestOptions extends Omit<RequestInit, "signal" | "body" | "method" | "credentials" | "mode" | "redirect" | "
|
|
58
|
+
export { HttpMethod, RequestMode, RedirectMode, SameSitePolicy, RequestPriority, CredentialsPolicy };
|
|
59
|
+
export interface RequestOptions extends Omit<RequestInit, "signal" | "body" | "method" | "credentials" | "mode" | "redirect" | "priority"> {
|
|
21
60
|
timeout?: number;
|
|
22
61
|
retries?: number;
|
|
23
62
|
onRetry?: RetryCallback;
|
|
24
|
-
body?:
|
|
63
|
+
body?: Body;
|
|
25
64
|
credentials?: CredentialsPolicy | RequestCredentials;
|
|
26
65
|
mode?: RequestMode;
|
|
27
66
|
redirect?: RedirectMode | RequestRedirect;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { RequestInterceptor, ResponseInterceptor, ErrorInterceptor } from "../types.js";
|
|
1
2
|
/**
|
|
2
3
|
* Global configuration for create-request
|
|
3
4
|
*/
|
|
@@ -9,6 +10,10 @@ export declare class Config {
|
|
|
9
10
|
private csrfToken;
|
|
10
11
|
private enableAutoXsrf;
|
|
11
12
|
private enableAntiCsrf;
|
|
13
|
+
private requestInterceptors;
|
|
14
|
+
private responseInterceptors;
|
|
15
|
+
private errorInterceptors;
|
|
16
|
+
private nextInterceptorId;
|
|
12
17
|
private constructor();
|
|
13
18
|
/**
|
|
14
19
|
* Get the singleton instance of the Config class
|
|
@@ -113,6 +118,97 @@ export declare class Config {
|
|
|
113
118
|
* @returns True if anti-CSRF protection is enabled
|
|
114
119
|
*/
|
|
115
120
|
isAntiCsrfEnabled(): boolean;
|
|
121
|
+
/**
|
|
122
|
+
* Add a global request interceptor
|
|
123
|
+
* Request interceptors can modify the request configuration or return an early response
|
|
124
|
+
*
|
|
125
|
+
* @param interceptor - The request interceptor function
|
|
126
|
+
* @returns The interceptor ID for later removal
|
|
127
|
+
*
|
|
128
|
+
* @example
|
|
129
|
+
* const id = Config.getInstance().addRequestInterceptor((config) => {
|
|
130
|
+
* config.headers['X-Custom'] = 'value';
|
|
131
|
+
* return config;
|
|
132
|
+
* });
|
|
133
|
+
*/
|
|
134
|
+
addRequestInterceptor(interceptor: RequestInterceptor): number;
|
|
135
|
+
/**
|
|
136
|
+
* Add a global response interceptor
|
|
137
|
+
* Response interceptors can transform the response
|
|
138
|
+
*
|
|
139
|
+
* @param interceptor - The response interceptor function
|
|
140
|
+
* @returns The interceptor ID for later removal
|
|
141
|
+
*
|
|
142
|
+
* @example
|
|
143
|
+
* const id = Config.getInstance().addResponseInterceptor((response) => {
|
|
144
|
+
* console.log('Response received:', response.status);
|
|
145
|
+
* return response;
|
|
146
|
+
* });
|
|
147
|
+
*/
|
|
148
|
+
addResponseInterceptor(interceptor: ResponseInterceptor): number;
|
|
149
|
+
/**
|
|
150
|
+
* Add a global error interceptor
|
|
151
|
+
* Error interceptors can handle or transform errors
|
|
152
|
+
*
|
|
153
|
+
* @param interceptor - The error interceptor function
|
|
154
|
+
* @returns The interceptor ID for later removal
|
|
155
|
+
*
|
|
156
|
+
* @example
|
|
157
|
+
* const id = Config.getInstance().addErrorInterceptor((error) => {
|
|
158
|
+
* console.error('Request failed:', error);
|
|
159
|
+
* throw error;
|
|
160
|
+
* });
|
|
161
|
+
*/
|
|
162
|
+
addErrorInterceptor(interceptor: ErrorInterceptor): number;
|
|
163
|
+
/**
|
|
164
|
+
* Remove a request interceptor by its ID
|
|
165
|
+
*
|
|
166
|
+
* @param id - The interceptor ID returned from addRequestInterceptor
|
|
167
|
+
*
|
|
168
|
+
* @example
|
|
169
|
+
* Config.getInstance().removeRequestInterceptor(id);
|
|
170
|
+
*/
|
|
171
|
+
removeRequestInterceptor(id: number): void;
|
|
172
|
+
/**
|
|
173
|
+
* Remove a response interceptor by its ID
|
|
174
|
+
*
|
|
175
|
+
* @param id - The interceptor ID returned from addResponseInterceptor
|
|
176
|
+
*
|
|
177
|
+
* @example
|
|
178
|
+
* Config.getInstance().removeResponseInterceptor(id);
|
|
179
|
+
*/
|
|
180
|
+
removeResponseInterceptor(id: number): void;
|
|
181
|
+
/**
|
|
182
|
+
* Remove an error interceptor by its ID
|
|
183
|
+
*
|
|
184
|
+
* @param id - The interceptor ID returned from addErrorInterceptor
|
|
185
|
+
*
|
|
186
|
+
* @example
|
|
187
|
+
* Config.getInstance().removeErrorInterceptor(id);
|
|
188
|
+
*/
|
|
189
|
+
removeErrorInterceptor(id: number): void;
|
|
190
|
+
/**
|
|
191
|
+
* Clear all interceptors (request, response, and error)
|
|
192
|
+
*
|
|
193
|
+
* @example
|
|
194
|
+
* Config.getInstance().clearInterceptors();
|
|
195
|
+
*/
|
|
196
|
+
clearInterceptors(): void;
|
|
197
|
+
/**
|
|
198
|
+
* Get all global request interceptors (in registration order)
|
|
199
|
+
* @internal
|
|
200
|
+
*/
|
|
201
|
+
getRequestInterceptors(): RequestInterceptor[];
|
|
202
|
+
/**
|
|
203
|
+
* Get all global response interceptors (in registration order)
|
|
204
|
+
* @internal
|
|
205
|
+
*/
|
|
206
|
+
getResponseInterceptors(): ResponseInterceptor[];
|
|
207
|
+
/**
|
|
208
|
+
* Get all global error interceptors (in registration order)
|
|
209
|
+
* @internal
|
|
210
|
+
*/
|
|
211
|
+
getErrorInterceptors(): ErrorInterceptor[];
|
|
116
212
|
/**
|
|
117
213
|
* Reset all configuration options to their default values
|
|
118
214
|
*
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-request",
|
|
3
|
-
"version": "0.0.1-beta.
|
|
3
|
+
"version": "0.0.1-beta.24",
|
|
4
4
|
"description": "A modern, chainable wrapper for fetch with automatic retries, timeouts, comprehensive error handling, and first-class TypeScript support",
|
|
5
|
-
"main": "dist/library/index.
|
|
5
|
+
"main": "dist/library/index.cjs",
|
|
6
6
|
"module": "dist/library/index.esm.js",
|
|
7
7
|
"types": "dist/library/index.d.ts",
|
|
8
8
|
"sideEffects": false,
|
|
@@ -12,8 +12,14 @@
|
|
|
12
12
|
],
|
|
13
13
|
"exports": {
|
|
14
14
|
".": {
|
|
15
|
-
"import":
|
|
16
|
-
|
|
15
|
+
"import": {
|
|
16
|
+
"default": "./dist/library/index.esm.js",
|
|
17
|
+
"production": "./dist/library/index.esm.min.js"
|
|
18
|
+
},
|
|
19
|
+
"require": {
|
|
20
|
+
"default": "./dist/library/index.cjs",
|
|
21
|
+
"production": "./dist/library/index.min.cjs"
|
|
22
|
+
},
|
|
17
23
|
"types": "./dist/library/index.d.ts"
|
|
18
24
|
}
|
|
19
25
|
},
|
|
@@ -24,11 +30,10 @@
|
|
|
24
30
|
"lint": "eslint 'src/**/*.{js,ts,json}' 'test/**/*.{js,ts,json}'",
|
|
25
31
|
"lint:fix": "eslint \"**/*.ts\" --ignore-path .eslintignore --fix",
|
|
26
32
|
"format": "prettier --write \"**/*.{ts,js,json}\"",
|
|
27
|
-
"check": "concurrently \"npm run lint\" \"npm run test\" \"
|
|
33
|
+
"check": "concurrently \"npm run lint\" \"npm run test\" \"npm run check:size\"",
|
|
28
34
|
"check:size": "npx size-limit",
|
|
29
|
-
"
|
|
30
|
-
"test": "node --test",
|
|
31
|
-
"test:coverage": "npm run test -- --experimental-test-coverage",
|
|
35
|
+
"test": "node --import tsx --test test/**/*.test.ts",
|
|
36
|
+
"test:coverage": "node --import tsx --experimental-test-coverage --test test/**/*.test.ts",
|
|
32
37
|
"preversion": "npm run check",
|
|
33
38
|
"prepublishOnly": "npm run build",
|
|
34
39
|
"publish:beta": "npm version prerelease --preid=beta && git push origin --tags && npm publish --tag latest",
|
|
@@ -46,6 +51,9 @@
|
|
|
46
51
|
],
|
|
47
52
|
"author": "Daniel Amenou <amenou.daniel@gmail.com>",
|
|
48
53
|
"license": "MIT",
|
|
54
|
+
"engines": {
|
|
55
|
+
"node": ">=18.3.0"
|
|
56
|
+
},
|
|
49
57
|
"repository": {
|
|
50
58
|
"type": "git",
|
|
51
59
|
"url": "https://github.com/DanielAmenou/create-request.git"
|
|
@@ -54,12 +62,26 @@
|
|
|
54
62
|
{
|
|
55
63
|
"path": "dist/library/index.esm.js",
|
|
56
64
|
"limit": "6 KB",
|
|
57
|
-
"gzip": true
|
|
65
|
+
"gzip": true,
|
|
66
|
+
"name": "ESM Standard"
|
|
58
67
|
},
|
|
59
68
|
{
|
|
60
|
-
"path": "dist/library/index.
|
|
69
|
+
"path": "dist/library/index.cjs",
|
|
61
70
|
"limit": "6 KB",
|
|
62
|
-
"gzip": true
|
|
71
|
+
"gzip": true,
|
|
72
|
+
"name": "CJS Standard"
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"path": "dist/library/index.esm.min.js",
|
|
76
|
+
"limit": "6 KB",
|
|
77
|
+
"gzip": true,
|
|
78
|
+
"name": "ESM Minified"
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"path": "dist/library/index.min.cjs",
|
|
82
|
+
"limit": "6 KB",
|
|
83
|
+
"gzip": true,
|
|
84
|
+
"name": "CJS Minified"
|
|
63
85
|
}
|
|
64
86
|
],
|
|
65
87
|
"devDependencies": {
|
|
@@ -77,14 +99,15 @@
|
|
|
77
99
|
"eslint-config-prettier": "^9.1.0",
|
|
78
100
|
"eslint-import-resolver-typescript": "^3.6.1",
|
|
79
101
|
"eslint-plugin-import": "^2.29.1",
|
|
80
|
-
"eslint-plugin-prettier": "^5.0.1",
|
|
81
102
|
"eslint-plugin-jsonc": "^2.11.0",
|
|
103
|
+
"eslint-plugin-prettier": "^5.0.1",
|
|
82
104
|
"prettier": "^3.1.1",
|
|
83
105
|
"rollup": "^2.75.5",
|
|
84
106
|
"rollup-plugin-cleaner": "^1.0.0",
|
|
85
107
|
"rollup-plugin-visualizer": "^5.9.2",
|
|
86
108
|
"size-limit": "^8.2.6",
|
|
87
109
|
"tslib": "^2.4.0",
|
|
110
|
+
"tsx": "^4.20.6",
|
|
88
111
|
"typescript": "^4.7.3",
|
|
89
112
|
"undici": "^5.28.5"
|
|
90
113
|
}
|
package/dist/library/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var t,e,s,r,i,o,n,h,a;exports.HttpMethod=void 0,(t=exports.HttpMethod||(exports.HttpMethod={})).GET="GET",t.PUT="PUT",t.POST="POST",t.HEAD="HEAD",t.PATCH="PATCH",t.DELETE="DELETE",t.OPTIONS="OPTIONS",exports.RequestPriority=void 0,(e=exports.RequestPriority||(exports.RequestPriority={})).LOW="low",e.HIGH="high",e.AUTO="auto",exports.CredentialsPolicy=void 0,(s=exports.CredentialsPolicy||(exports.CredentialsPolicy={})).OMIT="omit",s.INCLUDE="include",s.SAME_ORIGIN="same-origin",exports.RequestMode=void 0,(r=exports.RequestMode||(exports.RequestMode={})).CORS="cors",r.NO_CORS="no-cors",r.SAME_ORIGIN="same-origin",r.NAVIGATE="navigate",exports.RedirectMode=void 0,(i=exports.RedirectMode||(exports.RedirectMode={})).ERROR="error",i.FOLLOW="follow",i.MANUAL="manual",exports.CacheMode=void 0,(o=exports.CacheMode||(exports.CacheMode={})).DEFAULT="default",o.RELOAD="reload",o.NO_STORE="no-store",o.NO_CACHE="no-cache",o.FORCE_CACHE="force-cache",o.ONLY_IF_CACHED="only-if-cached",exports.SameSitePolicy=void 0,(n=exports.SameSitePolicy||(exports.SameSitePolicy={})).LAX="Lax",n.NONE="None",n.STRICT="Strict",function(t){t.JSON="json",t.STRING="string",t.BINARY="binary"}(h||(h={})),exports.ReferrerPolicy=void 0,(a=exports.ReferrerPolicy||(exports.ReferrerPolicy={})).ORIGIN="origin",a.UNSAFE_URL="unsafe-url",a.SAME_ORIGIN="same-origin",a.NO_REFERRER="no-referrer",a.STRICT_ORIGIN="strict-origin",a.ORIGIN_WHEN_CROSS_ORIGIN="origin-when-cross-origin",a.NO_REFERRER_WHEN_DOWNGRADE="no-referrer-when-downgrade",a.STRICT_ORIGIN_WHEN_CROSS_ORIGIN="strict-origin-when-cross-origin";class c{constructor(t){this.bodyUsed=!1,this.response=t}get status(){return this.response.status}get statusText(){return this.response.statusText}get headers(){return this.response.headers}get ok(){return this.response.ok}get raw(){return this.response}async getJson(){if(void 0!==this.jsonCache)return this.jsonCache;if(this.bodyUsed){if(void 0!==this.textCache)try{return this.jsonCache=JSON.parse(this.textCache),this.jsonCache}catch(t){throw Error("Cannot parse cached text as JSON")}throw Error("Response body has already been consumed in a different format")}return this.bodyUsed=!0,this.jsonCache=await this.response.json(),this.jsonCache}async getText(){if(void 0!==this.textCache)return this.textCache;if(this.bodyUsed){if(void 0!==this.jsonCache)return this.textCache=JSON.stringify(this.jsonCache),this.textCache;if(void 0!==this.blobCache)return this.textCache=await this.blobCache.text(),this.textCache;throw Error("Response body has already been consumed in a format that cannot be converted to text")}return this.bodyUsed=!0,this.textCache=await this.response.text(),this.textCache}async getBlob(){if(void 0!==this.blobCache)return this.blobCache;if(this.bodyUsed){if(void 0!==this.textCache)return this.blobCache=new Blob([this.textCache],{type:"text/plain"}),this.blobCache;throw Error("Response body has already been consumed in a format that cannot be converted to Blob")}return this.bodyUsed=!0,this.blobCache=await this.response.blob(),this.blobCache}async getArrayBuffer(){if(void 0!==this.arrayBufferCache)return this.arrayBufferCache;if(this.bodyUsed){if(void 0!==this.textCache){const t=(new TextEncoder).encode(this.textCache);return this.arrayBufferCache=t.buffer,this.arrayBufferCache}if(void 0!==this.blobCache)return this.arrayBufferCache=await this.blobCache.arrayBuffer(),this.arrayBufferCache;throw Error("Response body has already been consumed in a format that cannot be converted to ArrayBuffer")}return this.bodyUsed=!0,this.arrayBufferCache=await this.response.arrayBuffer(),this.arrayBufferCache}getBody(){if(this.bodyUsed)throw Error("Response body has already been consumed");return this.bodyUsed=!0,this.response.body}}function u(){const t=new Map;return{get:e=>t.get(e)||null,set(e,s){t.set(e,s)},has:e=>t.has(e),delete(e){t.delete(e)},clear(){t.clear()}}}function f(){return{get:t=>"undefined"==typeof localStorage?null:localStorage.getItem(t),set(t,e){if("undefined"!=typeof localStorage)try{localStorage.setItem(t,e)}catch(s){console.warn("Cache storage quota exceeded, clearing cache"),this.clear();try{localStorage.setItem(t,e)}catch(t){console.error("Failed to set cache item even after clearing cache")}}},has:t=>"undefined"!=typeof localStorage&&null!==localStorage.getItem(t),delete(t){"undefined"!=typeof localStorage&&localStorage.removeItem(t)},clear(){"undefined"!=typeof localStorage&&localStorage.clear()}}}function l(){return{get:t=>"undefined"==typeof sessionStorage?null:sessionStorage.getItem(t),set(t,e){if("undefined"!=typeof sessionStorage)try{sessionStorage.setItem(t,e)}catch(s){console.warn("Cache storage quota exceeded, clearing cache"),this.clear();try{sessionStorage.setItem(t,e)}catch(t){console.error("Failed to set cache item even after clearing cache")}}},has:t=>"undefined"!=typeof sessionStorage&&null!==sessionStorage.getItem(t),delete(t){"undefined"!=typeof sessionStorage&&sessionStorage.removeItem(t)},clear(){"undefined"!=typeof sessionStorage&&sessionStorage.clear()}}}class d{constructor(t={}){this.entryCount=0,this.totalSize=0,this.options=t,this.storage=function(t){const{storage:e}=t||{};return e?"function"==typeof e.get&&"function"==typeof e.set?e:e===localStorage?f():e===sessionStorage?l():e instanceof Map?{get:t=>e.get(t)||null,set(t,s,r){e.set(t,s)},has:t=>e.has(t),delete(t){e.delete(t)},clear(){e.clear()}}:(console.warn("Unsupported storage type, falling back to memory storage"),u()):u()}(t)}generateKey(t,e,s,r){if(this.options.keyGenerator){const i=this.options.keyGenerator(t,e,s,r);return this.options.keyPrefix?`${this.options.keyPrefix}:${i}`:i}let i=`${e}:${t}`;if(this.options.varyByHeaders&&s){const t={};this.options.varyByHeaders.forEach((e=>{const r=e.toLowerCase();Object.keys(s).forEach((e=>{e.toLowerCase()===r&&(t[r]=s[e])}))})),Object.keys(t).length>0&&(i+=":"+JSON.stringify(t))}if("GET"!==e&&null!=r)try{"string"==typeof r||"number"==typeof r||"boolean"==typeof r?i+=":"+r:"object"==typeof r&&(i+=":"+JSON.stringify(r))}catch(t){console.warn("Failed to stringify request body for cache key")}return this.options.keyPrefix?`${this.options.keyPrefix}:${i}`:i}async get(t){const e=await Promise.resolve(this.storage.get(t));if(!e)return null;try{const s=JSON.parse(e);return s.expiry&&s.expiry<Date.now()?(await Promise.resolve(this.storage.delete(t)),null):s}catch(e){return await Promise.resolve(this.storage.delete(t)),null}}async set(t,e,s){const r=Date.now(),i=this.options.ttl,o=JSON.stringify({value:e,timestamp:r,expiry:i?r+i:null,headers:s});if(this.options.maxSize){const t=function(t){var e;if("number"==typeof t)return t;const s=t.match(/^(\d+(?:\.\d+)?)\s*(KB|MB|GB)?$/i);if(!s)return 0;const r=parseFloat(s[1]);switch(null===(e=s[2])||void 0===e?void 0:e.toUpperCase()){case"KB":return 1024*r;case"MB":return 1048576*r;case"GB":return 1073741824*r;default:return r}}(this.options.maxSize),e=(new TextEncoder).encode(o).length;if(e>t)return void console.warn(`Cache entry size (${e} bytes) exceeds maximum cache size (${t} bytes)`);this.totalSize+e>t&&(await Promise.resolve(this.storage.clear()),this.totalSize=0,this.entryCount=0),this.totalSize+=e}this.options.maxEntries&&(this.entryCount++,this.entryCount>this.options.maxEntries&&(await Promise.resolve(this.storage.clear()),this.entryCount=1)),await Promise.resolve(this.storage.set(t,o,i))}async has(t){return Promise.resolve(this.storage.has(t))}async delete(t){return Promise.resolve(this.storage.delete(t))}async clear(){return this.entryCount=0,this.totalSize=0,Promise.resolve(this.storage.clear())}}class p{static formatRequestCookies(t){const e=[];return Object.entries(t).forEach((([t,s])=>{let r;r="string"==typeof s?s:s.value,e.push(`${encodeURIComponent(t)}=${encodeURIComponent(r)}`)})),e.join("; ")}}class y extends Error{constructor(t,e,s,r={}){super(t),this.name="RequestError",this.url=e,this.method=s,this.status=r.status,this.response=r.response,this.timeoutError=r.timeoutError,Error.captureStackTrace&&Error.captureStackTrace(this,y),Object.setPrototypeOf(this,y.prototype)}static timeout(t,e,s){return new y(`Request timed out after ${s}ms`,t,e,{timeoutError:!0})}static fromResponse(t,e,s){return new y("Request failed with status "+t.status,e,s,{status:t.status,response:t})}static networkError(t,e,s){const r=new y("Network error: "+s.message,t,e);return r.stack=s.stack,r}}class w{static getTokenFromMeta(t="csrf-token"){if("undefined"==typeof document)return null;const e=document.querySelector(`meta[name="${t}"]`);return(null==e?void 0:e.getAttribute("content"))||null}static getTokenFromCookie(t="csrf-token"){if("undefined"==typeof document)return null;const e=document.cookie.split(";");for(const s of e){const[e,r]=s.trim().split("=");if(e===t)return decodeURIComponent(r)}return null}static isValidToken(t){return!("string"!=typeof t||8>t.length||t.length>10&&(!/^[A-Za-z0-9\-_=+/.]+$/.test(t)||2>[/[A-Z]/.test(t),/[a-z]/.test(t),/[0-9]/.test(t),/[-_=+/.]/.test(t)].filter(Boolean).length))}}class g{constructor(){this.csrfHeaderName="X-CSRF-Token",this.xsrfCookieName="XSRF-TOKEN",this.xsrfHeaderName="X-XSRF-TOKEN",this.csrfToken=null,this.enableAutoXsrf=!0,this.enableAntiCsrf=!0}static getInstance(){return g.instance||(g.instance=new g),g.instance}setCsrfToken(t){return this.csrfToken=t,this}getCsrfToken(){return this.csrfToken}setCsrfHeaderName(t){return this.csrfHeaderName=t,this}getCsrfHeaderName(){return this.csrfHeaderName}setXsrfCookieName(t){return this.xsrfCookieName=t,this}getXsrfCookieName(){return this.xsrfCookieName}setXsrfHeaderName(t){return this.xsrfHeaderName=t,this}getXsrfHeaderName(){return this.xsrfHeaderName}setEnableAutoXsrf(t){return this.enableAutoXsrf=t,this}isAutoXsrfEnabled(){return this.enableAutoXsrf}setEnableAntiCsrf(t){return this.enableAntiCsrf=t,this}isAntiCsrfEnabled(){return this.enableAntiCsrf}reset(){return this.csrfToken=null,this.csrfHeaderName="X-CSRF-Token",this.enableAntiCsrf=!0,this.xsrfCookieName="XSRF-TOKEN",this.xsrfHeaderName="X-XSRF-TOKEN",this.enableAutoXsrf=!0,this}}class m{constructor(){this.requestOptions={headers:{}},this.queryParams=new URLSearchParams,this.autoApplyCsrfProtection=!0,this.cacheEnabled=!1}withHeaders(t){return this.requestOptions.headers={...this.requestOptions.headers,...t},this}withHeader(t,e){return this.withHeaders({[t]:e})}withTimeout(t){if(!Number.isFinite(t)||0>=t)throw Error("Timeout must be a positive number");return this.requestOptions.timeout=t,this}withRetries(t){if(!Number.isInteger(t)||0>t)throw Error("Retry count must be a non-negative integer");return this.requestOptions.retries=t,this}onRetry(t){return this.requestOptions.onRetry=t,this}withCredentials(t=exports.CredentialsPolicy.SAME_ORIGIN){return this.requestOptions.credentials=t,this}withAbortController(t){return this.abortController=t,this}withReferrer(t){return this.requestOptions.referrer=t,this}withReferrerPolicy(t){return this.requestOptions.referrerPolicy=t,this}withRedirect(t){return this.requestOptions.redirect=t,this}withKeepAlive(t){return this.requestOptions.keepalive=t,this}withPriority(t){return this.requestOptions.priority=t,this}withQueryParams(t){return Object.entries(t).forEach((([t,e])=>{null!=e&&(Array.isArray(e)?e.forEach((e=>this.queryParams.append(t,e+""))):this.queryParams.append(t,e+""))})),this}withQueryParam(t,e){return null==e||(Array.isArray(e)?e.forEach((e=>this.queryParams.append(t,e+""))):this.queryParams.append(t,e+"")),this}withMode(t){return this.requestOptions.mode=t,this}withContentType(t){return this.withHeaders({"Content-Type":t})}withAuthorization(t){return this.withHeaders({Authorization:t})}withBasicAuth(t,e){const s=this.encodeBase64(`${t}:${e}`);return this.withAuthorization("Basic "+s)}encodeBase64(t){if("undefined"!=typeof TextEncoder&&"function"==typeof btoa){const e=(new TextEncoder).encode(t);return btoa(String.fromCharCode.call(null,...new Uint8Array(e)))}if("function"==typeof btoa)return btoa(t);if("undefined"!=typeof Buffer)return Buffer.from(t).toString("base64");throw Error("Base64 encoding is not supported")}withBearerToken(t){return this.withAuthorization("Bearer "+t)}hasHeader(t,e){return Object.keys(t).some((t=>t.toLowerCase()===e.toLowerCase()))}withCookies(t){if(0===Object.entries(t||{}).length)return this;const e=this.requestOptions.headers||{},s=[],r=[];Object.keys(e).forEach((t=>{"cookie"===t.toLowerCase()&&(e[t]&&s.push(e[t]),r.push(t))}));const i=p.formatRequestCookies(t),o=r.length>0?r[0]:"Cookie",n=[...s,i].filter(Boolean).join("; "),h={...e};return r.forEach((t=>{delete h[t]})),this.requestOptions.headers={...h,[o]:n},this}withCookie(t,e){return this.withCookies({[t]:e})}withCsrfToken(t,e="X-CSRF-Token"){return this.withHeaders({[e]:t})}withoutCsrfProtection(){return this.autoApplyCsrfProtection=!1,this}withAntiCsrfHeaders(){return this.withHeaders({"X-Requested-With":"XMLHttpRequest"})}withCache(t={}){return this.cacheEnabled=!0,this.cacheManager=new d(t),this}sendTo(t){if(t=this.formatUrlWithQueryParams(t),this.autoApplyCsrfProtection){const t=g.getInstance();t.isAntiCsrfEnabled()&&this.withHeaders({"X-Requested-With":"XMLHttpRequest"});const e=t.getCsrfToken();if(e){const s=this.requestOptions.headers,r=t.getCsrfHeaderName();this.hasHeader(s,"X-CSRF-Token")||this.hasHeader(s,r)||this.withHeaders({[r]:e})}if(t.isAutoXsrfEnabled()&&"undefined"!=typeof document){const e=w.getTokenFromCookie(t.getXsrfCookieName());if(e&&w.isValidToken(e)){const s=this.requestOptions.headers,r=t.getXsrfHeaderName();this.hasHeader(s,"X-XSRF-TOKEN")||this.hasHeader(s,r)||this.withHeaders({[r]:e})}}}const e={...this.requestOptions,method:this.method};let s;if(this.cacheEnabled&&this.cacheManager){const r=this.cacheManager.generateKey(t,this.method,this.requestOptions.headers,this.requestOptions.body);s=this.executeWithCache(t,e,r)}else s=this.requestOptions.retries?this.executeWithRetries(t,e):this.executeRequest(t,e);const r=s;return r.getJson=async()=>s.then((t=>t.getJson())),r.getText=async()=>s.then((t=>t.getText())),r.getBlob=async()=>s.then((t=>t.getBlob())),r.getArrayBuffer=async()=>s.then((t=>t.getArrayBuffer())),r.getBody=async()=>s.then((t=>t.getBody())),r.getData=async t=>{try{const e=await s.then((t=>t.getJson()));return t?t(e):e}catch(t){const e=Error(`Data selector failed: ${t instanceof Error?t.message:t+""}. Original data: ${JSON.stringify(await s.then((t=>t.getJson())),null,2)}`);throw t instanceof Error&&t.stack&&(e.stack=t.stack),e}},r}formatUrlWithQueryParams(t){if(!(""+this.queryParams))return t;try{const e=new URL(t);return this.queryParams.forEach(((t,s)=>{e.searchParams.append(s,t)})),""+e}catch(e){const s=t.includes("?");return`${t}${s?"&":"?"}${""+this.queryParams}`}}async executeWithRetries(t,e){const s=this.requestOptions.retries||0;for(let r=0;s>=r;r++)try{return await this.executeRequest(t,e)}catch(i){const o=i instanceof y?i:y.networkError(t,e.method,i);if(r>=s)throw o;this.requestOptions.onRetry&&await this.requestOptions.onRetry({attempt:r+1,error:o})}throw new y("Max retries reached",t,e.method)}async executeRequest(t,e){const s=this.abortController||new AbortController,{signal:r}=s;let i;e.signal=e.signal||r;let o=!1;this.requestOptions.timeout&&(this.abortController?"function"==typeof AbortSignal.timeout?AbortSignal.timeout(this.requestOptions.timeout).addEventListener("abort",(()=>{s.signal.aborted||(o=!0,s.abort())})):i=setTimeout((()=>{s.signal.aborted||(o=!0,s.abort())}),this.requestOptions.timeout):i=setTimeout((()=>{o=!0,s.abort()}),this.requestOptions.timeout));try{let s;try{s=await fetch(t,e)}catch(s){if(s instanceof DOMException&&"AbortError"===s.name&&o)throw y.timeout(t,e.method,this.requestOptions.timeout);throw y.networkError(t,e.method,s)}if(!s.ok)throw y.fromResponse(s,t,e.method);return new c(s)}finally{i&&clearTimeout(i)}}async executeWithCache(t,e,s){if(this.cacheManager){const t=await this.cacheManager.get(s);if(t){const e=new Response(JSON.stringify(t.value),{status:200,headers:new Headers(t.headers||{})});return new c(e)}}const r=await(this.requestOptions.retries?this.executeWithRetries(t,e):this.executeRequest(t,e));if(r.ok&&this.cacheManager)try{const t=await r.getJson(),e={};r.headers.forEach(((t,s)=>{e[s]=t})),await this.cacheManager.set(s,t,e)}catch(t){console.warn("Failed to cache response:",t)}return r}}class x extends m{withBody(t){if(this.body=t,"string"==typeof t)this.bodyType=h.STRING,this.setContentTypeIfNeeded("text/plain");else if(null===t||"object"!=typeof t||t instanceof FormData||t instanceof Blob||t instanceof ArrayBuffer||t instanceof URLSearchParams||t instanceof ReadableStream)this.bodyType=h.BINARY;else{this.bodyType=h.JSON,this.setContentTypeIfNeeded("application/json");try{JSON.stringify(t)}catch(t){throw Error("Failed to stringify request body: "+t)}}return this}setContentTypeIfNeeded(t){Object.keys(this.requestOptions.headers).some((t=>"content-type"===t.toLowerCase()))||this.withContentType(t)}sendTo(t){return void 0!==this.body&&(this.requestOptions.body&&delete this.requestOptions.body,this.requestOptions.body=this.bodyType===h.JSON?JSON.stringify(this.body):this.body),super.sendTo(t)}}class b extends m{constructor(){super(...arguments),this.method=exports.HttpMethod.GET}}class S extends m{constructor(){super(...arguments),this.method=exports.HttpMethod.HEAD}}class E extends m{constructor(){super(...arguments),this.method=exports.HttpMethod.OPTIONS}}class R extends m{constructor(){super(...arguments),this.method=exports.HttpMethod.DELETE}}class T extends x{constructor(){super(...arguments),this.method=exports.HttpMethod.POST}}class C extends x{constructor(){super(...arguments),this.method=exports.HttpMethod.PUT}}class v extends x{constructor(){super(...arguments),this.method=exports.HttpMethod.PATCH}}const O={get:function(){return new b},post:function(){return new T},put:function(){return new C},del:function(){return new R},patch:function(){return new v},head:function(){return new S},options:function(){return new E},config:g.getInstance()};exports.CacheManager=d,exports.CookieUtils=p,exports.DeleteRequest=R,exports.GetRequest=b,exports.HeadRequest=S,exports.OptionsRequest=E,exports.PatchRequest=v,exports.PostRequest=T,exports.PutRequest=C,exports.RequestError=y,exports.ResponseWrapper=c,exports.createLocalStorageStorage=f,exports.createMemoryStorage=u,exports.createSessionStorageStorage=l,exports.default=O;//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/enums.ts","../../../src/ResponseWrapper.ts","../../../src/utils/CacheStorage.ts","../../../src/utils/CacheManager.ts","../../../src/utils/sizeUtils.ts","../../../src/utils/CookieUtils.ts","../../../src/RequestError.ts","../../../src/utils/CsrfUtils.ts","../../../src/utils/Config.ts","../../../src/BaseRequest.ts","../../../src/BodyRequest.ts","../../../src/requestMethods.ts","../../../src/index.ts","../../../src/requestFactories.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["HttpMethod","RequestPriority","CredentialsPolicy","RequestMode","RedirectMode","CacheMode","SameSitePolicy","BodyType","ReferrerPolicy","ResponseWrapper","constructor","response","this","bodyUsed","status","statusText","headers","ok","raw","getJson","undefined","jsonCache","textCache","JSON","parse","e","Error","json","getText","stringify","blobCache","text","getBlob","Blob","type","blob","getArrayBuffer","arrayBufferCache","uint8Array","TextEncoder","encode","buffer","arrayBuffer","getBody","body","createMemoryStorage","store","Map","get","key","set","value","has","delete","clear","createLocalStorageStorage","localStorage","getItem","setItem","console","warn","error","removeItem","createSessionStorageStorage","sessionStorage","CacheManager","options","entryCount","totalSize","storage","_ttl","createStorageProvider","generateKey","url","method","keyGenerator","customKey","keyPrefix","varyByHeaders","varyHeaders","forEach","header","normalizedHeader","toLowerCase","Object","keys","h","length","Promise","resolve","entry","expiry","Date","now","ttl","serialized","timestamp","maxSize","maxBytes","size","match","num","parseFloat","_a","toUpperCase","parseSize","entrySize","maxEntries","CookieUtils","formatRequestCookies","cookies","cookiePairs","entries","name","valueOrOptions","push","encodeURIComponent","join","RequestError","message","super","timeoutError","captureStackTrace","setPrototypeOf","prototype","timeout","timeoutMs","fromResponse","networkError","originalError","stack","CsrfUtils","getTokenFromMeta","metaName","document","meta","querySelector","getAttribute","getTokenFromCookie","cookieName","cookie","split","trim","decodeURIComponent","isValidToken","token","test","filter","Boolean","Config","csrfHeaderName","xsrfCookieName","xsrfHeaderName","csrfToken","enableAutoXsrf","enableAntiCsrf","getInstance","instance","setCsrfToken","getCsrfToken","setCsrfHeaderName","getCsrfHeaderName","setXsrfCookieName","getXsrfCookieName","setXsrfHeaderName","getXsrfHeaderName","setEnableAutoXsrf","enable","isAutoXsrfEnabled","setEnableAntiCsrf","isAntiCsrfEnabled","reset","BaseRequest","requestOptions","queryParams","URLSearchParams","autoApplyCsrfProtection","cacheEnabled","withHeaders","withHeader","withTimeout","Number","isFinite","withRetries","retries","isInteger","onRetry","callback","withCredentials","credentialsPolicy","SAME_ORIGIN","credentials","withAbortController","controller","abortController","withReferrer","referrer","withReferrerPolicy","policy","referrerPolicy","withRedirect","redirect","withKeepAlive","keepalive","withPriority","priority","withQueryParams","params","Array","isArray","v","append","String","withQueryParam","withMode","mode","withContentType","contentType","withAuthorization","authValue","Authorization","withBasicAuth","username","password","encodeBase64","str","btoa","bytes","fromCharCode","apply","Uint8Array","Buffer","from","toString","withBearerToken","hasHeader","headerName","some","withCookies","currentHeaders","cookieValues","cookieHeaderKeys","cookieString","combinedCookieValue","newHeaders","withCookie","withCsrfToken","withoutCsrfProtection","withAntiCsrfHeaders","withCache","cacheManager","sendTo","formatUrlWithQueryParams","config","globalToken","xsrfToken","fetchOptions","basePromise","cacheKey","executeWithCache","executeWithRetries","executeRequest","responsePromise","async","then","getData","selector","data","enhancedError","urlObj","URL","searchParams","hasExistingParams","includes","maxRetries","attempt","requestError","AbortController","signal","timeoutId","abortedByTimeout","AbortSignal","addEventListener","aborted","abort","setTimeout","fetch","DOMException","clearTimeout","cachedEntry","cachedResponse","Response","Headers","responseData","BodyRequest","withBody","bodyType","STRING","setContentTypeIfNeeded","FormData","ArrayBuffer","ReadableStream","BINARY","GetRequest","GET","HeadRequest","HEAD","OptionsRequest","OPTIONS","DeleteRequest","DELETE","PostRequest","POST","PutRequest","PUT","PatchRequest","PATCH","create","post","put","del","patch","head"],"mappings":"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"}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import type { StorageProvider } from "../utils/StorageProvider.js";
|
|
2
|
-
/**
|
|
3
|
-
* Cache entry with metadata
|
|
4
|
-
*/
|
|
5
|
-
export interface CacheEntry {
|
|
6
|
-
value: any;
|
|
7
|
-
expiry: number | null;
|
|
8
|
-
timestamp: number;
|
|
9
|
-
headers?: Record<string, string>;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Options for cache configuration
|
|
13
|
-
*/
|
|
14
|
-
export interface CacheOptions {
|
|
15
|
-
/**
|
|
16
|
-
* Storage provider to use for caching
|
|
17
|
-
* Default is memory cache (new Map())
|
|
18
|
-
*/
|
|
19
|
-
storage?: StorageProvider | Storage | Map<string, any>;
|
|
20
|
-
/**
|
|
21
|
-
* Time to live in milliseconds
|
|
22
|
-
* Default is no expiration
|
|
23
|
-
*/
|
|
24
|
-
ttl?: number;
|
|
25
|
-
/**
|
|
26
|
-
* Custom key generator function
|
|
27
|
-
* @param url Request URL
|
|
28
|
-
* @param method Request method
|
|
29
|
-
* @param headers Request headers
|
|
30
|
-
* @param body Request body
|
|
31
|
-
*/
|
|
32
|
-
keyGenerator?: (url: string, method: string, headers?: Record<string, string>, body?: any) => string;
|
|
33
|
-
/**
|
|
34
|
-
* Headers to vary the cache by
|
|
35
|
-
* If these headers change, a new cache entry will be created
|
|
36
|
-
*/
|
|
37
|
-
varyByHeaders?: string[];
|
|
38
|
-
/**
|
|
39
|
-
* Maximum number of entries in the cache
|
|
40
|
-
* Only applicable for memory cache (Map)
|
|
41
|
-
*/
|
|
42
|
-
maxEntries?: number;
|
|
43
|
-
/**
|
|
44
|
-
* Maximum size of the cache in bytes or with units (e.g. "10MB")
|
|
45
|
-
* String format supports KB, MB, GB (case-insensitive)
|
|
46
|
-
*/
|
|
47
|
-
maxSize?: number | string;
|
|
48
|
-
/**
|
|
49
|
-
* Prefix for cache keys
|
|
50
|
-
* Useful for namespacing cache entries
|
|
51
|
-
*/
|
|
52
|
-
keyPrefix?: string;
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Type for cacheable response data
|
|
56
|
-
*/
|
|
57
|
-
export type CacheableResponse = {
|
|
58
|
-
data: any;
|
|
59
|
-
headers: Record<string, string>;
|
|
60
|
-
status: number;
|
|
61
|
-
statusText: string;
|
|
62
|
-
};
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import type { CacheEntry, CacheOptions } from "../types/cache.js";
|
|
2
|
-
/**
|
|
3
|
-
* Cache manager that handles storage operations
|
|
4
|
-
* Provides methods for storing, retrieving, and managing cached API responses.
|
|
5
|
-
*/
|
|
6
|
-
export declare class CacheManager {
|
|
7
|
-
private storage;
|
|
8
|
-
private options;
|
|
9
|
-
private entryCount;
|
|
10
|
-
private totalSize;
|
|
11
|
-
constructor(options?: CacheOptions);
|
|
12
|
-
/**
|
|
13
|
-
* Generate a cache key based on request details
|
|
14
|
-
* Keys can vary based on URL, method, headers, and request body.
|
|
15
|
-
*
|
|
16
|
-
* @param url - The request URL
|
|
17
|
-
* @param method - The HTTP method
|
|
18
|
-
* @param headers - Request headers that might affect caching
|
|
19
|
-
* @param body - Request body for non-GET requests
|
|
20
|
-
* @returns A unique cache key string
|
|
21
|
-
*
|
|
22
|
-
* @example
|
|
23
|
-
* const key = cacheManager.generateKey("/api/users", "GET", { "Accept": "application/json" });
|
|
24
|
-
*/
|
|
25
|
-
generateKey(url: string, method: string, headers?: Record<string, string>, body?: unknown): string;
|
|
26
|
-
/**
|
|
27
|
-
* Get a cached value by key
|
|
28
|
-
* Checks if the entry exists and isn't expired before returning it.
|
|
29
|
-
*
|
|
30
|
-
* @param key - The cache key to retrieve
|
|
31
|
-
* @returns The cached entry or null if not found or expired
|
|
32
|
-
*
|
|
33
|
-
* @example
|
|
34
|
-
* const entry = await cacheManager.get("GET:/api/users");
|
|
35
|
-
*/
|
|
36
|
-
get(key: string): Promise<CacheEntry | null>;
|
|
37
|
-
/**
|
|
38
|
-
* Store a value in the cache
|
|
39
|
-
* Enforces size and entry count limits if configured.
|
|
40
|
-
*
|
|
41
|
-
* @param key - The cache key
|
|
42
|
-
* @param value - The value to cache
|
|
43
|
-
* @param headers - Response headers to store with the cached value
|
|
44
|
-
* @returns Promise that resolves when caching is complete
|
|
45
|
-
*
|
|
46
|
-
* @example
|
|
47
|
-
* await cacheManager.set("GET:/api/users", userData, { "Content-Type": "application/json" });
|
|
48
|
-
*/
|
|
49
|
-
set(key: string, value: unknown, headers?: Record<string, string>): Promise<void>;
|
|
50
|
-
/**
|
|
51
|
-
* Check if a key exists in the cache
|
|
52
|
-
*
|
|
53
|
-
* @param key - The cache key to check
|
|
54
|
-
* @returns Promise that resolves to true if the key exists, false otherwise
|
|
55
|
-
*
|
|
56
|
-
* @example
|
|
57
|
-
* if (await cacheManager.has("GET:/api/users")) {
|
|
58
|
-
* // Use cached value
|
|
59
|
-
* }
|
|
60
|
-
*/
|
|
61
|
-
has(key: string): Promise<boolean>;
|
|
62
|
-
/**
|
|
63
|
-
* Delete a specific key from the cache
|
|
64
|
-
*
|
|
65
|
-
* @param key - The cache key to delete
|
|
66
|
-
* @returns Promise that resolves when deletion is complete
|
|
67
|
-
*
|
|
68
|
-
* @example
|
|
69
|
-
* await cacheManager.delete("GET:/api/users");
|
|
70
|
-
*/
|
|
71
|
-
delete(key: string): Promise<void>;
|
|
72
|
-
/**
|
|
73
|
-
* Clear the entire cache
|
|
74
|
-
* Resets internal counters for entry count and size.
|
|
75
|
-
*
|
|
76
|
-
* @returns Promise that resolves when the cache is cleared
|
|
77
|
-
*
|
|
78
|
-
* @example
|
|
79
|
-
* await cacheManager.clear();
|
|
80
|
-
*/
|
|
81
|
-
clear(): Promise<void>;
|
|
82
|
-
}
|