@httptoolkit/httpolyglot 3.0.0 → 3.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.
- package/dist/index.d.ts +9 -4
- package/dist/index.js +10 -7
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
- package/src/index.ts +17 -4
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
/// <reference types="node" />
|
|
3
|
-
/// <reference types="node" />
|
|
4
|
-
/// <reference types="node" />
|
|
5
1
|
import * as net from 'net';
|
|
6
2
|
import * as tls from 'tls';
|
|
7
3
|
import * as http from 'http';
|
|
8
4
|
import * as https from 'https';
|
|
5
|
+
import * as http2 from 'http2';
|
|
9
6
|
export interface HttpolyglotOptions {
|
|
10
7
|
/**
|
|
11
8
|
* Enable support for incoming TLS connections. If a TLS configuration is provided, this will
|
|
@@ -20,6 +17,14 @@ export interface HttpolyglotOptions {
|
|
|
20
17
|
* be emitted as 'connection' events on this server.
|
|
21
18
|
*/
|
|
22
19
|
socks?: net.Server;
|
|
20
|
+
/**
|
|
21
|
+
* Options to pass to the underlying http.Server constructor.
|
|
22
|
+
*/
|
|
23
|
+
http?: http.ServerOptions;
|
|
24
|
+
/**
|
|
25
|
+
* Options to pass to the underlying http2.createServer call.
|
|
26
|
+
*/
|
|
27
|
+
http2?: http2.ServerOptions;
|
|
23
28
|
/**
|
|
24
29
|
* A custom handler for unknown protocols. If provided, any unrecognized protocol sockets will
|
|
25
30
|
* be emitted on this server as 'connection' events. If not provided, the default behavior is to
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createServer =
|
|
3
|
+
exports.createServer = createServer;
|
|
4
4
|
const net = require("net");
|
|
5
5
|
const tls = require("tls");
|
|
6
6
|
const http = require("http");
|
|
@@ -67,8 +67,8 @@ class Server extends net.Server {
|
|
|
67
67
|
// methods from `http.METHODS`, and `BIND` is an included HTTP method.
|
|
68
68
|
const boundListener = Function.prototype.bind.call(requestListener, this);
|
|
69
69
|
// Create subservers for each supported protocol:
|
|
70
|
-
this._httpServer = new http.Server(boundListener);
|
|
71
|
-
this._http2Server = http2.createServer({}, boundListener);
|
|
70
|
+
this._httpServer = new http.Server(config.http ?? {}, boundListener);
|
|
71
|
+
this._http2Server = http2.createServer(config.http2 ?? {}, boundListener);
|
|
72
72
|
if (config.tls) {
|
|
73
73
|
if (config.tls instanceof tls.Server) {
|
|
74
74
|
// If we've been given a preconfigured TLS server, we use that directly, and
|
|
@@ -147,15 +147,19 @@ class Server extends net.Server {
|
|
|
147
147
|
}
|
|
148
148
|
}
|
|
149
149
|
tlsListener(tlsSocket) {
|
|
150
|
-
|
|
151
|
-
|
|
150
|
+
// We trust recognized ALPN protocols if explicitly provided by the client:
|
|
151
|
+
if (tlsSocket.alpnProtocol === 'http/1.1' || // Modern HTTP/1.1 ALPN client
|
|
152
152
|
tlsSocket.alpnProtocol === 'http 1.1' // Broken ALPN client (e.g. https-proxy-agent)
|
|
153
153
|
) {
|
|
154
154
|
this._httpServer.emit('connection', tlsSocket);
|
|
155
155
|
}
|
|
156
|
-
else {
|
|
156
|
+
else if (tlsSocket.alpnProtocol === 'h2') {
|
|
157
157
|
this._http2Server.emit('connection', tlsSocket);
|
|
158
158
|
}
|
|
159
|
+
else {
|
|
160
|
+
// If not provided, we unwrap & sniff again:
|
|
161
|
+
this.connectionListener(tlsSocket);
|
|
162
|
+
}
|
|
159
163
|
}
|
|
160
164
|
http2Listener(socket, pastData) {
|
|
161
165
|
const h1Server = this._httpServer;
|
|
@@ -207,6 +211,5 @@ function createServer(configOrListener, listener) {
|
|
|
207
211
|
}
|
|
208
212
|
return new Server(config, requestListener);
|
|
209
213
|
}
|
|
210
|
-
exports.createServer = createServer;
|
|
211
214
|
;
|
|
212
215
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@httptoolkit/httpolyglot",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.1.0",
|
|
4
4
|
"author": "Tim Perry <tim@httptoolkit.com>",
|
|
5
5
|
"description": "Serve http and https connections over the same port with node.js",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -38,10 +38,10 @@
|
|
|
38
38
|
"@types/chai": "^4.2.21",
|
|
39
39
|
"@types/mocha": "^9.0.0",
|
|
40
40
|
"chai": "^4.3.4",
|
|
41
|
-
"mocha": "^
|
|
41
|
+
"mocha": "^11.7.4",
|
|
42
42
|
"rimraf": "^3.0.2",
|
|
43
43
|
"socks": "^2.8.4",
|
|
44
44
|
"ts-node": "^10.2.1",
|
|
45
|
-
"typescript": "^
|
|
45
|
+
"typescript": "^5.9.3"
|
|
46
46
|
}
|
|
47
47
|
}
|
package/src/index.ts
CHANGED
|
@@ -67,6 +67,16 @@ export interface HttpolyglotOptions {
|
|
|
67
67
|
*/
|
|
68
68
|
socks?: net.Server;
|
|
69
69
|
|
|
70
|
+
/**
|
|
71
|
+
* Options to pass to the underlying http.Server constructor.
|
|
72
|
+
*/
|
|
73
|
+
http?: http.ServerOptions;
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Options to pass to the underlying http2.createServer call.
|
|
77
|
+
*/
|
|
78
|
+
http2?: http2.ServerOptions;
|
|
79
|
+
|
|
70
80
|
/**
|
|
71
81
|
* A custom handler for unknown protocols. If provided, any unrecognized protocol sockets will
|
|
72
82
|
* be emitted on this server as 'connection' events. If not provided, the default behavior is to
|
|
@@ -112,8 +122,8 @@ class Server extends net.Server {
|
|
|
112
122
|
const boundListener = Function.prototype.bind.call(requestListener, this);
|
|
113
123
|
|
|
114
124
|
// Create subservers for each supported protocol:
|
|
115
|
-
this._httpServer = new http.Server(boundListener);
|
|
116
|
-
this._http2Server = http2.createServer({}, boundListener as any as Http2Listener);
|
|
125
|
+
this._httpServer = new http.Server(config.http ?? {}, boundListener);
|
|
126
|
+
this._http2Server = http2.createServer(config.http2 ?? {}, boundListener as any as Http2Listener);
|
|
117
127
|
|
|
118
128
|
if (config.tls) {
|
|
119
129
|
if (config.tls instanceof tls.Server) {
|
|
@@ -194,14 +204,17 @@ class Server extends net.Server {
|
|
|
194
204
|
}
|
|
195
205
|
|
|
196
206
|
private tlsListener(tlsSocket: tls.TLSSocket) {
|
|
207
|
+
// We trust recognized ALPN protocols if explicitly provided by the client:
|
|
197
208
|
if (
|
|
198
|
-
tlsSocket.alpnProtocol === false || // Old non-ALPN client
|
|
199
209
|
tlsSocket.alpnProtocol === 'http/1.1' || // Modern HTTP/1.1 ALPN client
|
|
200
210
|
tlsSocket.alpnProtocol === 'http 1.1' // Broken ALPN client (e.g. https-proxy-agent)
|
|
201
211
|
) {
|
|
202
212
|
this._httpServer.emit('connection', tlsSocket);
|
|
203
|
-
} else {
|
|
213
|
+
} else if (tlsSocket.alpnProtocol === 'h2') {
|
|
204
214
|
this._http2Server.emit('connection', tlsSocket);
|
|
215
|
+
} else {
|
|
216
|
+
// If not provided, we unwrap & sniff again:
|
|
217
|
+
this.connectionListener(tlsSocket);
|
|
205
218
|
}
|
|
206
219
|
}
|
|
207
220
|
|