aboutsummaryrefslogtreecommitdiff
path: root/node_modules/resolve-alpn
diff options
context:
space:
mode:
authorMinteck <nekostarfan@gmail.com>2021-08-24 14:41:48 +0200
committerMinteck <nekostarfan@gmail.com>2021-08-24 14:41:48 +0200
commitd25e11bee6ca5ca523884da132d18e1400e077b9 (patch)
tree8af39fde19f7ed640a60fb397c7edd647dff1c4c /node_modules/resolve-alpn
downloadkartik-iridium-d25e11bee6ca5ca523884da132d18e1400e077b9.tar.gz
kartik-iridium-d25e11bee6ca5ca523884da132d18e1400e077b9.tar.bz2
kartik-iridium-d25e11bee6ca5ca523884da132d18e1400e077b9.zip
Initial commit
Diffstat (limited to 'node_modules/resolve-alpn')
-rw-r--r--node_modules/resolve-alpn/LICENSE22
-rw-r--r--node_modules/resolve-alpn/README.md60
-rw-r--r--node_modules/resolve-alpn/index.js41
-rw-r--r--node_modules/resolve-alpn/package.json34
4 files changed, 157 insertions, 0 deletions
diff --git a/node_modules/resolve-alpn/LICENSE b/node_modules/resolve-alpn/LICENSE
new file mode 100644
index 0000000..f4fe9c4
--- /dev/null
+++ b/node_modules/resolve-alpn/LICENSE
@@ -0,0 +1,22 @@
+MIT License
+
+Copyright (c) 2018 Szymon Marczak
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
diff --git a/node_modules/resolve-alpn/README.md b/node_modules/resolve-alpn/README.md
new file mode 100644
index 0000000..a49950c
--- /dev/null
+++ b/node_modules/resolve-alpn/README.md
@@ -0,0 +1,60 @@
+# `resolve-alpn`
+
+[![Node CI](https://github.com/szmarczak/resolve-alpn/workflows/Node%20CI/badge.svg)](https://github.com/szmarczak/resolve-alpn/actions)
+[![codecov](https://codecov.io/gh/szmarczak/resolve-alpn/branch/master/graph/badge.svg)](https://codecov.io/gh/szmarczak/resolve-alpn)
+
+## API
+
+### resolveALPN(options, connect = tls.connect)
+
+Returns an object with an `alpnProtocol` property. The `socket` property may be also present.
+
+```js
+const result = await resolveALPN({
+ host: 'nghttp2.org',
+ port: 443,
+ ALPNProtocols: ['h2', 'http/1.1'],
+ servername: 'nghttp2.org'
+});
+
+console.log(result); // {alpnProtocol: 'h2'}
+```
+
+**Note:** While the `servername` option is not required in this case, many other servers do. It's best practice to set it anyway.
+
+**Note:** If the socket times out, the promise will resolve and `result.timeout` will be set to `true`.
+
+#### options
+
+Same as [TLS options](https://nodejs.org/api/tls.html#tls_tls_connect_options_callback).
+
+##### options.resolveSocket
+
+By default, the socket gets destroyed and the promise resolves.<br>
+If you set this to true, it will return the socket in a `socket` property.
+
+```js
+const result = await resolveALPN({
+ host: 'nghttp2.org',
+ port: 443,
+ ALPNProtocols: ['h2', 'http/1.1'],
+ servername: 'nghttp2.org',
+ resolveSocket: true
+});
+
+console.log(result); // {alpnProtocol: 'h2', socket: tls.TLSSocket}
+
+// Remember to destroy the socket if you don't use it!
+result.socket.destroy();
+```
+
+#### connect
+
+Type: `Function<TLSSocket> | AsyncFunction<TLSSocket>`\
+Default: [`tls.connect`](https://nodejs.org/dist/latest-v16.x/docs/api/tls.html#tls_tls_connect_options_callback)
+
+**Note:** No matter which function is used (synchronous or asynchronous), it **must** accept a `callback` function as a second argument. The `callback` function gets executed when the socket has successfully connected.
+
+## License
+
+MIT
diff --git a/node_modules/resolve-alpn/index.js b/node_modules/resolve-alpn/index.js
new file mode 100644
index 0000000..1c33d80
--- /dev/null
+++ b/node_modules/resolve-alpn/index.js
@@ -0,0 +1,41 @@
+'use strict';
+const tls = require('tls');
+
+module.exports = (options = {}, connect = tls.connect) => new Promise((resolve, reject) => {
+ let timeout = false;
+
+ let socket;
+
+ const callback = async () => {
+ socket.off('timeout', onTimeout);
+ socket.off('error', reject);
+
+ if (options.resolveSocket) {
+ resolve({alpnProtocol: socket.alpnProtocol, socket, timeout});
+
+ if (timeout) {
+ await Promise.resolve();
+ socket.emit('timeout');
+ }
+ } else {
+ socket.destroy();
+ resolve({alpnProtocol: socket.alpnProtocol, timeout});
+ }
+ };
+
+ const onTimeout = async () => {
+ timeout = true;
+ callback();
+ };
+
+ (async () => {
+ try {
+ socket = await connect(options, callback);
+
+ socket.on('error', reject);
+ socket.once('timeout', onTimeout);
+ } catch (error) {
+ reject(error);
+ }
+ })();
+});
diff --git a/node_modules/resolve-alpn/package.json b/node_modules/resolve-alpn/package.json
new file mode 100644
index 0000000..64a00d4
--- /dev/null
+++ b/node_modules/resolve-alpn/package.json
@@ -0,0 +1,34 @@
+{
+ "name": "resolve-alpn",
+ "version": "1.2.0",
+ "description": "Detects the ALPN protocol",
+ "main": "index.js",
+ "scripts": {
+ "test": "xo && nyc --reporter=lcovonly --reporter=text --reporter=html ava"
+ },
+ "files": [
+ "index.js"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/szmarczak/resolve-alpn.git"
+ },
+ "keywords": [
+ "alpn",
+ "tls",
+ "socket",
+ "http2"
+ ],
+ "author": "Szymon Marczak",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/szmarczak/resolve-alpn/issues"
+ },
+ "homepage": "https://github.com/szmarczak/resolve-alpn#readme",
+ "devDependencies": {
+ "ava": "^3.15.0",
+ "nyc": "^15.1.0",
+ "pem": "1.14.3",
+ "xo": "^0.38.2"
+ }
+}