diff options
author | Minteck <nekostarfan@gmail.com> | 2021-08-24 14:41:48 +0200 |
---|---|---|
committer | Minteck <nekostarfan@gmail.com> | 2021-08-24 14:41:48 +0200 |
commit | d25e11bee6ca5ca523884da132d18e1400e077b9 (patch) | |
tree | 8af39fde19f7ed640a60fb397c7edd647dff1c4c /node_modules/resolve-alpn | |
download | kartik-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/LICENSE | 22 | ||||
-rw-r--r-- | node_modules/resolve-alpn/README.md | 60 | ||||
-rw-r--r-- | node_modules/resolve-alpn/index.js | 41 | ||||
-rw-r--r-- | node_modules/resolve-alpn/package.json | 34 |
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" + } +} |