tedious-fabric 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (304) hide show
  1. package/CLAUDE.md +91 -0
  2. package/LICENSE +21 -0
  3. package/README.md +67 -0
  4. package/appveyor.yml +67 -0
  5. package/eslint.config.mjs +314 -0
  6. package/lib/all-headers.d.ts +2 -0
  7. package/lib/all-headers.js +24 -0
  8. package/lib/all-headers.js.map +1 -0
  9. package/lib/always-encrypted/aead-aes-256-cbc-hmac-algorithm.js +82 -0
  10. package/lib/always-encrypted/aead-aes-256-cbc-hmac-algorithm.js.map +1 -0
  11. package/lib/always-encrypted/aead-aes-256-cbc-hmac-encryption-key.js +55 -0
  12. package/lib/always-encrypted/aead-aes-256-cbc-hmac-encryption-key.js.map +1 -0
  13. package/lib/always-encrypted/cek-entry.d.ts +11 -0
  14. package/lib/always-encrypted/cek-entry.js +42 -0
  15. package/lib/always-encrypted/cek-entry.js.map +1 -0
  16. package/lib/always-encrypted/get-parameter-encryption-metadata.js +90 -0
  17. package/lib/always-encrypted/get-parameter-encryption-metadata.js.map +1 -0
  18. package/lib/always-encrypted/key-crypto.js +94 -0
  19. package/lib/always-encrypted/key-crypto.js.map +1 -0
  20. package/lib/always-encrypted/keystore-provider-azure-key-vault.d.ts +21 -0
  21. package/lib/always-encrypted/keystore-provider-azure-key-vault.js +247 -0
  22. package/lib/always-encrypted/keystore-provider-azure-key-vault.js.map +1 -0
  23. package/lib/always-encrypted/symmetric-key-cache.js +36 -0
  24. package/lib/always-encrypted/symmetric-key-cache.js.map +1 -0
  25. package/lib/always-encrypted/symmetric-key.js +25 -0
  26. package/lib/always-encrypted/symmetric-key.js.map +1 -0
  27. package/lib/always-encrypted/types.d.ts +73 -0
  28. package/lib/always-encrypted/types.js +61 -0
  29. package/lib/always-encrypted/types.js.map +1 -0
  30. package/lib/always-encrypted/utils.js +23 -0
  31. package/lib/always-encrypted/utils.js.map +1 -0
  32. package/lib/bulk-load-payload.d.ts +8 -0
  33. package/lib/bulk-load-payload.js +23 -0
  34. package/lib/bulk-load-payload.js.map +1 -0
  35. package/lib/bulk-load.d.ts +275 -0
  36. package/lib/bulk-load.js +515 -0
  37. package/lib/bulk-load.js.map +1 -0
  38. package/lib/collation.d.ts +28 -0
  39. package/lib/collation.js +348 -0
  40. package/lib/collation.js.map +1 -0
  41. package/lib/connection.d.ts +1309 -0
  42. package/lib/connection.js +2732 -0
  43. package/lib/connection.js.map +1 -0
  44. package/lib/connector.d.ts +18 -0
  45. package/lib/connector.js +142 -0
  46. package/lib/connector.js.map +1 -0
  47. package/lib/data-type.d.ts +554 -0
  48. package/lib/data-type.js +428 -0
  49. package/lib/data-type.js.map +1 -0
  50. package/lib/data-types/bigint.d.ts +3 -0
  51. package/lib/data-types/bigint.js +53 -0
  52. package/lib/data-types/bigint.js.map +1 -0
  53. package/lib/data-types/binary.d.ts +5 -0
  54. package/lib/data-types/binary.js +67 -0
  55. package/lib/data-types/binary.js.map +1 -0
  56. package/lib/data-types/bit.d.ts +3 -0
  57. package/lib/data-types/bit.js +46 -0
  58. package/lib/data-types/bit.js.map +1 -0
  59. package/lib/data-types/bitn.d.ts +3 -0
  60. package/lib/data-types/bitn.js +29 -0
  61. package/lib/data-types/bitn.js.map +1 -0
  62. package/lib/data-types/char.d.ts +5 -0
  63. package/lib/data-types/char.js +86 -0
  64. package/lib/data-types/char.js.map +1 -0
  65. package/lib/data-types/date.d.ts +3 -0
  66. package/lib/data-types/date.js +72 -0
  67. package/lib/data-types/date.js.map +1 -0
  68. package/lib/data-types/datetime.d.ts +3 -0
  69. package/lib/data-types/datetime.js +93 -0
  70. package/lib/data-types/datetime.js.map +1 -0
  71. package/lib/data-types/datetime2.d.ts +5 -0
  72. package/lib/data-types/datetime2.js +118 -0
  73. package/lib/data-types/datetime2.js.map +1 -0
  74. package/lib/data-types/datetimen.d.ts +3 -0
  75. package/lib/data-types/datetimen.js +29 -0
  76. package/lib/data-types/datetimen.js.map +1 -0
  77. package/lib/data-types/datetimeoffset.d.ts +5 -0
  78. package/lib/data-types/datetimeoffset.js +111 -0
  79. package/lib/data-types/datetimeoffset.js.map +1 -0
  80. package/lib/data-types/decimal.d.ts +6 -0
  81. package/lib/data-types/decimal.js +107 -0
  82. package/lib/data-types/decimal.js.map +1 -0
  83. package/lib/data-types/decimaln.d.ts +3 -0
  84. package/lib/data-types/decimaln.js +29 -0
  85. package/lib/data-types/decimaln.js.map +1 -0
  86. package/lib/data-types/float.d.ts +3 -0
  87. package/lib/data-types/float.js +47 -0
  88. package/lib/data-types/float.js.map +1 -0
  89. package/lib/data-types/floatn.d.ts +3 -0
  90. package/lib/data-types/floatn.js +29 -0
  91. package/lib/data-types/floatn.js.map +1 -0
  92. package/lib/data-types/image.d.ts +3 -0
  93. package/lib/data-types/image.js +56 -0
  94. package/lib/data-types/image.js.map +1 -0
  95. package/lib/data-types/int.d.ts +3 -0
  96. package/lib/data-types/int.js +53 -0
  97. package/lib/data-types/int.js.map +1 -0
  98. package/lib/data-types/intn.d.ts +3 -0
  99. package/lib/data-types/intn.js +29 -0
  100. package/lib/data-types/intn.js.map +1 -0
  101. package/lib/data-types/money.d.ts +3 -0
  102. package/lib/data-types/money.js +59 -0
  103. package/lib/data-types/money.js.map +1 -0
  104. package/lib/data-types/moneyn.d.ts +3 -0
  105. package/lib/data-types/moneyn.js +29 -0
  106. package/lib/data-types/moneyn.js.map +1 -0
  107. package/lib/data-types/nchar.d.ts +5 -0
  108. package/lib/data-types/nchar.js +100 -0
  109. package/lib/data-types/nchar.js.map +1 -0
  110. package/lib/data-types/ntext.d.ts +3 -0
  111. package/lib/data-types/ntext.js +60 -0
  112. package/lib/data-types/ntext.js.map +1 -0
  113. package/lib/data-types/null.d.ts +3 -0
  114. package/lib/data-types/null.js +29 -0
  115. package/lib/data-types/null.js.map +1 -0
  116. package/lib/data-types/numeric.d.ts +6 -0
  117. package/lib/data-types/numeric.js +106 -0
  118. package/lib/data-types/numeric.js.map +1 -0
  119. package/lib/data-types/numericn.d.ts +3 -0
  120. package/lib/data-types/numericn.js +29 -0
  121. package/lib/data-types/numericn.js.map +1 -0
  122. package/lib/data-types/nvarchar.d.ts +5 -0
  123. package/lib/data-types/nvarchar.js +133 -0
  124. package/lib/data-types/nvarchar.js.map +1 -0
  125. package/lib/data-types/real.d.ts +3 -0
  126. package/lib/data-types/real.js +48 -0
  127. package/lib/data-types/real.js.map +1 -0
  128. package/lib/data-types/smalldatetime.d.ts +3 -0
  129. package/lib/data-types/smalldatetime.js +83 -0
  130. package/lib/data-types/smalldatetime.js.map +1 -0
  131. package/lib/data-types/smallint.d.ts +3 -0
  132. package/lib/data-types/smallint.js +53 -0
  133. package/lib/data-types/smallint.js.map +1 -0
  134. package/lib/data-types/smallmoney.d.ts +3 -0
  135. package/lib/data-types/smallmoney.js +51 -0
  136. package/lib/data-types/smallmoney.js.map +1 -0
  137. package/lib/data-types/sql-variant.d.ts +3 -0
  138. package/lib/data-types/sql-variant.js +29 -0
  139. package/lib/data-types/sql-variant.js.map +1 -0
  140. package/lib/data-types/text.d.ts +3 -0
  141. package/lib/data-types/text.js +69 -0
  142. package/lib/data-types/text.js.map +1 -0
  143. package/lib/data-types/time.d.ts +3 -0
  144. package/lib/data-types/time.js +96 -0
  145. package/lib/data-types/time.js.map +1 -0
  146. package/lib/data-types/tinyint.d.ts +3 -0
  147. package/lib/data-types/tinyint.js +53 -0
  148. package/lib/data-types/tinyint.js.map +1 -0
  149. package/lib/data-types/tvp.d.ts +3 -0
  150. package/lib/data-types/tvp.js +117 -0
  151. package/lib/data-types/tvp.js.map +1 -0
  152. package/lib/data-types/udt.d.ts +3 -0
  153. package/lib/data-types/udt.js +29 -0
  154. package/lib/data-types/udt.js.map +1 -0
  155. package/lib/data-types/uniqueidentifier.d.ts +3 -0
  156. package/lib/data-types/uniqueidentifier.js +50 -0
  157. package/lib/data-types/uniqueidentifier.js.map +1 -0
  158. package/lib/data-types/varbinary.d.ts +5 -0
  159. package/lib/data-types/varbinary.js +119 -0
  160. package/lib/data-types/varbinary.js.map +1 -0
  161. package/lib/data-types/varchar.d.ts +5 -0
  162. package/lib/data-types/varchar.js +112 -0
  163. package/lib/data-types/varchar.js.map +1 -0
  164. package/lib/data-types/xml.d.ts +3 -0
  165. package/lib/data-types/xml.js +29 -0
  166. package/lib/data-types/xml.js.map +1 -0
  167. package/lib/debug.d.ts +25 -0
  168. package/lib/debug.js +66 -0
  169. package/lib/debug.js.map +1 -0
  170. package/lib/errors.d.ts +17 -0
  171. package/lib/errors.js +23 -0
  172. package/lib/errors.js.map +1 -0
  173. package/lib/guid-parser.d.ts +3 -0
  174. package/lib/guid-parser.js +30 -0
  175. package/lib/guid-parser.js.map +1 -0
  176. package/lib/incoming-message-stream.d.ts +19 -0
  177. package/lib/incoming-message-stream.js +97 -0
  178. package/lib/incoming-message-stream.js.map +1 -0
  179. package/lib/instance-lookup.d.ts +13 -0
  180. package/lib/instance-lookup.js +91 -0
  181. package/lib/instance-lookup.js.map +1 -0
  182. package/lib/library.d.ts +1 -0
  183. package/lib/library.js +8 -0
  184. package/lib/library.js.map +1 -0
  185. package/lib/login7-payload.d.ts +51 -0
  186. package/lib/login7-payload.js +408 -0
  187. package/lib/login7-payload.js.map +1 -0
  188. package/lib/message-io.d.ts +28 -0
  189. package/lib/message-io.js +152 -0
  190. package/lib/message-io.js.map +1 -0
  191. package/lib/message.d.ts +11 -0
  192. package/lib/message.js +21 -0
  193. package/lib/message.js.map +1 -0
  194. package/lib/metadata-parser.d.ts +48 -0
  195. package/lib/metadata-parser.js +380 -0
  196. package/lib/metadata-parser.js.map +1 -0
  197. package/lib/ntlm-payload.d.ts +23 -0
  198. package/lib/ntlm-payload.js +135 -0
  199. package/lib/ntlm-payload.js.map +1 -0
  200. package/lib/ntlm.d.ts +4 -0
  201. package/lib/ntlm.js +72 -0
  202. package/lib/ntlm.js.map +1 -0
  203. package/lib/outgoing-message-stream.d.ts +15 -0
  204. package/lib/outgoing-message-stream.js +81 -0
  205. package/lib/outgoing-message-stream.js.map +1 -0
  206. package/lib/packet.d.ts +33 -0
  207. package/lib/packet.js +191 -0
  208. package/lib/packet.js.map +1 -0
  209. package/lib/prelogin-payload.d.ts +67 -0
  210. package/lib/prelogin-payload.js +228 -0
  211. package/lib/prelogin-payload.js.map +1 -0
  212. package/lib/request.d.ts +370 -0
  213. package/lib/request.js +387 -0
  214. package/lib/request.js.map +1 -0
  215. package/lib/rpcrequest-payload.d.ts +16 -0
  216. package/lib/rpcrequest-payload.js +109 -0
  217. package/lib/rpcrequest-payload.js.map +1 -0
  218. package/lib/sender.d.ts +5 -0
  219. package/lib/sender.js +78 -0
  220. package/lib/sender.js.map +1 -0
  221. package/lib/special-stored-procedure.d.ts +18 -0
  222. package/lib/special-stored-procedure.js +26 -0
  223. package/lib/special-stored-procedure.js.map +1 -0
  224. package/lib/sqlbatch-payload.d.ts +13 -0
  225. package/lib/sqlbatch-payload.js +34 -0
  226. package/lib/sqlbatch-payload.js.map +1 -0
  227. package/lib/tds-versions.d.ts +6 -0
  228. package/lib/tds-versions.js +19 -0
  229. package/lib/tds-versions.js.map +1 -0
  230. package/lib/tedious.d.ts +13 -0
  231. package/lib/tedious.js +73 -0
  232. package/lib/tedious.js.map +1 -0
  233. package/lib/token/colmetadata-token-parser.d.ts +12 -0
  234. package/lib/token/colmetadata-token-parser.js +124 -0
  235. package/lib/token/colmetadata-token-parser.js.map +1 -0
  236. package/lib/token/done-token-parser.d.ts +6 -0
  237. package/lib/token/done-token-parser.js +76 -0
  238. package/lib/token/done-token-parser.js.map +1 -0
  239. package/lib/token/env-change-token-parser.d.ts +5 -0
  240. package/lib/token/env-change-token-parser.js +190 -0
  241. package/lib/token/env-change-token-parser.js.map +1 -0
  242. package/lib/token/feature-ext-ack-parser.d.ts +5 -0
  243. package/lib/token/feature-ext-ack-parser.js +52 -0
  244. package/lib/token/feature-ext-ack-parser.js.map +1 -0
  245. package/lib/token/fedauth-info-parser.d.ts +5 -0
  246. package/lib/token/fedauth-info-parser.js +62 -0
  247. package/lib/token/fedauth-info-parser.js.map +1 -0
  248. package/lib/token/handler.d.ts +136 -0
  249. package/lib/token/handler.js +445 -0
  250. package/lib/token/handler.js.map +1 -0
  251. package/lib/token/helpers.d.ts +28 -0
  252. package/lib/token/helpers.js +205 -0
  253. package/lib/token/helpers.js.map +1 -0
  254. package/lib/token/infoerror-token-parser.d.ts +5 -0
  255. package/lib/token/infoerror-token-parser.js +80 -0
  256. package/lib/token/infoerror-token-parser.js.map +1 -0
  257. package/lib/token/loginack-token-parser.d.ts +5 -0
  258. package/lib/token/loginack-token-parser.js +75 -0
  259. package/lib/token/loginack-token-parser.js.map +1 -0
  260. package/lib/token/nbcrow-token-parser.d.ts +4 -0
  261. package/lib/token/nbcrow-token-parser.js +103 -0
  262. package/lib/token/nbcrow-token-parser.js.map +1 -0
  263. package/lib/token/order-token-parser.d.ts +5 -0
  264. package/lib/token/order-token-parser.js +34 -0
  265. package/lib/token/order-token-parser.js.map +1 -0
  266. package/lib/token/returnstatus-token-parser.d.ts +5 -0
  267. package/lib/token/returnstatus-token-parser.js +21 -0
  268. package/lib/token/returnstatus-token-parser.js.map +1 -0
  269. package/lib/token/returnvalue-token-parser.d.ts +4 -0
  270. package/lib/token/returnvalue-token-parser.js +93 -0
  271. package/lib/token/returnvalue-token-parser.js.map +1 -0
  272. package/lib/token/row-token-parser.d.ts +4 -0
  273. package/lib/token/row-token-parser.js +76 -0
  274. package/lib/token/row-token-parser.js.map +1 -0
  275. package/lib/token/sspi-token-parser.d.ts +5 -0
  276. package/lib/token/sspi-token-parser.js +42 -0
  277. package/lib/token/sspi-token-parser.js.map +1 -0
  278. package/lib/token/stream-parser.d.ts +34 -0
  279. package/lib/token/stream-parser.js +341 -0
  280. package/lib/token/stream-parser.js.map +1 -0
  281. package/lib/token/token-stream-parser.d.ts +15 -0
  282. package/lib/token/token-stream-parser.js +36 -0
  283. package/lib/token/token-stream-parser.js.map +1 -0
  284. package/lib/token/token.d.ts +312 -0
  285. package/lib/token/token.js +328 -0
  286. package/lib/token/token.js.map +1 -0
  287. package/lib/tracking-buffer/writable-tracking-buffer.d.ts +47 -0
  288. package/lib/tracking-buffer/writable-tracking-buffer.js +249 -0
  289. package/lib/tracking-buffer/writable-tracking-buffer.js.map +1 -0
  290. package/lib/transaction.d.ts +39 -0
  291. package/lib/transaction.js +137 -0
  292. package/lib/transaction.js.map +1 -0
  293. package/lib/transient-error-lookup.d.ts +3 -0
  294. package/lib/transient-error-lookup.js +19 -0
  295. package/lib/transient-error-lookup.js.map +1 -0
  296. package/lib/value-parser.d.ts +7 -0
  297. package/lib/value-parser.js +813 -0
  298. package/lib/value-parser.js.map +1 -0
  299. package/package.json +145 -0
  300. package/pull_request_template.md +9 -0
  301. package/tsconfig.build-types.json +15 -0
  302. package/tsconfig.json +30 -0
  303. package/types/js-md4.d.ts +7 -0
  304. package/types/native-duplexpair.d.ts +12 -0
@@ -0,0 +1,408 @@
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
+ // Save offset position for later update - extensions must be written at the END
211
+ // of the packet for Microsoft Fabric compatibility (stricter TDS validation)
212
+ const extensionOffsetHeaderOffset = offset;
213
+ offset = fixedData.writeUInt16LE(0, offset); // Placeholder, will update later
214
+
215
+ // (cchUnused / cbExtension): 2-byte - size of the extension offset pointer
216
+ offset = fixedData.writeUInt16LE(4, offset);
217
+
218
+ // ibCltIntName: 2-byte
219
+ offset = fixedData.writeUInt16LE(dataOffset, offset);
220
+
221
+ // cchCltIntName: 2-byte
222
+ if (this.libraryName) {
223
+ const buffer = Buffer.from(this.libraryName, 'ucs2');
224
+ offset = fixedData.writeUInt16LE(buffer.length / 2, offset);
225
+ dataOffset += buffer.length;
226
+ buffers.push(buffer);
227
+ } else {
228
+ offset = fixedData.writeUInt16LE(0, offset);
229
+ }
230
+
231
+ // ibLanguage: 2-byte
232
+ offset = fixedData.writeUInt16LE(dataOffset, offset);
233
+
234
+ // cchLanguage: 2-byte
235
+ if (this.language) {
236
+ const buffer = Buffer.from(this.language, 'ucs2');
237
+ offset = fixedData.writeUInt16LE(buffer.length / 2, offset);
238
+ dataOffset += buffer.length;
239
+ buffers.push(buffer);
240
+ } else {
241
+ offset = fixedData.writeUInt16LE(0, offset);
242
+ }
243
+
244
+ // ibDatabase: 2-byte
245
+ offset = fixedData.writeUInt16LE(dataOffset, offset);
246
+
247
+ // cchDatabase: 2-byte
248
+ if (this.database) {
249
+ const buffer = Buffer.from(this.database, 'ucs2');
250
+ offset = fixedData.writeUInt16LE(buffer.length / 2, offset);
251
+ dataOffset += buffer.length;
252
+ buffers.push(buffer);
253
+ } else {
254
+ offset = fixedData.writeUInt16LE(0, offset);
255
+ }
256
+
257
+ // ClientID: 6-byte
258
+ if (this.clientId) {
259
+ this.clientId.copy(fixedData, offset, 0, 6);
260
+ }
261
+ offset += 6;
262
+
263
+ // ibSSPI: 2-byte
264
+ offset = fixedData.writeUInt16LE(dataOffset, offset);
265
+
266
+ // cbSSPI: 2-byte
267
+ if (this.sspi) {
268
+ if (this.sspi.length > 65535) {
269
+ offset = fixedData.writeUInt16LE(65535, offset);
270
+ } else {
271
+ offset = fixedData.writeUInt16LE(this.sspi.length, offset);
272
+ }
273
+ buffers.push(this.sspi);
274
+ } else {
275
+ offset = fixedData.writeUInt16LE(0, offset);
276
+ }
277
+
278
+ // ibAtchDBFile: 2-byte
279
+ offset = fixedData.writeUInt16LE(dataOffset, offset);
280
+
281
+ // cchAtchDBFile: 2-byte
282
+ if (this.attachDbFile) {
283
+ const buffer = Buffer.from(this.attachDbFile, 'ucs2');
284
+ offset = fixedData.writeUInt16LE(buffer.length / 2, offset);
285
+ dataOffset += buffer.length;
286
+ buffers.push(buffer);
287
+ } else {
288
+ offset = fixedData.writeUInt16LE(0, offset);
289
+ }
290
+
291
+ // ibChangePassword: 2-byte
292
+ offset = fixedData.writeUInt16LE(dataOffset, offset);
293
+
294
+ // cchChangePassword: 2-byte
295
+ if (this.changePassword) {
296
+ const buffer = Buffer.from(this.changePassword, 'ucs2');
297
+ offset = fixedData.writeUInt16LE(buffer.length / 2, offset);
298
+ dataOffset += buffer.length;
299
+ buffers.push(buffer);
300
+ } else {
301
+ offset = fixedData.writeUInt16LE(0, offset);
302
+ }
303
+
304
+ // cbSSPILong: 4-byte
305
+ if (this.sspi && this.sspi.length > 65535) {
306
+ fixedData.writeUInt32LE(this.sspi.length, offset);
307
+ } else {
308
+ fixedData.writeUInt32LE(0, offset);
309
+ }
310
+
311
+ // Write FeatureExtensions at the END of the packet (required for Fabric compatibility)
312
+ // Update the placeholder we wrote earlier with the actual offset
313
+ fixedData.writeUInt16LE(dataOffset, extensionOffsetHeaderOffset);
314
+ const extensions = this.buildFeatureExt();
315
+ const extensionOffset = Buffer.alloc(4);
316
+ extensionOffset.writeUInt32LE(dataOffset + 4, 0);
317
+ buffers.push(extensionOffset, extensions);
318
+ const data = Buffer.concat(buffers);
319
+ data.writeUInt32LE(data.length, 0);
320
+ return data;
321
+ }
322
+ buildOptionFlags1() {
323
+ 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;
324
+ if (this.initDbFatal) {
325
+ flags1 |= FLAGS_1.INIT_DB_FATAL;
326
+ } else {
327
+ flags1 |= FLAGS_1.INIT_DB_WARN;
328
+ }
329
+ return flags1;
330
+ }
331
+ buildFeatureExt() {
332
+ const buffers = [];
333
+ const fedAuth = this.fedAuth;
334
+ if (fedAuth) {
335
+ switch (fedAuth.type) {
336
+ case 'ADAL':
337
+ const buffer = Buffer.alloc(7);
338
+ buffer.writeUInt8(FEDAUTH_OPTIONS.FEATURE_ID, 0);
339
+ buffer.writeUInt32LE(2, 1);
340
+ buffer.writeUInt8(FEDAUTH_OPTIONS.LIBRARY_ADAL << 1 | (fedAuth.echo ? FEDAUTH_OPTIONS.FEDAUTH_YES_ECHO : FEDAUTH_OPTIONS.FEDAUTH_NO_ECHO), 5);
341
+ buffer.writeUInt8(fedAuth.workflow === 'integrated' ? 0x02 : FEDAUTH_OPTIONS.ADAL_WORKFLOW_USER_PASS, 6);
342
+ buffers.push(buffer);
343
+ break;
344
+ case 'SECURITYTOKEN':
345
+ const token = Buffer.from(fedAuth.fedAuthToken, 'ucs2');
346
+ const buf = Buffer.alloc(10);
347
+ let offset = 0;
348
+ offset = buf.writeUInt8(FEDAUTH_OPTIONS.FEATURE_ID, offset);
349
+ offset = buf.writeUInt32LE(token.length + 4 + 1, offset);
350
+ offset = buf.writeUInt8(FEDAUTH_OPTIONS.LIBRARY_SECURITYTOKEN << 1 | (fedAuth.echo ? FEDAUTH_OPTIONS.FEDAUTH_YES_ECHO : FEDAUTH_OPTIONS.FEDAUTH_NO_ECHO), offset);
351
+ buf.writeInt32LE(token.length, offset);
352
+ buffers.push(buf);
353
+ buffers.push(token);
354
+ break;
355
+ }
356
+ }
357
+ if (this.tdsVersion >= _tdsVersions.versions['7_4']) {
358
+ // Signal UTF-8 support: Value 0x0A, bit 0 must be set to 1. Added in TDS 7.4.
359
+ const UTF8_SUPPORT_FEATURE_ID = 0x0a;
360
+ const UTF8_SUPPORT_CLIENT_SUPPORTS_UTF8 = 0x01;
361
+ const buf = Buffer.alloc(6);
362
+ buf.writeUInt8(UTF8_SUPPORT_FEATURE_ID, 0);
363
+ buf.writeUInt32LE(1, 1);
364
+ buf.writeUInt8(UTF8_SUPPORT_CLIENT_SUPPORTS_UTF8, 5);
365
+ buffers.push(buf);
366
+ }
367
+ buffers.push(Buffer.from([FEATURE_EXT_TERMINATOR]));
368
+ return Buffer.concat(buffers);
369
+ }
370
+ buildOptionFlags2() {
371
+ let flags2 = FLAGS_2.INIT_LANG_WARN | FLAGS_2.ODBC_OFF | FLAGS_2.USER_NORMAL;
372
+ if (this.sspi) {
373
+ flags2 |= FLAGS_2.INTEGRATED_SECURITY_ON;
374
+ } else {
375
+ flags2 |= FLAGS_2.INTEGRATED_SECURITY_OFF;
376
+ }
377
+ return flags2;
378
+ }
379
+ buildTypeFlags() {
380
+ let typeFlags = TYPE_FLAGS.SQL_DFLT | TYPE_FLAGS.OLEDB_OFF;
381
+ if (this.readOnlyIntent) {
382
+ typeFlags |= TYPE_FLAGS.READ_ONLY_INTENT;
383
+ } else {
384
+ typeFlags |= TYPE_FLAGS.READ_WRITE_INTENT;
385
+ }
386
+ return typeFlags;
387
+ }
388
+ buildOptionFlags3() {
389
+ return FLAGS_3.CHANGE_PASSWORD_NO | FLAGS_3.UNKNOWN_COLLATION_HANDLING | FLAGS_3.EXTENSION_USED;
390
+ }
391
+ scramblePassword(password) {
392
+ for (let b = 0, len = password.length; b < len; b++) {
393
+ let byte = password[b];
394
+ const lowNibble = byte & 0x0f;
395
+ const highNibble = byte >> 4;
396
+ byte = lowNibble << 4 | highNibble;
397
+ byte = byte ^ 0xa5;
398
+ password[b] = byte;
399
+ }
400
+ return password;
401
+ }
402
+ toString(indent = '') {
403
+ 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);
404
+ }
405
+ }
406
+ var _default = exports.default = Login7Payload;
407
+ module.exports = Login7Payload;
408
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc3ByaW50ZkpzIiwicmVxdWlyZSIsIl90ZHNWZXJzaW9ucyIsIkZMQUdTXzEiLCJFTkRJQU5fTElUVExFIiwiRU5ESUFOX0JJRyIsIkNIQVJTRVRfQVNDSUkiLCJDSEFSU0VUX0VCQ0RJQyIsIkZMT0FUX0lFRUVfNzU0IiwiRkxPQVRfVkFYIiwiRkxPQVRfTkQ1MDAwIiwiQkNQX0RVTVBMT0FEX09OIiwiQkNQX0RVTVBMT0FEX09GRiIsIlVTRV9EQl9PTiIsIlVTRV9EQl9PRkYiLCJJTklUX0RCX1dBUk4iLCJJTklUX0RCX0ZBVEFMIiwiU0VUX0xBTkdfV0FSTl9PRkYiLCJTRVRfTEFOR19XQVJOX09OIiwiRkxBR1NfMiIsIklOSVRfTEFOR19XQVJOIiwiSU5JVF9MQU5HX0ZBVEFMIiwiT0RCQ19PRkYiLCJPREJDX09OIiwiRl9UUkFOX0JPVU5EQVJZIiwiRl9DQUNIRV9DT05ORUNUIiwiVVNFUl9OT1JNQUwiLCJVU0VSX1NFUlZFUiIsIlVTRVJfUkVNVVNFUiIsIlVTRVJfU1FMUkVQTCIsIklOVEVHUkFURURfU0VDVVJJVFlfT0ZGIiwiSU5URUdSQVRFRF9TRUNVUklUWV9PTiIsIlRZUEVfRkxBR1MiLCJTUUxfREZMVCIsIlNRTF9UU1FMIiwiT0xFREJfT0ZGIiwiT0xFREJfT04iLCJSRUFEX1dSSVRFX0lOVEVOVCIsIlJFQURfT05MWV9JTlRFTlQiLCJGTEFHU18zIiwiQ0hBTkdFX1BBU1NXT1JEX05PIiwiQ0hBTkdFX1BBU1NXT1JEX1lFUyIsIkJJTkFSWV9YTUwiLCJTUEFXTl9VU0VSX0lOU1RBTkNFIiwiVU5LTk9XTl9DT0xMQVRJT05fSEFORExJTkciLCJFWFRFTlNJT05fVVNFRCIsIkZFREFVVEhfT1BUSU9OUyIsIkZFQVRVUkVfSUQiLCJMSUJSQVJZX1NFQ1VSSVRZVE9LRU4iLCJMSUJSQVJZX0FEQUwiLCJGRURBVVRIX1lFU19FQ0hPIiwiRkVEQVVUSF9OT19FQ0hPIiwiQURBTF9XT1JLRkxPV19VU0VSX1BBU1MiLCJBREFMX1dPUktGTE9XX0lOVEVHUkFURUQiLCJGRUFUVVJFX0VYVF9URVJNSU5BVE9SIiwiTG9naW43UGF5bG9hZCIsImNvbnN0cnVjdG9yIiwidGRzVmVyc2lvbiIsInBhY2tldFNpemUiLCJjbGllbnRQcm9nVmVyIiwiY2xpZW50UGlkIiwiY29ubmVjdGlvbklkIiwiY2xpZW50VGltZVpvbmUiLCJjbGllbnRMY2lkIiwicmVhZE9ubHlJbnRlbnQiLCJpbml0RGJGYXRhbCIsImZlZEF1dGgiLCJ1bmRlZmluZWQiLCJ1c2VyTmFtZSIsInBhc3N3b3JkIiwic2VydmVyTmFtZSIsImFwcE5hbWUiLCJob3N0bmFtZSIsImxpYnJhcnlOYW1lIiwibGFuZ3VhZ2UiLCJkYXRhYmFzZSIsImNsaWVudElkIiwic3NwaSIsImF0dGFjaERiRmlsZSIsImNoYW5nZVBhc3N3b3JkIiwidG9CdWZmZXIiLCJmaXhlZERhdGEiLCJCdWZmZXIiLCJhbGxvYyIsImJ1ZmZlcnMiLCJvZmZzZXQiLCJkYXRhT2Zmc2V0IiwibGVuZ3RoIiwid3JpdGVVSW50MzJMRSIsIndyaXRlVUludDgiLCJidWlsZE9wdGlvbkZsYWdzMSIsImJ1aWxkT3B0aW9uRmxhZ3MyIiwiYnVpbGRUeXBlRmxhZ3MiLCJidWlsZE9wdGlvbkZsYWdzMyIsIndyaXRlSW50MzJMRSIsIndyaXRlVUludDE2TEUiLCJidWZmZXIiLCJmcm9tIiwicHVzaCIsInNjcmFtYmxlUGFzc3dvcmQiLCJleHRlbnNpb25PZmZzZXRIZWFkZXJPZmZzZXQiLCJjb3B5IiwiZXh0ZW5zaW9ucyIsImJ1aWxkRmVhdHVyZUV4dCIsImV4dGVuc2lvbk9mZnNldCIsImRhdGEiLCJjb25jYXQiLCJmbGFnczEiLCJ0eXBlIiwiZWNobyIsIndvcmtmbG93IiwidG9rZW4iLCJmZWRBdXRoVG9rZW4iLCJidWYiLCJ2ZXJzaW9ucyIsIlVURjhfU1VQUE9SVF9GRUFUVVJFX0lEIiwiVVRGOF9TVVBQT1JUX0NMSUVOVF9TVVBQT1JUU19VVEY4IiwiZmxhZ3MyIiwidHlwZUZsYWdzIiwiYiIsImxlbiIsImJ5dGUiLCJsb3dOaWJibGUiLCJoaWdoTmliYmxlIiwidG9TdHJpbmciLCJpbmRlbnQiLCJzcHJpbnRmIiwiX2RlZmF1bHQiLCJleHBvcnRzIiwiZGVmYXVsdCIsIm1vZHVsZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2dpbjctcGF5bG9hZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzcHJpbnRmIH0gZnJvbSAnc3ByaW50Zi1qcyc7XG5pbXBvcnQgeyB2ZXJzaW9ucyB9IGZyb20gJy4vdGRzLXZlcnNpb25zJztcblxuY29uc3QgRkxBR1NfMSA9IHtcbiAgRU5ESUFOX0xJVFRMRTogMHgwMCxcbiAgRU5ESUFOX0JJRzogMHgwMSxcbiAgQ0hBUlNFVF9BU0NJSTogMHgwMCxcbiAgQ0hBUlNFVF9FQkNESUM6IDB4MDIsXG4gIEZMT0FUX0lFRUVfNzU0OiAweDAwLFxuICBGTE9BVF9WQVg6IDB4MDQsXG4gIEZMT0FUX05ENTAwMDogMHgwOCxcbiAgQkNQX0RVTVBMT0FEX09OOiAweDAwLFxuICBCQ1BfRFVNUExPQURfT0ZGOiAweDEwLFxuICBVU0VfREJfT046IDB4MDAsXG4gIFVTRV9EQl9PRkY6IDB4MjAsXG4gIElOSVRfREJfV0FSTjogMHgwMCxcbiAgSU5JVF9EQl9GQVRBTDogMHg0MCxcbiAgU0VUX0xBTkdfV0FSTl9PRkY6IDB4MDAsXG4gIFNFVF9MQU5HX1dBUk5fT046IDB4ODBcbn07XG5cbmNvbnN0IEZMQUdTXzIgPSB7XG4gIElOSVRfTEFOR19XQVJOOiAweDAwLFxuICBJTklUX0xBTkdfRkFUQUw6IDB4MDEsXG4gIE9EQkNfT0ZGOiAweDAwLFxuICBPREJDX09OOiAweDAyLFxuICBGX1RSQU5fQk9VTkRBUlk6IDB4MDQsXG4gIEZfQ0FDSEVfQ09OTkVDVDogMHgwOCxcbiAgVVNFUl9OT1JNQUw6IDB4MDAsXG4gIFVTRVJfU0VSVkVSOiAweDEwLFxuICBVU0VSX1JFTVVTRVI6IDB4MjAsXG4gIFVTRVJfU1FMUkVQTDogMHg0MCxcbiAgSU5URUdSQVRFRF9TRUNVUklUWV9PRkY6IDB4MDAsXG4gIElOVEVHUkFURURfU0VDVVJJVFlfT046IDB4ODBcbn07XG5cbmNvbnN0IFRZUEVfRkxBR1MgPSB7XG4gIFNRTF9ERkxUOiAweDAwLFxuICBTUUxfVFNRTDogMHgwOCxcbiAgT0xFREJfT0ZGOiAweDAwLFxuICBPTEVEQl9PTjogMHgxMCxcbiAgUkVBRF9XUklURV9JTlRFTlQ6IDB4MDAsXG4gIFJFQURfT05MWV9JTlRFTlQ6IDB4MjBcbn07XG5cbmNvbnN0IEZMQUdTXzMgPSB7XG4gIENIQU5HRV9QQVNTV09SRF9OTzogMHgwMCxcbiAgQ0hBTkdFX1BBU1NXT1JEX1lFUzogMHgwMSxcbiAgQklOQVJZX1hNTDogMHgwMixcbiAgU1BBV05fVVNFUl9JTlNUQU5DRTogMHgwNCxcbiAgVU5LTk9XTl9DT0xMQVRJT05fSEFORExJTkc6IDB4MDgsXG4gIEVYVEVOU0lPTl9VU0VEOiAweDEwXG59O1xuXG5jb25zdCBGRURBVVRIX09QVElPTlMgPSB7XG4gIEZFQVRVUkVfSUQ6IDB4MDIsXG4gIExJQlJBUllfU0VDVVJJVFlUT0tFTjogMHgwMSxcbiAgTElCUkFSWV9BREFMOiAweDAyLFxuICBGRURBVVRIX1lFU19FQ0hPOiAweDAxLFxuICBGRURBVVRIX05PX0VDSE86IDB4MDAsXG4gIEFEQUxfV09SS0ZMT1dfVVNFUl9QQVNTOiAweDAxLFxuICBBREFMX1dPUktGTE9XX0lOVEVHUkFURUQ6IDB4MDJcbn07XG5cbmNvbnN0IEZFQVRVUkVfRVhUX1RFUk1JTkFUT1IgPSAweEZGO1xuXG5pbnRlcmZhY2UgT3B0aW9ucyB7XG4gIHRkc1ZlcnNpb246IG51bWJlcjtcbiAgcGFja2V0U2l6ZTogbnVtYmVyO1xuICBjbGllbnRQcm9nVmVyOiBudW1iZXI7XG4gIGNsaWVudFBpZDogbnVtYmVyO1xuICBjb25uZWN0aW9uSWQ6IG51bWJlcjtcbiAgY2xpZW50VGltZVpvbmU6IG51bWJlcjtcbiAgY2xpZW50TGNpZDogbnVtYmVyO1xufVxuXG4vKlxuICBzMi4yLjYuM1xuICovXG5jbGFzcyBMb2dpbjdQYXlsb2FkIHtcbiAgZGVjbGFyZSB0ZHNWZXJzaW9uOiBudW1iZXI7XG4gIGRlY2xhcmUgcGFja2V0U2l6ZTogbnVtYmVyO1xuICBkZWNsYXJlIGNsaWVudFByb2dWZXI6IG51bWJlcjtcbiAgZGVjbGFyZSBjbGllbnRQaWQ6IG51bWJlcjtcbiAgZGVjbGFyZSBjb25uZWN0aW9uSWQ6IG51bWJlcjtcbiAgZGVjbGFyZSBjbGllbnRUaW1lWm9uZTogbnVtYmVyO1xuICBkZWNsYXJlIGNsaWVudExjaWQ6IG51bWJlcjtcblxuICBkZWNsYXJlIHJlYWRPbmx5SW50ZW50OiBib29sZWFuO1xuICBkZWNsYXJlIGluaXREYkZhdGFsOiBib29sZWFuO1xuXG4gIGRlY2xhcmUgdXNlck5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZGVjbGFyZSBwYXNzd29yZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBkZWNsYXJlIHNlcnZlck5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZGVjbGFyZSBhcHBOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGRlY2xhcmUgaG9zdG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZGVjbGFyZSBsaWJyYXJ5TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBkZWNsYXJlIGxhbmd1YWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGRlY2xhcmUgZGF0YWJhc2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZGVjbGFyZSBjbGllbnRJZDogQnVmZmVyIHwgdW5kZWZpbmVkO1xuICBkZWNsYXJlIHNzcGk6IEJ1ZmZlciB8IHVuZGVmaW5lZDtcbiAgZGVjbGFyZSBhdHRhY2hEYkZpbGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZGVjbGFyZSBjaGFuZ2VQYXNzd29yZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGRlY2xhcmUgZmVkQXV0aDogeyB0eXBlOiAnQURBTCcsIGVjaG86IGJvb2xlYW4sIHdvcmtmbG93OiAnZGVmYXVsdCcgfCAnaW50ZWdyYXRlZCcgfSB8IHsgdHlwZTogJ1NFQ1VSSVRZVE9LRU4nLCBlY2hvOiBib29sZWFuLCBmZWRBdXRoVG9rZW46IHN0cmluZyB9IHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKHsgdGRzVmVyc2lvbiwgcGFja2V0U2l6ZSwgY2xpZW50UHJvZ1ZlciwgY2xpZW50UGlkLCBjb25uZWN0aW9uSWQsIGNsaWVudFRpbWVab25lLCBjbGllbnRMY2lkIH06IE9wdGlvbnMpIHtcbiAgICB0aGlzLnRkc1ZlcnNpb24gPSB0ZHNWZXJzaW9uO1xuICAgIHRoaXMucGFja2V0U2l6ZSA9IHBhY2tldFNpemU7XG4gICAgdGhpcy5jbGllbnRQcm9nVmVyID0gY2xpZW50UHJvZ1ZlcjtcbiAgICB0aGlzLmNsaWVudFBpZCA9IGNsaWVudFBpZDtcbiAgICB0aGlzLmNvbm5lY3Rpb25JZCA9IGNvbm5lY3Rpb25JZDtcbiAgICB0aGlzLmNsaWVudFRpbWVab25lID0gY2xpZW50VGltZVpvbmU7XG4gICAgdGhpcy5jbGllbnRMY2lkID0gY2xpZW50TGNpZDtcblxuICAgIHRoaXMucmVhZE9ubHlJbnRlbnQgPSBmYWxzZTtcbiAgICB0aGlzLmluaXREYkZhdGFsID0gZmFsc2U7XG5cbiAgICB0aGlzLmZlZEF1dGggPSB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLnVzZXJOYW1lID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucGFzc3dvcmQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5zZXJ2ZXJOYW1lID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYXBwTmFtZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmhvc3RuYW1lID0gdW5kZWZpbmVkO1xuICAgIHRoaXMubGlicmFyeU5hbWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5sYW5ndWFnZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRhdGFiYXNlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY2xpZW50SWQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5zc3BpID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYXR0YWNoRGJGaWxlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY2hhbmdlUGFzc3dvcmQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICB0b0J1ZmZlcigpIHtcbiAgICBjb25zdCBmaXhlZERhdGEgPSBCdWZmZXIuYWxsb2MoOTQpO1xuICAgIGNvbnN0IGJ1ZmZlcnM6IEJ1ZmZlcltdID0gW2ZpeGVkRGF0YV07XG5cbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICBsZXQgZGF0YU9mZnNldCA9IGZpeGVkRGF0YS5sZW5ndGg7XG5cbiAgICAvLyBMZW5ndGg6IDQtYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQzMkxFKDAsIG9mZnNldCk7XG5cbiAgICAvLyBURFNWZXJzaW9uOiA0LWJ5dGVcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MzJMRSh0aGlzLnRkc1ZlcnNpb24sIG9mZnNldCk7XG5cbiAgICAvLyBQYWNrZXRTaXplOiA0LWJ5dGVcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MzJMRSh0aGlzLnBhY2tldFNpemUsIG9mZnNldCk7XG5cbiAgICAvLyBDbGllbnRQcm9nVmVyOiA0LWJ5dGVcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MzJMRSh0aGlzLmNsaWVudFByb2dWZXIsIG9mZnNldCk7XG5cbiAgICAvLyBDbGllbnRQSUQ6IDQtYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQzMkxFKHRoaXMuY2xpZW50UGlkLCBvZmZzZXQpO1xuXG4gICAgLy8gQ29ubmVjdGlvbklEOiA0LWJ5dGVcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MzJMRSh0aGlzLmNvbm5lY3Rpb25JZCwgb2Zmc2V0KTtcblxuICAgIC8vIE9wdGlvbkZsYWdzMTogMS1ieXRlXG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDgodGhpcy5idWlsZE9wdGlvbkZsYWdzMSgpLCBvZmZzZXQpO1xuXG4gICAgLy8gT3B0aW9uRmxhZ3MyOiAxLWJ5dGVcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50OCh0aGlzLmJ1aWxkT3B0aW9uRmxhZ3MyKCksIG9mZnNldCk7XG5cbiAgICAvLyBUeXBlRmxhZ3M6IDEtYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQ4KHRoaXMuYnVpbGRUeXBlRmxhZ3MoKSwgb2Zmc2V0KTtcblxuICAgIC8vIE9wdGlvbkZsYWdzMzogMS1ieXRlXG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDgodGhpcy5idWlsZE9wdGlvbkZsYWdzMygpLCBvZmZzZXQpO1xuXG4gICAgLy8gQ2xpZW50VGltWm9uZTogNC1ieXRlXG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlSW50MzJMRSh0aGlzLmNsaWVudFRpbWVab25lLCBvZmZzZXQpO1xuXG4gICAgLy8gQ2xpZW50TENJRDogNC1ieXRlXG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDMyTEUodGhpcy5jbGllbnRMY2lkLCBvZmZzZXQpO1xuXG4gICAgLy8gaWJIb3N0TmFtZTogMi1ieXRlXG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoZGF0YU9mZnNldCwgb2Zmc2V0KTtcblxuICAgIC8vIGNjaEhvc3ROYW1lOiAyLWJ5dGVcbiAgICBpZiAodGhpcy5ob3N0bmFtZSkge1xuICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20odGhpcy5ob3N0bmFtZSwgJ3VjczInKTtcblxuICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoYnVmZmVyLmxlbmd0aCAvIDIsIG9mZnNldCk7XG4gICAgICBkYXRhT2Zmc2V0ICs9IGJ1ZmZlci5sZW5ndGg7XG5cbiAgICAgIGJ1ZmZlcnMucHVzaChidWZmZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRShkYXRhT2Zmc2V0LCBvZmZzZXQpO1xuICAgIH1cblxuICAgIC8vIGliVXNlck5hbWU6IDItYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGRhdGFPZmZzZXQsIG9mZnNldCk7XG5cbiAgICAvLyBjY2hVc2VyTmFtZTogMi1ieXRlXG4gICAgaWYgKHRoaXMudXNlck5hbWUpIHtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHRoaXMudXNlck5hbWUsICd1Y3MyJyk7XG5cbiAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGJ1ZmZlci5sZW5ndGggLyAyLCBvZmZzZXQpO1xuICAgICAgZGF0YU9mZnNldCArPSBidWZmZXIubGVuZ3RoO1xuXG4gICAgICBidWZmZXJzLnB1c2goYnVmZmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoMCwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICAvLyBpYlBhc3N3b3JkOiAyLWJ5dGVcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRShkYXRhT2Zmc2V0LCBvZmZzZXQpO1xuXG4gICAgLy8gY2NoUGFzc3dvcmQ6IDItYnl0ZVxuICAgIGlmICh0aGlzLnBhc3N3b3JkKSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbSh0aGlzLnBhc3N3b3JkLCAndWNzMicpO1xuXG4gICAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRShidWZmZXIubGVuZ3RoIC8gMiwgb2Zmc2V0KTtcbiAgICAgIGRhdGFPZmZzZXQgKz0gYnVmZmVyLmxlbmd0aDtcblxuICAgICAgYnVmZmVycy5wdXNoKHRoaXMuc2NyYW1ibGVQYXNzd29yZChidWZmZXIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoMCwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICAvLyBpYkFwcE5hbWU6IDItYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGRhdGFPZmZzZXQsIG9mZnNldCk7XG5cbiAgICAvLyBjY2hBcHBOYW1lOiAyLWJ5dGVcbiAgICBpZiAodGhpcy5hcHBOYW1lKSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbSh0aGlzLmFwcE5hbWUsICd1Y3MyJyk7XG5cbiAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGJ1ZmZlci5sZW5ndGggLyAyLCBvZmZzZXQpO1xuICAgICAgZGF0YU9mZnNldCArPSBidWZmZXIubGVuZ3RoO1xuXG4gICAgICBidWZmZXJzLnB1c2goYnVmZmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoMCwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICAvLyBpYlNlcnZlck5hbWU6IDItYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGRhdGFPZmZzZXQsIG9mZnNldCk7XG5cbiAgICAvLyBjY2hTZXJ2ZXJOYW1lOiAyLWJ5dGVcbiAgICBpZiAodGhpcy5zZXJ2ZXJOYW1lKSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbSh0aGlzLnNlcnZlck5hbWUsICd1Y3MyJyk7XG5cbiAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGJ1ZmZlci5sZW5ndGggLyAyLCBvZmZzZXQpO1xuICAgICAgZGF0YU9mZnNldCArPSBidWZmZXIubGVuZ3RoO1xuXG4gICAgICBidWZmZXJzLnB1c2goYnVmZmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoMCwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICAvLyAoaWJVbnVzZWQgLyBpYkV4dGVuc2lvbik6IDItYnl0ZVxuICAgIC8vIFNhdmUgb2Zmc2V0IHBvc2l0aW9uIGZvciBsYXRlciB1cGRhdGUgLSBleHRlbnNpb25zIG11c3QgYmUgd3JpdHRlbiBhdCB0aGUgRU5EXG4gICAgLy8gb2YgdGhlIHBhY2tldCBmb3IgTWljcm9zb2Z0IEZhYnJpYyBjb21wYXRpYmlsaXR5IChzdHJpY3RlciBURFMgdmFsaWRhdGlvbilcbiAgICBjb25zdCBleHRlbnNpb25PZmZzZXRIZWFkZXJPZmZzZXQgPSBvZmZzZXQ7XG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoMCwgb2Zmc2V0KTsgIC8vIFBsYWNlaG9sZGVyLCB3aWxsIHVwZGF0ZSBsYXRlclxuXG4gICAgLy8gKGNjaFVudXNlZCAvIGNiRXh0ZW5zaW9uKTogMi1ieXRlIC0gc2l6ZSBvZiB0aGUgZXh0ZW5zaW9uIG9mZnNldCBwb2ludGVyXG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoNCwgb2Zmc2V0KTtcblxuICAgIC8vIGliQ2x0SW50TmFtZTogMi1ieXRlXG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoZGF0YU9mZnNldCwgb2Zmc2V0KTtcblxuICAgIC8vIGNjaENsdEludE5hbWU6IDItYnl0ZVxuICAgIGlmICh0aGlzLmxpYnJhcnlOYW1lKSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbSh0aGlzLmxpYnJhcnlOYW1lLCAndWNzMicpO1xuXG4gICAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRShidWZmZXIubGVuZ3RoIC8gMiwgb2Zmc2V0KTtcbiAgICAgIGRhdGFPZmZzZXQgKz0gYnVmZmVyLmxlbmd0aDtcblxuICAgICAgYnVmZmVycy5wdXNoKGJ1ZmZlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKDAsIG9mZnNldCk7XG4gICAgfVxuXG4gICAgLy8gaWJMYW5ndWFnZTogMi1ieXRlXG4gICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoZGF0YU9mZnNldCwgb2Zmc2V0KTtcblxuICAgIC8vIGNjaExhbmd1YWdlOiAyLWJ5dGVcbiAgICBpZiAodGhpcy5sYW5ndWFnZSkge1xuICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20odGhpcy5sYW5ndWFnZSwgJ3VjczInKTtcblxuICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoYnVmZmVyLmxlbmd0aCAvIDIsIG9mZnNldCk7XG4gICAgICBkYXRhT2Zmc2V0ICs9IGJ1ZmZlci5sZW5ndGg7XG5cbiAgICAgIGJ1ZmZlcnMucHVzaChidWZmZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRSgwLCBvZmZzZXQpO1xuICAgIH1cblxuICAgIC8vIGliRGF0YWJhc2U6IDItYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGRhdGFPZmZzZXQsIG9mZnNldCk7XG5cbiAgICAvLyBjY2hEYXRhYmFzZTogMi1ieXRlXG4gICAgaWYgKHRoaXMuZGF0YWJhc2UpIHtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHRoaXMuZGF0YWJhc2UsICd1Y3MyJyk7XG5cbiAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGJ1ZmZlci5sZW5ndGggLyAyLCBvZmZzZXQpO1xuICAgICAgZGF0YU9mZnNldCArPSBidWZmZXIubGVuZ3RoO1xuXG4gICAgICBidWZmZXJzLnB1c2goYnVmZmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoMCwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICAvLyBDbGllbnRJRDogNi1ieXRlXG4gICAgaWYgKHRoaXMuY2xpZW50SWQpIHtcbiAgICAgIHRoaXMuY2xpZW50SWQuY29weShmaXhlZERhdGEsIG9mZnNldCwgMCwgNik7XG4gICAgfVxuICAgIG9mZnNldCArPSA2O1xuXG4gICAgLy8gaWJTU1BJOiAyLWJ5dGVcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRShkYXRhT2Zmc2V0LCBvZmZzZXQpO1xuXG4gICAgLy8gY2JTU1BJOiAyLWJ5dGVcbiAgICBpZiAodGhpcy5zc3BpKSB7XG4gICAgICBpZiAodGhpcy5zc3BpLmxlbmd0aCA+IDY1NTM1KSB7XG4gICAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKDY1NTM1LCBvZmZzZXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUodGhpcy5zc3BpLmxlbmd0aCwgb2Zmc2V0KTtcbiAgICAgIH1cblxuICAgICAgYnVmZmVycy5wdXNoKHRoaXMuc3NwaSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKDAsIG9mZnNldCk7XG4gICAgfVxuXG4gICAgLy8gaWJBdGNoREJGaWxlOiAyLWJ5dGVcbiAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRShkYXRhT2Zmc2V0LCBvZmZzZXQpO1xuXG4gICAgLy8gY2NoQXRjaERCRmlsZTogMi1ieXRlXG4gICAgaWYgKHRoaXMuYXR0YWNoRGJGaWxlKSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbSh0aGlzLmF0dGFjaERiRmlsZSwgJ3VjczInKTtcblxuICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoYnVmZmVyLmxlbmd0aCAvIDIsIG9mZnNldCk7XG4gICAgICBkYXRhT2Zmc2V0ICs9IGJ1ZmZlci5sZW5ndGg7XG5cbiAgICAgIGJ1ZmZlcnMucHVzaChidWZmZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvZmZzZXQgPSBmaXhlZERhdGEud3JpdGVVSW50MTZMRSgwLCBvZmZzZXQpO1xuICAgIH1cblxuICAgIC8vIGliQ2hhbmdlUGFzc3dvcmQ6IDItYnl0ZVxuICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGRhdGFPZmZzZXQsIG9mZnNldCk7XG5cbiAgICAvLyBjY2hDaGFuZ2VQYXNzd29yZDogMi1ieXRlXG4gICAgaWYgKHRoaXMuY2hhbmdlUGFzc3dvcmQpIHtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHRoaXMuY2hhbmdlUGFzc3dvcmQsICd1Y3MyJyk7XG5cbiAgICAgIG9mZnNldCA9IGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGJ1ZmZlci5sZW5ndGggLyAyLCBvZmZzZXQpO1xuICAgICAgZGF0YU9mZnNldCArPSBidWZmZXIubGVuZ3RoO1xuXG4gICAgICBidWZmZXJzLnB1c2goYnVmZmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2Zmc2V0ID0gZml4ZWREYXRhLndyaXRlVUludDE2TEUoMCwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICAvLyBjYlNTUElMb25nOiA0LWJ5dGVcbiAgICBpZiAodGhpcy5zc3BpICYmIHRoaXMuc3NwaS5sZW5ndGggPiA2NTUzNSkge1xuICAgICAgZml4ZWREYXRhLndyaXRlVUludDMyTEUodGhpcy5zc3BpLmxlbmd0aCwgb2Zmc2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZml4ZWREYXRhLndyaXRlVUludDMyTEUoMCwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICAvLyBXcml0ZSBGZWF0dXJlRXh0ZW5zaW9ucyBhdCB0aGUgRU5EIG9mIHRoZSBwYWNrZXQgKHJlcXVpcmVkIGZvciBGYWJyaWMgY29tcGF0aWJpbGl0eSlcbiAgICAvLyBVcGRhdGUgdGhlIHBsYWNlaG9sZGVyIHdlIHdyb3RlIGVhcmxpZXIgd2l0aCB0aGUgYWN0dWFsIG9mZnNldFxuICAgIGZpeGVkRGF0YS53cml0ZVVJbnQxNkxFKGRhdGFPZmZzZXQsIGV4dGVuc2lvbk9mZnNldEhlYWRlck9mZnNldCk7XG5cbiAgICBjb25zdCBleHRlbnNpb25zID0gdGhpcy5idWlsZEZlYXR1cmVFeHQoKTtcbiAgICBjb25zdCBleHRlbnNpb25PZmZzZXQgPSBCdWZmZXIuYWxsb2MoNCk7XG4gICAgZXh0ZW5zaW9uT2Zmc2V0LndyaXRlVUludDMyTEUoZGF0YU9mZnNldCArIDQsIDApO1xuICAgIGJ1ZmZlcnMucHVzaChleHRlbnNpb25PZmZzZXQsIGV4dGVuc2lvbnMpO1xuXG4gICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5jb25jYXQoYnVmZmVycyk7XG4gICAgZGF0YS53cml0ZVVJbnQzMkxFKGRhdGEubGVuZ3RoLCAwKTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGJ1aWxkT3B0aW9uRmxhZ3MxKCkge1xuICAgIGxldCBmbGFnczEgPSBGTEFHU18xLkVORElBTl9MSVRUTEUgfCBGTEFHU18xLkNIQVJTRVRfQVNDSUkgfCBGTEFHU18xLkZMT0FUX0lFRUVfNzU0IHwgRkxBR1NfMS5CQ1BfRFVNUExPQURfT0ZGIHwgRkxBR1NfMS5VU0VfREJfT0ZGIHwgRkxBR1NfMS5TRVRfTEFOR19XQVJOX09OO1xuICAgIGlmICh0aGlzLmluaXREYkZhdGFsKSB7XG4gICAgICBmbGFnczEgfD0gRkxBR1NfMS5JTklUX0RCX0ZBVEFMO1xuICAgIH0gZWxzZSB7XG4gICAgICBmbGFnczEgfD0gRkxBR1NfMS5JTklUX0RCX1dBUk47XG4gICAgfVxuICAgIHJldHVybiBmbGFnczE7XG4gIH1cblxuICBidWlsZEZlYXR1cmVFeHQoKSB7XG4gICAgY29uc3QgYnVmZmVycyA9IFtdO1xuXG4gICAgY29uc3QgZmVkQXV0aCA9IHRoaXMuZmVkQXV0aDtcbiAgICBpZiAoZmVkQXV0aCkge1xuICAgICAgc3dpdGNoIChmZWRBdXRoLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnQURBTCc6XG4gICAgICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmFsbG9jKDcpO1xuICAgICAgICAgIGJ1ZmZlci53cml0ZVVJbnQ4KEZFREFVVEhfT1BUSU9OUy5GRUFUVVJFX0lELCAwKTtcbiAgICAgICAgICBidWZmZXIud3JpdGVVSW50MzJMRSgyLCAxKTtcbiAgICAgICAgICBidWZmZXIud3JpdGVVSW50OCgoRkVEQVVUSF9PUFRJT05TLkxJQlJBUllfQURBTCA8PCAxKSB8IChmZWRBdXRoLmVjaG8gPyBGRURBVVRIX09QVElPTlMuRkVEQVVUSF9ZRVNfRUNITyA6IEZFREFVVEhfT1BUSU9OUy5GRURBVVRIX05PX0VDSE8pLCA1KTtcbiAgICAgICAgICBidWZmZXIud3JpdGVVSW50OChmZWRBdXRoLndvcmtmbG93ID09PSAnaW50ZWdyYXRlZCcgPyAweDAyIDogRkVEQVVUSF9PUFRJT05TLkFEQUxfV09SS0ZMT1dfVVNFUl9QQVNTLCA2KTtcbiAgICAgICAgICBidWZmZXJzLnB1c2goYnVmZmVyKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdTRUNVUklUWVRPS0VOJzpcbiAgICAgICAgICBjb25zdCB0b2tlbiA9IEJ1ZmZlci5mcm9tKGZlZEF1dGguZmVkQXV0aFRva2VuLCAndWNzMicpO1xuICAgICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvYygxMCk7XG5cbiAgICAgICAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICAgICAgICBvZmZzZXQgPSBidWYud3JpdGVVSW50OChGRURBVVRIX09QVElPTlMuRkVBVFVSRV9JRCwgb2Zmc2V0KTtcbiAgICAgICAgICBvZmZzZXQgPSBidWYud3JpdGVVSW50MzJMRSh0b2tlbi5sZW5ndGggKyA0ICsgMSwgb2Zmc2V0KTtcbiAgICAgICAgICBvZmZzZXQgPSBidWYud3JpdGVVSW50OCgoRkVEQVVUSF9PUFRJT05TLkxJQlJBUllfU0VDVVJJVFlUT0tFTiA8PCAxKSB8IChmZWRBdXRoLmVjaG8gPyBGRURBVVRIX09QVElPTlMuRkVEQVVUSF9ZRVNfRUNITyA6IEZFREFVVEhfT1BUSU9OUy5GRURBVVRIX05PX0VDSE8pLCBvZmZzZXQpO1xuICAgICAgICAgIGJ1Zi53cml0ZUludDMyTEUodG9rZW4ubGVuZ3RoLCBvZmZzZXQpO1xuXG4gICAgICAgICAgYnVmZmVycy5wdXNoKGJ1Zik7XG4gICAgICAgICAgYnVmZmVycy5wdXNoKHRva2VuKTtcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnRkc1ZlcnNpb24gPj0gdmVyc2lvbnNbJzdfNCddKSB7XG4gICAgICAvLyBTaWduYWwgVVRGLTggc3VwcG9ydDogVmFsdWUgMHgwQSwgYml0IDAgbXVzdCBiZSBzZXQgdG8gMS4gQWRkZWQgaW4gVERTIDcuNC5cbiAgICAgIGNvbnN0IFVURjhfU1VQUE9SVF9GRUFUVVJFX0lEID0gMHgwYTtcbiAgICAgIGNvbnN0IFVURjhfU1VQUE9SVF9DTElFTlRfU1VQUE9SVFNfVVRGOCA9IDB4MDE7XG4gICAgICBjb25zdCBidWYgPSBCdWZmZXIuYWxsb2MoNik7XG4gICAgICBidWYud3JpdGVVSW50OChVVEY4X1NVUFBPUlRfRkVBVFVSRV9JRCwgMCk7XG4gICAgICBidWYud3JpdGVVSW50MzJMRSgxLCAxKTtcbiAgICAgIGJ1Zi53cml0ZVVJbnQ4KFVURjhfU1VQUE9SVF9DTElFTlRfU1VQUE9SVFNfVVRGOCwgNSk7XG4gICAgICBidWZmZXJzLnB1c2goYnVmKTtcbiAgICB9XG5cbiAgICBidWZmZXJzLnB1c2goQnVmZmVyLmZyb20oW0ZFQVRVUkVfRVhUX1RFUk1JTkFUT1JdKSk7XG5cbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChidWZmZXJzKTtcbiAgfVxuXG4gIGJ1aWxkT3B0aW9uRmxhZ3MyKCkge1xuICAgIGxldCBmbGFnczIgPSBGTEFHU18yLklOSVRfTEFOR19XQVJOIHwgRkxBR1NfMi5PREJDX09GRiB8IEZMQUdTXzIuVVNFUl9OT1JNQUw7XG4gICAgaWYgKHRoaXMuc3NwaSkge1xuICAgICAgZmxhZ3MyIHw9IEZMQUdTXzIuSU5URUdSQVRFRF9TRUNVUklUWV9PTjtcbiAgICB9IGVsc2Uge1xuICAgICAgZmxhZ3MyIHw9IEZMQUdTXzIuSU5URUdSQVRFRF9TRUNVUklUWV9PRkY7XG4gICAgfVxuICAgIHJldHVybiBmbGFnczI7XG4gIH1cblxuICBidWlsZFR5cGVGbGFncygpIHtcbiAgICBsZXQgdHlwZUZsYWdzID0gVFlQRV9GTEFHUy5TUUxfREZMVCB8IFRZUEVfRkxBR1MuT0xFREJfT0ZGO1xuICAgIGlmICh0aGlzLnJlYWRPbmx5SW50ZW50KSB7XG4gICAgICB0eXBlRmxhZ3MgfD0gVFlQRV9GTEFHUy5SRUFEX09OTFlfSU5URU5UO1xuICAgIH0gZWxzZSB7XG4gICAgICB0eXBlRmxhZ3MgfD0gVFlQRV9GTEFHUy5SRUFEX1dSSVRFX0lOVEVOVDtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVGbGFncztcbiAgfVxuXG4gIGJ1aWxkT3B0aW9uRmxhZ3MzKCkge1xuICAgIHJldHVybiBGTEFHU18zLkNIQU5HRV9QQVNTV09SRF9OTyB8IEZMQUdTXzMuVU5LTk9XTl9DT0xMQVRJT05fSEFORExJTkcgfCBGTEFHU18zLkVYVEVOU0lPTl9VU0VEO1xuICB9XG5cbiAgc2NyYW1ibGVQYXNzd29yZChwYXNzd29yZDogQnVmZmVyKSB7XG4gICAgZm9yIChsZXQgYiA9IDAsIGxlbiA9IHBhc3N3b3JkLmxlbmd0aDsgYiA8IGxlbjsgYisrKSB7XG4gICAgICBsZXQgYnl0ZSA9IHBhc3N3b3JkW2JdO1xuICAgICAgY29uc3QgbG93TmliYmxlID0gYnl0ZSAmIDB4MGY7XG4gICAgICBjb25zdCBoaWdoTmliYmxlID0gYnl0ZSA+PiA0O1xuICAgICAgYnl0ZSA9IChsb3dOaWJibGUgPDwgNCkgfCBoaWdoTmliYmxlO1xuICAgICAgYnl0ZSA9IGJ5dGUgXiAweGE1O1xuICAgICAgcGFzc3dvcmRbYl0gPSBieXRlO1xuICAgIH1cbiAgICByZXR1cm4gcGFzc3dvcmQ7XG4gIH1cblxuICB0b1N0cmluZyhpbmRlbnQgPSAnJykge1xuICAgIHJldHVybiBpbmRlbnQgKyAnTG9naW43IC0gJyArXG4gICAgICBzcHJpbnRmKCdURFM6MHglMDhYLCBQYWNrZXRTaXplOjB4JTA4WCwgQ2xpZW50UHJvZ1ZlcjoweCUwOFgsIENsaWVudFBJRDoweCUwOFgsIENvbm5lY3Rpb25JRDoweCUwOFgnLFxuICAgICAgICAgICAgICB0aGlzLnRkc1ZlcnNpb24sIHRoaXMucGFja2V0U2l6ZSwgdGhpcy5jbGllbnRQcm9nVmVyLCB0aGlzLmNsaWVudFBpZCwgdGhpcy5jb25uZWN0aW9uSWRcbiAgICAgICkgKyAnXFxuJyArIGluZGVudCArICcgICAgICAgICAnICtcbiAgICAgIHNwcmludGYoJ0ZsYWdzMToweCUwMlgsIEZsYWdzMjoweCUwMlgsIFR5cGVGbGFnczoweCUwMlgsIEZsYWdzMzoweCUwMlgsIENsaWVudFRpbWV6b25lOiVkLCBDbGllbnRMQ0lEOjB4JTA4WCcsXG4gICAgICAgICAgICAgIHRoaXMuYnVpbGRPcHRpb25GbGFnczEoKSwgdGhpcy5idWlsZE9wdGlvbkZsYWdzMigpLCB0aGlzLmJ1aWxkVHlwZUZsYWdzKCksIHRoaXMuYnVpbGRPcHRpb25GbGFnczMoKSwgdGhpcy5jbGllbnRUaW1lWm9uZSwgdGhpcy5jbGllbnRMY2lkXG4gICAgICApICsgJ1xcbicgKyBpbmRlbnQgKyAnICAgICAgICAgJyArXG4gICAgICBzcHJpbnRmKFwiSG9zdG5hbWU6JyVzJywgVXNlcm5hbWU6JyVzJywgUGFzc3dvcmQ6JyVzJywgQXBwTmFtZTonJXMnLCBTZXJ2ZXJOYW1lOiclcycsIExpYnJhcnlOYW1lOiclcydcIixcbiAgICAgICAgICAgICAgdGhpcy5ob3N0bmFtZSwgdGhpcy51c2VyTmFtZSwgdGhpcy5wYXNzd29yZCwgdGhpcy5hcHBOYW1lLCB0aGlzLnNlcnZlck5hbWUsIHRoaXMubGlicmFyeU5hbWVcbiAgICAgICkgKyAnXFxuJyArIGluZGVudCArICcgICAgICAgICAnICtcbiAgICAgIHNwcmludGYoXCJMYW5ndWFnZTonJXMnLCBEYXRhYmFzZTonJXMnLCBTU1BJOiclcycsIEF0dGFjaERiRmlsZTonJXMnLCBDaGFuZ2VQYXNzd29yZDonJXMnXCIsXG4gICAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2UsIHRoaXMuZGF0YWJhc2UsIHRoaXMuc3NwaSwgdGhpcy5hdHRhY2hEYkZpbGUsIHRoaXMuY2hhbmdlUGFzc3dvcmRcbiAgICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTG9naW43UGF5bG9hZDtcbm1vZHVsZS5leHBvcnRzID0gTG9naW43UGF5bG9hZDtc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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","extensionOffsetHeaderOffset","copy","extensions","buildFeatureExt","extensionOffset","data","concat","flags1","type","echo","workflow","token","fedAuthToken","buf","versions","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 // Save offset position for later update - extensions must be written at the END\n // of the packet for Microsoft Fabric compatibility (stricter TDS validation)\n const extensionOffsetHeaderOffset = offset;\n offset = fixedData.writeUInt16LE(0, offset); // Placeholder, will update later\n\n // (cchUnused / cbExtension): 2-byte - size of the extension offset pointer\n offset = fixedData.writeUInt16LE(4, offset);\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 } 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 // Write FeatureExtensions at the END of the packet (required for Fabric compatibility)\n // Update the placeholder we wrote earlier with the actual offset\n fixedData.writeUInt16LE(dataOffset, extensionOffsetHeaderOffset);\n\n const extensions = this.buildFeatureExt();\n const extensionOffset = Buffer.alloc(4);\n extensionOffset.writeUInt32LE(dataOffset + 4, 0);\n buffers.push(extensionOffset, extensions);\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 if (this.tdsVersion >= versions['7_4']) {\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\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;