@loopback/http-caching-proxy 5.0.0 → 5.1.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.
|
@@ -8,8 +8,8 @@ exports.HttpCachingProxy = void 0;
|
|
|
8
8
|
const tslib_1 = require("tslib");
|
|
9
9
|
const axios_1 = tslib_1.__importDefault(require("axios"));
|
|
10
10
|
const debug_1 = tslib_1.__importDefault(require("debug"));
|
|
11
|
-
const
|
|
12
|
-
const
|
|
11
|
+
const node_events_1 = require("node:events");
|
|
12
|
+
const node_http_1 = require("node:http");
|
|
13
13
|
const cacache = require('cacache');
|
|
14
14
|
const debug = (0, debug_1.default)('loopback:http-caching-proxy');
|
|
15
15
|
const DEFAULT_OPTIONS = {
|
|
@@ -40,7 +40,7 @@ class HttpCachingProxy {
|
|
|
40
40
|
* Start listening.
|
|
41
41
|
*/
|
|
42
42
|
async start() {
|
|
43
|
-
this._server = (0,
|
|
43
|
+
this._server = (0, node_http_1.createServer)((request, response) => {
|
|
44
44
|
this._handle(request, response);
|
|
45
45
|
});
|
|
46
46
|
this._server.on('connect', (req, socket) => {
|
|
@@ -49,7 +49,7 @@ class HttpCachingProxy {
|
|
|
49
49
|
socket.destroy();
|
|
50
50
|
});
|
|
51
51
|
this._server.listen(this._options.port);
|
|
52
|
-
await (0,
|
|
52
|
+
await (0, node_events_1.once)(this._server, 'listening');
|
|
53
53
|
const address = this._server.address();
|
|
54
54
|
this.url = `http://127.0.0.1:${address.port}`;
|
|
55
55
|
}
|
|
@@ -63,7 +63,7 @@ class HttpCachingProxy {
|
|
|
63
63
|
const server = this._server;
|
|
64
64
|
this._server = undefined;
|
|
65
65
|
server.close();
|
|
66
|
-
await (0,
|
|
66
|
+
await (0, node_events_1.once)(server, 'close');
|
|
67
67
|
}
|
|
68
68
|
_handle(request, response) {
|
|
69
69
|
const onerror = (error) => {
|
|
@@ -123,6 +123,8 @@ class HttpCachingProxy {
|
|
|
123
123
|
responseType: 'arraybuffer',
|
|
124
124
|
timeout: this._options.timeout || undefined,
|
|
125
125
|
});
|
|
126
|
+
// If not removed, returns an "Expected http/" error.
|
|
127
|
+
delete backendResponse.headers['content-length'];
|
|
126
128
|
debug('Got response for %s %s -> %s', clientRequest.method, clientRequest.url, backendResponse.status, backendResponse.headers, backendResponse.data);
|
|
127
129
|
const metadata = {
|
|
128
130
|
statusCode: backendResponse.status,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-caching-proxy.js","sourceRoot":"","sources":["../src/http-caching-proxy.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,4CAA4C;AAC5C,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,
|
|
1
|
+
{"version":3,"file":"http-caching-proxy.js","sourceRoot":"","sources":["../src/http-caching-proxy.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,4CAA4C;AAC5C,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,0DAA2C;AAC3C,0DAAiC;AACjC,6CAAiC;AACjC,yCAMmB;AAGnB,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;AAEnC,MAAM,KAAK,GAAG,IAAA,eAAY,EAAC,6BAA6B,CAAC,CAAC;AAiC1D,MAAM,eAAe,GAAG;IACtB,IAAI,EAAE,CAAC;IACP,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;IACxB,QAAQ,EAAE,IAAI;IACd,OAAO,EAAE,CAAC;CACX,CAAC;AAQF;;GAEG;AACH,MAAa,gBAAgB;IAW3B,YAAY,OAAqB;QAC/B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;QAC5D,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE;YAC5B,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;SACzD;QACD,IAAI,CAAC,GAAG,GAAG,0BAA0B,CAAC;QACtC,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,eAAK,CAAC,MAAM,CAAC;YACzB,yEAAyE;YACzE,uEAAuE;YACvE,qDAAqD;YACrD,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI;SAC3B,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,OAAO,GAAG,IAAA,wBAAY,EACzB,CAAC,OAAwB,EAAE,QAAwB,EAAE,EAAE;YACrD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAClC,CAAC,CACF,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;YACzC,4BAA4B;YAC5B,MAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;YACrD,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,IAAA,kBAAI,EAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAEtC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAiB,CAAC;QACtD,IAAI,CAAC,GAAG,GAAG,oBAAoB,OAAO,CAAC,IAAI,EAAE,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAE1B,IAAI,CAAC,GAAG,GAAG,0BAA0B,CAAC;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QAEzB,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,IAAA,kBAAI,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,CAAC;IAEO,OAAO,CAAC,OAAwB,EAAE,QAAwB;QAChE,MAAM,OAAO,GAAG,CAAC,KAAY,EAAE,EAAE;YAC/B,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC9B,8DAA8D;YAC9D,QAAQ,CAAC,UAAU,GAAI,KAAa,CAAC,UAAU,IAAI,GAAG,CAAC;YACvD,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAClD,CAAC,CAAC;QAEF,IAAI;YACF,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;SACrD;QAAC,OAAO,GAAG,EAAE;YACZ,OAAO,CAAC,GAAG,CAAC,CAAC;SACd;IACH,CAAC;IAEO,KAAK,CAAC,YAAY,CACxB,OAAwB,EACxB,QAAwB;QAExB,KAAK,CACH,wBAAwB,EACxB,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,GAAG,EACX,OAAO,CAAC,OAAO,CAChB,CAAC;QAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAE5C,IAAI;YACF,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YACnE,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE;gBAC7D,KAAK,CAAC,gCAAgC,EAAE,QAAQ,CAAC,CAAC;gBAClD,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBAC5D,OAAO;aACR;YACD,KAAK,CAAC,4BAA4B,EAAE,QAAQ,CAAC,CAAC;YAC9C,oCAAoC;SACrC;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;gBAC3B,OAAO,CAAC,IAAI,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;aAClD;YACD,KAAK,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;YACrC,oCAAoC;SACrC;QAED,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC;IAEO,YAAY,CAAC,OAAwB;QAC3C,+DAA+D;QAC/D,OAAO,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC5C,CAAC;IAEO,gBAAgB,CACtB,IAAY,EACZ,QAAwB,EACxB,QAAwB;QAExB,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC1D,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IAEO,KAAK,CAAC,eAAe,CAC3B,aAA8B,EAC9B,cAA8B;QAE9B,KAAK,CAAC,0BAA0B,EAAE,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;QAE3E,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC;YACxC,MAAM,EAAE,aAAa,CAAC,MAAM;YAC5B,GAAG,EAAE,aAAa,CAAC,GAAI;YACvB,OAAO,EAAE,aAAa,CAAC,OAAO;YAC9B,IAAI,EAAE,aAAa;YACnB,qEAAqE;YACrE,kCAAkC;YAClC,6DAA6D;YAC7D,+BAA+B;YAC/B,YAAY,EAAE,aAAa;YAC3B,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,SAAS;SAC5C,CAAC,CAAC;QAEH,qDAAqD;QACrD,OAAO,eAAe,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAEjD,KAAK,CACH,8BAA8B,EAC9B,aAAa,CAAC,MAAM,EACpB,aAAa,CAAC,GAAG,EACjB,eAAe,CAAC,MAAM,EACtB,eAAe,CAAC,OAAO,EACvB,eAAe,CAAC,IAAI,CACrB,CAAC;QAEF,MAAM,QAAQ,GAAmB;YAC/B,UAAU,EAAE,eAAe,CAAC,MAAM;YAClC,OAAO,EAAE,eAAe,CAAC,OAA8B;YACvD,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;QAEF,uDAAuD;QACvD,2CAA2C;QAC3C,4BAA4B;QAC5B,oCAAoC;QACpC,6DAA6D;QAC7D,qDAAqD;QACrD,wCAAwC;QACxC,6DAA6D;QAC7D,4DAA4D;QAC5D,sCAAsC;QAEtC,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC;QAElC,MAAM,OAAO,CAAC,GAAG,CACf,IAAI,CAAC,QAAQ,CAAC,SAAS,EACvB,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,EAChC,IAAI,EACJ,EAAC,QAAQ,EAAC,CACX,CAAC;QAEF,cAAc,CAAC,SAAS,CACtB,eAAe,CAAC,MAAM,EACtB,eAAe,CAAC,OAA8B,CAC/C,CAAC;QACF,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAEM,QAAQ,CAAC,OAAwB,EAAE,KAAY;;QACpD,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;YAC1B,OAAO,CAAC,KAAK,CACX,qBAAqB,EACrB,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,GAAG,EACX,MAAA,KAAK,CAAC,KAAK,mCAAI,KAAK,CACrB,CAAC;SACH;aAAM;YACL,KAAK,CACH,qBAAqB,EACrB,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,GAAG,EACX,MAAA,KAAK,CAAC,KAAK,mCAAI,KAAK,CACrB,CAAC;SACH;IACH,CAAC;CACF;AA9MD,4CA8MC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loopback/http-caching-proxy",
|
|
3
3
|
"description": "A caching HTTP proxy for integration tests. NOT SUITABLE FOR PRODUCTION USE!",
|
|
4
|
-
"version": "5.
|
|
4
|
+
"version": "5.1.0",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"LoopBack",
|
|
7
7
|
"HTTP",
|
|
@@ -39,22 +39,22 @@
|
|
|
39
39
|
"!*/__tests__"
|
|
40
40
|
],
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"axios": "^
|
|
43
|
-
"cacache": "^17.1.
|
|
42
|
+
"axios": "^1.4.0",
|
|
43
|
+
"cacache": "^17.1.3",
|
|
44
44
|
"debug": "^4.3.4",
|
|
45
|
-
"rimraf": "^5.0.
|
|
46
|
-
"tslib": "^2.
|
|
45
|
+
"rimraf": "^5.0.1",
|
|
46
|
+
"tslib": "^2.6.0"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
|
-
"@loopback/build": "^10.
|
|
50
|
-
"@loopback/eslint-config": "^14.0.
|
|
51
|
-
"@loopback/testlab": "^6.
|
|
52
|
-
"@types/debug": "^4.1.
|
|
53
|
-
"@types/node": "^
|
|
49
|
+
"@loopback/build": "^10.1.0",
|
|
50
|
+
"@loopback/eslint-config": "^14.0.1",
|
|
51
|
+
"@loopback/testlab": "^6.1.0",
|
|
52
|
+
"@types/debug": "^4.1.8",
|
|
53
|
+
"@types/node": "^16.18.37",
|
|
54
54
|
"@types/rimraf": "^3.0.2",
|
|
55
55
|
"@types/tunnel": "0.0.3",
|
|
56
56
|
"delay": "^5.0.0",
|
|
57
57
|
"tunnel": "0.0.6"
|
|
58
58
|
},
|
|
59
|
-
"gitHead": "
|
|
59
|
+
"gitHead": "10a8fa7fbd00ac77c4aee3e7f40884b07fe1919c"
|
|
60
60
|
}
|
|
@@ -3,17 +3,17 @@
|
|
|
3
3
|
// This file is licensed under the MIT License.
|
|
4
4
|
// License text available at https://opensource.org/licenses/MIT
|
|
5
5
|
|
|
6
|
-
import axios, {AxiosInstance
|
|
6
|
+
import axios, {AxiosInstance} from 'axios';
|
|
7
7
|
import debugFactory from 'debug';
|
|
8
|
-
import {once} from 'events';
|
|
8
|
+
import {once} from 'node:events';
|
|
9
9
|
import {
|
|
10
10
|
createServer,
|
|
11
11
|
IncomingMessage,
|
|
12
12
|
OutgoingHttpHeaders,
|
|
13
13
|
Server as HttpServer,
|
|
14
14
|
ServerResponse,
|
|
15
|
-
} from 'http';
|
|
16
|
-
import {AddressInfo} from 'net';
|
|
15
|
+
} from 'node:http';
|
|
16
|
+
import {AddressInfo} from 'node:net';
|
|
17
17
|
|
|
18
18
|
const cacache = require('cacache');
|
|
19
19
|
|
|
@@ -198,9 +198,9 @@ export class HttpCachingProxy {
|
|
|
198
198
|
debug('Forward request to %s %s', clientRequest.method, clientRequest.url);
|
|
199
199
|
|
|
200
200
|
const backendResponse = await this._axios({
|
|
201
|
-
method: clientRequest.method
|
|
201
|
+
method: clientRequest.method,
|
|
202
202
|
url: clientRequest.url!,
|
|
203
|
-
headers: clientRequest.headers
|
|
203
|
+
headers: clientRequest.headers,
|
|
204
204
|
data: clientRequest,
|
|
205
205
|
// Set the response type to `arraybuffer` to force the `data` to be a
|
|
206
206
|
// Buffer to allow ease of caching
|
|
@@ -210,6 +210,9 @@ export class HttpCachingProxy {
|
|
|
210
210
|
timeout: this._options.timeout || undefined,
|
|
211
211
|
});
|
|
212
212
|
|
|
213
|
+
// If not removed, returns an "Expected http/" error.
|
|
214
|
+
delete backendResponse.headers['content-length'];
|
|
215
|
+
|
|
213
216
|
debug(
|
|
214
217
|
'Got response for %s %s -> %s',
|
|
215
218
|
clientRequest.method,
|
|
@@ -221,7 +224,7 @@ export class HttpCachingProxy {
|
|
|
221
224
|
|
|
222
225
|
const metadata: CachedMetadata = {
|
|
223
226
|
statusCode: backendResponse.status,
|
|
224
|
-
headers: backendResponse.headers,
|
|
227
|
+
headers: backendResponse.headers as OutgoingHttpHeaders,
|
|
225
228
|
createdAt: Date.now(),
|
|
226
229
|
};
|
|
227
230
|
|
|
@@ -245,7 +248,10 @@ export class HttpCachingProxy {
|
|
|
245
248
|
{metadata},
|
|
246
249
|
);
|
|
247
250
|
|
|
248
|
-
clientResponse.writeHead(
|
|
251
|
+
clientResponse.writeHead(
|
|
252
|
+
backendResponse.status,
|
|
253
|
+
backendResponse.headers as OutgoingHttpHeaders,
|
|
254
|
+
);
|
|
249
255
|
clientResponse.end(data);
|
|
250
256
|
}
|
|
251
257
|
|