@algolia/requester-fetch 5.0.0-alpha.1 → 5.0.0-alpha.100
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/dist/index.d.ts +1 -1
- package/dist/{requester-fetch.cjs.js → requester-fetch.cjs} +59 -62
- package/dist/requester-fetch.esm.node.js +59 -60
- package/dist/src/createFetchRequester.d.ts +5 -5
- package/dist/src/createFetchRequester.d.ts.map +1 -1
- package/package.json +15 -11
- package/src/__tests__/fetch-requester.test.ts +14 -14
- package/src/createFetchRequester.ts +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './src/createFetchRequester';
|
|
1
|
+
export * from './src/createFetchRequester';
|
|
2
2
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,67 +1,64 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
return { send };
|
|
3
|
+
function isAbortError(error) {
|
|
4
|
+
return error instanceof Error && error.name === 'AbortError';
|
|
5
|
+
}
|
|
6
|
+
function getErrorMessage(error, abortContent) {
|
|
7
|
+
if (isAbortError(error)) {
|
|
8
|
+
return abortContent;
|
|
9
|
+
}
|
|
10
|
+
return error instanceof Error ? error.message : 'Network request failed';
|
|
11
|
+
}
|
|
12
|
+
function createFetchRequester({ requesterOptions = {}, } = {}) {
|
|
13
|
+
async function send(request) {
|
|
14
|
+
const abortController = new AbortController();
|
|
15
|
+
const signal = abortController.signal;
|
|
16
|
+
const createTimeout = (timeout) => {
|
|
17
|
+
return setTimeout(() => {
|
|
18
|
+
abortController.abort();
|
|
19
|
+
}, timeout);
|
|
20
|
+
};
|
|
21
|
+
const connectTimeout = createTimeout(request.connectTimeout);
|
|
22
|
+
let fetchRes;
|
|
23
|
+
try {
|
|
24
|
+
fetchRes = await fetch(request.url, {
|
|
25
|
+
method: request.method,
|
|
26
|
+
body: request.data || null,
|
|
27
|
+
redirect: 'manual',
|
|
28
|
+
signal,
|
|
29
|
+
...requesterOptions,
|
|
30
|
+
headers: {
|
|
31
|
+
...requesterOptions.headers,
|
|
32
|
+
...request.headers,
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
return {
|
|
38
|
+
status: 0,
|
|
39
|
+
content: getErrorMessage(error, 'Connection timeout'),
|
|
40
|
+
isTimedOut: isAbortError(error),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
clearTimeout(connectTimeout);
|
|
44
|
+
createTimeout(request.responseTimeout);
|
|
45
|
+
try {
|
|
46
|
+
const content = await fetchRes.text();
|
|
47
|
+
return {
|
|
48
|
+
content,
|
|
49
|
+
isTimedOut: false,
|
|
50
|
+
status: fetchRes.status,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
return {
|
|
55
|
+
status: 0,
|
|
56
|
+
content: getErrorMessage(error, 'Socket timeout'),
|
|
57
|
+
isTimedOut: isAbortError(error),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return { send };
|
|
65
62
|
}
|
|
66
63
|
|
|
67
64
|
exports.createFetchRequester = createFetchRequester;
|
|
@@ -1,63 +1,62 @@
|
|
|
1
|
-
function isAbortError(error) {
|
|
2
|
-
return error instanceof Error && error.name === 'AbortError';
|
|
3
|
-
}
|
|
4
|
-
function getErrorMessage(error, abortContent) {
|
|
5
|
-
if (isAbortError(error)) {
|
|
6
|
-
return abortContent;
|
|
7
|
-
}
|
|
8
|
-
return error instanceof Error ? error.message : 'Network request failed';
|
|
9
|
-
}
|
|
10
|
-
function createFetchRequester({ requesterOptions = {}, } = {}) {
|
|
11
|
-
async function send(request) {
|
|
12
|
-
const abortController = new AbortController();
|
|
13
|
-
const signal = abortController.signal;
|
|
14
|
-
const createTimeout = (timeout) => {
|
|
15
|
-
return setTimeout(() => {
|
|
16
|
-
abortController.abort();
|
|
17
|
-
}, timeout);
|
|
18
|
-
};
|
|
19
|
-
const connectTimeout = createTimeout(request.connectTimeout);
|
|
20
|
-
let fetchRes;
|
|
21
|
-
try {
|
|
22
|
-
fetchRes = await fetch(request.url, {
|
|
23
|
-
method: request.method,
|
|
24
|
-
body: request.data || null,
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
...
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
}
|
|
60
|
-
return { send };
|
|
1
|
+
function isAbortError(error) {
|
|
2
|
+
return error instanceof Error && error.name === 'AbortError';
|
|
3
|
+
}
|
|
4
|
+
function getErrorMessage(error, abortContent) {
|
|
5
|
+
if (isAbortError(error)) {
|
|
6
|
+
return abortContent;
|
|
7
|
+
}
|
|
8
|
+
return error instanceof Error ? error.message : 'Network request failed';
|
|
9
|
+
}
|
|
10
|
+
function createFetchRequester({ requesterOptions = {}, } = {}) {
|
|
11
|
+
async function send(request) {
|
|
12
|
+
const abortController = new AbortController();
|
|
13
|
+
const signal = abortController.signal;
|
|
14
|
+
const createTimeout = (timeout) => {
|
|
15
|
+
return setTimeout(() => {
|
|
16
|
+
abortController.abort();
|
|
17
|
+
}, timeout);
|
|
18
|
+
};
|
|
19
|
+
const connectTimeout = createTimeout(request.connectTimeout);
|
|
20
|
+
let fetchRes;
|
|
21
|
+
try {
|
|
22
|
+
fetchRes = await fetch(request.url, {
|
|
23
|
+
method: request.method,
|
|
24
|
+
body: request.data || null,
|
|
25
|
+
redirect: 'manual',
|
|
26
|
+
signal,
|
|
27
|
+
...requesterOptions,
|
|
28
|
+
headers: {
|
|
29
|
+
...requesterOptions.headers,
|
|
30
|
+
...request.headers,
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
return {
|
|
36
|
+
status: 0,
|
|
37
|
+
content: getErrorMessage(error, 'Connection timeout'),
|
|
38
|
+
isTimedOut: isAbortError(error),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
clearTimeout(connectTimeout);
|
|
42
|
+
createTimeout(request.responseTimeout);
|
|
43
|
+
try {
|
|
44
|
+
const content = await fetchRes.text();
|
|
45
|
+
return {
|
|
46
|
+
content,
|
|
47
|
+
isTimedOut: false,
|
|
48
|
+
status: fetchRes.status,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
return {
|
|
53
|
+
status: 0,
|
|
54
|
+
content: getErrorMessage(error, 'Socket timeout'),
|
|
55
|
+
isTimedOut: isAbortError(error),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return { send };
|
|
61
60
|
}
|
|
62
61
|
|
|
63
62
|
export { createFetchRequester };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { Requester } from '@algolia/client-common';
|
|
2
|
-
export
|
|
3
|
-
readonly requesterOptions?: RequestInit;
|
|
4
|
-
};
|
|
5
|
-
export declare function createFetchRequester({ requesterOptions, }?: FetchRequesterOptions): Requester;
|
|
1
|
+
import type { Requester } from '@algolia/client-common';
|
|
2
|
+
export type FetchRequesterOptions = {
|
|
3
|
+
readonly requesterOptions?: RequestInit;
|
|
4
|
+
};
|
|
5
|
+
export declare function createFetchRequester({ requesterOptions, }?: FetchRequesterOptions): Requester;
|
|
6
6
|
//# sourceMappingURL=createFetchRequester.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createFetchRequester.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"createFetchRequester.d.ts","sourceRoot":"","sources":["../../src/createFetchRequester.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,SAAS,EAEV,MAAM,wBAAwB,CAAC;AAahC,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,WAAW,CAAC;CACzC,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,EACnC,gBAAqB,GACtB,GAAE,qBAA0B,GAAG,SAAS,CAwDxC"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@algolia/requester-fetch",
|
|
3
|
-
"version": "5.0.0-alpha.
|
|
3
|
+
"version": "5.0.0-alpha.100",
|
|
4
4
|
"description": "Promise-based request library using Fetch.",
|
|
5
5
|
"repository": "algolia/algoliasearch-client-javascript",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "Algolia",
|
|
8
|
-
"
|
|
8
|
+
"type": "module",
|
|
9
|
+
"main": "dist/requester-fetch.cjs",
|
|
9
10
|
"module": "dist/requester-fetch.esm.node.js",
|
|
10
11
|
"types": "dist/index.d.ts",
|
|
11
12
|
"files": [
|
|
@@ -14,20 +15,23 @@
|
|
|
14
15
|
"index.ts"
|
|
15
16
|
],
|
|
16
17
|
"scripts": {
|
|
17
|
-
"
|
|
18
|
+
"build": "yarn clean && rollup --config",
|
|
19
|
+
"clean": "rm -rf ./dist || true",
|
|
18
20
|
"test": "jest"
|
|
19
21
|
},
|
|
20
22
|
"dependencies": {
|
|
21
|
-
"@algolia/client-common": "5.0.0-alpha.
|
|
23
|
+
"@algolia/client-common": "5.0.0-alpha.100"
|
|
22
24
|
},
|
|
23
25
|
"devDependencies": {
|
|
24
|
-
"@
|
|
25
|
-
"@
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"
|
|
26
|
+
"@babel/preset-env": "7.23.9",
|
|
27
|
+
"@babel/preset-typescript": "7.23.3",
|
|
28
|
+
"@types/jest": "29.5.11",
|
|
29
|
+
"@types/node": "20.11.0",
|
|
30
|
+
"cross-fetch": "4.0.0",
|
|
31
|
+
"jest": "29.7.0",
|
|
32
|
+
"nock": "13.5.1",
|
|
33
|
+
"ts-jest": "29.1.2",
|
|
34
|
+
"typescript": "5.3.3"
|
|
31
35
|
},
|
|
32
36
|
"engines": {
|
|
33
37
|
"node": ">= 14.0.0"
|
|
@@ -95,8 +95,8 @@ describe('status code handling', () => {
|
|
|
95
95
|
// create a test response stream that is chunked inside a unicode character
|
|
96
96
|
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
|
97
97
|
function* generate() {
|
|
98
|
-
yield data.
|
|
99
|
-
yield data.
|
|
98
|
+
yield data.subarray(0, 3);
|
|
99
|
+
yield data.subarray(3);
|
|
100
100
|
}
|
|
101
101
|
|
|
102
102
|
const testStream = Readable.from(generate());
|
|
@@ -130,14 +130,14 @@ describe('timeout handling', () => {
|
|
|
130
130
|
const response = await requester.send({
|
|
131
131
|
...timeoutRequest,
|
|
132
132
|
connectTimeout: 1000,
|
|
133
|
-
url: 'http://
|
|
133
|
+
url: 'http://localhost:1111/connection_timeout',
|
|
134
134
|
});
|
|
135
135
|
|
|
136
136
|
const now = Date.now();
|
|
137
137
|
|
|
138
138
|
expect(response.content).toBe('Connection timeout');
|
|
139
|
-
expect(now - before).
|
|
140
|
-
expect(now - before).
|
|
139
|
+
expect(now - before).toBeGreaterThanOrEqual(999);
|
|
140
|
+
expect(now - before).toBeLessThanOrEqual(1200);
|
|
141
141
|
});
|
|
142
142
|
|
|
143
143
|
it('connection timeouts with the given 2 seconds connection timeout', async () => {
|
|
@@ -145,14 +145,14 @@ describe('timeout handling', () => {
|
|
|
145
145
|
const response = await requester.send({
|
|
146
146
|
...timeoutRequest,
|
|
147
147
|
connectTimeout: 2000,
|
|
148
|
-
url: 'http://
|
|
148
|
+
url: 'http://localhost:1111/connection_timeout',
|
|
149
149
|
});
|
|
150
150
|
|
|
151
151
|
const now = Date.now();
|
|
152
152
|
|
|
153
153
|
expect(response.content).toBe('Connection timeout');
|
|
154
|
-
expect(now - before).
|
|
155
|
-
expect(now - before).
|
|
154
|
+
expect(now - before).toBeGreaterThanOrEqual(1999);
|
|
155
|
+
expect(now - before).toBeLessThanOrEqual(2200);
|
|
156
156
|
});
|
|
157
157
|
|
|
158
158
|
it("socket timeouts if response don't appears before the timeout with 2 seconds timeout", async () => {
|
|
@@ -167,8 +167,8 @@ describe('timeout handling', () => {
|
|
|
167
167
|
const now = Date.now();
|
|
168
168
|
|
|
169
169
|
expect(response.content).toBe('Socket timeout');
|
|
170
|
-
expect(now - before).
|
|
171
|
-
expect(now - before).
|
|
170
|
+
expect(now - before).toBeGreaterThanOrEqual(1999);
|
|
171
|
+
expect(now - before).toBeLessThanOrEqual(2200);
|
|
172
172
|
});
|
|
173
173
|
|
|
174
174
|
it("socket timeouts if response don't appears before the timeout with 3 seconds timeout", async () => {
|
|
@@ -182,8 +182,8 @@ describe('timeout handling', () => {
|
|
|
182
182
|
const now = Date.now();
|
|
183
183
|
|
|
184
184
|
expect(response.content).toBe('Socket timeout');
|
|
185
|
-
expect(now - before).
|
|
186
|
-
expect(now - before).
|
|
185
|
+
expect(now - before).toBeGreaterThanOrEqual(2999);
|
|
186
|
+
expect(now - before).toBeLessThanOrEqual(3200);
|
|
187
187
|
});
|
|
188
188
|
|
|
189
189
|
it('do not timeouts if response appears before the timeout', async () => {
|
|
@@ -199,8 +199,8 @@ describe('timeout handling', () => {
|
|
|
199
199
|
expect(response.isTimedOut).toBe(false);
|
|
200
200
|
expect(response.status).toBe(200);
|
|
201
201
|
expect(response.content).toBe('{"foo": "bar"}');
|
|
202
|
-
expect(now - before).
|
|
203
|
-
expect(now - before).
|
|
202
|
+
expect(now - before).toBeGreaterThanOrEqual(4999);
|
|
203
|
+
expect(now - before).toBeLessThanOrEqual(5200);
|
|
204
204
|
}, 10000); // This is a long-running test, default server timeout is set to 5000ms
|
|
205
205
|
});
|
|
206
206
|
|