@ohos-ports/tedious 20.0.0-beta.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/LICENSE +21 -0
- package/README.md +67 -0
- package/appveyor.yml +72 -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 +1316 -0
- package/lib/connection.js +2760 -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 +118 -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 +424 -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 +157 -0
- package/pull_request_template.md +9 -0
- package/tsconfig.build-types.json +16 -0
- package/tsconfig.json +32 -0
- package/types/js-md4.d.ts +7 -0
- package/types/native-duplexpair.d.ts +12 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
The MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2010-2018 Mike D Pilsbury
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
|
13
|
+
all copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
21
|
+
THE SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Tedious (node implementation of TDS)
|
|
2
|
+
[](http://badge.fury.io/js/tedious) [](https://ci.appveyor.com/project/tediousjs/tedious) [](https://codecov.io/gh/tediousjs/tedious)
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
Tedious is a pure-Javascript implementation of the [TDS protocol](http://msdn.microsoft.com/en-us/library/dd304523.aspx),
|
|
6
|
+
which is used to interact with instances of Microsoft's SQL Server. It is intended to be a fairly slim implementation of the protocol, with not too much additional functionality.
|
|
7
|
+
|
|
8
|
+
**NOTE: New columns are nullable by default as of version 1.11.0**
|
|
9
|
+
|
|
10
|
+
Previous behavior can be restored using `config.options.enableAnsiNullDefault = false`. See [pull request 230](https://github.com/tediousjs/tedious/pull/230).
|
|
11
|
+
|
|
12
|
+
**NOTE: Default login behavior has changed slightly as of version 1.2**
|
|
13
|
+
|
|
14
|
+
See the [changelog](https://github.com/tediousjs/tedious/releases) for version history.
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Supported TDS versions
|
|
18
|
+
|
|
19
|
+
- TDS 7.4 (SQL Server 2012/2014/2016/2017/2019/2022)
|
|
20
|
+
- TDS 7.3.B (SQL Server 2008 R2)
|
|
21
|
+
- TDS 7.3.A (SQL Server 2008)
|
|
22
|
+
- TDS 7.2 (SQL Server 2005)
|
|
23
|
+
- TDS 7.1 (SQL Server 2000)
|
|
24
|
+
|
|
25
|
+
## Installation
|
|
26
|
+
|
|
27
|
+
Node.js is a prerequisite for installing tedious. Once you have installed [Node.js](https://nodejs.org/), installing tedious is simple:
|
|
28
|
+
|
|
29
|
+
npm install tedious
|
|
30
|
+
|
|
31
|
+
## Getting Started
|
|
32
|
+
- [Node.js + macOS](https://www.microsoft.com/en-us/sql-server/developer-get-started/node/mac/)
|
|
33
|
+
- [Node.js + Red Hat Enterprise Linux](https://www.microsoft.com/en-us/sql-server/developer-get-started/node/rhel/)
|
|
34
|
+
- [Node.js + SUSE Linux Enterprise Server](https://www.microsoft.com/en-us/sql-server/developer-get-started/node/sles/)
|
|
35
|
+
- [Node.js + Ubuntu](https://www.microsoft.com/en-us/sql-server/developer-get-started/node/ubuntu/)
|
|
36
|
+
- [Node.js + Windows](https://www.microsoft.com/en-us/sql-server/developer-get-started/node/windows/)
|
|
37
|
+
|
|
38
|
+
<a name="documentation"></a>
|
|
39
|
+
## Documentation
|
|
40
|
+
More documentation and code samples are available at [tediousjs.github.io/tedious/](http://tediousjs.github.io/tedious/)
|
|
41
|
+
|
|
42
|
+
<a name="name"></a>
|
|
43
|
+
## Name
|
|
44
|
+
_Tedious_ is simply derived from a fast, slightly garbled, pronunciation of the letters T, D and S.
|
|
45
|
+
|
|
46
|
+
## Developer Survey
|
|
47
|
+
|
|
48
|
+
We'd like to learn more about how you use tedious:
|
|
49
|
+
|
|
50
|
+
<a href="https://aka.ms/mssqltedioussurvey"><img style="float: right;" height="67" width="156" src="https://sqlchoice.blob.core.windows.net/sqlchoice/static/images/survey.png"></a>
|
|
51
|
+
|
|
52
|
+
<a name="contributing"></a>
|
|
53
|
+
## Contributing
|
|
54
|
+
We welcome contributions from the community. Feel free to checkout the code and submit pull requests.
|
|
55
|
+
|
|
56
|
+
<a name="license"></a>
|
|
57
|
+
## License
|
|
58
|
+
|
|
59
|
+
Copyright (c) 2010-2021 Mike D Pilsbury
|
|
60
|
+
|
|
61
|
+
The MIT License
|
|
62
|
+
|
|
63
|
+
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:
|
|
64
|
+
|
|
65
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
66
|
+
|
|
67
|
+
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.
|
package/appveyor.yml
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
version: "{build}"
|
|
2
|
+
|
|
3
|
+
# Newer Node.js releases require Windows 10 / Windows Server 2016 or higher.
|
|
4
|
+
# The default AppVeyor image (Visual Studio 2015) runs on Windows Server 2012 R2,
|
|
5
|
+
# so pin a newer image. SQL Server 2017 is still pre-installed on this one.
|
|
6
|
+
image: Visual Studio 2022
|
|
7
|
+
|
|
8
|
+
environment:
|
|
9
|
+
matrix:
|
|
10
|
+
- nodejs_version: "22"
|
|
11
|
+
- nodejs_version: "24"
|
|
12
|
+
- nodejs_version: "26"
|
|
13
|
+
|
|
14
|
+
branches:
|
|
15
|
+
only:
|
|
16
|
+
- master
|
|
17
|
+
- /^maint\/.+/
|
|
18
|
+
- /v\d+\.\d+\.\d+/
|
|
19
|
+
|
|
20
|
+
install:
|
|
21
|
+
- ps: Update-NodeJsInstallation (Get-NodeJsLatestBuild $env:nodejs_version) x64
|
|
22
|
+
- npm install
|
|
23
|
+
|
|
24
|
+
services:
|
|
25
|
+
- mssql2017
|
|
26
|
+
|
|
27
|
+
cache:
|
|
28
|
+
- node_modules
|
|
29
|
+
|
|
30
|
+
build: off
|
|
31
|
+
|
|
32
|
+
before_test:
|
|
33
|
+
- npm prune
|
|
34
|
+
|
|
35
|
+
- sc config sqlbrowser start= auto
|
|
36
|
+
- net start sqlbrowser
|
|
37
|
+
|
|
38
|
+
test_script:
|
|
39
|
+
- node --version
|
|
40
|
+
- npm --version
|
|
41
|
+
|
|
42
|
+
- pwsh: |-
|
|
43
|
+
$ErrorActionPreference = "Stop"
|
|
44
|
+
|
|
45
|
+
npm run-script test
|
|
46
|
+
if ($LastExitCode -ne 0) { $host.SetShouldExit($LastExitCode) }
|
|
47
|
+
|
|
48
|
+
Copy-Item -Force test/config.appveyor.ts test/config.ts
|
|
49
|
+
|
|
50
|
+
$env:NTLM_USERNAME = $env:USERNAME
|
|
51
|
+
$env:NTLM_PASSWORD = [Microsoft.Win32.Registry]::GetValue("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon", "DefaultPassword", '')
|
|
52
|
+
$env:NTLM_DOMAIN = $env:COMPUTERNAME
|
|
53
|
+
|
|
54
|
+
$env:TEDIOUS_TDS_VERSION = '7_4'
|
|
55
|
+
npm run-script test-integration
|
|
56
|
+
if ($LastExitCode -ne 0) { $host.SetShouldExit($LastExitCode) }
|
|
57
|
+
|
|
58
|
+
$env:TEDIOUS_TDS_VERSION = '7_3_B'
|
|
59
|
+
npm run-script test-integration
|
|
60
|
+
if ($LastExitCode -ne 0) { $host.SetShouldExit($LastExitCode) }
|
|
61
|
+
|
|
62
|
+
$env:TEDIOUS_TDS_VERSION = '7_3_A'
|
|
63
|
+
npm run-script test-integration
|
|
64
|
+
if ($LastExitCode -ne 0) { $host.SetShouldExit($LastExitCode) }
|
|
65
|
+
|
|
66
|
+
$env:TEDIOUS_TDS_VERSION = '7_2'
|
|
67
|
+
npm run-script test-integration
|
|
68
|
+
if ($LastExitCode -ne 0) { $host.SetShouldExit($LastExitCode) }
|
|
69
|
+
|
|
70
|
+
$env:TEDIOUS_TDS_VERSION = '7_1'
|
|
71
|
+
npm run-script test-integration
|
|
72
|
+
if ($LastExitCode -ne 0) { $host.SetShouldExit($LastExitCode) }
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
import { defineConfig, globalIgnores } from 'eslint/config';
|
|
2
|
+
import typescriptEslint from '@typescript-eslint/eslint-plugin';
|
|
3
|
+
import stylistic from '@stylistic/eslint-plugin';
|
|
4
|
+
import globals from 'globals';
|
|
5
|
+
import tsParser from '@typescript-eslint/parser';
|
|
6
|
+
import path from 'node:path';
|
|
7
|
+
import { fileURLToPath } from 'node:url';
|
|
8
|
+
import js from '@eslint/js';
|
|
9
|
+
import { FlatCompat } from '@eslint/eslintrc';
|
|
10
|
+
|
|
11
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
12
|
+
const __dirname = path.dirname(__filename);
|
|
13
|
+
const compat = new FlatCompat({
|
|
14
|
+
baseDirectory: __dirname,
|
|
15
|
+
recommendedConfig: js.configs.recommended,
|
|
16
|
+
allConfig: js.configs.all
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
export default defineConfig([
|
|
20
|
+
globalIgnores(['src/**/*.d.ts']),
|
|
21
|
+
{
|
|
22
|
+
extends: compat.extends('plugin:@typescript-eslint/eslint-recommended'),
|
|
23
|
+
|
|
24
|
+
plugins: {
|
|
25
|
+
'@typescript-eslint': typescriptEslint,
|
|
26
|
+
'@stylelistic': stylistic,
|
|
27
|
+
},
|
|
28
|
+
|
|
29
|
+
languageOptions: {
|
|
30
|
+
globals: {
|
|
31
|
+
...globals.node,
|
|
32
|
+
},
|
|
33
|
+
|
|
34
|
+
parser: tsParser,
|
|
35
|
+
ecmaVersion: 5,
|
|
36
|
+
sourceType: 'module',
|
|
37
|
+
|
|
38
|
+
parserOptions: {
|
|
39
|
+
project: './tsconfig.json',
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
|
|
43
|
+
rules: {
|
|
44
|
+
'accessor-pairs': 'error',
|
|
45
|
+
'array-callback-return': 'error',
|
|
46
|
+
'arrow-parens': ['error', 'always'],
|
|
47
|
+
|
|
48
|
+
'arrow-spacing': ['error', {
|
|
49
|
+
before: true,
|
|
50
|
+
after: true,
|
|
51
|
+
}],
|
|
52
|
+
|
|
53
|
+
'block-spacing': 'error',
|
|
54
|
+
|
|
55
|
+
'brace-style': ['error', '1tbs', {
|
|
56
|
+
allowSingleLine: true,
|
|
57
|
+
}],
|
|
58
|
+
|
|
59
|
+
'comma-dangle': ['error', 'only-multiline'],
|
|
60
|
+
'comma-spacing': 'error',
|
|
61
|
+
'comma-style': 'error',
|
|
62
|
+
'computed-property-spacing': 'error',
|
|
63
|
+
'constructor-super': 'error',
|
|
64
|
+
'dot-location': ['error', 'property'],
|
|
65
|
+
'dot-notation': 'error',
|
|
66
|
+
'eol-last': 'error',
|
|
67
|
+
'eqeqeq': ['error', 'smart'],
|
|
68
|
+
'for-direction': 'error',
|
|
69
|
+
'func-call-spacing': 'error',
|
|
70
|
+
'func-name-matching': 'error',
|
|
71
|
+
|
|
72
|
+
'func-style': ['error', 'declaration', {
|
|
73
|
+
allowArrowFunctions: true,
|
|
74
|
+
}],
|
|
75
|
+
|
|
76
|
+
'indent': ['error', 2, {
|
|
77
|
+
ArrayExpression: 'first',
|
|
78
|
+
|
|
79
|
+
CallExpression: {
|
|
80
|
+
arguments: 'first',
|
|
81
|
+
},
|
|
82
|
+
|
|
83
|
+
FunctionDeclaration: {
|
|
84
|
+
parameters: 'first',
|
|
85
|
+
},
|
|
86
|
+
|
|
87
|
+
FunctionExpression: {
|
|
88
|
+
parameters: 'first',
|
|
89
|
+
},
|
|
90
|
+
|
|
91
|
+
MemberExpression: 'off',
|
|
92
|
+
ObjectExpression: 'first',
|
|
93
|
+
SwitchCase: 1,
|
|
94
|
+
}],
|
|
95
|
+
|
|
96
|
+
'key-spacing': ['error', {
|
|
97
|
+
mode: 'strict',
|
|
98
|
+
}],
|
|
99
|
+
|
|
100
|
+
'keyword-spacing': 'error',
|
|
101
|
+
'linebreak-style': ['error', 'unix'],
|
|
102
|
+
'new-parens': 'error',
|
|
103
|
+
'no-class-assign': 'error',
|
|
104
|
+
'no-confusing-arrow': 'error',
|
|
105
|
+
'no-const-assign': 'error',
|
|
106
|
+
'no-control-regex': 'error',
|
|
107
|
+
'no-debugger': 'error',
|
|
108
|
+
'no-delete-var': 'error',
|
|
109
|
+
'no-dupe-args': 'error',
|
|
110
|
+
'no-dupe-keys': 'error',
|
|
111
|
+
'no-duplicate-case': 'error',
|
|
112
|
+
'no-duplicate-imports': 'error',
|
|
113
|
+
'no-empty-character-class': 'error',
|
|
114
|
+
'no-ex-assign': 'error',
|
|
115
|
+
'no-extra-boolean-cast': 'error',
|
|
116
|
+
'no-extra-parens': ['error', 'functions'],
|
|
117
|
+
'no-extra-semi': 'error',
|
|
118
|
+
'no-fallthrough': 'error',
|
|
119
|
+
'no-func-assign': 'error',
|
|
120
|
+
'no-global-assign': 'error',
|
|
121
|
+
'no-invalid-regexp': 'error',
|
|
122
|
+
'no-irregular-whitespace': 'error',
|
|
123
|
+
'no-lonely-if': 'error',
|
|
124
|
+
'no-misleading-character-class': 'error',
|
|
125
|
+
'no-mixed-requires': 'error',
|
|
126
|
+
'no-mixed-spaces-and-tabs': 'error',
|
|
127
|
+
|
|
128
|
+
'no-multi-spaces': ['error', {
|
|
129
|
+
ignoreEOLComments: true,
|
|
130
|
+
}],
|
|
131
|
+
|
|
132
|
+
'no-multiple-empty-lines': ['error', {
|
|
133
|
+
max: 2,
|
|
134
|
+
maxEOF: 0,
|
|
135
|
+
maxBOF: 0,
|
|
136
|
+
}],
|
|
137
|
+
|
|
138
|
+
'no-negated-in-lhs': 'error',
|
|
139
|
+
'no-new-require': 'error',
|
|
140
|
+
'no-new-symbol': 'error',
|
|
141
|
+
'no-obj-calls': 'error',
|
|
142
|
+
'no-octal': 'error',
|
|
143
|
+
'no-path-concat': 'error',
|
|
144
|
+
'no-proto': 'error',
|
|
145
|
+
'no-redeclare': 'error',
|
|
146
|
+
'no-restricted-modules': ['error', 'sys'],
|
|
147
|
+
|
|
148
|
+
'no-restricted-syntax': ['error', {
|
|
149
|
+
selector: "CallExpression[callee.name='setTimeout'][arguments.length<2]",
|
|
150
|
+
message: '`setTimeout()` must be invoked with at least two arguments.',
|
|
151
|
+
}, {
|
|
152
|
+
selector: "CallExpression[callee.name='setInterval'][arguments.length<2]",
|
|
153
|
+
message: '`setInterval()` must be invoked with at least two arguments.',
|
|
154
|
+
}, {
|
|
155
|
+
selector: 'ThrowStatement > CallExpression[callee.name=/Error$/]',
|
|
156
|
+
message: 'Use `new` keyword when throwing an `Error`.',
|
|
157
|
+
}],
|
|
158
|
+
|
|
159
|
+
'no-return-await': 'off',
|
|
160
|
+
'no-self-assign': 'error',
|
|
161
|
+
'no-self-compare': 'error',
|
|
162
|
+
'no-tabs': 'error',
|
|
163
|
+
'no-template-curly-in-string': 'error',
|
|
164
|
+
'no-this-before-super': 'error',
|
|
165
|
+
'no-throw-literal': 'error',
|
|
166
|
+
'no-trailing-spaces': 2,
|
|
167
|
+
'no-undef-init': 'error',
|
|
168
|
+
'no-unexpected-multiline': 2,
|
|
169
|
+
'no-unreachable': 'error',
|
|
170
|
+
'no-unsafe-finally': 'error',
|
|
171
|
+
'no-unsafe-negation': 'error',
|
|
172
|
+
'no-unused-labels': 'error',
|
|
173
|
+
|
|
174
|
+
'no-unused-vars': ['error', {
|
|
175
|
+
args: 'none',
|
|
176
|
+
caughtErrors: 'all',
|
|
177
|
+
}],
|
|
178
|
+
|
|
179
|
+
'no-use-before-define': ['error', {
|
|
180
|
+
classes: true,
|
|
181
|
+
functions: false,
|
|
182
|
+
variables: false,
|
|
183
|
+
}],
|
|
184
|
+
|
|
185
|
+
'no-useless-call': 'error',
|
|
186
|
+
'no-useless-catch': 'error',
|
|
187
|
+
'no-useless-concat': 'error',
|
|
188
|
+
'no-useless-constructor': 'error',
|
|
189
|
+
'no-useless-escape': 'error',
|
|
190
|
+
'no-useless-return': 'error',
|
|
191
|
+
'no-void': 'error',
|
|
192
|
+
'no-whitespace-before-property': 'error',
|
|
193
|
+
'no-with': 'error',
|
|
194
|
+
'object-curly-spacing': ['error', 'always'],
|
|
195
|
+
|
|
196
|
+
'one-var': ['error', {
|
|
197
|
+
initialized: 'never',
|
|
198
|
+
}],
|
|
199
|
+
|
|
200
|
+
'one-var-declaration-per-line': 'error',
|
|
201
|
+
'operator-linebreak': ['error', 'after'],
|
|
202
|
+
|
|
203
|
+
'prefer-const': ['error', {
|
|
204
|
+
ignoreReadBeforeAssign: true,
|
|
205
|
+
}],
|
|
206
|
+
|
|
207
|
+
'quotes': ['error', 'single', {
|
|
208
|
+
avoidEscape: true,
|
|
209
|
+
}],
|
|
210
|
+
|
|
211
|
+
'quote-props': ['error', 'consistent'],
|
|
212
|
+
'rest-spread-spacing': 'error',
|
|
213
|
+
'semi': 'error',
|
|
214
|
+
'semi-spacing': 'error',
|
|
215
|
+
'space-before-blocks': ['error', 'always'],
|
|
216
|
+
|
|
217
|
+
'space-before-function-paren': ['error', {
|
|
218
|
+
anonymous: 'never',
|
|
219
|
+
named: 'never',
|
|
220
|
+
asyncArrow: 'always',
|
|
221
|
+
}],
|
|
222
|
+
|
|
223
|
+
'space-in-parens': ['error', 'never'],
|
|
224
|
+
'space-infix-ops': 'error',
|
|
225
|
+
'space-unary-ops': 'error',
|
|
226
|
+
|
|
227
|
+
'spaced-comment': ['error', 'always', {
|
|
228
|
+
block: {
|
|
229
|
+
balanced: true,
|
|
230
|
+
},
|
|
231
|
+
|
|
232
|
+
exceptions: ['-'],
|
|
233
|
+
}],
|
|
234
|
+
|
|
235
|
+
'symbol-description': 'error',
|
|
236
|
+
'template-curly-spacing': 'error',
|
|
237
|
+
'unicode-bom': 'error',
|
|
238
|
+
'use-isnan': 'error',
|
|
239
|
+
'valid-typeof': 'error',
|
|
240
|
+
},
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
files: ['**/*.ts'],
|
|
244
|
+
|
|
245
|
+
rules: {
|
|
246
|
+
'@typescript-eslint/adjacent-overload-signatures': 'error',
|
|
247
|
+
'@typescript-eslint/ban-ts-comment': 'error',
|
|
248
|
+
|
|
249
|
+
'@typescript-eslint/no-empty-object-type': 'error',
|
|
250
|
+
'@typescript-eslint/no-unsafe-function-type': 'error',
|
|
251
|
+
'@typescript-eslint/no-wrapper-object-types': 'error',
|
|
252
|
+
|
|
253
|
+
'@typescript-eslint/consistent-type-assertions': 'error',
|
|
254
|
+
|
|
255
|
+
'@stylelistic/member-delimiter-style': ['error', {
|
|
256
|
+
multiline: {
|
|
257
|
+
delimiter: 'semi',
|
|
258
|
+
requireLast: true,
|
|
259
|
+
},
|
|
260
|
+
|
|
261
|
+
singleline: {
|
|
262
|
+
delimiter: 'comma',
|
|
263
|
+
requireLast: false,
|
|
264
|
+
},
|
|
265
|
+
}],
|
|
266
|
+
|
|
267
|
+
'no-array-constructor': 'off',
|
|
268
|
+
'@typescript-eslint/no-array-constructor': 'error',
|
|
269
|
+
'@typescript-eslint/no-empty-interface': 'error',
|
|
270
|
+
'@typescript-eslint/no-extra-non-null-assertion': 'error',
|
|
271
|
+
'@typescript-eslint/no-inferrable-types': 'error',
|
|
272
|
+
'@typescript-eslint/no-misused-new': 'error',
|
|
273
|
+
'@typescript-eslint/no-namespace': 'error',
|
|
274
|
+
|
|
275
|
+
'@typescript-eslint/no-this-alias': ['error', {
|
|
276
|
+
allowDestructuring: true,
|
|
277
|
+
allowedNames: ['self'],
|
|
278
|
+
}],
|
|
279
|
+
|
|
280
|
+
'no-unused-vars': 'off',
|
|
281
|
+
|
|
282
|
+
'@typescript-eslint/no-unused-vars': ['error', {
|
|
283
|
+
args: 'none',
|
|
284
|
+
caughtErrors: 'all',
|
|
285
|
+
}],
|
|
286
|
+
|
|
287
|
+
'no-use-before-define': 'off',
|
|
288
|
+
|
|
289
|
+
'@typescript-eslint/no-use-before-define': ['error', {
|
|
290
|
+
classes: true,
|
|
291
|
+
functions: false,
|
|
292
|
+
variables: false,
|
|
293
|
+
}],
|
|
294
|
+
|
|
295
|
+
'@typescript-eslint/no-var-requires': 'error',
|
|
296
|
+
'@typescript-eslint/prefer-namespace-keyword': 'error',
|
|
297
|
+
'@typescript-eslint/triple-slash-reference': 'error',
|
|
298
|
+
'@stylelistic/type-annotation-spacing': 'error',
|
|
299
|
+
'@typescript-eslint/return-await': ['error', 'always'],
|
|
300
|
+
'no-var': 'error',
|
|
301
|
+
'prefer-const': 'error',
|
|
302
|
+
'prefer-rest-params': 'error',
|
|
303
|
+
'prefer-spread': 'error',
|
|
304
|
+
},
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
files: ['test/**/*'],
|
|
308
|
+
languageOptions: {
|
|
309
|
+
globals: {
|
|
310
|
+
...globals.mocha,
|
|
311
|
+
},
|
|
312
|
+
},
|
|
313
|
+
}
|
|
314
|
+
]);
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.writeToTrackingBuffer = writeToTrackingBuffer;
|
|
7
|
+
const TYPE = {
|
|
8
|
+
QUERY_NOTIFICATIONS: 1,
|
|
9
|
+
TXN_DESCRIPTOR: 2,
|
|
10
|
+
TRACE_ACTIVITY: 3
|
|
11
|
+
};
|
|
12
|
+
const TXNDESCRIPTOR_HEADER_DATA_LEN = 4 + 8;
|
|
13
|
+
const TXNDESCRIPTOR_HEADER_LEN = 4 + 2 + TXNDESCRIPTOR_HEADER_DATA_LEN;
|
|
14
|
+
function writeToTrackingBuffer(buffer, txnDescriptor, outstandingRequestCount) {
|
|
15
|
+
buffer.writeUInt32LE(0);
|
|
16
|
+
buffer.writeUInt32LE(TXNDESCRIPTOR_HEADER_LEN);
|
|
17
|
+
buffer.writeUInt16LE(TYPE.TXN_DESCRIPTOR);
|
|
18
|
+
buffer.writeBuffer(txnDescriptor);
|
|
19
|
+
buffer.writeUInt32LE(outstandingRequestCount);
|
|
20
|
+
const data = buffer.data;
|
|
21
|
+
data.writeUInt32LE(data.length, 0);
|
|
22
|
+
return buffer;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUWVBFIiwiUVVFUllfTk9USUZJQ0FUSU9OUyIsIlRYTl9ERVNDUklQVE9SIiwiVFJBQ0VfQUNUSVZJVFkiLCJUWE5ERVNDUklQVE9SX0hFQURFUl9EQVRBX0xFTiIsIlRYTkRFU0NSSVBUT1JfSEVBREVSX0xFTiIsIndyaXRlVG9UcmFja2luZ0J1ZmZlciIsImJ1ZmZlciIsInR4bkRlc2NyaXB0b3IiLCJvdXRzdGFuZGluZ1JlcXVlc3RDb3VudCIsIndyaXRlVUludDMyTEUiLCJ3cml0ZVVJbnQxNkxFIiwid3JpdGVCdWZmZXIiLCJkYXRhIiwibGVuZ3RoIl0sInNvdXJjZXMiOlsiLi4vc3JjL2FsbC1oZWFkZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBXcml0YWJsZVRyYWNraW5nQnVmZmVyIGZyb20gJy4vdHJhY2tpbmctYnVmZmVyL3dyaXRhYmxlLXRyYWNraW5nLWJ1ZmZlcic7XG5cbmNvbnN0IFRZUEUgPSB7XG4gIFFVRVJZX05PVElGSUNBVElPTlM6IDEsXG4gIFRYTl9ERVNDUklQVE9SOiAyLFxuICBUUkFDRV9BQ1RJVklUWTogM1xufTtcblxuY29uc3QgVFhOREVTQ1JJUFRPUl9IRUFERVJfREFUQV9MRU4gPSA0ICsgODtcblxuY29uc3QgVFhOREVTQ1JJUFRPUl9IRUFERVJfTEVOID0gNCArIDIgKyBUWE5ERVNDUklQVE9SX0hFQURFUl9EQVRBX0xFTjtcblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlVG9UcmFja2luZ0J1ZmZlcihidWZmZXI6IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIsIHR4bkRlc2NyaXB0b3I6IEJ1ZmZlciwgb3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQ6IG51bWJlcikge1xuICBidWZmZXIud3JpdGVVSW50MzJMRSgwKTtcbiAgYnVmZmVyLndyaXRlVUludDMyTEUoVFhOREVTQ1JJUFRPUl9IRUFERVJfTEVOKTtcbiAgYnVmZmVyLndyaXRlVUludDE2TEUoVFlQRS5UWE5fREVTQ1JJUFRPUik7XG4gIGJ1ZmZlci53cml0ZUJ1ZmZlcih0eG5EZXNjcmlwdG9yKTtcbiAgYnVmZmVyLndyaXRlVUludDMyTEUob3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQpO1xuXG4gIGNvbnN0IGRhdGEgPSBidWZmZXIuZGF0YTtcbiAgZGF0YS53cml0ZVVJbnQzMkxFKGRhdGEubGVuZ3RoLCAwKTtcbiAgcmV0dXJuIGJ1ZmZlcjtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUEsTUFBTUEsSUFBSSxHQUFHO0VBQ1hDLG1CQUFtQixFQUFFLENBQUM7RUFDdEJDLGNBQWMsRUFBRSxDQUFDO0VBQ2pCQyxjQUFjLEVBQUU7QUFDbEIsQ0FBQztBQUVELE1BQU1DLDZCQUE2QixHQUFHLENBQUMsR0FBRyxDQUFDO0FBRTNDLE1BQU1DLHdCQUF3QixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUdELDZCQUE2QjtBQUUvRCxTQUFTRSxxQkFBcUJBLENBQUNDLE1BQThCLEVBQUVDLGFBQXFCLEVBQUVDLHVCQUErQixFQUFFO0VBQzVIRixNQUFNLENBQUNHLGFBQWEsQ0FBQyxDQUFDLENBQUM7RUFDdkJILE1BQU0sQ0FBQ0csYUFBYSxDQUFDTCx3QkFBd0IsQ0FBQztFQUM5Q0UsTUFBTSxDQUFDSSxhQUFhLENBQUNYLElBQUksQ0FBQ0UsY0FBYyxDQUFDO0VBQ3pDSyxNQUFNLENBQUNLLFdBQVcsQ0FBQ0osYUFBYSxDQUFDO0VBQ2pDRCxNQUFNLENBQUNHLGFBQWEsQ0FBQ0QsdUJBQXVCLENBQUM7RUFFN0MsTUFBTUksSUFBSSxHQUFHTixNQUFNLENBQUNNLElBQUk7RUFDeEJBLElBQUksQ0FBQ0gsYUFBYSxDQUFDRyxJQUFJLENBQUNDLE1BQU0sRUFBRSxDQUFDLENBQUM7RUFDbEMsT0FBT1AsTUFBTTtBQUNmIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"all-headers.js","names":["TYPE","QUERY_NOTIFICATIONS","TXN_DESCRIPTOR","TRACE_ACTIVITY","TXNDESCRIPTOR_HEADER_DATA_LEN","TXNDESCRIPTOR_HEADER_LEN","writeToTrackingBuffer","buffer","txnDescriptor","outstandingRequestCount","writeUInt32LE","writeUInt16LE","writeBuffer","data","length"],"sources":["../src/all-headers.ts"],"sourcesContent":["import WritableTrackingBuffer from './tracking-buffer/writable-tracking-buffer';\n\nconst TYPE = {\n QUERY_NOTIFICATIONS: 1,\n TXN_DESCRIPTOR: 2,\n TRACE_ACTIVITY: 3\n};\n\nconst TXNDESCRIPTOR_HEADER_DATA_LEN = 4 + 8;\n\nconst TXNDESCRIPTOR_HEADER_LEN = 4 + 2 + TXNDESCRIPTOR_HEADER_DATA_LEN;\n\nexport function writeToTrackingBuffer(buffer: WritableTrackingBuffer, txnDescriptor: Buffer, outstandingRequestCount: number) {\n buffer.writeUInt32LE(0);\n buffer.writeUInt32LE(TXNDESCRIPTOR_HEADER_LEN);\n buffer.writeUInt16LE(TYPE.TXN_DESCRIPTOR);\n buffer.writeBuffer(txnDescriptor);\n buffer.writeUInt32LE(outstandingRequestCount);\n\n const data = buffer.data;\n data.writeUInt32LE(data.length, 0);\n return buffer;\n}\n"],"mappings":";;;;;;AAEA,MAAMA,IAAI,GAAG;EACXC,mBAAmB,EAAE,CAAC;EACtBC,cAAc,EAAE,CAAC;EACjBC,cAAc,EAAE;AAClB,CAAC;AAED,MAAMC,6BAA6B,GAAG,CAAC,GAAG,CAAC;AAE3C,MAAMC,wBAAwB,GAAG,CAAC,GAAG,CAAC,GAAGD,6BAA6B;AAE/D,SAASE,qBAAqBA,CAACC,MAA8B,EAAEC,aAAqB,EAAEC,uBAA+B,EAAE;EAC5HF,MAAM,CAACG,aAAa,CAAC,CAAC,CAAC;EACvBH,MAAM,CAACG,aAAa,CAACL,wBAAwB,CAAC;EAC9CE,MAAM,CAACI,aAAa,CAACX,IAAI,CAACE,cAAc,CAAC;EACzCK,MAAM,CAACK,WAAW,CAACJ,aAAa,CAAC;EACjCD,MAAM,CAACG,aAAa,CAACD,uBAAuB,CAAC;EAE7C,MAAMI,IAAI,GAAGN,MAAM,CAACM,IAAI;EACxBA,IAAI,CAACH,aAAa,CAACG,IAAI,CAACC,MAAM,EAAE,CAAC,CAAC;EAClC,OAAOP,MAAM;AACf","ignoreList":[]}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.algorithmName = exports.AeadAes256CbcHmac256Algorithm = void 0;
|
|
7
|
+
var _types = require("./types");
|
|
8
|
+
var _crypto = require("crypto");
|
|
9
|
+
var _aeadAes256CbcHmacEncryptionKey = require("./aead-aes-256-cbc-hmac-encryption-key");
|
|
10
|
+
// This code is based on the `mssql-jdbc` library published under the conditions of MIT license.
|
|
11
|
+
// Copyright (c) 2019 Microsoft Corporation
|
|
12
|
+
|
|
13
|
+
const algorithmName = exports.algorithmName = 'AEAD_AES_256_CBC_HMAC_SHA256';
|
|
14
|
+
const algorithmVersion = 0x1;
|
|
15
|
+
const blockSizeInBytes = 16;
|
|
16
|
+
class AeadAes256CbcHmac256Algorithm {
|
|
17
|
+
constructor(columnEncryptionKey, encryptionType) {
|
|
18
|
+
this.keySizeInBytes = _aeadAes256CbcHmacEncryptionKey.keySize / 8;
|
|
19
|
+
this.version = Buffer.from([algorithmVersion]);
|
|
20
|
+
this.versionSize = Buffer.from([1]);
|
|
21
|
+
this.minimumCipherTextLengthInBytesNoAuthenticationTag = 1 + blockSizeInBytes + blockSizeInBytes;
|
|
22
|
+
this.minimumCipherTextLengthInBytesWithAuthenticationTag = this.minimumCipherTextLengthInBytesNoAuthenticationTag + this.keySizeInBytes;
|
|
23
|
+
this.columnEncryptionkey = columnEncryptionKey;
|
|
24
|
+
this.isDeterministic = encryptionType === _types.SQLServerEncryptionType.Deterministic;
|
|
25
|
+
}
|
|
26
|
+
encryptData(plaintText) {
|
|
27
|
+
let iv;
|
|
28
|
+
if (this.isDeterministic === true) {
|
|
29
|
+
const hmacIv = (0, _crypto.createHmac)('sha256', this.columnEncryptionkey.getIvKey());
|
|
30
|
+
hmacIv.update(plaintText);
|
|
31
|
+
iv = hmacIv.digest().slice(0, blockSizeInBytes);
|
|
32
|
+
} else {
|
|
33
|
+
iv = (0, _crypto.randomBytes)(blockSizeInBytes);
|
|
34
|
+
}
|
|
35
|
+
const encryptCipher = (0, _crypto.createCipheriv)('aes-256-cbc', this.columnEncryptionkey.getEncryptionKey(), iv);
|
|
36
|
+
const encryptedBuffer = Buffer.concat([encryptCipher.update(plaintText), encryptCipher.final()]);
|
|
37
|
+
const authenticationTag = this._prepareAuthenticationTag(iv, encryptedBuffer, 0, encryptedBuffer.length);
|
|
38
|
+
return Buffer.concat([Buffer.from([algorithmVersion]), authenticationTag, iv, encryptedBuffer]);
|
|
39
|
+
}
|
|
40
|
+
decryptData(cipherText) {
|
|
41
|
+
const iv = Buffer.alloc(blockSizeInBytes);
|
|
42
|
+
const minimumCiperTextLength = this.minimumCipherTextLengthInBytesWithAuthenticationTag;
|
|
43
|
+
if (cipherText.length < minimumCiperTextLength) {
|
|
44
|
+
throw new Error(`Specified ciphertext has an invalid size of ${cipherText.length} bytes, which is below the minimum ${minimumCiperTextLength} bytes required for decryption.`);
|
|
45
|
+
}
|
|
46
|
+
let startIndex = 0;
|
|
47
|
+
if (cipherText[0] !== algorithmVersion) {
|
|
48
|
+
throw new Error(`The specified ciphertext's encryption algorithm version ${Buffer.from([cipherText[0]]).toString('hex')} does not match the expected encryption algorithm version ${algorithmVersion}.`);
|
|
49
|
+
}
|
|
50
|
+
startIndex += 1;
|
|
51
|
+
let authenticationTagOffset = 0;
|
|
52
|
+
authenticationTagOffset = startIndex;
|
|
53
|
+
startIndex += this.keySizeInBytes;
|
|
54
|
+
cipherText.copy(iv, 0, startIndex, startIndex + iv.length);
|
|
55
|
+
startIndex += iv.length;
|
|
56
|
+
const cipherTextOffset = startIndex;
|
|
57
|
+
const cipherTextCount = cipherText.length - startIndex;
|
|
58
|
+
const authenticationTag = this._prepareAuthenticationTag(iv, cipherText, cipherTextOffset, cipherTextCount);
|
|
59
|
+
if (0 !== authenticationTag.compare(cipherText, authenticationTagOffset, Math.min(authenticationTagOffset + cipherTextCount, authenticationTagOffset + authenticationTag.length), 0, Math.min(cipherTextCount, authenticationTag.length))) {
|
|
60
|
+
throw new Error('Specified ciphertext has an invalid authentication tag.');
|
|
61
|
+
}
|
|
62
|
+
let plainText;
|
|
63
|
+
const decipher = (0, _crypto.createDecipheriv)('aes-256-cbc', this.columnEncryptionkey.getEncryptionKey(), iv);
|
|
64
|
+
try {
|
|
65
|
+
plainText = decipher.update(cipherText.slice(cipherTextOffset, cipherTextOffset + cipherTextCount));
|
|
66
|
+
plainText = Buffer.concat([plainText, decipher.final()]);
|
|
67
|
+
} catch (error) {
|
|
68
|
+
throw new Error(`Internal error while decryption: ${error.message}`);
|
|
69
|
+
}
|
|
70
|
+
return plainText;
|
|
71
|
+
}
|
|
72
|
+
_prepareAuthenticationTag(iv, cipherText, offset, length) {
|
|
73
|
+
const hmac = (0, _crypto.createHmac)('sha256', this.columnEncryptionkey.getMacKey());
|
|
74
|
+
hmac.update(this.version);
|
|
75
|
+
hmac.update(iv);
|
|
76
|
+
hmac.update(cipherText.slice(offset, offset + length));
|
|
77
|
+
hmac.update(this.versionSize);
|
|
78
|
+
return hmac.digest();
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
exports.AeadAes256CbcHmac256Algorithm = AeadAes256CbcHmac256Algorithm;
|
|
82
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHlwZXMiLCJyZXF1aXJlIiwiX2NyeXB0byIsIl9hZWFkQWVzMjU2Q2JjSG1hY0VuY3J5cHRpb25LZXkiLCJhbGdvcml0aG1OYW1lIiwiZXhwb3J0cyIsImFsZ29yaXRobVZlcnNpb24iLCJibG9ja1NpemVJbkJ5dGVzIiwiQWVhZEFlczI1NkNiY0htYWMyNTZBbGdvcml0aG0iLCJjb25zdHJ1Y3RvciIsImNvbHVtbkVuY3J5cHRpb25LZXkiLCJlbmNyeXB0aW9uVHlwZSIsImtleVNpemVJbkJ5dGVzIiwia2V5U2l6ZSIsInZlcnNpb24iLCJCdWZmZXIiLCJmcm9tIiwidmVyc2lvblNpemUiLCJtaW5pbXVtQ2lwaGVyVGV4dExlbmd0aEluQnl0ZXNOb0F1dGhlbnRpY2F0aW9uVGFnIiwibWluaW11bUNpcGhlclRleHRMZW5ndGhJbkJ5dGVzV2l0aEF1dGhlbnRpY2F0aW9uVGFnIiwiY29sdW1uRW5jcnlwdGlvbmtleSIsImlzRGV0ZXJtaW5pc3RpYyIsIlNRTFNlcnZlckVuY3J5cHRpb25UeXBlIiwiRGV0ZXJtaW5pc3RpYyIsImVuY3J5cHREYXRhIiwicGxhaW50VGV4dCIsIml2IiwiaG1hY0l2IiwiY3JlYXRlSG1hYyIsImdldEl2S2V5IiwidXBkYXRlIiwiZGlnZXN0Iiwic2xpY2UiLCJyYW5kb21CeXRlcyIsImVuY3J5cHRDaXBoZXIiLCJjcmVhdGVDaXBoZXJpdiIsImdldEVuY3J5cHRpb25LZXkiLCJlbmNyeXB0ZWRCdWZmZXIiLCJjb25jYXQiLCJmaW5hbCIsImF1dGhlbnRpY2F0aW9uVGFnIiwiX3ByZXBhcmVBdXRoZW50aWNhdGlvblRhZyIsImxlbmd0aCIsImRlY3J5cHREYXRhIiwiY2lwaGVyVGV4dCIsImFsbG9jIiwibWluaW11bUNpcGVyVGV4dExlbmd0aCIsIkVycm9yIiwic3RhcnRJbmRleCIsInRvU3RyaW5nIiwiYXV0aGVudGljYXRpb25UYWdPZmZzZXQiLCJjb3B5IiwiY2lwaGVyVGV4dE9mZnNldCIsImNpcGhlclRleHRDb3VudCIsImNvbXBhcmUiLCJNYXRoIiwibWluIiwicGxhaW5UZXh0IiwiZGVjaXBoZXIiLCJjcmVhdGVEZWNpcGhlcml2IiwiZXJyb3IiLCJtZXNzYWdlIiwib2Zmc2V0IiwiaG1hYyIsImdldE1hY0tleSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hbHdheXMtZW5jcnlwdGVkL2FlYWQtYWVzLTI1Ni1jYmMtaG1hYy1hbGdvcml0aG0udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhpcyBjb2RlIGlzIGJhc2VkIG9uIHRoZSBgbXNzcWwtamRiY2AgbGlicmFyeSBwdWJsaXNoZWQgdW5kZXIgdGhlIGNvbmRpdGlvbnMgb2YgTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgKGMpIDIwMTkgTWljcm9zb2Z0IENvcnBvcmF0aW9uXG5cbmltcG9ydCB7IHR5cGUgRW5jcnlwdGlvbkFsZ29yaXRobSwgU1FMU2VydmVyRW5jcnlwdGlvblR5cGUgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGNyZWF0ZUhtYWMsIHJhbmRvbUJ5dGVzLCBjcmVhdGVDaXBoZXJpdiwgY3JlYXRlRGVjaXBoZXJpdiB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyBBZWFkQWVzMjU2Q2JjSG1hYzI1NkVuY3J5cHRpb25LZXksIGtleVNpemUgfSBmcm9tICcuL2FlYWQtYWVzLTI1Ni1jYmMtaG1hYy1lbmNyeXB0aW9uLWtleSc7XG5cbmV4cG9ydCBjb25zdCBhbGdvcml0aG1OYW1lID0gJ0FFQURfQUVTXzI1Nl9DQkNfSE1BQ19TSEEyNTYnO1xuY29uc3QgYWxnb3JpdGhtVmVyc2lvbiA9IDB4MTtcbmNvbnN0IGJsb2NrU2l6ZUluQnl0ZXMgPSAxNjtcblxuZXhwb3J0IGNsYXNzIEFlYWRBZXMyNTZDYmNIbWFjMjU2QWxnb3JpdGhtIGltcGxlbWVudHMgRW5jcnlwdGlvbkFsZ29yaXRobSB7XG4gIGRlY2xhcmUgcHJpdmF0ZSBjb2x1bW5FbmNyeXB0aW9ua2V5OiBBZWFkQWVzMjU2Q2JjSG1hYzI1NkVuY3J5cHRpb25LZXk7XG4gIGRlY2xhcmUgcHJpdmF0ZSBpc0RldGVybWluaXN0aWM6IGJvb2xlYW47XG4gIGRlY2xhcmUgcHJpdmF0ZSBrZXlTaXplSW5CeXRlczogbnVtYmVyO1xuICBkZWNsYXJlIHByaXZhdGUgdmVyc2lvbjogQnVmZmVyO1xuICBkZWNsYXJlIHByaXZhdGUgdmVyc2lvblNpemU6IEJ1ZmZlcjtcbiAgZGVjbGFyZSBwcml2YXRlIG1pbmltdW1DaXBoZXJUZXh0TGVuZ3RoSW5CeXRlc05vQXV0aGVudGljYXRpb25UYWc6IG51bWJlcjtcbiAgZGVjbGFyZSBwcml2YXRlIG1pbmltdW1DaXBoZXJUZXh0TGVuZ3RoSW5CeXRlc1dpdGhBdXRoZW50aWNhdGlvblRhZzogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGNvbHVtbkVuY3J5cHRpb25LZXk6IEFlYWRBZXMyNTZDYmNIbWFjMjU2RW5jcnlwdGlvbktleSwgZW5jcnlwdGlvblR5cGU6IFNRTFNlcnZlckVuY3J5cHRpb25UeXBlKSB7XG4gICAgdGhpcy5rZXlTaXplSW5CeXRlcyA9IGtleVNpemUgLyA4O1xuICAgIHRoaXMudmVyc2lvbiA9IEJ1ZmZlci5mcm9tKFthbGdvcml0aG1WZXJzaW9uXSk7XG4gICAgdGhpcy52ZXJzaW9uU2l6ZSA9IEJ1ZmZlci5mcm9tKFsxXSk7XG4gICAgdGhpcy5taW5pbXVtQ2lwaGVyVGV4dExlbmd0aEluQnl0ZXNOb0F1dGhlbnRpY2F0aW9uVGFnID0gMSArIGJsb2NrU2l6ZUluQnl0ZXMgKyBibG9ja1NpemVJbkJ5dGVzO1xuICAgIHRoaXMubWluaW11bUNpcGhlclRleHRMZW5ndGhJbkJ5dGVzV2l0aEF1dGhlbnRpY2F0aW9uVGFnID0gdGhpcy5taW5pbXVtQ2lwaGVyVGV4dExlbmd0aEluQnl0ZXNOb0F1dGhlbnRpY2F0aW9uVGFnICsgdGhpcy5rZXlTaXplSW5CeXRlcztcbiAgICB0aGlzLmNvbHVtbkVuY3J5cHRpb25rZXkgPSBjb2x1bW5FbmNyeXB0aW9uS2V5O1xuXG4gICAgdGhpcy5pc0RldGVybWluaXN0aWMgPSBlbmNyeXB0aW9uVHlwZSA9PT0gU1FMU2VydmVyRW5jcnlwdGlvblR5cGUuRGV0ZXJtaW5pc3RpYztcbiAgfVxuXG4gIGVuY3J5cHREYXRhKHBsYWludFRleHQ6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gICAgbGV0IGl2OiBCdWZmZXI7XG5cbiAgICBpZiAodGhpcy5pc0RldGVybWluaXN0aWMgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGhtYWNJdiA9IGNyZWF0ZUhtYWMoJ3NoYTI1NicsIHRoaXMuY29sdW1uRW5jcnlwdGlvbmtleS5nZXRJdktleSgpKTtcbiAgICAgIGhtYWNJdi51cGRhdGUocGxhaW50VGV4dCk7XG4gICAgICBpdiA9IGhtYWNJdi5kaWdlc3QoKS5zbGljZSgwLCBibG9ja1NpemVJbkJ5dGVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXYgPSByYW5kb21CeXRlcyhibG9ja1NpemVJbkJ5dGVzKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbmNyeXB0Q2lwaGVyID0gY3JlYXRlQ2lwaGVyaXYoJ2Flcy0yNTYtY2JjJywgdGhpcy5jb2x1bW5FbmNyeXB0aW9ua2V5LmdldEVuY3J5cHRpb25LZXkoKSwgaXYpO1xuXG4gICAgY29uc3QgZW5jcnlwdGVkQnVmZmVyID0gQnVmZmVyLmNvbmNhdChbZW5jcnlwdENpcGhlci51cGRhdGUocGxhaW50VGV4dCksIGVuY3J5cHRDaXBoZXIuZmluYWwoKV0pO1xuXG4gICAgY29uc3QgYXV0aGVudGljYXRpb25UYWc6IEJ1ZmZlciA9IHRoaXMuX3ByZXBhcmVBdXRoZW50aWNhdGlvblRhZyhpdiwgZW5jcnlwdGVkQnVmZmVyLCAwLCBlbmNyeXB0ZWRCdWZmZXIubGVuZ3RoKTtcblxuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KFtCdWZmZXIuZnJvbShbYWxnb3JpdGhtVmVyc2lvbl0pLCBhdXRoZW50aWNhdGlvblRhZywgaXYsIGVuY3J5cHRlZEJ1ZmZlcl0pO1xuICB9XG5cbiAgZGVjcnlwdERhdGEoY2lwaGVyVGV4dDogQnVmZmVyKTogQnVmZmVyIHtcbiAgICBjb25zdCBpdjogQnVmZmVyID0gQnVmZmVyLmFsbG9jKGJsb2NrU2l6ZUluQnl0ZXMpO1xuXG4gICAgY29uc3QgbWluaW11bUNpcGVyVGV4dExlbmd0aDogbnVtYmVyID0gdGhpcy5taW5pbXVtQ2lwaGVyVGV4dExlbmd0aEluQnl0ZXNXaXRoQXV0aGVudGljYXRpb25UYWc7XG5cbiAgICBpZiAoY2lwaGVyVGV4dC5sZW5ndGggPCBtaW5pbXVtQ2lwZXJUZXh0TGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBjaXBoZXJ0ZXh0IGhhcyBhbiBpbnZhbGlkIHNpemUgb2YgJHtjaXBoZXJUZXh0Lmxlbmd0aH0gYnl0ZXMsIHdoaWNoIGlzIGJlbG93IHRoZSBtaW5pbXVtICR7bWluaW11bUNpcGVyVGV4dExlbmd0aH0gYnl0ZXMgcmVxdWlyZWQgZm9yIGRlY3J5cHRpb24uYCk7XG4gICAgfVxuXG4gICAgbGV0IHN0YXJ0SW5kZXggPSAwO1xuICAgIGlmIChjaXBoZXJUZXh0WzBdICE9PSBhbGdvcml0aG1WZXJzaW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBzcGVjaWZpZWQgY2lwaGVydGV4dCdzIGVuY3J5cHRpb24gYWxnb3JpdGhtIHZlcnNpb24gJHtCdWZmZXIuZnJvbShbY2lwaGVyVGV4dFswXV0pLnRvU3RyaW5nKCdoZXgnKX0gZG9lcyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIGVuY3J5cHRpb24gYWxnb3JpdGhtIHZlcnNpb24gJHthbGdvcml0aG1WZXJzaW9ufS5gKTtcbiAgICB9XG5cbiAgICBzdGFydEluZGV4ICs9IDE7XG4gICAgbGV0IGF1dGhlbnRpY2F0aW9uVGFnT2Zmc2V0ID0gMDtcblxuICAgIGF1dGhlbnRpY2F0aW9uVGFnT2Zmc2V0ID0gc3RhcnRJbmRleDtcbiAgICBzdGFydEluZGV4ICs9IHRoaXMua2V5U2l6ZUluQnl0ZXM7XG5cbiAgICBjaXBoZXJUZXh0LmNvcHkoaXYsIDAsIHN0YXJ0SW5kZXgsIHN0YXJ0SW5kZXggKyBpdi5sZW5ndGgpO1xuICAgIHN0YXJ0SW5kZXggKz0gaXYubGVuZ3RoO1xuXG4gICAgY29uc3QgY2lwaGVyVGV4dE9mZnNldCA9IHN0YXJ0SW5kZXg7XG4gICAgY29uc3QgY2lwaGVyVGV4dENvdW50ID0gY2lwaGVyVGV4dC5sZW5ndGggLSBzdGFydEluZGV4O1xuXG4gICAgY29uc3QgYXV0aGVudGljYXRpb25UYWc6IEJ1ZmZlciA9IHRoaXMuX3ByZXBhcmVBdXRoZW50aWNhdGlvblRhZyhpdiwgY2lwaGVyVGV4dCwgY2lwaGVyVGV4dE9mZnNldCwgY2lwaGVyVGV4dENvdW50KTtcblxuICAgIGlmICgwICE9PSBhdXRoZW50aWNhdGlvblRhZy5jb21wYXJlKGNpcGhlclRleHQsIGF1dGhlbnRpY2F0aW9uVGFnT2Zmc2V0LCBNYXRoLm1pbihhdXRoZW50aWNhdGlvblRhZ09mZnNldCArIGNpcGhlclRleHRDb3VudCwgYXV0aGVudGljYXRpb25UYWdPZmZzZXQgKyBhdXRoZW50aWNhdGlvblRhZy5sZW5ndGgpLCAwLCBNYXRoLm1pbihjaXBoZXJUZXh0Q291bnQsIGF1dGhlbnRpY2F0aW9uVGFnLmxlbmd0aCkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NwZWNpZmllZCBjaXBoZXJ0ZXh0IGhhcyBhbiBpbnZhbGlkIGF1dGhlbnRpY2F0aW9uIHRhZy4nKTtcbiAgICB9XG5cbiAgICBsZXQgcGxhaW5UZXh0OiBCdWZmZXI7XG5cbiAgICBjb25zdCBkZWNpcGhlciA9IGNyZWF0ZURlY2lwaGVyaXYoJ2Flcy0yNTYtY2JjJywgdGhpcy5jb2x1bW5FbmNyeXB0aW9ua2V5LmdldEVuY3J5cHRpb25LZXkoKSwgaXYpO1xuICAgIHRyeSB7XG4gICAgICBwbGFpblRleHQgPSBkZWNpcGhlci51cGRhdGUoY2lwaGVyVGV4dC5zbGljZShjaXBoZXJUZXh0T2Zmc2V0LCBjaXBoZXJUZXh0T2Zmc2V0ICsgY2lwaGVyVGV4dENvdW50KSk7XG4gICAgICBwbGFpblRleHQgPSBCdWZmZXIuY29uY2F0KFtwbGFpblRleHQsIGRlY2lwaGVyLmZpbmFsKCldKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludGVybmFsIGVycm9yIHdoaWxlIGRlY3J5cHRpb246ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGxhaW5UZXh0O1xuICB9XG5cbiAgX3ByZXBhcmVBdXRoZW50aWNhdGlvblRhZyhpdjogQnVmZmVyLCBjaXBoZXJUZXh0OiBCdWZmZXIsIG9mZnNldDogbnVtYmVyLCBsZW5ndGg6IG51bWJlcik6IEJ1ZmZlciB7XG4gICAgY29uc3QgaG1hYyA9IGNyZWF0ZUhtYWMoJ3NoYTI1NicsIHRoaXMuY29sdW1uRW5jcnlwdGlvbmtleS5nZXRNYWNLZXkoKSk7XG5cbiAgICBobWFjLnVwZGF0ZSh0aGlzLnZlcnNpb24pO1xuICAgIGhtYWMudXBkYXRlKGl2KTtcbiAgICBobWFjLnVwZGF0ZShjaXBoZXJUZXh0LnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgbGVuZ3RoKSk7XG4gICAgaG1hYy51cGRhdGUodGhpcy52ZXJzaW9uU2l6ZSk7XG4gICAgcmV0dXJuIGhtYWMuZGlnZXN0KCk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBR0EsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsK0JBQUEsR0FBQUYsT0FBQTtBQUxBO0FBQ0E7O0FBTU8sTUFBTUcsYUFBYSxHQUFBQyxPQUFBLENBQUFELGFBQUEsR0FBRyw4QkFBOEI7QUFDM0QsTUFBTUUsZ0JBQWdCLEdBQUcsR0FBRztBQUM1QixNQUFNQyxnQkFBZ0IsR0FBRyxFQUFFO0FBRXBCLE1BQU1DLDZCQUE2QixDQUFnQztFQVN4RUMsV0FBV0EsQ0FBQ0MsbUJBQXNELEVBQUVDLGNBQXVDLEVBQUU7SUFDM0csSUFBSSxDQUFDQyxjQUFjLEdBQUdDLHVDQUFPLEdBQUcsQ0FBQztJQUNqQyxJQUFJLENBQUNDLE9BQU8sR0FBR0MsTUFB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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aead-aes-256-cbc-hmac-algorithm.js","names":["_types","require","_crypto","_aeadAes256CbcHmacEncryptionKey","algorithmName","exports","algorithmVersion","blockSizeInBytes","AeadAes256CbcHmac256Algorithm","constructor","columnEncryptionKey","encryptionType","keySizeInBytes","keySize","version","Buffer","from","versionSize","minimumCipherTextLengthInBytesNoAuthenticationTag","minimumCipherTextLengthInBytesWithAuthenticationTag","columnEncryptionkey","isDeterministic","SQLServerEncryptionType","Deterministic","encryptData","plaintText","iv","hmacIv","createHmac","getIvKey","update","digest","slice","randomBytes","encryptCipher","createCipheriv","getEncryptionKey","encryptedBuffer","concat","final","authenticationTag","_prepareAuthenticationTag","length","decryptData","cipherText","alloc","minimumCiperTextLength","Error","startIndex","toString","authenticationTagOffset","copy","cipherTextOffset","cipherTextCount","compare","Math","min","plainText","decipher","createDecipheriv","error","message","offset","hmac","getMacKey"],"sources":["../../src/always-encrypted/aead-aes-256-cbc-hmac-algorithm.ts"],"sourcesContent":["// This code is based on the `mssql-jdbc` library published under the conditions of MIT license.\n// Copyright (c) 2019 Microsoft Corporation\n\nimport { type EncryptionAlgorithm, SQLServerEncryptionType } from './types';\nimport { createHmac, randomBytes, createCipheriv, createDecipheriv } from 'crypto';\nimport { AeadAes256CbcHmac256EncryptionKey, keySize } from './aead-aes-256-cbc-hmac-encryption-key';\n\nexport const algorithmName = 'AEAD_AES_256_CBC_HMAC_SHA256';\nconst algorithmVersion = 0x1;\nconst blockSizeInBytes = 16;\n\nexport class AeadAes256CbcHmac256Algorithm implements EncryptionAlgorithm {\n declare private columnEncryptionkey: AeadAes256CbcHmac256EncryptionKey;\n declare private isDeterministic: boolean;\n declare private keySizeInBytes: number;\n declare private version: Buffer;\n declare private versionSize: Buffer;\n declare private minimumCipherTextLengthInBytesNoAuthenticationTag: number;\n declare private minimumCipherTextLengthInBytesWithAuthenticationTag: number;\n\n constructor(columnEncryptionKey: AeadAes256CbcHmac256EncryptionKey, encryptionType: SQLServerEncryptionType) {\n this.keySizeInBytes = keySize / 8;\n this.version = Buffer.from([algorithmVersion]);\n this.versionSize = Buffer.from([1]);\n this.minimumCipherTextLengthInBytesNoAuthenticationTag = 1 + blockSizeInBytes + blockSizeInBytes;\n this.minimumCipherTextLengthInBytesWithAuthenticationTag = this.minimumCipherTextLengthInBytesNoAuthenticationTag + this.keySizeInBytes;\n this.columnEncryptionkey = columnEncryptionKey;\n\n this.isDeterministic = encryptionType === SQLServerEncryptionType.Deterministic;\n }\n\n encryptData(plaintText: Buffer): Buffer {\n let iv: Buffer;\n\n if (this.isDeterministic === true) {\n const hmacIv = createHmac('sha256', this.columnEncryptionkey.getIvKey());\n hmacIv.update(plaintText);\n iv = hmacIv.digest().slice(0, blockSizeInBytes);\n } else {\n iv = randomBytes(blockSizeInBytes);\n }\n\n const encryptCipher = createCipheriv('aes-256-cbc', this.columnEncryptionkey.getEncryptionKey(), iv);\n\n const encryptedBuffer = Buffer.concat([encryptCipher.update(plaintText), encryptCipher.final()]);\n\n const authenticationTag: Buffer = this._prepareAuthenticationTag(iv, encryptedBuffer, 0, encryptedBuffer.length);\n\n return Buffer.concat([Buffer.from([algorithmVersion]), authenticationTag, iv, encryptedBuffer]);\n }\n\n decryptData(cipherText: Buffer): Buffer {\n const iv: Buffer = Buffer.alloc(blockSizeInBytes);\n\n const minimumCiperTextLength: number = this.minimumCipherTextLengthInBytesWithAuthenticationTag;\n\n if (cipherText.length < minimumCiperTextLength) {\n throw new Error(`Specified ciphertext has an invalid size of ${cipherText.length} bytes, which is below the minimum ${minimumCiperTextLength} bytes required for decryption.`);\n }\n\n let startIndex = 0;\n if (cipherText[0] !== algorithmVersion) {\n throw new Error(`The specified ciphertext's encryption algorithm version ${Buffer.from([cipherText[0]]).toString('hex')} does not match the expected encryption algorithm version ${algorithmVersion}.`);\n }\n\n startIndex += 1;\n let authenticationTagOffset = 0;\n\n authenticationTagOffset = startIndex;\n startIndex += this.keySizeInBytes;\n\n cipherText.copy(iv, 0, startIndex, startIndex + iv.length);\n startIndex += iv.length;\n\n const cipherTextOffset = startIndex;\n const cipherTextCount = cipherText.length - startIndex;\n\n const authenticationTag: Buffer = this._prepareAuthenticationTag(iv, cipherText, cipherTextOffset, cipherTextCount);\n\n if (0 !== authenticationTag.compare(cipherText, authenticationTagOffset, Math.min(authenticationTagOffset + cipherTextCount, authenticationTagOffset + authenticationTag.length), 0, Math.min(cipherTextCount, authenticationTag.length))) {\n throw new Error('Specified ciphertext has an invalid authentication tag.');\n }\n\n let plainText: Buffer;\n\n const decipher = createDecipheriv('aes-256-cbc', this.columnEncryptionkey.getEncryptionKey(), iv);\n try {\n plainText = decipher.update(cipherText.slice(cipherTextOffset, cipherTextOffset + cipherTextCount));\n plainText = Buffer.concat([plainText, decipher.final()]);\n } catch (error: any) {\n throw new Error(`Internal error while decryption: ${error.message}`);\n }\n\n return plainText;\n }\n\n _prepareAuthenticationTag(iv: Buffer, cipherText: Buffer, offset: number, length: number): Buffer {\n const hmac = createHmac('sha256', this.columnEncryptionkey.getMacKey());\n\n hmac.update(this.version);\n hmac.update(iv);\n hmac.update(cipherText.slice(offset, offset + length));\n hmac.update(this.versionSize);\n return hmac.digest();\n }\n}\n"],"mappings":"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","ignoreList":[]}
|