@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.
@@ -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
@@ -0,0 +1,2 @@
1
+ // eslint-disable-next-line functional/immutable-data, import/no-commonjs
2
+ module.exports = require('./dist/requester-fetch.cjs.js');
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
+ }