@algolia/requester-node-http 5.2.4 → 5.3.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.http.cjs +128 -0
- package/dist/requester.http.cjs.map +1 -0
- package/dist/requester.http.d.cts +18 -0
- package/dist/requester.http.d.ts +18 -0
- package/dist/requester.http.js +90 -0
- package/dist/requester.http.js.map +1 -0
- package/package.json +21 -7
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +0 -1
- package/dist/requester-node-http.cjs +0 -85
- package/dist/requester-node-http.esm.node.js +0 -82
- package/dist/src/createHttpRequester.d.ts +0 -14
- package/dist/src/createHttpRequester.d.ts.map +0 -1
- package/dist/src/echoRequester.d.ts +0 -3
- package/dist/src/echoRequester.d.ts.map +0 -1
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// index.ts
|
|
31
|
+
var requester_node_http_exports = {};
|
|
32
|
+
__export(requester_node_http_exports, {
|
|
33
|
+
createHttpRequester: () => createHttpRequester,
|
|
34
|
+
echoRequester: () => echoRequester
|
|
35
|
+
});
|
|
36
|
+
module.exports = __toCommonJS(requester_node_http_exports);
|
|
37
|
+
|
|
38
|
+
// src/echoRequester.ts
|
|
39
|
+
var import_url = require("url");
|
|
40
|
+
var import_client_common = require("@algolia/client-common");
|
|
41
|
+
function echoRequester(status = 200) {
|
|
42
|
+
return (0, import_client_common.createEchoRequester)({ getURL: (url) => new import_url.URL(url), status });
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// src/createHttpRequester.ts
|
|
46
|
+
var import_http = __toESM(require("http"), 1);
|
|
47
|
+
var import_https = __toESM(require("https"), 1);
|
|
48
|
+
var import_url2 = require("url");
|
|
49
|
+
var agentOptions = { keepAlive: true };
|
|
50
|
+
var defaultHttpAgent = new import_http.default.Agent(agentOptions);
|
|
51
|
+
var defaultHttpsAgent = new import_https.default.Agent(agentOptions);
|
|
52
|
+
function createHttpRequester({
|
|
53
|
+
agent: userGlobalAgent,
|
|
54
|
+
httpAgent: userHttpAgent,
|
|
55
|
+
httpsAgent: userHttpsAgent,
|
|
56
|
+
requesterOptions = {}
|
|
57
|
+
} = {}) {
|
|
58
|
+
const httpAgent = userHttpAgent || userGlobalAgent || defaultHttpAgent;
|
|
59
|
+
const httpsAgent = userHttpsAgent || userGlobalAgent || defaultHttpsAgent;
|
|
60
|
+
function send(request) {
|
|
61
|
+
return new Promise((resolve) => {
|
|
62
|
+
let responseTimeout;
|
|
63
|
+
let connectTimeout;
|
|
64
|
+
const url = new import_url2.URL(request.url);
|
|
65
|
+
const path = url.search === null ? url.pathname : `${url.pathname}${url.search}`;
|
|
66
|
+
const options = {
|
|
67
|
+
agent: url.protocol === "https:" ? httpsAgent : httpAgent,
|
|
68
|
+
hostname: url.hostname,
|
|
69
|
+
path,
|
|
70
|
+
method: request.method,
|
|
71
|
+
...requesterOptions,
|
|
72
|
+
headers: {
|
|
73
|
+
...request.headers,
|
|
74
|
+
...requesterOptions.headers
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
if (url.port && !requesterOptions.port) {
|
|
78
|
+
options.port = url.port;
|
|
79
|
+
}
|
|
80
|
+
const req = (url.protocol === "https:" ? import_https.default : import_http.default).request(options, (response) => {
|
|
81
|
+
let contentBuffers = [];
|
|
82
|
+
response.on("data", (chunk) => {
|
|
83
|
+
contentBuffers = contentBuffers.concat(chunk);
|
|
84
|
+
});
|
|
85
|
+
response.on("end", () => {
|
|
86
|
+
clearTimeout(connectTimeout);
|
|
87
|
+
clearTimeout(responseTimeout);
|
|
88
|
+
resolve({
|
|
89
|
+
status: response.statusCode || 0,
|
|
90
|
+
content: Buffer.concat(contentBuffers).toString(),
|
|
91
|
+
isTimedOut: false
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
const createTimeout = (timeout, content) => {
|
|
96
|
+
return setTimeout(() => {
|
|
97
|
+
req.destroy();
|
|
98
|
+
resolve({
|
|
99
|
+
status: 0,
|
|
100
|
+
content,
|
|
101
|
+
isTimedOut: true
|
|
102
|
+
});
|
|
103
|
+
}, timeout);
|
|
104
|
+
};
|
|
105
|
+
connectTimeout = createTimeout(request.connectTimeout, "Connection timeout");
|
|
106
|
+
req.on("error", (error) => {
|
|
107
|
+
clearTimeout(connectTimeout);
|
|
108
|
+
clearTimeout(responseTimeout);
|
|
109
|
+
resolve({ status: 0, content: error.message, isTimedOut: false });
|
|
110
|
+
});
|
|
111
|
+
req.once("response", () => {
|
|
112
|
+
clearTimeout(connectTimeout);
|
|
113
|
+
responseTimeout = createTimeout(request.responseTimeout, "Socket timeout");
|
|
114
|
+
});
|
|
115
|
+
if (request.data !== void 0) {
|
|
116
|
+
req.write(request.data);
|
|
117
|
+
}
|
|
118
|
+
req.end();
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
return { send };
|
|
122
|
+
}
|
|
123
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
124
|
+
0 && (module.exports = {
|
|
125
|
+
createHttpRequester,
|
|
126
|
+
echoRequester
|
|
127
|
+
});
|
|
128
|
+
//# sourceMappingURL=requester.http.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../index.ts","../src/echoRequester.ts","../src/createHttpRequester.ts"],"sourcesContent":["export * from './src/echoRequester';\nexport * from './src/createHttpRequester';\n","import { URL } from 'url';\n\nimport { createEchoRequester } from '@algolia/client-common';\nimport type { Requester } from '@algolia/client-common';\n\nexport function echoRequester(status: number = 200): Requester {\n return createEchoRequester({ getURL: (url: string) => new URL(url), status });\n}\n","import http from 'http';\nimport https from 'https';\nimport { URL } from 'url';\n\nimport type { EndRequest, Requester, Response } from '@algolia/client-common';\n\nexport type CreateHttpRequesterOptions = Partial<{\n agent: http.Agent | https.Agent;\n httpAgent: http.Agent;\n httpsAgent: https.Agent;\n /**\n * RequestOptions to be merged with the end request, it will override default options if provided.\n */\n requesterOptions: https.RequestOptions;\n}>;\n\n// Global agents allow us to reuse the TCP protocol with multiple clients\nconst agentOptions = { keepAlive: true };\nconst defaultHttpAgent = new http.Agent(agentOptions);\nconst defaultHttpsAgent = new https.Agent(agentOptions);\n\nexport function createHttpRequester({\n agent: userGlobalAgent,\n httpAgent: userHttpAgent,\n httpsAgent: userHttpsAgent,\n requesterOptions = {},\n}: CreateHttpRequesterOptions = {}): Requester {\n const httpAgent = userHttpAgent || userGlobalAgent || defaultHttpAgent;\n const httpsAgent = userHttpsAgent || userGlobalAgent || defaultHttpsAgent;\n\n function send(request: EndRequest): Promise<Response> {\n return new Promise((resolve) => {\n let responseTimeout: NodeJS.Timeout | undefined;\n // eslint-disable-next-line prefer-const -- linter thinks this is not reassigned\n let connectTimeout: NodeJS.Timeout | undefined;\n const url = new URL(request.url);\n const path = url.search === null ? url.pathname : `${url.pathname}${url.search}`;\n const options: https.RequestOptions = {\n agent: url.protocol === 'https:' ? httpsAgent : httpAgent,\n hostname: url.hostname,\n path,\n method: request.method,\n ...requesterOptions,\n headers: {\n ...request.headers,\n ...requesterOptions.headers,\n },\n };\n\n if (url.port && !requesterOptions.port) {\n options.port = url.port;\n }\n\n const req = (url.protocol === 'https:' ? https : http).request(options, (response) => {\n let contentBuffers: Buffer[] = [];\n\n response.on('data', (chunk) => {\n contentBuffers = contentBuffers.concat(chunk);\n });\n\n response.on('end', () => {\n clearTimeout(connectTimeout as NodeJS.Timeout);\n clearTimeout(responseTimeout as NodeJS.Timeout);\n\n resolve({\n status: response.statusCode || 0,\n content: Buffer.concat(contentBuffers).toString(),\n isTimedOut: false,\n });\n });\n });\n\n const createTimeout = (timeout: number, content: string): NodeJS.Timeout => {\n return setTimeout(() => {\n req.destroy();\n\n resolve({\n status: 0,\n content,\n isTimedOut: true,\n });\n }, timeout);\n };\n\n connectTimeout = createTimeout(request.connectTimeout, 'Connection timeout');\n\n req.on('error', (error) => {\n clearTimeout(connectTimeout as NodeJS.Timeout);\n clearTimeout(responseTimeout!);\n resolve({ status: 0, content: error.message, isTimedOut: false });\n });\n\n req.once('response', () => {\n clearTimeout(connectTimeout as NodeJS.Timeout);\n responseTimeout = createTimeout(request.responseTimeout, 'Socket timeout');\n });\n\n if (request.data !== undefined) {\n req.write(request.data);\n }\n\n req.end();\n });\n }\n\n return { send };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,iBAAoB;AAEpB,2BAAoC;AAG7B,SAAS,cAAc,SAAiB,KAAgB;AAC7D,aAAO,0CAAoB,EAAE,QAAQ,CAAC,QAAgB,IAAI,eAAI,GAAG,GAAG,OAAO,CAAC;AAC9E;;;ACPA,kBAAiB;AACjB,mBAAkB;AAClB,IAAAA,cAAoB;AAepB,IAAM,eAAe,EAAE,WAAW,KAAK;AACvC,IAAM,mBAAmB,IAAI,YAAAC,QAAK,MAAM,YAAY;AACpD,IAAM,oBAAoB,IAAI,aAAAC,QAAM,MAAM,YAAY;AAE/C,SAAS,oBAAoB;AAAA,EAClC,OAAO;AAAA,EACP,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,mBAAmB,CAAC;AACtB,IAAgC,CAAC,GAAc;AAC7C,QAAM,YAAY,iBAAiB,mBAAmB;AACtD,QAAM,aAAa,kBAAkB,mBAAmB;AAExD,WAAS,KAAK,SAAwC;AACpD,WAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAI;AAEJ,UAAI;AACJ,YAAM,MAAM,IAAI,gBAAI,QAAQ,GAAG;AAC/B,YAAM,OAAO,IAAI,WAAW,OAAO,IAAI,WAAW,GAAG,IAAI,QAAQ,GAAG,IAAI,MAAM;AAC9E,YAAM,UAAgC;AAAA,QACpC,OAAO,IAAI,aAAa,WAAW,aAAa;AAAA,QAChD,UAAU,IAAI;AAAA,QACd;AAAA,QACA,QAAQ,QAAQ;AAAA,QAChB,GAAG;AAAA,QACH,SAAS;AAAA,UACP,GAAG,QAAQ;AAAA,UACX,GAAG,iBAAiB;AAAA,QACtB;AAAA,MACF;AAEA,UAAI,IAAI,QAAQ,CAAC,iBAAiB,MAAM;AACtC,gBAAQ,OAAO,IAAI;AAAA,MACrB;AAEA,YAAM,OAAO,IAAI,aAAa,WAAW,aAAAA,UAAQ,YAAAD,SAAM,QAAQ,SAAS,CAAC,aAAa;AACpF,YAAI,iBAA2B,CAAC;AAEhC,iBAAS,GAAG,QAAQ,CAAC,UAAU;AAC7B,2BAAiB,eAAe,OAAO,KAAK;AAAA,QAC9C,CAAC;AAED,iBAAS,GAAG,OAAO,MAAM;AACvB,uBAAa,cAAgC;AAC7C,uBAAa,eAAiC;AAE9C,kBAAQ;AAAA,YACN,QAAQ,SAAS,cAAc;AAAA,YAC/B,SAAS,OAAO,OAAO,cAAc,EAAE,SAAS;AAAA,YAChD,YAAY;AAAA,UACd,CAAC;AAAA,QACH,CAAC;AAAA,MACH,CAAC;AAED,YAAM,gBAAgB,CAAC,SAAiB,YAAoC;AAC1E,eAAO,WAAW,MAAM;AACtB,cAAI,QAAQ;AAEZ,kBAAQ;AAAA,YACN,QAAQ;AAAA,YACR;AAAA,YACA,YAAY;AAAA,UACd,CAAC;AAAA,QACH,GAAG,OAAO;AAAA,MACZ;AAEA,uBAAiB,cAAc,QAAQ,gBAAgB,oBAAoB;AAE3E,UAAI,GAAG,SAAS,CAAC,UAAU;AACzB,qBAAa,cAAgC;AAC7C,qBAAa,eAAgB;AAC7B,gBAAQ,EAAE,QAAQ,GAAG,SAAS,MAAM,SAAS,YAAY,MAAM,CAAC;AAAA,MAClE,CAAC;AAED,UAAI,KAAK,YAAY,MAAM;AACzB,qBAAa,cAAgC;AAC7C,0BAAkB,cAAc,QAAQ,iBAAiB,gBAAgB;AAAA,MAC3E,CAAC;AAED,UAAI,QAAQ,SAAS,QAAW;AAC9B,YAAI,MAAM,QAAQ,IAAI;AAAA,MACxB;AAEA,UAAI,IAAI;AAAA,IACV,CAAC;AAAA,EACH;AAEA,SAAO,EAAE,KAAK;AAChB;","names":["import_url","http","https"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Requester } from '@algolia/client-common';
|
|
2
|
+
import http from 'http';
|
|
3
|
+
import https from 'https';
|
|
4
|
+
|
|
5
|
+
declare function echoRequester(status?: number): Requester;
|
|
6
|
+
|
|
7
|
+
type CreateHttpRequesterOptions = Partial<{
|
|
8
|
+
agent: http.Agent | https.Agent;
|
|
9
|
+
httpAgent: http.Agent;
|
|
10
|
+
httpsAgent: https.Agent;
|
|
11
|
+
/**
|
|
12
|
+
* RequestOptions to be merged with the end request, it will override default options if provided.
|
|
13
|
+
*/
|
|
14
|
+
requesterOptions: https.RequestOptions;
|
|
15
|
+
}>;
|
|
16
|
+
declare function createHttpRequester({ agent: userGlobalAgent, httpAgent: userHttpAgent, httpsAgent: userHttpsAgent, requesterOptions, }?: CreateHttpRequesterOptions): Requester;
|
|
17
|
+
|
|
18
|
+
export { type CreateHttpRequesterOptions, createHttpRequester, echoRequester };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Requester } from '@algolia/client-common';
|
|
2
|
+
import http from 'http';
|
|
3
|
+
import https from 'https';
|
|
4
|
+
|
|
5
|
+
declare function echoRequester(status?: number): Requester;
|
|
6
|
+
|
|
7
|
+
type CreateHttpRequesterOptions = Partial<{
|
|
8
|
+
agent: http.Agent | https.Agent;
|
|
9
|
+
httpAgent: http.Agent;
|
|
10
|
+
httpsAgent: https.Agent;
|
|
11
|
+
/**
|
|
12
|
+
* RequestOptions to be merged with the end request, it will override default options if provided.
|
|
13
|
+
*/
|
|
14
|
+
requesterOptions: https.RequestOptions;
|
|
15
|
+
}>;
|
|
16
|
+
declare function createHttpRequester({ agent: userGlobalAgent, httpAgent: userHttpAgent, httpsAgent: userHttpsAgent, requesterOptions, }?: CreateHttpRequesterOptions): Requester;
|
|
17
|
+
|
|
18
|
+
export { type CreateHttpRequesterOptions, createHttpRequester, echoRequester };
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
// src/echoRequester.ts
|
|
2
|
+
import { URL } from "url";
|
|
3
|
+
import { createEchoRequester } from "@algolia/client-common";
|
|
4
|
+
function echoRequester(status = 200) {
|
|
5
|
+
return createEchoRequester({ getURL: (url) => new URL(url), status });
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
// src/createHttpRequester.ts
|
|
9
|
+
import http from "http";
|
|
10
|
+
import https from "https";
|
|
11
|
+
import { URL as URL2 } from "url";
|
|
12
|
+
var agentOptions = { keepAlive: true };
|
|
13
|
+
var defaultHttpAgent = new http.Agent(agentOptions);
|
|
14
|
+
var defaultHttpsAgent = new https.Agent(agentOptions);
|
|
15
|
+
function createHttpRequester({
|
|
16
|
+
agent: userGlobalAgent,
|
|
17
|
+
httpAgent: userHttpAgent,
|
|
18
|
+
httpsAgent: userHttpsAgent,
|
|
19
|
+
requesterOptions = {}
|
|
20
|
+
} = {}) {
|
|
21
|
+
const httpAgent = userHttpAgent || userGlobalAgent || defaultHttpAgent;
|
|
22
|
+
const httpsAgent = userHttpsAgent || userGlobalAgent || defaultHttpsAgent;
|
|
23
|
+
function send(request) {
|
|
24
|
+
return new Promise((resolve) => {
|
|
25
|
+
let responseTimeout;
|
|
26
|
+
let connectTimeout;
|
|
27
|
+
const url = new URL2(request.url);
|
|
28
|
+
const path = url.search === null ? url.pathname : `${url.pathname}${url.search}`;
|
|
29
|
+
const options = {
|
|
30
|
+
agent: url.protocol === "https:" ? httpsAgent : httpAgent,
|
|
31
|
+
hostname: url.hostname,
|
|
32
|
+
path,
|
|
33
|
+
method: request.method,
|
|
34
|
+
...requesterOptions,
|
|
35
|
+
headers: {
|
|
36
|
+
...request.headers,
|
|
37
|
+
...requesterOptions.headers
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
if (url.port && !requesterOptions.port) {
|
|
41
|
+
options.port = url.port;
|
|
42
|
+
}
|
|
43
|
+
const req = (url.protocol === "https:" ? https : http).request(options, (response) => {
|
|
44
|
+
let contentBuffers = [];
|
|
45
|
+
response.on("data", (chunk) => {
|
|
46
|
+
contentBuffers = contentBuffers.concat(chunk);
|
|
47
|
+
});
|
|
48
|
+
response.on("end", () => {
|
|
49
|
+
clearTimeout(connectTimeout);
|
|
50
|
+
clearTimeout(responseTimeout);
|
|
51
|
+
resolve({
|
|
52
|
+
status: response.statusCode || 0,
|
|
53
|
+
content: Buffer.concat(contentBuffers).toString(),
|
|
54
|
+
isTimedOut: false
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
const createTimeout = (timeout, content) => {
|
|
59
|
+
return setTimeout(() => {
|
|
60
|
+
req.destroy();
|
|
61
|
+
resolve({
|
|
62
|
+
status: 0,
|
|
63
|
+
content,
|
|
64
|
+
isTimedOut: true
|
|
65
|
+
});
|
|
66
|
+
}, timeout);
|
|
67
|
+
};
|
|
68
|
+
connectTimeout = createTimeout(request.connectTimeout, "Connection timeout");
|
|
69
|
+
req.on("error", (error) => {
|
|
70
|
+
clearTimeout(connectTimeout);
|
|
71
|
+
clearTimeout(responseTimeout);
|
|
72
|
+
resolve({ status: 0, content: error.message, isTimedOut: false });
|
|
73
|
+
});
|
|
74
|
+
req.once("response", () => {
|
|
75
|
+
clearTimeout(connectTimeout);
|
|
76
|
+
responseTimeout = createTimeout(request.responseTimeout, "Socket timeout");
|
|
77
|
+
});
|
|
78
|
+
if (request.data !== void 0) {
|
|
79
|
+
req.write(request.data);
|
|
80
|
+
}
|
|
81
|
+
req.end();
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
return { send };
|
|
85
|
+
}
|
|
86
|
+
export {
|
|
87
|
+
createHttpRequester,
|
|
88
|
+
echoRequester
|
|
89
|
+
};
|
|
90
|
+
//# sourceMappingURL=requester.http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/echoRequester.ts","../src/createHttpRequester.ts"],"sourcesContent":["import { URL } from 'url';\n\nimport { createEchoRequester } from '@algolia/client-common';\nimport type { Requester } from '@algolia/client-common';\n\nexport function echoRequester(status: number = 200): Requester {\n return createEchoRequester({ getURL: (url: string) => new URL(url), status });\n}\n","import http from 'http';\nimport https from 'https';\nimport { URL } from 'url';\n\nimport type { EndRequest, Requester, Response } from '@algolia/client-common';\n\nexport type CreateHttpRequesterOptions = Partial<{\n agent: http.Agent | https.Agent;\n httpAgent: http.Agent;\n httpsAgent: https.Agent;\n /**\n * RequestOptions to be merged with the end request, it will override default options if provided.\n */\n requesterOptions: https.RequestOptions;\n}>;\n\n// Global agents allow us to reuse the TCP protocol with multiple clients\nconst agentOptions = { keepAlive: true };\nconst defaultHttpAgent = new http.Agent(agentOptions);\nconst defaultHttpsAgent = new https.Agent(agentOptions);\n\nexport function createHttpRequester({\n agent: userGlobalAgent,\n httpAgent: userHttpAgent,\n httpsAgent: userHttpsAgent,\n requesterOptions = {},\n}: CreateHttpRequesterOptions = {}): Requester {\n const httpAgent = userHttpAgent || userGlobalAgent || defaultHttpAgent;\n const httpsAgent = userHttpsAgent || userGlobalAgent || defaultHttpsAgent;\n\n function send(request: EndRequest): Promise<Response> {\n return new Promise((resolve) => {\n let responseTimeout: NodeJS.Timeout | undefined;\n // eslint-disable-next-line prefer-const -- linter thinks this is not reassigned\n let connectTimeout: NodeJS.Timeout | undefined;\n const url = new URL(request.url);\n const path = url.search === null ? url.pathname : `${url.pathname}${url.search}`;\n const options: https.RequestOptions = {\n agent: url.protocol === 'https:' ? httpsAgent : httpAgent,\n hostname: url.hostname,\n path,\n method: request.method,\n ...requesterOptions,\n headers: {\n ...request.headers,\n ...requesterOptions.headers,\n },\n };\n\n if (url.port && !requesterOptions.port) {\n options.port = url.port;\n }\n\n const req = (url.protocol === 'https:' ? https : http).request(options, (response) => {\n let contentBuffers: Buffer[] = [];\n\n response.on('data', (chunk) => {\n contentBuffers = contentBuffers.concat(chunk);\n });\n\n response.on('end', () => {\n clearTimeout(connectTimeout as NodeJS.Timeout);\n clearTimeout(responseTimeout as NodeJS.Timeout);\n\n resolve({\n status: response.statusCode || 0,\n content: Buffer.concat(contentBuffers).toString(),\n isTimedOut: false,\n });\n });\n });\n\n const createTimeout = (timeout: number, content: string): NodeJS.Timeout => {\n return setTimeout(() => {\n req.destroy();\n\n resolve({\n status: 0,\n content,\n isTimedOut: true,\n });\n }, timeout);\n };\n\n connectTimeout = createTimeout(request.connectTimeout, 'Connection timeout');\n\n req.on('error', (error) => {\n clearTimeout(connectTimeout as NodeJS.Timeout);\n clearTimeout(responseTimeout!);\n resolve({ status: 0, content: error.message, isTimedOut: false });\n });\n\n req.once('response', () => {\n clearTimeout(connectTimeout as NodeJS.Timeout);\n responseTimeout = createTimeout(request.responseTimeout, 'Socket timeout');\n });\n\n if (request.data !== undefined) {\n req.write(request.data);\n }\n\n req.end();\n });\n }\n\n return { send };\n}\n"],"mappings":";AAAA,SAAS,WAAW;AAEpB,SAAS,2BAA2B;AAG7B,SAAS,cAAc,SAAiB,KAAgB;AAC7D,SAAO,oBAAoB,EAAE,QAAQ,CAAC,QAAgB,IAAI,IAAI,GAAG,GAAG,OAAO,CAAC;AAC9E;;;ACPA,OAAO,UAAU;AACjB,OAAO,WAAW;AAClB,SAAS,OAAAA,YAAW;AAepB,IAAM,eAAe,EAAE,WAAW,KAAK;AACvC,IAAM,mBAAmB,IAAI,KAAK,MAAM,YAAY;AACpD,IAAM,oBAAoB,IAAI,MAAM,MAAM,YAAY;AAE/C,SAAS,oBAAoB;AAAA,EAClC,OAAO;AAAA,EACP,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,mBAAmB,CAAC;AACtB,IAAgC,CAAC,GAAc;AAC7C,QAAM,YAAY,iBAAiB,mBAAmB;AACtD,QAAM,aAAa,kBAAkB,mBAAmB;AAExD,WAAS,KAAK,SAAwC;AACpD,WAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAI;AAEJ,UAAI;AACJ,YAAM,MAAM,IAAIA,KAAI,QAAQ,GAAG;AAC/B,YAAM,OAAO,IAAI,WAAW,OAAO,IAAI,WAAW,GAAG,IAAI,QAAQ,GAAG,IAAI,MAAM;AAC9E,YAAM,UAAgC;AAAA,QACpC,OAAO,IAAI,aAAa,WAAW,aAAa;AAAA,QAChD,UAAU,IAAI;AAAA,QACd;AAAA,QACA,QAAQ,QAAQ;AAAA,QAChB,GAAG;AAAA,QACH,SAAS;AAAA,UACP,GAAG,QAAQ;AAAA,UACX,GAAG,iBAAiB;AAAA,QACtB;AAAA,MACF;AAEA,UAAI,IAAI,QAAQ,CAAC,iBAAiB,MAAM;AACtC,gBAAQ,OAAO,IAAI;AAAA,MACrB;AAEA,YAAM,OAAO,IAAI,aAAa,WAAW,QAAQ,MAAM,QAAQ,SAAS,CAAC,aAAa;AACpF,YAAI,iBAA2B,CAAC;AAEhC,iBAAS,GAAG,QAAQ,CAAC,UAAU;AAC7B,2BAAiB,eAAe,OAAO,KAAK;AAAA,QAC9C,CAAC;AAED,iBAAS,GAAG,OAAO,MAAM;AACvB,uBAAa,cAAgC;AAC7C,uBAAa,eAAiC;AAE9C,kBAAQ;AAAA,YACN,QAAQ,SAAS,cAAc;AAAA,YAC/B,SAAS,OAAO,OAAO,cAAc,EAAE,SAAS;AAAA,YAChD,YAAY;AAAA,UACd,CAAC;AAAA,QACH,CAAC;AAAA,MACH,CAAC;AAED,YAAM,gBAAgB,CAAC,SAAiB,YAAoC;AAC1E,eAAO,WAAW,MAAM;AACtB,cAAI,QAAQ;AAEZ,kBAAQ;AAAA,YACN,QAAQ;AAAA,YACR;AAAA,YACA,YAAY;AAAA,UACd,CAAC;AAAA,QACH,GAAG,OAAO;AAAA,MACZ;AAEA,uBAAiB,cAAc,QAAQ,gBAAgB,oBAAoB;AAE3E,UAAI,GAAG,SAAS,CAAC,UAAU;AACzB,qBAAa,cAAgC;AAC7C,qBAAa,eAAgB;AAC7B,gBAAQ,EAAE,QAAQ,GAAG,SAAS,MAAM,SAAS,YAAY,MAAM,CAAC;AAAA,MAClE,CAAC;AAED,UAAI,KAAK,YAAY,MAAM;AACzB,qBAAa,cAAgC;AAC7C,0BAAkB,cAAc,QAAQ,iBAAiB,gBAAgB;AAAA,MAC3E,CAAC;AAED,UAAI,QAAQ,SAAS,QAAW;AAC9B,YAAI,MAAM,QAAQ,IAAI;AAAA,MACxB;AAEA,UAAI,IAAI;AAAA,IACV,CAAC;AAAA,EACH;AAEA,SAAO,EAAE,KAAK;AAChB;","names":["URL"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@algolia/requester-node-http",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.3.0",
|
|
4
4
|
"description": "Promise-based request library for node using the native http module.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -9,30 +9,44 @@
|
|
|
9
9
|
"license": "MIT",
|
|
10
10
|
"author": "Algolia",
|
|
11
11
|
"type": "module",
|
|
12
|
-
"main": "dist/requester-node-http.cjs",
|
|
13
|
-
"module": "dist/requester-node-http.esm.node.js",
|
|
14
|
-
"types": "dist/index.d.ts",
|
|
15
12
|
"files": [
|
|
16
13
|
"dist",
|
|
17
14
|
"src",
|
|
18
15
|
"index.ts"
|
|
19
16
|
],
|
|
17
|
+
"exports": {
|
|
18
|
+
".": {
|
|
19
|
+
"types": {
|
|
20
|
+
"import": "./dist/requester.http.d.ts",
|
|
21
|
+
"module": "./dist/requester.http.d.ts",
|
|
22
|
+
"require": "./dist/requester.http.d.cts"
|
|
23
|
+
},
|
|
24
|
+
"import": "./dist/requester.http.js",
|
|
25
|
+
"module": "./dist/requester.http.js",
|
|
26
|
+
"require": "./dist/requester.http.cjs"
|
|
27
|
+
},
|
|
28
|
+
"./src/*": "./src/*.ts"
|
|
29
|
+
},
|
|
20
30
|
"scripts": {
|
|
21
|
-
"build": "yarn clean &&
|
|
31
|
+
"build": "yarn clean && yarn tsup",
|
|
22
32
|
"clean": "rm -rf ./dist || true",
|
|
23
|
-
"test": "jest"
|
|
33
|
+
"test": "jest",
|
|
34
|
+
"test:bundle": "publint . && attw --pack ."
|
|
24
35
|
},
|
|
25
36
|
"dependencies": {
|
|
26
|
-
"@algolia/client-common": "5.
|
|
37
|
+
"@algolia/client-common": "5.3.0"
|
|
27
38
|
},
|
|
28
39
|
"devDependencies": {
|
|
40
|
+
"@arethetypeswrong/cli": "0.15.4",
|
|
29
41
|
"@babel/preset-env": "7.25.4",
|
|
30
42
|
"@babel/preset-typescript": "7.24.7",
|
|
31
43
|
"@types/jest": "29.5.12",
|
|
32
44
|
"@types/node": "22.5.1",
|
|
33
45
|
"jest": "29.7.0",
|
|
34
46
|
"nock": "13.5.5",
|
|
47
|
+
"publint": "0.2.10",
|
|
35
48
|
"ts-jest": "29.2.5",
|
|
49
|
+
"tsup": "8.2.4",
|
|
36
50
|
"typescript": "5.5.4"
|
|
37
51
|
},
|
|
38
52
|
"engines": {
|
package/dist/index.d.ts
DELETED
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC"}
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var url = require('url');
|
|
4
|
-
var clientCommon = require('@algolia/client-common');
|
|
5
|
-
var http = require('http');
|
|
6
|
-
var https = require('https');
|
|
7
|
-
|
|
8
|
-
function echoRequester(status = 200) {
|
|
9
|
-
return clientCommon.createEchoRequester({ getURL: (url$1) => new url.URL(url$1), status });
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
// Global agents allow us to reuse the TCP protocol with multiple clients
|
|
13
|
-
const agentOptions = { keepAlive: true };
|
|
14
|
-
const defaultHttpAgent = new http.Agent(agentOptions);
|
|
15
|
-
const defaultHttpsAgent = new https.Agent(agentOptions);
|
|
16
|
-
function createHttpRequester({ agent: userGlobalAgent, httpAgent: userHttpAgent, httpsAgent: userHttpsAgent, requesterOptions = {}, } = {}) {
|
|
17
|
-
const httpAgent = userHttpAgent || userGlobalAgent || defaultHttpAgent;
|
|
18
|
-
const httpsAgent = userHttpsAgent || userGlobalAgent || defaultHttpsAgent;
|
|
19
|
-
function send(request) {
|
|
20
|
-
return new Promise((resolve) => {
|
|
21
|
-
let responseTimeout;
|
|
22
|
-
// eslint-disable-next-line prefer-const -- linter thinks this is not reassigned
|
|
23
|
-
let connectTimeout;
|
|
24
|
-
const url$1 = new url.URL(request.url);
|
|
25
|
-
const path = url$1.search === null ? url$1.pathname : `${url$1.pathname}${url$1.search}`;
|
|
26
|
-
const options = {
|
|
27
|
-
agent: url$1.protocol === 'https:' ? httpsAgent : httpAgent,
|
|
28
|
-
hostname: url$1.hostname,
|
|
29
|
-
path,
|
|
30
|
-
method: request.method,
|
|
31
|
-
...requesterOptions,
|
|
32
|
-
headers: {
|
|
33
|
-
...request.headers,
|
|
34
|
-
...requesterOptions.headers,
|
|
35
|
-
},
|
|
36
|
-
};
|
|
37
|
-
if (url$1.port && !requesterOptions.port) {
|
|
38
|
-
options.port = url$1.port;
|
|
39
|
-
}
|
|
40
|
-
const req = (url$1.protocol === 'https:' ? https : http).request(options, (response) => {
|
|
41
|
-
let contentBuffers = [];
|
|
42
|
-
response.on('data', (chunk) => {
|
|
43
|
-
contentBuffers = contentBuffers.concat(chunk);
|
|
44
|
-
});
|
|
45
|
-
response.on('end', () => {
|
|
46
|
-
clearTimeout(connectTimeout);
|
|
47
|
-
clearTimeout(responseTimeout);
|
|
48
|
-
resolve({
|
|
49
|
-
status: response.statusCode || 0,
|
|
50
|
-
content: Buffer.concat(contentBuffers).toString(),
|
|
51
|
-
isTimedOut: false,
|
|
52
|
-
});
|
|
53
|
-
});
|
|
54
|
-
});
|
|
55
|
-
const createTimeout = (timeout, content) => {
|
|
56
|
-
return setTimeout(() => {
|
|
57
|
-
req.destroy();
|
|
58
|
-
resolve({
|
|
59
|
-
status: 0,
|
|
60
|
-
content,
|
|
61
|
-
isTimedOut: true,
|
|
62
|
-
});
|
|
63
|
-
}, timeout);
|
|
64
|
-
};
|
|
65
|
-
connectTimeout = createTimeout(request.connectTimeout, 'Connection timeout');
|
|
66
|
-
req.on('error', (error) => {
|
|
67
|
-
clearTimeout(connectTimeout);
|
|
68
|
-
clearTimeout(responseTimeout);
|
|
69
|
-
resolve({ status: 0, content: error.message, isTimedOut: false });
|
|
70
|
-
});
|
|
71
|
-
req.once('response', () => {
|
|
72
|
-
clearTimeout(connectTimeout);
|
|
73
|
-
responseTimeout = createTimeout(request.responseTimeout, 'Socket timeout');
|
|
74
|
-
});
|
|
75
|
-
if (request.data !== undefined) {
|
|
76
|
-
req.write(request.data);
|
|
77
|
-
}
|
|
78
|
-
req.end();
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
return { send };
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
exports.createHttpRequester = createHttpRequester;
|
|
85
|
-
exports.echoRequester = echoRequester;
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import { URL } from 'url';
|
|
2
|
-
import { createEchoRequester } from '@algolia/client-common';
|
|
3
|
-
import http from 'http';
|
|
4
|
-
import https from 'https';
|
|
5
|
-
|
|
6
|
-
function echoRequester(status = 200) {
|
|
7
|
-
return createEchoRequester({ getURL: (url) => new URL(url), status });
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
// Global agents allow us to reuse the TCP protocol with multiple clients
|
|
11
|
-
const agentOptions = { keepAlive: true };
|
|
12
|
-
const defaultHttpAgent = new http.Agent(agentOptions);
|
|
13
|
-
const defaultHttpsAgent = new https.Agent(agentOptions);
|
|
14
|
-
function createHttpRequester({ agent: userGlobalAgent, httpAgent: userHttpAgent, httpsAgent: userHttpsAgent, requesterOptions = {}, } = {}) {
|
|
15
|
-
const httpAgent = userHttpAgent || userGlobalAgent || defaultHttpAgent;
|
|
16
|
-
const httpsAgent = userHttpsAgent || userGlobalAgent || defaultHttpsAgent;
|
|
17
|
-
function send(request) {
|
|
18
|
-
return new Promise((resolve) => {
|
|
19
|
-
let responseTimeout;
|
|
20
|
-
// eslint-disable-next-line prefer-const -- linter thinks this is not reassigned
|
|
21
|
-
let connectTimeout;
|
|
22
|
-
const url = new URL(request.url);
|
|
23
|
-
const path = url.search === null ? url.pathname : `${url.pathname}${url.search}`;
|
|
24
|
-
const options = {
|
|
25
|
-
agent: url.protocol === 'https:' ? httpsAgent : httpAgent,
|
|
26
|
-
hostname: url.hostname,
|
|
27
|
-
path,
|
|
28
|
-
method: request.method,
|
|
29
|
-
...requesterOptions,
|
|
30
|
-
headers: {
|
|
31
|
-
...request.headers,
|
|
32
|
-
...requesterOptions.headers,
|
|
33
|
-
},
|
|
34
|
-
};
|
|
35
|
-
if (url.port && !requesterOptions.port) {
|
|
36
|
-
options.port = url.port;
|
|
37
|
-
}
|
|
38
|
-
const req = (url.protocol === 'https:' ? https : http).request(options, (response) => {
|
|
39
|
-
let contentBuffers = [];
|
|
40
|
-
response.on('data', (chunk) => {
|
|
41
|
-
contentBuffers = contentBuffers.concat(chunk);
|
|
42
|
-
});
|
|
43
|
-
response.on('end', () => {
|
|
44
|
-
clearTimeout(connectTimeout);
|
|
45
|
-
clearTimeout(responseTimeout);
|
|
46
|
-
resolve({
|
|
47
|
-
status: response.statusCode || 0,
|
|
48
|
-
content: Buffer.concat(contentBuffers).toString(),
|
|
49
|
-
isTimedOut: false,
|
|
50
|
-
});
|
|
51
|
-
});
|
|
52
|
-
});
|
|
53
|
-
const createTimeout = (timeout, content) => {
|
|
54
|
-
return setTimeout(() => {
|
|
55
|
-
req.destroy();
|
|
56
|
-
resolve({
|
|
57
|
-
status: 0,
|
|
58
|
-
content,
|
|
59
|
-
isTimedOut: true,
|
|
60
|
-
});
|
|
61
|
-
}, timeout);
|
|
62
|
-
};
|
|
63
|
-
connectTimeout = createTimeout(request.connectTimeout, 'Connection timeout');
|
|
64
|
-
req.on('error', (error) => {
|
|
65
|
-
clearTimeout(connectTimeout);
|
|
66
|
-
clearTimeout(responseTimeout);
|
|
67
|
-
resolve({ status: 0, content: error.message, isTimedOut: false });
|
|
68
|
-
});
|
|
69
|
-
req.once('response', () => {
|
|
70
|
-
clearTimeout(connectTimeout);
|
|
71
|
-
responseTimeout = createTimeout(request.responseTimeout, 'Socket timeout');
|
|
72
|
-
});
|
|
73
|
-
if (request.data !== undefined) {
|
|
74
|
-
req.write(request.data);
|
|
75
|
-
}
|
|
76
|
-
req.end();
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
return { send };
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
export { createHttpRequester, echoRequester };
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import http from 'http';
|
|
2
|
-
import https from 'https';
|
|
3
|
-
import type { Requester } from '@algolia/client-common';
|
|
4
|
-
export type CreateHttpRequesterOptions = Partial<{
|
|
5
|
-
agent: http.Agent | https.Agent;
|
|
6
|
-
httpAgent: http.Agent;
|
|
7
|
-
httpsAgent: https.Agent;
|
|
8
|
-
/**
|
|
9
|
-
* RequestOptions to be merged with the end request, it will override default options if provided.
|
|
10
|
-
*/
|
|
11
|
-
requesterOptions: https.RequestOptions;
|
|
12
|
-
}>;
|
|
13
|
-
export declare function createHttpRequester({ agent: userGlobalAgent, httpAgent: userHttpAgent, httpsAgent: userHttpsAgent, requesterOptions, }?: CreateHttpRequesterOptions): Requester;
|
|
14
|
-
//# sourceMappingURL=createHttpRequester.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createHttpRequester.d.ts","sourceRoot":"","sources":["../../src/createHttpRequester.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAc,SAAS,EAAY,MAAM,wBAAwB,CAAC;AAE9E,MAAM,MAAM,0BAA0B,GAAG,OAAO,CAAC;IAC/C,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAChC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC;IACtB,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC;IACxB;;OAEG;IACH,gBAAgB,EAAE,KAAK,CAAC,cAAc,CAAC;CACxC,CAAC,CAAC;AAOH,wBAAgB,mBAAmB,CAAC,EAClC,KAAK,EAAE,eAAe,EACtB,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,cAAc,EAC1B,gBAAqB,GACtB,GAAE,0BAA+B,GAAG,SAAS,CAgF7C"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"echoRequester.d.ts","sourceRoot":"","sources":["../../src/echoRequester.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD,wBAAgB,aAAa,CAAC,MAAM,GAAE,MAAY,GAAG,SAAS,CAE7D"}
|