@api-client/core 0.3.11 → 0.4.1

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 (356) hide show
  1. package/build/browser.d.ts +10 -8
  2. package/build/browser.js +11 -7
  3. package/build/browser.js.map +1 -1
  4. package/build/index.d.ts +12 -11
  5. package/build/index.js +9 -9
  6. package/build/index.js.map +1 -1
  7. package/build/src/data/JmesparthReader.d.ts +1 -1
  8. package/build/src/data/JmesparthReader.js +1 -1
  9. package/build/src/events/models/ProjectEvents.d.ts +1 -1
  10. package/build/src/events/models/ProjectEvents.js +1 -2
  11. package/build/src/events/models/ProjectEvents.js.map +1 -1
  12. package/build/src/lib/transformers/PayloadSerializer.d.ts +2 -2
  13. package/build/src/lib/transformers/PayloadSerializer.js +3 -3
  14. package/build/src/lib/transformers/PayloadSerializer.js.map +1 -1
  15. package/build/src/mocking/ProjectMock.d.ts +7 -1
  16. package/build/src/mocking/ProjectMock.js +6 -0
  17. package/build/src/mocking/ProjectMock.js.map +1 -1
  18. package/build/src/mocking/lib/History.d.ts +70 -0
  19. package/build/src/mocking/lib/History.js +120 -0
  20. package/build/src/mocking/lib/History.js.map +1 -0
  21. package/build/src/mocking/lib/Request.d.ts +2 -2
  22. package/build/src/mocking/lib/Request.js +3 -2
  23. package/build/src/mocking/lib/Request.js.map +1 -1
  24. package/build/src/mocking/lib/Response.d.ts +6 -6
  25. package/build/src/mocking/lib/Response.js +6 -6
  26. package/build/src/mocking/lib/Response.js.map +1 -1
  27. package/build/src/mocking/lib/User.d.ts +20 -0
  28. package/build/src/mocking/lib/User.js +54 -0
  29. package/build/src/mocking/lib/User.js.map +1 -0
  30. package/build/src/models/AuthorizationData.d.ts +2 -2
  31. package/build/src/models/AuthorizationData.js +2 -2
  32. package/build/src/models/Backend.d.ts +85 -0
  33. package/build/src/models/ClientCertificate.d.ts +1 -1
  34. package/build/src/models/Environment.d.ts +3 -3
  35. package/build/src/models/Environment.js +3 -3
  36. package/build/src/models/Environment.js.map +1 -1
  37. package/build/src/models/ErrorResponse.d.ts +1 -1
  38. package/build/src/models/ErrorResponse.js +1 -1
  39. package/build/src/models/HostRule.d.ts +4 -4
  40. package/build/src/models/HostRule.js +4 -4
  41. package/build/src/models/HostRule.js.map +1 -1
  42. package/build/src/models/HttpHistory.d.ts +64 -18
  43. package/build/src/models/HttpHistory.js +43 -19
  44. package/build/src/models/HttpHistory.js.map +1 -1
  45. package/build/src/models/HttpProject.d.ts +4 -5
  46. package/build/src/models/HttpProject.js +3 -3
  47. package/build/src/models/HttpProject.js.map +1 -1
  48. package/build/src/models/HttpProjectListItem.d.ts +1 -1
  49. package/build/src/models/HttpProjectListItem.js +1 -1
  50. package/build/src/models/HttpProjectListItem.js.map +1 -1
  51. package/build/src/models/HttpRequest.d.ts +2 -2
  52. package/build/src/models/HttpRequest.js +2 -2
  53. package/build/src/models/HttpRequest.js.map +1 -1
  54. package/build/src/models/HttpResponse.d.ts +2 -2
  55. package/build/src/models/HttpResponse.js +3 -3
  56. package/build/src/models/HttpResponse.js.map +1 -1
  57. package/build/src/models/License.d.ts +3 -3
  58. package/build/src/models/License.js +3 -3
  59. package/build/src/models/License.js.map +1 -1
  60. package/build/src/models/ProjectFolder.d.ts +2 -2
  61. package/build/src/models/ProjectFolder.js +3 -3
  62. package/build/src/models/ProjectFolder.js.map +1 -1
  63. package/build/src/models/ProjectItem.d.ts +1 -1
  64. package/build/src/models/ProjectItem.js +2 -2
  65. package/build/src/models/ProjectItem.js.map +1 -1
  66. package/build/src/models/ProjectRequest.d.ts +2 -2
  67. package/build/src/models/ProjectRequest.js +1 -1
  68. package/build/src/models/ProjectRequest.js.map +1 -1
  69. package/build/src/models/ProjectSchema.d.ts +2 -2
  70. package/build/src/models/ProjectSchema.js +1 -1
  71. package/build/src/models/ProjectSchema.js.map +1 -1
  72. package/build/src/models/Property.d.ts +4 -4
  73. package/build/src/models/Property.js +4 -4
  74. package/build/src/models/Property.js.map +1 -1
  75. package/build/src/models/Provider.d.ts +3 -3
  76. package/build/src/models/Provider.js +3 -3
  77. package/build/src/models/Provider.js.map +1 -1
  78. package/build/src/models/Request.d.ts +2 -2
  79. package/build/src/models/Request.js +3 -3
  80. package/build/src/models/Request.js.map +1 -1
  81. package/build/src/models/RequestActions.d.ts +2 -4
  82. package/build/src/models/RequestActions.js +2 -4
  83. package/build/src/models/RequestActions.js.map +1 -1
  84. package/build/src/models/RequestAuthorization.d.ts +3 -5
  85. package/build/src/models/RequestAuthorization.js +2 -4
  86. package/build/src/models/RequestAuthorization.js.map +1 -1
  87. package/build/src/models/RequestConfig.d.ts +3 -5
  88. package/build/src/models/RequestConfig.js +1 -3
  89. package/build/src/models/RequestConfig.js.map +1 -1
  90. package/build/src/models/RequestLog.d.ts +14 -8
  91. package/build/src/models/RequestLog.js +18 -7
  92. package/build/src/models/RequestLog.js.map +1 -1
  93. package/build/src/models/RequestTime.d.ts +4 -6
  94. package/build/src/models/RequestTime.js +2 -4
  95. package/build/src/models/RequestTime.js.map +1 -1
  96. package/build/src/models/RequestUiMeta.d.ts +5 -5
  97. package/build/src/models/RequestUiMeta.js +2 -2
  98. package/build/src/models/RequestUiMeta.js.map +1 -1
  99. package/build/src/models/RequestsSize.d.ts +1 -3
  100. package/build/src/models/RequestsSize.js +1 -3
  101. package/build/src/models/RequestsSize.js.map +1 -1
  102. package/build/src/models/{ArcResponse.d.ts → Response.d.ts} +7 -9
  103. package/build/src/models/{ArcResponse.js → Response.js} +4 -6
  104. package/build/src/models/Response.js.map +1 -0
  105. package/build/src/models/ResponseAuthorization.d.ts +3 -3
  106. package/build/src/models/ResponseAuthorization.js +3 -3
  107. package/build/src/models/ResponseAuthorization.js.map +1 -1
  108. package/build/src/models/ResponseRedirect.d.ts +3 -5
  109. package/build/src/models/ResponseRedirect.js +1 -3
  110. package/build/src/models/ResponseRedirect.js.map +1 -1
  111. package/build/src/models/RevisionInfo.d.ts +1 -1
  112. package/build/src/models/RevisionInfo.js +1 -1
  113. package/build/src/models/RevisionInfo.js.map +1 -1
  114. package/build/src/models/SentRequest.d.ts +2 -4
  115. package/build/src/models/SentRequest.js +1 -3
  116. package/build/src/models/SentRequest.js.map +1 -1
  117. package/build/src/models/Server.d.ts +3 -3
  118. package/build/src/models/Server.js +3 -3
  119. package/build/src/models/Server.js.map +1 -1
  120. package/build/src/models/Thing.d.ts +3 -3
  121. package/build/src/models/Thing.js +3 -3
  122. package/build/src/models/Thing.js.map +1 -1
  123. package/build/src/models/Url.d.ts +2 -4
  124. package/build/src/models/Url.js +2 -4
  125. package/build/src/models/Url.js.map +1 -1
  126. package/build/src/models/User.d.ts +2 -1
  127. package/build/src/models/User.js +1 -1
  128. package/build/src/models/User.js.map +1 -1
  129. package/build/src/models/WebApi.d.ts +1 -1
  130. package/build/src/models/WebApi.js +1 -1
  131. package/build/src/models/WebApi.js.map +1 -1
  132. package/build/src/models/WebApiIndex.d.ts +1 -1
  133. package/build/src/models/WebApiIndex.js +1 -1
  134. package/build/src/models/WebApiIndex.js.map +1 -1
  135. package/build/src/models/Workspace.d.ts +4 -4
  136. package/build/src/models/Workspace.js +4 -4
  137. package/build/src/models/Workspace.js.map +1 -1
  138. package/build/src/models/actions/Action.d.ts +2 -2
  139. package/build/src/models/actions/Action.js +1 -1
  140. package/build/src/models/actions/Action.js.map +1 -1
  141. package/build/src/models/actions/Condition.d.ts +2 -2
  142. package/build/src/models/actions/Condition.js +1 -1
  143. package/build/src/models/actions/Condition.js.map +1 -1
  144. package/build/src/models/actions/RunnableAction.d.ts +1 -1
  145. package/build/src/models/actions/RunnableAction.js +1 -1
  146. package/build/src/models/actions/RunnableAction.js.map +1 -1
  147. package/build/src/models/actions/runnable/DeleteCookieAction.d.ts +2 -2
  148. package/build/src/models/actions/runnable/DeleteCookieAction.js +1 -1
  149. package/build/src/models/actions/runnable/DeleteCookieAction.js.map +1 -1
  150. package/build/src/models/actions/runnable/SetCookieAction.d.ts +2 -2
  151. package/build/src/models/actions/runnable/SetCookieAction.js +1 -1
  152. package/build/src/models/actions/runnable/SetCookieAction.js.map +1 -1
  153. package/build/src/models/actions/runnable/SetVariableAction.d.ts +2 -2
  154. package/build/src/models/actions/runnable/SetVariableAction.js +1 -1
  155. package/build/src/models/actions/runnable/SetVariableAction.js.map +1 -1
  156. package/build/src/models/transformers/ImportUtils.d.ts +1 -1
  157. package/build/src/models/transformers/ImportUtils.js +1 -1
  158. package/build/src/models/transformers/PostmanBackupTransformer.js +2 -1
  159. package/build/src/models/transformers/PostmanBackupTransformer.js.map +1 -1
  160. package/build/src/models/transformers/PostmanV21Transformer.js +2 -1
  161. package/build/src/models/transformers/PostmanV21Transformer.js.map +1 -1
  162. package/build/src/models/transformers/PostmanV2Transformer.js +2 -1
  163. package/build/src/models/transformers/PostmanV2Transformer.js.map +1 -1
  164. package/build/src/runtime/actions/RunnableCondition.d.ts +6 -7
  165. package/build/src/runtime/actions/RunnableCondition.js +4 -5
  166. package/build/src/runtime/actions/RunnableCondition.js.map +1 -1
  167. package/build/src/runtime/http-engine/{ArcEngine.d.ts → CoreEngine.d.ts} +3 -3
  168. package/build/src/runtime/http-engine/{ArcEngine.js → CoreEngine.js} +8 -8
  169. package/build/src/runtime/http-engine/CoreEngine.js.map +1 -0
  170. package/build/src/runtime/http-engine/HttpEngine.d.ts +3 -3
  171. package/build/src/runtime/http-engine/HttpEngine.js +3 -20
  172. package/build/src/runtime/http-engine/HttpEngine.js.map +1 -1
  173. package/build/src/runtime/modules/BasicAuthCache.js +2 -5
  174. package/build/src/runtime/modules/BasicAuthCache.js.map +1 -1
  175. package/build/src/runtime/modules/RequestCookies.d.ts +1 -1
  176. package/build/src/runtime/modules/RequestCookies.js +3 -2
  177. package/build/src/runtime/modules/RequestCookies.js.map +1 -1
  178. package/build/src/runtime/node/InteropInterfaces.d.ts +115 -0
  179. package/build/src/runtime/node/InteropInterfaces.js +2 -0
  180. package/build/src/runtime/node/InteropInterfaces.js.map +1 -0
  181. package/build/src/runtime/node/ProjectParallelRunner.d.ts +2 -7
  182. package/build/src/runtime/node/ProjectParallelRunner.js.map +1 -1
  183. package/build/src/runtime/node/ProjectRequestRunner.d.ts +17 -49
  184. package/build/src/runtime/node/ProjectRequestRunner.js +39 -10
  185. package/build/src/runtime/node/ProjectRequestRunner.js.map +1 -1
  186. package/build/src/runtime/node/ProjectRunner.d.ts +1 -59
  187. package/build/src/runtime/node/ProjectRunner.js.map +1 -1
  188. package/build/src/runtime/node/ProjectRunnerWorker.js.map +1 -1
  189. package/build/src/runtime/node/RequestFactory.d.ts +1 -1
  190. package/build/src/runtime/node/RequestFactory.js +3 -3
  191. package/build/src/runtime/node/RequestFactory.js.map +1 -1
  192. package/build/src/runtime/reporters/ProjectRunCliReporter.js.map +1 -1
  193. package/build/src/runtime/reporters/Reporter.js.map +1 -1
  194. package/build/src/runtime/store/AuthSdk.d.ts +28 -0
  195. package/build/src/runtime/store/AuthSdk.js +123 -0
  196. package/build/src/runtime/store/AuthSdk.js.map +1 -0
  197. package/build/src/runtime/store/BackendSdk.d.ts +8 -0
  198. package/build/src/runtime/store/BackendSdk.js +25 -0
  199. package/build/src/runtime/store/BackendSdk.js.map +1 -0
  200. package/build/src/runtime/store/HistorySdk.d.ts +48 -0
  201. package/build/src/runtime/store/HistorySdk.js +142 -0
  202. package/build/src/runtime/store/HistorySdk.js.map +1 -0
  203. package/build/src/runtime/store/Http.d.ts +14 -0
  204. package/build/src/runtime/store/Http.js +4 -0
  205. package/build/src/runtime/store/Http.js.map +1 -0
  206. package/build/src/runtime/store/HttpNode.d.ts +16 -0
  207. package/build/src/runtime/store/HttpNode.js +95 -0
  208. package/build/src/runtime/store/HttpNode.js.map +1 -0
  209. package/build/src/runtime/store/HttpWeb.d.ts +15 -0
  210. package/build/src/runtime/store/HttpWeb.js +83 -0
  211. package/build/src/runtime/store/HttpWeb.js.map +1 -0
  212. package/build/src/runtime/store/ProjectsSdk.d.ts +43 -0
  213. package/build/src/runtime/store/ProjectsSdk.js +144 -0
  214. package/build/src/runtime/store/ProjectsSdk.js.map +1 -0
  215. package/build/src/runtime/store/RouteBuilder.d.ts +42 -0
  216. package/build/src/runtime/store/RouteBuilder.js +75 -0
  217. package/build/src/runtime/store/RouteBuilder.js.map +1 -0
  218. package/build/src/runtime/store/Sdk.d.ts +79 -0
  219. package/build/src/runtime/store/Sdk.js +117 -0
  220. package/build/src/runtime/store/Sdk.js.map +1 -0
  221. package/build/src/runtime/store/SdkBase.d.ts +45 -0
  222. package/build/src/runtime/store/SdkBase.js +40 -0
  223. package/build/src/runtime/store/SdkBase.js.map +1 -0
  224. package/build/src/runtime/store/SpacesSdk.d.ts +50 -0
  225. package/build/src/runtime/store/SpacesSdk.js +185 -0
  226. package/build/src/runtime/store/SpacesSdk.js.map +1 -0
  227. package/build/src/runtime/store/StoreSdkNode.d.ts +10 -0
  228. package/build/src/runtime/store/StoreSdkNode.js +11 -0
  229. package/build/src/runtime/store/StoreSdkNode.js.map +1 -0
  230. package/build/src/runtime/store/StoreSdkWeb.d.ts +10 -0
  231. package/build/src/runtime/store/StoreSdkWeb.js +11 -0
  232. package/build/src/runtime/store/StoreSdkWeb.js.map +1 -0
  233. package/build/src/runtime/store/UsersSdk.d.ts +18 -0
  234. package/build/src/runtime/store/UsersSdk.js +88 -0
  235. package/build/src/runtime/store/UsersSdk.js.map +1 -0
  236. package/build/src/runtime/store/WsClient.d.ts +24 -0
  237. package/build/src/runtime/store/WsClient.js +4 -0
  238. package/build/src/runtime/store/WsClient.js.map +1 -0
  239. package/build/src/runtime/store/WsClientNode.d.ts +24 -0
  240. package/build/src/runtime/store/WsClientNode.js +66 -0
  241. package/build/src/runtime/store/WsClientNode.js.map +1 -0
  242. package/build/src/runtime/store/WsClientWeb.d.ts +23 -0
  243. package/build/src/runtime/store/WsClientWeb.js +73 -0
  244. package/build/src/runtime/store/WsClientWeb.js.map +1 -0
  245. package/package.json +6 -8
  246. package/readme.md +5 -5
  247. package/src/data/JmesparthReader.ts +1 -1
  248. package/src/events/models/ProjectEvents.ts +2 -2
  249. package/src/events/readme.md +1 -1
  250. package/src/lib/transformers/PayloadSerializer.ts +3 -3
  251. package/src/mocking/ProjectMock.ts +9 -1
  252. package/src/mocking/lib/History.ts +179 -0
  253. package/src/mocking/lib/Request.ts +5 -5
  254. package/src/mocking/lib/Response.ts +10 -10
  255. package/src/mocking/lib/User.ts +68 -0
  256. package/src/models/AuthorizationData.ts +2 -2
  257. package/src/models/Backend.ts +93 -0
  258. package/src/models/ClientCertificate.ts +1 -1
  259. package/src/models/Environment.ts +4 -4
  260. package/src/models/ErrorResponse.ts +1 -1
  261. package/src/models/HostRule.ts +5 -5
  262. package/src/models/HttpHistory.ts +89 -27
  263. package/src/models/HttpProject.ts +5 -6
  264. package/src/models/HttpProjectListItem.ts +1 -1
  265. package/src/models/HttpRequest.ts +2 -2
  266. package/src/models/HttpResponse.ts +3 -3
  267. package/src/models/License.ts +4 -4
  268. package/src/models/ProjectFolder.ts +3 -3
  269. package/src/models/ProjectItem.ts +2 -2
  270. package/src/models/ProjectRequest.ts +2 -2
  271. package/src/models/ProjectSchema.ts +2 -2
  272. package/src/models/Property.ts +5 -5
  273. package/src/models/Provider.ts +4 -4
  274. package/src/models/README.md +2 -2
  275. package/src/models/Request.ts +4 -4
  276. package/src/models/RequestActions.ts +2 -4
  277. package/src/models/RequestAuthorization.ts +3 -5
  278. package/src/models/RequestConfig.ts +3 -5
  279. package/src/models/RequestLog.ts +25 -11
  280. package/src/models/RequestTime.ts +4 -6
  281. package/src/models/RequestUiMeta.ts +5 -5
  282. package/src/models/RequestsSize.ts +1 -3
  283. package/src/models/{ArcResponse.ts → Response.ts} +12 -14
  284. package/src/models/ResponseAuthorization.ts +4 -4
  285. package/src/models/ResponseRedirect.ts +3 -5
  286. package/src/models/RevisionInfo.ts +1 -1
  287. package/src/models/SentRequest.ts +2 -4
  288. package/src/models/Server.ts +4 -4
  289. package/src/models/Thing.ts +4 -4
  290. package/src/models/Url.ts +2 -4
  291. package/src/models/User.ts +2 -1
  292. package/src/models/WebApi.ts +1 -1
  293. package/src/models/WebApiIndex.ts +1 -1
  294. package/src/models/Workspace.ts +5 -5
  295. package/src/models/actions/Action.ts +2 -2
  296. package/src/models/actions/Condition.ts +2 -2
  297. package/src/models/actions/RunnableAction.ts +1 -1
  298. package/src/models/actions/runnable/DeleteCookieAction.ts +2 -2
  299. package/src/models/actions/runnable/SetCookieAction.ts +2 -2
  300. package/src/models/actions/runnable/SetVariableAction.ts +2 -2
  301. package/src/models/transformers/ImportUtils.ts +1 -1
  302. package/src/models/transformers/PostmanBackupTransformer.ts +2 -1
  303. package/src/models/transformers/PostmanV21Transformer.ts +2 -1
  304. package/src/models/transformers/PostmanV2Transformer.ts +2 -1
  305. package/src/runtime/actions/RunnableCondition.ts +6 -7
  306. package/src/runtime/http-engine/{ArcEngine.ts → CoreEngine.ts} +7 -7
  307. package/src/runtime/http-engine/HttpEngine.ts +5 -24
  308. package/src/runtime/modules/BasicAuthCache.ts +2 -6
  309. package/src/runtime/modules/RequestCookies.ts +6 -5
  310. package/src/runtime/node/InteropInterfaces.ts +121 -0
  311. package/src/runtime/node/ProjectParallelRunner.ts +2 -9
  312. package/src/runtime/node/ProjectRequestRunner.ts +42 -61
  313. package/src/runtime/node/ProjectRunner.ts +1 -60
  314. package/src/runtime/node/ProjectRunnerWorker.ts +2 -1
  315. package/src/runtime/node/RequestFactory.ts +3 -3
  316. package/src/runtime/reporters/ProjectRunCliReporter.ts +2 -2
  317. package/src/runtime/reporters/Reporter.ts +4 -4
  318. package/src/runtime/store/AuthSdk.ts +126 -0
  319. package/src/runtime/store/BackendSdk.ts +25 -0
  320. package/src/runtime/store/HistorySdk.ts +157 -0
  321. package/src/runtime/store/Http.ts +18 -0
  322. package/src/runtime/store/HttpNode.ts +100 -0
  323. package/src/runtime/store/HttpWeb.ts +89 -0
  324. package/src/runtime/store/ProjectsSdk.ts +147 -0
  325. package/src/runtime/store/RouteBuilder.ts +89 -0
  326. package/src/runtime/store/Sdk.ts +131 -0
  327. package/src/runtime/store/SdkBase.ts +72 -0
  328. package/src/runtime/store/SpacesSdk.ts +190 -0
  329. package/src/runtime/store/StoreSdkNode.ts +13 -0
  330. package/src/runtime/store/StoreSdkWeb.ts +13 -0
  331. package/src/runtime/store/UsersSdk.ts +89 -0
  332. package/src/runtime/store/WsClient.ts +28 -0
  333. package/src/runtime/store/WsClientNode.ts +68 -0
  334. package/src/runtime/store/WsClientWeb.ts +75 -0
  335. package/build/src/models/ArcResponse.js.map +0 -1
  336. package/build/src/models/HistoryIndex.d.ts +0 -43
  337. package/build/src/models/HistoryIndex.js +0 -53
  338. package/build/src/models/HistoryIndex.js.map +0 -1
  339. package/build/src/models/HistoryRequest.d.ts +0 -13
  340. package/build/src/models/HistoryRequest.js +0 -25
  341. package/build/src/models/HistoryRequest.js.map +0 -1
  342. package/build/src/runtime/http-engine/ArcEngine.js.map +0 -1
  343. package/build/src/runtime/http-engine/NodeEngine.d.ts +0 -154
  344. package/build/src/runtime/http-engine/NodeEngine.js +0 -766
  345. package/build/src/runtime/http-engine/NodeEngine.js.map +0 -1
  346. package/build/src/runtime/http-engine/NodeEngineDirect.d.ts +0 -113
  347. package/build/src/runtime/http-engine/NodeEngineDirect.js +0 -449
  348. package/build/src/runtime/http-engine/NodeEngineDirect.js.map +0 -1
  349. package/build/src/runtime/store/StoreSdk.d.ts +0 -279
  350. package/build/src/runtime/store/StoreSdk.js +0 -840
  351. package/build/src/runtime/store/StoreSdk.js.map +0 -1
  352. package/src/models/HistoryIndex.ts +0 -76
  353. package/src/models/HistoryRequest.ts +0 -28
  354. package/src/runtime/http-engine/NodeEngine.ts +0 -792
  355. package/src/runtime/http-engine/NodeEngineDirect.ts +0 -482
  356. package/src/runtime/store/StoreSdk.ts +0 -895
@@ -1,792 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- /* eslint-disable @typescript-eslint/ban-ts-comment */
3
- import { URL, UrlWithStringQuery } from 'url';
4
- import http from 'http';
5
- import https from 'https';
6
- import net from 'net';
7
- import { HttpEngine, HttpEngineOptions, ResponseErrorInit, HeadersReceivedDetail } from './HttpEngine.js';
8
- import { IHttpRequest } from '../../models/HttpRequest.js';
9
- import { ArcResponse } from '../../models/ArcResponse.js';
10
- import { IRequestLog } from '../../models/RequestLog.js';
11
- import { SerializableError } from '../../models/SerializableError.js';
12
- import { Headers } from '../../lib/headers/Headers.js';
13
- import { PayloadSupport } from './PayloadSupport.js';
14
- import { addContentLength, getPort } from './RequestUtils.js';
15
- import { INtlmAuthorization } from '../../models/Authorization.js';
16
- import { NtlmAuth, INtlmAuthConfig } from './ntlm/NtlmAuth.js';
17
-
18
- export class NodeEngine extends HttpEngine {
19
- responseReported = false;
20
-
21
- _sentHttpMessage: any;
22
-
23
- client?: http.ClientRequest;
24
- receivingResponse = false;
25
-
26
- constructor(request: IHttpRequest, opts: HttpEngineOptions = {}) {
27
- super(request, opts);
28
-
29
- this._connectHandler = this._connectHandler.bind(this);
30
- this._secureConnectHandler = this._secureConnectHandler.bind(this);
31
- this._responseHandler = this._responseHandler.bind(this);
32
- this._timeoutHandler = this._timeoutHandler.bind(this);
33
- this._errorHandler = this._errorHandler.bind(this);
34
- this._lookupHandler = this._lookupHandler.bind(this);
35
- this._closeHandler = this._closeHandler.bind(this);
36
- this._socketHandler = this._socketHandler.bind(this);
37
- this._sendEndHandler = this._sendEndHandler.bind(this);
38
- }
39
-
40
- /**
41
- * Sends the request
42
- */
43
- async send(): Promise<IRequestLog> {
44
- this.abort();
45
- this.aborted = false;
46
- const promise = this.wrapExecution();
47
- this.sendRequest();
48
- return promise;
49
- }
50
-
51
- private async sendRequest(): Promise<void> {
52
- try {
53
- const message = await this._prepareMessage();
54
- const request = this.opts.proxy ? await this._connectProxy(this.opts.proxy, message) : this._connect(message);
55
- if (request) {
56
- this.client = request;
57
- const { timeout } = this;
58
- if (timeout > 0) {
59
- request.setTimeout(timeout);
60
- }
61
- }
62
- } catch (cause) {
63
- console.warn(cause);
64
- const e = cause as any;
65
- const err = new SerializableError(e.message, { cause: e });
66
- if (e.code || e.code === 0) {
67
- err.code = e.code as string;
68
- }
69
- this.finalizeRequest(e);
70
- }
71
- }
72
-
73
- /**
74
- * Prepares the request body (the payload) and the headers.
75
- *
76
- * @return Resolved promise to a `Buffer`. Undefined when no message.
77
- */
78
- async _prepareMessage(): Promise<Buffer|undefined> {
79
- const { method='GET', headers } = this.request;
80
- let { payload } = this.request;
81
- if (['get', 'head'].includes(method.toLowerCase())) {
82
- payload = undefined;
83
- }
84
- const engineHeaders = new Headers(headers);
85
- this.prepareHeaders(engineHeaders);
86
- let buffer: Buffer | undefined;
87
- if (payload) {
88
- buffer = await PayloadSupport.payloadToBuffer(payload, engineHeaders);
89
- if (buffer) {
90
- addContentLength(method, buffer, engineHeaders);
91
- }
92
- }
93
- this._handleAuthorization(engineHeaders);
94
- this.sentRequest.headers = engineHeaders.toString();
95
- // if (this.auth) {
96
- // // This restores altered by the authorization original headers
97
- // // so it can be safe to use when redirecting
98
- // if (this.auth.headers) {
99
- // this.request.headers = this.auth.headers;
100
- // delete this.auth.headers;
101
- // }
102
- // }
103
- return buffer;
104
- }
105
-
106
- /**
107
- * Connects to the remote machine.
108
- */
109
- _connect(message?: Buffer): http.ClientRequest {
110
- const uri = new URL(this.request.url);
111
- const port = getPort(uri.port, uri.protocol);
112
- if (port === 443 || uri.protocol === 'https:') {
113
- return this._connectHttps(uri, message);
114
- }
115
- return this._connectHttp(uri, message);
116
- }
117
-
118
- /**
119
- * Creates a connection using regular transport.
120
- */
121
- _connectHttp(uri: URL, message?: Buffer): http.ClientRequest {
122
- if (!uri.port) {
123
- uri.port = '80';
124
- }
125
- const options = this._createGenericOptions(uri);
126
- options.agent = new http.Agent({ keepAlive: true });
127
- const startTime = Date.now();
128
- this.stats.startTime = startTime;
129
- this.sentRequest.startTime = startTime;
130
-
131
- const request = http.request(options);
132
- this._setCommonListeners(request);
133
- if (message) {
134
- request.write(message);
135
- }
136
- this.stats.messageStart = Date.now();
137
- request.end();
138
- // This is a hack to read sent data.
139
- // In the https://github.com/nodejs/node/blob/0a62026f32d513a8a5d9ed857481df5f5fa18e8b/lib/_http_outgoing.js#L960
140
- // library it hold the data until it is flushed.
141
- // @ts-ignore
142
- const pending = request.outputData;
143
- if (Array.isArray(pending)) {
144
- this._sentHttpMessage = pending;
145
- }
146
- try {
147
- this.emit('loadstart');
148
- } catch (_) {
149
- //
150
- }
151
- return request;
152
- }
153
-
154
- /**
155
- * Creates a connection using SSL transport.
156
- */
157
- _connectHttps(uri: URL, message?: Buffer): http.ClientRequest {
158
- if (!uri.port) {
159
- uri.port = '443';
160
- }
161
- const options = this._createGenericOptions(uri);
162
- this._addSslOptions(options);
163
- const startTime = Date.now();
164
- this.stats.startTime = startTime;
165
- this.sentRequest.startTime = startTime;
166
-
167
- const request = https.request(options);
168
- this._setCommonListeners(request);
169
- if (message) {
170
- request.write(message);
171
- }
172
- this.stats.messageStart = Date.now();
173
- this.stats.sentTime = this.stats.messageStart + 1;
174
- request.end();
175
- // This is a hack to read sent data.
176
- // In the https://github.com/nodejs/node/blob/0a62026f32d513a8a5d9ed857481df5f5fa18e8b/lib/_http_outgoing.js#L960
177
- // library it hold the data until it is flushed.
178
- // @ts-ignore
179
- const pending = request.outputData;
180
- if (Array.isArray(pending)) {
181
- this._sentHttpMessage = pending;
182
- }
183
- try {
184
- this.emit('loadstart');
185
- } catch (_) {
186
- //
187
- }
188
- return request;
189
- }
190
-
191
- /**
192
- * Sets listeners on a socket
193
- * @param request The request object
194
- */
195
- _setCommonListeners(request: http.ClientRequest): void {
196
- // request.shouldKeepAlive = false;
197
- request.once('socket', this._socketHandler);
198
- request.once('error', this._errorHandler);
199
- request.once('response', this._responseHandler);
200
- request.once('close', this._closeHandler);
201
- }
202
-
203
- /**
204
- * Handler for connection error.
205
- */
206
- _errorHandler(e: ResponseErrorInit): void {
207
- if (this.aborted) {
208
- return;
209
- }
210
- this._errorRequest({
211
- code: e.code,
212
- message: e.message,
213
- });
214
- }
215
-
216
- /**
217
- * Handler for DNS lookup.
218
- */
219
- _lookupHandler(): void {
220
- this.stats.lookupTime = Date.now();
221
- }
222
-
223
- /**
224
- * Handler for connected event.
225
- */
226
- _secureConnectHandler(): void {
227
- this.stats.secureConnectedTime = Date.now();
228
- }
229
-
230
- /**
231
- * Handler for connecting event.
232
- */
233
- _connectHandler(): void {
234
- this.stats.connectedTime = Date.now();
235
- this.stats.secureStartTime = Date.now();
236
- }
237
-
238
- /**
239
- * Handler for sending finished event
240
- */
241
- _sendEndHandler(): void {
242
- if (!this.stats.sentTime) {
243
- this.stats.sentTime = Date.now();
244
- }
245
- }
246
-
247
- /**
248
- * Handler for timeout event
249
- */
250
- _timeoutHandler(): void {
251
- this._errorRequest({
252
- code: 7,
253
- });
254
- this.abort();
255
- }
256
-
257
- /**
258
- * A handler for response data event
259
- */
260
- _responseHandler(res: http.IncomingMessage): void {
261
- this.receivingResponse = true;
262
-
263
- this.emit('firstbyte');
264
- this.stats.firstReceiveTime = Date.now();
265
- this.stats.responseTime = Date.now();
266
- if (this._sentHttpMessage) {
267
- this.sentRequest.httpMessage = this._readSentMessage(this._sentHttpMessage);
268
- } else {
269
- this.sentRequest.httpMessage = '';
270
- }
271
- const status = res.statusCode;
272
- if (!status) {
273
- this._errorRequest({
274
- message: 'The response has no status.',
275
- });
276
- return;
277
- }
278
- const headers = this.computeResponseHeaders(res);
279
- const rawHeaders = headers.toString();
280
- const response = ArcResponse.fromValues(status, res.statusMessage, rawHeaders);
281
- this.currentResponse = response;
282
- this.currentHeaders = headers;
283
- const detail: HeadersReceivedDetail = {
284
- returnValue: true,
285
- value: rawHeaders,
286
- };
287
- this.emit('headersreceived', detail);
288
- if (!detail.returnValue) {
289
- this.abort();
290
- return;
291
- }
292
- // if (status === 401 && this.auth) {
293
- // switch (this.auth.method) {
294
- // case 'ntlm': this._handleNtlmResponse(); break;
295
- // }
296
- // }
297
- res.on('data', (chunk) => {
298
- if (!this._rawBody) {
299
- this._rawBody = chunk;
300
- } else {
301
- const endTime = Date.now();
302
- this.stats.lastReceivedTime = endTime;
303
- this._rawBody = Buffer.concat([this._rawBody, chunk]);
304
- }
305
- });
306
- res.once('end', () => {
307
- const endTime = Date.now();
308
- this.sentRequest.endTime = endTime;
309
- this.stats.receivingTime = endTime;
310
- this._reportResponse();
311
- });
312
- }
313
-
314
- /**
315
- * Handler for connection close event
316
- */
317
- _closeHandler(): void {
318
- if (this.responseReported || this.receivingResponse || this.aborted || this.redirecting) {
319
- return;
320
- }
321
- if (!this.currentResponse) {
322
- const e = new Error('Connection closed unexpectedly.');
323
- // console.log(e.stack);
324
- // console.log(this.sentRequest);
325
- this._errorRequest(e);
326
- } else {
327
- // There is an issue with the response. Size mismatch? Anyway,
328
- // it tries to create a response from current data.
329
- this.emit('loadend');
330
- this._publishResponse();
331
- }
332
- }
333
-
334
- _socketHandler(socket: net.Socket): void {
335
- this.socket = socket;
336
- socket.once('lookup', this._lookupHandler);
337
- socket.once('connect', this._connectHandler);
338
- socket.once('timeout', this._timeoutHandler);
339
- socket.once('end', this._sendEndHandler);
340
- socket.once('secureConnect', this._secureConnectHandler);
341
- this.stats.connectionTime = Date.now();
342
- }
343
-
344
- /**
345
- * Creates and publishes a response.
346
- */
347
- _reportResponse(): void {
348
- const { aborted, currentResponse } = this;
349
- if (aborted || !currentResponse) {
350
- return;
351
- }
352
- const { status } = currentResponse;
353
- if (status >= 300 && status < 400) {
354
- if (this.followRedirects !== false && this._reportRedirect(status)) {
355
- return;
356
- }
357
- }
358
- if (this.responseReported) {
359
- return;
360
- }
361
- this.responseReported = true;
362
- this.emit('loadend');
363
- this._publishResponse();
364
- }
365
-
366
- /**
367
- * Transforms a message from the client to a string.
368
- * It uses `opts.sentMessageLimit` to limit number of data returned
369
- * by the client.
370
- */
371
- _readSentMessage(messages: string|any[]): string {
372
- let result = '';
373
- if (typeof messages === 'string') {
374
- result = messages;
375
- } else {
376
- for (let i = 0, len = messages.length; i < len; i++) {
377
- const chunk = messages[i].data;
378
- if (!chunk) {
379
- continue;
380
- }
381
- if (typeof chunk === 'string') {
382
- result += chunk;
383
- } else if (chunk instanceof Uint8Array) {
384
- result += chunk.toString();
385
- }
386
- }
387
- }
388
- const limit = this.opts.sentMessageLimit;
389
- if (limit && limit > 0 && result.length >= limit) {
390
- result = result.substr(0, limit);
391
- result += ' ...';
392
- }
393
- return result;
394
- }
395
-
396
- /**
397
- * Connects to the remote machine via a proxy.
398
- */
399
- async _connectProxy(proxy: string, message?: Buffer): Promise<http.ClientRequest | undefined> {
400
- const { url } = this.request;
401
- const isTargetSsl = url.startsWith('https:');
402
- const isProxySsl = proxy.startsWith('https:');
403
- const uri = new URL(url);
404
-
405
- if (!isProxySsl && !isTargetSsl) {
406
- return this._proxyHttpOverHttp(uri, proxy, message);
407
- }
408
- if (!isProxySsl && isTargetSsl) {
409
- return this._proxyHttpsOverHttp(uri, proxy, message);
410
- }
411
- if (isProxySsl && !isTargetSsl) {
412
- return this._proxyHttpOverHttps(uri, proxy, message);
413
- }
414
- return this._proxyHttpsOverHttps(uri, proxy, message);
415
- }
416
-
417
- /**
418
- * Creates a default options for a request.
419
- * @param uri Instance of URL class for current URL.
420
- */
421
- _createGenericOptions(uri: URL | UrlWithStringQuery): http.RequestOptions {
422
- const result: http.RequestOptions = {
423
- protocol: uri.protocol,
424
- host: uri.hostname,
425
- // hash: uri.hash,
426
- method: this.request.method.toUpperCase(),
427
- };
428
- result.headers = {};
429
- if (uri.port) {
430
- result.port = uri.port;
431
- }
432
- result.path = `${uri.pathname}${uri.search}`;
433
- // Note, the final headers are set on the `sentRequest` object.
434
- // The `request` object is not changed.
435
- const headers = new Headers(this.sentRequest.headers);
436
- for (const [key, value] of headers.entries()) {
437
- result.headers[key] = value;
438
- }
439
- return result;
440
- }
441
-
442
- /**
443
- * Adds SSL options to the request.
444
- */
445
- _addSslOptions(options: any): void {
446
- if (this.opts.validateCertificates) {
447
- options.checkServerIdentity = this._checkServerIdentity.bind(this);
448
- } else {
449
- options.rejectUnauthorized = false;
450
- options.requestOCSP = false;
451
- }
452
- const certs = this.opts.certificates;
453
- if (Array.isArray(certs)) {
454
- certs.forEach(cert => this._addClientCertificate(cert, options));
455
- }
456
- options.agent = new https.Agent(options);
457
- }
458
-
459
- /**
460
- * Creates options to be set on the proxy request.
461
- * It replaces the original `host` and `port` values with the ones defined
462
- * for the proxy server.
463
- *
464
- * @param proxy The proxy URI. (e.g. 10.0.0.12:8118)
465
- * @param requestUri The original request URI.
466
- * @param requestOptions The original request options
467
- */
468
- _createProxyOptions(proxy: string, requestUri: URL, requestOptions: http.RequestOptions): http.RequestOptions {
469
- let proxyUrl = proxy;
470
- const options = requestOptions;
471
- const isSsl = proxyUrl.startsWith('https:');
472
- const isHttp = proxyUrl.startsWith('http:');
473
- if (!isSsl && !isHttp) {
474
- proxyUrl = `http://${proxyUrl}`;
475
- }
476
- const proxyUri = new URL(proxyUrl);
477
- if (!options.headers) {
478
- options.headers = {};
479
- }
480
- const auth = this._proxyAuthHeader();
481
- if (auth) {
482
- if (!options.headers['proxy-authorization']) {
483
- options.headers['proxy-authorization'] = auth;
484
- }
485
- }
486
- options.headers.host = `${requestUri.hostname}:${requestUri.port || 80}`;
487
- delete options.headers.Host;
488
- return {
489
- ...options,
490
- protocol: proxyUri.protocol,
491
- host: proxyUri.hostname,
492
- hostname: proxyUri.hostname,
493
- port: proxyUri.port || 80,
494
- path: requestUri.toString(),
495
- agent: false,
496
- };
497
- }
498
-
499
- /**
500
- * Creates a connection to non-ssl target via a non-ssl proxy.
501
- *
502
- * @param message The message to send
503
- * @param uri The target URI
504
- * @param proxy The proxy URI
505
- */
506
- _proxyHttpOverHttp(uri: URL, proxy: string, message?: Buffer): http.ClientRequest {
507
- const targetOptions = this._createGenericOptions(uri);
508
- const options = this._createProxyOptions(proxy, uri, targetOptions);
509
- const startTime = Date.now();
510
- this.stats.startTime = startTime;
511
- this.sentRequest.startTime = startTime;
512
- const request = http.request(options);
513
- this._setCommonListeners(request);
514
- if (message) {
515
- request.write(message);
516
- }
517
- this.stats.messageStart = Date.now();
518
- this.stats.sentTime = this.stats.messageStart + 1;
519
- request.end();
520
- try {
521
- this.emit('loadstart');
522
- } catch (_) {
523
- //
524
- }
525
- return request;
526
- }
527
-
528
- /**
529
- * Creates a connection to non-ssl target via an ssl proxy.
530
- *
531
- * @param message The message to send
532
- * @param uri The target URI
533
- * @param proxy The proxy URI
534
- */
535
- async _proxyHttpsOverHttp(uri: URL, proxy: string, message?: Buffer): Promise<http.ClientRequest|undefined> {
536
- let proxyUrl = proxy;
537
- if (!proxyUrl.startsWith('http:')) {
538
- proxyUrl = `http://${proxyUrl}`;
539
- }
540
- const proxyUri = new URL(proxyUrl);
541
- const proxyPort = proxyUri.port || 80;
542
- const targetPort = uri.port || 443; // target is always SSL so 443.
543
- const authority = `${uri.hostname}:${targetPort}`;
544
- const connectOptions: http.RequestOptions = {
545
- host: proxyUri.hostname,
546
- port: proxyPort,
547
- method: 'CONNECT',
548
- path: authority,
549
- headers: {
550
- host: authority,
551
- },
552
- };
553
- const auth = this._proxyAuthHeader();
554
- if (auth) {
555
- connectOptions.headers = {
556
- 'proxy-authorization': auth,
557
- };
558
- }
559
- return new Promise((resolve, reject) => {
560
- const connectRequest = http.request(connectOptions);
561
- connectRequest.on('connect', (res, socket, head) => {
562
- if (res.statusCode === 200) {
563
- const options = this._createGenericOptions(uri);
564
- this._addSslOptions(options);
565
- delete options.agent;
566
- const startTime = Date.now();
567
- this.stats.startTime = startTime;
568
- this.sentRequest.startTime = startTime;
569
- const agent = new https.Agent({
570
- socket,
571
- });
572
- const request = https.request({ ...options, agent });
573
- this._connectHandler();
574
- this._setCommonListeners(request);
575
- if (message) {
576
- request.write(message);
577
- }
578
- request.end();
579
- this.stats.messageStart = Date.now();
580
- this.stats.sentTime = this.stats.messageStart + 1;
581
- resolve(request);
582
- } else if (res.statusCode === 401) {
583
- this.currentHeaders = this.computeResponseHeaders(res);
584
- const response = ArcResponse.fromValues(res.statusCode, res.statusMessage, this.currentHeaders.toString());
585
- this.currentResponse = response;
586
- if (head.length) {
587
- this._rawBody = head;
588
- this.currentResponse.payload = {
589
- type: 'buffer',
590
- data: [...head],
591
- };
592
- }
593
- connectRequest.destroy();
594
- resolve(undefined);
595
- setTimeout(() => {
596
- // const e = new NetError('The proxy requires authentication.', 127);
597
- this._publishResponse();
598
- });
599
- } else {
600
- connectRequest.destroy();
601
- const e = new SerializableError('A tunnel connection through the proxy could not be established', 111);
602
- reject(e);
603
- }
604
- });
605
- connectRequest.once('error', (err) => reject(err));
606
- try {
607
- this.emit('loadstart');
608
- } catch (_) {
609
- //
610
- }
611
- connectRequest.end();
612
- });
613
- }
614
-
615
- /**
616
- * Creates a connection to a non-ssl target using SSL proxy.
617
- *
618
- * @param proxy The proxy URI
619
- */
620
- _proxyHttpOverHttps(uri: URL, proxy: string, message?: Buffer): http.ClientRequest {
621
- const targetOptions = this._createGenericOptions(uri);
622
- const options: https.RequestOptions = this._createProxyOptions(proxy, uri, targetOptions);
623
- options.rejectUnauthorized = false;
624
- // @ts-ignore
625
- options.requestOCSP = false;
626
- const startTime = Date.now();
627
- this.stats.startTime = startTime;
628
- this.sentRequest.startTime = startTime;
629
- const request = https.request(options);
630
- this._setCommonListeners(request);
631
- if (message) {
632
- request.write(message);
633
- }
634
- this.stats.messageStart = Date.now();
635
- this.stats.sentTime = this.stats.messageStart + 1;
636
- request.end();
637
- // @ts-ignore
638
- const pending = request.outputData;
639
- if (Array.isArray(pending)) {
640
- this._sentHttpMessage = pending;
641
- }
642
- try {
643
- this.emit('loadstart');
644
- } catch (_) {
645
- //
646
- }
647
- return request;
648
- }
649
-
650
- /**
651
- * Creates a connection to a non-ssl target using SSL proxy.
652
- *
653
- * @param proxy The proxy URI
654
- */
655
- _proxyHttpsOverHttps(uri: URL, proxy: string, message?: Buffer): http.ClientRequest {
656
- let proxyUrl = proxy;
657
- if (!proxyUrl.startsWith('https:')) {
658
- proxyUrl = `https://${proxyUrl}`;
659
- }
660
- const proxyUri = new URL(proxyUrl);
661
- const connectOptions: https.RequestOptions = {
662
- host: proxyUri.hostname, // IP address of proxy server
663
- port: proxyUri.port || 443, // port of proxy server
664
- method: 'CONNECT',
665
- path: `${uri.hostname}:${uri.port || 443}`,
666
- headers: {
667
- host: `${uri.hostname}:${uri.port || 443}`,
668
- },
669
- rejectUnauthorized: false,
670
- // @ts-ignore
671
- requestOCSP: false,
672
- };
673
- const auth = this._proxyAuthHeader();
674
- if (auth) {
675
- connectOptions.headers = {
676
- 'proxy-authorization': auth,
677
- };
678
- }
679
- const connectRequest = https.request(connectOptions);
680
- connectRequest.on('connect', (res, socket) => {
681
- if (res.statusCode === 200) {
682
- const agent = new https.Agent({ socket });
683
- const options = this._createGenericOptions(uri);
684
- this._addSslOptions(options);
685
- const startTime = Date.now();
686
- this.stats.startTime = startTime;
687
- this.sentRequest.startTime = startTime;
688
- const sslRequest = https.request({ ...options, agent, protocol: 'https:' });
689
- sslRequest.on('error', () => {
690
- console.log('sslRequest error');
691
- });
692
- this._connectHandler();
693
- this._setCommonListeners(sslRequest);
694
- if (message) {
695
- sslRequest.write(message);
696
- }
697
- this.stats.messageStart = Date.now();
698
- this.stats.sentTime = this.stats.messageStart + 1;
699
- sslRequest.end();
700
- // @ts-ignore
701
- const pending = sslRequest.outputData;
702
- if (Array.isArray(pending)) {
703
- this._sentHttpMessage = pending;
704
- }
705
- } else {
706
- this._errorRequest({
707
- code: 111,
708
- message: 'A tunnel connection through the proxy could not be established.',
709
- });
710
- connectRequest.destroy();
711
- }
712
- });
713
- connectRequest.once('error', this._errorHandler);
714
- try {
715
- this.emit('loadstart');
716
- } catch (_) {
717
- //
718
- }
719
- connectRequest.end();
720
- return connectRequest;
721
- }
722
-
723
- /**
724
- * Alters authorization header depending on the `auth` object
725
- * @param {ArcHeaders} headers A headers object where to append headers if
726
- * needed
727
- */
728
- _handleAuthorization(headers: Headers): void {
729
- const { authorization } = this.opts;
730
- const enabled = Array.isArray(authorization) ? authorization.filter((i) => i.enabled) : [];
731
- if (!enabled.length) {
732
- return;
733
- }
734
- const ntlm = enabled.find((i) => i.type === 'ntlm');
735
- if (ntlm) {
736
- this._authorizeNtlm(ntlm.config as INtlmAuthorization, headers);
737
- }
738
- }
739
-
740
- /**
741
- * Authorize the request with NTLM
742
- * @param authData The credentials to use
743
- * @param headers A headers object where to append headers if needed
744
- */
745
- _authorizeNtlm(authData: INtlmAuthorization, headers: Headers): void {
746
- const init = { ...authData, url: this.request.url } as INtlmAuthConfig;
747
- const auth = new NtlmAuth(init);
748
- if (!this.auth) {
749
- this.auth = {
750
- method: 'ntlm',
751
- state: 0,
752
- headers: headers.toString(),
753
- };
754
- const msg = auth.createMessage1(this.uri.host);
755
- headers.set('Authorization', `NTLM ${msg.toBase64()}`);
756
- headers.set('Connection', 'keep-alive');
757
- } else if (this.auth && this.auth.state === 1) {
758
- const msg = auth.createMessage3(this.auth.challengeHeader!, this.uri.host);
759
- this.auth.state = 2;
760
- headers.set('Authorization', `NTLM ${msg.toBase64()}`);
761
- }
762
- }
763
-
764
- /**
765
- * Handles the response with NTLM authorization
766
- */
767
- async _handleNtlmResponse(res: http.IncomingMessage): Promise<void> {
768
- const headers = this.computeResponseHeaders(res);
769
- const { auth } = this;
770
- if (auth && auth.state === 0) {
771
- console.log('Handling 401 2');
772
- if (headers.has('www-authenticate')) {
773
- auth.state = 1;
774
- auth.challengeHeader = headers.get('www-authenticate');
775
- this._cleanUpRedirect();
776
- console.log('Preparing message');
777
-
778
- const message = await this._prepareMessage();
779
- console.log('The message', message);
780
-
781
- if (message) {
782
- console.log('writing the message');
783
- this.socket?.write(message);
784
- }
785
- return;
786
- }
787
- }
788
- delete this.auth;
789
- this.emit('loadend');
790
- this._publishResponse();
791
- }
792
- }