plugin-data-source-mssql 2.0.0 → 2.0.2

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.
Files changed (409) hide show
  1. package/README.md +31 -10
  2. package/dist/externalVersion.js +6 -6
  3. package/dist/node_modules/tedious/245.index.js +741 -0
  4. package/dist/node_modules/tedious/LICENSE +21 -0
  5. package/dist/node_modules/tedious/appveyor.yml +67 -0
  6. package/dist/node_modules/tedious/benchmarks/bulk-load/iterable.js +61 -0
  7. package/dist/node_modules/tedious/benchmarks/common.js +287 -0
  8. package/dist/node_modules/tedious/benchmarks/connection/open.js +26 -0
  9. package/dist/node_modules/tedious/benchmarks/package-lock.json +21173 -0
  10. package/dist/node_modules/tedious/benchmarks/package.json +11 -0
  11. package/dist/node_modules/tedious/benchmarks/query/call-tvp.js +105 -0
  12. package/dist/node_modules/tedious/benchmarks/query/insert-varbinary.js +46 -0
  13. package/dist/node_modules/tedious/benchmarks/query/select-many-rows.js +63 -0
  14. package/dist/node_modules/tedious/benchmarks/query/select-nvarchar.js +50 -0
  15. package/dist/node_modules/tedious/benchmarks/query/select-varbinary.js +50 -0
  16. package/dist/node_modules/tedious/benchmarks/request/rpcrequest-payload-tvp.js +45 -0
  17. package/dist/node_modules/tedious/benchmarks/request/rpcrequest-payload-varbinary.js +37 -0
  18. package/dist/node_modules/tedious/benchmarks/token-parser/colmetadata-token.js +27 -0
  19. package/dist/node_modules/tedious/benchmarks/token-parser/done-token.js +28 -0
  20. package/dist/node_modules/tedious/benchmarks/token-parser/simple-tokens.js +363 -0
  21. package/dist/node_modules/tedious/lib/all-headers.d.ts +2 -0
  22. package/dist/node_modules/tedious/lib/all-headers.js +24 -0
  23. package/dist/node_modules/tedious/lib/always-encrypted/aead-aes-256-cbc-hmac-algorithm.js +82 -0
  24. package/dist/node_modules/tedious/lib/always-encrypted/aead-aes-256-cbc-hmac-encryption-key.js +55 -0
  25. package/dist/node_modules/tedious/lib/always-encrypted/cek-entry.d.ts +11 -0
  26. package/dist/node_modules/tedious/lib/always-encrypted/cek-entry.js +42 -0
  27. package/dist/node_modules/tedious/lib/always-encrypted/get-parameter-encryption-metadata.js +90 -0
  28. package/dist/node_modules/tedious/lib/always-encrypted/key-crypto.js +94 -0
  29. package/dist/node_modules/tedious/lib/always-encrypted/keystore-provider-azure-key-vault.d.ts +21 -0
  30. package/dist/node_modules/tedious/lib/always-encrypted/keystore-provider-azure-key-vault.js +247 -0
  31. package/dist/node_modules/tedious/lib/always-encrypted/symmetric-key-cache.js +36 -0
  32. package/dist/node_modules/tedious/lib/always-encrypted/symmetric-key.js +25 -0
  33. package/dist/node_modules/tedious/lib/always-encrypted/types.d.ts +73 -0
  34. package/dist/node_modules/tedious/lib/always-encrypted/types.js +48 -0
  35. package/dist/node_modules/tedious/lib/always-encrypted/utils.js +23 -0
  36. package/dist/node_modules/tedious/lib/bulk-load-payload.d.ts +8 -0
  37. package/dist/node_modules/tedious/lib/bulk-load-payload.js +23 -0
  38. package/dist/node_modules/tedious/lib/bulk-load.d.ts +275 -0
  39. package/dist/node_modules/tedious/lib/bulk-load.js +516 -0
  40. package/dist/node_modules/tedious/lib/collation.d.ts +28 -0
  41. package/dist/node_modules/tedious/lib/collation.js +348 -0
  42. package/dist/node_modules/tedious/lib/connection.d.ts +1310 -0
  43. package/dist/node_modules/tedious/lib/connection.js +2730 -0
  44. package/dist/node_modules/tedious/lib/connector.d.ts +18 -0
  45. package/dist/node_modules/tedious/lib/connector.js +150 -0
  46. package/dist/node_modules/tedious/lib/data-type.d.ts +455 -0
  47. package/dist/node_modules/tedious/lib/data-type.js +428 -0
  48. package/dist/node_modules/tedious/lib/data-types/bigint.d.ts +3 -0
  49. package/dist/node_modules/tedious/lib/data-types/bigint.js +53 -0
  50. package/dist/node_modules/tedious/lib/data-types/binary.d.ts +5 -0
  51. package/dist/node_modules/tedious/lib/data-types/binary.js +67 -0
  52. package/dist/node_modules/tedious/lib/data-types/bit.d.ts +3 -0
  53. package/dist/node_modules/tedious/lib/data-types/bit.js +46 -0
  54. package/dist/node_modules/tedious/lib/data-types/bitn.d.ts +3 -0
  55. package/dist/node_modules/tedious/lib/data-types/bitn.js +29 -0
  56. package/dist/node_modules/tedious/lib/data-types/char.d.ts +5 -0
  57. package/dist/node_modules/tedious/lib/data-types/char.js +86 -0
  58. package/dist/node_modules/tedious/lib/data-types/date.d.ts +3 -0
  59. package/dist/node_modules/tedious/lib/data-types/date.js +72 -0
  60. package/dist/node_modules/tedious/lib/data-types/datetime.d.ts +3 -0
  61. package/dist/node_modules/tedious/lib/data-types/datetime.js +93 -0
  62. package/dist/node_modules/tedious/lib/data-types/datetime2.d.ts +5 -0
  63. package/dist/node_modules/tedious/lib/data-types/datetime2.js +118 -0
  64. package/dist/node_modules/tedious/lib/data-types/datetimen.d.ts +3 -0
  65. package/dist/node_modules/tedious/lib/data-types/datetimen.js +29 -0
  66. package/dist/node_modules/tedious/lib/data-types/datetimeoffset.d.ts +5 -0
  67. package/dist/node_modules/tedious/lib/data-types/datetimeoffset.js +111 -0
  68. package/dist/node_modules/tedious/lib/data-types/decimal.d.ts +6 -0
  69. package/dist/node_modules/tedious/lib/data-types/decimal.js +107 -0
  70. package/dist/node_modules/tedious/lib/data-types/decimaln.d.ts +3 -0
  71. package/dist/node_modules/tedious/lib/data-types/decimaln.js +29 -0
  72. package/dist/node_modules/tedious/lib/data-types/float.d.ts +3 -0
  73. package/dist/node_modules/tedious/lib/data-types/float.js +47 -0
  74. package/dist/node_modules/tedious/lib/data-types/floatn.d.ts +3 -0
  75. package/dist/node_modules/tedious/lib/data-types/floatn.js +29 -0
  76. package/dist/node_modules/tedious/lib/data-types/image.d.ts +3 -0
  77. package/dist/node_modules/tedious/lib/data-types/image.js +56 -0
  78. package/dist/node_modules/tedious/lib/data-types/int.d.ts +3 -0
  79. package/dist/node_modules/tedious/lib/data-types/int.js +53 -0
  80. package/dist/node_modules/tedious/lib/data-types/intn.d.ts +3 -0
  81. package/dist/node_modules/tedious/lib/data-types/intn.js +29 -0
  82. package/dist/node_modules/tedious/lib/data-types/money.d.ts +3 -0
  83. package/dist/node_modules/tedious/lib/data-types/money.js +59 -0
  84. package/dist/node_modules/tedious/lib/data-types/moneyn.d.ts +3 -0
  85. package/dist/node_modules/tedious/lib/data-types/moneyn.js +29 -0
  86. package/dist/node_modules/tedious/lib/data-types/nchar.d.ts +5 -0
  87. package/dist/node_modules/tedious/lib/data-types/nchar.js +100 -0
  88. package/dist/node_modules/tedious/lib/data-types/ntext.d.ts +3 -0
  89. package/dist/node_modules/tedious/lib/data-types/ntext.js +60 -0
  90. package/dist/node_modules/tedious/lib/data-types/null.d.ts +3 -0
  91. package/dist/node_modules/tedious/lib/data-types/null.js +29 -0
  92. package/dist/node_modules/tedious/lib/data-types/numeric.d.ts +6 -0
  93. package/dist/node_modules/tedious/lib/data-types/numeric.js +106 -0
  94. package/dist/node_modules/tedious/lib/data-types/numericn.d.ts +3 -0
  95. package/dist/node_modules/tedious/lib/data-types/numericn.js +29 -0
  96. package/dist/node_modules/tedious/lib/data-types/nvarchar.d.ts +5 -0
  97. package/dist/node_modules/tedious/lib/data-types/nvarchar.js +133 -0
  98. package/dist/node_modules/tedious/lib/data-types/real.d.ts +3 -0
  99. package/dist/node_modules/tedious/lib/data-types/real.js +48 -0
  100. package/dist/node_modules/tedious/lib/data-types/smalldatetime.d.ts +3 -0
  101. package/dist/node_modules/tedious/lib/data-types/smalldatetime.js +83 -0
  102. package/dist/node_modules/tedious/lib/data-types/smallint.d.ts +3 -0
  103. package/dist/node_modules/tedious/lib/data-types/smallint.js +53 -0
  104. package/dist/node_modules/tedious/lib/data-types/smallmoney.d.ts +3 -0
  105. package/dist/node_modules/tedious/lib/data-types/smallmoney.js +51 -0
  106. package/dist/node_modules/tedious/lib/data-types/sql-variant.d.ts +3 -0
  107. package/dist/node_modules/tedious/lib/data-types/sql-variant.js +29 -0
  108. package/dist/node_modules/tedious/lib/data-types/text.d.ts +3 -0
  109. package/dist/node_modules/tedious/lib/data-types/text.js +69 -0
  110. package/dist/node_modules/tedious/lib/data-types/time.d.ts +3 -0
  111. package/dist/node_modules/tedious/lib/data-types/time.js +96 -0
  112. package/dist/node_modules/tedious/lib/data-types/tinyint.d.ts +3 -0
  113. package/dist/node_modules/tedious/lib/data-types/tinyint.js +53 -0
  114. package/dist/node_modules/tedious/lib/data-types/tvp.d.ts +3 -0
  115. package/dist/node_modules/tedious/lib/data-types/tvp.js +117 -0
  116. package/dist/node_modules/tedious/lib/data-types/udt.d.ts +3 -0
  117. package/dist/node_modules/tedious/lib/data-types/udt.js +29 -0
  118. package/dist/node_modules/tedious/lib/data-types/uniqueidentifier.d.ts +3 -0
  119. package/dist/node_modules/tedious/lib/data-types/uniqueidentifier.js +50 -0
  120. package/dist/node_modules/tedious/lib/data-types/varbinary.d.ts +5 -0
  121. package/dist/node_modules/tedious/lib/data-types/varbinary.js +119 -0
  122. package/dist/node_modules/tedious/lib/data-types/varchar.d.ts +5 -0
  123. package/dist/node_modules/tedious/lib/data-types/varchar.js +112 -0
  124. package/dist/node_modules/tedious/lib/data-types/xml.d.ts +3 -0
  125. package/dist/node_modules/tedious/lib/data-types/xml.js +29 -0
  126. package/dist/node_modules/tedious/lib/debug.d.ts +25 -0
  127. package/dist/node_modules/tedious/lib/debug.js +67 -0
  128. package/dist/node_modules/tedious/lib/errors/abort-error.d.ts +4 -0
  129. package/dist/node_modules/tedious/lib/errors/abort-error.js +15 -0
  130. package/dist/node_modules/tedious/lib/errors/timeout-error.d.ts +4 -0
  131. package/dist/node_modules/tedious/lib/errors/timeout-error.js +15 -0
  132. package/dist/node_modules/tedious/lib/errors.d.ts +17 -0
  133. package/dist/node_modules/tedious/lib/errors.js +23 -0
  134. package/dist/node_modules/tedious/lib/guid-parser.d.ts +3 -0
  135. package/dist/node_modules/tedious/lib/guid-parser.js +30 -0
  136. package/dist/node_modules/tedious/lib/incoming-message-stream.d.ts +19 -0
  137. package/dist/node_modules/tedious/lib/incoming-message-stream.js +97 -0
  138. package/dist/node_modules/tedious/lib/instance-lookup.d.ts +13 -0
  139. package/dist/node_modules/tedious/lib/instance-lookup.js +96 -0
  140. package/dist/node_modules/tedious/lib/library.d.ts +1 -0
  141. package/dist/node_modules/tedious/lib/library.js +8 -0
  142. package/dist/node_modules/tedious/lib/login7-payload.d.ts +51 -0
  143. package/dist/node_modules/tedious/lib/login7-payload.js +402 -0
  144. package/dist/node_modules/tedious/lib/message-io.d.ts +28 -0
  145. package/dist/node_modules/tedious/lib/message-io.js +153 -0
  146. package/dist/node_modules/tedious/lib/message.d.ts +11 -0
  147. package/dist/node_modules/tedious/lib/message.js +21 -0
  148. package/dist/node_modules/tedious/lib/metadata-parser.d.ts +48 -0
  149. package/dist/node_modules/tedious/lib/metadata-parser.js +380 -0
  150. package/dist/node_modules/tedious/lib/ntlm-payload.d.ts +23 -0
  151. package/dist/node_modules/tedious/lib/ntlm-payload.js +136 -0
  152. package/dist/node_modules/tedious/lib/ntlm.d.ts +4 -0
  153. package/dist/node_modules/tedious/lib/ntlm.js +72 -0
  154. package/dist/node_modules/tedious/lib/outgoing-message-stream.d.ts +15 -0
  155. package/dist/node_modules/tedious/lib/outgoing-message-stream.js +81 -0
  156. package/dist/node_modules/tedious/lib/packet.d.ts +33 -0
  157. package/dist/node_modules/tedious/lib/packet.js +191 -0
  158. package/dist/node_modules/tedious/lib/prelogin-payload.d.ts +61 -0
  159. package/dist/node_modules/tedious/lib/prelogin-payload.js +209 -0
  160. package/dist/node_modules/tedious/lib/request.d.ts +370 -0
  161. package/dist/node_modules/tedious/lib/request.js +387 -0
  162. package/dist/node_modules/tedious/lib/rpcrequest-payload.d.ts +16 -0
  163. package/dist/node_modules/tedious/lib/rpcrequest-payload.js +109 -0
  164. package/dist/node_modules/tedious/lib/sender.d.ts +5 -0
  165. package/dist/node_modules/tedious/lib/sender.js +83 -0
  166. package/dist/node_modules/tedious/lib/special-stored-procedure.d.ts +18 -0
  167. package/dist/node_modules/tedious/lib/special-stored-procedure.js +26 -0
  168. package/dist/node_modules/tedious/lib/sqlbatch-payload.d.ts +13 -0
  169. package/dist/node_modules/tedious/lib/sqlbatch-payload.js +34 -0
  170. package/dist/node_modules/tedious/lib/tds-versions.d.ts +6 -0
  171. package/dist/node_modules/tedious/lib/tds-versions.js +19 -0
  172. package/dist/node_modules/tedious/lib/tedious.d.ts +13 -0
  173. package/dist/node_modules/tedious/lib/tedious.js +249 -0
  174. package/dist/node_modules/tedious/lib/token/colmetadata-token-parser.d.ts +12 -0
  175. package/dist/node_modules/tedious/lib/token/colmetadata-token-parser.js +124 -0
  176. package/dist/node_modules/tedious/lib/token/done-token-parser.d.ts +6 -0
  177. package/dist/node_modules/tedious/lib/token/done-token-parser.js +76 -0
  178. package/dist/node_modules/tedious/lib/token/env-change-token-parser.d.ts +5 -0
  179. package/dist/node_modules/tedious/lib/token/env-change-token-parser.js +190 -0
  180. package/dist/node_modules/tedious/lib/token/feature-ext-ack-parser.d.ts +5 -0
  181. package/dist/node_modules/tedious/lib/token/feature-ext-ack-parser.js +52 -0
  182. package/dist/node_modules/tedious/lib/token/fedauth-info-parser.d.ts +5 -0
  183. package/dist/node_modules/tedious/lib/token/fedauth-info-parser.js +62 -0
  184. package/dist/node_modules/tedious/lib/token/handler.d.ts +135 -0
  185. package/dist/node_modules/tedious/lib/token/handler.js +444 -0
  186. package/dist/node_modules/tedious/lib/token/helpers.d.ts +28 -0
  187. package/dist/node_modules/tedious/lib/token/helpers.js +205 -0
  188. package/dist/node_modules/tedious/lib/token/infoerror-token-parser.d.ts +5 -0
  189. package/dist/node_modules/tedious/lib/token/infoerror-token-parser.js +80 -0
  190. package/dist/node_modules/tedious/lib/token/loginack-token-parser.d.ts +5 -0
  191. package/dist/node_modules/tedious/lib/token/loginack-token-parser.js +75 -0
  192. package/dist/node_modules/tedious/lib/token/nbcrow-token-parser.d.ts +4 -0
  193. package/dist/node_modules/tedious/lib/token/nbcrow-token-parser.js +104 -0
  194. package/dist/node_modules/tedious/lib/token/order-token-parser.d.ts +5 -0
  195. package/dist/node_modules/tedious/lib/token/order-token-parser.js +34 -0
  196. package/dist/node_modules/tedious/lib/token/returnstatus-token-parser.d.ts +5 -0
  197. package/dist/node_modules/tedious/lib/token/returnstatus-token-parser.js +21 -0
  198. package/dist/node_modules/tedious/lib/token/returnvalue-token-parser.d.ts +4 -0
  199. package/dist/node_modules/tedious/lib/token/returnvalue-token-parser.js +94 -0
  200. package/dist/node_modules/tedious/lib/token/row-token-parser.d.ts +4 -0
  201. package/dist/node_modules/tedious/lib/token/row-token-parser.js +77 -0
  202. package/dist/node_modules/tedious/lib/token/sspi-token-parser.d.ts +5 -0
  203. package/dist/node_modules/tedious/lib/token/sspi-token-parser.js +42 -0
  204. package/dist/node_modules/tedious/lib/token/stream-parser.d.ts +34 -0
  205. package/dist/node_modules/tedious/lib/token/stream-parser.js +341 -0
  206. package/dist/node_modules/tedious/lib/token/token-stream-parser.d.ts +15 -0
  207. package/dist/node_modules/tedious/lib/token/token-stream-parser.js +36 -0
  208. package/dist/node_modules/tedious/lib/token/token.d.ts +312 -0
  209. package/dist/node_modules/tedious/lib/token/token.js +328 -0
  210. package/dist/node_modules/tedious/lib/tracking-buffer/writable-tracking-buffer.d.ts +47 -0
  211. package/dist/node_modules/tedious/lib/tracking-buffer/writable-tracking-buffer.js +249 -0
  212. package/dist/node_modules/tedious/lib/transaction.d.ts +39 -0
  213. package/dist/node_modules/tedious/lib/transaction.js +137 -0
  214. package/dist/node_modules/tedious/lib/transient-error-lookup.d.ts +3 -0
  215. package/dist/node_modules/tedious/lib/transient-error-lookup.js +19 -0
  216. package/dist/node_modules/tedious/lib/utils/with-timeout.d.ts +7 -0
  217. package/dist/node_modules/tedious/lib/utils/with-timeout.js +36 -0
  218. package/dist/node_modules/tedious/lib/value-parser.d.ts +7 -0
  219. package/dist/node_modules/tedious/lib/value-parser.js +813 -0
  220. package/dist/node_modules/tedious/node_modules/@types/node/assert/strict.d.ts +105 -0
  221. package/dist/node_modules/tedious/node_modules/@types/node/assert.d.ts +955 -0
  222. package/dist/node_modules/tedious/node_modules/@types/node/async_hooks.d.ts +623 -0
  223. package/dist/node_modules/tedious/node_modules/@types/node/buffer.buffer.d.ts +466 -0
  224. package/dist/node_modules/tedious/node_modules/@types/node/buffer.d.ts +1810 -0
  225. package/dist/node_modules/tedious/node_modules/@types/node/child_process.d.ts +1428 -0
  226. package/dist/node_modules/tedious/node_modules/@types/node/cluster.d.ts +486 -0
  227. package/dist/node_modules/tedious/node_modules/@types/node/compatibility/iterators.d.ts +21 -0
  228. package/dist/node_modules/tedious/node_modules/@types/node/console.d.ts +151 -0
  229. package/dist/node_modules/tedious/node_modules/@types/node/constants.d.ts +20 -0
  230. package/dist/node_modules/tedious/node_modules/@types/node/crypto.d.ts +4065 -0
  231. package/dist/node_modules/tedious/node_modules/@types/node/dgram.d.ts +564 -0
  232. package/dist/node_modules/tedious/node_modules/@types/node/diagnostics_channel.d.ts +576 -0
  233. package/dist/node_modules/tedious/node_modules/@types/node/dns/promises.d.ts +503 -0
  234. package/dist/node_modules/tedious/node_modules/@types/node/dns.d.ts +922 -0
  235. package/dist/node_modules/tedious/node_modules/@types/node/domain.d.ts +166 -0
  236. package/dist/node_modules/tedious/node_modules/@types/node/events.d.ts +1054 -0
  237. package/dist/node_modules/tedious/node_modules/@types/node/fs/promises.d.ts +1329 -0
  238. package/dist/node_modules/tedious/node_modules/@types/node/fs.d.ts +4676 -0
  239. package/dist/node_modules/tedious/node_modules/@types/node/globals.d.ts +150 -0
  240. package/dist/node_modules/tedious/node_modules/@types/node/globals.typedarray.d.ts +101 -0
  241. package/dist/node_modules/tedious/node_modules/@types/node/http.d.ts +2167 -0
  242. package/dist/node_modules/tedious/node_modules/@types/node/http2.d.ts +2480 -0
  243. package/dist/node_modules/tedious/node_modules/@types/node/https.d.ts +405 -0
  244. package/dist/node_modules/tedious/node_modules/@types/node/index.d.ts +115 -0
  245. package/dist/node_modules/tedious/node_modules/@types/node/inspector/promises.d.ts +41 -0
  246. package/dist/node_modules/tedious/node_modules/@types/node/inspector.d.ts +224 -0
  247. package/dist/node_modules/tedious/node_modules/@types/node/inspector.generated.d.ts +4226 -0
  248. package/dist/node_modules/tedious/node_modules/@types/node/module.d.ts +819 -0
  249. package/dist/node_modules/tedious/node_modules/@types/node/net.d.ts +933 -0
  250. package/dist/node_modules/tedious/node_modules/@types/node/os.d.ts +507 -0
  251. package/dist/node_modules/tedious/node_modules/@types/node/package.json +155 -0
  252. package/dist/node_modules/tedious/node_modules/@types/node/path/posix.d.ts +8 -0
  253. package/dist/node_modules/tedious/node_modules/@types/node/path/win32.d.ts +8 -0
  254. package/dist/node_modules/tedious/node_modules/@types/node/path.d.ts +187 -0
  255. package/dist/node_modules/tedious/node_modules/@types/node/perf_hooks.d.ts +643 -0
  256. package/dist/node_modules/tedious/node_modules/@types/node/process.d.ts +2161 -0
  257. package/dist/node_modules/tedious/node_modules/@types/node/punycode.d.ts +117 -0
  258. package/dist/node_modules/tedious/node_modules/@types/node/querystring.d.ts +152 -0
  259. package/dist/node_modules/tedious/node_modules/@types/node/quic.d.ts +910 -0
  260. package/dist/node_modules/tedious/node_modules/@types/node/readline/promises.d.ts +161 -0
  261. package/dist/node_modules/tedious/node_modules/@types/node/readline.d.ts +541 -0
  262. package/dist/node_modules/tedious/node_modules/@types/node/repl.d.ts +415 -0
  263. package/dist/node_modules/tedious/node_modules/@types/node/sea.d.ts +162 -0
  264. package/dist/node_modules/tedious/node_modules/@types/node/sqlite.d.ts +955 -0
  265. package/dist/node_modules/tedious/node_modules/@types/node/stream/consumers.d.ts +38 -0
  266. package/dist/node_modules/tedious/node_modules/@types/node/stream/promises.d.ts +211 -0
  267. package/dist/node_modules/tedious/node_modules/@types/node/stream/web.d.ts +296 -0
  268. package/dist/node_modules/tedious/node_modules/@types/node/stream.d.ts +1760 -0
  269. package/dist/node_modules/tedious/node_modules/@types/node/string_decoder.d.ts +67 -0
  270. package/dist/node_modules/tedious/node_modules/@types/node/test/reporters.d.ts +96 -0
  271. package/dist/node_modules/tedious/node_modules/@types/node/test.d.ts +2240 -0
  272. package/dist/node_modules/tedious/node_modules/@types/node/timers/promises.d.ts +108 -0
  273. package/dist/node_modules/tedious/node_modules/@types/node/timers.d.ts +159 -0
  274. package/dist/node_modules/tedious/node_modules/@types/node/tls.d.ts +1198 -0
  275. package/dist/node_modules/tedious/node_modules/@types/node/trace_events.d.ts +197 -0
  276. package/dist/node_modules/tedious/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +462 -0
  277. package/dist/node_modules/tedious/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts +71 -0
  278. package/dist/node_modules/tedious/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +36 -0
  279. package/dist/node_modules/tedious/node_modules/@types/node/ts5.6/index.d.ts +117 -0
  280. package/dist/node_modules/tedious/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts +72 -0
  281. package/dist/node_modules/tedious/node_modules/@types/node/ts5.7/index.d.ts +117 -0
  282. package/dist/node_modules/tedious/node_modules/@types/node/tty.d.ts +250 -0
  283. package/dist/node_modules/tedious/node_modules/@types/node/url.d.ts +519 -0
  284. package/dist/node_modules/tedious/node_modules/@types/node/util/types.d.ts +558 -0
  285. package/dist/node_modules/tedious/node_modules/@types/node/util.d.ts +1662 -0
  286. package/dist/node_modules/tedious/node_modules/@types/node/v8.d.ts +983 -0
  287. package/dist/node_modules/tedious/node_modules/@types/node/vm.d.ts +1208 -0
  288. package/dist/node_modules/tedious/node_modules/@types/node/wasi.d.ts +202 -0
  289. package/dist/node_modules/tedious/node_modules/@types/node/web-globals/abortcontroller.d.ts +59 -0
  290. package/dist/node_modules/tedious/node_modules/@types/node/web-globals/blob.d.ts +23 -0
  291. package/dist/node_modules/tedious/node_modules/@types/node/web-globals/console.d.ts +9 -0
  292. package/dist/node_modules/tedious/node_modules/@types/node/web-globals/crypto.d.ts +39 -0
  293. package/dist/node_modules/tedious/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
  294. package/dist/node_modules/tedious/node_modules/@types/node/web-globals/encoding.d.ts +11 -0
  295. package/dist/node_modules/tedious/node_modules/@types/node/web-globals/events.d.ts +106 -0
  296. package/dist/node_modules/tedious/node_modules/@types/node/web-globals/fetch.d.ts +69 -0
  297. package/dist/node_modules/tedious/node_modules/@types/node/web-globals/importmeta.d.ts +13 -0
  298. package/dist/node_modules/tedious/node_modules/@types/node/web-globals/messaging.d.ts +23 -0
  299. package/dist/node_modules/tedious/node_modules/@types/node/web-globals/navigator.d.ts +25 -0
  300. package/dist/node_modules/tedious/node_modules/@types/node/web-globals/performance.d.ts +45 -0
  301. package/dist/node_modules/tedious/node_modules/@types/node/web-globals/storage.d.ts +24 -0
  302. package/dist/node_modules/tedious/node_modules/@types/node/web-globals/streams.d.ts +115 -0
  303. package/dist/node_modules/tedious/node_modules/@types/node/web-globals/timers.d.ts +44 -0
  304. package/dist/node_modules/tedious/node_modules/@types/node/web-globals/url.d.ts +24 -0
  305. package/dist/node_modules/tedious/node_modules/@types/node/worker_threads.d.ts +717 -0
  306. package/dist/node_modules/tedious/node_modules/@types/node/zlib.d.ts +618 -0
  307. package/dist/node_modules/tedious/node_modules/bl/.github/dependabot.yml +16 -0
  308. package/dist/node_modules/tedious/node_modules/bl/.github/workflows/test-and-release.yml +61 -0
  309. package/dist/node_modules/tedious/node_modules/bl/BufferList.d.ts +431 -0
  310. package/dist/node_modules/tedious/node_modules/bl/BufferList.js +421 -0
  311. package/dist/node_modules/tedious/node_modules/bl/bl.js +84 -0
  312. package/dist/node_modules/tedious/node_modules/bl/index.d.ts +88 -0
  313. package/dist/node_modules/tedious/node_modules/bl/package.json +123 -0
  314. package/dist/node_modules/tedious/node_modules/bl/test/convert.js +21 -0
  315. package/dist/node_modules/tedious/node_modules/bl/test/indexOf.js +492 -0
  316. package/dist/node_modules/tedious/node_modules/bl/test/isBufferList.js +32 -0
  317. package/dist/node_modules/tedious/node_modules/bl/test/test.js +1032 -0
  318. package/dist/node_modules/tedious/node_modules/buffer/index.d.ts +194 -0
  319. package/dist/node_modules/tedious/node_modules/buffer/index.js +2106 -0
  320. package/dist/node_modules/tedious/node_modules/buffer/package.json +93 -0
  321. package/dist/node_modules/tedious/node_modules/readable-stream/lib/_stream_duplex.js +4 -0
  322. package/dist/node_modules/tedious/node_modules/readable-stream/lib/_stream_passthrough.js +4 -0
  323. package/dist/node_modules/tedious/node_modules/readable-stream/lib/_stream_readable.js +4 -0
  324. package/dist/node_modules/tedious/node_modules/readable-stream/lib/_stream_transform.js +4 -0
  325. package/dist/node_modules/tedious/node_modules/readable-stream/lib/_stream_writable.js +4 -0
  326. package/dist/node_modules/tedious/node_modules/readable-stream/lib/internal/streams/add-abort-signal.js +52 -0
  327. package/dist/node_modules/tedious/node_modules/readable-stream/lib/internal/streams/buffer_list.js +157 -0
  328. package/dist/node_modules/tedious/node_modules/readable-stream/lib/internal/streams/compose.js +194 -0
  329. package/dist/node_modules/tedious/node_modules/readable-stream/lib/internal/streams/destroy.js +290 -0
  330. package/dist/node_modules/tedious/node_modules/readable-stream/lib/internal/streams/duplex.js +143 -0
  331. package/dist/node_modules/tedious/node_modules/readable-stream/lib/internal/streams/duplexify.js +378 -0
  332. package/dist/node_modules/tedious/node_modules/readable-stream/lib/internal/streams/end-of-stream.js +286 -0
  333. package/dist/node_modules/tedious/node_modules/readable-stream/lib/internal/streams/from.js +98 -0
  334. package/dist/node_modules/tedious/node_modules/readable-stream/lib/internal/streams/lazy_transform.js +51 -0
  335. package/dist/node_modules/tedious/node_modules/readable-stream/lib/internal/streams/legacy.js +89 -0
  336. package/dist/node_modules/tedious/node_modules/readable-stream/lib/internal/streams/operators.js +457 -0
  337. package/dist/node_modules/tedious/node_modules/readable-stream/lib/internal/streams/passthrough.js +39 -0
  338. package/dist/node_modules/tedious/node_modules/readable-stream/lib/internal/streams/pipeline.js +471 -0
  339. package/dist/node_modules/tedious/node_modules/readable-stream/lib/internal/streams/readable.js +1290 -0
  340. package/dist/node_modules/tedious/node_modules/readable-stream/lib/internal/streams/state.js +39 -0
  341. package/dist/node_modules/tedious/node_modules/readable-stream/lib/internal/streams/transform.js +180 -0
  342. package/dist/node_modules/tedious/node_modules/readable-stream/lib/internal/streams/utils.js +327 -0
  343. package/dist/node_modules/tedious/node_modules/readable-stream/lib/internal/streams/writable.js +819 -0
  344. package/dist/node_modules/tedious/node_modules/readable-stream/lib/internal/validators.js +530 -0
  345. package/dist/node_modules/tedious/node_modules/readable-stream/lib/ours/browser.js +35 -0
  346. package/dist/node_modules/tedious/node_modules/readable-stream/lib/ours/errors.js +343 -0
  347. package/dist/node_modules/tedious/node_modules/readable-stream/lib/ours/index.js +65 -0
  348. package/dist/node_modules/tedious/node_modules/readable-stream/lib/ours/primordials.js +124 -0
  349. package/dist/node_modules/tedious/node_modules/readable-stream/lib/ours/util/inspect.js +55 -0
  350. package/dist/node_modules/tedious/node_modules/readable-stream/lib/ours/util.js +148 -0
  351. package/dist/node_modules/tedious/node_modules/readable-stream/lib/stream/promises.js +43 -0
  352. package/dist/node_modules/tedious/node_modules/readable-stream/lib/stream.js +143 -0
  353. package/dist/node_modules/tedious/node_modules/readable-stream/package.json +88 -0
  354. package/dist/node_modules/tedious/node_modules/sprintf-js/dist/.gitattributes +4 -0
  355. package/dist/node_modules/tedious/node_modules/sprintf-js/dist/angular-sprintf.min.js +3 -0
  356. package/dist/node_modules/tedious/node_modules/sprintf-js/dist/sprintf.min.js +3 -0
  357. package/dist/node_modules/tedious/node_modules/sprintf-js/package.json +35 -0
  358. package/dist/node_modules/tedious/node_modules/sprintf-js/src/angular-sprintf.js +24 -0
  359. package/dist/node_modules/tedious/node_modules/sprintf-js/src/sprintf.js +231 -0
  360. package/dist/node_modules/tedious/node_modules/undici-types/agent.d.ts +32 -0
  361. package/dist/node_modules/tedious/node_modules/undici-types/api.d.ts +43 -0
  362. package/dist/node_modules/tedious/node_modules/undici-types/balanced-pool.d.ts +29 -0
  363. package/dist/node_modules/tedious/node_modules/undici-types/cache-interceptor.d.ts +172 -0
  364. package/dist/node_modules/tedious/node_modules/undici-types/cache.d.ts +36 -0
  365. package/dist/node_modules/tedious/node_modules/undici-types/client-stats.d.ts +15 -0
  366. package/dist/node_modules/tedious/node_modules/undici-types/client.d.ts +108 -0
  367. package/dist/node_modules/tedious/node_modules/undici-types/connector.d.ts +34 -0
  368. package/dist/node_modules/tedious/node_modules/undici-types/content-type.d.ts +21 -0
  369. package/dist/node_modules/tedious/node_modules/undici-types/cookies.d.ts +30 -0
  370. package/dist/node_modules/tedious/node_modules/undici-types/diagnostics-channel.d.ts +74 -0
  371. package/dist/node_modules/tedious/node_modules/undici-types/dispatcher.d.ts +276 -0
  372. package/dist/node_modules/tedious/node_modules/undici-types/env-http-proxy-agent.d.ts +22 -0
  373. package/dist/node_modules/tedious/node_modules/undici-types/errors.d.ts +161 -0
  374. package/dist/node_modules/tedious/node_modules/undici-types/eventsource.d.ts +66 -0
  375. package/dist/node_modules/tedious/node_modules/undici-types/fetch.d.ts +211 -0
  376. package/dist/node_modules/tedious/node_modules/undici-types/formdata.d.ts +108 -0
  377. package/dist/node_modules/tedious/node_modules/undici-types/global-dispatcher.d.ts +9 -0
  378. package/dist/node_modules/tedious/node_modules/undici-types/global-origin.d.ts +7 -0
  379. package/dist/node_modules/tedious/node_modules/undici-types/h2c-client.d.ts +73 -0
  380. package/dist/node_modules/tedious/node_modules/undici-types/handlers.d.ts +15 -0
  381. package/dist/node_modules/tedious/node_modules/undici-types/header.d.ts +160 -0
  382. package/dist/node_modules/tedious/node_modules/undici-types/index.d.ts +80 -0
  383. package/dist/node_modules/tedious/node_modules/undici-types/interceptors.d.ts +39 -0
  384. package/dist/node_modules/tedious/node_modules/undici-types/mock-agent.d.ts +68 -0
  385. package/dist/node_modules/tedious/node_modules/undici-types/mock-call-history.d.ts +111 -0
  386. package/dist/node_modules/tedious/node_modules/undici-types/mock-client.d.ts +27 -0
  387. package/dist/node_modules/tedious/node_modules/undici-types/mock-errors.d.ts +12 -0
  388. package/dist/node_modules/tedious/node_modules/undici-types/mock-interceptor.d.ts +94 -0
  389. package/dist/node_modules/tedious/node_modules/undici-types/mock-pool.d.ts +27 -0
  390. package/dist/node_modules/tedious/node_modules/undici-types/package.json +55 -0
  391. package/dist/node_modules/tedious/node_modules/undici-types/patch.d.ts +29 -0
  392. package/dist/node_modules/tedious/node_modules/undici-types/pool-stats.d.ts +19 -0
  393. package/dist/node_modules/tedious/node_modules/undici-types/pool.d.ts +41 -0
  394. package/dist/node_modules/tedious/node_modules/undici-types/proxy-agent.d.ts +29 -0
  395. package/dist/node_modules/tedious/node_modules/undici-types/readable.d.ts +68 -0
  396. package/dist/node_modules/tedious/node_modules/undici-types/retry-agent.d.ts +8 -0
  397. package/dist/node_modules/tedious/node_modules/undici-types/retry-handler.d.ts +125 -0
  398. package/dist/node_modules/tedious/node_modules/undici-types/snapshot-agent.d.ts +109 -0
  399. package/dist/node_modules/tedious/node_modules/undici-types/util.d.ts +18 -0
  400. package/dist/node_modules/tedious/node_modules/undici-types/utility.d.ts +7 -0
  401. package/dist/node_modules/tedious/node_modules/undici-types/webidl.d.ts +341 -0
  402. package/dist/node_modules/tedious/node_modules/undici-types/websocket.d.ts +186 -0
  403. package/dist/node_modules/tedious/package.json +1 -0
  404. package/dist/node_modules/tedious/tsconfig.build-types.json +15 -0
  405. package/dist/node_modules/tedious/tsconfig.json +29 -0
  406. package/dist/node_modules/tedious/types/js-md4.d.ts +7 -0
  407. package/dist/node_modules/tedious/types/native-duplexpair.d.ts +12 -0
  408. package/dist/server/data-source/MssqlExternalDataSource.js +23 -2
  409. package/package.json +1 -1
@@ -0,0 +1,402 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _sprintfJs = require("sprintf-js");
8
+ var _tdsVersions = require("./tds-versions");
9
+ const FLAGS_1 = {
10
+ ENDIAN_LITTLE: 0x00,
11
+ ENDIAN_BIG: 0x01,
12
+ CHARSET_ASCII: 0x00,
13
+ CHARSET_EBCDIC: 0x02,
14
+ FLOAT_IEEE_754: 0x00,
15
+ FLOAT_VAX: 0x04,
16
+ FLOAT_ND5000: 0x08,
17
+ BCP_DUMPLOAD_ON: 0x00,
18
+ BCP_DUMPLOAD_OFF: 0x10,
19
+ USE_DB_ON: 0x00,
20
+ USE_DB_OFF: 0x20,
21
+ INIT_DB_WARN: 0x00,
22
+ INIT_DB_FATAL: 0x40,
23
+ SET_LANG_WARN_OFF: 0x00,
24
+ SET_LANG_WARN_ON: 0x80
25
+ };
26
+ const FLAGS_2 = {
27
+ INIT_LANG_WARN: 0x00,
28
+ INIT_LANG_FATAL: 0x01,
29
+ ODBC_OFF: 0x00,
30
+ ODBC_ON: 0x02,
31
+ F_TRAN_BOUNDARY: 0x04,
32
+ F_CACHE_CONNECT: 0x08,
33
+ USER_NORMAL: 0x00,
34
+ USER_SERVER: 0x10,
35
+ USER_REMUSER: 0x20,
36
+ USER_SQLREPL: 0x40,
37
+ INTEGRATED_SECURITY_OFF: 0x00,
38
+ INTEGRATED_SECURITY_ON: 0x80
39
+ };
40
+ const TYPE_FLAGS = {
41
+ SQL_DFLT: 0x00,
42
+ SQL_TSQL: 0x08,
43
+ OLEDB_OFF: 0x00,
44
+ OLEDB_ON: 0x10,
45
+ READ_WRITE_INTENT: 0x00,
46
+ READ_ONLY_INTENT: 0x20
47
+ };
48
+ const FLAGS_3 = {
49
+ CHANGE_PASSWORD_NO: 0x00,
50
+ CHANGE_PASSWORD_YES: 0x01,
51
+ BINARY_XML: 0x02,
52
+ SPAWN_USER_INSTANCE: 0x04,
53
+ UNKNOWN_COLLATION_HANDLING: 0x08,
54
+ EXTENSION_USED: 0x10
55
+ };
56
+ const FEDAUTH_OPTIONS = {
57
+ FEATURE_ID: 0x02,
58
+ LIBRARY_SECURITYTOKEN: 0x01,
59
+ LIBRARY_ADAL: 0x02,
60
+ FEDAUTH_YES_ECHO: 0x01,
61
+ FEDAUTH_NO_ECHO: 0x00,
62
+ ADAL_WORKFLOW_USER_PASS: 0x01,
63
+ ADAL_WORKFLOW_INTEGRATED: 0x02
64
+ };
65
+ const FEATURE_EXT_TERMINATOR = 0xFF;
66
+ /*
67
+ s2.2.6.3
68
+ */
69
+ class Login7Payload {
70
+ constructor({
71
+ tdsVersion,
72
+ packetSize,
73
+ clientProgVer,
74
+ clientPid,
75
+ connectionId,
76
+ clientTimeZone,
77
+ clientLcid
78
+ }) {
79
+ this.tdsVersion = tdsVersion;
80
+ this.packetSize = packetSize;
81
+ this.clientProgVer = clientProgVer;
82
+ this.clientPid = clientPid;
83
+ this.connectionId = connectionId;
84
+ this.clientTimeZone = clientTimeZone;
85
+ this.clientLcid = clientLcid;
86
+ this.readOnlyIntent = false;
87
+ this.initDbFatal = false;
88
+ this.fedAuth = undefined;
89
+ this.userName = undefined;
90
+ this.password = undefined;
91
+ this.serverName = undefined;
92
+ this.appName = undefined;
93
+ this.hostname = undefined;
94
+ this.libraryName = undefined;
95
+ this.language = undefined;
96
+ this.database = undefined;
97
+ this.clientId = undefined;
98
+ this.sspi = undefined;
99
+ this.attachDbFile = undefined;
100
+ this.changePassword = undefined;
101
+ }
102
+ toBuffer() {
103
+ const fixedData = Buffer.alloc(94);
104
+ const buffers = [fixedData];
105
+ let offset = 0;
106
+ let dataOffset = fixedData.length;
107
+
108
+ // Length: 4-byte
109
+ offset = fixedData.writeUInt32LE(0, offset);
110
+
111
+ // TDSVersion: 4-byte
112
+ offset = fixedData.writeUInt32LE(this.tdsVersion, offset);
113
+
114
+ // PacketSize: 4-byte
115
+ offset = fixedData.writeUInt32LE(this.packetSize, offset);
116
+
117
+ // ClientProgVer: 4-byte
118
+ offset = fixedData.writeUInt32LE(this.clientProgVer, offset);
119
+
120
+ // ClientPID: 4-byte
121
+ offset = fixedData.writeUInt32LE(this.clientPid, offset);
122
+
123
+ // ConnectionID: 4-byte
124
+ offset = fixedData.writeUInt32LE(this.connectionId, offset);
125
+
126
+ // OptionFlags1: 1-byte
127
+ offset = fixedData.writeUInt8(this.buildOptionFlags1(), offset);
128
+
129
+ // OptionFlags2: 1-byte
130
+ offset = fixedData.writeUInt8(this.buildOptionFlags2(), offset);
131
+
132
+ // TypeFlags: 1-byte
133
+ offset = fixedData.writeUInt8(this.buildTypeFlags(), offset);
134
+
135
+ // OptionFlags3: 1-byte
136
+ offset = fixedData.writeUInt8(this.buildOptionFlags3(), offset);
137
+
138
+ // ClientTimZone: 4-byte
139
+ offset = fixedData.writeInt32LE(this.clientTimeZone, offset);
140
+
141
+ // ClientLCID: 4-byte
142
+ offset = fixedData.writeUInt32LE(this.clientLcid, offset);
143
+
144
+ // ibHostName: 2-byte
145
+ offset = fixedData.writeUInt16LE(dataOffset, offset);
146
+
147
+ // cchHostName: 2-byte
148
+ if (this.hostname) {
149
+ const buffer = Buffer.from(this.hostname, 'ucs2');
150
+ offset = fixedData.writeUInt16LE(buffer.length / 2, offset);
151
+ dataOffset += buffer.length;
152
+ buffers.push(buffer);
153
+ } else {
154
+ offset = fixedData.writeUInt16LE(dataOffset, offset);
155
+ }
156
+
157
+ // ibUserName: 2-byte
158
+ offset = fixedData.writeUInt16LE(dataOffset, offset);
159
+
160
+ // cchUserName: 2-byte
161
+ if (this.userName) {
162
+ const buffer = Buffer.from(this.userName, 'ucs2');
163
+ offset = fixedData.writeUInt16LE(buffer.length / 2, offset);
164
+ dataOffset += buffer.length;
165
+ buffers.push(buffer);
166
+ } else {
167
+ offset = fixedData.writeUInt16LE(0, offset);
168
+ }
169
+
170
+ // ibPassword: 2-byte
171
+ offset = fixedData.writeUInt16LE(dataOffset, offset);
172
+
173
+ // cchPassword: 2-byte
174
+ if (this.password) {
175
+ const buffer = Buffer.from(this.password, 'ucs2');
176
+ offset = fixedData.writeUInt16LE(buffer.length / 2, offset);
177
+ dataOffset += buffer.length;
178
+ buffers.push(this.scramblePassword(buffer));
179
+ } else {
180
+ offset = fixedData.writeUInt16LE(0, offset);
181
+ }
182
+
183
+ // ibAppName: 2-byte
184
+ offset = fixedData.writeUInt16LE(dataOffset, offset);
185
+
186
+ // cchAppName: 2-byte
187
+ if (this.appName) {
188
+ const buffer = Buffer.from(this.appName, 'ucs2');
189
+ offset = fixedData.writeUInt16LE(buffer.length / 2, offset);
190
+ dataOffset += buffer.length;
191
+ buffers.push(buffer);
192
+ } else {
193
+ offset = fixedData.writeUInt16LE(0, offset);
194
+ }
195
+
196
+ // ibServerName: 2-byte
197
+ offset = fixedData.writeUInt16LE(dataOffset, offset);
198
+
199
+ // cchServerName: 2-byte
200
+ if (this.serverName) {
201
+ const buffer = Buffer.from(this.serverName, 'ucs2');
202
+ offset = fixedData.writeUInt16LE(buffer.length / 2, offset);
203
+ dataOffset += buffer.length;
204
+ buffers.push(buffer);
205
+ } else {
206
+ offset = fixedData.writeUInt16LE(0, offset);
207
+ }
208
+
209
+ // (ibUnused / ibExtension): 2-byte
210
+ offset = fixedData.writeUInt16LE(dataOffset, offset);
211
+
212
+ // (cchUnused / cbExtension): 2-byte
213
+ const extensions = this.buildFeatureExt();
214
+ offset = fixedData.writeUInt16LE(4, offset);
215
+ const extensionOffset = Buffer.alloc(4);
216
+ extensionOffset.writeUInt32LE(dataOffset += 4, 0);
217
+ dataOffset += extensions.length;
218
+ buffers.push(extensionOffset, extensions);
219
+
220
+ // ibCltIntName: 2-byte
221
+ offset = fixedData.writeUInt16LE(dataOffset, offset);
222
+
223
+ // cchCltIntName: 2-byte
224
+ if (this.libraryName) {
225
+ const buffer = Buffer.from(this.libraryName, 'ucs2');
226
+ offset = fixedData.writeUInt16LE(buffer.length / 2, offset);
227
+ dataOffset += buffer.length;
228
+ buffers.push(buffer);
229
+ } else {
230
+ offset = fixedData.writeUInt16LE(0, offset);
231
+ }
232
+
233
+ // ibLanguage: 2-byte
234
+ offset = fixedData.writeUInt16LE(dataOffset, offset);
235
+
236
+ // cchLanguage: 2-byte
237
+ if (this.language) {
238
+ const buffer = Buffer.from(this.language, 'ucs2');
239
+ offset = fixedData.writeUInt16LE(buffer.length / 2, offset);
240
+ dataOffset += buffer.length;
241
+ buffers.push(buffer);
242
+ } else {
243
+ offset = fixedData.writeUInt16LE(0, offset);
244
+ }
245
+
246
+ // ibDatabase: 2-byte
247
+ offset = fixedData.writeUInt16LE(dataOffset, offset);
248
+
249
+ // cchDatabase: 2-byte
250
+ if (this.database) {
251
+ const buffer = Buffer.from(this.database, 'ucs2');
252
+ offset = fixedData.writeUInt16LE(buffer.length / 2, offset);
253
+ dataOffset += buffer.length;
254
+ buffers.push(buffer);
255
+ } else {
256
+ offset = fixedData.writeUInt16LE(0, offset);
257
+ }
258
+
259
+ // ClientID: 6-byte
260
+ if (this.clientId) {
261
+ this.clientId.copy(fixedData, offset, 0, 6);
262
+ }
263
+ offset += 6;
264
+
265
+ // ibSSPI: 2-byte
266
+ offset = fixedData.writeUInt16LE(dataOffset, offset);
267
+
268
+ // cbSSPI: 2-byte
269
+ if (this.sspi) {
270
+ if (this.sspi.length > 65535) {
271
+ offset = fixedData.writeUInt16LE(65535, offset);
272
+ } else {
273
+ offset = fixedData.writeUInt16LE(this.sspi.length, offset);
274
+ }
275
+ buffers.push(this.sspi);
276
+ } else {
277
+ offset = fixedData.writeUInt16LE(0, offset);
278
+ }
279
+
280
+ // ibAtchDBFile: 2-byte
281
+ offset = fixedData.writeUInt16LE(dataOffset, offset);
282
+
283
+ // cchAtchDBFile: 2-byte
284
+ if (this.attachDbFile) {
285
+ const buffer = Buffer.from(this.attachDbFile, 'ucs2');
286
+ offset = fixedData.writeUInt16LE(buffer.length / 2, offset);
287
+ dataOffset += buffer.length;
288
+ buffers.push(buffer);
289
+ } else {
290
+ offset = fixedData.writeUInt16LE(0, offset);
291
+ }
292
+
293
+ // ibChangePassword: 2-byte
294
+ offset = fixedData.writeUInt16LE(dataOffset, offset);
295
+
296
+ // cchChangePassword: 2-byte
297
+ if (this.changePassword) {
298
+ const buffer = Buffer.from(this.changePassword, 'ucs2');
299
+ offset = fixedData.writeUInt16LE(buffer.length / 2, offset);
300
+ dataOffset += buffer.length;
301
+ buffers.push(buffer);
302
+ } else {
303
+ offset = fixedData.writeUInt16LE(0, offset);
304
+ }
305
+
306
+ // cbSSPILong: 4-byte
307
+ if (this.sspi && this.sspi.length > 65535) {
308
+ fixedData.writeUInt32LE(this.sspi.length, offset);
309
+ } else {
310
+ fixedData.writeUInt32LE(0, offset);
311
+ }
312
+ const data = Buffer.concat(buffers);
313
+ data.writeUInt32LE(data.length, 0);
314
+ return data;
315
+ }
316
+ buildOptionFlags1() {
317
+ let flags1 = FLAGS_1.ENDIAN_LITTLE | FLAGS_1.CHARSET_ASCII | FLAGS_1.FLOAT_IEEE_754 | FLAGS_1.BCP_DUMPLOAD_OFF | FLAGS_1.USE_DB_OFF | FLAGS_1.SET_LANG_WARN_ON;
318
+ if (this.initDbFatal) {
319
+ flags1 |= FLAGS_1.INIT_DB_FATAL;
320
+ } else {
321
+ flags1 |= FLAGS_1.INIT_DB_WARN;
322
+ }
323
+ return flags1;
324
+ }
325
+ buildFeatureExt() {
326
+ const buffers = [];
327
+ const fedAuth = this.fedAuth;
328
+ if (fedAuth) {
329
+ switch (fedAuth.type) {
330
+ case 'ADAL':
331
+ const buffer = Buffer.alloc(7);
332
+ buffer.writeUInt8(FEDAUTH_OPTIONS.FEATURE_ID, 0);
333
+ buffer.writeUInt32LE(2, 1);
334
+ buffer.writeUInt8(FEDAUTH_OPTIONS.LIBRARY_ADAL << 1 | (fedAuth.echo ? FEDAUTH_OPTIONS.FEDAUTH_YES_ECHO : FEDAUTH_OPTIONS.FEDAUTH_NO_ECHO), 5);
335
+ buffer.writeUInt8(fedAuth.workflow === 'integrated' ? 0x02 : FEDAUTH_OPTIONS.ADAL_WORKFLOW_USER_PASS, 6);
336
+ buffers.push(buffer);
337
+ break;
338
+ case 'SECURITYTOKEN':
339
+ const token = Buffer.from(fedAuth.fedAuthToken, 'ucs2');
340
+ const buf = Buffer.alloc(10);
341
+ let offset = 0;
342
+ offset = buf.writeUInt8(FEDAUTH_OPTIONS.FEATURE_ID, offset);
343
+ offset = buf.writeUInt32LE(token.length + 4 + 1, offset);
344
+ offset = buf.writeUInt8(FEDAUTH_OPTIONS.LIBRARY_SECURITYTOKEN << 1 | (fedAuth.echo ? FEDAUTH_OPTIONS.FEDAUTH_YES_ECHO : FEDAUTH_OPTIONS.FEDAUTH_NO_ECHO), offset);
345
+ buf.writeInt32LE(token.length, offset);
346
+ buffers.push(buf);
347
+ buffers.push(token);
348
+ break;
349
+ }
350
+ }
351
+ if (this.tdsVersion >= _tdsVersions.versions['7_4']) {
352
+ // Signal UTF-8 support: Value 0x0A, bit 0 must be set to 1. Added in TDS 7.4.
353
+ const UTF8_SUPPORT_FEATURE_ID = 0x0a;
354
+ const UTF8_SUPPORT_CLIENT_SUPPORTS_UTF8 = 0x01;
355
+ const buf = Buffer.alloc(6);
356
+ buf.writeUInt8(UTF8_SUPPORT_FEATURE_ID, 0);
357
+ buf.writeUInt32LE(1, 1);
358
+ buf.writeUInt8(UTF8_SUPPORT_CLIENT_SUPPORTS_UTF8, 5);
359
+ buffers.push(buf);
360
+ }
361
+ buffers.push(Buffer.from([FEATURE_EXT_TERMINATOR]));
362
+ return Buffer.concat(buffers);
363
+ }
364
+ buildOptionFlags2() {
365
+ let flags2 = FLAGS_2.INIT_LANG_WARN | FLAGS_2.ODBC_OFF | FLAGS_2.USER_NORMAL;
366
+ if (this.sspi) {
367
+ flags2 |= FLAGS_2.INTEGRATED_SECURITY_ON;
368
+ } else {
369
+ flags2 |= FLAGS_2.INTEGRATED_SECURITY_OFF;
370
+ }
371
+ return flags2;
372
+ }
373
+ buildTypeFlags() {
374
+ let typeFlags = TYPE_FLAGS.SQL_DFLT | TYPE_FLAGS.OLEDB_OFF;
375
+ if (this.readOnlyIntent) {
376
+ typeFlags |= TYPE_FLAGS.READ_ONLY_INTENT;
377
+ } else {
378
+ typeFlags |= TYPE_FLAGS.READ_WRITE_INTENT;
379
+ }
380
+ return typeFlags;
381
+ }
382
+ buildOptionFlags3() {
383
+ return FLAGS_3.CHANGE_PASSWORD_NO | FLAGS_3.UNKNOWN_COLLATION_HANDLING | FLAGS_3.EXTENSION_USED;
384
+ }
385
+ scramblePassword(password) {
386
+ for (let b = 0, len = password.length; b < len; b++) {
387
+ let byte = password[b];
388
+ const lowNibble = byte & 0x0f;
389
+ const highNibble = byte >> 4;
390
+ byte = lowNibble << 4 | highNibble;
391
+ byte = byte ^ 0xa5;
392
+ password[b] = byte;
393
+ }
394
+ return password;
395
+ }
396
+ toString(indent = '') {
397
+ return indent + 'Login7 - ' + (0, _sprintfJs.sprintf)('TDS:0x%08X, PacketSize:0x%08X, ClientProgVer:0x%08X, ClientPID:0x%08X, ConnectionID:0x%08X', this.tdsVersion, this.packetSize, this.clientProgVer, this.clientPid, this.connectionId) + '\n' + indent + ' ' + (0, _sprintfJs.sprintf)('Flags1:0x%02X, Flags2:0x%02X, TypeFlags:0x%02X, Flags3:0x%02X, ClientTimezone:%d, ClientLCID:0x%08X', this.buildOptionFlags1(), this.buildOptionFlags2(), this.buildTypeFlags(), this.buildOptionFlags3(), this.clientTimeZone, this.clientLcid) + '\n' + indent + ' ' + (0, _sprintfJs.sprintf)("Hostname:'%s', Username:'%s', Password:'%s', AppName:'%s', ServerName:'%s', LibraryName:'%s'", this.hostname, this.userName, this.password, this.appName, this.serverName, this.libraryName) + '\n' + indent + ' ' + (0, _sprintfJs.sprintf)("Language:'%s', Database:'%s', SSPI:'%s', AttachDbFile:'%s', ChangePassword:'%s'", this.language, this.database, this.sspi, this.attachDbFile, this.changePassword);
398
+ }
399
+ }
400
+ var _default = exports.default = Login7Payload;
401
+ module.exports = Login7Payload;
402
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc3ByaW50ZkpzIiwicmVxdWlyZSIsIl90ZHNWZXJzaW9ucyIsIkZMQUdTXzEiLCJFTkRJQU5fTElUVExFIiwiRU5ESUFOX0JJRyIsIkNIQVJTRVRfQVNDSUkiLCJDSEFSU0VUX0VCQ0RJQyIsIkZMT0FUX0lFRUVfNzU0IiwiRkxPQVRfVkFYIiwiRkxPQVRfTkQ1MDAwIiwiQkNQX0RVTVBMT0FEX09OIiwiQkNQX0RVTVBMT0FEX09GRiIsIlVTRV9EQl9PTiIsIlVTRV9EQl9PRkYiLCJJTklUX0RCX1dBUk4iLCJJTklUX0RCX0ZBVEFMIiwiU0VUX0xBTkdfV0FSTl9PRkYiLCJTRVRfTEFOR19XQVJOX09OIiwiRkxBR1NfMiIsIklOSVRfTEFOR19XQVJOIiwiSU5JVF9MQU5HX0ZBVEFMIiwiT0RCQ19PRkYiLCJPREJDX09OIiwiRl9UUkFOX0JPVU5EQVJZIiwiRl9DQUNIRV9DT05ORUNUIiwiVVNFUl9OT1JNQUwiLCJVU0VSX1NFUlZFUiIsIlVTRVJfUkVNVVNFUiIsIlVTRVJfU1FMUkVQTCIsIklOVEVHUkFURURfU0VDVVJJVFlfT0ZGIiwiSU5URUdSQVRFRF9TRUNVUklUWV9PTiIsIlRZUEVfRkxBR1MiLCJTUUxfREZMVCIsIlNRTF9UU1FMIiwiT0xFREJfT0ZGIiwiT0xFREJfT04iLCJSRUFEX1dSSVRFX0lOVEVOVCIsIlJFQURfT05MWV9JTlRFTlQiLCJGTEFHU18zIiwiQ0hBTkdFX1BBU1NXT1JEX05PIiwiQ0hBTkdFX1BBU1NXT1JEX1lFUyIsIkJJTkFSWV9YTUwiLCJTUEFXTl9VU0VSX0lOU1RBTkNFIiwiVU5LTk9XTl9DT0xMQVRJT05fSEFORExJTkciLCJFWFRFTlNJT05fVVNFRCIsIkZFREFVVEhfT1BUSU9OUyIsIkZFQVRVUkVfSUQiLCJMSUJSQVJZX1NFQ1VSSVRZVE9LRU4iLCJMSUJSQVJZX0FEQUwiLCJGRURBVVRIX1lFU19FQ0hPIiwiRkVEQVVUSF9OT19FQ0hPIiwiQURBTF9XT1JLRkxPV19VU0VSX1BBU1MiLCJBREFMX1dPUktGTE9XX0lOVEVHUkFURUQiLCJGRUFUVVJFX0VYVF9URVJNSU5BVE9SIiwiTG9naW43UGF5bG9hZCIsImNvbnN0cnVjdG9yIiwidGRzVmVyc2lvbiIsInBhY2tldFNpemUiLCJjbGllbnRQcm9nVmVyIiwiY2xpZW50UGlkIiwiY29ubmVjdGlvbklkIiwiY2xpZW50VGltZVpvbmUiLCJjbGllbnRMY2lkIiwicmVhZE9ubHlJbnRlbnQiLCJpbml0RGJGYXRhbCIsImZlZEF1dGgiLCJ1bmRlZmluZWQiLCJ1c2VyTmFtZSIsInBhc3N3b3JkIiwic2VydmVyTmFtZSIsImFwcE5hbWUiLCJob3N0bmFtZSIsImxpYnJhcnlOYW1lIiwibGFuZ3VhZ2UiLCJkYXRhYmFzZSIsImNsaWVudElkIiwic3NwaSIsImF0dGFjaERiRmlsZSIsImNoYW5nZVBhc3N3b3JkIiwidG9CdWZmZXIiLCJmaXhlZERhdGEiLCJCdWZmZXIiLCJhbGxvYyIsImJ1ZmZlcnMiLCJvZmZzZXQiLCJkYXRhT2Zmc2V0IiwibGVuZ3RoIiwid3JpdGVVSW50MzJMRSIsIndyaXRlVUludDgiLCJidWlsZE9wdGlvbkZsYWdzMSIsImJ1aWxkT3B0aW9uRmxhZ3MyIiwiYnVpbGRUeXBlRmxhZ3MiLCJidWlsZE9wdGlvbkZsYWdzMyIsIndyaXRlSW50MzJMRSIsIndyaXRlVUludDE2TEUiLCJidWZmZXIiLCJmcm9tIiwicHVzaCIsInNjcmFtYmxlUGFzc3dvcmQiLCJleHRlbnNpb25zIiwiYnVpbGRGZWF0dXJlRXh0IiwiZXh0ZW5zaW9uT2Zmc2V0IiwiY29weSIsImRhdGEiLCJjb25jYXQiLCJmbGFnczEiLCJ0eXBlIiwiZWNobyIsIndvcmtmbG93IiwidG9rZW4iLCJmZWRBdXRoVG9rZW4iLCJidWYiLCJ2ZXJzaW9ucyIsIlVURjhfU1VQUE9SVF9GRUFUVVJFX0lEIiwiVVRGOF9TVVBQT1JUX0NMSUVOVF9TVVBQT1JUU19VVEY4IiwiZmxhZ3MyIiwidHlwZUZsYWdzIiwiYiIsImxlbiIsImJ5dGUiLCJsb3dOaWJibGUiLCJoaWdoTmliYmxlIiwidG9TdHJpbmciLCJpbmRlbnQiLCJzcHJpbnRmIiwiX2RlZmF1bHQiLCJleHBvcnRzIiwiZGVmYXVsdCIsIm1vZHVsZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2dpbjctcGF5bG9hZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzcHJpbnRmIH0gZnJvbSAnc3ByaW50Zi1qcyc7XG5pbXBvcnQgeyB2ZXJzaW9ucyB9IGZyb20gJy4vdGRzLXZlcnNpb25zJztcblxuY29uc3QgRkxBR1NfMSA9IHtcbiAgRU5ESUFOX0xJVFRMRTogMHgwMCxcbiAgRU5ESUFOX0JJRzogMHgwMSxcbiAgQ0hBUlNFVF9BU0NJSTogMHgwMCxcbiAgQ0hBUlNFVF9FQkNESUM6IDB4MDIsXG4gIEZMT0FUX0lFRUVfNzU0OiAweDAwLFxuICBGTE9BVF9WQVg6IDB4MDQsXG4gIEZMT0FUX05ENTAwMDogMHgwOCxcbiAgQkNQX0RVTVBMT0FEX09OOiAweDAwLFxuICBCQ1BfRFVNUExPQURfT0ZGOiAweDEwLFxuICBVU0VfREJfT046IDB4MDAsXG4gIFVTRV9EQl9PRkY6IDB4MjAsXG4gIElOSVRfREJfV0FSTjogMHgwMCxcbiAgSU5JVF9EQl9GQVRBTDogMHg0MCxcbiAgU0VUX0xBTkdfV0FSTl9PRkY6IDB4MDAsXG4gIFNFVF9MQU5HX1dBUk5fT046IDB4ODBcbn07XG5cbmNvbnN0IEZMQUdTXzIgPSB7XG4gIElOSVRfTEFOR19XQVJOOiAweDAwLFxuICBJTklUX0xBTkdfRkFUQUw6IDB4MDEsXG4gIE9EQkNfT0ZGOiAweDAwLFxuICBPREJDX09OOiAweDAyLFxuICBGX1RSQU5fQk9VTkRBUlk6IDB4MDQsXG4gIEZfQ0FDSEVfQ09OTkVDVDogMHgwOCxcbiAgVVNFUl9OT1JNQUw6IDB4MDAsXG4gIFVTRVJfU0VSVkVSOiAweDEwLFxuICBVU0VSX1JFTVVTRVI6IDB4MjAsXG4gIFVTRVJfU1FMUkVQTDogMHg0MCxcbiAgSU5URUdSQVRFRF9TRUNVUklUWV9PRkY6IDB4MDAsXG4gIElOVEVHUkFURURfU0VDVVJJVFlfT046IDB4ODBcbn07XG5cbmNvbnN0IFRZUEVfRkxBR1MgPSB7XG4gIFNRTF9ERkxUOiAweDAwLFxuICBTUUxfVFNRTDogMHgwOCxcbiAgT0xFREJfT0ZGOiAweDAwLFxuICBPTEVEQl9PTjogMHgxMCxcbiAgUkVBRF9XUklURV9JTlRFTlQ6IDB4MDAsXG4gIFJFQURfT05MWV9JTlRFTlQ6IDB4MjBcbn07XG5cbmNvbnN0IEZMQUdTXzMgPSB7XG4gIENIQU5HRV9QQVNTV09SRF9OTzogMHgwMCxcbiAgQ0hBTkdFX1BBU1NXT1JEX1lFUzogMHgwMSxcbiAgQklOQVJZX1hNTDogMHgwMixcbiAgU1BBV05fVVNFUl9JTlNUQU5DRTogMHgwNCxcbiAgVU5LTk9XTl9DT0xMQVRJT05fSEFORExJTkc6IDB4MDgsXG4gIEVYVEVOU0lPTl9VU0VEOiAweDEwXG59O1xuXG5jb25zdCBGRURBVVRIX09QVElPTlMgPSB7XG4gIEZFQVRVUkVfSUQ6IDB4MDIsXG4gIExJQlJBUllfU0VDVVJJVFlUT0tFTjogMHgwMSxcbiAgTElCUkFSWV9BREFMOiAweDAyLFxuICBGRURBVVRIX1lFU19FQ0hPOiAweDAxLFxuICBGRURBVVRIX05PX0VDSE86IDB4MDAsXG4gIEFEQUxfV09SS0ZMT1dfVVNFUl9QQVNTOiAweDAxLFxuICBBREFMX1dPUktGTE9XX0lOVEVHUkFURUQ6IDB4MDJcbn07XG5cbmNvbnN0IEZFQVRVUkVfRVhUX1RFUk1JTkFUT1IgPSAweEZGO1xuXG5pbnRlcmZhY2UgT3B0aW9ucyB7XG4gIHRkc1ZlcnNpb246IG51bWJlcjtcbiAgcGFja2V0U2l6ZTogbnVtYmVyO1xuICBjbGllbnRQcm9nVmVyOiBudW1iZXI7XG4gIGNsaWVudFBpZDogbnVtYmVyO1xuICBjb25uZWN0aW9uSWQ6IG51bWJlcjtcbiAgY2xpZW50VGltZVpvbmU6IG51bWJlcjtcbiAgY2xpZW50TGNpZDogbnVtYmVyO1xufVxuXG4vKlxuICBzMi4yLjYuM1xuICovXG5jbGFzcyBMb2dpbjdQYXlsb2FkIHtcbiAgZGVjbGFyZSB0ZHNWZXJzaW9uOiBudW1iZXI7XG4gIGRlY2xhcmUgcGFja2V0U2l6ZTogbnVtYmVyO1xuICBkZWNsYXJlIGNsaWVudFByb2dWZXI6IG51bWJlcjtcbiAgZGVjbGFyZSBjbGllbnRQaWQ6IG51bWJlcjtcbiAgZGVjbGFyZSBjb25uZWN0aW9uSWQ6IG51bWJlcjtcbiAgZGVjbGFyZSBjbGllbnRUaW1lWm9uZTogbnVtYmVyO1xuICBkZWNsYXJlIGNsaWVudExjaWQ6IG51bWJlcjtcblxuICBkZWNsYXJlIHJlYWRPbmx5SW50ZW50OiBib29sZWFuO1xuICBkZWNsYXJlIGluaXREYkZhdGFsOiBib29sZWFuO1xuXG4gIGRlY2xhcmUgdXNlck5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZGVjbGFyZSBwYXNzd29yZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBkZWNsYXJlIHNlcnZlck5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZGVjbGFyZSBhcHBOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGRlY2xhcmUgaG9zdG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZGVjbGFyZSBsaWJyYXJ5TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBkZWNsYXJlIGxhbmd1YWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGRlY2xhcmUgZGF0YWJhc2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZGVjbGFyZSBjbGllbnRJZDogQnVmZmVyIHwgdW5kZWZpbmVkO1xuICBkZWNsYXJlIHNzcGk6IEJ1ZmZlciB8IHVuZGVmaW5lZDtcbiAgZGVjbGFyZSBhdHRhY2hEYkZpbGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZGVjbGFyZSBjaGFuZ2VQYXNzd29yZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGRlY2xhcmUgZmVkQXV0aDogeyB0eXBlOiAnQURBTCcsIGVjaG86IGJvb2xlYW4sIHdvcmtmbG93OiAnZGVmYXVsdCcgfCAnaW50ZWdyYXRlZCcgfSB8IHsgdHlwZTogJ1NFQ1VSSVRZVE9LRU4nLCBlY2hvOiBib29sZWFuLCBmZWRBdXRoVG9rZW46IHN0cmluZyB9IHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKHsgdGRzVmVyc2lvbiwgcGFja2V0U2l6ZSwgY2xpZW50UHJvZ1ZlciwgY2xpZW50UGlkLCBjb25uZWN0aW9uSWQsIGNsaWVudFRpbWVab25lLCBjbGllbnRMY2lkIH06IE9wdGlvbnMpIHtcbiAgICB0aGlzLnRkc1ZlcnNpb24gPSB0ZHNWZXJzaW9uO1xuICAgIHRoaXMucGFja2V0U2l6ZSA9IHBhY2tldFNpemU7XG4gICAgdGhpcy5jbGllbnRQcm9nVmVyID0gY2xpZW50UHJvZ1ZlcjtcbiAgICB0aGlzLmNsaWVudFBpZCA9IGNsaWVudFBpZDtcbiAgICB0aGlzLmNvbm5lY3Rpb25JZCA9IGNvbm5lY3Rpb25JZDtcbiAgICB0aGlzLmNsaWVudFRpbWVab25lID0gY2xpZW50VGltZVpvbmU7XG4gICAgdGhpcy5jbGllbnRMY2lkID0gY2xpZW50TGNpZDtcblxuICAgIHRoaXMucmVhZE9ubHlJbnRlbnQgPSBmYWxzZTtcbiAgICB0aGlzLmluaXREYkZhdGFsID0gZmFsc2U7XG5cbiAgICB0aGlzLmZlZEF1dGggPSB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLnVzZXJOYW1lID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucGFzc3dvcmQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5zZXJ2ZXJOYW1lID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYXBwTmFtZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmhvc3RuYW1lID0gdW5kZWZpbmVkO1xuICAgIHRoaXMubGlicmFyeU5hbWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5sYW5ndWFnZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRhdGFiYXNlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY2xpZW50SWQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5zc3BpID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYXR0YWNoRGJGaWxlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY2hhbmdlUGFzc3dvcmQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICB0b0J1ZmZlcigpIHtcbiAgICBjb25zdCBmaXhlZERhdGEgPSBCdWZmZXIuYWxsb2MoOTQpO1xuICAgIGNvbnN0IGJ1ZmZlcnMgPSBbZml4ZWREYXRhXTtcblxuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGxldCBkYXRhT2Zmc2V0ID0gZml4ZWREYXRhLmxlbmd0aDtcblxuICAgIC8vIExlbmd0aDogNC1ieXRlXG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDMyTEUoMCwgb2Zmc2V0KTtcblxuICAgIC8vIFREU1ZlcnNpb246IDQtYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQzMkxFKHRoaXMudGRzVmVyc2lvbiwgb2Zmc2V0KTtcblxuICAgIC8vIFBhY2tldFNpemU6IDQtYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQzMkxFKHRoaXMucGFja2V0U2l6ZSwgb2Zmc2V0KTtcblxuICAgIC8vIENsaWVudFByb2dWZXI6IDQtYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQzMkxFKHRoaXMuY2xpZW50UHJvZ1Zlciwgb2Zmc2V0KTtcblxuICAgIC8vIENsaWVudFBJRDogNC1ieXRlXG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDMyTEUodGhpcy5jbGllbnRQaWQsIG9mZnNldCk7XG5cbiAgICAvLyBDb25uZWN0aW9uSUQ6IDQtYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQzMkxFKHRoaXMuY29ubmVjdGlvbklkLCBvZmZzZXQpO1xuXG4gICAgLy8gT3B0aW9uRmxhZ3MxOiAxLWJ5dGVcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50OCh0aGlzLmJ1aWxkT3B0aW9uRmxhZ3MxKCksIG9mZnNldCk7XG5cbiAgICAvLyBPcHRpb25GbGFnczI6IDEtYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQ4KHRoaXMuYnVpbGRPcHRpb25GbGFnczIoKSwgb2Zmc2V0KTtcblxuICAgIC8vIFR5cGVGbGFnczogMS1ieXRlXG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDgodGhpcy5idWlsZFR5cGVGbGFncygpLCBvZmZzZXQpO1xuXG4gICAgLy8gT3B0aW9uRmxhZ3MzOiAxLWJ5dGVcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50OCh0aGlzLmJ1aWxkT3B0aW9uRmxhZ3MzKCksIG9mZnNldCk7XG5cbiAgICAvLyBDbGllbnRUaW1ab25lOiA0LWJ5dGVcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVJbnQzMkxFKHRoaXMuY2xpZW50VGltZVpvbmUsIG9mZnNldCk7XG5cbiAgICAvLyBDbGllbnRMQ0lEOiA0LWJ5dGVcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MzJMRSh0aGlzLmNsaWVudExjaWQsIG9mZnNldCk7XG5cbiAgICAvLyBpYkhvc3ROYW1lOiAyLWJ5dGVcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRShkYXRhT2Zmc2V0LCBvZmZzZXQpO1xuXG4gICAgLy8gY2NoSG9zdE5hbWU6IDItYnl0ZVxuICAgIGlmICh0aGlzLmhvc3RuYW1lKSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbSh0aGlzLmhvc3RuYW1lLCAndWNzMicpO1xuXG4gICAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRShidWZmZXIubGVuZ3RoIC8gMiwgb2Zmc2V0KTtcbiAgICAgIGRhdGFPZmZzZXQgKz0gYnVmZmVyLmxlbmd0aDtcblxuICAgICAgYnVmZmVycy5wdXNoKGJ1ZmZlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGRhdGFPZmZzZXQsIG9mZnNldCk7XG4gICAgfVxuXG4gICAgLy8gaWJVc2VyTmFtZTogMi1ieXRlXG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoZGF0YU9mZnNldCwgb2Zmc2V0KTtcblxuICAgIC8vIGNjaFVzZXJOYW1lOiAyLWJ5dGVcbiAgICBpZiAodGhpcy51c2VyTmFtZSkge1xuICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20odGhpcy51c2VyTmFtZSwgJ3VjczInKTtcblxuICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoYnVmZmVyLmxlbmd0aCAvIDIsIG9mZnNldCk7XG4gICAgICBkYXRhT2Zmc2V0ICs9IGJ1ZmZlci5sZW5ndGg7XG5cbiAgICAgIGJ1ZmZlcnMucHVzaChidWZmZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRSgwLCBvZmZzZXQpO1xuICAgIH1cblxuICAgIC8vIGliUGFzc3dvcmQ6IDItYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGRhdGFPZmZzZXQsIG9mZnNldCk7XG5cbiAgICAvLyBjY2hQYXNzd29yZDogMi1ieXRlXG4gICAgaWYgKHRoaXMucGFzc3dvcmQpIHtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHRoaXMucGFzc3dvcmQsICd1Y3MyJyk7XG5cbiAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGJ1ZmZlci5sZW5ndGggLyAyLCBvZmZzZXQpO1xuICAgICAgZGF0YU9mZnNldCArPSBidWZmZXIubGVuZ3RoO1xuXG4gICAgICBidWZmZXJzLnB1c2godGhpcy5zY3JhbWJsZVBhc3N3b3JkKGJ1ZmZlcikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRSgwLCBvZmZzZXQpO1xuICAgIH1cblxuICAgIC8vIGliQXBwTmFtZTogMi1ieXRlXG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoZGF0YU9mZnNldCwgb2Zmc2V0KTtcblxuICAgIC8vIGNjaEFwcE5hbWU6IDItYnl0ZVxuICAgIGlmICh0aGlzLmFwcE5hbWUpIHtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHRoaXMuYXBwTmFtZSwgJ3VjczInKTtcblxuICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoYnVmZmVyLmxlbmd0aCAvIDIsIG9mZnNldCk7XG4gICAgICBkYXRhT2Zmc2V0ICs9IGJ1ZmZlci5sZW5ndGg7XG5cbiAgICAgIGJ1ZmZlcnMucHVzaChidWZmZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRSgwLCBvZmZzZXQpO1xuICAgIH1cblxuICAgIC8vIGliU2VydmVyTmFtZTogMi1ieXRlXG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoZGF0YU9mZnNldCwgb2Zmc2V0KTtcblxuICAgIC8vIGNjaFNlcnZlck5hbWU6IDItYnl0ZVxuICAgIGlmICh0aGlzLnNlcnZlck5hbWUpIHtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHRoaXMuc2VydmVyTmFtZSwgJ3VjczInKTtcblxuICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoYnVmZmVyLmxlbmd0aCAvIDIsIG9mZnNldCk7XG4gICAgICBkYXRhT2Zmc2V0ICs9IGJ1ZmZlci5sZW5ndGg7XG5cbiAgICAgIGJ1ZmZlcnMucHVzaChidWZmZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRSgwLCBvZmZzZXQpO1xuICAgIH1cblxuICAgIC8vIChpYlVudXNlZCAvIGliRXh0ZW5zaW9uKTogMi1ieXRlXG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoZGF0YU9mZnNldCwgb2Zmc2V0KTtcblxuICAgIC8vIChjY2hVbnVzZWQgLyBjYkV4dGVuc2lvbik6IDItYnl0ZVxuICAgIGNvbnN0IGV4dGVuc2lvbnMgPSB0aGlzLmJ1aWxkRmVhdHVyZUV4dCgpO1xuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKDQsIG9mZnNldCk7XG4gICAgY29uc3QgZXh0ZW5zaW9uT2Zmc2V0ID0gQnVmZmVyLmFsbG9jKDQpO1xuICAgIGV4dGVuc2lvbk9mZnNldC53cml0ZVVJbnQzMkxFKGRhdGFPZmZzZXQgKz0gNCwgMCk7XG4gICAgZGF0YU9mZnNldCArPSBleHRlbnNpb25zLmxlbmd0aDtcbiAgICBidWZmZXJzLnB1c2goZXh0ZW5zaW9uT2Zmc2V0LCBleHRlbnNpb25zKTtcblxuICAgIC8vIGliQ2x0SW50TmFtZTogMi1ieXRlXG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoZGF0YU9mZnNldCwgb2Zmc2V0KTtcblxuICAgIC8vIGNjaENsdEludE5hbWU6IDItYnl0ZVxuICAgIGlmICh0aGlzLmxpYnJhcnlOYW1lKSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbSh0aGlzLmxpYnJhcnlOYW1lLCAndWNzMicpO1xuXG4gICAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRShidWZmZXIubGVuZ3RoIC8gMiwgb2Zmc2V0KTtcbiAgICAgIGRhdGFPZmZzZXQgKz0gYnVmZmVyLmxlbmd0aDtcblxuICAgICAgYnVmZmVycy5wdXNoKGJ1ZmZlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKDAsIG9mZnNldCk7XG4gICAgfVxuXG4gICAgLy8gaWJMYW5ndWFnZTogMi1ieXRlXG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoZGF0YU9mZnNldCwgb2Zmc2V0KTtcblxuICAgIC8vIGNjaExhbmd1YWdlOiAyLWJ5dGVcbiAgICBpZiAodGhpcy5sYW5ndWFnZSkge1xuICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20odGhpcy5sYW5ndWFnZSwgJ3VjczInKTtcblxuICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoYnVmZmVyLmxlbmd0aCAvIDIsIG9mZnNldCk7XG4gICAgICBkYXRhT2Zmc2V0ICs9IGJ1ZmZlci5sZW5ndGg7XG5cbiAgICAgIGJ1ZmZlcnMucHVzaChidWZmZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRSgwLCBvZmZzZXQpO1xuICAgIH1cblxuICAgIC8vIGliRGF0YWJhc2U6IDItYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGRhdGFPZmZzZXQsIG9mZnNldCk7XG5cbiAgICAvLyBjY2hEYXRhYmFzZTogMi1ieXRlXG4gICAgaWYgKHRoaXMuZGF0YWJhc2UpIHtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHRoaXMuZGF0YWJhc2UsICd1Y3MyJyk7XG5cbiAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGJ1ZmZlci5sZW5ndGggLyAyLCBvZmZzZXQpO1xuICAgICAgZGF0YU9mZnNldCArPSBidWZmZXIubGVuZ3RoO1xuXG4gICAgICBidWZmZXJzLnB1c2goYnVmZmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoMCwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICAvLyBDbGllbnRJRDogNi1ieXRlXG4gICAgaWYgKHRoaXMuY2xpZW50SWQpIHtcbiAgICAgIHRoaXMuY2xpZW50SWQuY29weShmaXhlZERhdGEsIG9mZnNldCwgMCwgNik7XG4gICAgfVxuICAgIG9mZnNldCArPSA2O1xuXG4gICAgLy8gaWJTU1BJOiAyLWJ5dGVcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRShkYXRhT2Zmc2V0LCBvZmZzZXQpO1xuXG4gICAgLy8gY2JTU1BJOiAyLWJ5dGVcbiAgICBpZiAodGhpcy5zc3BpKSB7XG4gICAgICBpZiAodGhpcy5zc3BpLmxlbmd0aCA+IDY1NTM1KSB7XG4gICAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKDY1NTM1LCBvZmZzZXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUodGhpcy5zc3BpLmxlbmd0aCwgb2Zmc2V0KTtcbiAgICAgIH1cblxuICAgICAgYnVmZmVycy5wdXNoKHRoaXMuc3NwaSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKDAsIG9mZnNldCk7XG4gICAgfVxuXG4gICAgLy8gaWJBdGNoREJGaWxlOiAyLWJ5dGVcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRShkYXRhT2Zmc2V0LCBvZmZzZXQpO1xuXG4gICAgLy8gY2NoQXRjaERCRmlsZTogMi1ieXRlXG4gICAgaWYgKHRoaXMuYXR0YWNoRGJGaWxlKSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbSh0aGlzLmF0dGFjaERiRmlsZSwgJ3VjczInKTtcblxuICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoYnVmZmVyLmxlbmd0aCAvIDIsIG9mZnNldCk7XG4gICAgICBkYXRhT2Zmc2V0ICs9IGJ1ZmZlci5sZW5ndGg7XG5cbiAgICAgIGJ1ZmZlcnMucHVzaChidWZmZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRSgwLCBvZmZzZXQpO1xuICAgIH1cblxuICAgIC8vIGliQ2hhbmdlUGFzc3dvcmQ6IDItYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGRhdGFPZmZzZXQsIG9mZnNldCk7XG5cbiAgICAvLyBjY2hDaGFuZ2VQYXNzd29yZDogMi1ieXRlXG4gICAgaWYgKHRoaXMuY2hhbmdlUGFzc3dvcmQpIHtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHRoaXMuY2hhbmdlUGFzc3dvcmQsICd1Y3MyJyk7XG5cbiAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGJ1ZmZlci5sZW5ndGggLyAyLCBvZmZzZXQpO1xuICAgICAgZGF0YU9mZnNldCArPSBidWZmZXIubGVuZ3RoO1xuXG4gICAgICBidWZmZXJzLnB1c2goYnVmZmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoMCwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICAvLyBjYlNTUElMb25nOiA0LWJ5dGVcbiAgICBpZiAodGhpcy5zc3BpICYmIHRoaXMuc3NwaS5sZW5ndGggPiA2NTUzNSkge1xuICAgICAgZml4ZWREYXRhLndyaXRlVUludDMyTEUodGhpcy5zc3BpLmxlbmd0aCwgb2Zmc2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZml4ZWREYXRhLndyaXRlVUludDMyTEUoMCwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0gQnVmZmVyLmNvbmNhdChidWZmZXJzKTtcbiAgICBkYXRhLndyaXRlVUludDMyTEUoZGF0YS5sZW5ndGgsIDApO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgYnVpbGRPcHRpb25GbGFnczEoKSB7XG4gICAgbGV0IGZsYWdzMSA9IEZMQUdTXzEuRU5ESUFOX0xJVFRMRSB8IEZMQUdTXzEuQ0hBUlNFVF9BU0NJSSB8IEZMQUdTXzEuRkxPQVRfSUVFRV83NTQgfCBGTEFHU18xLkJDUF9EVU1QTE9BRF9PRkYgfCBGTEFHU18xLlVTRV9EQl9PRkYgfCBGTEFHU18xLlNFVF9MQU5HX1dBUk5fT047XG4gICAgaWYgKHRoaXMuaW5pdERiRmF0YWwpIHtcbiAgICAgIGZsYWdzMSB8PSBGTEFHU18xLklOSVRfREJfRkFUQUw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZsYWdzMSB8PSBGTEFHU18xLklOSVRfREJfV0FSTjtcbiAgICB9XG4gICAgcmV0dXJuIGZsYWdzMTtcbiAgfVxuXG4gIGJ1aWxkRmVhdHVyZUV4dCgpIHtcbiAgICBjb25zdCBidWZmZXJzID0gW107XG5cbiAgICBjb25zdCBmZWRBdXRoID0gdGhpcy5mZWRBdXRoO1xuICAgIGlmIChmZWRBdXRoKSB7XG4gICAgICBzd2l0Y2ggKGZlZEF1dGgudHlwZSkge1xuICAgICAgICBjYXNlICdBREFMJzpcbiAgICAgICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuYWxsb2MoNyk7XG4gICAgICAgICAgYnVmZmVyLndyaXRlVUludDgoRkVEQVVUSF9PUFRJT05TLkZFQVRVUkVfSUQsIDApO1xuICAgICAgICAgIGJ1ZmZlci53cml0ZVVJbnQzMkxFKDIsIDEpO1xuICAgICAgICAgIGJ1ZmZlci53cml0ZVVJbnQ4KChGRURBVVRIX09QVElPTlMuTElCUkFSWV9BREFMIDw8IDEpIHwgKGZlZEF1dGguZWNobyA/IEZFREFVVEhfT1BUSU9OUy5GRURBVVRIX1lFU19FQ0hPIDogRkVEQVVUSF9PUFRJT05TLkZFREFVVEhfTk9fRUNITyksIDUpO1xuICAgICAgICAgIGJ1ZmZlci53cml0ZVVJbnQ4KGZlZEF1dGgud29ya2Zsb3cgPT09ICdpbnRlZ3JhdGVkJyA/IDB4MDIgOiBGRURBVVRIX09QVElPTlMuQURBTF9XT1JLRkxPV19VU0VSX1BBU1MsIDYpO1xuICAgICAgICAgIGJ1ZmZlcnMucHVzaChidWZmZXIpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ1NFQ1VSSVRZVE9LRU4nOlxuICAgICAgICAgIGNvbnN0IHRva2VuID0gQnVmZmVyLmZyb20oZmVkQXV0aC5mZWRBdXRoVG9rZW4sICd1Y3MyJyk7XG4gICAgICAgICAgY29uc3QgYnVmID0gQnVmZmVyLmFsbG9jKDEwKTtcblxuICAgICAgICAgIGxldCBvZmZzZXQgPSAwO1xuICAgICAgICAgIG9mZnNldCA9IGJ1Zi53cml0ZVVJbnQ4KEZFREFVVEhfT1BUSU9OUy5GRUFUVVJFX0lELCBvZmZzZXQpO1xuICAgICAgICAgIG9mZnNldCA9IGJ1Zi53cml0ZVVJbnQzMkxFKHRva2VuLmxlbmd0aCArIDQgKyAxLCBvZmZzZXQpO1xuICAgICAgICAgIG9mZnNldCA9IGJ1Zi53cml0ZVVJbnQ4KChGRURBVVRIX09QVElPTlMuTElCUkFSWV9TRUNVUklUWVRPS0VOIDw8IDEpIHwgKGZlZEF1dGguZWNobyA/IEZFREFVVEhfT1BUSU9OUy5GRURBVVRIX1lFU19FQ0hPIDogRkVEQVVUSF9PUFRJT05TLkZFREFVVEhfTk9fRUNITyksIG9mZnNldCk7XG4gICAgICAgICAgYnVmLndyaXRlSW50MzJMRSh0b2tlbi5sZW5ndGgsIG9mZnNldCk7XG5cbiAgICAgICAgICBidWZmZXJzLnB1c2goYnVmKTtcbiAgICAgICAgICBidWZmZXJzLnB1c2godG9rZW4pO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGRzVmVyc2lvbiA+PSB2ZXJzaW9uc1snN180J10pIHtcbiAgICAgIC8vIFNpZ25hbCBVVEYtOCBzdXBwb3J0OiBWYWx1ZSAweDBBLCBiaXQgMCBtdXN0IGJlIHNldCB0byAxLiBBZGRlZCBpbiBURFMgNy40LlxuICAgICAgY29uc3QgVVRGOF9TVVBQT1JUX0ZFQVRVUkVfSUQgPSAweDBhO1xuICAgICAgY29uc3QgVVRGOF9TVVBQT1JUX0NMSUVOVF9TVVBQT1JUU19VVEY4ID0gMHgwMTtcbiAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvYyg2KTtcbiAgICAgIGJ1Zi53cml0ZVVJbnQ4KFVURjhfU1VQUE9SVF9GRUFUVVJFX0lELCAwKTtcbiAgICAgIGJ1Zi53cml0ZVVJbnQzMkxFKDEsIDEpO1xuICAgICAgYnVmLndyaXRlVUludDgoVVRGOF9TVVBQT1JUX0NMSUVOVF9TVVBQT1JUU19VVEY4LCA1KTtcbiAgICAgIGJ1ZmZlcnMucHVzaChidWYpO1xuICAgIH1cblxuICAgIGJ1ZmZlcnMucHVzaChCdWZmZXIuZnJvbShbRkVBVFVSRV9FWFRfVEVSTUlOQVRPUl0pKTtcblxuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KGJ1ZmZlcnMpO1xuICB9XG5cbiAgYnVpbGRPcHRpb25GbGFnczIoKSB7XG4gICAgbGV0IGZsYWdzMiA9IEZMQUdTXzIuSU5JVF9MQU5HX1dBUk4gfCBGTEFHU18yLk9EQkNfT0ZGIHwgRkxBR1NfMi5VU0VSX05PUk1BTDtcbiAgICBpZiAodGhpcy5zc3BpKSB7XG4gICAgICBmbGFnczIgfD0gRkxBR1NfMi5JTlRFR1JBVEVEX1NFQ1VSSVRZX09OO1xuICAgIH0gZWxzZSB7XG4gICAgICBmbGFnczIgfD0gRkxBR1NfMi5JTlRFR1JBVEVEX1NFQ1VSSVRZX09GRjtcbiAgICB9XG4gICAgcmV0dXJuIGZsYWdzMjtcbiAgfVxuXG4gIGJ1aWxkVHlwZUZsYWdzKCkge1xuICAgIGxldCB0eXBlRmxhZ3MgPSBUWVBFX0ZMQUdTLlNRTF9ERkxUIHwgVFlQRV9GTEFHUy5PTEVEQl9PRkY7XG4gICAgaWYgKHRoaXMucmVhZE9ubHlJbnRlbnQpIHtcbiAgICAgIHR5cGVGbGFncyB8PSBUWVBFX0ZMQUdTLlJFQURfT05MWV9JTlRFTlQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHR5cGVGbGFncyB8PSBUWVBFX0ZMQUdTLlJFQURfV1JJVEVfSU5URU5UO1xuICAgIH1cbiAgICByZXR1cm4gdHlwZUZsYWdzO1xuICB9XG5cbiAgYnVpbGRPcHRpb25GbGFnczMoKSB7XG4gICAgcmV0dXJuIEZMQUdTXzMuQ0hBTkdFX1BBU1NXT1JEX05PIHwgRkxBR1NfMy5VTktOT1dOX0NPTExBVElPTl9IQU5ETElORyB8IEZMQUdTXzMuRVhURU5TSU9OX1VTRUQ7XG4gIH1cblxuICBzY3JhbWJsZVBhc3N3b3JkKHBhc3N3b3JkOiBCdWZmZXIpIHtcbiAgICBmb3IgKGxldCBiID0gMCwgbGVuID0gcGFzc3dvcmQubGVuZ3RoOyBiIDwgbGVuOyBiKyspIHtcbiAgICAgIGxldCBieXRlID0gcGFzc3dvcmRbYl07XG4gICAgICBjb25zdCBsb3dOaWJibGUgPSBieXRlICYgMHgwZjtcbiAgICAgIGNvbnN0IGhpZ2hOaWJibGUgPSBieXRlID4+IDQ7XG4gICAgICBieXRlID0gKGxvd05pYmJsZSA8PCA0KSB8IGhpZ2hOaWJibGU7XG4gICAgICBieXRlID0gYnl0ZSBeIDB4YTU7XG4gICAgICBwYXNzd29yZFtiXSA9IGJ5dGU7XG4gICAgfVxuICAgIHJldHVybiBwYXNzd29yZDtcbiAgfVxuXG4gIHRvU3RyaW5nKGluZGVudCA9ICcnKSB7XG4gICAgcmV0dXJuIGluZGVudCArICdMb2dpbjcgLSAnICtcbiAgICAgIHNwcmludGYoJ1REUzoweCUwOFgsIFBhY2tldFNpemU6MHglMDhYLCBDbGllbnRQcm9nVmVyOjB4JTA4WCwgQ2xpZW50UElEOjB4JTA4WCwgQ29ubmVjdGlvbklEOjB4JTA4WCcsXG4gICAgICAgICAgICAgIHRoaXMudGRzVmVyc2lvbiwgdGhpcy5wYWNrZXRTaXplLCB0aGlzLmNsaWVudFByb2dWZXIsIHRoaXMuY2xpZW50UGlkLCB0aGlzLmNvbm5lY3Rpb25JZFxuICAgICAgKSArICdcXG4nICsgaW5kZW50ICsgJyAgICAgICAgICcgK1xuICAgICAgc3ByaW50ZignRmxhZ3MxOjB4JTAyWCwgRmxhZ3MyOjB4JTAyWCwgVHlwZUZsYWdzOjB4JTAyWCwgRmxhZ3MzOjB4JTAyWCwgQ2xpZW50VGltZXpvbmU6JWQsIENsaWVudExDSUQ6MHglMDhYJyxcbiAgICAgICAgICAgICAgdGhpcy5idWlsZE9wdGlvbkZsYWdzMSgpLCB0aGlzLmJ1aWxkT3B0aW9uRmxhZ3MyKCksIHRoaXMuYnVpbGRUeXBlRmxhZ3MoKSwgdGhpcy5idWlsZE9wdGlvbkZsYWdzMygpLCB0aGlzLmNsaWVudFRpbWVab25lLCB0aGlzLmNsaWVudExjaWRcbiAgICAgICkgKyAnXFxuJyArIGluZGVudCArICcgICAgICAgICAnICtcbiAgICAgIHNwcmludGYoXCJIb3N0bmFtZTonJXMnLCBVc2VybmFtZTonJXMnLCBQYXNzd29yZDonJXMnLCBBcHBOYW1lOiclcycsIFNlcnZlck5hbWU6JyVzJywgTGlicmFyeU5hbWU6JyVzJ1wiLFxuICAgICAgICAgICAgICB0aGlzLmhvc3RuYW1lLCB0aGlzLnVzZXJOYW1lLCB0aGlzLnBhc3N3b3JkLCB0aGlzLmFwcE5hbWUsIHRoaXMuc2VydmVyTmFtZSwgdGhpcy5saWJyYXJ5TmFtZVxuICAgICAgKSArICdcXG4nICsgaW5kZW50ICsgJyAgICAgICAgICcgK1xuICAgICAgc3ByaW50ZihcIkxhbmd1YWdlOiclcycsIERhdGFiYXNlOiclcycsIFNTUEk6JyVzJywgQXR0YWNoRGJGaWxlOiclcycsIENoYW5nZVBhc3N3b3JkOiclcydcIixcbiAgICAgICAgICAgICAgdGhpcy5sYW5ndWFnZSwgdGhpcy5kYXRhYmFzZSwgdGhpcy5zc3BpLCB0aGlzLmF0dGFjaERiRmlsZSwgdGhpcy5jaGFuZ2VQYXNzd29yZFxuICAgICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMb2dpbjdQYXlsb2FkO1xubW9kdWxlLmV4cG9ydHMgPSBMb2dpbjdQYXlsb2FkO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxVQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxZQUFBLEdBQUFELE9BQUE7QUFFQSxNQUFNRSxPQUFPLEdBQUc7RUFDZEMsYUFBYSxFQUFFLElBQUk7RUFDbkJDLFVBQVUsRUFBRSxJQUFJO0VBQ2hCQyxhQUFhLEVBQUUsSUFBSTtFQUNuQkMsY0FBYyxFQUFFLElBQUk7RUFDcEJDLGNBQWMsRUFBRSxJQUFJO0VBQ3BCQyxTQUFTLEVBQUUsSUFBSTtFQUNmQyxZQUFZLEVBQUUsSUFBSTtFQUNsQkMsZUFBZSxFQUFFLElBQUk7RUFDckJDLGdCQUFnQixFQUFFLElBQUk7RUFDdEJDLFNBQVMsRUFBRSxJQUFJO0VBQ2ZDLFVBQVUsRUFBRSxJQUFJO0VBQ2hCQyxZQUFZLEVBQUUsSUFBSTtFQUNsQkMsYUFBYSxFQUFFLElBQUk7RUFDbkJDLGlCQUFpQixFQUFFLElBQUk7RUFDdkJDLGdCQUFnQixFQUFFO0FBQ3BCLENBQUM7QUFFRCxNQUFNQyxPQUFPLEdBQUc7RUFDZEMsY0FBYyxFQUFFLElBQUk7RUFDcEJDLGVBQWUsRUFBRSxJQUFJO0VBQ3JCQyxRQUFRLEVBQUUsSUFBSTtF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
@@ -0,0 +1,28 @@
1
+ import { Duplex } from 'stream';
2
+ import * as tls from 'tls';
3
+ import { Socket } from 'net';
4
+ import { EventEmitter } from 'events';
5
+ import Debug from './debug';
6
+ import Message from './message';
7
+ import OutgoingMessageStream from './outgoing-message-stream';
8
+ declare class MessageIO extends EventEmitter {
9
+ socket: Socket;
10
+ debug: Debug;
11
+ tlsNegotiationComplete: boolean;
12
+ private incomingMessageStream;
13
+ outgoingMessageStream: OutgoingMessageStream;
14
+ securePair?: {
15
+ cleartext: tls.TLSSocket;
16
+ encrypted: Duplex;
17
+ };
18
+ incomingMessageIterator: AsyncIterableIterator<Message>;
19
+ constructor(socket: Socket, packetSize: number, debug: Debug);
20
+ packetSize(...args: [number]): number;
21
+ startTls(credentialsDetails: tls.SecureContextOptions, hostname: string, trustServerCertificate: boolean): Promise<void>;
22
+ sendMessage(packetType: number, data?: Buffer, resetConnection?: boolean): Message;
23
+ /**
24
+ * Read the next incoming message from the socket.
25
+ */
26
+ readMessage(): Promise<Message>;
27
+ }
28
+ export default MessageIO;