tedious-fabric 1.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/CLAUDE.md +91 -0
- package/LICENSE +21 -0
- package/README.md +67 -0
- package/appveyor.yml +67 -0
- package/eslint.config.mjs +314 -0
- package/lib/all-headers.d.ts +2 -0
- package/lib/all-headers.js +24 -0
- package/lib/all-headers.js.map +1 -0
- package/lib/always-encrypted/aead-aes-256-cbc-hmac-algorithm.js +82 -0
- package/lib/always-encrypted/aead-aes-256-cbc-hmac-algorithm.js.map +1 -0
- package/lib/always-encrypted/aead-aes-256-cbc-hmac-encryption-key.js +55 -0
- package/lib/always-encrypted/aead-aes-256-cbc-hmac-encryption-key.js.map +1 -0
- package/lib/always-encrypted/cek-entry.d.ts +11 -0
- package/lib/always-encrypted/cek-entry.js +42 -0
- package/lib/always-encrypted/cek-entry.js.map +1 -0
- package/lib/always-encrypted/get-parameter-encryption-metadata.js +90 -0
- package/lib/always-encrypted/get-parameter-encryption-metadata.js.map +1 -0
- package/lib/always-encrypted/key-crypto.js +94 -0
- package/lib/always-encrypted/key-crypto.js.map +1 -0
- package/lib/always-encrypted/keystore-provider-azure-key-vault.d.ts +21 -0
- package/lib/always-encrypted/keystore-provider-azure-key-vault.js +247 -0
- package/lib/always-encrypted/keystore-provider-azure-key-vault.js.map +1 -0
- package/lib/always-encrypted/symmetric-key-cache.js +36 -0
- package/lib/always-encrypted/symmetric-key-cache.js.map +1 -0
- package/lib/always-encrypted/symmetric-key.js +25 -0
- package/lib/always-encrypted/symmetric-key.js.map +1 -0
- package/lib/always-encrypted/types.d.ts +73 -0
- package/lib/always-encrypted/types.js +61 -0
- package/lib/always-encrypted/types.js.map +1 -0
- package/lib/always-encrypted/utils.js +23 -0
- package/lib/always-encrypted/utils.js.map +1 -0
- package/lib/bulk-load-payload.d.ts +8 -0
- package/lib/bulk-load-payload.js +23 -0
- package/lib/bulk-load-payload.js.map +1 -0
- package/lib/bulk-load.d.ts +275 -0
- package/lib/bulk-load.js +515 -0
- package/lib/bulk-load.js.map +1 -0
- package/lib/collation.d.ts +28 -0
- package/lib/collation.js +348 -0
- package/lib/collation.js.map +1 -0
- package/lib/connection.d.ts +1309 -0
- package/lib/connection.js +2732 -0
- package/lib/connection.js.map +1 -0
- package/lib/connector.d.ts +18 -0
- package/lib/connector.js +142 -0
- package/lib/connector.js.map +1 -0
- package/lib/data-type.d.ts +554 -0
- package/lib/data-type.js +428 -0
- package/lib/data-type.js.map +1 -0
- package/lib/data-types/bigint.d.ts +3 -0
- package/lib/data-types/bigint.js +53 -0
- package/lib/data-types/bigint.js.map +1 -0
- package/lib/data-types/binary.d.ts +5 -0
- package/lib/data-types/binary.js +67 -0
- package/lib/data-types/binary.js.map +1 -0
- package/lib/data-types/bit.d.ts +3 -0
- package/lib/data-types/bit.js +46 -0
- package/lib/data-types/bit.js.map +1 -0
- package/lib/data-types/bitn.d.ts +3 -0
- package/lib/data-types/bitn.js +29 -0
- package/lib/data-types/bitn.js.map +1 -0
- package/lib/data-types/char.d.ts +5 -0
- package/lib/data-types/char.js +86 -0
- package/lib/data-types/char.js.map +1 -0
- package/lib/data-types/date.d.ts +3 -0
- package/lib/data-types/date.js +72 -0
- package/lib/data-types/date.js.map +1 -0
- package/lib/data-types/datetime.d.ts +3 -0
- package/lib/data-types/datetime.js +93 -0
- package/lib/data-types/datetime.js.map +1 -0
- package/lib/data-types/datetime2.d.ts +5 -0
- package/lib/data-types/datetime2.js +118 -0
- package/lib/data-types/datetime2.js.map +1 -0
- package/lib/data-types/datetimen.d.ts +3 -0
- package/lib/data-types/datetimen.js +29 -0
- package/lib/data-types/datetimen.js.map +1 -0
- package/lib/data-types/datetimeoffset.d.ts +5 -0
- package/lib/data-types/datetimeoffset.js +111 -0
- package/lib/data-types/datetimeoffset.js.map +1 -0
- package/lib/data-types/decimal.d.ts +6 -0
- package/lib/data-types/decimal.js +107 -0
- package/lib/data-types/decimal.js.map +1 -0
- package/lib/data-types/decimaln.d.ts +3 -0
- package/lib/data-types/decimaln.js +29 -0
- package/lib/data-types/decimaln.js.map +1 -0
- package/lib/data-types/float.d.ts +3 -0
- package/lib/data-types/float.js +47 -0
- package/lib/data-types/float.js.map +1 -0
- package/lib/data-types/floatn.d.ts +3 -0
- package/lib/data-types/floatn.js +29 -0
- package/lib/data-types/floatn.js.map +1 -0
- package/lib/data-types/image.d.ts +3 -0
- package/lib/data-types/image.js +56 -0
- package/lib/data-types/image.js.map +1 -0
- package/lib/data-types/int.d.ts +3 -0
- package/lib/data-types/int.js +53 -0
- package/lib/data-types/int.js.map +1 -0
- package/lib/data-types/intn.d.ts +3 -0
- package/lib/data-types/intn.js +29 -0
- package/lib/data-types/intn.js.map +1 -0
- package/lib/data-types/money.d.ts +3 -0
- package/lib/data-types/money.js +59 -0
- package/lib/data-types/money.js.map +1 -0
- package/lib/data-types/moneyn.d.ts +3 -0
- package/lib/data-types/moneyn.js +29 -0
- package/lib/data-types/moneyn.js.map +1 -0
- package/lib/data-types/nchar.d.ts +5 -0
- package/lib/data-types/nchar.js +100 -0
- package/lib/data-types/nchar.js.map +1 -0
- package/lib/data-types/ntext.d.ts +3 -0
- package/lib/data-types/ntext.js +60 -0
- package/lib/data-types/ntext.js.map +1 -0
- package/lib/data-types/null.d.ts +3 -0
- package/lib/data-types/null.js +29 -0
- package/lib/data-types/null.js.map +1 -0
- package/lib/data-types/numeric.d.ts +6 -0
- package/lib/data-types/numeric.js +106 -0
- package/lib/data-types/numeric.js.map +1 -0
- package/lib/data-types/numericn.d.ts +3 -0
- package/lib/data-types/numericn.js +29 -0
- package/lib/data-types/numericn.js.map +1 -0
- package/lib/data-types/nvarchar.d.ts +5 -0
- package/lib/data-types/nvarchar.js +133 -0
- package/lib/data-types/nvarchar.js.map +1 -0
- package/lib/data-types/real.d.ts +3 -0
- package/lib/data-types/real.js +48 -0
- package/lib/data-types/real.js.map +1 -0
- package/lib/data-types/smalldatetime.d.ts +3 -0
- package/lib/data-types/smalldatetime.js +83 -0
- package/lib/data-types/smalldatetime.js.map +1 -0
- package/lib/data-types/smallint.d.ts +3 -0
- package/lib/data-types/smallint.js +53 -0
- package/lib/data-types/smallint.js.map +1 -0
- package/lib/data-types/smallmoney.d.ts +3 -0
- package/lib/data-types/smallmoney.js +51 -0
- package/lib/data-types/smallmoney.js.map +1 -0
- package/lib/data-types/sql-variant.d.ts +3 -0
- package/lib/data-types/sql-variant.js +29 -0
- package/lib/data-types/sql-variant.js.map +1 -0
- package/lib/data-types/text.d.ts +3 -0
- package/lib/data-types/text.js +69 -0
- package/lib/data-types/text.js.map +1 -0
- package/lib/data-types/time.d.ts +3 -0
- package/lib/data-types/time.js +96 -0
- package/lib/data-types/time.js.map +1 -0
- package/lib/data-types/tinyint.d.ts +3 -0
- package/lib/data-types/tinyint.js +53 -0
- package/lib/data-types/tinyint.js.map +1 -0
- package/lib/data-types/tvp.d.ts +3 -0
- package/lib/data-types/tvp.js +117 -0
- package/lib/data-types/tvp.js.map +1 -0
- package/lib/data-types/udt.d.ts +3 -0
- package/lib/data-types/udt.js +29 -0
- package/lib/data-types/udt.js.map +1 -0
- package/lib/data-types/uniqueidentifier.d.ts +3 -0
- package/lib/data-types/uniqueidentifier.js +50 -0
- package/lib/data-types/uniqueidentifier.js.map +1 -0
- package/lib/data-types/varbinary.d.ts +5 -0
- package/lib/data-types/varbinary.js +119 -0
- package/lib/data-types/varbinary.js.map +1 -0
- package/lib/data-types/varchar.d.ts +5 -0
- package/lib/data-types/varchar.js +112 -0
- package/lib/data-types/varchar.js.map +1 -0
- package/lib/data-types/xml.d.ts +3 -0
- package/lib/data-types/xml.js +29 -0
- package/lib/data-types/xml.js.map +1 -0
- package/lib/debug.d.ts +25 -0
- package/lib/debug.js +66 -0
- package/lib/debug.js.map +1 -0
- package/lib/errors.d.ts +17 -0
- package/lib/errors.js +23 -0
- package/lib/errors.js.map +1 -0
- package/lib/guid-parser.d.ts +3 -0
- package/lib/guid-parser.js +30 -0
- package/lib/guid-parser.js.map +1 -0
- package/lib/incoming-message-stream.d.ts +19 -0
- package/lib/incoming-message-stream.js +97 -0
- package/lib/incoming-message-stream.js.map +1 -0
- package/lib/instance-lookup.d.ts +13 -0
- package/lib/instance-lookup.js +91 -0
- package/lib/instance-lookup.js.map +1 -0
- package/lib/library.d.ts +1 -0
- package/lib/library.js +8 -0
- package/lib/library.js.map +1 -0
- package/lib/login7-payload.d.ts +51 -0
- package/lib/login7-payload.js +408 -0
- package/lib/login7-payload.js.map +1 -0
- package/lib/message-io.d.ts +28 -0
- package/lib/message-io.js +152 -0
- package/lib/message-io.js.map +1 -0
- package/lib/message.d.ts +11 -0
- package/lib/message.js +21 -0
- package/lib/message.js.map +1 -0
- package/lib/metadata-parser.d.ts +48 -0
- package/lib/metadata-parser.js +380 -0
- package/lib/metadata-parser.js.map +1 -0
- package/lib/ntlm-payload.d.ts +23 -0
- package/lib/ntlm-payload.js +135 -0
- package/lib/ntlm-payload.js.map +1 -0
- package/lib/ntlm.d.ts +4 -0
- package/lib/ntlm.js +72 -0
- package/lib/ntlm.js.map +1 -0
- package/lib/outgoing-message-stream.d.ts +15 -0
- package/lib/outgoing-message-stream.js +81 -0
- package/lib/outgoing-message-stream.js.map +1 -0
- package/lib/packet.d.ts +33 -0
- package/lib/packet.js +191 -0
- package/lib/packet.js.map +1 -0
- package/lib/prelogin-payload.d.ts +67 -0
- package/lib/prelogin-payload.js +228 -0
- package/lib/prelogin-payload.js.map +1 -0
- package/lib/request.d.ts +370 -0
- package/lib/request.js +387 -0
- package/lib/request.js.map +1 -0
- package/lib/rpcrequest-payload.d.ts +16 -0
- package/lib/rpcrequest-payload.js +109 -0
- package/lib/rpcrequest-payload.js.map +1 -0
- package/lib/sender.d.ts +5 -0
- package/lib/sender.js +78 -0
- package/lib/sender.js.map +1 -0
- package/lib/special-stored-procedure.d.ts +18 -0
- package/lib/special-stored-procedure.js +26 -0
- package/lib/special-stored-procedure.js.map +1 -0
- package/lib/sqlbatch-payload.d.ts +13 -0
- package/lib/sqlbatch-payload.js +34 -0
- package/lib/sqlbatch-payload.js.map +1 -0
- package/lib/tds-versions.d.ts +6 -0
- package/lib/tds-versions.js +19 -0
- package/lib/tds-versions.js.map +1 -0
- package/lib/tedious.d.ts +13 -0
- package/lib/tedious.js +73 -0
- package/lib/tedious.js.map +1 -0
- package/lib/token/colmetadata-token-parser.d.ts +12 -0
- package/lib/token/colmetadata-token-parser.js +124 -0
- package/lib/token/colmetadata-token-parser.js.map +1 -0
- package/lib/token/done-token-parser.d.ts +6 -0
- package/lib/token/done-token-parser.js +76 -0
- package/lib/token/done-token-parser.js.map +1 -0
- package/lib/token/env-change-token-parser.d.ts +5 -0
- package/lib/token/env-change-token-parser.js +190 -0
- package/lib/token/env-change-token-parser.js.map +1 -0
- package/lib/token/feature-ext-ack-parser.d.ts +5 -0
- package/lib/token/feature-ext-ack-parser.js +52 -0
- package/lib/token/feature-ext-ack-parser.js.map +1 -0
- package/lib/token/fedauth-info-parser.d.ts +5 -0
- package/lib/token/fedauth-info-parser.js +62 -0
- package/lib/token/fedauth-info-parser.js.map +1 -0
- package/lib/token/handler.d.ts +136 -0
- package/lib/token/handler.js +445 -0
- package/lib/token/handler.js.map +1 -0
- package/lib/token/helpers.d.ts +28 -0
- package/lib/token/helpers.js +205 -0
- package/lib/token/helpers.js.map +1 -0
- package/lib/token/infoerror-token-parser.d.ts +5 -0
- package/lib/token/infoerror-token-parser.js +80 -0
- package/lib/token/infoerror-token-parser.js.map +1 -0
- package/lib/token/loginack-token-parser.d.ts +5 -0
- package/lib/token/loginack-token-parser.js +75 -0
- package/lib/token/loginack-token-parser.js.map +1 -0
- package/lib/token/nbcrow-token-parser.d.ts +4 -0
- package/lib/token/nbcrow-token-parser.js +103 -0
- package/lib/token/nbcrow-token-parser.js.map +1 -0
- package/lib/token/order-token-parser.d.ts +5 -0
- package/lib/token/order-token-parser.js +34 -0
- package/lib/token/order-token-parser.js.map +1 -0
- package/lib/token/returnstatus-token-parser.d.ts +5 -0
- package/lib/token/returnstatus-token-parser.js +21 -0
- package/lib/token/returnstatus-token-parser.js.map +1 -0
- package/lib/token/returnvalue-token-parser.d.ts +4 -0
- package/lib/token/returnvalue-token-parser.js +93 -0
- package/lib/token/returnvalue-token-parser.js.map +1 -0
- package/lib/token/row-token-parser.d.ts +4 -0
- package/lib/token/row-token-parser.js +76 -0
- package/lib/token/row-token-parser.js.map +1 -0
- package/lib/token/sspi-token-parser.d.ts +5 -0
- package/lib/token/sspi-token-parser.js +42 -0
- package/lib/token/sspi-token-parser.js.map +1 -0
- package/lib/token/stream-parser.d.ts +34 -0
- package/lib/token/stream-parser.js +341 -0
- package/lib/token/stream-parser.js.map +1 -0
- package/lib/token/token-stream-parser.d.ts +15 -0
- package/lib/token/token-stream-parser.js +36 -0
- package/lib/token/token-stream-parser.js.map +1 -0
- package/lib/token/token.d.ts +312 -0
- package/lib/token/token.js +328 -0
- package/lib/token/token.js.map +1 -0
- package/lib/tracking-buffer/writable-tracking-buffer.d.ts +47 -0
- package/lib/tracking-buffer/writable-tracking-buffer.js +249 -0
- package/lib/tracking-buffer/writable-tracking-buffer.js.map +1 -0
- package/lib/transaction.d.ts +39 -0
- package/lib/transaction.js +137 -0
- package/lib/transaction.js.map +1 -0
- package/lib/transient-error-lookup.d.ts +3 -0
- package/lib/transient-error-lookup.js +19 -0
- package/lib/transient-error-lookup.js.map +1 -0
- package/lib/value-parser.d.ts +7 -0
- package/lib/value-parser.js +813 -0
- package/lib/value-parser.js.map +1 -0
- package/package.json +145 -0
- package/pull_request_template.md +9 -0
- package/tsconfig.build-types.json +15 -0
- package/tsconfig.json +30 -0
- package/types/js-md4.d.ts +7 -0
- package/types/native-duplexpair.d.ts +12 -0
package/lib/connector.js
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.connectInParallel = connectInParallel;
|
|
7
|
+
exports.connectInSequence = connectInSequence;
|
|
8
|
+
exports.lookupAllAddresses = lookupAllAddresses;
|
|
9
|
+
var _net = _interopRequireDefault(require("net"));
|
|
10
|
+
var _nodeUrl = _interopRequireDefault(require("node:url"));
|
|
11
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
|
+
async function connectInParallel(options, lookup, signal) {
|
|
13
|
+
signal.throwIfAborted();
|
|
14
|
+
const addresses = await lookupAllAddresses(options.host, lookup, signal);
|
|
15
|
+
return await new Promise((resolve, reject) => {
|
|
16
|
+
const sockets = new Array(addresses.length);
|
|
17
|
+
const errors = [];
|
|
18
|
+
function onError(err) {
|
|
19
|
+
errors.push(err);
|
|
20
|
+
this.removeListener('error', onError);
|
|
21
|
+
this.removeListener('connect', onConnect);
|
|
22
|
+
this.destroy();
|
|
23
|
+
if (errors.length === addresses.length) {
|
|
24
|
+
signal.removeEventListener('abort', onAbort);
|
|
25
|
+
reject(new AggregateError(errors, 'Could not connect (parallel)'));
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function onConnect() {
|
|
29
|
+
signal.removeEventListener('abort', onAbort);
|
|
30
|
+
for (let j = 0; j < sockets.length; j++) {
|
|
31
|
+
const socket = sockets[j];
|
|
32
|
+
if (this === socket) {
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
socket.removeListener('error', onError);
|
|
36
|
+
socket.removeListener('connect', onConnect);
|
|
37
|
+
socket.destroy();
|
|
38
|
+
}
|
|
39
|
+
resolve(this);
|
|
40
|
+
}
|
|
41
|
+
const onAbort = () => {
|
|
42
|
+
for (let j = 0; j < sockets.length; j++) {
|
|
43
|
+
const socket = sockets[j];
|
|
44
|
+
socket.removeListener('error', onError);
|
|
45
|
+
socket.removeListener('connect', onConnect);
|
|
46
|
+
socket.destroy();
|
|
47
|
+
}
|
|
48
|
+
reject(signal.reason);
|
|
49
|
+
};
|
|
50
|
+
for (let i = 0, len = addresses.length; i < len; i++) {
|
|
51
|
+
const socket = sockets[i] = _net.default.connect({
|
|
52
|
+
...options,
|
|
53
|
+
host: addresses[i].address,
|
|
54
|
+
family: addresses[i].family
|
|
55
|
+
});
|
|
56
|
+
socket.on('error', onError);
|
|
57
|
+
socket.on('connect', onConnect);
|
|
58
|
+
}
|
|
59
|
+
signal.addEventListener('abort', onAbort, {
|
|
60
|
+
once: true
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
async function connectInSequence(options, lookup, signal) {
|
|
65
|
+
signal.throwIfAborted();
|
|
66
|
+
const errors = [];
|
|
67
|
+
const addresses = await lookupAllAddresses(options.host, lookup, signal);
|
|
68
|
+
for (const address of addresses) {
|
|
69
|
+
try {
|
|
70
|
+
return await new Promise((resolve, reject) => {
|
|
71
|
+
const socket = _net.default.connect({
|
|
72
|
+
...options,
|
|
73
|
+
host: address.address,
|
|
74
|
+
family: address.family
|
|
75
|
+
});
|
|
76
|
+
const onAbort = () => {
|
|
77
|
+
socket.removeListener('error', onError);
|
|
78
|
+
socket.removeListener('connect', onConnect);
|
|
79
|
+
socket.destroy();
|
|
80
|
+
reject(signal.reason);
|
|
81
|
+
};
|
|
82
|
+
const onError = err => {
|
|
83
|
+
signal.removeEventListener('abort', onAbort);
|
|
84
|
+
socket.removeListener('error', onError);
|
|
85
|
+
socket.removeListener('connect', onConnect);
|
|
86
|
+
socket.destroy();
|
|
87
|
+
reject(err);
|
|
88
|
+
};
|
|
89
|
+
const onConnect = () => {
|
|
90
|
+
signal.removeEventListener('abort', onAbort);
|
|
91
|
+
socket.removeListener('error', onError);
|
|
92
|
+
socket.removeListener('connect', onConnect);
|
|
93
|
+
resolve(socket);
|
|
94
|
+
};
|
|
95
|
+
signal.addEventListener('abort', onAbort, {
|
|
96
|
+
once: true
|
|
97
|
+
});
|
|
98
|
+
socket.on('error', onError);
|
|
99
|
+
socket.on('connect', onConnect);
|
|
100
|
+
});
|
|
101
|
+
} catch (err) {
|
|
102
|
+
// If the signal was aborted, re-throw the error.
|
|
103
|
+
signal.throwIfAborted();
|
|
104
|
+
errors.push(err);
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
throw new AggregateError(errors, 'Could not connect (sequence)');
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Look up all addresses for the given hostname.
|
|
113
|
+
*/
|
|
114
|
+
async function lookupAllAddresses(host, lookup, signal) {
|
|
115
|
+
signal.throwIfAborted();
|
|
116
|
+
if (_net.default.isIPv6(host)) {
|
|
117
|
+
return [{
|
|
118
|
+
address: host,
|
|
119
|
+
family: 6
|
|
120
|
+
}];
|
|
121
|
+
} else if (_net.default.isIPv4(host)) {
|
|
122
|
+
return [{
|
|
123
|
+
address: host,
|
|
124
|
+
family: 4
|
|
125
|
+
}];
|
|
126
|
+
} else {
|
|
127
|
+
return await new Promise((resolve, reject) => {
|
|
128
|
+
const onAbort = () => {
|
|
129
|
+
reject(signal.reason);
|
|
130
|
+
};
|
|
131
|
+
signal.addEventListener('abort', onAbort);
|
|
132
|
+
const domainInASCII = _nodeUrl.default.domainToASCII(host);
|
|
133
|
+
lookup(domainInASCII === '' ? host : domainInASCII, {
|
|
134
|
+
all: true
|
|
135
|
+
}, (err, addresses) => {
|
|
136
|
+
signal.removeEventListener('abort', onAbort);
|
|
137
|
+
err ? reject(err) : resolve(addresses);
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbmV0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfbm9kZVVybCIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImNvbm5lY3RJblBhcmFsbGVsIiwib3B0aW9ucyIsImxvb2t1cCIsInNpZ25hbCIsInRocm93SWZBYm9ydGVkIiwiYWRkcmVzc2VzIiwibG9va3VwQWxsQWRkcmVzc2VzIiwiaG9zdCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0Iiwic29ja2V0cyIsIkFycmF5IiwibGVuZ3RoIiwiZXJyb3JzIiwib25FcnJvciIsImVyciIsInB1c2giLCJyZW1vdmVMaXN0ZW5lciIsIm9uQ29ubmVjdCIsImRlc3Ryb3kiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwib25BYm9ydCIsIkFnZ3JlZ2F0ZUVycm9yIiwiaiIsInNvY2tldCIsInJlYXNvbiIsImkiLCJsZW4iLCJuZXQiLCJjb25uZWN0IiwiYWRkcmVzcyIsImZhbWlseSIsIm9uIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9uY2UiLCJjb25uZWN0SW5TZXF1ZW5jZSIsImlzSVB2NiIsImlzSVB2NCIsImRvbWFpbkluQVNDSUkiLCJ1cmwiLCJkb21haW5Ub0FTQ0lJIiwiYWxsIl0sInNvdXJjZXMiOlsiLi4vc3JjL2Nvbm5lY3Rvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbmV0IGZyb20gJ25ldCc7XG5pbXBvcnQgZG5zLCB7IHR5cGUgTG9va3VwQWRkcmVzcyB9IGZyb20gJ2Rucyc7XG5cbmltcG9ydCB1cmwgZnJvbSAnbm9kZTp1cmwnO1xuXG50eXBlIExvb2t1cEZ1bmN0aW9uID0gKGhvc3RuYW1lOiBzdHJpbmcsIG9wdGlvbnM6IGRucy5Mb29rdXBBbGxPcHRpb25zLCBjYWxsYmFjazogKGVycjogTm9kZUpTLkVycm5vRXhjZXB0aW9uIHwgbnVsbCwgYWRkcmVzc2VzOiBkbnMuTG9va3VwQWRkcmVzc1tdKSA9PiB2b2lkKSA9PiB2b2lkO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29ubmVjdEluUGFyYWxsZWwob3B0aW9uczogeyBob3N0OiBzdHJpbmcsIHBvcnQ6IG51bWJlciwgbG9jYWxBZGRyZXNzPzogc3RyaW5nIHwgdW5kZWZpbmVkIH0sIGxvb2t1cDogTG9va3VwRnVuY3Rpb24sIHNpZ25hbDogQWJvcnRTaWduYWwpIHtcbiAgc2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG5cbiAgY29uc3QgYWRkcmVzc2VzID0gYXdhaXQgbG9va3VwQWxsQWRkcmVzc2VzKG9wdGlvbnMuaG9zdCwgbG9va3VwLCBzaWduYWwpO1xuXG4gIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZTxuZXQuU29ja2V0PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgc29ja2V0cyA9IG5ldyBBcnJheShhZGRyZXNzZXMubGVuZ3RoKTtcblxuICAgIGNvbnN0IGVycm9yczogRXJyb3JbXSA9IFtdO1xuXG4gICAgZnVuY3Rpb24gb25FcnJvcih0aGlzOiBuZXQuU29ja2V0LCBlcnI6IEVycm9yKSB7XG4gICAgICBlcnJvcnMucHVzaChlcnIpO1xuXG4gICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcignY29ubmVjdCcsIG9uQ29ubmVjdCk7XG5cbiAgICAgIHRoaXMuZGVzdHJveSgpO1xuXG4gICAgICBpZiAoZXJyb3JzLmxlbmd0aCA9PT0gYWRkcmVzc2VzLmxlbmd0aCkge1xuICAgICAgICBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkFib3J0KTtcblxuICAgICAgICByZWplY3QobmV3IEFnZ3JlZ2F0ZUVycm9yKGVycm9ycywgJ0NvdWxkIG5vdCBjb25uZWN0IChwYXJhbGxlbCknKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25Db25uZWN0KHRoaXM6IG5ldC5Tb2NrZXQpIHtcbiAgICAgIHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQWJvcnQpO1xuXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHNvY2tldHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgY29uc3Qgc29ja2V0ID0gc29ja2V0c1tqXTtcblxuICAgICAgICBpZiAodGhpcyA9PT0gc29ja2V0KSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25FcnJvcik7XG4gICAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcignY29ubmVjdCcsIG9uQ29ubmVjdCk7XG4gICAgICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgICB9XG5cbiAgICAgIHJlc29sdmUodGhpcyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb25BYm9ydCA9ICgpID0+IHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgc29ja2V0cy5sZW5ndGg7IGorKykge1xuICAgICAgICBjb25zdCBzb2NrZXQgPSBzb2NrZXRzW2pdO1xuXG4gICAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbkVycm9yKTtcbiAgICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdjb25uZWN0Jywgb25Db25uZWN0KTtcblxuICAgICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgfVxuXG4gICAgICByZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gICAgfTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBhZGRyZXNzZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IHNvY2tldCA9IHNvY2tldHNbaV0gPSBuZXQuY29ubmVjdCh7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGhvc3Q6IGFkZHJlc3Nlc1tpXS5hZGRyZXNzLFxuICAgICAgICBmYW1pbHk6IGFkZHJlc3Nlc1tpXS5mYW1pbHlcbiAgICAgIH0pO1xuXG4gICAgICBzb2NrZXQub24oJ2Vycm9yJywgb25FcnJvcik7XG4gICAgICBzb2NrZXQub24oJ2Nvbm5lY3QnLCBvbkNvbm5lY3QpO1xuICAgIH1cblxuICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQWJvcnQsIHsgb25jZTogdHJ1ZSB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb25uZWN0SW5TZXF1ZW5jZShvcHRpb25zOiB7IGhvc3Q6IHN0cmluZywgcG9ydDogbnVtYmVyLCBsb2NhbEFkZHJlc3M/OiBzdHJpbmcgfCB1bmRlZmluZWQgfSwgbG9va3VwOiBMb29rdXBGdW5jdGlvbiwgc2lnbmFsOiBBYm9ydFNpZ25hbCkge1xuICBzaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcblxuICBjb25zdCBlcnJvcnM6IGFueVtdID0gW107XG4gIGNvbnN0IGFkZHJlc3NlcyA9IGF3YWl0IGxvb2t1cEFsbEFkZHJlc3NlcyhvcHRpb25zLmhvc3QsIGxvb2t1cCwgc2lnbmFsKTtcblxuICBmb3IgKGNvbnN0IGFkZHJlc3Mgb2YgYWRkcmVzc2VzKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZTxuZXQuU29ja2V0PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHNvY2tldCA9IG5ldC5jb25uZWN0KHtcbiAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgIGhvc3Q6IGFkZHJlc3MuYWRkcmVzcyxcbiAgICAgICAgICBmYW1pbHk6IGFkZHJlc3MuZmFtaWx5XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IG9uQWJvcnQgPSAoKSA9PiB7XG4gICAgICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgICAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcignY29ubmVjdCcsIG9uQ29ubmVjdCk7XG5cbiAgICAgICAgICBzb2NrZXQuZGVzdHJveSgpO1xuXG4gICAgICAgICAgcmVqZWN0KHNpZ25hbC5yZWFzb24pO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IG9uRXJyb3IgPSAoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgICAgIHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQWJvcnQpO1xuXG4gICAgICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgICAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcignY29ubmVjdCcsIG9uQ29ubmVjdCk7XG5cbiAgICAgICAgICBzb2NrZXQuZGVzdHJveSgpO1xuXG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3Qgb25Db25uZWN0ID0gKCkgPT4ge1xuICAgICAgICAgIHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQWJvcnQpO1xuXG4gICAgICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgICAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcignY29ubmVjdCcsIG9uQ29ubmVjdCk7XG5cbiAgICAgICAgICByZXNvbHZlKHNvY2tldCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25BYm9ydCwgeyBvbmNlOiB0cnVlIH0pO1xuXG4gICAgICAgIHNvY2tldC5vbignZXJyb3InLCBvbkVycm9yKTtcbiAgICAgICAgc29ja2V0Lm9uKCdjb25uZWN0Jywgb25Db25uZWN0KTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gSWYgdGhlIHNpZ25hbCB3YXMgYWJvcnRlZCwgcmUtdGhyb3cgdGhlIGVycm9yLlxuICAgICAgc2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG5cbiAgICAgIGVycm9ycy5wdXNoKGVycik7XG5cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBBZ2dyZWdhdGVFcnJvcihlcnJvcnMsICdDb3VsZCBub3QgY29ubmVjdCAoc2VxdWVuY2UpJyk7XG59XG5cbi8qKlxuICogTG9vayB1cCBhbGwgYWRkcmVzc2VzIGZvciB0aGUgZ2l2ZW4gaG9zdG5hbWUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb29rdXBBbGxBZGRyZXNzZXMoaG9zdDogc3RyaW5nLCBsb29rdXA6IExvb2t1cEZ1bmN0aW9uLCBzaWduYWw6IEFib3J0U2lnbmFsKTogUHJvbWlzZTxkbnMuTG9va3VwQWRkcmVzc1tdPiB7XG4gIHNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuXG4gIGlmIChuZXQuaXNJUHY2KGhvc3QpKSB7XG4gICAgcmV0dXJuIFt7IGFkZHJlc3M6IGhvc3QsIGZhbWlseTogNiB9XTtcbiAgfSBlbHNlIGlmIChuZXQuaXNJUHY0KGhvc3QpKSB7XG4gICAgcmV0dXJuIFt7IGFkZHJlc3M6IGhvc3QsIGZhbWlseTogNCB9XTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8TG9va3VwQWRkcmVzc1tdPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBvbkFib3J0ID0gKCkgPT4ge1xuICAgICAgICByZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gICAgICB9O1xuXG4gICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkFib3J0KTtcblxuICAgICAgY29uc3QgZG9tYWluSW5BU0NJSSA9IHVybC5kb21haW5Ub0FTQ0lJKGhvc3QpO1xuICAgICAgbG9va3VwKGRvbWFpbkluQVNDSUkgPT09ICcnID8gaG9zdCA6IGRvbWFpbkluQVNDSUksIHsgYWxsOiB0cnVlIH0sIChlcnIsIGFkZHJlc3NlcykgPT4ge1xuICAgICAgICBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkFib3J0KTtcblxuICAgICAgICBlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUoYWRkcmVzc2VzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xu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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connector.js","names":["_net","_interopRequireDefault","require","_nodeUrl","e","__esModule","default","connectInParallel","options","lookup","signal","throwIfAborted","addresses","lookupAllAddresses","host","Promise","resolve","reject","sockets","Array","length","errors","onError","err","push","removeListener","onConnect","destroy","removeEventListener","onAbort","AggregateError","j","socket","reason","i","len","net","connect","address","family","on","addEventListener","once","connectInSequence","isIPv6","isIPv4","domainInASCII","url","domainToASCII","all"],"sources":["../src/connector.ts"],"sourcesContent":["import net from 'net';\nimport dns, { type LookupAddress } from 'dns';\n\nimport url from 'node:url';\n\ntype LookupFunction = (hostname: string, options: dns.LookupAllOptions, callback: (err: NodeJS.ErrnoException | null, addresses: dns.LookupAddress[]) => void) => void;\n\nexport async function connectInParallel(options: { host: string, port: number, localAddress?: string | undefined }, lookup: LookupFunction, signal: AbortSignal) {\n signal.throwIfAborted();\n\n const addresses = await lookupAllAddresses(options.host, lookup, signal);\n\n return await new Promise<net.Socket>((resolve, reject) => {\n const sockets = new Array(addresses.length);\n\n const errors: Error[] = [];\n\n function onError(this: net.Socket, err: Error) {\n errors.push(err);\n\n this.removeListener('error', onError);\n this.removeListener('connect', onConnect);\n\n this.destroy();\n\n if (errors.length === addresses.length) {\n signal.removeEventListener('abort', onAbort);\n\n reject(new AggregateError(errors, 'Could not connect (parallel)'));\n }\n }\n\n function onConnect(this: net.Socket) {\n signal.removeEventListener('abort', onAbort);\n\n for (let j = 0; j < sockets.length; j++) {\n const socket = sockets[j];\n\n if (this === socket) {\n continue;\n }\n\n socket.removeListener('error', onError);\n socket.removeListener('connect', onConnect);\n socket.destroy();\n }\n\n resolve(this);\n }\n\n const onAbort = () => {\n for (let j = 0; j < sockets.length; j++) {\n const socket = sockets[j];\n\n socket.removeListener('error', onError);\n socket.removeListener('connect', onConnect);\n\n socket.destroy();\n }\n\n reject(signal.reason);\n };\n\n for (let i = 0, len = addresses.length; i < len; i++) {\n const socket = sockets[i] = net.connect({\n ...options,\n host: addresses[i].address,\n family: addresses[i].family\n });\n\n socket.on('error', onError);\n socket.on('connect', onConnect);\n }\n\n signal.addEventListener('abort', onAbort, { once: true });\n });\n}\n\nexport async function connectInSequence(options: { host: string, port: number, localAddress?: string | undefined }, lookup: LookupFunction, signal: AbortSignal) {\n signal.throwIfAborted();\n\n const errors: any[] = [];\n const addresses = await lookupAllAddresses(options.host, lookup, signal);\n\n for (const address of addresses) {\n try {\n return await new Promise<net.Socket>((resolve, reject) => {\n const socket = net.connect({\n ...options,\n host: address.address,\n family: address.family\n });\n\n const onAbort = () => {\n socket.removeListener('error', onError);\n socket.removeListener('connect', onConnect);\n\n socket.destroy();\n\n reject(signal.reason);\n };\n\n const onError = (err: Error) => {\n signal.removeEventListener('abort', onAbort);\n\n socket.removeListener('error', onError);\n socket.removeListener('connect', onConnect);\n\n socket.destroy();\n\n reject(err);\n };\n\n const onConnect = () => {\n signal.removeEventListener('abort', onAbort);\n\n socket.removeListener('error', onError);\n socket.removeListener('connect', onConnect);\n\n resolve(socket);\n };\n\n signal.addEventListener('abort', onAbort, { once: true });\n\n socket.on('error', onError);\n socket.on('connect', onConnect);\n });\n } catch (err) {\n // If the signal was aborted, re-throw the error.\n signal.throwIfAborted();\n\n errors.push(err);\n\n continue;\n }\n }\n\n throw new AggregateError(errors, 'Could not connect (sequence)');\n}\n\n/**\n * Look up all addresses for the given hostname.\n */\nexport async function lookupAllAddresses(host: string, lookup: LookupFunction, signal: AbortSignal): Promise<dns.LookupAddress[]> {\n signal.throwIfAborted();\n\n if (net.isIPv6(host)) {\n return [{ address: host, family: 6 }];\n } else if (net.isIPv4(host)) {\n return [{ address: host, family: 4 }];\n } else {\n return await new Promise<LookupAddress[]>((resolve, reject) => {\n const onAbort = () => {\n reject(signal.reason);\n };\n\n signal.addEventListener('abort', onAbort);\n\n const domainInASCII = url.domainToASCII(host);\n lookup(domainInASCII === '' ? host : domainInASCII, { all: true }, (err, addresses) => {\n signal.removeEventListener('abort', onAbort);\n\n err ? reject(err) : resolve(addresses);\n });\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}
|