tedious 14.6.1 → 15.0.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/appveyor.yml +1 -1
- package/lib/connection.js +92 -189
- package/lib/connector.js +100 -144
- package/lib/data-types/tvp.js +4 -4
- package/lib/errors/abort-error.js +19 -0
- package/lib/errors/timeout-error.js +19 -0
- package/lib/instance-lookup.js +77 -117
- package/lib/message-io.js +89 -65
- package/lib/metadata-parser.js +1 -1
- package/lib/ntlm-payload.js +4 -2
- package/lib/request.js +2 -2
- package/lib/sender.js +41 -88
- package/lib/token/colmetadata-token-parser.js +1 -1
- package/lib/token/done-token-parser.js +1 -1
- package/lib/token/env-change-token-parser.js +1 -1
- package/lib/token/feature-ext-ack-parser.js +1 -1
- package/lib/token/fedauth-info-parser.js +1 -1
- package/lib/token/infoerror-token-parser.js +1 -1
- package/lib/token/loginack-token-parser.js +1 -1
- package/lib/token/nbcrow-token-parser.js +1 -1
- package/lib/token/order-token-parser.js +1 -1
- package/lib/token/returnstatus-token-parser.js +1 -1
- package/lib/token/returnvalue-token-parser.js +1 -1
- package/lib/token/sspi-token-parser.js +1 -1
- package/lib/token/stream-parser.js +1 -1
- package/lib/token/token-stream-parser.js +1 -1
- package/lib/utils/with-timeout.js +45 -0
- package/lib/value-parser.js +1 -1
- package/package.json +4 -3
- package/tsconfig.json +1 -0
- package/types/js-md4.d.ts +7 -0
- package/types/native-duplexpair.d.ts +12 -0
package/lib/instance-lookup.js
CHANGED
|
@@ -3,14 +3,17 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.instanceLookup = instanceLookup;
|
|
7
|
+
exports.parseBrowserResponse = parseBrowserResponse;
|
|
7
8
|
|
|
8
9
|
var _dns = _interopRequireDefault(require("dns"));
|
|
9
10
|
|
|
10
|
-
var
|
|
11
|
+
var _abortError = _interopRequireDefault(require("./errors/abort-error"));
|
|
11
12
|
|
|
12
13
|
var _sender = require("./sender");
|
|
13
14
|
|
|
15
|
+
var _withTimeout = require("./utils/with-timeout");
|
|
16
|
+
|
|
14
17
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
18
|
|
|
16
19
|
const SQL_SERVER_BROWSER_PORT = 1434;
|
|
@@ -19,149 +22,106 @@ const RETRIES = 3; // There are three bytes at the start of the response, whose
|
|
|
19
22
|
|
|
20
23
|
const MYSTERY_HEADER_LENGTH = 3;
|
|
21
24
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
// Most of the functionality has been determined from from jTDS's MSSqlServerInfo class.
|
|
26
|
+
async function instanceLookup(options) {
|
|
27
|
+
const server = options.server;
|
|
28
|
+
|
|
29
|
+
if (typeof server !== 'string') {
|
|
30
|
+
throw new TypeError('Invalid arguments: "server" must be a string');
|
|
28
31
|
}
|
|
29
32
|
|
|
30
|
-
|
|
33
|
+
const instanceName = options.instanceName;
|
|
31
34
|
|
|
35
|
+
if (typeof instanceName !== 'string') {
|
|
36
|
+
throw new TypeError('Invalid arguments: "instanceName" must be a string');
|
|
37
|
+
}
|
|
32
38
|
|
|
33
|
-
|
|
34
|
-
instanceLookup(options, callback) {
|
|
35
|
-
var _options$lookup, _options$port;
|
|
39
|
+
const timeout = options.timeout === undefined ? TIMEOUT : options.timeout;
|
|
36
40
|
|
|
37
|
-
|
|
41
|
+
if (typeof timeout !== 'number') {
|
|
42
|
+
throw new TypeError('Invalid arguments: "timeout" must be a number');
|
|
43
|
+
}
|
|
38
44
|
|
|
39
|
-
|
|
40
|
-
throw new TypeError('Invalid arguments: "server" must be a string');
|
|
41
|
-
}
|
|
45
|
+
const retries = options.retries === undefined ? RETRIES : options.retries;
|
|
42
46
|
|
|
43
|
-
|
|
47
|
+
if (typeof retries !== 'number') {
|
|
48
|
+
throw new TypeError('Invalid arguments: "retries" must be a number');
|
|
49
|
+
}
|
|
44
50
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
51
|
+
if (options.lookup !== undefined && typeof options.lookup !== 'function') {
|
|
52
|
+
throw new TypeError('Invalid arguments: "lookup" must be a function');
|
|
53
|
+
}
|
|
48
54
|
|
|
49
|
-
|
|
55
|
+
const lookup = options.lookup ?? _dns.default.lookup;
|
|
50
56
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
57
|
+
if (options.port !== undefined && typeof options.port !== 'number') {
|
|
58
|
+
throw new TypeError('Invalid arguments: "port" must be a number');
|
|
59
|
+
}
|
|
54
60
|
|
|
55
|
-
|
|
61
|
+
const port = options.port ?? SQL_SERVER_BROWSER_PORT;
|
|
62
|
+
const signal = options.signal;
|
|
56
63
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
64
|
+
if (signal.aborted) {
|
|
65
|
+
throw new _abortError.default();
|
|
66
|
+
}
|
|
60
67
|
|
|
61
|
-
|
|
62
|
-
throw new TypeError('Invalid arguments: "lookup" must be a function');
|
|
63
|
-
}
|
|
68
|
+
let response;
|
|
64
69
|
|
|
65
|
-
|
|
70
|
+
for (let i = 0; i <= retries; i++) {
|
|
71
|
+
try {
|
|
72
|
+
response = await (0, _withTimeout.withTimeout)(timeout, async signal => {
|
|
73
|
+
const request = Buffer.from([0x02]);
|
|
74
|
+
return await (0, _sender.sendMessage)(options.server, port, lookup, signal, request);
|
|
75
|
+
}, signal);
|
|
76
|
+
} catch (err) {
|
|
77
|
+
// If the current attempt timed out, continue with the next
|
|
78
|
+
if (!signal.aborted && err instanceof Error && err.name === 'TimeoutError') {
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
66
81
|
|
|
67
|
-
|
|
68
|
-
throw new TypeError('Invalid arguments: "port" must be a number');
|
|
82
|
+
throw err;
|
|
69
83
|
}
|
|
84
|
+
}
|
|
70
85
|
|
|
71
|
-
|
|
72
|
-
|
|
86
|
+
if (!response) {
|
|
87
|
+
throw new Error('Failed to get response from SQL Server Browser on ' + server);
|
|
88
|
+
}
|
|
73
89
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
}
|
|
90
|
+
const message = response.toString('ascii', MYSTERY_HEADER_LENGTH);
|
|
91
|
+
const foundPort = parseBrowserResponse(message, instanceName);
|
|
77
92
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
93
|
+
if (!foundPort) {
|
|
94
|
+
throw new Error('Port for ' + instanceName + ' not found in ' + options.server);
|
|
95
|
+
}
|
|
81
96
|
|
|
82
|
-
|
|
97
|
+
return foundPort;
|
|
98
|
+
}
|
|
83
99
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
const controller = new _nodeAbortController.AbortController();
|
|
100
|
+
function parseBrowserResponse(response, instanceName) {
|
|
101
|
+
let getPort;
|
|
102
|
+
const instances = response.split(';;');
|
|
88
103
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
// forward the abort to the controller of the current
|
|
93
|
-
// lookup attempt.
|
|
104
|
+
for (let i = 0, len = instances.length; i < len; i++) {
|
|
105
|
+
const instance = instances[i];
|
|
106
|
+
const parts = instance.split(';');
|
|
94
107
|
|
|
108
|
+
for (let p = 0, partsLen = parts.length; p < partsLen; p += 2) {
|
|
109
|
+
const name = parts[p];
|
|
110
|
+
const value = parts[p + 1];
|
|
95
111
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
const request = Buffer.from([0x02]);
|
|
100
|
-
const sender = new _sender.Sender(options.server, port, lookup, controller.signal, request);
|
|
101
|
-
const timer = setTimeout(abortCurrentAttempt, timeout);
|
|
102
|
-
sender.execute((err, response) => {
|
|
103
|
-
clearTimeout(timer);
|
|
104
|
-
|
|
105
|
-
if (err) {
|
|
106
|
-
if ((err === null || err === void 0 ? void 0 : err.name) === 'AbortError') {
|
|
107
|
-
// If the overall instance lookup was aborted,
|
|
108
|
-
// do not perform any further attempts.
|
|
109
|
-
if (signal.aborted) {
|
|
110
|
-
return callback(new AbortError());
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
return makeAttempt();
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
return callback(new Error('Failed to lookup instance on ' + server + ' - ' + err.message));
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
const message = response.toString('ascii', MYSTERY_HEADER_LENGTH);
|
|
120
|
-
const port = this.parseBrowserResponse(message, instanceName);
|
|
121
|
-
|
|
122
|
-
if (port) {
|
|
123
|
-
callback(undefined, port);
|
|
124
|
-
} else {
|
|
125
|
-
callback(new Error('Port for ' + instanceName + ' not found in ' + options.server));
|
|
126
|
-
}
|
|
127
|
-
});
|
|
128
|
-
} else {
|
|
129
|
-
callback(new Error('Failed to get response from SQL Server Browser on ' + server));
|
|
112
|
+
if (name === 'tcp' && getPort) {
|
|
113
|
+
const port = parseInt(value, 10);
|
|
114
|
+
return port;
|
|
130
115
|
}
|
|
131
|
-
};
|
|
132
|
-
|
|
133
|
-
makeAttempt();
|
|
134
|
-
}
|
|
135
116
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
const instance = instances[i];
|
|
142
|
-
const parts = instance.split(';');
|
|
143
|
-
|
|
144
|
-
for (let p = 0, partsLen = parts.length; p < partsLen; p += 2) {
|
|
145
|
-
const name = parts[p];
|
|
146
|
-
const value = parts[p + 1];
|
|
147
|
-
|
|
148
|
-
if (name === 'tcp' && getPort) {
|
|
149
|
-
const port = parseInt(value, 10);
|
|
150
|
-
return port;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
if (name === 'InstanceName') {
|
|
154
|
-
if (value.toUpperCase() === instanceName.toUpperCase()) {
|
|
155
|
-
getPort = true;
|
|
156
|
-
} else {
|
|
157
|
-
getPort = false;
|
|
158
|
-
}
|
|
117
|
+
if (name === 'InstanceName') {
|
|
118
|
+
if (value.toUpperCase() === instanceName.toUpperCase()) {
|
|
119
|
+
getPort = true;
|
|
120
|
+
} else {
|
|
121
|
+
getPort = false;
|
|
159
122
|
}
|
|
160
123
|
}
|
|
161
124
|
}
|
|
162
125
|
}
|
|
163
|
-
|
|
164
126
|
}
|
|
165
|
-
|
|
166
|
-
exports.InstanceLookup = InstanceLookup;
|
|
167
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTUUxfU0VSVkVSX0JST1dTRVJfUE9SVCIsIlRJTUVPVVQiLCJSRVRSSUVTIiwiTVlTVEVSWV9IRUFERVJfTEVOR1RIIiwiQWJvcnRFcnJvciIsIkVycm9yIiwiY29uc3RydWN0b3IiLCJjb2RlIiwibmFtZSIsIkluc3RhbmNlTG9va3VwIiwiaW5zdGFuY2VMb29rdXAiLCJvcHRpb25zIiwiY2FsbGJhY2siLCJzZXJ2ZXIiLCJUeXBlRXJyb3IiLCJpbnN0YW5jZU5hbWUiLCJ0aW1lb3V0IiwidW5kZWZpbmVkIiwicmV0cmllcyIsImxvb2t1cCIsImRucyIsInBvcnQiLCJzaWduYWwiLCJhYm9ydGVkIiwicHJvY2VzcyIsIm5leHRUaWNrIiwicmV0cmllc0xlZnQiLCJtYWtlQXR0ZW1wdCIsImNvbnRyb2xsZXIiLCJBYm9ydENvbnRyb2xsZXIiLCJhYm9ydEN1cnJlbnRBdHRlbXB0IiwiYWJvcnQiLCJhZGRFdmVudExpc3RlbmVyIiwib25jZSIsInJlcXVlc3QiLCJCdWZmZXIiLCJmcm9tIiwic2VuZGVyIiwiU2VuZGVyIiwidGltZXIiLCJzZXRUaW1lb3V0IiwiZXhlY3V0ZSIsImVyciIsInJlc3BvbnNlIiwiY2xlYXJUaW1lb3V0IiwibWVzc2FnZSIsInRvU3RyaW5nIiwicGFyc2VCcm93c2VyUmVzcG9uc2UiLCJnZXRQb3J0IiwiaW5zdGFuY2VzIiwic3BsaXQiLCJpIiwibGVuIiwibGVuZ3RoIiwiaW5zdGFuY2UiLCJwYXJ0cyIsInAiLCJwYXJ0c0xlbiIsInZhbHVlIiwicGFyc2VJbnQiLCJ0b1VwcGVyQ2FzZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9pbnN0YW5jZS1sb29rdXAudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRucyBmcm9tICdkbnMnO1xuaW1wb3J0IHsgQWJvcnRDb250cm9sbGVyLCBBYm9ydFNpZ25hbCB9IGZyb20gJ25vZGUtYWJvcnQtY29udHJvbGxlcic7XG5cbmltcG9ydCB7IFNlbmRlciB9IGZyb20gJy4vc2VuZGVyJztcblxuY29uc3QgU1FMX1NFUlZFUl9CUk9XU0VSX1BPUlQgPSAxNDM0O1xuY29uc3QgVElNRU9VVCA9IDIgKiAxMDAwO1xuY29uc3QgUkVUUklFUyA9IDM7XG4vLyBUaGVyZSBhcmUgdGhyZWUgYnl0ZXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSByZXNwb25zZSwgd2hvc2UgcHVycG9zZSBpcyB1bmtub3duLlxuY29uc3QgTVlTVEVSWV9IRUFERVJfTEVOR1RIID0gMztcblxudHlwZSBMb29rdXBGdW5jdGlvbiA9IChob3N0bmFtZTogc3RyaW5nLCBvcHRpb25zOiBkbnMuTG9va3VwQWxsT3B0aW9ucywgY2FsbGJhY2s6IChlcnI6IE5vZGVKUy5FcnJub0V4Y2VwdGlvbiB8IG51bGwsIGFkZHJlc3NlczogZG5zLkxvb2t1cEFkZHJlc3NbXSkgPT4gdm9pZCkgPT4gdm9pZDtcblxuY2xhc3MgQWJvcnRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29kZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkJyk7XG5cbiAgICB0aGlzLmNvZGUgPSAnQUJPUlRfRVJSJztcbiAgICB0aGlzLm5hbWUgPSAnQWJvcnRFcnJvcic7XG4gIH1cbn1cblxuLy8gTW9zdCBvZiB0aGUgZnVuY3Rpb25hbGl0eSBoYXMgYmVlbiBkZXRlcm1pbmVkIGZyb20gZnJvbSBqVERTJ3MgTVNTcWxTZXJ2ZXJJbmZvIGNsYXNzLlxuZXhwb3J0IGNsYXNzIEluc3RhbmNlTG9va3VwIHtcbiAgaW5zdGFuY2VMb29rdXAob3B0aW9uczogeyBzZXJ2ZXI6IHN0cmluZywgaW5zdGFuY2VOYW1lOiBzdHJpbmcsIHRpbWVvdXQ/OiBudW1iZXIsIHJldHJpZXM/OiBudW1iZXIsIHBvcnQ/OiBudW1iZXIsIGxvb2t1cD86IExvb2t1cEZ1bmN0aW9uLCBzaWduYWw6IEFib3J0U2lnbmFsIH0sIGNhbGxiYWNrOiAoZXJyOiBFcnJvciB8IHVuZGVmaW5lZCwgcG9ydD86IG51bWJlcikgPT4gdm9pZCkge1xuICAgIGNvbnN0IHNlcnZlciA9IG9wdGlvbnMuc2VydmVyO1xuICAgIGlmICh0eXBlb2Ygc2VydmVyICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBhcmd1bWVudHM6IFwic2VydmVyXCIgbXVzdCBiZSBhIHN0cmluZycpO1xuICAgIH1cblxuICAgIGNvbnN0IGluc3RhbmNlTmFtZSA9IG9wdGlvbnMuaW5zdGFuY2VOYW1lO1xuICAgIGlmICh0eXBlb2YgaW5zdGFuY2VOYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBhcmd1bWVudHM6IFwiaW5zdGFuY2VOYW1lXCIgbXVzdCBiZSBhIHN0cmluZycpO1xuICAgIH1cblxuICAgIGNvbnN0IHRpbWVvdXQgPSBvcHRpb25zLnRpbWVvdXQgPT09IHVuZGVmaW5lZCA/IFRJTUVPVVQgOiBvcHRpb25zLnRpbWVvdXQ7XG4gICAgaWYgKHR5cGVvZiB0aW1lb3V0ICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBhcmd1bWVudHM6IFwidGltZW91dFwiIG11c3QgYmUgYSBudW1iZXInKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXRyaWVzID0gb3B0aW9ucy5yZXRyaWVzID09PSB1bmRlZmluZWQgPyBSRVRSSUVTIDogb3B0aW9ucy5yZXRyaWVzO1xuICAgIGlmICh0eXBlb2YgcmV0cmllcyAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgYXJndW1lbnRzOiBcInJldHJpZXNcIiBtdXN0IGJlIGEgbnVtYmVyJyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMubG9va3VwICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdGlvbnMubG9va3VwICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGFyZ3VtZW50czogXCJsb29rdXBcIiBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICB9XG4gICAgY29uc3QgbG9va3VwID0gb3B0aW9ucy5sb29rdXAgPz8gZG5zLmxvb2t1cDtcblxuICAgIGlmIChvcHRpb25zLnBvcnQgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0aW9ucy5wb3J0ICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBhcmd1bWVudHM6IFwicG9ydFwiIG11c3QgYmUgYSBudW1iZXInKTtcbiAgICB9XG4gICAgY29uc3QgcG9ydCA9IG9wdGlvbnMucG9ydCA/PyBTUUxfU0VSVkVSX0JST1dTRVJfUE9SVDtcblxuICAgIGNvbnN0IHNpZ25hbCA9IG9wdGlvbnMuc2lnbmFsO1xuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBhcmd1bWVudHM6IFwiY2FsbGJhY2tcIiBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICB9XG5cbiAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIHJldHVybiBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrLCBuZXcgQWJvcnRFcnJvcigpKTtcbiAgICB9XG5cbiAgICBsZXQgcmV0cmllc0xlZnQgPSByZXRyaWVzO1xuXG4gICAgY29uc3QgbWFrZUF0dGVtcHQgPSAoKSA9PiB7XG4gICAgICBpZiAocmV0cmllc0xlZnQgPj0gMCkge1xuICAgICAgICByZXRyaWVzTGVmdC0tO1xuXG4gICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICAgICAgY29uc3QgYWJvcnRDdXJyZW50QXR0ZW1wdCA9ICgpID0+IHtcbiAgICAgICAgICBjb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gSWYgdGhlIG92ZXJhbGwgaW5zdGFuY2UgbG9va3VwIGlzIGFib3J0ZWQsXG4gICAgICAgIC8vIGZvcndhcmQgdGhlIGFib3J0IHRvIHRoZSBjb250cm9sbGVyIG9mIHRoZSBjdXJyZW50XG4gICAgICAgIC8vIGxvb2t1cCBhdHRlbXB0LlxuICAgICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydEN1cnJlbnRBdHRlbXB0LCB7IG9uY2U6IHRydWUgfSk7XG5cbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IEJ1ZmZlci5mcm9tKFsweDAyXSk7XG4gICAgICAgIGNvbnN0IHNlbmRlciA9IG5ldyBTZW5kZXIob3B0aW9ucy5zZXJ2ZXIsIHBvcnQsIGxvb2t1cCwgY29udHJvbGxlci5zaWduYWwsIHJlcXVlc3QpO1xuICAgICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoYWJvcnRDdXJyZW50QXR0ZW1wdCwgdGltZW91dCk7XG4gICAgICAgIHNlbmRlci5leGVjdXRlKChlcnIsIHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcblxuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnI/Lm5hbWUgPT09ICdBYm9ydEVycm9yJykge1xuICAgICAgICAgICAgICAvLyBJZiB0aGUgb3ZlcmFsbCBpbnN0YW5jZSBsb29rdXAgd2FzIGFib3J0ZWQsXG4gICAgICAgICAgICAgIC8vIGRvIG5vdCBwZXJmb3JtIGFueSBmdXJ0aGVyIGF0dGVtcHRzLlxuICAgICAgICAgICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobmV3IEFib3J0RXJyb3IoKSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gbWFrZUF0dGVtcHQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG5ldyBFcnJvcignRmFpbGVkIHRvIGxvb2t1cCBpbnN0YW5jZSBvbiAnICsgc2VydmVyICsgJyAtICcgKyBlcnIubWVzc2FnZSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSByZXNwb25zZSEudG9TdHJpbmcoJ2FzY2lpJywgTVlTVEVSWV9IRUFERVJfTEVOR1RIKTtcbiAgICAgICAgICBjb25zdCBwb3J0ID0gdGhpcy5wYXJzZUJyb3dzZXJSZXNwb25zZShtZXNzYWdlLCBpbnN0YW5jZU5hbWUpO1xuXG4gICAgICAgICAgaWYgKHBvcnQpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKHVuZGVmaW5lZCwgcG9ydCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcignUG9ydCBmb3IgJyArIGluc3RhbmNlTmFtZSArICcgbm90IGZvdW5kIGluICcgKyBvcHRpb25zLnNlcnZlcikpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoJ0ZhaWxlZCB0byBnZXQgcmVzcG9uc2UgZnJvbSBTUUwgU2VydmVyIEJyb3dzZXIgb24gJyArIHNlcnZlcikpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBtYWtlQXR0ZW1wdCgpO1xuICB9XG5cbiAgcGFyc2VCcm93c2VyUmVzcG9uc2UocmVzcG9uc2U6IHN0cmluZywgaW5zdGFuY2VOYW1lOiBzdHJpbmcpIHtcbiAgICBsZXQgZ2V0UG9ydDtcblxuICAgIGNvbnN0IGluc3RhbmNlcyA9IHJlc3BvbnNlLnNwbGl0KCc7OycpO1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpbnN0YW5jZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5zdGFuY2VzW2ldO1xuICAgICAgY29uc3QgcGFydHMgPSBpbnN0YW5jZS5zcGxpdCgnOycpO1xuXG4gICAgICBmb3IgKGxldCBwID0gMCwgcGFydHNMZW4gPSBwYXJ0cy5sZW5ndGg7IHAgPCBwYXJ0c0xlbjsgcCArPSAyKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBwYXJ0c1twXTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJ0c1twICsgMV07XG5cbiAgICAgICAgaWYgKG5hbWUgPT09ICd0Y3AnICYmIGdldFBvcnQpIHtcbiAgICAgICAgICBjb25zdCBwb3J0ID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgICAgICAgICByZXR1cm4gcG9ydDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuYW1lID09PSAnSW5zdGFuY2VOYW1lJykge1xuICAgICAgICAgIGlmICh2YWx1ZS50b1VwcGVyQ2FzZSgpID09PSBpbnN0YW5jZU5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgZ2V0UG9ydCA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdldFBvcnQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUVBOzs7O0FBRUEsTUFBTUEsdUJBQXVCLEdBQUcsSUFBaEM7QUFDQSxNQUFNQyxPQUFPLEdBQUcsSUFBSSxJQUFwQjtBQUNBLE1BQU1DLE9BQU8sR0FBRyxDQUFoQixDLENBQ0E7O0FBQ0EsTUFBTUMscUJBQXFCLEdBQUcsQ0FBOUI7O0FBSUEsTUFBTUMsVUFBTixTQUF5QkMsS0FBekIsQ0FBK0I7RUFHN0JDLFdBQVcsR0FBRztJQUNaLE1BQU0sMkJBQU47SUFEWSxLQUZkQyxJQUVjO0lBR1osS0FBS0EsSUFBTCxHQUFZLFdBQVo7SUFDQSxLQUFLQyxJQUFMLEdBQVksWUFBWjtFQUNEOztBQVI0QixDLENBVy9COzs7QUFDTyxNQUFNQyxjQUFOLENBQXFCO0VBQzFCQyxjQUFjLENBQUNDLE9BQUQsRUFBcUpDLFFBQXJKLEVBQWdOO0lBQUE7O0lBQzVOLE1BQU1DLE1BQU0sR0FBR0YsT0FBTyxDQUFDRSxNQUF2Qjs7SUFDQSxJQUFJLE9BQU9BLE1BQVAsS0FBa0IsUUFBdEIsRUFBZ0M7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
|
|
127
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTUUxfU0VSVkVSX0JST1dTRVJfUE9SVCIsIlRJTUVPVVQiLCJSRVRSSUVTIiwiTVlTVEVSWV9IRUFERVJfTEVOR1RIIiwiaW5zdGFuY2VMb29rdXAiLCJvcHRpb25zIiwic2VydmVyIiwiVHlwZUVycm9yIiwiaW5zdGFuY2VOYW1lIiwidGltZW91dCIsInVuZGVmaW5lZCIsInJldHJpZXMiLCJsb29rdXAiLCJkbnMiLCJwb3J0Iiwic2lnbmFsIiwiYWJvcnRlZCIsIkFib3J0RXJyb3IiLCJyZXNwb25zZSIsImkiLCJyZXF1ZXN0IiwiQnVmZmVyIiwiZnJvbSIsImVyciIsIkVycm9yIiwibmFtZSIsIm1lc3NhZ2UiLCJ0b1N0cmluZyIsImZvdW5kUG9ydCIsInBhcnNlQnJvd3NlclJlc3BvbnNlIiwiZ2V0UG9ydCIsImluc3RhbmNlcyIsInNwbGl0IiwibGVuIiwibGVuZ3RoIiwiaW5zdGFuY2UiLCJwYXJ0cyIsInAiLCJwYXJ0c0xlbiIsInZhbHVlIiwicGFyc2VJbnQiLCJ0b1VwcGVyQ2FzZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9pbnN0YW5jZS1sb29rdXAudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRucyBmcm9tICdkbnMnO1xuaW1wb3J0IHsgQWJvcnRTaWduYWwgfSBmcm9tICdub2RlLWFib3J0LWNvbnRyb2xsZXInO1xuXG5pbXBvcnQgQWJvcnRFcnJvciBmcm9tICcuL2Vycm9ycy9hYm9ydC1lcnJvcic7XG5pbXBvcnQgeyBzZW5kTWVzc2FnZSB9IGZyb20gJy4vc2VuZGVyJztcbmltcG9ydCB7IHdpdGhUaW1lb3V0IH0gZnJvbSAnLi91dGlscy93aXRoLXRpbWVvdXQnO1xuXG5jb25zdCBTUUxfU0VSVkVSX0JST1dTRVJfUE9SVCA9IDE0MzQ7XG5jb25zdCBUSU1FT1VUID0gMiAqIDEwMDA7XG5jb25zdCBSRVRSSUVTID0gMztcbi8vIFRoZXJlIGFyZSB0aHJlZSBieXRlcyBhdCB0aGUgc3RhcnQgb2YgdGhlIHJlc3BvbnNlLCB3aG9zZSBwdXJwb3NlIGlzIHVua25vd24uXG5jb25zdCBNWVNURVJZX0hFQURFUl9MRU5HVEggPSAzO1xuXG50eXBlIExvb2t1cEZ1bmN0aW9uID0gKGhvc3RuYW1lOiBzdHJpbmcsIG9wdGlvbnM6IGRucy5Mb29rdXBBbGxPcHRpb25zLCBjYWxsYmFjazogKGVycjogTm9kZUpTLkVycm5vRXhjZXB0aW9uIHwgbnVsbCwgYWRkcmVzc2VzOiBkbnMuTG9va3VwQWRkcmVzc1tdKSA9PiB2b2lkKSA9PiB2b2lkO1xuXG4vLyBNb3N0IG9mIHRoZSBmdW5jdGlvbmFsaXR5IGhhcyBiZWVuIGRldGVybWluZWQgZnJvbSBmcm9tIGpURFMncyBNU1NxbFNlcnZlckluZm8gY2xhc3MuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5zdGFuY2VMb29rdXAob3B0aW9uczogeyBzZXJ2ZXI6IHN0cmluZywgaW5zdGFuY2VOYW1lOiBzdHJpbmcsIHRpbWVvdXQ/OiBudW1iZXIsIHJldHJpZXM/OiBudW1iZXIsIHBvcnQ/OiBudW1iZXIsIGxvb2t1cD86IExvb2t1cEZ1bmN0aW9uLCBzaWduYWw6IEFib3J0U2lnbmFsIH0pIHtcbiAgY29uc3Qgc2VydmVyID0gb3B0aW9ucy5zZXJ2ZXI7XG4gIGlmICh0eXBlb2Ygc2VydmVyICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgYXJndW1lbnRzOiBcInNlcnZlclwiIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgfVxuXG4gIGNvbnN0IGluc3RhbmNlTmFtZSA9IG9wdGlvbnMuaW5zdGFuY2VOYW1lO1xuICBpZiAodHlwZW9mIGluc3RhbmNlTmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGFyZ3VtZW50czogXCJpbnN0YW5jZU5hbWVcIiBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gIH1cblxuICBjb25zdCB0aW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0ID09PSB1bmRlZmluZWQgPyBUSU1FT1VUIDogb3B0aW9ucy50aW1lb3V0O1xuICBpZiAodHlwZW9mIHRpbWVvdXQgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBhcmd1bWVudHM6IFwidGltZW91dFwiIG11c3QgYmUgYSBudW1iZXInKTtcbiAgfVxuXG4gIGNvbnN0IHJldHJpZXMgPSBvcHRpb25zLnJldHJpZXMgPT09IHVuZGVmaW5lZCA/IFJFVFJJRVMgOiBvcHRpb25zLnJldHJpZXM7XG4gIGlmICh0eXBlb2YgcmV0cmllcyAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGFyZ3VtZW50czogXCJyZXRyaWVzXCIgbXVzdCBiZSBhIG51bWJlcicpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMubG9va3VwICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdGlvbnMubG9va3VwICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBhcmd1bWVudHM6IFwibG9va3VwXCIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cbiAgY29uc3QgbG9va3VwID0gb3B0aW9ucy5sb29rdXAgPz8gZG5zLmxvb2t1cDtcblxuICBpZiAob3B0aW9ucy5wb3J0ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdGlvbnMucG9ydCAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGFyZ3VtZW50czogXCJwb3J0XCIgbXVzdCBiZSBhIG51bWJlcicpO1xuICB9XG4gIGNvbnN0IHBvcnQgPSBvcHRpb25zLnBvcnQgPz8gU1FMX1NFUlZFUl9CUk9XU0VSX1BPUlQ7XG5cbiAgY29uc3Qgc2lnbmFsID0gb3B0aW9ucy5zaWduYWw7XG5cbiAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgdGhyb3cgbmV3IEFib3J0RXJyb3IoKTtcbiAgfVxuXG4gIGxldCByZXNwb25zZTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8PSByZXRyaWVzOyBpKyspIHtcbiAgICB0cnkge1xuICAgICAgcmVzcG9uc2UgPSBhd2FpdCB3aXRoVGltZW91dCh0aW1lb3V0LCBhc3luYyAoc2lnbmFsKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSBCdWZmZXIuZnJvbShbMHgwMl0pO1xuICAgICAgICByZXR1cm4gYXdhaXQgc2VuZE1lc3NhZ2Uob3B0aW9ucy5zZXJ2ZXIsIHBvcnQsIGxvb2t1cCwgc2lnbmFsLCByZXF1ZXN0KTtcbiAgICAgIH0sIHNpZ25hbCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBJZiB0aGUgY3VycmVudCBhdHRlbXB0IHRpbWVkIG91dCwgY29udGludWUgd2l0aCB0aGUgbmV4dFxuICAgICAgaWYgKCFzaWduYWwuYWJvcnRlZCAmJiBlcnIgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnIubmFtZSA9PT0gJ1RpbWVvdXRFcnJvcicpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZ2V0IHJlc3BvbnNlIGZyb20gU1FMIFNlcnZlciBCcm93c2VyIG9uICcgKyBzZXJ2ZXIpO1xuICB9XG5cbiAgY29uc3QgbWVzc2FnZSA9IHJlc3BvbnNlLnRvU3RyaW5nKCdhc2NpaScsIE1ZU1RFUllfSEVBREVSX0xFTkdUSCk7XG4gIGNvbnN0IGZvdW5kUG9ydCA9IHBhcnNlQnJvd3NlclJlc3BvbnNlKG1lc3NhZ2UsIGluc3RhbmNlTmFtZSk7XG5cbiAgaWYgKCFmb3VuZFBvcnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BvcnQgZm9yICcgKyBpbnN0YW5jZU5hbWUgKyAnIG5vdCBmb3VuZCBpbiAnICsgb3B0aW9ucy5zZXJ2ZXIpO1xuICB9XG5cbiAgcmV0dXJuIGZvdW5kUG9ydDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQnJvd3NlclJlc3BvbnNlKHJlc3BvbnNlOiBzdHJpbmcsIGluc3RhbmNlTmFtZTogc3RyaW5nKSB7XG4gIGxldCBnZXRQb3J0O1xuXG4gIGNvbnN0IGluc3RhbmNlcyA9IHJlc3BvbnNlLnNwbGl0KCc7OycpO1xuICBmb3IgKGxldCBpID0gMCwgbGVuID0gaW5zdGFuY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZXNbaV07XG4gICAgY29uc3QgcGFydHMgPSBpbnN0YW5jZS5zcGxpdCgnOycpO1xuXG4gICAgZm9yIChsZXQgcCA9IDAsIHBhcnRzTGVuID0gcGFydHMubGVuZ3RoOyBwIDwgcGFydHNMZW47IHAgKz0gMikge1xuICAgICAgY29uc3QgbmFtZSA9IHBhcnRzW3BdO1xuICAgICAgY29uc3QgdmFsdWUgPSBwYXJ0c1twICsgMV07XG5cbiAgICAgIGlmIChuYW1lID09PSAndGNwJyAmJiBnZXRQb3J0KSB7XG4gICAgICAgIGNvbnN0IHBvcnQgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgICAgICByZXR1cm4gcG9ydDtcbiAgICAgIH1cblxuICAgICAgaWYgKG5hbWUgPT09ICdJbnN0YW5jZU5hbWUnKSB7XG4gICAgICAgIGlmICh2YWx1ZS50b1VwcGVyQ2FzZSgpID09PSBpbnN0YW5jZU5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgIGdldFBvcnQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGdldFBvcnQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBOztBQUdBOztBQUNBOztBQUNBOzs7O0FBRUEsTUFBTUEsdUJBQXVCLEdBQUcsSUFBaEM7QUFDQSxNQUFNQyxPQUFPLEdBQUcsSUFBSSxJQUFwQjtBQUNBLE1BQU1DLE9BQU8sR0FBRyxDQUFoQixDLENBQ0E7O0FBQ0EsTUFBTUMscUJBQXFCLEdBQUcsQ0FBOUI7O0FBSUE7QUFDTyxlQUFl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
|
package/lib/message-io.js
CHANGED
|
@@ -5,6 +5,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
|
|
8
|
+
var _nativeDuplexpair = _interopRequireDefault(require("native-duplexpair"));
|
|
9
|
+
|
|
8
10
|
var tls = _interopRequireWildcard(require("tls"));
|
|
9
11
|
|
|
10
12
|
var _events = require("events");
|
|
@@ -17,14 +19,11 @@ var _incomingMessageStream = _interopRequireDefault(require("./incoming-message-
|
|
|
17
19
|
|
|
18
20
|
var _outgoingMessageStream = _interopRequireDefault(require("./outgoing-message-stream"));
|
|
19
21
|
|
|
20
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
|
-
|
|
22
22
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
23
23
|
|
|
24
24
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
const DuplexPair = require('native-duplexpair');
|
|
26
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
28
27
|
|
|
29
28
|
class MessageIO extends _events.EventEmitter {
|
|
30
29
|
constructor(socket, packetSize, debug) {
|
|
@@ -60,60 +59,95 @@ class MessageIO extends _events.EventEmitter {
|
|
|
60
59
|
}
|
|
61
60
|
|
|
62
61
|
return this.outgoingMessageStream.packetSize;
|
|
63
|
-
}
|
|
62
|
+
} // Negotiate TLS encryption.
|
|
63
|
+
|
|
64
64
|
|
|
65
65
|
startTls(secureContext, hostname, trustServerCertificate) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
66
|
+
return new Promise((resolve, reject) => {
|
|
67
|
+
const duplexpair = new _nativeDuplexpair.default();
|
|
68
|
+
const securePair = this.securePair = {
|
|
69
|
+
cleartext: tls.connect({
|
|
70
|
+
socket: duplexpair.socket1,
|
|
71
|
+
servername: hostname,
|
|
72
|
+
secureContext: secureContext,
|
|
73
|
+
rejectUnauthorized: !trustServerCertificate
|
|
74
|
+
}),
|
|
75
|
+
encrypted: duplexpair.socket2
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
const onSecureConnect = () => {
|
|
79
|
+
securePair.encrypted.removeListener('readable', onReadable);
|
|
80
|
+
securePair.cleartext.removeListener('error', onError);
|
|
81
|
+
securePair.cleartext.removeListener('secureConnect', onSecureConnect); // If we encounter any errors from this point on,
|
|
82
|
+
// we just forward them to the actual network socket.
|
|
83
|
+
|
|
84
|
+
securePair.cleartext.once('error', err => {
|
|
85
|
+
this.socket.destroy(err);
|
|
86
|
+
});
|
|
87
|
+
const cipher = securePair.cleartext.getCipher();
|
|
88
|
+
|
|
89
|
+
if (cipher) {
|
|
90
|
+
this.debug.log('TLS negotiated (' + cipher.name + ', ' + cipher.version + ')');
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
this.emit('secure', securePair.cleartext);
|
|
94
|
+
securePair.cleartext.setMaxSendFragment(this.outgoingMessageStream.packetSize);
|
|
95
|
+
this.outgoingMessageStream.unpipe(this.socket);
|
|
96
|
+
this.socket.unpipe(this.incomingMessageStream);
|
|
97
|
+
this.socket.pipe(securePair.encrypted);
|
|
98
|
+
securePair.encrypted.pipe(this.socket);
|
|
99
|
+
securePair.cleartext.pipe(this.incomingMessageStream);
|
|
100
|
+
this.outgoingMessageStream.pipe(securePair.cleartext);
|
|
101
|
+
this.tlsNegotiationComplete = true;
|
|
102
|
+
resolve();
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
const onError = err => {
|
|
106
|
+
securePair.encrypted.removeListener('readable', onReadable);
|
|
107
|
+
securePair.cleartext.removeListener('error', onError);
|
|
108
|
+
securePair.cleartext.removeListener('secureConnect', onSecureConnect);
|
|
109
|
+
securePair.cleartext.destroy();
|
|
81
110
|
securePair.encrypted.destroy();
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
111
|
+
reject(err);
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
const onReadable = () => {
|
|
115
|
+
// When there is handshake data on the encryped stream of the secure pair,
|
|
116
|
+
// we wrap it into a `PRELOGIN` message and send it to the server.
|
|
117
|
+
//
|
|
118
|
+
// For each `PRELOGIN` message we sent we get back exactly one response message
|
|
119
|
+
// that contains the server's handshake response data.
|
|
120
|
+
const message = new _message.default({
|
|
121
|
+
type: _packet.TYPE.PRELOGIN,
|
|
122
|
+
resetConnection: false
|
|
123
|
+
});
|
|
124
|
+
let chunk;
|
|
125
|
+
|
|
126
|
+
while (chunk = securePair.encrypted.read()) {
|
|
127
|
+
message.write(chunk);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
this.outgoingMessageStream.write(message);
|
|
131
|
+
message.end();
|
|
132
|
+
this.readMessage().then(async response => {
|
|
133
|
+
// Setup readable handler for the next round of handshaking.
|
|
134
|
+
// If we encounter a `secureConnect` on the cleartext side
|
|
135
|
+
// of the secure pair, the `readable` handler is cleared
|
|
136
|
+
// and no further handshake handling will happen.
|
|
137
|
+
securePair.encrypted.once('readable', onReadable);
|
|
138
|
+
|
|
139
|
+
for await (const data of response) {
|
|
140
|
+
// We feed the server's handshake response back into the
|
|
141
|
+
// encrypted end of the secure pair.
|
|
142
|
+
securePair.encrypted.write(data);
|
|
143
|
+
}
|
|
144
|
+
}).catch(onError);
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
securePair.cleartext.once('error', onError);
|
|
148
|
+
securePair.cleartext.once('secureConnect', onSecureConnect);
|
|
149
|
+
securePair.encrypted.once('readable', onReadable);
|
|
95
150
|
});
|
|
96
|
-
securePair.encrypted.on('data', data => {
|
|
97
|
-
this.sendMessage(_packet.TYPE.PRELOGIN, data, false);
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
encryptAllFutureTraffic() {
|
|
102
|
-
const securePair = this.securePair;
|
|
103
|
-
securePair.cleartext.setMaxSendFragment(this.outgoingMessageStream.packetSize);
|
|
104
|
-
securePair.encrypted.removeAllListeners('data');
|
|
105
|
-
this.outgoingMessageStream.unpipe(this.socket);
|
|
106
|
-
this.socket.unpipe(this.incomingMessageStream);
|
|
107
|
-
this.socket.pipe(securePair.encrypted);
|
|
108
|
-
securePair.encrypted.pipe(this.socket);
|
|
109
|
-
securePair.cleartext.pipe(this.incomingMessageStream);
|
|
110
|
-
this.outgoingMessageStream.pipe(securePair.cleartext);
|
|
111
|
-
this.tlsNegotiationComplete = true;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
tlsHandshakeData(data) {
|
|
115
|
-
const securePair = this.securePair;
|
|
116
|
-
securePair.encrypted.write(data);
|
|
117
151
|
} // TODO listen for 'drain' event when socket.write returns false.
|
|
118
152
|
// TODO implement incomplete request cancelation (2.2.1.6)
|
|
119
153
|
|
|
@@ -140,16 +174,6 @@ class MessageIO extends _events.EventEmitter {
|
|
|
140
174
|
}
|
|
141
175
|
|
|
142
176
|
return result.value;
|
|
143
|
-
} // Temporarily suspends the flow of incoming packets.
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
pause() {
|
|
147
|
-
this.incomingMessageStream.pause();
|
|
148
|
-
} // Resumes the flow of incoming packets.
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
resume() {
|
|
152
|
-
this.incomingMessageStream.resume();
|
|
153
177
|
}
|
|
154
178
|
|
|
155
179
|
}
|
|
@@ -157,4 +181,4 @@ class MessageIO extends _events.EventEmitter {
|
|
|
157
181
|
var _default = MessageIO;
|
|
158
182
|
exports.default = _default;
|
|
159
183
|
module.exports = MessageIO;
|
|
160
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEdXBsZXhQYWlyIiwicmVxdWlyZSIsIk1lc3NhZ2VJTyIsIkV2ZW50RW1pdHRlciIsImNvbnN0cnVjdG9yIiwic29ja2V0IiwicGFja2V0U2l6ZSIsImRlYnVnIiwidGxzTmVnb3RpYXRpb25Db21wbGV0ZSIsImluY29taW5nTWVzc2FnZVN0cmVhbSIsIm91dGdvaW5nTWVzc2FnZVN0cmVhbSIsInNlY3VyZVBhaXIiLCJpbmNvbWluZ01lc3NhZ2VJdGVyYXRvciIsIkluY29taW5nTWVzc2FnZVN0cmVhbSIsIlN5bWJvbCIsImFzeW5jSXRlcmF0b3IiLCJPdXRnb2luZ01lc3NhZ2VTdHJlYW0iLCJwaXBlIiwiYXJncyIsImxlbmd0aCIsImxvZyIsImNsZWFydGV4dCIsInNldE1heFNlbmRGcmFnbWVudCIsInN0YXJ0VGxzIiwic2VjdXJlQ29udGV4dCIsImhvc3RuYW1lIiwidHJ1c3RTZXJ2ZXJDZXJ0aWZpY2F0ZSIsImR1cGxleHBhaXIiLCJ0bHMiLCJjb25uZWN0Iiwic29ja2V0MSIsInNlcnZlcm5hbWUiLCJyZWplY3RVbmF1dGhvcml6ZWQiLCJlbmNyeXB0ZWQiLCJzb2NrZXQyIiwib24iLCJlcnIiLCJkZXN0cm95IiwiY2lwaGVyIiwiZ2V0Q2lwaGVyIiwibmFtZSIsInZlcnNpb24iLCJlbWl0IiwiZW5jcnlwdEFsbEZ1dHVyZVRyYWZmaWMiLCJkYXRhIiwic2VuZE1lc3NhZ2UiLCJUWVBFIiwiUFJFTE9HSU4iLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJ1bnBpcGUiLCJ0bHNIYW5kc2hha2VEYXRhIiwid3JpdGUiLCJwYWNrZXRUeXBlIiwicmVzZXRDb25uZWN0aW9uIiwibWVzc2FnZSIsIk1lc3NhZ2UiLCJ0eXBlIiwiZW5kIiwicmVhZE1lc3NhZ2UiLCJyZXN1bHQiLCJuZXh0IiwiZG9uZSIsIkVycm9yIiwidmFsdWUiLCJwYXVzZSIsInJlc3VtZSIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi9zcmMvbWVzc2FnZS1pby50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuY29uc3QgRHVwbGV4UGFpciA9IHJlcXVpcmUoJ25hdGl2ZS1kdXBsZXhwYWlyJyk7XG5cbmltcG9ydCB7IER1cGxleCB9IGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgKiBhcyB0bHMgZnJvbSAndGxzJztcbmltcG9ydCB7IFNvY2tldCB9IGZyb20gJ25ldCc7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuXG5pbXBvcnQgRGVidWcgZnJvbSAnLi9kZWJ1Zyc7XG5cbmltcG9ydCBNZXNzYWdlIGZyb20gJy4vbWVzc2FnZSc7XG5pbXBvcnQgeyBUWVBFIH0gZnJvbSAnLi9wYWNrZXQnO1xuXG5pbXBvcnQgSW5jb21pbmdNZXNzYWdlU3RyZWFtIGZyb20gJy4vaW5jb21pbmctbWVzc2FnZS1zdHJlYW0nO1xuaW1wb3J0IE91dGdvaW5nTWVzc2FnZVN0cmVhbSBmcm9tICcuL291dGdvaW5nLW1lc3NhZ2Utc3RyZWFtJztcblxuY2xhc3MgTWVzc2FnZUlPIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgc29ja2V0OiBTb2NrZXQ7XG4gIGRlYnVnOiBEZWJ1ZztcblxuICB0bHNOZWdvdGlhdGlvbkNvbXBsZXRlOiBib29sZWFuO1xuXG4gIHByaXZhdGUgaW5jb21pbmdNZXNzYWdlU3RyZWFtOiBJbmNvbWluZ01lc3NhZ2VTdHJlYW07XG4gIG91dGdvaW5nTWVzc2FnZVN0cmVhbTogT3V0Z29pbmdNZXNzYWdlU3RyZWFtO1xuXG4gIHNlY3VyZVBhaXI/OiB7XG4gICAgY2xlYXJ0ZXh0OiB0bHMuVExTU29ja2V0O1xuICAgIGVuY3J5cHRlZDogRHVwbGV4O1xuICB9XG5cbiAgaW5jb21pbmdNZXNzYWdlSXRlcmF0b3I6IEFzeW5jSXRlcmFibGVJdGVyYXRvcjxNZXNzYWdlPjtcblxuICBjb25zdHJ1Y3Rvcihzb2NrZXQ6IFNvY2tldCwgcGFja2V0U2l6ZTogbnVtYmVyLCBkZWJ1ZzogRGVidWcpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5zb2NrZXQgPSBzb2NrZXQ7XG4gICAgdGhpcy5kZWJ1ZyA9IGRlYnVnO1xuXG4gICAgdGhpcy50bHNOZWdvdGlhdGlvbkNvbXBsZXRlID0gZmFsc2U7XG5cbiAgICB0aGlzLmluY29taW5nTWVzc2FnZVN0cmVhbSA9IG5ldyBJbmNvbWluZ01lc3NhZ2VTdHJlYW0odGhpcy5kZWJ1Zyk7XG4gICAgdGhpcy5pbmNvbWluZ01lc3NhZ2VJdGVyYXRvciA9IHRoaXMuaW5jb21pbmdNZXNzYWdlU3RyZWFtW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpO1xuXG4gICAgdGhpcy5vdXRnb2luZ01lc3NhZ2VTdHJlYW0gPSBuZXcgT3V0Z29pbmdNZXNzYWdlU3RyZWFtKHRoaXMuZGVidWcsIHsgcGFja2V0U2l6ZTogcGFja2V0U2l6ZSB9KTtcblxuICAgIHRoaXMuc29ja2V0LnBpcGUodGhpcy5pbmNvbWluZ01lc3NhZ2VTdHJlYW0pO1xuICAgIHRoaXMub3V0Z29pbmdNZXNzYWdlU3RyZWFtLnBpcGUodGhpcy5zb2NrZXQpO1xuICB9XG5cbiAgcGFja2V0U2l6ZSguLi5hcmdzOiBbbnVtYmVyXSkge1xuICAgIGlmIChhcmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHBhY2tldFNpemUgPSBhcmdzWzBdO1xuICAgICAgdGhpcy5kZWJ1Zy5sb2coJ1BhY2tldCBzaXplIGNoYW5nZWQgZnJvbSAnICsgdGhpcy5vdXRnb2luZ01lc3NhZ2VTdHJlYW0ucGFja2V0U2l6ZSArICcgdG8gJyArIHBhY2tldFNpemUpO1xuICAgICAgdGhpcy5vdXRnb2luZ01lc3NhZ2VTdHJlYW0ucGFja2V0U2l6ZSA9IHBhY2tldFNpemU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2VjdXJlUGFpcikge1xuICAgICAgdGhpcy5zZWN1cmVQYWlyLmNsZWFydGV4dC5zZXRNYXhTZW5kRnJhZ21lbnQodGhpcy5vdXRnb2luZ01lc3NhZ2VTdHJlYW0ucGFja2V0U2l6ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMub3V0Z29pbmdNZXNzYWdlU3RyZWFtLnBhY2tldFNpemU7XG4gIH1cblxuICBzdGFydFRscyhzZWN1cmVDb250ZXh0OiB0bHMuU2VjdXJlQ29udGV4dCwgaG9zdG5hbWU6IHN0cmluZywgdHJ1c3RTZXJ2ZXJDZXJ0aWZpY2F0ZTogYm9vbGVhbikge1xuICAgIGNvbnN0IGR1cGxleHBhaXIgPSBuZXcgRHVwbGV4UGFpcigpO1xuICAgIGNvbnN0IHNlY3VyZVBhaXIgPSB0aGlzLnNlY3VyZVBhaXIgPSB7XG4gICAgICBjbGVhcnRleHQ6IHRscy5jb25uZWN0KHtcbiAgICAgICAgc29ja2V0OiBkdXBsZXhwYWlyLnNvY2tldDEgYXMgU29ja2V0LFxuICAgICAgICBzZXJ2ZXJuYW1lOiBob3N0bmFtZSxcbiAgICAgICAgc2VjdXJlQ29udGV4dDogc2VjdXJlQ29udGV4dCxcbiAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiAhdHJ1c3RTZXJ2ZXJDZXJ0aWZpY2F0ZVxuICAgICAgfSksXG4gICAgICBlbmNyeXB0ZWQ6IGR1cGxleHBhaXIuc29ja2V0MlxuICAgIH07XG5cbiAgICAvLyBJZiBhbiBlcnJvciBoYXBwZW5zIGluIHRoZSBUTFMgbGF5ZXIsIHRoZXJlIGlzIG5vdGhpbmcgd2UgY2FuIGRvIGFib3V0IGl0LlxuICAgIC8vIEZvcndhcmQgdGhlIGVycm9yIHRvIHRoZSBzb2NrZXQgc28gdGhlIGNvbm5lY3Rpb24gZ2V0cyBwcm9wZXJseSBjbGVhbmVkIHVwLlxuICAgIHNlY3VyZVBhaXIuY2xlYXJ0ZXh0Lm9uKCdlcnJvcicsIChlcnI/OiBFcnJvcikgPT4ge1xuICAgICAgLy8gU3RyZWFtcyBpbiBub2RlLmpzIHZlcnNpb25zIGJlZm9yZSA4LjAuMCBkb24ndCBzdXBwb3J0IGAuZGVzdHJveWBcbiAgICAgIGlmICh0eXBlb2Ygc2VjdXJlUGFpci5lbmNyeXB0ZWQuZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBzZWN1cmVQYWlyLmVuY3J5cHRlZC5kZXN0cm95KCk7XG4gICAgICB9XG4gICAgICB0aGlzLnNvY2tldC5kZXN0cm95KGVycik7XG4gICAgfSk7XG5cbiAgICBzZWN1cmVQYWlyLmNsZWFydGV4dC5vbignc2VjdXJlQ29ubmVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGNpcGhlciA9IHNlY3VyZVBhaXIuY2xlYXJ0ZXh0LmdldENpcGhlcigpO1xuICAgICAgaWYgKGNpcGhlcikge1xuICAgICAgICB0aGlzLmRlYnVnLmxvZygnVExTIG5lZ290aWF0ZWQgKCcgKyBjaXBoZXIubmFtZSArICcsICcgKyBjaXBoZXIudmVyc2lvbiArICcpJyk7XG4gICAgICB9XG4gICAgICB0aGlzLmVtaXQoJ3NlY3VyZScsIHNlY3VyZVBhaXIuY2xlYXJ0ZXh0KTtcbiAgICAgIHRoaXMuZW5jcnlwdEFsbEZ1dHVyZVRyYWZmaWMoKTtcbiAgICB9KTtcblxuICAgIHNlY3VyZVBhaXIuZW5jcnlwdGVkLm9uKCdkYXRhJywgKGRhdGE6IEJ1ZmZlcikgPT4ge1xuICAgICAgdGhpcy5zZW5kTWVzc2FnZShUWVBFLlBSRUxPR0lOLCBkYXRhLCBmYWxzZSk7XG4gICAgfSk7XG4gIH1cblxuICBlbmNyeXB0QWxsRnV0dXJlVHJhZmZpYygpIHtcbiAgICBjb25zdCBzZWN1cmVQYWlyID0gdGhpcy5zZWN1cmVQYWlyITtcblxuICAgIHNlY3VyZVBhaXIuY2xlYXJ0ZXh0LnNldE1heFNlbmRGcmFnbWVudCh0aGlzLm91dGdvaW5nTWVzc2FnZVN0cmVhbS5wYWNrZXRTaXplKTtcbiAgICBzZWN1cmVQYWlyLmVuY3J5cHRlZC5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2RhdGEnKTtcblxuICAgIHRoaXMub3V0Z29pbmdNZXNzYWdlU3RyZWFtLnVucGlwZSh0aGlzLnNvY2tldCk7XG4gICAgdGhpcy5zb2NrZXQudW5waXBlKHRoaXMuaW5jb21pbmdNZXNzYWdlU3RyZWFtKTtcblxuICAgIHRoaXMuc29ja2V0LnBpcGUoc2VjdXJlUGFpci5lbmNyeXB0ZWQpO1xuICAgIHNlY3VyZVBhaXIuZW5jcnlwdGVkLnBpcGUodGhpcy5zb2NrZXQpO1xuXG4gICAgc2VjdXJlUGFpci5jbGVhcnRleHQucGlwZSh0aGlzLmluY29taW5nTWVzc2FnZVN0cmVhbSk7XG4gICAgdGhpcy5vdXRnb2luZ01lc3NhZ2VTdHJlYW0ucGlwZShzZWN1cmVQYWlyLmNsZWFydGV4dCk7XG5cbiAgICB0aGlzLnRsc05lZ290aWF0aW9uQ29tcGxldGUgPSB0cnVlO1xuICB9XG5cbiAgdGxzSGFuZHNoYWtlRGF0YShkYXRhOiBCdWZmZXIpIHtcbiAgICBjb25zdCBzZWN1cmVQYWlyID0gdGhpcy5zZWN1cmVQYWlyITtcblxuICAgIHNlY3VyZVBhaXIuZW5jcnlwdGVkLndyaXRlKGRhdGEpO1xuICB9XG5cbiAgLy8gVE9ETyBsaXN0ZW4gZm9yICdkcmFpbicgZXZlbnQgd2hlbiBzb2NrZXQud3JpdGUgcmV0dXJucyBmYWxzZS5cbiAgLy8gVE9ETyBpbXBsZW1lbnQgaW5jb21wbGV0ZSByZXF1ZXN0IGNhbmNlbGF0aW9uICgyLjIuMS42KVxuICBzZW5kTWVzc2FnZShwYWNrZXRUeXBlOiBudW1iZXIsIGRhdGE/OiBCdWZmZXIsIHJlc2V0Q29ubmVjdGlvbj86IGJvb2xlYW4pIHtcbiAgICBjb25zdCBtZXNzYWdlID0gbmV3IE1lc3NhZ2UoeyB0eXBlOiBwYWNrZXRUeXBlLCByZXNldENvbm5lY3Rpb246IHJlc2V0Q29ubmVjdGlvbiB9KTtcbiAgICBtZXNzYWdlLmVuZChkYXRhKTtcbiAgICB0aGlzLm91dGdvaW5nTWVzc2FnZVN0cmVhbS53cml0ZShtZXNzYWdlKTtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkIHRoZSBuZXh0IGluY29taW5nIG1lc3NhZ2UgZnJvbSB0aGUgc29ja2V0LlxuICAgKi9cbiAgYXN5bmMgcmVhZE1lc3NhZ2UoKTogUHJvbWlzZTxNZXNzYWdlPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5pbmNvbWluZ01lc3NhZ2VJdGVyYXRvci5uZXh0KCk7XG5cbiAgICBpZiAocmVzdWx0LmRvbmUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCBlbmQgb2YgbWVzc2FnZSBzdHJlYW0nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0LnZhbHVlO1xuICB9XG5cbiAgLy8gVGVtcG9yYXJpbHkgc3VzcGVuZHMgdGhlIGZsb3cgb2YgaW5jb21pbmcgcGFja2V0cy5cbiAgcGF1c2UoKSB7XG4gICAgdGhpcy5pbmNvbWluZ01lc3NhZ2VTdHJlYW0ucGF1c2UoKTtcbiAgfVxuXG4gIC8vIFJlc3VtZXMgdGhlIGZsb3cgb2YgaW5jb21pbmcgcGFja2V0cy5cbiAgcmVzdW1lKCkge1xuICAgIHRoaXMuaW5jb21pbmdNZXNzYWdlU3RyZWFtLnJlc3VtZSgpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1lc3NhZ2VJTztcbm1vZHVsZS5leHBvcnRzID0gTWVzc2FnZUlPO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBSUE7O0FBRUE7O0FBSUE7O0FBQ0E7O0FBRUE7O0FBQ0E7Ozs7Ozs7O0FBZEE7QUFDQSxNQUFNQSxVQUFVLEdBQUdDLE9BQU8sQ0FBQyxtQkFBRCxDQUExQjs7QUFlQSxNQUFNQyxTQUFOLFNBQXdCQyxvQkFBeEIsQ0FBcUM7RUFnQm5DQyxXQUFXLENBQUNDLE1BQUQsRUFBaUJDLFVBQWpCLEVBQXFDQyxLQUFyQyxFQUFtRDtJQUM1RDtJQUQ0RCxLQWY5REYsTUFlOEQ7SUFBQSxLQWQ5REUsS0FjOEQ7SUFBQSxLQVo5REMsc0JBWThEO0lBQUEsS0FWdERDLHFCQVVzRDtJQUFBLEtBVDlEQyxxQkFTOEQ7SUFBQSxLQVA5REMsVUFPOEQ7SUFBQSxLQUY5REMsdUJBRThEO0lBRzVELEtBQUtQLE1BQUwsR0FBY0EsTUFBZDtJQUNBLEtBQUtFLEtBQUwsR0FBYUEsS0FBYjtJQUVBLEtBQUtDLHNCQUFMLEdBQThCLEtBQTlCO0lBRUEsS0FBS0MscUJBQUwsR0FBNkIsSUFB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
|
|
184
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXNzYWdlSU8iLCJFdmVudEVtaXR0ZXIiLCJjb25zdHJ1Y3RvciIsInNvY2tldCIsInBhY2tldFNpemUiLCJkZWJ1ZyIsInRsc05lZ290aWF0aW9uQ29tcGxldGUiLCJpbmNvbWluZ01lc3NhZ2VTdHJlYW0iLCJvdXRnb2luZ01lc3NhZ2VTdHJlYW0iLCJzZWN1cmVQYWlyIiwiaW5jb21pbmdNZXNzYWdlSXRlcmF0b3IiLCJJbmNvbWluZ01lc3NhZ2VTdHJlYW0iLCJTeW1ib2wiLCJhc3luY0l0ZXJhdG9yIiwiT3V0Z29pbmdNZXNzYWdlU3RyZWFtIiwicGlwZSIsImFyZ3MiLCJsZW5ndGgiLCJsb2ciLCJjbGVhcnRleHQiLCJzZXRNYXhTZW5kRnJhZ21lbnQiLCJzdGFydFRscyIsInNlY3VyZUNvbnRleHQiLCJob3N0bmFtZSIsInRydXN0U2VydmVyQ2VydGlmaWNhdGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImR1cGxleHBhaXIiLCJEdXBsZXhQYWlyIiwidGxzIiwiY29ubmVjdCIsInNvY2tldDEiLCJzZXJ2ZXJuYW1lIiwicmVqZWN0VW5hdXRob3JpemVkIiwiZW5jcnlwdGVkIiwic29ja2V0MiIsIm9uU2VjdXJlQ29ubmVjdCIsInJlbW92ZUxpc3RlbmVyIiwib25SZWFkYWJsZSIsIm9uRXJyb3IiLCJvbmNlIiwiZXJyIiwiZGVzdHJveSIsImNpcGhlciIsImdldENpcGhlciIsIm5hbWUiLCJ2ZXJzaW9uIiwiZW1pdCIsInVucGlwZSIsIm1lc3NhZ2UiLCJNZXNzYWdlIiwidHlwZSIsIlRZUEUiLCJQUkVMT0dJTiIsInJlc2V0Q29ubmVjdGlvbiIsImNodW5rIiwicmVhZCIsIndyaXRlIiwiZW5kIiwicmVhZE1lc3NhZ2UiLCJ0aGVuIiwicmVzcG9uc2UiLCJkYXRhIiwiY2F0Y2giLCJzZW5kTWVzc2FnZSIsInBhY2tldFR5cGUiLCJyZXN1bHQiLCJuZXh0IiwiZG9uZSIsIkVycm9yIiwidmFsdWUiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vc3JjL21lc3NhZ2UtaW8udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IER1cGxleFBhaXIgZnJvbSAnbmF0aXZlLWR1cGxleHBhaXInO1xuXG5pbXBvcnQgeyBEdXBsZXggfSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0ICogYXMgdGxzIGZyb20gJ3Rscyc7XG5pbXBvcnQgeyBTb2NrZXQgfSBmcm9tICduZXQnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcblxuaW1wb3J0IERlYnVnIGZyb20gJy4vZGVidWcnO1xuXG5pbXBvcnQgTWVzc2FnZSBmcm9tICcuL21lc3NhZ2UnO1xuaW1wb3J0IHsgVFlQRSB9IGZyb20gJy4vcGFja2V0JztcblxuaW1wb3J0IEluY29taW5nTWVzc2FnZVN0cmVhbSBmcm9tICcuL2luY29taW5nLW1lc3NhZ2Utc3RyZWFtJztcbmltcG9ydCBPdXRnb2luZ01lc3NhZ2VTdHJlYW0gZnJvbSAnLi9vdXRnb2luZy1tZXNzYWdlLXN0cmVhbSc7XG5cbmNsYXNzIE1lc3NhZ2VJTyBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIHNvY2tldDogU29ja2V0O1xuICBkZWJ1ZzogRGVidWc7XG5cbiAgdGxzTmVnb3RpYXRpb25Db21wbGV0ZTogYm9vbGVhbjtcblxuICBwcml2YXRlIGluY29taW5nTWVzc2FnZVN0cmVhbTogSW5jb21pbmdNZXNzYWdlU3RyZWFtO1xuICBvdXRnb2luZ01lc3NhZ2VTdHJlYW06IE91dGdvaW5nTWVzc2FnZVN0cmVhbTtcblxuICBzZWN1cmVQYWlyPzoge1xuICAgIGNsZWFydGV4dDogdGxzLlRMU1NvY2tldDtcbiAgICBlbmNyeXB0ZWQ6IER1cGxleDtcbiAgfVxuXG4gIGluY29taW5nTWVzc2FnZUl0ZXJhdG9yOiBBc3luY0l0ZXJhYmxlSXRlcmF0b3I8TWVzc2FnZT47XG5cbiAgY29uc3RydWN0b3Ioc29ja2V0OiBTb2NrZXQsIHBhY2tldFNpemU6IG51bWJlciwgZGVidWc6IERlYnVnKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuc29ja2V0ID0gc29ja2V0O1xuICAgIHRoaXMuZGVidWcgPSBkZWJ1ZztcblxuICAgIHRoaXMudGxzTmVnb3RpYXRpb25Db21wbGV0ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5pbmNvbWluZ01lc3NhZ2VTdHJlYW0gPSBuZXcgSW5jb21pbmdNZXNzYWdlU3RyZWFtKHRoaXMuZGVidWcpO1xuICAgIHRoaXMuaW5jb21pbmdNZXNzYWdlSXRlcmF0b3IgPSB0aGlzLmluY29taW5nTWVzc2FnZVN0cmVhbVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtcblxuICAgIHRoaXMub3V0Z29pbmdNZXNzYWdlU3RyZWFtID0gbmV3IE91dGdvaW5nTWVzc2FnZVN0cmVhbSh0aGlzLmRlYnVnLCB7IHBhY2tldFNpemU6IHBhY2tldFNpemUgfSk7XG5cbiAgICB0aGlzLnNvY2tldC5waXBlKHRoaXMuaW5jb21pbmdNZXNzYWdlU3RyZWFtKTtcbiAgICB0aGlzLm91dGdvaW5nTWVzc2FnZVN0cmVhbS5waXBlKHRoaXMuc29ja2V0KTtcbiAgfVxuXG4gIHBhY2tldFNpemUoLi4uYXJnczogW251bWJlcl0pIHtcbiAgICBpZiAoYXJncy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBwYWNrZXRTaXplID0gYXJnc1swXTtcbiAgICAgIHRoaXMuZGVidWcubG9nKCdQYWNrZXQgc2l6ZSBjaGFuZ2VkIGZyb20gJyArIHRoaXMub3V0Z29pbmdNZXNzYWdlU3RyZWFtLnBhY2tldFNpemUgKyAnIHRvICcgKyBwYWNrZXRTaXplKTtcbiAgICAgIHRoaXMub3V0Z29pbmdNZXNzYWdlU3RyZWFtLnBhY2tldFNpemUgPSBwYWNrZXRTaXplO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNlY3VyZVBhaXIpIHtcbiAgICAgIHRoaXMuc2VjdXJlUGFpci5jbGVhcnRleHQuc2V0TWF4U2VuZEZyYWdtZW50KHRoaXMub3V0Z29pbmdNZXNzYWdlU3RyZWFtLnBhY2tldFNpemUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm91dGdvaW5nTWVzc2FnZVN0cmVhbS5wYWNrZXRTaXplO1xuICB9XG5cbiAgLy8gTmVnb3RpYXRlIFRMUyBlbmNyeXB0aW9uLlxuICBzdGFydFRscyhzZWN1cmVDb250ZXh0OiB0bHMuU2VjdXJlQ29udGV4dCwgaG9zdG5hbWU6IHN0cmluZywgdHJ1c3RTZXJ2ZXJDZXJ0aWZpY2F0ZTogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBkdXBsZXhwYWlyID0gbmV3IER1cGxleFBhaXIoKTtcbiAgICAgIGNvbnN0IHNlY3VyZVBhaXIgPSB0aGlzLnNlY3VyZVBhaXIgPSB7XG4gICAgICAgIGNsZWFydGV4dDogdGxzLmNvbm5lY3Qoe1xuICAgICAgICAgIHNvY2tldDogZHVwbGV4cGFpci5zb2NrZXQxIGFzIFNvY2tldCxcbiAgICAgICAgICBzZXJ2ZXJuYW1lOiBob3N0bmFtZSxcbiAgICAgICAgICBzZWN1cmVDb250ZXh0OiBzZWN1cmVDb250ZXh0LFxuICAgICAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogIXRydXN0U2VydmVyQ2VydGlmaWNhdGVcbiAgICAgICAgfSksXG4gICAgICAgIGVuY3J5cHRlZDogZHVwbGV4cGFpci5zb2NrZXQyXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvblNlY3VyZUNvbm5lY3QgPSAoKSA9PiB7XG4gICAgICAgIHNlY3VyZVBhaXIuZW5jcnlwdGVkLnJlbW92ZUxpc3RlbmVyKCdyZWFkYWJsZScsIG9uUmVhZGFibGUpO1xuICAgICAgICBzZWN1cmVQYWlyLmNsZWFydGV4dC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbkVycm9yKTtcbiAgICAgICAgc2VjdXJlUGFpci5jbGVhcnRleHQucmVtb3ZlTGlzdGVuZXIoJ3NlY3VyZUNvbm5lY3QnLCBvblNlY3VyZUNvbm5lY3QpO1xuXG4gICAgICAgIC8vIElmIHdlIGVuY291bnRlciBhbnkgZXJyb3JzIGZyb20gdGhpcyBwb2ludCBvbixcbiAgICAgICAgLy8gd2UganVzdCBmb3J3YXJkIHRoZW0gdG8gdGhlIGFjdHVhbCBuZXR3b3JrIHNvY2tldC5cbiAgICAgICAgc2VjdXJlUGFpci5jbGVhcnRleHQub25jZSgnZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgICAgdGhpcy5zb2NrZXQuZGVzdHJveShlcnIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBjaXBoZXIgPSBzZWN1cmVQYWlyLmNsZWFydGV4dC5nZXRDaXBoZXIoKTtcbiAgICAgICAgaWYgKGNpcGhlcikge1xuICAgICAgICAgIHRoaXMuZGVidWcubG9nKCdUTFMgbmVnb3RpYXRlZCAoJyArIGNpcGhlci5uYW1lICsgJywgJyArIGNpcGhlci52ZXJzaW9uICsgJyknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZW1pdCgnc2VjdXJlJywgc2VjdXJlUGFpci5jbGVhcnRleHQpO1xuXG4gICAgICAgIHNlY3VyZVBhaXIuY2xlYXJ0ZXh0LnNldE1heFNlbmRGcmFnbWVudCh0aGlzLm91dGdvaW5nTWVzc2FnZVN0cmVhbS5wYWNrZXRTaXplKTtcblxuICAgICAgICB0aGlzLm91dGdvaW5nTWVzc2FnZVN0cmVhbS51bnBpcGUodGhpcy5zb2NrZXQpO1xuICAgICAgICB0aGlzLnNvY2tldC51bnBpcGUodGhpcy5pbmNvbWluZ01lc3NhZ2VTdHJlYW0pO1xuXG4gICAgICAgIHRoaXMuc29ja2V0LnBpcGUoc2VjdXJlUGFpci5lbmNyeXB0ZWQpO1xuICAgICAgICBzZWN1cmVQYWlyLmVuY3J5cHRlZC5waXBlKHRoaXMuc29ja2V0KTtcblxuICAgICAgICBzZWN1cmVQYWlyLmNsZWFydGV4dC5waXBlKHRoaXMuaW5jb21pbmdNZXNzYWdlU3RyZWFtKTtcbiAgICAgICAgdGhpcy5vdXRnb2luZ01lc3NhZ2VTdHJlYW0ucGlwZShzZWN1cmVQYWlyLmNsZWFydGV4dCk7XG5cbiAgICAgICAgdGhpcy50bHNOZWdvdGlhdGlvbkNvbXBsZXRlID0gdHJ1ZTtcblxuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvbkVycm9yID0gKGVycj86IEVycm9yKSA9PiB7XG4gICAgICAgIHNlY3VyZVBhaXIuZW5jcnlwdGVkLnJlbW92ZUxpc3RlbmVyKCdyZWFkYWJsZScsIG9uUmVhZGFibGUpO1xuICAgICAgICBzZWN1cmVQYWlyLmNsZWFydGV4dC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbkVycm9yKTtcbiAgICAgICAgc2VjdXJlUGFpci5jbGVhcnRleHQucmVtb3ZlTGlzdGVuZXIoJ3NlY3VyZUNvbm5lY3QnLCBvblNlY3VyZUNvbm5lY3QpO1xuXG4gICAgICAgIHNlY3VyZVBhaXIuY2xlYXJ0ZXh0LmRlc3Ryb3koKTtcbiAgICAgICAgc2VjdXJlUGFpci5lbmNyeXB0ZWQuZGVzdHJveSgpO1xuXG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfTtcblxuICAgICAgY29uc3Qgb25SZWFkYWJsZSA9ICgpID0+IHtcbiAgICAgICAgLy8gV2hlbiB0aGVyZSBpcyBoYW5kc2hha2UgZGF0YSBvbiB0aGUgZW5jcnlwZWQgc3RyZWFtIG9mIHRoZSBzZWN1cmUgcGFpcixcbiAgICAgICAgLy8gd2Ugd3JhcCBpdCBpbnRvIGEgYFBSRUxPR0lOYCBtZXNzYWdlIGFuZCBzZW5kIGl0IHRvIHRoZSBzZXJ2ZXIuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEZvciBlYWNoIGBQUkVMT0dJTmAgbWVzc2FnZSB3ZSBzZW50IHdlIGdldCBiYWNrIGV4YWN0bHkgb25lIHJlc3BvbnNlIG1lc3NhZ2VcbiAgICAgICAgLy8gdGhhdCBjb250YWlucyB0aGUgc2VydmVyJ3MgaGFuZHNoYWtlIHJlc3BvbnNlIGRhdGEuXG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBuZXcgTWVzc2FnZSh7IHR5cGU6IFRZUEUuUFJFTE9HSU4sIHJlc2V0Q29ubmVjdGlvbjogZmFsc2UgfSk7XG5cbiAgICAgICAgbGV0IGNodW5rO1xuICAgICAgICB3aGlsZSAoY2h1bmsgPSBzZWN1cmVQYWlyLmVuY3J5cHRlZC5yZWFkKCkpIHtcbiAgICAgICAgICBtZXNzYWdlLndyaXRlKGNodW5rKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm91dGdvaW5nTWVzc2FnZVN0cmVhbS53cml0ZShtZXNzYWdlKTtcbiAgICAgICAgbWVzc2FnZS5lbmQoKTtcblxuICAgICAgICB0aGlzLnJlYWRNZXNzYWdlKCkudGhlbihhc3luYyAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAvLyBTZXR1cCByZWFkYWJsZSBoYW5kbGVyIGZvciB0aGUgbmV4dCByb3VuZCBvZiBoYW5kc2hha2luZy5cbiAgICAgICAgICAvLyBJZiB3ZSBlbmNvdW50ZXIgYSBgc2VjdXJlQ29ubmVjdGAgb24gdGhlIGNsZWFydGV4dCBzaWRlXG4gICAgICAgICAgLy8gb2YgdGhlIHNlY3VyZSBwYWlyLCB0aGUgYHJlYWRhYmxlYCBoYW5kbGVyIGlzIGNsZWFyZWRcbiAgICAgICAgICAvLyBhbmQgbm8gZnVydGhlciBoYW5kc2hha2UgaGFuZGxpbmcgd2lsbCBoYXBwZW4uXG4gICAgICAgICAgc2VjdXJlUGFpci5lbmNyeXB0ZWQub25jZSgncmVhZGFibGUnLCBvblJlYWRhYmxlKTtcblxuICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgZGF0YSBvZiByZXNwb25zZSkge1xuICAgICAgICAgICAgLy8gV2UgZmVlZCB0aGUgc2VydmVyJ3MgaGFuZHNoYWtlIHJlc3BvbnNlIGJhY2sgaW50byB0aGVcbiAgICAgICAgICAgIC8vIGVuY3J5cHRlZCBlbmQgb2YgdGhlIHNlY3VyZSBwYWlyLlxuICAgICAgICAgICAgc2VjdXJlUGFpci5lbmNyeXB0ZWQud3JpdGUoZGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KS5jYXRjaChvbkVycm9yKTtcbiAgICAgIH07XG5cbiAgICAgIHNlY3VyZVBhaXIuY2xlYXJ0ZXh0Lm9uY2UoJ2Vycm9yJywgb25FcnJvcik7XG4gICAgICBzZWN1cmVQYWlyLmNsZWFydGV4dC5vbmNlKCdzZWN1cmVDb25uZWN0Jywgb25TZWN1cmVDb25uZWN0KTtcbiAgICAgIHNlY3VyZVBhaXIuZW5jcnlwdGVkLm9uY2UoJ3JlYWRhYmxlJywgb25SZWFkYWJsZSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBUT0RPIGxpc3RlbiBmb3IgJ2RyYWluJyBldmVudCB3aGVuIHNvY2tldC53cml0ZSByZXR1cm5zIGZhbHNlLlxuICAvLyBUT0RPIGltcGxlbWVudCBpbmNvbXBsZXRlIHJlcXVlc3QgY2FuY2VsYXRpb24gKDIuMi4xLjYpXG4gIHNlbmRNZXNzYWdlKHBhY2tldFR5cGU6IG51bWJlciwgZGF0YT86IEJ1ZmZlciwgcmVzZXRDb25uZWN0aW9uPzogYm9vbGVhbikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBuZXcgTWVzc2FnZSh7IHR5cGU6IHBhY2tldFR5cGUsIHJlc2V0Q29ubmVjdGlvbjogcmVzZXRDb25uZWN0aW9uIH0pO1xuICAgIG1lc3NhZ2UuZW5kKGRhdGEpO1xuICAgIHRoaXMub3V0Z29pbmdNZXNzYWdlU3RyZWFtLndyaXRlKG1lc3NhZ2UpO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWQgdGhlIG5leHQgaW5jb21pbmcgbWVzc2FnZSBmcm9tIHRoZSBzb2NrZXQuXG4gICAqL1xuICBhc3luYyByZWFkTWVzc2FnZSgpOiBQcm9taXNlPE1lc3NhZ2U+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmluY29taW5nTWVzc2FnZUl0ZXJhdG9yLm5leHQoKTtcblxuICAgIGlmIChyZXN1bHQuZG9uZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIGVuZCBvZiBtZXNzYWdlIHN0cmVhbScpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQudmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTWVzc2FnZUlPO1xubW9kdWxlLmV4cG9ydHMgPSBNZXNzYWdlSU87XG4iXSwibWFwcGluZ3MiOiI7Ozs7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
|