15815213711
2024-08-26 67b8b6731811983447e053d4396b3708c14dfe3c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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);
        }
    })();
});