@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.
Files changed (303) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +67 -0
  3. package/appveyor.yml +72 -0
  4. package/eslint.config.mjs +314 -0
  5. package/lib/all-headers.d.ts +2 -0
  6. package/lib/all-headers.js +24 -0
  7. package/lib/all-headers.js.map +1 -0
  8. package/lib/always-encrypted/aead-aes-256-cbc-hmac-algorithm.js +82 -0
  9. package/lib/always-encrypted/aead-aes-256-cbc-hmac-algorithm.js.map +1 -0
  10. package/lib/always-encrypted/aead-aes-256-cbc-hmac-encryption-key.js +55 -0
  11. package/lib/always-encrypted/aead-aes-256-cbc-hmac-encryption-key.js.map +1 -0
  12. package/lib/always-encrypted/cek-entry.d.ts +11 -0
  13. package/lib/always-encrypted/cek-entry.js +42 -0
  14. package/lib/always-encrypted/cek-entry.js.map +1 -0
  15. package/lib/always-encrypted/get-parameter-encryption-metadata.js +90 -0
  16. package/lib/always-encrypted/get-parameter-encryption-metadata.js.map +1 -0
  17. package/lib/always-encrypted/key-crypto.js +94 -0
  18. package/lib/always-encrypted/key-crypto.js.map +1 -0
  19. package/lib/always-encrypted/keystore-provider-azure-key-vault.d.ts +21 -0
  20. package/lib/always-encrypted/keystore-provider-azure-key-vault.js +247 -0
  21. package/lib/always-encrypted/keystore-provider-azure-key-vault.js.map +1 -0
  22. package/lib/always-encrypted/symmetric-key-cache.js +36 -0
  23. package/lib/always-encrypted/symmetric-key-cache.js.map +1 -0
  24. package/lib/always-encrypted/symmetric-key.js +25 -0
  25. package/lib/always-encrypted/symmetric-key.js.map +1 -0
  26. package/lib/always-encrypted/types.d.ts +73 -0
  27. package/lib/always-encrypted/types.js +61 -0
  28. package/lib/always-encrypted/types.js.map +1 -0
  29. package/lib/always-encrypted/utils.js +23 -0
  30. package/lib/always-encrypted/utils.js.map +1 -0
  31. package/lib/bulk-load-payload.d.ts +8 -0
  32. package/lib/bulk-load-payload.js +23 -0
  33. package/lib/bulk-load-payload.js.map +1 -0
  34. package/lib/bulk-load.d.ts +275 -0
  35. package/lib/bulk-load.js +515 -0
  36. package/lib/bulk-load.js.map +1 -0
  37. package/lib/collation.d.ts +28 -0
  38. package/lib/collation.js +348 -0
  39. package/lib/collation.js.map +1 -0
  40. package/lib/connection.d.ts +1316 -0
  41. package/lib/connection.js +2760 -0
  42. package/lib/connection.js.map +1 -0
  43. package/lib/connector.d.ts +18 -0
  44. package/lib/connector.js +142 -0
  45. package/lib/connector.js.map +1 -0
  46. package/lib/data-type.d.ts +554 -0
  47. package/lib/data-type.js +428 -0
  48. package/lib/data-type.js.map +1 -0
  49. package/lib/data-types/bigint.d.ts +3 -0
  50. package/lib/data-types/bigint.js +53 -0
  51. package/lib/data-types/bigint.js.map +1 -0
  52. package/lib/data-types/binary.d.ts +5 -0
  53. package/lib/data-types/binary.js +67 -0
  54. package/lib/data-types/binary.js.map +1 -0
  55. package/lib/data-types/bit.d.ts +3 -0
  56. package/lib/data-types/bit.js +46 -0
  57. package/lib/data-types/bit.js.map +1 -0
  58. package/lib/data-types/bitn.d.ts +3 -0
  59. package/lib/data-types/bitn.js +29 -0
  60. package/lib/data-types/bitn.js.map +1 -0
  61. package/lib/data-types/char.d.ts +5 -0
  62. package/lib/data-types/char.js +86 -0
  63. package/lib/data-types/char.js.map +1 -0
  64. package/lib/data-types/date.d.ts +3 -0
  65. package/lib/data-types/date.js +72 -0
  66. package/lib/data-types/date.js.map +1 -0
  67. package/lib/data-types/datetime.d.ts +3 -0
  68. package/lib/data-types/datetime.js +93 -0
  69. package/lib/data-types/datetime.js.map +1 -0
  70. package/lib/data-types/datetime2.d.ts +5 -0
  71. package/lib/data-types/datetime2.js +118 -0
  72. package/lib/data-types/datetime2.js.map +1 -0
  73. package/lib/data-types/datetimen.d.ts +3 -0
  74. package/lib/data-types/datetimen.js +29 -0
  75. package/lib/data-types/datetimen.js.map +1 -0
  76. package/lib/data-types/datetimeoffset.d.ts +5 -0
  77. package/lib/data-types/datetimeoffset.js +111 -0
  78. package/lib/data-types/datetimeoffset.js.map +1 -0
  79. package/lib/data-types/decimal.d.ts +6 -0
  80. package/lib/data-types/decimal.js +107 -0
  81. package/lib/data-types/decimal.js.map +1 -0
  82. package/lib/data-types/decimaln.d.ts +3 -0
  83. package/lib/data-types/decimaln.js +29 -0
  84. package/lib/data-types/decimaln.js.map +1 -0
  85. package/lib/data-types/float.d.ts +3 -0
  86. package/lib/data-types/float.js +47 -0
  87. package/lib/data-types/float.js.map +1 -0
  88. package/lib/data-types/floatn.d.ts +3 -0
  89. package/lib/data-types/floatn.js +29 -0
  90. package/lib/data-types/floatn.js.map +1 -0
  91. package/lib/data-types/image.d.ts +3 -0
  92. package/lib/data-types/image.js +56 -0
  93. package/lib/data-types/image.js.map +1 -0
  94. package/lib/data-types/int.d.ts +3 -0
  95. package/lib/data-types/int.js +53 -0
  96. package/lib/data-types/int.js.map +1 -0
  97. package/lib/data-types/intn.d.ts +3 -0
  98. package/lib/data-types/intn.js +29 -0
  99. package/lib/data-types/intn.js.map +1 -0
  100. package/lib/data-types/money.d.ts +3 -0
  101. package/lib/data-types/money.js +59 -0
  102. package/lib/data-types/money.js.map +1 -0
  103. package/lib/data-types/moneyn.d.ts +3 -0
  104. package/lib/data-types/moneyn.js +29 -0
  105. package/lib/data-types/moneyn.js.map +1 -0
  106. package/lib/data-types/nchar.d.ts +5 -0
  107. package/lib/data-types/nchar.js +100 -0
  108. package/lib/data-types/nchar.js.map +1 -0
  109. package/lib/data-types/ntext.d.ts +3 -0
  110. package/lib/data-types/ntext.js +60 -0
  111. package/lib/data-types/ntext.js.map +1 -0
  112. package/lib/data-types/null.d.ts +3 -0
  113. package/lib/data-types/null.js +29 -0
  114. package/lib/data-types/null.js.map +1 -0
  115. package/lib/data-types/numeric.d.ts +6 -0
  116. package/lib/data-types/numeric.js +106 -0
  117. package/lib/data-types/numeric.js.map +1 -0
  118. package/lib/data-types/numericn.d.ts +3 -0
  119. package/lib/data-types/numericn.js +29 -0
  120. package/lib/data-types/numericn.js.map +1 -0
  121. package/lib/data-types/nvarchar.d.ts +5 -0
  122. package/lib/data-types/nvarchar.js +133 -0
  123. package/lib/data-types/nvarchar.js.map +1 -0
  124. package/lib/data-types/real.d.ts +3 -0
  125. package/lib/data-types/real.js +48 -0
  126. package/lib/data-types/real.js.map +1 -0
  127. package/lib/data-types/smalldatetime.d.ts +3 -0
  128. package/lib/data-types/smalldatetime.js +83 -0
  129. package/lib/data-types/smalldatetime.js.map +1 -0
  130. package/lib/data-types/smallint.d.ts +3 -0
  131. package/lib/data-types/smallint.js +53 -0
  132. package/lib/data-types/smallint.js.map +1 -0
  133. package/lib/data-types/smallmoney.d.ts +3 -0
  134. package/lib/data-types/smallmoney.js +51 -0
  135. package/lib/data-types/smallmoney.js.map +1 -0
  136. package/lib/data-types/sql-variant.d.ts +3 -0
  137. package/lib/data-types/sql-variant.js +29 -0
  138. package/lib/data-types/sql-variant.js.map +1 -0
  139. package/lib/data-types/text.d.ts +3 -0
  140. package/lib/data-types/text.js +69 -0
  141. package/lib/data-types/text.js.map +1 -0
  142. package/lib/data-types/time.d.ts +3 -0
  143. package/lib/data-types/time.js +96 -0
  144. package/lib/data-types/time.js.map +1 -0
  145. package/lib/data-types/tinyint.d.ts +3 -0
  146. package/lib/data-types/tinyint.js +53 -0
  147. package/lib/data-types/tinyint.js.map +1 -0
  148. package/lib/data-types/tvp.d.ts +3 -0
  149. package/lib/data-types/tvp.js +118 -0
  150. package/lib/data-types/tvp.js.map +1 -0
  151. package/lib/data-types/udt.d.ts +3 -0
  152. package/lib/data-types/udt.js +29 -0
  153. package/lib/data-types/udt.js.map +1 -0
  154. package/lib/data-types/uniqueidentifier.d.ts +3 -0
  155. package/lib/data-types/uniqueidentifier.js +50 -0
  156. package/lib/data-types/uniqueidentifier.js.map +1 -0
  157. package/lib/data-types/varbinary.d.ts +5 -0
  158. package/lib/data-types/varbinary.js +119 -0
  159. package/lib/data-types/varbinary.js.map +1 -0
  160. package/lib/data-types/varchar.d.ts +5 -0
  161. package/lib/data-types/varchar.js +112 -0
  162. package/lib/data-types/varchar.js.map +1 -0
  163. package/lib/data-types/xml.d.ts +3 -0
  164. package/lib/data-types/xml.js +29 -0
  165. package/lib/data-types/xml.js.map +1 -0
  166. package/lib/debug.d.ts +25 -0
  167. package/lib/debug.js +66 -0
  168. package/lib/debug.js.map +1 -0
  169. package/lib/errors.d.ts +17 -0
  170. package/lib/errors.js +23 -0
  171. package/lib/errors.js.map +1 -0
  172. package/lib/guid-parser.d.ts +3 -0
  173. package/lib/guid-parser.js +30 -0
  174. package/lib/guid-parser.js.map +1 -0
  175. package/lib/incoming-message-stream.d.ts +19 -0
  176. package/lib/incoming-message-stream.js +97 -0
  177. package/lib/incoming-message-stream.js.map +1 -0
  178. package/lib/instance-lookup.d.ts +13 -0
  179. package/lib/instance-lookup.js +91 -0
  180. package/lib/instance-lookup.js.map +1 -0
  181. package/lib/library.d.ts +1 -0
  182. package/lib/library.js +8 -0
  183. package/lib/library.js.map +1 -0
  184. package/lib/login7-payload.d.ts +51 -0
  185. package/lib/login7-payload.js +424 -0
  186. package/lib/login7-payload.js.map +1 -0
  187. package/lib/message-io.d.ts +28 -0
  188. package/lib/message-io.js +152 -0
  189. package/lib/message-io.js.map +1 -0
  190. package/lib/message.d.ts +11 -0
  191. package/lib/message.js +21 -0
  192. package/lib/message.js.map +1 -0
  193. package/lib/metadata-parser.d.ts +48 -0
  194. package/lib/metadata-parser.js +380 -0
  195. package/lib/metadata-parser.js.map +1 -0
  196. package/lib/ntlm-payload.d.ts +23 -0
  197. package/lib/ntlm-payload.js +135 -0
  198. package/lib/ntlm-payload.js.map +1 -0
  199. package/lib/ntlm.d.ts +4 -0
  200. package/lib/ntlm.js +72 -0
  201. package/lib/ntlm.js.map +1 -0
  202. package/lib/outgoing-message-stream.d.ts +15 -0
  203. package/lib/outgoing-message-stream.js +81 -0
  204. package/lib/outgoing-message-stream.js.map +1 -0
  205. package/lib/packet.d.ts +33 -0
  206. package/lib/packet.js +191 -0
  207. package/lib/packet.js.map +1 -0
  208. package/lib/prelogin-payload.d.ts +67 -0
  209. package/lib/prelogin-payload.js +228 -0
  210. package/lib/prelogin-payload.js.map +1 -0
  211. package/lib/request.d.ts +370 -0
  212. package/lib/request.js +387 -0
  213. package/lib/request.js.map +1 -0
  214. package/lib/rpcrequest-payload.d.ts +16 -0
  215. package/lib/rpcrequest-payload.js +109 -0
  216. package/lib/rpcrequest-payload.js.map +1 -0
  217. package/lib/sender.d.ts +5 -0
  218. package/lib/sender.js +78 -0
  219. package/lib/sender.js.map +1 -0
  220. package/lib/special-stored-procedure.d.ts +18 -0
  221. package/lib/special-stored-procedure.js +26 -0
  222. package/lib/special-stored-procedure.js.map +1 -0
  223. package/lib/sqlbatch-payload.d.ts +13 -0
  224. package/lib/sqlbatch-payload.js +34 -0
  225. package/lib/sqlbatch-payload.js.map +1 -0
  226. package/lib/tds-versions.d.ts +6 -0
  227. package/lib/tds-versions.js +19 -0
  228. package/lib/tds-versions.js.map +1 -0
  229. package/lib/tedious.d.ts +13 -0
  230. package/lib/tedious.js +73 -0
  231. package/lib/tedious.js.map +1 -0
  232. package/lib/token/colmetadata-token-parser.d.ts +12 -0
  233. package/lib/token/colmetadata-token-parser.js +124 -0
  234. package/lib/token/colmetadata-token-parser.js.map +1 -0
  235. package/lib/token/done-token-parser.d.ts +6 -0
  236. package/lib/token/done-token-parser.js +76 -0
  237. package/lib/token/done-token-parser.js.map +1 -0
  238. package/lib/token/env-change-token-parser.d.ts +5 -0
  239. package/lib/token/env-change-token-parser.js +190 -0
  240. package/lib/token/env-change-token-parser.js.map +1 -0
  241. package/lib/token/feature-ext-ack-parser.d.ts +5 -0
  242. package/lib/token/feature-ext-ack-parser.js +52 -0
  243. package/lib/token/feature-ext-ack-parser.js.map +1 -0
  244. package/lib/token/fedauth-info-parser.d.ts +5 -0
  245. package/lib/token/fedauth-info-parser.js +62 -0
  246. package/lib/token/fedauth-info-parser.js.map +1 -0
  247. package/lib/token/handler.d.ts +136 -0
  248. package/lib/token/handler.js +445 -0
  249. package/lib/token/handler.js.map +1 -0
  250. package/lib/token/helpers.d.ts +28 -0
  251. package/lib/token/helpers.js +205 -0
  252. package/lib/token/helpers.js.map +1 -0
  253. package/lib/token/infoerror-token-parser.d.ts +5 -0
  254. package/lib/token/infoerror-token-parser.js +80 -0
  255. package/lib/token/infoerror-token-parser.js.map +1 -0
  256. package/lib/token/loginack-token-parser.d.ts +5 -0
  257. package/lib/token/loginack-token-parser.js +75 -0
  258. package/lib/token/loginack-token-parser.js.map +1 -0
  259. package/lib/token/nbcrow-token-parser.d.ts +4 -0
  260. package/lib/token/nbcrow-token-parser.js +103 -0
  261. package/lib/token/nbcrow-token-parser.js.map +1 -0
  262. package/lib/token/order-token-parser.d.ts +5 -0
  263. package/lib/token/order-token-parser.js +34 -0
  264. package/lib/token/order-token-parser.js.map +1 -0
  265. package/lib/token/returnstatus-token-parser.d.ts +5 -0
  266. package/lib/token/returnstatus-token-parser.js +21 -0
  267. package/lib/token/returnstatus-token-parser.js.map +1 -0
  268. package/lib/token/returnvalue-token-parser.d.ts +4 -0
  269. package/lib/token/returnvalue-token-parser.js +93 -0
  270. package/lib/token/returnvalue-token-parser.js.map +1 -0
  271. package/lib/token/row-token-parser.d.ts +4 -0
  272. package/lib/token/row-token-parser.js +76 -0
  273. package/lib/token/row-token-parser.js.map +1 -0
  274. package/lib/token/sspi-token-parser.d.ts +5 -0
  275. package/lib/token/sspi-token-parser.js +42 -0
  276. package/lib/token/sspi-token-parser.js.map +1 -0
  277. package/lib/token/stream-parser.d.ts +34 -0
  278. package/lib/token/stream-parser.js +341 -0
  279. package/lib/token/stream-parser.js.map +1 -0
  280. package/lib/token/token-stream-parser.d.ts +15 -0
  281. package/lib/token/token-stream-parser.js +36 -0
  282. package/lib/token/token-stream-parser.js.map +1 -0
  283. package/lib/token/token.d.ts +312 -0
  284. package/lib/token/token.js +328 -0
  285. package/lib/token/token.js.map +1 -0
  286. package/lib/tracking-buffer/writable-tracking-buffer.d.ts +47 -0
  287. package/lib/tracking-buffer/writable-tracking-buffer.js +249 -0
  288. package/lib/tracking-buffer/writable-tracking-buffer.js.map +1 -0
  289. package/lib/transaction.d.ts +39 -0
  290. package/lib/transaction.js +137 -0
  291. package/lib/transaction.js.map +1 -0
  292. package/lib/transient-error-lookup.d.ts +3 -0
  293. package/lib/transient-error-lookup.js +19 -0
  294. package/lib/transient-error-lookup.js.map +1 -0
  295. package/lib/value-parser.d.ts +7 -0
  296. package/lib/value-parser.js +813 -0
  297. package/lib/value-parser.js.map +1 -0
  298. package/package.json +157 -0
  299. package/pull_request_template.md +9 -0
  300. package/tsconfig.build-types.json +16 -0
  301. package/tsconfig.json +32 -0
  302. package/types/js-md4.d.ts +7 -0
  303. package/types/native-duplexpair.d.ts +12 -0
@@ -0,0 +1,424 @@
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
+ // For TDS 7.4+, this points to a 4-byte offset (ibFeatureExtLong) in the data section.
211
+ // The actual FeatureExt data is placed at the END of the packet per MS-TDS spec.
212
+ offset = fixedData.writeUInt16LE(dataOffset, offset);
213
+
214
+ // (cchUnused / cbExtension): 2-byte
215
+ // For TDS 7.4+, this is the size of the ibFeatureExtLong offset pointer (4 bytes).
216
+ // The actual FeatureExt data is appended at the end of the packet, not here.
217
+ // We'll store the FeatureExt data to append at the end after all other variable data.
218
+ let featureExtData;
219
+ let extensionOffsetBuffer;
220
+ if (this.tdsVersion >= _tdsVersions.versions['7_4']) {
221
+ featureExtData = this.buildFeatureExt();
222
+ // cbExtension = 4 (size of the ibFeatureExtLong pointer, not the FeatureExt data)
223
+ offset = fixedData.writeUInt16LE(4, offset);
224
+ // Reserve space for the 4-byte offset pointer; we'll fill in the actual offset later
225
+ extensionOffsetBuffer = Buffer.alloc(4);
226
+ buffers.push(extensionOffsetBuffer);
227
+ dataOffset += 4;
228
+ } else {
229
+ // For TDS < 7.4, these are unused fields
230
+ offset = fixedData.writeUInt16LE(0, offset);
231
+ }
232
+
233
+ // ibCltIntName: 2-byte
234
+ offset = fixedData.writeUInt16LE(dataOffset, offset);
235
+
236
+ // cchCltIntName: 2-byte
237
+ if (this.libraryName) {
238
+ const buffer = Buffer.from(this.libraryName, '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
+ // ibLanguage: 2-byte
247
+ offset = fixedData.writeUInt16LE(dataOffset, offset);
248
+
249
+ // cchLanguage: 2-byte
250
+ if (this.language) {
251
+ const buffer = Buffer.from(this.language, '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
+ // ibDatabase: 2-byte
260
+ offset = fixedData.writeUInt16LE(dataOffset, offset);
261
+
262
+ // cchDatabase: 2-byte
263
+ if (this.database) {
264
+ const buffer = Buffer.from(this.database, 'ucs2');
265
+ offset = fixedData.writeUInt16LE(buffer.length / 2, offset);
266
+ dataOffset += buffer.length;
267
+ buffers.push(buffer);
268
+ } else {
269
+ offset = fixedData.writeUInt16LE(0, offset);
270
+ }
271
+
272
+ // ClientID: 6-byte
273
+ if (this.clientId) {
274
+ this.clientId.copy(fixedData, offset, 0, 6);
275
+ }
276
+ offset += 6;
277
+
278
+ // ibSSPI: 2-byte
279
+ offset = fixedData.writeUInt16LE(dataOffset, offset);
280
+
281
+ // cbSSPI: 2-byte
282
+ if (this.sspi) {
283
+ if (this.sspi.length > 65535) {
284
+ offset = fixedData.writeUInt16LE(65535, offset);
285
+ } else {
286
+ offset = fixedData.writeUInt16LE(this.sspi.length, offset);
287
+ }
288
+ buffers.push(this.sspi);
289
+ dataOffset += this.sspi.length;
290
+ } else {
291
+ offset = fixedData.writeUInt16LE(0, offset);
292
+ }
293
+
294
+ // ibAtchDBFile: 2-byte
295
+ offset = fixedData.writeUInt16LE(dataOffset, offset);
296
+
297
+ // cchAtchDBFile: 2-byte
298
+ if (this.attachDbFile) {
299
+ const buffer = Buffer.from(this.attachDbFile, 'ucs2');
300
+ offset = fixedData.writeUInt16LE(buffer.length / 2, offset);
301
+ dataOffset += buffer.length;
302
+ buffers.push(buffer);
303
+ } else {
304
+ offset = fixedData.writeUInt16LE(0, offset);
305
+ }
306
+
307
+ // ibChangePassword: 2-byte
308
+ offset = fixedData.writeUInt16LE(dataOffset, offset);
309
+
310
+ // cchChangePassword: 2-byte
311
+ if (this.changePassword) {
312
+ const buffer = Buffer.from(this.changePassword, 'ucs2');
313
+ offset = fixedData.writeUInt16LE(buffer.length / 2, offset);
314
+ dataOffset += buffer.length;
315
+ buffers.push(buffer);
316
+ } else {
317
+ offset = fixedData.writeUInt16LE(0, offset);
318
+ }
319
+
320
+ // cbSSPILong: 4-byte
321
+ if (this.sspi && this.sspi.length > 65535) {
322
+ fixedData.writeUInt32LE(this.sspi.length, offset);
323
+ } else {
324
+ fixedData.writeUInt32LE(0, offset);
325
+ }
326
+
327
+ // Per MS-TDS spec, FeatureExt data must be at the END of the packet,
328
+ // after all other variable-length data.
329
+ if (featureExtData && extensionOffsetBuffer) {
330
+ // Update the ibFeatureExtLong offset to point to where FeatureExt will be
331
+ extensionOffsetBuffer.writeUInt32LE(dataOffset, 0);
332
+ // Append FeatureExt data at the end
333
+ buffers.push(featureExtData);
334
+ }
335
+ const data = Buffer.concat(buffers);
336
+ data.writeUInt32LE(data.length, 0);
337
+ return data;
338
+ }
339
+ buildOptionFlags1() {
340
+ 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;
341
+ if (this.initDbFatal) {
342
+ flags1 |= FLAGS_1.INIT_DB_FATAL;
343
+ } else {
344
+ flags1 |= FLAGS_1.INIT_DB_WARN;
345
+ }
346
+ return flags1;
347
+ }
348
+ buildFeatureExt() {
349
+ const buffers = [];
350
+ const fedAuth = this.fedAuth;
351
+ if (fedAuth) {
352
+ switch (fedAuth.type) {
353
+ case 'ADAL':
354
+ const buffer = Buffer.alloc(7);
355
+ buffer.writeUInt8(FEDAUTH_OPTIONS.FEATURE_ID, 0);
356
+ buffer.writeUInt32LE(2, 1);
357
+ buffer.writeUInt8(FEDAUTH_OPTIONS.LIBRARY_ADAL << 1 | (fedAuth.echo ? FEDAUTH_OPTIONS.FEDAUTH_YES_ECHO : FEDAUTH_OPTIONS.FEDAUTH_NO_ECHO), 5);
358
+ buffer.writeUInt8(fedAuth.workflow === 'integrated' ? 0x02 : FEDAUTH_OPTIONS.ADAL_WORKFLOW_USER_PASS, 6);
359
+ buffers.push(buffer);
360
+ break;
361
+ case 'SECURITYTOKEN':
362
+ const token = Buffer.from(fedAuth.fedAuthToken, 'ucs2');
363
+ const buf = Buffer.alloc(10);
364
+ let offset = 0;
365
+ offset = buf.writeUInt8(FEDAUTH_OPTIONS.FEATURE_ID, offset);
366
+ offset = buf.writeUInt32LE(token.length + 4 + 1, offset);
367
+ offset = buf.writeUInt8(FEDAUTH_OPTIONS.LIBRARY_SECURITYTOKEN << 1 | (fedAuth.echo ? FEDAUTH_OPTIONS.FEDAUTH_YES_ECHO : FEDAUTH_OPTIONS.FEDAUTH_NO_ECHO), offset);
368
+ buf.writeInt32LE(token.length, offset);
369
+ buffers.push(buf);
370
+ buffers.push(token);
371
+ break;
372
+ }
373
+ }
374
+
375
+ // Signal UTF-8 support: Value 0x0A, bit 0 must be set to 1. Added in TDS 7.4.
376
+ const UTF8_SUPPORT_FEATURE_ID = 0x0a;
377
+ const UTF8_SUPPORT_CLIENT_SUPPORTS_UTF8 = 0x01;
378
+ const buf = Buffer.alloc(6);
379
+ buf.writeUInt8(UTF8_SUPPORT_FEATURE_ID, 0);
380
+ buf.writeUInt32LE(1, 1);
381
+ buf.writeUInt8(UTF8_SUPPORT_CLIENT_SUPPORTS_UTF8, 5);
382
+ buffers.push(buf);
383
+ buffers.push(Buffer.from([FEATURE_EXT_TERMINATOR]));
384
+ return Buffer.concat(buffers);
385
+ }
386
+ buildOptionFlags2() {
387
+ let flags2 = FLAGS_2.INIT_LANG_WARN | FLAGS_2.ODBC_OFF | FLAGS_2.USER_NORMAL;
388
+ if (this.sspi) {
389
+ flags2 |= FLAGS_2.INTEGRATED_SECURITY_ON;
390
+ } else {
391
+ flags2 |= FLAGS_2.INTEGRATED_SECURITY_OFF;
392
+ }
393
+ return flags2;
394
+ }
395
+ buildTypeFlags() {
396
+ let typeFlags = TYPE_FLAGS.SQL_DFLT | TYPE_FLAGS.OLEDB_OFF;
397
+ if (this.readOnlyIntent) {
398
+ typeFlags |= TYPE_FLAGS.READ_ONLY_INTENT;
399
+ } else {
400
+ typeFlags |= TYPE_FLAGS.READ_WRITE_INTENT;
401
+ }
402
+ return typeFlags;
403
+ }
404
+ buildOptionFlags3() {
405
+ return FLAGS_3.CHANGE_PASSWORD_NO | FLAGS_3.UNKNOWN_COLLATION_HANDLING | FLAGS_3.EXTENSION_USED;
406
+ }
407
+ scramblePassword(password) {
408
+ for (let b = 0, len = password.length; b < len; b++) {
409
+ let byte = password[b];
410
+ const lowNibble = byte & 0x0f;
411
+ const highNibble = byte >> 4;
412
+ byte = lowNibble << 4 | highNibble;
413
+ byte = byte ^ 0xa5;
414
+ password[b] = byte;
415
+ }
416
+ return password;
417
+ }
418
+ toString(indent = '') {
419
+ 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);
420
+ }
421
+ }
422
+ var _default = exports.default = Login7Payload;
423
+ module.exports = Login7Payload;
424
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc3ByaW50ZkpzIiwicmVxdWlyZSIsIl90ZHNWZXJzaW9ucyIsIkZMQUdTXzEiLCJFTkRJQU5fTElUVExFIiwiRU5ESUFOX0JJRyIsIkNIQVJTRVRfQVNDSUkiLCJDSEFSU0VUX0VCQ0RJQyIsIkZMT0FUX0lFRUVfNzU0IiwiRkxPQVRfVkFYIiwiRkxPQVRfTkQ1MDAwIiwiQkNQX0RVTVBMT0FEX09OIiwiQkNQX0RVTVBMT0FEX09GRiIsIlVTRV9EQl9PTiIsIlVTRV9EQl9PRkYiLCJJTklUX0RCX1dBUk4iLCJJTklUX0RCX0ZBVEFMIiwiU0VUX0xBTkdfV0FSTl9PRkYiLCJTRVRfTEFOR19XQVJOX09OIiwiRkxBR1NfMiIsIklOSVRfTEFOR19XQVJOIiwiSU5JVF9MQU5HX0ZBVEFMIiwiT0RCQ19PRkYiLCJPREJDX09OIiwiRl9UUkFOX0JPVU5EQVJZIiwiRl9DQUNIRV9DT05ORUNUIiwiVVNFUl9OT1JNQUwiLCJVU0VSX1NFUlZFUiIsIlVTRVJfUkVNVVNFUiIsIlVTRVJfU1FMUkVQTCIsIklOVEVHUkFURURfU0VDVVJJVFlfT0ZGIiwiSU5URUdSQVRFRF9TRUNVUklUWV9PTiIsIlRZUEVfRkxBR1MiLCJTUUxfREZMVCIsIlNRTF9UU1FMIiwiT0xFREJfT0ZGIiwiT0xFREJfT04iLCJSRUFEX1dSSVRFX0lOVEVOVCIsIlJFQURfT05MWV9JTlRFTlQiLCJGTEFHU18zIiwiQ0hBTkdFX1BBU1NXT1JEX05PIiwiQ0hBTkdFX1BBU1NXT1JEX1lFUyIsIkJJTkFSWV9YTUwiLCJTUEFXTl9VU0VSX0lOU1RBTkNFIiwiVU5LTk9XTl9DT0xMQVRJT05fSEFORExJTkciLCJFWFRFTlNJT05fVVNFRCIsIkZFREFVVEhfT1BUSU9OUyIsIkZFQVRVUkVfSUQiLCJMSUJSQVJZX1NFQ1VSSVRZVE9LRU4iLCJMSUJSQVJZX0FEQUwiLCJGRURBVVRIX1lFU19FQ0hPIiwiRkVEQVVUSF9OT19FQ0hPIiwiQURBTF9XT1JLRkxPV19VU0VSX1BBU1MiLCJBREFMX1dPUktGTE9XX0lOVEVHUkFURUQiLCJGRUFUVVJFX0VYVF9URVJNSU5BVE9SIiwiTG9naW43UGF5bG9hZCIsImNvbnN0cnVjdG9yIiwidGRzVmVyc2lvbiIsInBhY2tldFNpemUiLCJjbGllbnRQcm9nVmVyIiwiY2xpZW50UGlkIiwiY29ubmVjdGlvbklkIiwiY2xpZW50VGltZVpvbmUiLCJjbGllbnRMY2lkIiwicmVhZE9ubHlJbnRlbnQiLCJpbml0RGJGYXRhbCIsImZlZEF1dGgiLCJ1bmRlZmluZWQiLCJ1c2VyTmFtZSIsInBhc3N3b3JkIiwic2VydmVyTmFtZSIsImFwcE5hbWUiLCJob3N0bmFtZSIsImxpYnJhcnlOYW1lIiwibGFuZ3VhZ2UiLCJkYXRhYmFzZSIsImNsaWVudElkIiwic3NwaSIsImF0dGFjaERiRmlsZSIsImNoYW5nZVBhc3N3b3JkIiwidG9CdWZmZXIiLCJmaXhlZERhdGEiLCJCdWZmZXIiLCJhbGxvYyIsImJ1ZmZlcnMiLCJvZmZzZXQiLCJkYXRhT2Zmc2V0IiwibGVuZ3RoIiwid3JpdGVVSW50MzJMRSIsIndyaXRlVUludDgiLCJidWlsZE9wdGlvbkZsYWdzMSIsImJ1aWxkT3B0aW9uRmxhZ3MyIiwiYnVpbGRUeXBlRmxhZ3MiLCJidWlsZE9wdGlvbkZsYWdzMyIsIndyaXRlSW50MzJMRSIsIndyaXRlVUludDE2TEUiLCJidWZmZXIiLCJmcm9tIiwicHVzaCIsInNjcmFtYmxlUGFzc3dvcmQiLCJmZWF0dXJlRXh0RGF0YSIsImV4dGVuc2lvbk9mZnNldEJ1ZmZlciIsInZlcnNpb25zIiwiYnVpbGRGZWF0dXJlRXh0IiwiY29weSIsImRhdGEiLCJjb25jYXQiLCJmbGFnczEiLCJ0eXBlIiwiZWNobyIsIndvcmtmbG93IiwidG9rZW4iLCJmZWRBdXRoVG9rZW4iLCJidWYiLCJVVEY4X1NVUFBPUlRfRkVBVFVSRV9JRCIsIlVURjhfU1VQUE9SVF9DTElFTlRfU1VQUE9SVFNfVVRGOCIsImZsYWdzMiIsInR5cGVGbGFncyIsImIiLCJsZW4iLCJieXRlIiwibG93TmliYmxlIiwiaGlnaE5pYmJsZSIsInRvU3RyaW5nIiwiaW5kZW50Iiwic3ByaW50ZiIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiLCJtb2R1bGUiXSwic291cmNlcyI6WyIuLi9zcmMvbG9naW43LXBheWxvYWQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3ByaW50ZiB9IGZyb20gJ3NwcmludGYtanMnO1xuaW1wb3J0IHsgdmVyc2lvbnMgfSBmcm9tICcuL3Rkcy12ZXJzaW9ucyc7XG5cbmNvbnN0IEZMQUdTXzEgPSB7XG4gIEVORElBTl9MSVRUTEU6IDB4MDAsXG4gIEVORElBTl9CSUc6IDB4MDEsXG4gIENIQVJTRVRfQVNDSUk6IDB4MDAsXG4gIENIQVJTRVRfRUJDRElDOiAweDAyLFxuICBGTE9BVF9JRUVFXzc1NDogMHgwMCxcbiAgRkxPQVRfVkFYOiAweDA0LFxuICBGTE9BVF9ORDUwMDA6IDB4MDgsXG4gIEJDUF9EVU1QTE9BRF9PTjogMHgwMCxcbiAgQkNQX0RVTVBMT0FEX09GRjogMHgxMCxcbiAgVVNFX0RCX09OOiAweDAwLFxuICBVU0VfREJfT0ZGOiAweDIwLFxuICBJTklUX0RCX1dBUk46IDB4MDAsXG4gIElOSVRfREJfRkFUQUw6IDB4NDAsXG4gIFNFVF9MQU5HX1dBUk5fT0ZGOiAweDAwLFxuICBTRVRfTEFOR19XQVJOX09OOiAweDgwXG59O1xuXG5jb25zdCBGTEFHU18yID0ge1xuICBJTklUX0xBTkdfV0FSTjogMHgwMCxcbiAgSU5JVF9MQU5HX0ZBVEFMOiAweDAxLFxuICBPREJDX09GRjogMHgwMCxcbiAgT0RCQ19PTjogMHgwMixcbiAgRl9UUkFOX0JPVU5EQVJZOiAweDA0LFxuICBGX0NBQ0hFX0NPTk5FQ1Q6IDB4MDgsXG4gIFVTRVJfTk9STUFMOiAweDAwLFxuICBVU0VSX1NFUlZFUjogMHgxMCxcbiAgVVNFUl9SRU1VU0VSOiAweDIwLFxuICBVU0VSX1NRTFJFUEw6IDB4NDAsXG4gIElOVEVHUkFURURfU0VDVVJJVFlfT0ZGOiAweDAwLFxuICBJTlRFR1JBVEVEX1NFQ1VSSVRZX09OOiAweDgwXG59O1xuXG5jb25zdCBUWVBFX0ZMQUdTID0ge1xuICBTUUxfREZMVDogMHgwMCxcbiAgU1FMX1RTUUw6IDB4MDgsXG4gIE9MRURCX09GRjogMHgwMCxcbiAgT0xFREJfT046IDB4MTAsXG4gIFJFQURfV1JJVEVfSU5URU5UOiAweDAwLFxuICBSRUFEX09OTFlfSU5URU5UOiAweDIwXG59O1xuXG5jb25zdCBGTEFHU18zID0ge1xuICBDSEFOR0VfUEFTU1dPUkRfTk86IDB4MDAsXG4gIENIQU5HRV9QQVNTV09SRF9ZRVM6IDB4MDEsXG4gIEJJTkFSWV9YTUw6IDB4MDIsXG4gIFNQQVdOX1VTRVJfSU5TVEFOQ0U6IDB4MDQsXG4gIFVOS05PV05fQ09MTEFUSU9OX0hBTkRMSU5HOiAweDA4LFxuICBFWFRFTlNJT05fVVNFRDogMHgxMFxufTtcblxuY29uc3QgRkVEQVVUSF9PUFRJT05TID0ge1xuICBGRUFUVVJFX0lEOiAweDAyLFxuICBMSUJSQVJZX1NFQ1VSSVRZVE9LRU46IDB4MDEsXG4gIExJQlJBUllfQURBTDogMHgwMixcbiAgRkVEQVVUSF9ZRVNfRUNITzogMHgwMSxcbiAgRkVEQVVUSF9OT19FQ0hPOiAweDAwLFxuICBBREFMX1dPUktGTE9XX1VTRVJfUEFTUzogMHgwMSxcbiAgQURBTF9XT1JLRkxPV19JTlRFR1JBVEVEOiAweDAyXG59O1xuXG5jb25zdCBGRUFUVVJFX0VYVF9URVJNSU5BVE9SID0gMHhGRjtcblxuaW50ZXJmYWNlIE9wdGlvbnMge1xuICB0ZHNWZXJzaW9uOiBudW1iZXI7XG4gIHBhY2tldFNpemU6IG51bWJlcjtcbiAgY2xpZW50UHJvZ1ZlcjogbnVtYmVyO1xuICBjbGllbnRQaWQ6IG51bWJlcjtcbiAgY29ubmVjdGlvbklkOiBudW1iZXI7XG4gIGNsaWVudFRpbWVab25lOiBudW1iZXI7XG4gIGNsaWVudExjaWQ6IG51bWJlcjtcbn1cblxuLypcbiAgczIuMi42LjNcbiAqL1xuY2xhc3MgTG9naW43UGF5bG9hZCB7XG4gIGRlY2xhcmUgdGRzVmVyc2lvbjogbnVtYmVyO1xuICBkZWNsYXJlIHBhY2tldFNpemU6IG51bWJlcjtcbiAgZGVjbGFyZSBjbGllbnRQcm9nVmVyOiBudW1iZXI7XG4gIGRlY2xhcmUgY2xpZW50UGlkOiBudW1iZXI7XG4gIGRlY2xhcmUgY29ubmVjdGlvbklkOiBudW1iZXI7XG4gIGRlY2xhcmUgY2xpZW50VGltZVpvbmU6IG51bWJlcjtcbiAgZGVjbGFyZSBjbGllbnRMY2lkOiBudW1iZXI7XG5cbiAgZGVjbGFyZSByZWFkT25seUludGVudDogYm9vbGVhbjtcbiAgZGVjbGFyZSBpbml0RGJGYXRhbDogYm9vbGVhbjtcblxuICBkZWNsYXJlIHVzZXJOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGRlY2xhcmUgcGFzc3dvcmQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZGVjbGFyZSBzZXJ2ZXJOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGRlY2xhcmUgYXBwTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBkZWNsYXJlIGhvc3RuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGRlY2xhcmUgbGlicmFyeU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZGVjbGFyZSBsYW5ndWFnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBkZWNsYXJlIGRhdGFiYXNlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGRlY2xhcmUgY2xpZW50SWQ6IEJ1ZmZlciB8IHVuZGVmaW5lZDtcbiAgZGVjbGFyZSBzc3BpOiBCdWZmZXIgfCB1bmRlZmluZWQ7XG4gIGRlY2xhcmUgYXR0YWNoRGJGaWxlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGRlY2xhcmUgY2hhbmdlUGFzc3dvcmQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBkZWNsYXJlIGZlZEF1dGg6IHsgdHlwZTogJ0FEQUwnLCBlY2hvOiBib29sZWFuLCB3b3JrZmxvdzogJ2RlZmF1bHQnIHwgJ2ludGVncmF0ZWQnIH0gfCB7IHR5cGU6ICdTRUNVUklUWVRPS0VOJywgZWNobzogYm9vbGVhbiwgZmVkQXV0aFRva2VuOiBzdHJpbmcgfSB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3Rvcih7IHRkc1ZlcnNpb24sIHBhY2tldFNpemUsIGNsaWVudFByb2dWZXIsIGNsaWVudFBpZCwgY29ubmVjdGlvbklkLCBjbGllbnRUaW1lWm9uZSwgY2xpZW50TGNpZCB9OiBPcHRpb25zKSB7XG4gICAgdGhpcy50ZHNWZXJzaW9uID0gdGRzVmVyc2lvbjtcbiAgICB0aGlzLnBhY2tldFNpemUgPSBwYWNrZXRTaXplO1xuICAgIHRoaXMuY2xpZW50UHJvZ1ZlciA9IGNsaWVudFByb2dWZXI7XG4gICAgdGhpcy5jbGllbnRQaWQgPSBjbGllbnRQaWQ7XG4gICAgdGhpcy5jb25uZWN0aW9uSWQgPSBjb25uZWN0aW9uSWQ7XG4gICAgdGhpcy5jbGllbnRUaW1lWm9uZSA9IGNsaWVudFRpbWVab25lO1xuICAgIHRoaXMuY2xpZW50TGNpZCA9IGNsaWVudExjaWQ7XG5cbiAgICB0aGlzLnJlYWRPbmx5SW50ZW50ID0gZmFsc2U7XG4gICAgdGhpcy5pbml0RGJGYXRhbCA9IGZhbHNlO1xuXG4gICAgdGhpcy5mZWRBdXRoID0gdW5kZWZpbmVkO1xuXG4gICAgdGhpcy51c2VyTmFtZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnBhc3N3b3JkID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuc2VydmVyTmFtZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmFwcE5hbWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5ob3N0bmFtZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmxpYnJhcnlOYW1lID0gdW5kZWZpbmVkO1xuICAgIHRoaXMubGFuZ3VhZ2UgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5kYXRhYmFzZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNsaWVudElkID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuc3NwaSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmF0dGFjaERiRmlsZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNoYW5nZVBhc3N3b3JkID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgdG9CdWZmZXIoKSB7XG4gICAgY29uc3QgZml4ZWREYXRhID0gQnVmZmVyLmFsbG9jKDk0KTtcbiAgICBjb25zdCBidWZmZXJzOiBCdWZmZXJbXSA9IFtmaXhlZERhdGFdO1xuXG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgbGV0IGRhdGFPZmZzZXQgPSBmaXhlZERhdGEubGVuZ3RoO1xuXG4gICAgLy8gTGVuZ3RoOiA0LWJ5dGVcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MzJMRSgwLCBvZmZzZXQpO1xuXG4gICAgLy8gVERTVmVyc2lvbjogNC1ieXRlXG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDMyTEUodGhpcy50ZHNWZXJzaW9uLCBvZmZzZXQpO1xuXG4gICAgLy8gUGFja2V0U2l6ZTogNC1ieXRlXG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDMyTEUodGhpcy5wYWNrZXRTaXplLCBvZmZzZXQpO1xuXG4gICAgLy8gQ2xpZW50UHJvZ1ZlcjogNC1ieXRlXG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDMyTEUodGhpcy5jbGllbnRQcm9nVmVyLCBvZmZzZXQpO1xuXG4gICAgLy8gQ2xpZW50UElEOiA0LWJ5dGVcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MzJMRSh0aGlzLmNsaWVudFBpZCwgb2Zmc2V0KTtcblxuICAgIC8vIENvbm5lY3Rpb25JRDogNC1ieXRlXG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDMyTEUodGhpcy5jb25uZWN0aW9uSWQsIG9mZnNldCk7XG5cbiAgICAvLyBPcHRpb25GbGFnczE6IDEtYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQ4KHRoaXMuYnVpbGRPcHRpb25GbGFnczEoKSwgb2Zmc2V0KTtcblxuICAgIC8vIE9wdGlvbkZsYWdzMjogMS1ieXRlXG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDgodGhpcy5idWlsZE9wdGlvbkZsYWdzMigpLCBvZmZzZXQpO1xuXG4gICAgLy8gVHlwZUZsYWdzOiAxLWJ5dGVcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50OCh0aGlzLmJ1aWxkVHlwZUZsYWdzKCksIG9mZnNldCk7XG5cbiAgICAvLyBPcHRpb25GbGFnczM6IDEtYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQ4KHRoaXMuYnVpbGRPcHRpb25GbGFnczMoKSwgb2Zmc2V0KTtcblxuICAgIC8vIENsaWVudFRpbVpvbmU6IDQtYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZUludDMyTEUodGhpcy5jbGllbnRUaW1lWm9uZSwgb2Zmc2V0KTtcblxuICAgIC8vIENsaWVudExDSUQ6IDQtYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQzMkxFKHRoaXMuY2xpZW50TGNpZCwgb2Zmc2V0KTtcblxuICAgIC8vIGliSG9zdE5hbWU6IDItYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGRhdGFPZmZzZXQsIG9mZnNldCk7XG5cbiAgICAvLyBjY2hIb3N0TmFtZTogMi1ieXRlXG4gICAgaWYgKHRoaXMuaG9zdG5hbWUpIHtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHRoaXMuaG9zdG5hbWUsICd1Y3MyJyk7XG5cbiAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGJ1ZmZlci5sZW5ndGggLyAyLCBvZmZzZXQpO1xuICAgICAgZGF0YU9mZnNldCArPSBidWZmZXIubGVuZ3RoO1xuXG4gICAgICBidWZmZXJzLnB1c2goYnVmZmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoZGF0YU9mZnNldCwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICAvLyBpYlVzZXJOYW1lOiAyLWJ5dGVcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRShkYXRhT2Zmc2V0LCBvZmZzZXQpO1xuXG4gICAgLy8gY2NoVXNlck5hbWU6IDItYnl0ZVxuICAgIGlmICh0aGlzLnVzZXJOYW1lKSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbSh0aGlzLnVzZXJOYW1lLCAndWNzMicpO1xuXG4gICAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRShidWZmZXIubGVuZ3RoIC8gMiwgb2Zmc2V0KTtcbiAgICAgIGRhdGFPZmZzZXQgKz0gYnVmZmVyLmxlbmd0aDtcblxuICAgICAgYnVmZmVycy5wdXNoKGJ1ZmZlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKDAsIG9mZnNldCk7XG4gICAgfVxuXG4gICAgLy8gaWJQYXNzd29yZDogMi1ieXRlXG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoZGF0YU9mZnNldCwgb2Zmc2V0KTtcblxuICAgIC8vIGNjaFBhc3N3b3JkOiAyLWJ5dGVcbiAgICBpZiAodGhpcy5wYXNzd29yZCkge1xuICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20odGhpcy5wYXNzd29yZCwgJ3VjczInKTtcblxuICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoYnVmZmVyLmxlbmd0aCAvIDIsIG9mZnNldCk7XG4gICAgICBkYXRhT2Zmc2V0ICs9IGJ1ZmZlci5sZW5ndGg7XG5cbiAgICAgIGJ1ZmZlcnMucHVzaCh0aGlzLnNjcmFtYmxlUGFzc3dvcmQoYnVmZmVyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKDAsIG9mZnNldCk7XG4gICAgfVxuXG4gICAgLy8gaWJBcHBOYW1lOiAyLWJ5dGVcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRShkYXRhT2Zmc2V0LCBvZmZzZXQpO1xuXG4gICAgLy8gY2NoQXBwTmFtZTogMi1ieXRlXG4gICAgaWYgKHRoaXMuYXBwTmFtZSkge1xuICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20odGhpcy5hcHBOYW1lLCAndWNzMicpO1xuXG4gICAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRShidWZmZXIubGVuZ3RoIC8gMiwgb2Zmc2V0KTtcbiAgICAgIGRhdGFPZmZzZXQgKz0gYnVmZmVyLmxlbmd0aDtcblxuICAgICAgYnVmZmVycy5wdXNoKGJ1ZmZlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKDAsIG9mZnNldCk7XG4gICAgfVxuXG4gICAgLy8gaWJTZXJ2ZXJOYW1lOiAyLWJ5dGVcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRShkYXRhT2Zmc2V0LCBvZmZzZXQpO1xuXG4gICAgLy8gY2NoU2VydmVyTmFtZTogMi1ieXRlXG4gICAgaWYgKHRoaXMuc2VydmVyTmFtZSkge1xuICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20odGhpcy5zZXJ2ZXJOYW1lLCAndWNzMicpO1xuXG4gICAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRShidWZmZXIubGVuZ3RoIC8gMiwgb2Zmc2V0KTtcbiAgICAgIGRhdGFPZmZzZXQgKz0gYnVmZmVyLmxlbmd0aDtcblxuICAgICAgYnVmZmVycy5wdXNoKGJ1ZmZlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKDAsIG9mZnNldCk7XG4gICAgfVxuXG4gICAgLy8gKGliVW51c2VkIC8gaWJFeHRlbnNpb24pOiAyLWJ5dGVcbiAgICAvLyBGb3IgVERTIDcuNCssIHRoaXMgcG9pbnRzIHRvIGEgNC1ieXRlIG9mZnNldCAoaWJGZWF0dXJlRXh0TG9uZykgaW4gdGhlIGRhdGEgc2VjdGlvbi5cbiAgICAvLyBUaGUgYWN0dWFsIEZlYXR1cmVFeHQgZGF0YSBpcyBwbGFjZWQgYXQgdGhlIEVORCBvZiB0aGUgcGFja2V0IHBlciBNUy1URFMgc3BlYy5cbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRShkYXRhT2Zmc2V0LCBvZmZzZXQpO1xuXG4gICAgLy8gKGNjaFVudXNlZCAvIGNiRXh0ZW5zaW9uKTogMi1ieXRlXG4gICAgLy8gRm9yIFREUyA3LjQrLCB0aGlzIGlzIHRoZSBzaXplIG9mIHRoZSBpYkZlYXR1cmVFeHRMb25nIG9mZnNldCBwb2ludGVyICg0IGJ5dGVzKS5cbiAgICAvLyBUaGUgYWN0dWFsIEZlYXR1cmVFeHQgZGF0YSBpcyBhcHBlbmRlZCBhdCB0aGUgZW5kIG9mIHRoZSBwYWNrZXQsIG5vdCBoZXJlLlxuICAgIC8vIFdlJ2xsIHN0b3JlIHRoZSBGZWF0dXJlRXh0IGRhdGEgdG8gYXBwZW5kIGF0IHRoZSBlbmQgYWZ0ZXIgYWxsIG90aGVyIHZhcmlhYmxlIGRhdGEuXG4gICAgbGV0IGZlYXR1cmVFeHREYXRhOiBCdWZmZXIgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGV4dGVuc2lvbk9mZnNldEJ1ZmZlcjogQnVmZmVyIHwgdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLnRkc1ZlcnNpb24gPj0gdmVyc2lvbnNbJzdfNCddKSB7XG4gICAgICBmZWF0dXJlRXh0RGF0YSA9IHRoaXMuYnVpbGRGZWF0dXJlRXh0KCk7XG4gICAgICAvLyBjYkV4dGVuc2lvbiA9IDQgKHNpemUgb2YgdGhlIGliRmVhdHVyZUV4dExvbmcgcG9pbnRlciwgbm90IHRoZSBGZWF0dXJlRXh0IGRhdGEpXG4gICAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRSg0LCBvZmZzZXQpO1xuICAgICAgLy8gUmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIDQtYnl0ZSBvZmZzZXQgcG9pbnRlcjsgd2UnbGwgZmlsbCBpbiB0aGUgYWN0dWFsIG9mZnNldCBsYXRlclxuICAgICAgZXh0ZW5zaW9uT2Zmc2V0QnVmZmVyID0gQnVmZmVyLmFsbG9jKDQpO1xuICAgICAgYnVmZmVycy5wdXNoKGV4dGVuc2lvbk9mZnNldEJ1ZmZlcik7XG4gICAgICBkYXRhT2Zmc2V0ICs9IDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZvciBURFMgPCA3LjQsIHRoZXNlIGFyZSB1bnVzZWQgZmllbGRzXG4gICAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRSgwLCBvZmZzZXQpO1xuICAgIH1cblxuICAgIC8vIGliQ2x0SW50TmFtZTogMi1ieXRlXG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoZGF0YU9mZnNldCwgb2Zmc2V0KTtcblxuICAgIC8vIGNjaENsdEludE5hbWU6IDItYnl0ZVxuICAgIGlmICh0aGlzLmxpYnJhcnlOYW1lKSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbSh0aGlzLmxpYnJhcnlOYW1lLCAndWNzMicpO1xuXG4gICAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRShidWZmZXIubGVuZ3RoIC8gMiwgb2Zmc2V0KTtcbiAgICAgIGRhdGFPZmZzZXQgKz0gYnVmZmVyLmxlbmd0aDtcblxuICAgICAgYnVmZmVycy5wdXNoKGJ1ZmZlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKDAsIG9mZnNldCk7XG4gICAgfVxuXG4gICAgLy8gaWJMYW5ndWFnZTogMi1ieXRlXG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoZGF0YU9mZnNldCwgb2Zmc2V0KTtcblxuICAgIC8vIGNjaExhbmd1YWdlOiAyLWJ5dGVcbiAgICBpZiAodGhpcy5sYW5ndWFnZSkge1xuICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20odGhpcy5sYW5ndWFnZSwgJ3VjczInKTtcblxuICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoYnVmZmVyLmxlbmd0aCAvIDIsIG9mZnNldCk7XG4gICAgICBkYXRhT2Zmc2V0ICs9IGJ1ZmZlci5sZW5ndGg7XG5cbiAgICAgIGJ1ZmZlcnMucHVzaChidWZmZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRSgwLCBvZmZzZXQpO1xuICAgIH1cblxuICAgIC8vIGliRGF0YWJhc2U6IDItYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGRhdGFPZmZzZXQsIG9mZnNldCk7XG5cbiAgICAvLyBjY2hEYXRhYmFzZTogMi1ieXRlXG4gICAgaWYgKHRoaXMuZGF0YWJhc2UpIHtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHRoaXMuZGF0YWJhc2UsICd1Y3MyJyk7XG5cbiAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGJ1ZmZlci5sZW5ndGggLyAyLCBvZmZzZXQpO1xuICAgICAgZGF0YU9mZnNldCArPSBidWZmZXIubGVuZ3RoO1xuXG4gICAgICBidWZmZXJzLnB1c2goYnVmZmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoMCwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICAvLyBDbGllbnRJRDogNi1ieXRlXG4gICAgaWYgKHRoaXMuY2xpZW50SWQpIHtcbiAgICAgIHRoaXMuY2xpZW50SWQuY29weShmaXhlZERhdGEsIG9mZnNldCwgMCwgNik7XG4gICAgfVxuICAgIG9mZnNldCArPSA2O1xuXG4gICAgLy8gaWJTU1BJOiAyLWJ5dGVcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRShkYXRhT2Zmc2V0LCBvZmZzZXQpO1xuXG4gICAgLy8gY2JTU1BJOiAyLWJ5dGVcbiAgICBpZiAodGhpcy5zc3BpKSB7XG4gICAgICBpZiAodGhpcy5zc3BpLmxlbmd0aCA+IDY1NTM1KSB7XG4gICAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKDY1NTM1LCBvZmZzZXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUodGhpcy5zc3BpLmxlbmd0aCwgb2Zmc2V0KTtcbiAgICAgIH1cblxuICAgICAgYnVmZmVycy5wdXNoKHRoaXMuc3NwaSk7XG4gICAgICBkYXRhT2Zmc2V0ICs9IHRoaXMuc3NwaS5sZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKDAsIG9mZnNldCk7XG4gICAgfVxuXG4gICAgLy8gaWJBdGNoREJGaWxlOiAyLWJ5dGVcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRShkYXRhT2Zmc2V0LCBvZmZzZXQpO1xuXG4gICAgLy8gY2NoQXRjaERCRmlsZTogMi1ieXRlXG4gICAgaWYgKHRoaXMuYXR0YWNoRGJGaWxlKSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbSh0aGlzLmF0dGFjaERiRmlsZSwgJ3VjczInKTtcblxuICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoYnVmZmVyLmxlbmd0aCAvIDIsIG9mZnNldCk7XG4gICAgICBkYXRhT2Zmc2V0ICs9IGJ1ZmZlci5sZW5ndGg7XG5cbiAgICAgIGJ1ZmZlcnMucHVzaChidWZmZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRSgwLCBvZmZzZXQpO1xuICAgIH1cblxuICAgIC8vIGliQ2hhbmdlUGFzc3dvcmQ6IDItYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGRhdGFPZmZzZXQsIG9mZnNldCk7XG5cbiAgICAvLyBjY2hDaGFuZ2VQYXNzd29yZDogMi1ieXRlXG4gICAgaWYgKHRoaXMuY2hhbmdlUGFzc3dvcmQpIHtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHRoaXMuY2hhbmdlUGFzc3dvcmQsICd1Y3MyJyk7XG5cbiAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGJ1ZmZlci5sZW5ndGggLyAyLCBvZmZzZXQpO1xuICAgICAgZGF0YU9mZnNldCArPSBidWZmZXIubGVuZ3RoO1xuXG4gICAgICBidWZmZXJzLnB1c2goYnVmZmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoMCwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICAvLyBjYlNTUElMb25nOiA0LWJ5dGVcbiAgICBpZiAodGhpcy5zc3BpICYmIHRoaXMuc3NwaS5sZW5ndGggPiA2NTUzNSkge1xuICAgICAgZml4ZWREYXRhLndyaXRlVUludDMyTEUodGhpcy5zc3BpLmxlbmd0aCwgb2Zmc2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZml4ZWREYXRhLndyaXRlVUludDMyTEUoMCwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICAvLyBQZXIgTVMtVERTIHNwZWMsIEZlYXR1cmVFeHQgZGF0YSBtdXN0IGJlIGF0IHRoZSBFTkQgb2YgdGhlIHBhY2tldCxcbiAgICAvLyBhZnRlciBhbGwgb3RoZXIgdmFyaWFibGUtbGVuZ3RoIGRhdGEuXG4gICAgaWYgKGZlYXR1cmVFeHREYXRhICYmIGV4dGVuc2lvbk9mZnNldEJ1ZmZlcikge1xuICAgICAgLy8gVXBkYXRlIHRoZSBpYkZlYXR1cmVFeHRMb25nIG9mZnNldCB0byBwb2ludCB0byB3aGVyZSBGZWF0dXJlRXh0IHdpbGwgYmVcbiAgICAgIGV4dGVuc2lvbk9mZnNldEJ1ZmZlci53cml0ZVVJbnQzMkxFKGRhdGFPZmZzZXQsIDApO1xuICAgICAgLy8gQXBwZW5kIEZlYXR1cmVFeHQgZGF0YSBhdCB0aGUgZW5kXG4gICAgICBidWZmZXJzLnB1c2goZmVhdHVyZUV4dERhdGEpO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuY29uY2F0KGJ1ZmZlcnMpO1xuICAgIGRhdGEud3JpdGVVSW50MzJMRShkYXRhLmxlbmd0aCwgMCk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBidWlsZE9wdGlvbkZsYWdzMSgpIHtcbiAgICBsZXQgZmxhZ3MxID0gRkxBR1NfMS5FTkRJQU5fTElUVExFIHwgRkxBR1NfMS5DSEFSU0VUX0FTQ0lJIHwgRkxBR1NfMS5GTE9BVF9JRUVFXzc1NCB8IEZMQUdTXzEuQkNQX0RVTVBMT0FEX09GRiB8IEZMQUdTXzEuVVNFX0RCX09GRiB8IEZMQUdTXzEuU0VUX0xBTkdfV0FSTl9PTjtcbiAgICBpZiAodGhpcy5pbml0RGJGYXRhbCkge1xuICAgICAgZmxhZ3MxIHw9IEZMQUdTXzEuSU5JVF9EQl9GQVRBTDtcbiAgICB9IGVsc2Uge1xuICAgICAgZmxhZ3MxIHw9IEZMQUdTXzEuSU5JVF9EQl9XQVJOO1xuICAgIH1cbiAgICByZXR1cm4gZmxhZ3MxO1xuICB9XG5cbiAgYnVpbGRGZWF0dXJlRXh0KCkge1xuICAgIGNvbnN0IGJ1ZmZlcnMgPSBbXTtcblxuICAgIGNvbnN0IGZlZEF1dGggPSB0aGlzLmZlZEF1dGg7XG4gICAgaWYgKGZlZEF1dGgpIHtcbiAgICAgIHN3aXRjaCAoZmVkQXV0aC50eXBlKSB7XG4gICAgICAgIGNhc2UgJ0FEQUwnOlxuICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvYyg3KTtcbiAgICAgICAgICBidWZmZXIud3JpdGVVSW50OChGRURBVVRIX09QVElPTlMuRkVBVFVSRV9JRCwgMCk7XG4gICAgICAgICAgYnVmZmVyLndyaXRlVUludDMyTEUoMiwgMSk7XG4gICAgICAgICAgYnVmZmVyLndyaXRlVUludDgoKEZFREFVVEhfT1BUSU9OUy5MSUJSQVJZX0FEQUwgPDwgMSkgfCAoZmVkQXV0aC5lY2hvID8gRkVEQVVUSF9PUFRJT05TLkZFREFVVEhfWUVTX0VDSE8gOiBGRURBVVRIX09QVElPTlMuRkVEQVVUSF9OT19FQ0hPKSwgNSk7XG4gICAgICAgICAgYnVmZmVyLndyaXRlVUludDgoZmVkQXV0aC53b3JrZmxvdyA9PT0gJ2ludGVncmF0ZWQnID8gMHgwMiA6IEZFREFVVEhfT1BUSU9OUy5BREFMX1dPUktGTE9XX1VTRVJfUEFTUywgNik7XG4gICAgICAgICAgYnVmZmVycy5wdXNoKGJ1ZmZlcik7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnU0VDVVJJVFlUT0tFTic6XG4gICAgICAgICAgY29uc3QgdG9rZW4gPSBCdWZmZXIuZnJvbShmZWRBdXRoLmZlZEF1dGhUb2tlbiwgJ3VjczInKTtcbiAgICAgICAgICBjb25zdCBidWYgPSBCdWZmZXIuYWxsb2MoMTApO1xuXG4gICAgICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICAgICAgb2Zmc2V0ID0gYnVmLndyaXRlVUludDgoRkVEQVVUSF9PUFRJT05TLkZFQVRVUkVfSUQsIG9mZnNldCk7XG4gICAgICAgICAgb2Zmc2V0ID0gYnVmLndyaXRlVUludDMyTEUodG9rZW4ubGVuZ3RoICsgNCArIDEsIG9mZnNldCk7XG4gICAgICAgICAgb2Zmc2V0ID0gYnVmLndyaXRlVUludDgoKEZFREFVVEhfT1BUSU9OUy5MSUJSQVJZX1NFQ1VSSVRZVE9LRU4gPDwgMSkgfCAoZmVkQXV0aC5lY2hvID8gRkVEQVVUSF9PUFRJT05TLkZFREFVVEhfWUVTX0VDSE8gOiBGRURBVVRIX09QVElPTlMuRkVEQVVUSF9OT19FQ0hPKSwgb2Zmc2V0KTtcbiAgICAgICAgICBidWYud3JpdGVJbnQzMkxFKHRva2VuLmxlbmd0aCwgb2Zmc2V0KTtcblxuICAgICAgICAgIGJ1ZmZlcnMucHVzaChidWYpO1xuICAgICAgICAgIGJ1ZmZlcnMucHVzaCh0b2tlbik7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTaWduYWwgVVRGLTggc3VwcG9ydDogVmFsdWUgMHgwQSwgYml0IDAgbXVzdCBiZSBzZXQgdG8gMS4gQWRkZWQgaW4gVERTIDcuNC5cbiAgICBjb25zdCBVVEY4X1NVUFBPUlRfRkVBVFVSRV9JRCA9IDB4MGE7XG4gICAgY29uc3QgVVRGOF9TVVBQT1JUX0NMSUVOVF9TVVBQT1JUU19VVEY4ID0gMHgwMTtcbiAgICBjb25zdCBidWYgPSBCdWZmZXIuYWxsb2MoNik7XG4gICAgYnVmLndyaXRlVUludDgoVVRGOF9TVVBQT1JUX0ZFQVRVUkVfSUQsIDApO1xuICAgIGJ1Zi53cml0ZVVJbnQzMkxFKDEsIDEpO1xuICAgIGJ1Zi53cml0ZVVJbnQ4KFVURjhfU1VQUE9SVF9DTElFTlRfU1VQUE9SVFNfVVRGOCwgNSk7XG4gICAgYnVmZmVycy5wdXNoKGJ1Zik7XG5cbiAgICBidWZmZXJzLnB1c2goQnVmZmVyLmZyb20oW0ZFQVRVUkVfRVhUX1RFUk1JTkFUT1JdKSk7XG5cbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChidWZmZXJzKTtcbiAgfVxuXG4gIGJ1aWxkT3B0aW9uRmxhZ3MyKCkge1xuICAgIGxldCBmbGFnczIgPSBGTEFHU18yLklOSVRfTEFOR19XQVJOIHwgRkxBR1NfMi5PREJDX09GRiB8IEZMQUdTXzIuVVNFUl9OT1JNQUw7XG4gICAgaWYgKHRoaXMuc3NwaSkge1xuICAgICAgZmxhZ3MyIHw9IEZMQUdTXzIuSU5URUdSQVRFRF9TRUNVUklUWV9PTjtcbiAgICB9IGVsc2Uge1xuICAgICAgZmxhZ3MyIHw9IEZMQUdTXzIuSU5URUdSQVRFRF9TRUNVUklUWV9PRkY7XG4gICAgfVxuICAgIHJldHVybiBmbGFnczI7XG4gIH1cblxuICBidWlsZFR5cGVGbGFncygpIHtcbiAgICBsZXQgdHlwZUZsYWdzID0gVFlQRV9GTEFHUy5TUUxfREZMVCB8IFRZUEVfRkxBR1MuT0xFREJfT0ZGO1xuICAgIGlmICh0aGlzLnJlYWRPbmx5SW50ZW50KSB7XG4gICAgICB0eXBlRmxhZ3MgfD0gVFlQRV9GTEFHUy5SRUFEX09OTFlfSU5URU5UO1xuICAgIH0gZWxzZSB7XG4gICAgICB0eXBlRmxhZ3MgfD0gVFlQRV9GTEFHUy5SRUFEX1dSSVRFX0lOVEVOVDtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVGbGFncztcbiAgfVxuXG4gIGJ1aWxkT3B0aW9uRmxhZ3MzKCkge1xuICAgIHJldHVybiBGTEFHU18zLkNIQU5HRV9QQVNTV09SRF9OTyB8IEZMQUdTXzMuVU5LTk9XTl9DT0xMQVRJT05fSEFORExJTkcgfCBGTEFHU18zLkVYVEVOU0lPTl9VU0VEO1xuICB9XG5cbiAgc2NyYW1ibGVQYXNzd29yZChwYXNzd29yZDogQnVmZmVyKSB7XG4gICAgZm9yIChsZXQgYiA9IDAsIGxlbiA9IHBhc3N3b3JkLmxlbmd0aDsgYiA8IGxlbjsgYisrKSB7XG4gICAgICBsZXQgYnl0ZSA9IHBhc3N3b3JkW2JdO1xuICAgICAgY29uc3QgbG93TmliYmxlID0gYnl0ZSAmIDB4MGY7XG4gICAgICBjb25zdCBoaWdoTmliYmxlID0gYnl0ZSA+PiA0O1xuICAgICAgYnl0ZSA9IChsb3dOaWJibGUgPDwgNCkgfCBoaWdoTmliYmxlO1xuICAgICAgYnl0ZSA9IGJ5dGUgXiAweGE1O1xuICAgICAgcGFzc3dvcmRbYl0gPSBieXRlO1xuICAgIH1cbiAgICByZXR1cm4gcGFzc3dvcmQ7XG4gIH1cblxuICB0b1N0cmluZyhpbmRlbnQgPSAnJykge1xuICAgIHJldHVybiBpbmRlbnQgKyAnTG9naW43IC0gJyArXG4gICAgICBzcHJpbnRmKCdURFM6MHglMDhYLCBQYWNrZXRTaXplOjB4JTA4WCwgQ2xpZW50UHJvZ1ZlcjoweCUwOFgsIENsaWVudFBJRDoweCUwOFgsIENvbm5lY3Rpb25JRDoweCUwOFgnLFxuICAgICAgICAgICAgICB0aGlzLnRkc1ZlcnNpb24sIHRoaXMucGFja2V0U2l6ZSwgdGhpcy5jbGllbnRQcm9nVmVyLCB0aGlzLmNsaWVudFBpZCwgdGhpcy5jb25uZWN0aW9uSWRcbiAgICAgICkgKyAnXFxuJyArIGluZGVudCArICcgICAgICAgICAnICtcbiAgICAgIHNwcmludGYoJ0ZsYWdzMToweCUwMlgsIEZsYWdzMjoweCUwMlgsIFR5cGVGbGFnczoweCUwMlgsIEZsYWdzMzoweCUwMlgsIENsaWVudFRpbWV6b25lOiVkLCBDbGllbnRMQ0lEOjB4JTA4WCcsXG4gICAgICAgICAgICAgIHRoaXMuYnVpbGRPcHRpb25GbGFnczEoKSwgdGhpcy5idWlsZE9wdGlvbkZsYWdzMigpLCB0aGlzLmJ1aWxkVHlwZUZsYWdzKCksIHRoaXMuYnVpbGRPcHRpb25GbGFnczMoKSwgdGhpcy5jbGllbnRUaW1lWm9uZSwgdGhpcy5jbGllbnRMY2lkXG4gICAgICApICsgJ1xcbicgKyBpbmRlbnQgKyAnICAgICAgICAgJyArXG4gICAgICBzcHJpbnRmKFwiSG9zdG5hbWU6JyVzJywgVXNlcm5hbWU6JyVzJywgUGFzc3dvcmQ6JyVzJywgQXBwTmFtZTonJXMnLCBTZXJ2ZXJOYW1lOiclcycsIExpYnJhcnlOYW1lOiclcydcIixcbiAgICAgICAgICAgICAgdGhpcy5ob3N0bmFtZSwgdGhpcy51c2VyTmFtZSwgdGhpcy5wYXNzd29yZCwgdGhpcy5hcHBOYW1lLCB0aGlzLnNlcnZlck5hbWUsIHRoaXMubGlicmFyeU5hbWVcbiAgICAgICkgKyAnXFxuJyArIGluZGVudCArICcgICAgICAgICAnICtcbiAgICAgIHNwcmludGYoXCJMYW5ndWFnZTonJXMnLCBEYXRhYmFzZTonJXMnLCBTU1BJOiclcycsIEF0dGFjaERiRmlsZTonJXMnLCBDaGFuZ2VQYXNzd29yZDonJXMnXCIsXG4gICAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2UsIHRoaXMuZGF0YWJhc2UsIHRoaXMuc3NwaSwgdGhpcy5hdHRhY2hEYkZpbGUsIHRoaXMuY2hhbmdlUGFzc3dvcmRcbiAgICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTG9naW43UGF5bG9hZDtcbm1vZHVsZS5leHBvcnRzID0gTG9naW43UGF5bG9hZDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsVUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsWUFBQSxHQUFBRCxPQUFBO0FBRUEsTUFBTUUsT0FBTyxHQUFHO0VBQ2RDLGFBQWEsRUFBRSxJQUFJO0VBQ25CQyxVQUFVLEVBQUUsSUFBSTtFQUNoQkMsYUFBYSxFQUFFLElBQUk7RUFDbkJDLGNBQWMsRUFBRSxJQUFJO0VBQ3BCQyxjQUFjLEVBQUUsSUFBSTtF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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login7-payload.js","names":["_sprintfJs","require","_tdsVersions","FLAGS_1","ENDIAN_LITTLE","ENDIAN_BIG","CHARSET_ASCII","CHARSET_EBCDIC","FLOAT_IEEE_754","FLOAT_VAX","FLOAT_ND5000","BCP_DUMPLOAD_ON","BCP_DUMPLOAD_OFF","USE_DB_ON","USE_DB_OFF","INIT_DB_WARN","INIT_DB_FATAL","SET_LANG_WARN_OFF","SET_LANG_WARN_ON","FLAGS_2","INIT_LANG_WARN","INIT_LANG_FATAL","ODBC_OFF","ODBC_ON","F_TRAN_BOUNDARY","F_CACHE_CONNECT","USER_NORMAL","USER_SERVER","USER_REMUSER","USER_SQLREPL","INTEGRATED_SECURITY_OFF","INTEGRATED_SECURITY_ON","TYPE_FLAGS","SQL_DFLT","SQL_TSQL","OLEDB_OFF","OLEDB_ON","READ_WRITE_INTENT","READ_ONLY_INTENT","FLAGS_3","CHANGE_PASSWORD_NO","CHANGE_PASSWORD_YES","BINARY_XML","SPAWN_USER_INSTANCE","UNKNOWN_COLLATION_HANDLING","EXTENSION_USED","FEDAUTH_OPTIONS","FEATURE_ID","LIBRARY_SECURITYTOKEN","LIBRARY_ADAL","FEDAUTH_YES_ECHO","FEDAUTH_NO_ECHO","ADAL_WORKFLOW_USER_PASS","ADAL_WORKFLOW_INTEGRATED","FEATURE_EXT_TERMINATOR","Login7Payload","constructor","tdsVersion","packetSize","clientProgVer","clientPid","connectionId","clientTimeZone","clientLcid","readOnlyIntent","initDbFatal","fedAuth","undefined","userName","password","serverName","appName","hostname","libraryName","language","database","clientId","sspi","attachDbFile","changePassword","toBuffer","fixedData","Buffer","alloc","buffers","offset","dataOffset","length","writeUInt32LE","writeUInt8","buildOptionFlags1","buildOptionFlags2","buildTypeFlags","buildOptionFlags3","writeInt32LE","writeUInt16LE","buffer","from","push","scramblePassword","featureExtData","extensionOffsetBuffer","versions","buildFeatureExt","copy","data","concat","flags1","type","echo","workflow","token","fedAuthToken","buf","UTF8_SUPPORT_FEATURE_ID","UTF8_SUPPORT_CLIENT_SUPPORTS_UTF8","flags2","typeFlags","b","len","byte","lowNibble","highNibble","toString","indent","sprintf","_default","exports","default","module"],"sources":["../src/login7-payload.ts"],"sourcesContent":["import { sprintf } from 'sprintf-js';\nimport { versions } from './tds-versions';\n\nconst FLAGS_1 = {\n ENDIAN_LITTLE: 0x00,\n ENDIAN_BIG: 0x01,\n CHARSET_ASCII: 0x00,\n CHARSET_EBCDIC: 0x02,\n FLOAT_IEEE_754: 0x00,\n FLOAT_VAX: 0x04,\n FLOAT_ND5000: 0x08,\n BCP_DUMPLOAD_ON: 0x00,\n BCP_DUMPLOAD_OFF: 0x10,\n USE_DB_ON: 0x00,\n USE_DB_OFF: 0x20,\n INIT_DB_WARN: 0x00,\n INIT_DB_FATAL: 0x40,\n SET_LANG_WARN_OFF: 0x00,\n SET_LANG_WARN_ON: 0x80\n};\n\nconst FLAGS_2 = {\n INIT_LANG_WARN: 0x00,\n INIT_LANG_FATAL: 0x01,\n ODBC_OFF: 0x00,\n ODBC_ON: 0x02,\n F_TRAN_BOUNDARY: 0x04,\n F_CACHE_CONNECT: 0x08,\n USER_NORMAL: 0x00,\n USER_SERVER: 0x10,\n USER_REMUSER: 0x20,\n USER_SQLREPL: 0x40,\n INTEGRATED_SECURITY_OFF: 0x00,\n INTEGRATED_SECURITY_ON: 0x80\n};\n\nconst TYPE_FLAGS = {\n SQL_DFLT: 0x00,\n SQL_TSQL: 0x08,\n OLEDB_OFF: 0x00,\n OLEDB_ON: 0x10,\n READ_WRITE_INTENT: 0x00,\n READ_ONLY_INTENT: 0x20\n};\n\nconst FLAGS_3 = {\n CHANGE_PASSWORD_NO: 0x00,\n CHANGE_PASSWORD_YES: 0x01,\n BINARY_XML: 0x02,\n SPAWN_USER_INSTANCE: 0x04,\n UNKNOWN_COLLATION_HANDLING: 0x08,\n EXTENSION_USED: 0x10\n};\n\nconst FEDAUTH_OPTIONS = {\n FEATURE_ID: 0x02,\n LIBRARY_SECURITYTOKEN: 0x01,\n LIBRARY_ADAL: 0x02,\n FEDAUTH_YES_ECHO: 0x01,\n FEDAUTH_NO_ECHO: 0x00,\n ADAL_WORKFLOW_USER_PASS: 0x01,\n ADAL_WORKFLOW_INTEGRATED: 0x02\n};\n\nconst FEATURE_EXT_TERMINATOR = 0xFF;\n\ninterface Options {\n tdsVersion: number;\n packetSize: number;\n clientProgVer: number;\n clientPid: number;\n connectionId: number;\n clientTimeZone: number;\n clientLcid: number;\n}\n\n/*\n s2.2.6.3\n */\nclass Login7Payload {\n declare tdsVersion: number;\n declare packetSize: number;\n declare clientProgVer: number;\n declare clientPid: number;\n declare connectionId: number;\n declare clientTimeZone: number;\n declare clientLcid: number;\n\n declare readOnlyIntent: boolean;\n declare initDbFatal: boolean;\n\n declare userName: string | undefined;\n declare password: string | undefined;\n declare serverName: string | undefined;\n declare appName: string | undefined;\n declare hostname: string | undefined;\n declare libraryName: string | undefined;\n declare language: string | undefined;\n declare database: string | undefined;\n declare clientId: Buffer | undefined;\n declare sspi: Buffer | undefined;\n declare attachDbFile: string | undefined;\n declare changePassword: string | undefined;\n\n declare fedAuth: { type: 'ADAL', echo: boolean, workflow: 'default' | 'integrated' } | { type: 'SECURITYTOKEN', echo: boolean, fedAuthToken: string } | undefined;\n\n constructor({ tdsVersion, packetSize, clientProgVer, clientPid, connectionId, clientTimeZone, clientLcid }: Options) {\n this.tdsVersion = tdsVersion;\n this.packetSize = packetSize;\n this.clientProgVer = clientProgVer;\n this.clientPid = clientPid;\n this.connectionId = connectionId;\n this.clientTimeZone = clientTimeZone;\n this.clientLcid = clientLcid;\n\n this.readOnlyIntent = false;\n this.initDbFatal = false;\n\n this.fedAuth = undefined;\n\n this.userName = undefined;\n this.password = undefined;\n this.serverName = undefined;\n this.appName = undefined;\n this.hostname = undefined;\n this.libraryName = undefined;\n this.language = undefined;\n this.database = undefined;\n this.clientId = undefined;\n this.sspi = undefined;\n this.attachDbFile = undefined;\n this.changePassword = undefined;\n }\n\n toBuffer() {\n const fixedData = Buffer.alloc(94);\n const buffers: Buffer[] = [fixedData];\n\n let offset = 0;\n let dataOffset = fixedData.length;\n\n // Length: 4-byte\n offset = fixedData.writeUInt32LE(0, offset);\n\n // TDSVersion: 4-byte\n offset = fixedData.writeUInt32LE(this.tdsVersion, offset);\n\n // PacketSize: 4-byte\n offset = fixedData.writeUInt32LE(this.packetSize, offset);\n\n // ClientProgVer: 4-byte\n offset = fixedData.writeUInt32LE(this.clientProgVer, offset);\n\n // ClientPID: 4-byte\n offset = fixedData.writeUInt32LE(this.clientPid, offset);\n\n // ConnectionID: 4-byte\n offset = fixedData.writeUInt32LE(this.connectionId, offset);\n\n // OptionFlags1: 1-byte\n offset = fixedData.writeUInt8(this.buildOptionFlags1(), offset);\n\n // OptionFlags2: 1-byte\n offset = fixedData.writeUInt8(this.buildOptionFlags2(), offset);\n\n // TypeFlags: 1-byte\n offset = fixedData.writeUInt8(this.buildTypeFlags(), offset);\n\n // OptionFlags3: 1-byte\n offset = fixedData.writeUInt8(this.buildOptionFlags3(), offset);\n\n // ClientTimZone: 4-byte\n offset = fixedData.writeInt32LE(this.clientTimeZone, offset);\n\n // ClientLCID: 4-byte\n offset = fixedData.writeUInt32LE(this.clientLcid, offset);\n\n // ibHostName: 2-byte\n offset = fixedData.writeUInt16LE(dataOffset, offset);\n\n // cchHostName: 2-byte\n if (this.hostname) {\n const buffer = Buffer.from(this.hostname, 'ucs2');\n\n offset = fixedData.writeUInt16LE(buffer.length / 2, offset);\n dataOffset += buffer.length;\n\n buffers.push(buffer);\n } else {\n offset = fixedData.writeUInt16LE(dataOffset, offset);\n }\n\n // ibUserName: 2-byte\n offset = fixedData.writeUInt16LE(dataOffset, offset);\n\n // cchUserName: 2-byte\n if (this.userName) {\n const buffer = Buffer.from(this.userName, 'ucs2');\n\n offset = fixedData.writeUInt16LE(buffer.length / 2, offset);\n dataOffset += buffer.length;\n\n buffers.push(buffer);\n } else {\n offset = fixedData.writeUInt16LE(0, offset);\n }\n\n // ibPassword: 2-byte\n offset = fixedData.writeUInt16LE(dataOffset, offset);\n\n // cchPassword: 2-byte\n if (this.password) {\n const buffer = Buffer.from(this.password, 'ucs2');\n\n offset = fixedData.writeUInt16LE(buffer.length / 2, offset);\n dataOffset += buffer.length;\n\n buffers.push(this.scramblePassword(buffer));\n } else {\n offset = fixedData.writeUInt16LE(0, offset);\n }\n\n // ibAppName: 2-byte\n offset = fixedData.writeUInt16LE(dataOffset, offset);\n\n // cchAppName: 2-byte\n if (this.appName) {\n const buffer = Buffer.from(this.appName, 'ucs2');\n\n offset = fixedData.writeUInt16LE(buffer.length / 2, offset);\n dataOffset += buffer.length;\n\n buffers.push(buffer);\n } else {\n offset = fixedData.writeUInt16LE(0, offset);\n }\n\n // ibServerName: 2-byte\n offset = fixedData.writeUInt16LE(dataOffset, offset);\n\n // cchServerName: 2-byte\n if (this.serverName) {\n const buffer = Buffer.from(this.serverName, 'ucs2');\n\n offset = fixedData.writeUInt16LE(buffer.length / 2, offset);\n dataOffset += buffer.length;\n\n buffers.push(buffer);\n } else {\n offset = fixedData.writeUInt16LE(0, offset);\n }\n\n // (ibUnused / ibExtension): 2-byte\n // For TDS 7.4+, this points to a 4-byte offset (ibFeatureExtLong) in the data section.\n // The actual FeatureExt data is placed at the END of the packet per MS-TDS spec.\n offset = fixedData.writeUInt16LE(dataOffset, offset);\n\n // (cchUnused / cbExtension): 2-byte\n // For TDS 7.4+, this is the size of the ibFeatureExtLong offset pointer (4 bytes).\n // The actual FeatureExt data is appended at the end of the packet, not here.\n // We'll store the FeatureExt data to append at the end after all other variable data.\n let featureExtData: Buffer | undefined;\n let extensionOffsetBuffer: Buffer | undefined;\n if (this.tdsVersion >= versions['7_4']) {\n featureExtData = this.buildFeatureExt();\n // cbExtension = 4 (size of the ibFeatureExtLong pointer, not the FeatureExt data)\n offset = fixedData.writeUInt16LE(4, offset);\n // Reserve space for the 4-byte offset pointer; we'll fill in the actual offset later\n extensionOffsetBuffer = Buffer.alloc(4);\n buffers.push(extensionOffsetBuffer);\n dataOffset += 4;\n } else {\n // For TDS < 7.4, these are unused fields\n offset = fixedData.writeUInt16LE(0, offset);\n }\n\n // ibCltIntName: 2-byte\n offset = fixedData.writeUInt16LE(dataOffset, offset);\n\n // cchCltIntName: 2-byte\n if (this.libraryName) {\n const buffer = Buffer.from(this.libraryName, 'ucs2');\n\n offset = fixedData.writeUInt16LE(buffer.length / 2, offset);\n dataOffset += buffer.length;\n\n buffers.push(buffer);\n } else {\n offset = fixedData.writeUInt16LE(0, offset);\n }\n\n // ibLanguage: 2-byte\n offset = fixedData.writeUInt16LE(dataOffset, offset);\n\n // cchLanguage: 2-byte\n if (this.language) {\n const buffer = Buffer.from(this.language, 'ucs2');\n\n offset = fixedData.writeUInt16LE(buffer.length / 2, offset);\n dataOffset += buffer.length;\n\n buffers.push(buffer);\n } else {\n offset = fixedData.writeUInt16LE(0, offset);\n }\n\n // ibDatabase: 2-byte\n offset = fixedData.writeUInt16LE(dataOffset, offset);\n\n // cchDatabase: 2-byte\n if (this.database) {\n const buffer = Buffer.from(this.database, 'ucs2');\n\n offset = fixedData.writeUInt16LE(buffer.length / 2, offset);\n dataOffset += buffer.length;\n\n buffers.push(buffer);\n } else {\n offset = fixedData.writeUInt16LE(0, offset);\n }\n\n // ClientID: 6-byte\n if (this.clientId) {\n this.clientId.copy(fixedData, offset, 0, 6);\n }\n offset += 6;\n\n // ibSSPI: 2-byte\n offset = fixedData.writeUInt16LE(dataOffset, offset);\n\n // cbSSPI: 2-byte\n if (this.sspi) {\n if (this.sspi.length > 65535) {\n offset = fixedData.writeUInt16LE(65535, offset);\n } else {\n offset = fixedData.writeUInt16LE(this.sspi.length, offset);\n }\n\n buffers.push(this.sspi);\n dataOffset += this.sspi.length;\n } else {\n offset = fixedData.writeUInt16LE(0, offset);\n }\n\n // ibAtchDBFile: 2-byte\n offset = fixedData.writeUInt16LE(dataOffset, offset);\n\n // cchAtchDBFile: 2-byte\n if (this.attachDbFile) {\n const buffer = Buffer.from(this.attachDbFile, 'ucs2');\n\n offset = fixedData.writeUInt16LE(buffer.length / 2, offset);\n dataOffset += buffer.length;\n\n buffers.push(buffer);\n } else {\n offset = fixedData.writeUInt16LE(0, offset);\n }\n\n // ibChangePassword: 2-byte\n offset = fixedData.writeUInt16LE(dataOffset, offset);\n\n // cchChangePassword: 2-byte\n if (this.changePassword) {\n const buffer = Buffer.from(this.changePassword, 'ucs2');\n\n offset = fixedData.writeUInt16LE(buffer.length / 2, offset);\n dataOffset += buffer.length;\n\n buffers.push(buffer);\n } else {\n offset = fixedData.writeUInt16LE(0, offset);\n }\n\n // cbSSPILong: 4-byte\n if (this.sspi && this.sspi.length > 65535) {\n fixedData.writeUInt32LE(this.sspi.length, offset);\n } else {\n fixedData.writeUInt32LE(0, offset);\n }\n\n // Per MS-TDS spec, FeatureExt data must be at the END of the packet,\n // after all other variable-length data.\n if (featureExtData && extensionOffsetBuffer) {\n // Update the ibFeatureExtLong offset to point to where FeatureExt will be\n extensionOffsetBuffer.writeUInt32LE(dataOffset, 0);\n // Append FeatureExt data at the end\n buffers.push(featureExtData);\n }\n\n const data = Buffer.concat(buffers);\n data.writeUInt32LE(data.length, 0);\n return data;\n }\n\n buildOptionFlags1() {\n 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;\n if (this.initDbFatal) {\n flags1 |= FLAGS_1.INIT_DB_FATAL;\n } else {\n flags1 |= FLAGS_1.INIT_DB_WARN;\n }\n return flags1;\n }\n\n buildFeatureExt() {\n const buffers = [];\n\n const fedAuth = this.fedAuth;\n if (fedAuth) {\n switch (fedAuth.type) {\n case 'ADAL':\n const buffer = Buffer.alloc(7);\n buffer.writeUInt8(FEDAUTH_OPTIONS.FEATURE_ID, 0);\n buffer.writeUInt32LE(2, 1);\n buffer.writeUInt8((FEDAUTH_OPTIONS.LIBRARY_ADAL << 1) | (fedAuth.echo ? FEDAUTH_OPTIONS.FEDAUTH_YES_ECHO : FEDAUTH_OPTIONS.FEDAUTH_NO_ECHO), 5);\n buffer.writeUInt8(fedAuth.workflow === 'integrated' ? 0x02 : FEDAUTH_OPTIONS.ADAL_WORKFLOW_USER_PASS, 6);\n buffers.push(buffer);\n break;\n\n case 'SECURITYTOKEN':\n const token = Buffer.from(fedAuth.fedAuthToken, 'ucs2');\n const buf = Buffer.alloc(10);\n\n let offset = 0;\n offset = buf.writeUInt8(FEDAUTH_OPTIONS.FEATURE_ID, offset);\n offset = buf.writeUInt32LE(token.length + 4 + 1, offset);\n offset = buf.writeUInt8((FEDAUTH_OPTIONS.LIBRARY_SECURITYTOKEN << 1) | (fedAuth.echo ? FEDAUTH_OPTIONS.FEDAUTH_YES_ECHO : FEDAUTH_OPTIONS.FEDAUTH_NO_ECHO), offset);\n buf.writeInt32LE(token.length, offset);\n\n buffers.push(buf);\n buffers.push(token);\n\n break;\n }\n }\n\n // Signal UTF-8 support: Value 0x0A, bit 0 must be set to 1. Added in TDS 7.4.\n const UTF8_SUPPORT_FEATURE_ID = 0x0a;\n const UTF8_SUPPORT_CLIENT_SUPPORTS_UTF8 = 0x01;\n const buf = Buffer.alloc(6);\n buf.writeUInt8(UTF8_SUPPORT_FEATURE_ID, 0);\n buf.writeUInt32LE(1, 1);\n buf.writeUInt8(UTF8_SUPPORT_CLIENT_SUPPORTS_UTF8, 5);\n buffers.push(buf);\n\n buffers.push(Buffer.from([FEATURE_EXT_TERMINATOR]));\n\n return Buffer.concat(buffers);\n }\n\n buildOptionFlags2() {\n let flags2 = FLAGS_2.INIT_LANG_WARN | FLAGS_2.ODBC_OFF | FLAGS_2.USER_NORMAL;\n if (this.sspi) {\n flags2 |= FLAGS_2.INTEGRATED_SECURITY_ON;\n } else {\n flags2 |= FLAGS_2.INTEGRATED_SECURITY_OFF;\n }\n return flags2;\n }\n\n buildTypeFlags() {\n let typeFlags = TYPE_FLAGS.SQL_DFLT | TYPE_FLAGS.OLEDB_OFF;\n if (this.readOnlyIntent) {\n typeFlags |= TYPE_FLAGS.READ_ONLY_INTENT;\n } else {\n typeFlags |= TYPE_FLAGS.READ_WRITE_INTENT;\n }\n return typeFlags;\n }\n\n buildOptionFlags3() {\n return FLAGS_3.CHANGE_PASSWORD_NO | FLAGS_3.UNKNOWN_COLLATION_HANDLING | FLAGS_3.EXTENSION_USED;\n }\n\n scramblePassword(password: Buffer) {\n for (let b = 0, len = password.length; b < len; b++) {\n let byte = password[b];\n const lowNibble = byte & 0x0f;\n const highNibble = byte >> 4;\n byte = (lowNibble << 4) | highNibble;\n byte = byte ^ 0xa5;\n password[b] = byte;\n }\n return password;\n }\n\n toString(indent = '') {\n return indent + 'Login7 - ' +\n sprintf('TDS:0x%08X, PacketSize:0x%08X, ClientProgVer:0x%08X, ClientPID:0x%08X, ConnectionID:0x%08X',\n this.tdsVersion, this.packetSize, this.clientProgVer, this.clientPid, this.connectionId\n ) + '\\n' + indent + ' ' +\n sprintf('Flags1:0x%02X, Flags2:0x%02X, TypeFlags:0x%02X, Flags3:0x%02X, ClientTimezone:%d, ClientLCID:0x%08X',\n this.buildOptionFlags1(), this.buildOptionFlags2(), this.buildTypeFlags(), this.buildOptionFlags3(), this.clientTimeZone, this.clientLcid\n ) + '\\n' + indent + ' ' +\n sprintf(\"Hostname:'%s', Username:'%s', Password:'%s', AppName:'%s', ServerName:'%s', LibraryName:'%s'\",\n this.hostname, this.userName, this.password, this.appName, this.serverName, this.libraryName\n ) + '\\n' + indent + ' ' +\n sprintf(\"Language:'%s', Database:'%s', SSPI:'%s', AttachDbFile:'%s', ChangePassword:'%s'\",\n this.language, this.database, this.sspi, this.attachDbFile, this.changePassword\n );\n }\n}\n\nexport default Login7Payload;\nmodule.exports = Login7Payload;\n"],"mappings":"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","ignoreList":[]}
@@ -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;