@algolia/requester-fetch 4.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/requester-fetch.cjs.js +73 -0
- package/dist/requester-fetch.d.ts +9 -0
- package/dist/requester-fetch.esm.js +69 -0
- package/index.js +2 -0
- package/package.json +22 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
function isAbortError(error) {
|
|
6
|
+
return error instanceof Error && error.name === 'AbortError';
|
|
7
|
+
}
|
|
8
|
+
function getErrorMessage(error, abortContent) {
|
|
9
|
+
if (isAbortError(error)) {
|
|
10
|
+
return abortContent;
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
return error instanceof Error ? error.message : 'Network request failed';
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
function createFetchRequester({ requesterOptions = {}, } = {}) {
|
|
17
|
+
return {
|
|
18
|
+
async send(request) {
|
|
19
|
+
const abortController = new AbortController();
|
|
20
|
+
const signal = abortController.signal;
|
|
21
|
+
const createTimeout = (timeout) => {
|
|
22
|
+
return setTimeout(() => {
|
|
23
|
+
abortController.abort();
|
|
24
|
+
}, timeout * 1000);
|
|
25
|
+
};
|
|
26
|
+
const connectTimeout = createTimeout(request.connectTimeout);
|
|
27
|
+
// eslint-disable-next-line functional/no-let
|
|
28
|
+
let fetchRes;
|
|
29
|
+
// eslint-disable-next-line functional/no-try-statement
|
|
30
|
+
try {
|
|
31
|
+
fetchRes = await fetch(request.url, {
|
|
32
|
+
...requesterOptions,
|
|
33
|
+
method: request.method,
|
|
34
|
+
headers: {
|
|
35
|
+
...(requesterOptions.headers || {}),
|
|
36
|
+
...request.headers,
|
|
37
|
+
},
|
|
38
|
+
body: request.data || null,
|
|
39
|
+
mode: 'cors',
|
|
40
|
+
redirect: 'manual',
|
|
41
|
+
signal,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
return {
|
|
46
|
+
status: 0,
|
|
47
|
+
content: getErrorMessage(error, 'Connection timeout'),
|
|
48
|
+
isTimedOut: isAbortError(error),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
clearTimeout(connectTimeout);
|
|
52
|
+
createTimeout(request.responseTimeout);
|
|
53
|
+
// eslint-disable-next-line functional/no-try-statement
|
|
54
|
+
try {
|
|
55
|
+
const content = await fetchRes.text();
|
|
56
|
+
return {
|
|
57
|
+
content,
|
|
58
|
+
isTimedOut: false,
|
|
59
|
+
status: fetchRes.status,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
return {
|
|
64
|
+
status: 0,
|
|
65
|
+
content: getErrorMessage(error, 'Socket timeout'),
|
|
66
|
+
isTimedOut: isAbortError(error),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
exports.createFetchRequester = createFetchRequester;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Requester } from '@algolia/requester-common';
|
|
2
|
+
|
|
3
|
+
export declare function createFetchRequester({ requesterOptions, }?: FetchRequesterOptions): Requester;
|
|
4
|
+
|
|
5
|
+
export declare type FetchRequesterOptions = {
|
|
6
|
+
readonly requesterOptions?: RequestInit;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export { }
|
|
@@ -0,0 +1,69 @@
|
|
|
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
|
+
else {
|
|
9
|
+
return error instanceof Error ? error.message : 'Network request failed';
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
function createFetchRequester({ requesterOptions = {}, } = {}) {
|
|
13
|
+
return {
|
|
14
|
+
async send(request) {
|
|
15
|
+
const abortController = new AbortController();
|
|
16
|
+
const signal = abortController.signal;
|
|
17
|
+
const createTimeout = (timeout) => {
|
|
18
|
+
return setTimeout(() => {
|
|
19
|
+
abortController.abort();
|
|
20
|
+
}, timeout * 1000);
|
|
21
|
+
};
|
|
22
|
+
const connectTimeout = createTimeout(request.connectTimeout);
|
|
23
|
+
// eslint-disable-next-line functional/no-let
|
|
24
|
+
let fetchRes;
|
|
25
|
+
// eslint-disable-next-line functional/no-try-statement
|
|
26
|
+
try {
|
|
27
|
+
fetchRes = await fetch(request.url, {
|
|
28
|
+
...requesterOptions,
|
|
29
|
+
method: request.method,
|
|
30
|
+
headers: {
|
|
31
|
+
...(requesterOptions.headers || {}),
|
|
32
|
+
...request.headers,
|
|
33
|
+
},
|
|
34
|
+
body: request.data || null,
|
|
35
|
+
mode: 'cors',
|
|
36
|
+
redirect: 'manual',
|
|
37
|
+
signal,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
return {
|
|
42
|
+
status: 0,
|
|
43
|
+
content: getErrorMessage(error, 'Connection timeout'),
|
|
44
|
+
isTimedOut: isAbortError(error),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
clearTimeout(connectTimeout);
|
|
48
|
+
createTimeout(request.responseTimeout);
|
|
49
|
+
// eslint-disable-next-line functional/no-try-statement
|
|
50
|
+
try {
|
|
51
|
+
const content = await fetchRes.text();
|
|
52
|
+
return {
|
|
53
|
+
content,
|
|
54
|
+
isTimedOut: false,
|
|
55
|
+
status: fetchRes.status,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
return {
|
|
60
|
+
status: 0,
|
|
61
|
+
content: getErrorMessage(error, 'Socket timeout'),
|
|
62
|
+
isTimedOut: isAbortError(error),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export { createFetchRequester };
|
package/index.js
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@algolia/requester-fetch",
|
|
3
|
+
"version": "4.14.0",
|
|
4
|
+
"private": false,
|
|
5
|
+
"description": "Promise-based request library for Fetch.",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git://github.com/algolia/algoliasearch-client-javascript.git"
|
|
9
|
+
},
|
|
10
|
+
"license": "MIT",
|
|
11
|
+
"sideEffects": false,
|
|
12
|
+
"main": "index.js",
|
|
13
|
+
"module": "dist/requester-fetch.esm.js",
|
|
14
|
+
"types": "dist/requester-fetch.d.ts",
|
|
15
|
+
"files": [
|
|
16
|
+
"index.js",
|
|
17
|
+
"dist"
|
|
18
|
+
],
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"@algolia/requester-common": "4.14.0"
|
|
21
|
+
}
|
|
22
|
+
}
|