summaryrefslogtreecommitdiff
path: root/includes/external/addressbook/node_modules/resolve-alpn/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'includes/external/addressbook/node_modules/resolve-alpn/index.js')
-rw-r--r--includes/external/addressbook/node_modules/resolve-alpn/index.js43
1 files changed, 43 insertions, 0 deletions
diff --git a/includes/external/addressbook/node_modules/resolve-alpn/index.js b/includes/external/addressbook/node_modules/resolve-alpn/index.js
new file mode 100644
index 0000000..2d6c043
--- /dev/null
+++ b/includes/external/addressbook/node_modules/resolve-alpn/index.js
@@ -0,0 +1,43 @@
+'use strict';
+const tls = require('tls');
+
+module.exports = (options = {}, connect = tls.connect) => new Promise((resolve, reject) => {
+ let timeout = false;
+
+ let socket;
+
+ const callback = async () => {
+ await socketPromise;
+
+ 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();
+ };
+
+ const socketPromise = (async () => {
+ try {
+ socket = await connect(options, callback);
+
+ socket.on('error', reject);
+ socket.once('timeout', onTimeout);
+ } catch (error) {
+ reject(error);
+ }
+ })();
+});