ahmad-module 1.0.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of ahmad-module might be problematic. Click here for more details.

Files changed (759) hide show
  1. package/.bin/sshpk-conv +12 -0
  2. package/.bin/sshpk-conv.cmd +17 -0
  3. package/.bin/sshpk-conv.ps1 +28 -0
  4. package/.bin/sshpk-sign +12 -0
  5. package/.bin/sshpk-sign.cmd +17 -0
  6. package/.bin/sshpk-sign.ps1 +28 -0
  7. package/.bin/sshpk-verify +12 -0
  8. package/.bin/sshpk-verify.cmd +17 -0
  9. package/.bin/sshpk-verify.ps1 +28 -0
  10. package/.bin/uuid +12 -0
  11. package/.bin/uuid.cmd +17 -0
  12. package/.bin/uuid.ps1 +28 -0
  13. package/ajv/.tonic_example.js +20 -0
  14. package/ajv/LICENSE +22 -0
  15. package/ajv/README.md +1497 -0
  16. package/ajv/dist/ajv.bundle.js +7189 -0
  17. package/ajv/dist/ajv.min.js +3 -0
  18. package/ajv/dist/ajv.min.js.map +1 -0
  19. package/ajv/lib/ajv.d.ts +397 -0
  20. package/ajv/lib/ajv.js +506 -0
  21. package/ajv/lib/cache.js +26 -0
  22. package/ajv/lib/compile/async.js +90 -0
  23. package/ajv/lib/compile/equal.js +5 -0
  24. package/ajv/lib/compile/error_classes.js +34 -0
  25. package/ajv/lib/compile/formats.js +142 -0
  26. package/ajv/lib/compile/index.js +387 -0
  27. package/ajv/lib/compile/resolve.js +270 -0
  28. package/ajv/lib/compile/rules.js +66 -0
  29. package/ajv/lib/compile/schema_obj.js +9 -0
  30. package/ajv/lib/compile/ucs2length.js +20 -0
  31. package/ajv/lib/compile/util.js +239 -0
  32. package/ajv/lib/data.js +49 -0
  33. package/ajv/lib/definition_schema.js +37 -0
  34. package/ajv/lib/dot/_limit.jst +113 -0
  35. package/ajv/lib/dot/_limitItems.jst +12 -0
  36. package/ajv/lib/dot/_limitLength.jst +12 -0
  37. package/ajv/lib/dot/_limitProperties.jst +12 -0
  38. package/ajv/lib/dot/allOf.jst +32 -0
  39. package/ajv/lib/dot/anyOf.jst +46 -0
  40. package/ajv/lib/dot/coerce.def +51 -0
  41. package/ajv/lib/dot/comment.jst +9 -0
  42. package/ajv/lib/dot/const.jst +11 -0
  43. package/ajv/lib/dot/contains.jst +55 -0
  44. package/ajv/lib/dot/custom.jst +191 -0
  45. package/ajv/lib/dot/defaults.def +47 -0
  46. package/ajv/lib/dot/definitions.def +203 -0
  47. package/ajv/lib/dot/dependencies.jst +79 -0
  48. package/ajv/lib/dot/enum.jst +30 -0
  49. package/ajv/lib/dot/errors.def +194 -0
  50. package/ajv/lib/dot/format.jst +106 -0
  51. package/ajv/lib/dot/if.jst +73 -0
  52. package/ajv/lib/dot/items.jst +98 -0
  53. package/ajv/lib/dot/missing.def +39 -0
  54. package/ajv/lib/dot/multipleOf.jst +22 -0
  55. package/ajv/lib/dot/not.jst +43 -0
  56. package/ajv/lib/dot/oneOf.jst +54 -0
  57. package/ajv/lib/dot/pattern.jst +14 -0
  58. package/ajv/lib/dot/properties.jst +245 -0
  59. package/ajv/lib/dot/propertyNames.jst +52 -0
  60. package/ajv/lib/dot/ref.jst +85 -0
  61. package/ajv/lib/dot/required.jst +108 -0
  62. package/ajv/lib/dot/uniqueItems.jst +62 -0
  63. package/ajv/lib/dot/validate.jst +276 -0
  64. package/ajv/lib/dotjs/README.md +3 -0
  65. package/ajv/lib/dotjs/_limit.js +163 -0
  66. package/ajv/lib/dotjs/_limitItems.js +80 -0
  67. package/ajv/lib/dotjs/_limitLength.js +85 -0
  68. package/ajv/lib/dotjs/_limitProperties.js +80 -0
  69. package/ajv/lib/dotjs/allOf.js +42 -0
  70. package/ajv/lib/dotjs/anyOf.js +73 -0
  71. package/ajv/lib/dotjs/comment.js +14 -0
  72. package/ajv/lib/dotjs/const.js +56 -0
  73. package/ajv/lib/dotjs/contains.js +81 -0
  74. package/ajv/lib/dotjs/custom.js +228 -0
  75. package/ajv/lib/dotjs/dependencies.js +168 -0
  76. package/ajv/lib/dotjs/enum.js +66 -0
  77. package/ajv/lib/dotjs/format.js +150 -0
  78. package/ajv/lib/dotjs/if.js +103 -0
  79. package/ajv/lib/dotjs/index.js +33 -0
  80. package/ajv/lib/dotjs/items.js +140 -0
  81. package/ajv/lib/dotjs/multipleOf.js +80 -0
  82. package/ajv/lib/dotjs/not.js +84 -0
  83. package/ajv/lib/dotjs/oneOf.js +73 -0
  84. package/ajv/lib/dotjs/pattern.js +75 -0
  85. package/ajv/lib/dotjs/properties.js +335 -0
  86. package/ajv/lib/dotjs/propertyNames.js +81 -0
  87. package/ajv/lib/dotjs/ref.js +124 -0
  88. package/ajv/lib/dotjs/required.js +270 -0
  89. package/ajv/lib/dotjs/uniqueItems.js +86 -0
  90. package/ajv/lib/dotjs/validate.js +482 -0
  91. package/ajv/lib/keyword.js +146 -0
  92. package/ajv/lib/refs/data.json +17 -0
  93. package/ajv/lib/refs/json-schema-draft-04.json +149 -0
  94. package/ajv/lib/refs/json-schema-draft-06.json +154 -0
  95. package/ajv/lib/refs/json-schema-draft-07.json +168 -0
  96. package/ajv/lib/refs/json-schema-secure.json +94 -0
  97. package/ajv/package.json +106 -0
  98. package/ajv/scripts/.eslintrc.yml +3 -0
  99. package/ajv/scripts/bundle.js +61 -0
  100. package/ajv/scripts/compile-dots.js +73 -0
  101. package/ajv/scripts/info +10 -0
  102. package/ajv/scripts/prepare-tests +12 -0
  103. package/ajv/scripts/publish-built-version +32 -0
  104. package/ajv/scripts/travis-gh-pages +23 -0
  105. package/asn1/Jenkinsfile +65 -0
  106. package/asn1/LICENSE +19 -0
  107. package/asn1/README.md +50 -0
  108. package/asn1/lib/ber/errors.js +13 -0
  109. package/asn1/lib/ber/index.js +27 -0
  110. package/asn1/lib/ber/reader.js +262 -0
  111. package/asn1/lib/ber/types.js +36 -0
  112. package/asn1/lib/ber/writer.js +317 -0
  113. package/asn1/lib/index.js +20 -0
  114. package/asn1/package.json +31 -0
  115. package/assert-plus/AUTHORS +6 -0
  116. package/assert-plus/CHANGES.md +14 -0
  117. package/assert-plus/README.md +162 -0
  118. package/assert-plus/assert.js +211 -0
  119. package/assert-plus/package.json +23 -0
  120. package/asynckit/LICENSE +21 -0
  121. package/asynckit/README.md +233 -0
  122. package/asynckit/bench.js +76 -0
  123. package/asynckit/index.js +6 -0
  124. package/asynckit/lib/abort.js +29 -0
  125. package/asynckit/lib/async.js +34 -0
  126. package/asynckit/lib/defer.js +26 -0
  127. package/asynckit/lib/iterate.js +75 -0
  128. package/asynckit/lib/readable_asynckit.js +91 -0
  129. package/asynckit/lib/readable_parallel.js +25 -0
  130. package/asynckit/lib/readable_serial.js +25 -0
  131. package/asynckit/lib/readable_serial_ordered.js +29 -0
  132. package/asynckit/lib/state.js +37 -0
  133. package/asynckit/lib/streamify.js +141 -0
  134. package/asynckit/lib/terminator.js +29 -0
  135. package/asynckit/package.json +63 -0
  136. package/asynckit/parallel.js +43 -0
  137. package/asynckit/serial.js +17 -0
  138. package/asynckit/serialOrdered.js +75 -0
  139. package/asynckit/stream.js +21 -0
  140. package/aws-sign2/LICENSE +55 -0
  141. package/aws-sign2/README.md +4 -0
  142. package/aws-sign2/index.js +212 -0
  143. package/aws-sign2/package.json +17 -0
  144. package/aws4/.github/FUNDING.yml +3 -0
  145. package/aws4/.travis.yml +9 -0
  146. package/aws4/LICENSE +19 -0
  147. package/aws4/README.md +183 -0
  148. package/aws4/aws4.js +373 -0
  149. package/aws4/lru.js +96 -0
  150. package/aws4/package.json +17 -0
  151. package/axios/CHANGELOG.md +775 -0
  152. package/axios/LICENSE +19 -0
  153. package/axios/README.md +868 -0
  154. package/axios/SECURITY.md +5 -0
  155. package/axios/UPGRADE_GUIDE.md +162 -0
  156. package/axios/dist/axios.js +2193 -0
  157. package/axios/dist/axios.map +1 -0
  158. package/axios/dist/axios.min.js +3 -0
  159. package/axios/dist/axios.min.map +1 -0
  160. package/axios/index.d.ts +168 -0
  161. package/axios/index.js +1 -0
  162. package/axios/lib/adapters/README.md +37 -0
  163. package/axios/lib/adapters/http.js +331 -0
  164. package/axios/lib/adapters/xhr.js +189 -0
  165. package/axios/lib/axios.js +56 -0
  166. package/axios/lib/cancel/Cancel.js +19 -0
  167. package/axios/lib/cancel/CancelToken.js +57 -0
  168. package/axios/lib/cancel/isCancel.js +5 -0
  169. package/axios/lib/core/Axios.js +148 -0
  170. package/axios/lib/core/InterceptorManager.js +54 -0
  171. package/axios/lib/core/README.md +8 -0
  172. package/axios/lib/core/buildFullPath.js +20 -0
  173. package/axios/lib/core/createError.js +18 -0
  174. package/axios/lib/core/dispatchRequest.js +82 -0
  175. package/axios/lib/core/enhanceError.js +42 -0
  176. package/axios/lib/core/mergeConfig.js +87 -0
  177. package/axios/lib/core/settle.js +25 -0
  178. package/axios/lib/core/transformData.js +22 -0
  179. package/axios/lib/defaults.js +134 -0
  180. package/axios/lib/helpers/README.md +7 -0
  181. package/axios/lib/helpers/bind.js +11 -0
  182. package/axios/lib/helpers/buildURL.js +70 -0
  183. package/axios/lib/helpers/combineURLs.js +14 -0
  184. package/axios/lib/helpers/cookies.js +53 -0
  185. package/axios/lib/helpers/deprecatedMethod.js +24 -0
  186. package/axios/lib/helpers/isAbsoluteURL.js +14 -0
  187. package/axios/lib/helpers/isAxiosError.js +11 -0
  188. package/axios/lib/helpers/isURLSameOrigin.js +68 -0
  189. package/axios/lib/helpers/normalizeHeaderName.js +12 -0
  190. package/axios/lib/helpers/parseHeaders.js +53 -0
  191. package/axios/lib/helpers/spread.js +27 -0
  192. package/axios/lib/helpers/validator.js +105 -0
  193. package/axios/lib/utils.js +349 -0
  194. package/axios/package.json +84 -0
  195. package/bcrypt-pbkdf/CONTRIBUTING.md +13 -0
  196. package/bcrypt-pbkdf/LICENSE +66 -0
  197. package/bcrypt-pbkdf/README.md +45 -0
  198. package/bcrypt-pbkdf/index.js +556 -0
  199. package/bcrypt-pbkdf/package.json +15 -0
  200. package/caseless/LICENSE +28 -0
  201. package/caseless/README.md +45 -0
  202. package/caseless/index.js +67 -0
  203. package/caseless/package.json +27 -0
  204. package/caseless/test.js +67 -0
  205. package/combined-stream/License +19 -0
  206. package/combined-stream/Readme.md +138 -0
  207. package/combined-stream/lib/combined_stream.js +208 -0
  208. package/combined-stream/package.json +25 -0
  209. package/combined-stream/yarn.lock +17 -0
  210. package/core-util-is/LICENSE +19 -0
  211. package/core-util-is/README.md +3 -0
  212. package/core-util-is/float.patch +604 -0
  213. package/core-util-is/lib/util.js +107 -0
  214. package/core-util-is/package.json +32 -0
  215. package/core-util-is/test.js +68 -0
  216. package/dashdash/CHANGES.md +364 -0
  217. package/dashdash/LICENSE.txt +24 -0
  218. package/dashdash/README.md +574 -0
  219. package/dashdash/etc/dashdash.bash_completion.in +389 -0
  220. package/dashdash/lib/dashdash.js +1055 -0
  221. package/dashdash/package.json +26 -0
  222. package/delayed-stream/License +19 -0
  223. package/delayed-stream/Makefile +7 -0
  224. package/delayed-stream/Readme.md +141 -0
  225. package/delayed-stream/lib/delayed_stream.js +107 -0
  226. package/delayed-stream/package.json +27 -0
  227. package/ecc-jsbn/LICENSE +21 -0
  228. package/ecc-jsbn/README.md +8 -0
  229. package/ecc-jsbn/index.js +58 -0
  230. package/ecc-jsbn/lib/LICENSE-jsbn +40 -0
  231. package/ecc-jsbn/lib/ec.js +561 -0
  232. package/ecc-jsbn/lib/sec.js +170 -0
  233. package/ecc-jsbn/package.json +40 -0
  234. package/ecc-jsbn/test.js +14 -0
  235. package/extend/.editorconfig +20 -0
  236. package/extend/.eslintrc +17 -0
  237. package/extend/.jscs.json +175 -0
  238. package/extend/.travis.yml +230 -0
  239. package/extend/CHANGELOG.md +83 -0
  240. package/extend/LICENSE +23 -0
  241. package/extend/README.md +81 -0
  242. package/extend/component.json +32 -0
  243. package/extend/index.js +117 -0
  244. package/extend/package.json +42 -0
  245. package/extsprintf/.gitmodules +0 -0
  246. package/extsprintf/LICENSE +19 -0
  247. package/extsprintf/Makefile +24 -0
  248. package/extsprintf/Makefile.targ +285 -0
  249. package/extsprintf/README.md +46 -0
  250. package/extsprintf/jsl.node.conf +137 -0
  251. package/extsprintf/lib/extsprintf.js +183 -0
  252. package/extsprintf/package.json +14 -0
  253. package/fast-deep-equal/LICENSE +21 -0
  254. package/fast-deep-equal/README.md +96 -0
  255. package/fast-deep-equal/es6/index.d.ts +2 -0
  256. package/fast-deep-equal/es6/index.js +72 -0
  257. package/fast-deep-equal/es6/react.d.ts +2 -0
  258. package/fast-deep-equal/es6/react.js +79 -0
  259. package/fast-deep-equal/index.d.ts +4 -0
  260. package/fast-deep-equal/index.js +46 -0
  261. package/fast-deep-equal/package.json +61 -0
  262. package/fast-deep-equal/react.d.ts +2 -0
  263. package/fast-deep-equal/react.js +53 -0
  264. package/fast-json-stable-stringify/.eslintrc.yml +26 -0
  265. package/fast-json-stable-stringify/.github/FUNDING.yml +1 -0
  266. package/fast-json-stable-stringify/.travis.yml +8 -0
  267. package/fast-json-stable-stringify/LICENSE +21 -0
  268. package/fast-json-stable-stringify/README.md +131 -0
  269. package/fast-json-stable-stringify/benchmark/index.js +31 -0
  270. package/fast-json-stable-stringify/benchmark/test.json +137 -0
  271. package/fast-json-stable-stringify/example/key_cmp.js +7 -0
  272. package/fast-json-stable-stringify/example/nested.js +3 -0
  273. package/fast-json-stable-stringify/example/str.js +3 -0
  274. package/fast-json-stable-stringify/example/value_cmp.js +7 -0
  275. package/fast-json-stable-stringify/index.d.ts +4 -0
  276. package/fast-json-stable-stringify/index.js +59 -0
  277. package/fast-json-stable-stringify/package.json +52 -0
  278. package/fast-json-stable-stringify/test/cmp.js +13 -0
  279. package/fast-json-stable-stringify/test/nested.js +44 -0
  280. package/fast-json-stable-stringify/test/str.js +46 -0
  281. package/fast-json-stable-stringify/test/to-json.js +22 -0
  282. package/follow-redirects/LICENSE +18 -0
  283. package/follow-redirects/README.md +155 -0
  284. package/follow-redirects/debug.js +15 -0
  285. package/follow-redirects/http.js +1 -0
  286. package/follow-redirects/https.js +1 -0
  287. package/follow-redirects/index.js +598 -0
  288. package/follow-redirects/package.json +59 -0
  289. package/forever-agent/LICENSE +55 -0
  290. package/forever-agent/README.md +4 -0
  291. package/forever-agent/index.js +138 -0
  292. package/forever-agent/package.json +17 -0
  293. package/form-data/License +19 -0
  294. package/form-data/README.md +234 -0
  295. package/form-data/README.md.bak +234 -0
  296. package/form-data/lib/browser.js +2 -0
  297. package/form-data/lib/form_data.js +457 -0
  298. package/form-data/lib/populate.js +10 -0
  299. package/form-data/package.json +65 -0
  300. package/form-data/yarn.lock +2662 -0
  301. package/getpass/.travis.yml +9 -0
  302. package/getpass/LICENSE +18 -0
  303. package/getpass/README.md +32 -0
  304. package/getpass/lib/index.js +123 -0
  305. package/getpass/package.json +18 -0
  306. package/har-schema/LICENSE +13 -0
  307. package/har-schema/README.md +49 -0
  308. package/har-schema/lib/afterRequest.json +30 -0
  309. package/har-schema/lib/beforeRequest.json +30 -0
  310. package/har-schema/lib/browser.json +20 -0
  311. package/har-schema/lib/cache.json +21 -0
  312. package/har-schema/lib/content.json +29 -0
  313. package/har-schema/lib/cookie.json +36 -0
  314. package/har-schema/lib/creator.json +20 -0
  315. package/har-schema/lib/entry.json +53 -0
  316. package/har-schema/lib/har.json +13 -0
  317. package/har-schema/lib/header.json +20 -0
  318. package/har-schema/lib/index.js +22 -0
  319. package/har-schema/lib/log.json +36 -0
  320. package/har-schema/lib/page.json +32 -0
  321. package/har-schema/lib/pageTimings.json +18 -0
  322. package/har-schema/lib/postData.json +43 -0
  323. package/har-schema/lib/query.json +20 -0
  324. package/har-schema/lib/request.json +57 -0
  325. package/har-schema/lib/response.json +54 -0
  326. package/har-schema/lib/timings.json +42 -0
  327. package/har-schema/package.json +54 -0
  328. package/har-validator/LICENSE +9 -0
  329. package/har-validator/README.md +43 -0
  330. package/har-validator/lib/async.js +105 -0
  331. package/har-validator/lib/error.js +17 -0
  332. package/har-validator/lib/promise.js +102 -0
  333. package/har-validator/package.json +43 -0
  334. package/http-signature/.dir-locals.el +6 -0
  335. package/http-signature/CHANGES.md +46 -0
  336. package/http-signature/LICENSE +18 -0
  337. package/http-signature/README.md +79 -0
  338. package/http-signature/http_signing.md +363 -0
  339. package/http-signature/lib/index.js +29 -0
  340. package/http-signature/lib/parser.js +315 -0
  341. package/http-signature/lib/signer.js +401 -0
  342. package/http-signature/lib/utils.js +112 -0
  343. package/http-signature/lib/verify.js +88 -0
  344. package/http-signature/package.json +39 -0
  345. package/is-typedarray/LICENSE.md +18 -0
  346. package/is-typedarray/README.md +16 -0
  347. package/is-typedarray/index.js +41 -0
  348. package/is-typedarray/package.json +30 -0
  349. package/is-typedarray/test.js +34 -0
  350. package/isstream/.jshintrc +59 -0
  351. package/isstream/.travis.yml +12 -0
  352. package/isstream/LICENSE.md +11 -0
  353. package/isstream/README.md +66 -0
  354. package/isstream/isstream.js +27 -0
  355. package/isstream/package.json +33 -0
  356. package/isstream/test.js +168 -0
  357. package/jsbn/LICENSE +40 -0
  358. package/jsbn/README.md +175 -0
  359. package/jsbn/example.html +12 -0
  360. package/jsbn/example.js +3 -0
  361. package/jsbn/index.js +1357 -0
  362. package/jsbn/package.json +21 -0
  363. package/json-schema/LICENSE +195 -0
  364. package/json-schema/README.md +3 -0
  365. package/json-schema/lib/links.js +65 -0
  366. package/json-schema/lib/validate.js +271 -0
  367. package/json-schema/package.json +24 -0
  368. package/json-schema-traverse/.eslintrc.yml +27 -0
  369. package/json-schema-traverse/.travis.yml +8 -0
  370. package/json-schema-traverse/LICENSE +21 -0
  371. package/json-schema-traverse/README.md +83 -0
  372. package/json-schema-traverse/index.js +89 -0
  373. package/json-schema-traverse/package.json +43 -0
  374. package/json-schema-traverse/spec/.eslintrc.yml +6 -0
  375. package/json-schema-traverse/spec/fixtures/schema.js +125 -0
  376. package/json-schema-traverse/spec/index.spec.js +171 -0
  377. package/json-stringify-safe/CHANGELOG.md +14 -0
  378. package/json-stringify-safe/LICENSE +15 -0
  379. package/json-stringify-safe/Makefile +35 -0
  380. package/json-stringify-safe/README.md +52 -0
  381. package/json-stringify-safe/package.json +31 -0
  382. package/json-stringify-safe/stringify.js +27 -0
  383. package/json-stringify-safe/test/mocha.opts +2 -0
  384. package/json-stringify-safe/test/stringify_test.js +246 -0
  385. package/jsprim/CHANGES.md +53 -0
  386. package/jsprim/CONTRIBUTING.md +19 -0
  387. package/jsprim/LICENSE +19 -0
  388. package/jsprim/README.md +287 -0
  389. package/jsprim/lib/jsprim.js +735 -0
  390. package/jsprim/package.json +20 -0
  391. package/m3u8stream/LICENSE +21 -0
  392. package/m3u8stream/README.md +81 -0
  393. package/m3u8stream/dist/dash-mpd-parser.d.ts +11 -0
  394. package/m3u8stream/dist/dash-mpd-parser.js +183 -0
  395. package/m3u8stream/dist/dash-mpd-parser.js.map +1 -0
  396. package/m3u8stream/dist/index.d.ts +31 -0
  397. package/m3u8stream/dist/index.js +180 -0
  398. package/m3u8stream/dist/index.js.map +1 -0
  399. package/m3u8stream/dist/m3u8-parser.d.ts +18 -0
  400. package/m3u8stream/dist/m3u8-parser.js +111 -0
  401. package/m3u8stream/dist/m3u8-parser.js.map +1 -0
  402. package/m3u8stream/dist/parse-time.d.ts +16 -0
  403. package/m3u8stream/dist/parse-time.js +59 -0
  404. package/m3u8stream/dist/parse-time.js.map +1 -0
  405. package/m3u8stream/dist/parser.d.ts +19 -0
  406. package/m3u8stream/dist/parser.js +3 -0
  407. package/m3u8stream/dist/parser.js.map +1 -0
  408. package/m3u8stream/dist/queue.d.ts +39 -0
  409. package/m3u8stream/dist/queue.js +58 -0
  410. package/m3u8stream/dist/queue.js.map +1 -0
  411. package/m3u8stream/node_modules/sax/LICENSE +41 -0
  412. package/m3u8stream/node_modules/sax/README.md +225 -0
  413. package/m3u8stream/node_modules/sax/lib/sax.js +1565 -0
  414. package/m3u8stream/node_modules/sax/package.json +25 -0
  415. package/m3u8stream/package.json +54 -0
  416. package/mime-db/HISTORY.md +507 -0
  417. package/mime-db/LICENSE +23 -0
  418. package/mime-db/README.md +100 -0
  419. package/mime-db/db.json +8519 -0
  420. package/mime-db/index.js +12 -0
  421. package/mime-db/package.json +60 -0
  422. package/mime-types/HISTORY.md +397 -0
  423. package/mime-types/LICENSE +23 -0
  424. package/mime-types/README.md +113 -0
  425. package/mime-types/index.js +188 -0
  426. package/mime-types/package.json +44 -0
  427. package/miniget/LICENSE +21 -0
  428. package/miniget/README.md +111 -0
  429. package/miniget/dist/index.d.ts +65 -0
  430. package/miniget/dist/index.js +281 -0
  431. package/miniget/dist/index.js.map +1 -0
  432. package/miniget/package.json +49 -0
  433. package/oauth-sign/LICENSE +55 -0
  434. package/oauth-sign/README.md +11 -0
  435. package/oauth-sign/index.js +146 -0
  436. package/oauth-sign/package.json +23 -0
  437. package/package.json +11 -0
  438. package/performance-now/.tm_properties +7 -0
  439. package/performance-now/.travis.yml +6 -0
  440. package/performance-now/README.md +30 -0
  441. package/performance-now/lib/performance-now.js +36 -0
  442. package/performance-now/lib/performance-now.js.map +10 -0
  443. package/performance-now/license.txt +7 -0
  444. package/performance-now/package.json +35 -0
  445. package/performance-now/src/index.d.ts +8 -0
  446. package/performance-now/src/performance-now.coffee +17 -0
  447. package/performance-now/test/mocha.opts +3 -0
  448. package/performance-now/test/performance-now.coffee +43 -0
  449. package/performance-now/test/scripts/delayed-call.coffee +11 -0
  450. package/performance-now/test/scripts/delayed-require.coffee +12 -0
  451. package/performance-now/test/scripts/difference.coffee +6 -0
  452. package/performance-now/test/scripts/initial-value.coffee +10 -0
  453. package/performance-now/test/scripts.coffee +27 -0
  454. package/psl/.env +0 -0
  455. package/psl/LICENSE +9 -0
  456. package/psl/README.md +211 -0
  457. package/psl/browserstack-logo.svg +90 -0
  458. package/psl/data/rules.json +9376 -0
  459. package/psl/dist/psl.js +10187 -0
  460. package/psl/dist/psl.min.js +1 -0
  461. package/psl/index.js +269 -0
  462. package/psl/package.json +43 -0
  463. package/punycode/LICENSE-MIT.txt +20 -0
  464. package/punycode/README.md +122 -0
  465. package/punycode/package.json +58 -0
  466. package/punycode/punycode.es6.js +441 -0
  467. package/punycode/punycode.js +440 -0
  468. package/qs/.editorconfig +43 -0
  469. package/qs/.eslintrc +37 -0
  470. package/qs/.github/FUNDING.yml +12 -0
  471. package/qs/.nycrc +13 -0
  472. package/qs/CHANGELOG.md +250 -0
  473. package/qs/LICENSE.md +29 -0
  474. package/qs/README.md +510 -0
  475. package/qs/bower.json +21 -0
  476. package/qs/component.json +15 -0
  477. package/qs/dist/qs.js +648 -0
  478. package/qs/lib/formats.js +18 -0
  479. package/qs/lib/index.js +11 -0
  480. package/qs/lib/parse.js +175 -0
  481. package/qs/lib/stringify.js +217 -0
  482. package/qs/lib/utils.js +215 -0
  483. package/qs/package.json +54 -0
  484. package/qs/test/index.js +7 -0
  485. package/qs/test/parse.js +649 -0
  486. package/qs/test/stringify.js +642 -0
  487. package/qs/test/utils.js +65 -0
  488. package/request/CHANGELOG.md +717 -0
  489. package/request/LICENSE +55 -0
  490. package/request/README.md +1133 -0
  491. package/request/index.js +155 -0
  492. package/request/lib/auth.js +167 -0
  493. package/request/lib/cookies.js +38 -0
  494. package/request/lib/getProxyFromURI.js +79 -0
  495. package/request/lib/har.js +205 -0
  496. package/request/lib/hawk.js +89 -0
  497. package/request/lib/helpers.js +66 -0
  498. package/request/lib/multipart.js +112 -0
  499. package/request/lib/oauth.js +148 -0
  500. package/request/lib/querystring.js +50 -0
  501. package/request/lib/redirect.js +154 -0
  502. package/request/lib/tunnel.js +175 -0
  503. package/request/package.json +86 -0
  504. package/request/request.js +1553 -0
  505. package/safe-buffer/LICENSE +21 -0
  506. package/safe-buffer/README.md +584 -0
  507. package/safe-buffer/index.d.ts +187 -0
  508. package/safe-buffer/index.js +65 -0
  509. package/safe-buffer/package.json +51 -0
  510. package/safer-buffer/LICENSE +21 -0
  511. package/safer-buffer/Porting-Buffer.md +268 -0
  512. package/safer-buffer/Readme.md +156 -0
  513. package/safer-buffer/dangerous.js +58 -0
  514. package/safer-buffer/package.json +34 -0
  515. package/safer-buffer/safer.js +77 -0
  516. package/safer-buffer/tests.js +406 -0
  517. package/sax/AUTHORS +10 -0
  518. package/sax/LICENSE +32 -0
  519. package/sax/LICENSE-W3C.html +188 -0
  520. package/sax/README.md +216 -0
  521. package/sax/component.json +12 -0
  522. package/sax/examples/big-not-pretty.xml +8002 -0
  523. package/sax/examples/example.js +29 -0
  524. package/sax/examples/get-products.js +58 -0
  525. package/sax/examples/hello-world.js +4 -0
  526. package/sax/examples/not-pretty.xml +8 -0
  527. package/sax/examples/pretty-print.js +74 -0
  528. package/sax/examples/shopping.xml +2 -0
  529. package/sax/examples/strict.dtd +870 -0
  530. package/sax/examples/test.html +15 -0
  531. package/sax/examples/test.xml +1254 -0
  532. package/sax/lib/sax.js +1355 -0
  533. package/sax/package.json +12 -0
  534. package/sax/test/attribute-name.js +33 -0
  535. package/sax/test/attribute-no-space.js +75 -0
  536. package/sax/test/buffer-overrun.js +26 -0
  537. package/sax/test/case.js +50 -0
  538. package/sax/test/cdata-chunked.js +11 -0
  539. package/sax/test/cdata-end-split.js +15 -0
  540. package/sax/test/cdata-fake-end.js +28 -0
  541. package/sax/test/cdata-multiple.js +15 -0
  542. package/sax/test/cdata.js +10 -0
  543. package/sax/test/cyrillic.js +8 -0
  544. package/sax/test/duplicate-attribute.js +13 -0
  545. package/sax/test/end_empty_stream.js +5 -0
  546. package/sax/test/entities.js +10 -0
  547. package/sax/test/entity-mega.js +16 -0
  548. package/sax/test/flush.js +13 -0
  549. package/sax/test/index.js +86 -0
  550. package/sax/test/issue-23.js +43 -0
  551. package/sax/test/issue-30.js +24 -0
  552. package/sax/test/issue-35.js +15 -0
  553. package/sax/test/issue-47.js +12 -0
  554. package/sax/test/issue-49.js +31 -0
  555. package/sax/test/issue-84.js +13 -0
  556. package/sax/test/parser-position.js +28 -0
  557. package/sax/test/script-close-better.js +12 -0
  558. package/sax/test/script.js +12 -0
  559. package/sax/test/self-closing-child-strict.js +44 -0
  560. package/sax/test/self-closing-child.js +44 -0
  561. package/sax/test/self-closing-tag.js +25 -0
  562. package/sax/test/stray-ending.js +17 -0
  563. package/sax/test/trailing-attribute-no-value.js +10 -0
  564. package/sax/test/trailing-non-whitespace.js +18 -0
  565. package/sax/test/unclosed-root.js +11 -0
  566. package/sax/test/unquoted.js +18 -0
  567. package/sax/test/utf8-split.js +32 -0
  568. package/sax/test/xmlns-as-tag-name.js +15 -0
  569. package/sax/test/xmlns-issue-41.js +68 -0
  570. package/sax/test/xmlns-rebinding.js +63 -0
  571. package/sax/test/xmlns-strict.js +74 -0
  572. package/sax/test/xmlns-unbound-element.js +33 -0
  573. package/sax/test/xmlns-unbound.js +15 -0
  574. package/sax/test/xmlns-xml-default-ns.js +31 -0
  575. package/sax/test/xmlns-xml-default-prefix-attribute.js +36 -0
  576. package/sax/test/xmlns-xml-default-prefix.js +21 -0
  577. package/sax/test/xmlns-xml-default-redefine.js +41 -0
  578. package/simple-csv-reader/.editorconfig +8 -0
  579. package/simple-csv-reader/LICENSE +21 -0
  580. package/simple-csv-reader/README.md +32 -0
  581. package/simple-csv-reader/dist/simple-csv-reader.min.js +2 -0
  582. package/simple-csv-reader/dist/simple-csv-reader.min.js.map +1 -0
  583. package/simple-csv-reader/gulpfile.js +26 -0
  584. package/simple-csv-reader/index.js +131 -0
  585. package/simple-csv-reader/package.json +38 -0
  586. package/sshpk/.travis.yml +11 -0
  587. package/sshpk/Jenkinsfile +86 -0
  588. package/sshpk/LICENSE +18 -0
  589. package/sshpk/README.md +804 -0
  590. package/sshpk/bin/sshpk-conv +243 -0
  591. package/sshpk/bin/sshpk-sign +191 -0
  592. package/sshpk/bin/sshpk-verify +167 -0
  593. package/sshpk/lib/algs.js +168 -0
  594. package/sshpk/lib/certificate.js +410 -0
  595. package/sshpk/lib/dhe.js +397 -0
  596. package/sshpk/lib/ed-compat.js +92 -0
  597. package/sshpk/lib/errors.js +84 -0
  598. package/sshpk/lib/fingerprint.js +220 -0
  599. package/sshpk/lib/formats/auto.js +124 -0
  600. package/sshpk/lib/formats/dnssec.js +287 -0
  601. package/sshpk/lib/formats/openssh-cert.js +352 -0
  602. package/sshpk/lib/formats/pem.js +290 -0
  603. package/sshpk/lib/formats/pkcs1.js +373 -0
  604. package/sshpk/lib/formats/pkcs8.js +631 -0
  605. package/sshpk/lib/formats/putty.js +194 -0
  606. package/sshpk/lib/formats/rfc4253.js +166 -0
  607. package/sshpk/lib/formats/ssh-private.js +262 -0
  608. package/sshpk/lib/formats/ssh.js +115 -0
  609. package/sshpk/lib/formats/x509-pem.js +88 -0
  610. package/sshpk/lib/formats/x509.js +752 -0
  611. package/sshpk/lib/identity.js +373 -0
  612. package/sshpk/lib/index.js +40 -0
  613. package/sshpk/lib/key.js +294 -0
  614. package/sshpk/lib/private-key.js +247 -0
  615. package/sshpk/lib/signature.js +314 -0
  616. package/sshpk/lib/ssh-buffer.js +149 -0
  617. package/sshpk/lib/utils.js +404 -0
  618. package/sshpk/man/man1/sshpk-conv.1 +135 -0
  619. package/sshpk/man/man1/sshpk-sign.1 +81 -0
  620. package/sshpk/man/man1/sshpk-verify.1 +68 -0
  621. package/sshpk/package.json +60 -0
  622. package/tough-cookie/LICENSE +12 -0
  623. package/tough-cookie/README.md +527 -0
  624. package/tough-cookie/lib/cookie.js +1482 -0
  625. package/tough-cookie/lib/memstore.js +181 -0
  626. package/tough-cookie/lib/pathMatch.js +61 -0
  627. package/tough-cookie/lib/permuteDomain.js +56 -0
  628. package/tough-cookie/lib/pubsuffix-psl.js +38 -0
  629. package/tough-cookie/lib/store.js +75 -0
  630. package/tough-cookie/lib/version.js +2 -0
  631. package/tough-cookie/package.json +78 -0
  632. package/tunnel-agent/LICENSE +55 -0
  633. package/tunnel-agent/README.md +4 -0
  634. package/tunnel-agent/index.js +244 -0
  635. package/tunnel-agent/package.json +22 -0
  636. package/tweetnacl/AUTHORS.md +28 -0
  637. package/tweetnacl/CHANGELOG.md +221 -0
  638. package/tweetnacl/LICENSE +24 -0
  639. package/tweetnacl/PULL_REQUEST_TEMPLATE.md +20 -0
  640. package/tweetnacl/README.md +459 -0
  641. package/tweetnacl/nacl-fast.js +2388 -0
  642. package/tweetnacl/nacl-fast.min.js +2 -0
  643. package/tweetnacl/nacl.d.ts +98 -0
  644. package/tweetnacl/nacl.js +1175 -0
  645. package/tweetnacl/nacl.min.js +1 -0
  646. package/tweetnacl/package.json +58 -0
  647. package/uri-js/LICENSE +11 -0
  648. package/uri-js/README.md +203 -0
  649. package/uri-js/dist/es5/uri.all.d.ts +59 -0
  650. package/uri-js/dist/es5/uri.all.js +1443 -0
  651. package/uri-js/dist/es5/uri.all.js.map +1 -0
  652. package/uri-js/dist/es5/uri.all.min.d.ts +59 -0
  653. package/uri-js/dist/es5/uri.all.min.js +3 -0
  654. package/uri-js/dist/es5/uri.all.min.js.map +1 -0
  655. package/uri-js/dist/esnext/index.d.ts +1 -0
  656. package/uri-js/dist/esnext/index.js +17 -0
  657. package/uri-js/dist/esnext/index.js.map +1 -0
  658. package/uri-js/dist/esnext/regexps-iri.d.ts +3 -0
  659. package/uri-js/dist/esnext/regexps-iri.js +3 -0
  660. package/uri-js/dist/esnext/regexps-iri.js.map +1 -0
  661. package/uri-js/dist/esnext/regexps-uri.d.ts +4 -0
  662. package/uri-js/dist/esnext/regexps-uri.js +42 -0
  663. package/uri-js/dist/esnext/regexps-uri.js.map +1 -0
  664. package/uri-js/dist/esnext/schemes/http.d.ts +3 -0
  665. package/uri-js/dist/esnext/schemes/http.js +28 -0
  666. package/uri-js/dist/esnext/schemes/http.js.map +1 -0
  667. package/uri-js/dist/esnext/schemes/https.d.ts +3 -0
  668. package/uri-js/dist/esnext/schemes/https.js +9 -0
  669. package/uri-js/dist/esnext/schemes/https.js.map +1 -0
  670. package/uri-js/dist/esnext/schemes/mailto.d.ts +12 -0
  671. package/uri-js/dist/esnext/schemes/mailto.js +148 -0
  672. package/uri-js/dist/esnext/schemes/mailto.js.map +1 -0
  673. package/uri-js/dist/esnext/schemes/urn-uuid.d.ts +7 -0
  674. package/uri-js/dist/esnext/schemes/urn-uuid.js +23 -0
  675. package/uri-js/dist/esnext/schemes/urn-uuid.js.map +1 -0
  676. package/uri-js/dist/esnext/schemes/urn.d.ts +10 -0
  677. package/uri-js/dist/esnext/schemes/urn.js +49 -0
  678. package/uri-js/dist/esnext/schemes/urn.js.map +1 -0
  679. package/uri-js/dist/esnext/schemes/ws.d.ts +7 -0
  680. package/uri-js/dist/esnext/schemes/ws.js +41 -0
  681. package/uri-js/dist/esnext/schemes/ws.js.map +1 -0
  682. package/uri-js/dist/esnext/schemes/wss.d.ts +3 -0
  683. package/uri-js/dist/esnext/schemes/wss.js +9 -0
  684. package/uri-js/dist/esnext/schemes/wss.js.map +1 -0
  685. package/uri-js/dist/esnext/uri.d.ts +59 -0
  686. package/uri-js/dist/esnext/uri.js +480 -0
  687. package/uri-js/dist/esnext/uri.js.map +1 -0
  688. package/uri-js/dist/esnext/util.d.ts +6 -0
  689. package/uri-js/dist/esnext/util.js +36 -0
  690. package/uri-js/dist/esnext/util.js.map +1 -0
  691. package/uri-js/package.json +77 -0
  692. package/uri-js/yarn.lock +2558 -0
  693. package/uuid/AUTHORS +5 -0
  694. package/uuid/CHANGELOG.md +119 -0
  695. package/uuid/LICENSE.md +21 -0
  696. package/uuid/README.md +276 -0
  697. package/uuid/bin/uuid +65 -0
  698. package/uuid/index.js +8 -0
  699. package/uuid/lib/bytesToUuid.js +26 -0
  700. package/uuid/lib/md5-browser.js +216 -0
  701. package/uuid/lib/md5.js +25 -0
  702. package/uuid/lib/rng-browser.js +34 -0
  703. package/uuid/lib/rng.js +8 -0
  704. package/uuid/lib/sha1-browser.js +89 -0
  705. package/uuid/lib/sha1.js +25 -0
  706. package/uuid/lib/v35.js +57 -0
  707. package/uuid/package.json +49 -0
  708. package/uuid/v1.js +109 -0
  709. package/uuid/v3.js +4 -0
  710. package/uuid/v4.js +29 -0
  711. package/uuid/v5.js +3 -0
  712. package/verror/CHANGES.md +28 -0
  713. package/verror/CONTRIBUTING.md +19 -0
  714. package/verror/LICENSE +19 -0
  715. package/verror/README.md +528 -0
  716. package/verror/lib/verror.js +451 -0
  717. package/verror/package.json +22 -0
  718. package/xml2js/.travis.yml +5 -0
  719. package/xml2js/83.coffee +6 -0
  720. package/xml2js/LICENSE +19 -0
  721. package/xml2js/README.md +248 -0
  722. package/xml2js/canon.xml +482 -0
  723. package/xml2js/lib/xml2js.js +299 -0
  724. package/xml2js/package.json +47 -0
  725. package/xml2js/text.coffee +11 -0
  726. package/xml2js/text.xml +485 -0
  727. package/youtube-search/.travis.yml +5 -0
  728. package/youtube-search/README.md +61 -0
  729. package/youtube-search/index.d.ts +77 -0
  730. package/youtube-search/index.js +111 -0
  731. package/youtube-search/package.json +29 -0
  732. package/youtube-search/tests/test-search.js +32 -0
  733. package/ytdl-core/LICENSE +21 -0
  734. package/ytdl-core/README.md +238 -0
  735. package/ytdl-core/lib/cache.js +54 -0
  736. package/ytdl-core/lib/format-utils.js +250 -0
  737. package/ytdl-core/lib/formats.js +524 -0
  738. package/ytdl-core/lib/index.js +214 -0
  739. package/ytdl-core/lib/info-extras.js +365 -0
  740. package/ytdl-core/lib/info.js +495 -0
  741. package/ytdl-core/lib/sig.js +122 -0
  742. package/ytdl-core/lib/url-utils.js +91 -0
  743. package/ytdl-core/lib/utils.js +286 -0
  744. package/ytdl-core/node_modules/sax/LICENSE +41 -0
  745. package/ytdl-core/node_modules/sax/README.md +225 -0
  746. package/ytdl-core/node_modules/sax/lib/sax.js +1565 -0
  747. package/ytdl-core/node_modules/sax/package.json +25 -0
  748. package/ytdl-core/package.json +61 -0
  749. package/ytdl-core/typings/index.d.ts +426 -0
  750. package/ytdl-getinfo/.travis.yml +3 -0
  751. package/ytdl-getinfo/README.md +77 -0
  752. package/ytdl-getinfo/index.js +105 -0
  753. package/ytdl-getinfo/package.json +33 -0
  754. package/ytdl-getinfo/playlist.js +50 -0
  755. package/ytdl-getinfo/test/test.js +68 -0
  756. package/ytdl-getinfo/updater.js +42 -0
  757. package/ytdl-getinfo/yarn.lock +533 -0
  758. package/ytdl-getinfo/ytdl/.gitkeep +0 -0
  759. package/ytdl-getinfo/ytdl/youtube-dl.exe +0 -0
@@ -0,0 +1,1553 @@
1
+ 'use strict'
2
+
3
+ var http = require('http')
4
+ var https = require('https')
5
+ var url = require('url')
6
+ var util = require('util')
7
+ var stream = require('stream')
8
+ var zlib = require('zlib')
9
+ var aws2 = require('aws-sign2')
10
+ var aws4 = require('aws4')
11
+ var httpSignature = require('http-signature')
12
+ var mime = require('mime-types')
13
+ var caseless = require('caseless')
14
+ var ForeverAgent = require('forever-agent')
15
+ var FormData = require('form-data')
16
+ var extend = require('extend')
17
+ var isstream = require('isstream')
18
+ var isTypedArray = require('is-typedarray').strict
19
+ var helpers = require('./lib/helpers')
20
+ var cookies = require('./lib/cookies')
21
+ var getProxyFromURI = require('./lib/getProxyFromURI')
22
+ var Querystring = require('./lib/querystring').Querystring
23
+ var Har = require('./lib/har').Har
24
+ var Auth = require('./lib/auth').Auth
25
+ var OAuth = require('./lib/oauth').OAuth
26
+ var hawk = require('./lib/hawk')
27
+ var Multipart = require('./lib/multipart').Multipart
28
+ var Redirect = require('./lib/redirect').Redirect
29
+ var Tunnel = require('./lib/tunnel').Tunnel
30
+ var now = require('performance-now')
31
+ var Buffer = require('safe-buffer').Buffer
32
+
33
+ var safeStringify = helpers.safeStringify
34
+ var isReadStream = helpers.isReadStream
35
+ var toBase64 = helpers.toBase64
36
+ var defer = helpers.defer
37
+ var copy = helpers.copy
38
+ var version = helpers.version
39
+ var globalCookieJar = cookies.jar()
40
+
41
+ var globalPool = {}
42
+
43
+ function filterForNonReserved (reserved, options) {
44
+ // Filter out properties that are not reserved.
45
+ // Reserved values are passed in at call site.
46
+
47
+ var object = {}
48
+ for (var i in options) {
49
+ var notReserved = (reserved.indexOf(i) === -1)
50
+ if (notReserved) {
51
+ object[i] = options[i]
52
+ }
53
+ }
54
+ return object
55
+ }
56
+
57
+ function filterOutReservedFunctions (reserved, options) {
58
+ // Filter out properties that are functions and are reserved.
59
+ // Reserved values are passed in at call site.
60
+
61
+ var object = {}
62
+ for (var i in options) {
63
+ var isReserved = !(reserved.indexOf(i) === -1)
64
+ var isFunction = (typeof options[i] === 'function')
65
+ if (!(isReserved && isFunction)) {
66
+ object[i] = options[i]
67
+ }
68
+ }
69
+ return object
70
+ }
71
+
72
+ // Return a simpler request object to allow serialization
73
+ function requestToJSON () {
74
+ var self = this
75
+ return {
76
+ uri: self.uri,
77
+ method: self.method,
78
+ headers: self.headers
79
+ }
80
+ }
81
+
82
+ // Return a simpler response object to allow serialization
83
+ function responseToJSON () {
84
+ var self = this
85
+ return {
86
+ statusCode: self.statusCode,
87
+ body: self.body,
88
+ headers: self.headers,
89
+ request: requestToJSON.call(self.request)
90
+ }
91
+ }
92
+
93
+ function Request (options) {
94
+ // if given the method property in options, set property explicitMethod to true
95
+
96
+ // extend the Request instance with any non-reserved properties
97
+ // remove any reserved functions from the options object
98
+ // set Request instance to be readable and writable
99
+ // call init
100
+
101
+ var self = this
102
+
103
+ // start with HAR, then override with additional options
104
+ if (options.har) {
105
+ self._har = new Har(self)
106
+ options = self._har.options(options)
107
+ }
108
+
109
+ stream.Stream.call(self)
110
+ var reserved = Object.keys(Request.prototype)
111
+ var nonReserved = filterForNonReserved(reserved, options)
112
+
113
+ extend(self, nonReserved)
114
+ options = filterOutReservedFunctions(reserved, options)
115
+
116
+ self.readable = true
117
+ self.writable = true
118
+ if (options.method) {
119
+ self.explicitMethod = true
120
+ }
121
+ self._qs = new Querystring(self)
122
+ self._auth = new Auth(self)
123
+ self._oauth = new OAuth(self)
124
+ self._multipart = new Multipart(self)
125
+ self._redirect = new Redirect(self)
126
+ self._tunnel = new Tunnel(self)
127
+ self.init(options)
128
+ }
129
+
130
+ util.inherits(Request, stream.Stream)
131
+
132
+ // Debugging
133
+ Request.debug = process.env.NODE_DEBUG && /\brequest\b/.test(process.env.NODE_DEBUG)
134
+ function debug () {
135
+ if (Request.debug) {
136
+ console.error('REQUEST %s', util.format.apply(util, arguments))
137
+ }
138
+ }
139
+ Request.prototype.debug = debug
140
+
141
+ Request.prototype.init = function (options) {
142
+ // init() contains all the code to setup the request object.
143
+ // the actual outgoing request is not started until start() is called
144
+ // this function is called from both the constructor and on redirect.
145
+ var self = this
146
+ if (!options) {
147
+ options = {}
148
+ }
149
+ self.headers = self.headers ? copy(self.headers) : {}
150
+
151
+ // Delete headers with value undefined since they break
152
+ // ClientRequest.OutgoingMessage.setHeader in node 0.12
153
+ for (var headerName in self.headers) {
154
+ if (typeof self.headers[headerName] === 'undefined') {
155
+ delete self.headers[headerName]
156
+ }
157
+ }
158
+
159
+ caseless.httpify(self, self.headers)
160
+
161
+ if (!self.method) {
162
+ self.method = options.method || 'GET'
163
+ }
164
+ if (!self.localAddress) {
165
+ self.localAddress = options.localAddress
166
+ }
167
+
168
+ self._qs.init(options)
169
+
170
+ debug(options)
171
+ if (!self.pool && self.pool !== false) {
172
+ self.pool = globalPool
173
+ }
174
+ self.dests = self.dests || []
175
+ self.__isRequestRequest = true
176
+
177
+ // Protect against double callback
178
+ if (!self._callback && self.callback) {
179
+ self._callback = self.callback
180
+ self.callback = function () {
181
+ if (self._callbackCalled) {
182
+ return // Print a warning maybe?
183
+ }
184
+ self._callbackCalled = true
185
+ self._callback.apply(self, arguments)
186
+ }
187
+ self.on('error', self.callback.bind())
188
+ self.on('complete', self.callback.bind(self, null))
189
+ }
190
+
191
+ // People use this property instead all the time, so support it
192
+ if (!self.uri && self.url) {
193
+ self.uri = self.url
194
+ delete self.url
195
+ }
196
+
197
+ // If there's a baseUrl, then use it as the base URL (i.e. uri must be
198
+ // specified as a relative path and is appended to baseUrl).
199
+ if (self.baseUrl) {
200
+ if (typeof self.baseUrl !== 'string') {
201
+ return self.emit('error', new Error('options.baseUrl must be a string'))
202
+ }
203
+
204
+ if (typeof self.uri !== 'string') {
205
+ return self.emit('error', new Error('options.uri must be a string when using options.baseUrl'))
206
+ }
207
+
208
+ if (self.uri.indexOf('//') === 0 || self.uri.indexOf('://') !== -1) {
209
+ return self.emit('error', new Error('options.uri must be a path when using options.baseUrl'))
210
+ }
211
+
212
+ // Handle all cases to make sure that there's only one slash between
213
+ // baseUrl and uri.
214
+ var baseUrlEndsWithSlash = self.baseUrl.lastIndexOf('/') === self.baseUrl.length - 1
215
+ var uriStartsWithSlash = self.uri.indexOf('/') === 0
216
+
217
+ if (baseUrlEndsWithSlash && uriStartsWithSlash) {
218
+ self.uri = self.baseUrl + self.uri.slice(1)
219
+ } else if (baseUrlEndsWithSlash || uriStartsWithSlash) {
220
+ self.uri = self.baseUrl + self.uri
221
+ } else if (self.uri === '') {
222
+ self.uri = self.baseUrl
223
+ } else {
224
+ self.uri = self.baseUrl + '/' + self.uri
225
+ }
226
+ delete self.baseUrl
227
+ }
228
+
229
+ // A URI is needed by this point, emit error if we haven't been able to get one
230
+ if (!self.uri) {
231
+ return self.emit('error', new Error('options.uri is a required argument'))
232
+ }
233
+
234
+ // If a string URI/URL was given, parse it into a URL object
235
+ if (typeof self.uri === 'string') {
236
+ self.uri = url.parse(self.uri)
237
+ }
238
+
239
+ // Some URL objects are not from a URL parsed string and need href added
240
+ if (!self.uri.href) {
241
+ self.uri.href = url.format(self.uri)
242
+ }
243
+
244
+ // DEPRECATED: Warning for users of the old Unix Sockets URL Scheme
245
+ if (self.uri.protocol === 'unix:') {
246
+ return self.emit('error', new Error('`unix://` URL scheme is no longer supported. Please use the format `http://unix:SOCKET:PATH`'))
247
+ }
248
+
249
+ // Support Unix Sockets
250
+ if (self.uri.host === 'unix') {
251
+ self.enableUnixSocket()
252
+ }
253
+
254
+ if (self.strictSSL === false) {
255
+ self.rejectUnauthorized = false
256
+ }
257
+
258
+ if (!self.uri.pathname) { self.uri.pathname = '/' }
259
+
260
+ if (!(self.uri.host || (self.uri.hostname && self.uri.port)) && !self.uri.isUnix) {
261
+ // Invalid URI: it may generate lot of bad errors, like 'TypeError: Cannot call method `indexOf` of undefined' in CookieJar
262
+ // Detect and reject it as soon as possible
263
+ var faultyUri = url.format(self.uri)
264
+ var message = 'Invalid URI "' + faultyUri + '"'
265
+ if (Object.keys(options).length === 0) {
266
+ // No option ? This can be the sign of a redirect
267
+ // As this is a case where the user cannot do anything (they didn't call request directly with this URL)
268
+ // they should be warned that it can be caused by a redirection (can save some hair)
269
+ message += '. This can be caused by a crappy redirection.'
270
+ }
271
+ // This error was fatal
272
+ self.abort()
273
+ return self.emit('error', new Error(message))
274
+ }
275
+
276
+ if (!self.hasOwnProperty('proxy')) {
277
+ self.proxy = getProxyFromURI(self.uri)
278
+ }
279
+
280
+ self.tunnel = self._tunnel.isEnabled()
281
+ if (self.proxy) {
282
+ self._tunnel.setup(options)
283
+ }
284
+
285
+ self._redirect.onRequest(options)
286
+
287
+ self.setHost = false
288
+ if (!self.hasHeader('host')) {
289
+ var hostHeaderName = self.originalHostHeaderName || 'host'
290
+ self.setHeader(hostHeaderName, self.uri.host)
291
+ // Drop :port suffix from Host header if known protocol.
292
+ if (self.uri.port) {
293
+ if ((self.uri.port === '80' && self.uri.protocol === 'http:') ||
294
+ (self.uri.port === '443' && self.uri.protocol === 'https:')) {
295
+ self.setHeader(hostHeaderName, self.uri.hostname)
296
+ }
297
+ }
298
+ self.setHost = true
299
+ }
300
+
301
+ self.jar(self._jar || options.jar)
302
+
303
+ if (!self.uri.port) {
304
+ if (self.uri.protocol === 'http:') { self.uri.port = 80 } else if (self.uri.protocol === 'https:') { self.uri.port = 443 }
305
+ }
306
+
307
+ if (self.proxy && !self.tunnel) {
308
+ self.port = self.proxy.port
309
+ self.host = self.proxy.hostname
310
+ } else {
311
+ self.port = self.uri.port
312
+ self.host = self.uri.hostname
313
+ }
314
+
315
+ if (options.form) {
316
+ self.form(options.form)
317
+ }
318
+
319
+ if (options.formData) {
320
+ var formData = options.formData
321
+ var requestForm = self.form()
322
+ var appendFormValue = function (key, value) {
323
+ if (value && value.hasOwnProperty('value') && value.hasOwnProperty('options')) {
324
+ requestForm.append(key, value.value, value.options)
325
+ } else {
326
+ requestForm.append(key, value)
327
+ }
328
+ }
329
+ for (var formKey in formData) {
330
+ if (formData.hasOwnProperty(formKey)) {
331
+ var formValue = formData[formKey]
332
+ if (formValue instanceof Array) {
333
+ for (var j = 0; j < formValue.length; j++) {
334
+ appendFormValue(formKey, formValue[j])
335
+ }
336
+ } else {
337
+ appendFormValue(formKey, formValue)
338
+ }
339
+ }
340
+ }
341
+ }
342
+
343
+ if (options.qs) {
344
+ self.qs(options.qs)
345
+ }
346
+
347
+ if (self.uri.path) {
348
+ self.path = self.uri.path
349
+ } else {
350
+ self.path = self.uri.pathname + (self.uri.search || '')
351
+ }
352
+
353
+ if (self.path.length === 0) {
354
+ self.path = '/'
355
+ }
356
+
357
+ // Auth must happen last in case signing is dependent on other headers
358
+ if (options.aws) {
359
+ self.aws(options.aws)
360
+ }
361
+
362
+ if (options.hawk) {
363
+ self.hawk(options.hawk)
364
+ }
365
+
366
+ if (options.httpSignature) {
367
+ self.httpSignature(options.httpSignature)
368
+ }
369
+
370
+ if (options.auth) {
371
+ if (Object.prototype.hasOwnProperty.call(options.auth, 'username')) {
372
+ options.auth.user = options.auth.username
373
+ }
374
+ if (Object.prototype.hasOwnProperty.call(options.auth, 'password')) {
375
+ options.auth.pass = options.auth.password
376
+ }
377
+
378
+ self.auth(
379
+ options.auth.user,
380
+ options.auth.pass,
381
+ options.auth.sendImmediately,
382
+ options.auth.bearer
383
+ )
384
+ }
385
+
386
+ if (self.gzip && !self.hasHeader('accept-encoding')) {
387
+ self.setHeader('accept-encoding', 'gzip, deflate')
388
+ }
389
+
390
+ if (self.uri.auth && !self.hasHeader('authorization')) {
391
+ var uriAuthPieces = self.uri.auth.split(':').map(function (item) { return self._qs.unescape(item) })
392
+ self.auth(uriAuthPieces[0], uriAuthPieces.slice(1).join(':'), true)
393
+ }
394
+
395
+ if (!self.tunnel && self.proxy && self.proxy.auth && !self.hasHeader('proxy-authorization')) {
396
+ var proxyAuthPieces = self.proxy.auth.split(':').map(function (item) { return self._qs.unescape(item) })
397
+ var authHeader = 'Basic ' + toBase64(proxyAuthPieces.join(':'))
398
+ self.setHeader('proxy-authorization', authHeader)
399
+ }
400
+
401
+ if (self.proxy && !self.tunnel) {
402
+ self.path = (self.uri.protocol + '//' + self.uri.host + self.path)
403
+ }
404
+
405
+ if (options.json) {
406
+ self.json(options.json)
407
+ }
408
+ if (options.multipart) {
409
+ self.multipart(options.multipart)
410
+ }
411
+
412
+ if (options.time) {
413
+ self.timing = true
414
+
415
+ // NOTE: elapsedTime is deprecated in favor of .timings
416
+ self.elapsedTime = self.elapsedTime || 0
417
+ }
418
+
419
+ function setContentLength () {
420
+ if (isTypedArray(self.body)) {
421
+ self.body = Buffer.from(self.body)
422
+ }
423
+
424
+ if (!self.hasHeader('content-length')) {
425
+ var length
426
+ if (typeof self.body === 'string') {
427
+ length = Buffer.byteLength(self.body)
428
+ } else if (Array.isArray(self.body)) {
429
+ length = self.body.reduce(function (a, b) { return a + b.length }, 0)
430
+ } else {
431
+ length = self.body.length
432
+ }
433
+
434
+ if (length) {
435
+ self.setHeader('content-length', length)
436
+ } else {
437
+ self.emit('error', new Error('Argument error, options.body.'))
438
+ }
439
+ }
440
+ }
441
+ if (self.body && !isstream(self.body)) {
442
+ setContentLength()
443
+ }
444
+
445
+ if (options.oauth) {
446
+ self.oauth(options.oauth)
447
+ } else if (self._oauth.params && self.hasHeader('authorization')) {
448
+ self.oauth(self._oauth.params)
449
+ }
450
+
451
+ var protocol = self.proxy && !self.tunnel ? self.proxy.protocol : self.uri.protocol
452
+ var defaultModules = {'http:': http, 'https:': https}
453
+ var httpModules = self.httpModules || {}
454
+
455
+ self.httpModule = httpModules[protocol] || defaultModules[protocol]
456
+
457
+ if (!self.httpModule) {
458
+ return self.emit('error', new Error('Invalid protocol: ' + protocol))
459
+ }
460
+
461
+ if (options.ca) {
462
+ self.ca = options.ca
463
+ }
464
+
465
+ if (!self.agent) {
466
+ if (options.agentOptions) {
467
+ self.agentOptions = options.agentOptions
468
+ }
469
+
470
+ if (options.agentClass) {
471
+ self.agentClass = options.agentClass
472
+ } else if (options.forever) {
473
+ var v = version()
474
+ // use ForeverAgent in node 0.10- only
475
+ if (v.major === 0 && v.minor <= 10) {
476
+ self.agentClass = protocol === 'http:' ? ForeverAgent : ForeverAgent.SSL
477
+ } else {
478
+ self.agentClass = self.httpModule.Agent
479
+ self.agentOptions = self.agentOptions || {}
480
+ self.agentOptions.keepAlive = true
481
+ }
482
+ } else {
483
+ self.agentClass = self.httpModule.Agent
484
+ }
485
+ }
486
+
487
+ if (self.pool === false) {
488
+ self.agent = false
489
+ } else {
490
+ self.agent = self.agent || self.getNewAgent()
491
+ }
492
+
493
+ self.on('pipe', function (src) {
494
+ if (self.ntick && self._started) {
495
+ self.emit('error', new Error('You cannot pipe to this stream after the outbound request has started.'))
496
+ }
497
+ self.src = src
498
+ if (isReadStream(src)) {
499
+ if (!self.hasHeader('content-type')) {
500
+ self.setHeader('content-type', mime.lookup(src.path))
501
+ }
502
+ } else {
503
+ if (src.headers) {
504
+ for (var i in src.headers) {
505
+ if (!self.hasHeader(i)) {
506
+ self.setHeader(i, src.headers[i])
507
+ }
508
+ }
509
+ }
510
+ if (self._json && !self.hasHeader('content-type')) {
511
+ self.setHeader('content-type', 'application/json')
512
+ }
513
+ if (src.method && !self.explicitMethod) {
514
+ self.method = src.method
515
+ }
516
+ }
517
+
518
+ // self.on('pipe', function () {
519
+ // console.error('You have already piped to this stream. Pipeing twice is likely to break the request.')
520
+ // })
521
+ })
522
+
523
+ defer(function () {
524
+ if (self._aborted) {
525
+ return
526
+ }
527
+
528
+ var end = function () {
529
+ if (self._form) {
530
+ if (!self._auth.hasAuth) {
531
+ self._form.pipe(self)
532
+ } else if (self._auth.hasAuth && self._auth.sentAuth) {
533
+ self._form.pipe(self)
534
+ }
535
+ }
536
+ if (self._multipart && self._multipart.chunked) {
537
+ self._multipart.body.pipe(self)
538
+ }
539
+ if (self.body) {
540
+ if (isstream(self.body)) {
541
+ self.body.pipe(self)
542
+ } else {
543
+ setContentLength()
544
+ if (Array.isArray(self.body)) {
545
+ self.body.forEach(function (part) {
546
+ self.write(part)
547
+ })
548
+ } else {
549
+ self.write(self.body)
550
+ }
551
+ self.end()
552
+ }
553
+ } else if (self.requestBodyStream) {
554
+ console.warn('options.requestBodyStream is deprecated, please pass the request object to stream.pipe.')
555
+ self.requestBodyStream.pipe(self)
556
+ } else if (!self.src) {
557
+ if (self._auth.hasAuth && !self._auth.sentAuth) {
558
+ self.end()
559
+ return
560
+ }
561
+ if (self.method !== 'GET' && typeof self.method !== 'undefined') {
562
+ self.setHeader('content-length', 0)
563
+ }
564
+ self.end()
565
+ }
566
+ }
567
+
568
+ if (self._form && !self.hasHeader('content-length')) {
569
+ // Before ending the request, we had to compute the length of the whole form, asyncly
570
+ self.setHeader(self._form.getHeaders(), true)
571
+ self._form.getLength(function (err, length) {
572
+ if (!err && !isNaN(length)) {
573
+ self.setHeader('content-length', length)
574
+ }
575
+ end()
576
+ })
577
+ } else {
578
+ end()
579
+ }
580
+
581
+ self.ntick = true
582
+ })
583
+ }
584
+
585
+ Request.prototype.getNewAgent = function () {
586
+ var self = this
587
+ var Agent = self.agentClass
588
+ var options = {}
589
+ if (self.agentOptions) {
590
+ for (var i in self.agentOptions) {
591
+ options[i] = self.agentOptions[i]
592
+ }
593
+ }
594
+ if (self.ca) {
595
+ options.ca = self.ca
596
+ }
597
+ if (self.ciphers) {
598
+ options.ciphers = self.ciphers
599
+ }
600
+ if (self.secureProtocol) {
601
+ options.secureProtocol = self.secureProtocol
602
+ }
603
+ if (self.secureOptions) {
604
+ options.secureOptions = self.secureOptions
605
+ }
606
+ if (typeof self.rejectUnauthorized !== 'undefined') {
607
+ options.rejectUnauthorized = self.rejectUnauthorized
608
+ }
609
+
610
+ if (self.cert && self.key) {
611
+ options.key = self.key
612
+ options.cert = self.cert
613
+ }
614
+
615
+ if (self.pfx) {
616
+ options.pfx = self.pfx
617
+ }
618
+
619
+ if (self.passphrase) {
620
+ options.passphrase = self.passphrase
621
+ }
622
+
623
+ var poolKey = ''
624
+
625
+ // different types of agents are in different pools
626
+ if (Agent !== self.httpModule.Agent) {
627
+ poolKey += Agent.name
628
+ }
629
+
630
+ // ca option is only relevant if proxy or destination are https
631
+ var proxy = self.proxy
632
+ if (typeof proxy === 'string') {
633
+ proxy = url.parse(proxy)
634
+ }
635
+ var isHttps = (proxy && proxy.protocol === 'https:') || this.uri.protocol === 'https:'
636
+
637
+ if (isHttps) {
638
+ if (options.ca) {
639
+ if (poolKey) {
640
+ poolKey += ':'
641
+ }
642
+ poolKey += options.ca
643
+ }
644
+
645
+ if (typeof options.rejectUnauthorized !== 'undefined') {
646
+ if (poolKey) {
647
+ poolKey += ':'
648
+ }
649
+ poolKey += options.rejectUnauthorized
650
+ }
651
+
652
+ if (options.cert) {
653
+ if (poolKey) {
654
+ poolKey += ':'
655
+ }
656
+ poolKey += options.cert.toString('ascii') + options.key.toString('ascii')
657
+ }
658
+
659
+ if (options.pfx) {
660
+ if (poolKey) {
661
+ poolKey += ':'
662
+ }
663
+ poolKey += options.pfx.toString('ascii')
664
+ }
665
+
666
+ if (options.ciphers) {
667
+ if (poolKey) {
668
+ poolKey += ':'
669
+ }
670
+ poolKey += options.ciphers
671
+ }
672
+
673
+ if (options.secureProtocol) {
674
+ if (poolKey) {
675
+ poolKey += ':'
676
+ }
677
+ poolKey += options.secureProtocol
678
+ }
679
+
680
+ if (options.secureOptions) {
681
+ if (poolKey) {
682
+ poolKey += ':'
683
+ }
684
+ poolKey += options.secureOptions
685
+ }
686
+ }
687
+
688
+ if (self.pool === globalPool && !poolKey && Object.keys(options).length === 0 && self.httpModule.globalAgent) {
689
+ // not doing anything special. Use the globalAgent
690
+ return self.httpModule.globalAgent
691
+ }
692
+
693
+ // we're using a stored agent. Make sure it's protocol-specific
694
+ poolKey = self.uri.protocol + poolKey
695
+
696
+ // generate a new agent for this setting if none yet exists
697
+ if (!self.pool[poolKey]) {
698
+ self.pool[poolKey] = new Agent(options)
699
+ // properly set maxSockets on new agents
700
+ if (self.pool.maxSockets) {
701
+ self.pool[poolKey].maxSockets = self.pool.maxSockets
702
+ }
703
+ }
704
+
705
+ return self.pool[poolKey]
706
+ }
707
+
708
+ Request.prototype.start = function () {
709
+ // start() is called once we are ready to send the outgoing HTTP request.
710
+ // this is usually called on the first write(), end() or on nextTick()
711
+ var self = this
712
+
713
+ if (self.timing) {
714
+ // All timings will be relative to this request's startTime. In order to do this,
715
+ // we need to capture the wall-clock start time (via Date), immediately followed
716
+ // by the high-resolution timer (via now()). While these two won't be set
717
+ // at the _exact_ same time, they should be close enough to be able to calculate
718
+ // high-resolution, monotonically non-decreasing timestamps relative to startTime.
719
+ var startTime = new Date().getTime()
720
+ var startTimeNow = now()
721
+ }
722
+
723
+ if (self._aborted) {
724
+ return
725
+ }
726
+
727
+ self._started = true
728
+ self.method = self.method || 'GET'
729
+ self.href = self.uri.href
730
+
731
+ if (self.src && self.src.stat && self.src.stat.size && !self.hasHeader('content-length')) {
732
+ self.setHeader('content-length', self.src.stat.size)
733
+ }
734
+ if (self._aws) {
735
+ self.aws(self._aws, true)
736
+ }
737
+
738
+ // We have a method named auth, which is completely different from the http.request
739
+ // auth option. If we don't remove it, we're gonna have a bad time.
740
+ var reqOptions = copy(self)
741
+ delete reqOptions.auth
742
+
743
+ debug('make request', self.uri.href)
744
+
745
+ // node v6.8.0 now supports a `timeout` value in `http.request()`, but we
746
+ // should delete it for now since we handle timeouts manually for better
747
+ // consistency with node versions before v6.8.0
748
+ delete reqOptions.timeout
749
+
750
+ try {
751
+ self.req = self.httpModule.request(reqOptions)
752
+ } catch (err) {
753
+ self.emit('error', err)
754
+ return
755
+ }
756
+
757
+ if (self.timing) {
758
+ self.startTime = startTime
759
+ self.startTimeNow = startTimeNow
760
+
761
+ // Timing values will all be relative to startTime (by comparing to startTimeNow
762
+ // so we have an accurate clock)
763
+ self.timings = {}
764
+ }
765
+
766
+ var timeout
767
+ if (self.timeout && !self.timeoutTimer) {
768
+ if (self.timeout < 0) {
769
+ timeout = 0
770
+ } else if (typeof self.timeout === 'number' && isFinite(self.timeout)) {
771
+ timeout = self.timeout
772
+ }
773
+ }
774
+
775
+ self.req.on('response', self.onRequestResponse.bind(self))
776
+ self.req.on('error', self.onRequestError.bind(self))
777
+ self.req.on('drain', function () {
778
+ self.emit('drain')
779
+ })
780
+
781
+ self.req.on('socket', function (socket) {
782
+ // `._connecting` was the old property which was made public in node v6.1.0
783
+ var isConnecting = socket._connecting || socket.connecting
784
+ if (self.timing) {
785
+ self.timings.socket = now() - self.startTimeNow
786
+
787
+ if (isConnecting) {
788
+ var onLookupTiming = function () {
789
+ self.timings.lookup = now() - self.startTimeNow
790
+ }
791
+
792
+ var onConnectTiming = function () {
793
+ self.timings.connect = now() - self.startTimeNow
794
+ }
795
+
796
+ socket.once('lookup', onLookupTiming)
797
+ socket.once('connect', onConnectTiming)
798
+
799
+ // clean up timing event listeners if needed on error
800
+ self.req.once('error', function () {
801
+ socket.removeListener('lookup', onLookupTiming)
802
+ socket.removeListener('connect', onConnectTiming)
803
+ })
804
+ }
805
+ }
806
+
807
+ var setReqTimeout = function () {
808
+ // This timeout sets the amount of time to wait *between* bytes sent
809
+ // from the server once connected.
810
+ //
811
+ // In particular, it's useful for erroring if the server fails to send
812
+ // data halfway through streaming a response.
813
+ self.req.setTimeout(timeout, function () {
814
+ if (self.req) {
815
+ self.abort()
816
+ var e = new Error('ESOCKETTIMEDOUT')
817
+ e.code = 'ESOCKETTIMEDOUT'
818
+ e.connect = false
819
+ self.emit('error', e)
820
+ }
821
+ })
822
+ }
823
+ if (timeout !== undefined) {
824
+ // Only start the connection timer if we're actually connecting a new
825
+ // socket, otherwise if we're already connected (because this is a
826
+ // keep-alive connection) do not bother. This is important since we won't
827
+ // get a 'connect' event for an already connected socket.
828
+ if (isConnecting) {
829
+ var onReqSockConnect = function () {
830
+ socket.removeListener('connect', onReqSockConnect)
831
+ self.clearTimeout()
832
+ setReqTimeout()
833
+ }
834
+
835
+ socket.on('connect', onReqSockConnect)
836
+
837
+ self.req.on('error', function (err) { // eslint-disable-line handle-callback-err
838
+ socket.removeListener('connect', onReqSockConnect)
839
+ })
840
+
841
+ // Set a timeout in memory - this block will throw if the server takes more
842
+ // than `timeout` to write the HTTP status and headers (corresponding to
843
+ // the on('response') event on the client). NB: this measures wall-clock
844
+ // time, not the time between bytes sent by the server.
845
+ self.timeoutTimer = setTimeout(function () {
846
+ socket.removeListener('connect', onReqSockConnect)
847
+ self.abort()
848
+ var e = new Error('ETIMEDOUT')
849
+ e.code = 'ETIMEDOUT'
850
+ e.connect = true
851
+ self.emit('error', e)
852
+ }, timeout)
853
+ } else {
854
+ // We're already connected
855
+ setReqTimeout()
856
+ }
857
+ }
858
+ self.emit('socket', socket)
859
+ })
860
+
861
+ self.emit('request', self.req)
862
+ }
863
+
864
+ Request.prototype.onRequestError = function (error) {
865
+ var self = this
866
+ if (self._aborted) {
867
+ return
868
+ }
869
+ if (self.req && self.req._reusedSocket && error.code === 'ECONNRESET' &&
870
+ self.agent.addRequestNoreuse) {
871
+ self.agent = { addRequest: self.agent.addRequestNoreuse.bind(self.agent) }
872
+ self.start()
873
+ self.req.end()
874
+ return
875
+ }
876
+ self.clearTimeout()
877
+ self.emit('error', error)
878
+ }
879
+
880
+ Request.prototype.onRequestResponse = function (response) {
881
+ var self = this
882
+
883
+ if (self.timing) {
884
+ self.timings.response = now() - self.startTimeNow
885
+ }
886
+
887
+ debug('onRequestResponse', self.uri.href, response.statusCode, response.headers)
888
+ response.on('end', function () {
889
+ if (self.timing) {
890
+ self.timings.end = now() - self.startTimeNow
891
+ response.timingStart = self.startTime
892
+
893
+ // fill in the blanks for any periods that didn't trigger, such as
894
+ // no lookup or connect due to keep alive
895
+ if (!self.timings.socket) {
896
+ self.timings.socket = 0
897
+ }
898
+ if (!self.timings.lookup) {
899
+ self.timings.lookup = self.timings.socket
900
+ }
901
+ if (!self.timings.connect) {
902
+ self.timings.connect = self.timings.lookup
903
+ }
904
+ if (!self.timings.response) {
905
+ self.timings.response = self.timings.connect
906
+ }
907
+
908
+ debug('elapsed time', self.timings.end)
909
+
910
+ // elapsedTime includes all redirects
911
+ self.elapsedTime += Math.round(self.timings.end)
912
+
913
+ // NOTE: elapsedTime is deprecated in favor of .timings
914
+ response.elapsedTime = self.elapsedTime
915
+
916
+ // timings is just for the final fetch
917
+ response.timings = self.timings
918
+
919
+ // pre-calculate phase timings as well
920
+ response.timingPhases = {
921
+ wait: self.timings.socket,
922
+ dns: self.timings.lookup - self.timings.socket,
923
+ tcp: self.timings.connect - self.timings.lookup,
924
+ firstByte: self.timings.response - self.timings.connect,
925
+ download: self.timings.end - self.timings.response,
926
+ total: self.timings.end
927
+ }
928
+ }
929
+ debug('response end', self.uri.href, response.statusCode, response.headers)
930
+ })
931
+
932
+ if (self._aborted) {
933
+ debug('aborted', self.uri.href)
934
+ response.resume()
935
+ return
936
+ }
937
+
938
+ self.response = response
939
+ response.request = self
940
+ response.toJSON = responseToJSON
941
+
942
+ // XXX This is different on 0.10, because SSL is strict by default
943
+ if (self.httpModule === https &&
944
+ self.strictSSL && (!response.hasOwnProperty('socket') ||
945
+ !response.socket.authorized)) {
946
+ debug('strict ssl error', self.uri.href)
947
+ var sslErr = response.hasOwnProperty('socket') ? response.socket.authorizationError : self.uri.href + ' does not support SSL'
948
+ self.emit('error', new Error('SSL Error: ' + sslErr))
949
+ return
950
+ }
951
+
952
+ // Save the original host before any redirect (if it changes, we need to
953
+ // remove any authorization headers). Also remember the case of the header
954
+ // name because lots of broken servers expect Host instead of host and we
955
+ // want the caller to be able to specify this.
956
+ self.originalHost = self.getHeader('host')
957
+ if (!self.originalHostHeaderName) {
958
+ self.originalHostHeaderName = self.hasHeader('host')
959
+ }
960
+ if (self.setHost) {
961
+ self.removeHeader('host')
962
+ }
963
+ self.clearTimeout()
964
+
965
+ var targetCookieJar = (self._jar && self._jar.setCookie) ? self._jar : globalCookieJar
966
+ var addCookie = function (cookie) {
967
+ // set the cookie if it's domain in the href's domain.
968
+ try {
969
+ targetCookieJar.setCookie(cookie, self.uri.href, {ignoreError: true})
970
+ } catch (e) {
971
+ self.emit('error', e)
972
+ }
973
+ }
974
+
975
+ response.caseless = caseless(response.headers)
976
+
977
+ if (response.caseless.has('set-cookie') && (!self._disableCookies)) {
978
+ var headerName = response.caseless.has('set-cookie')
979
+ if (Array.isArray(response.headers[headerName])) {
980
+ response.headers[headerName].forEach(addCookie)
981
+ } else {
982
+ addCookie(response.headers[headerName])
983
+ }
984
+ }
985
+
986
+ if (self._redirect.onResponse(response)) {
987
+ return // Ignore the rest of the response
988
+ } else {
989
+ // Be a good stream and emit end when the response is finished.
990
+ // Hack to emit end on close because of a core bug that never fires end
991
+ response.on('close', function () {
992
+ if (!self._ended) {
993
+ self.response.emit('end')
994
+ }
995
+ })
996
+
997
+ response.once('end', function () {
998
+ self._ended = true
999
+ })
1000
+
1001
+ var noBody = function (code) {
1002
+ return (
1003
+ self.method === 'HEAD' ||
1004
+ // Informational
1005
+ (code >= 100 && code < 200) ||
1006
+ // No Content
1007
+ code === 204 ||
1008
+ // Not Modified
1009
+ code === 304
1010
+ )
1011
+ }
1012
+
1013
+ var responseContent
1014
+ if (self.gzip && !noBody(response.statusCode)) {
1015
+ var contentEncoding = response.headers['content-encoding'] || 'identity'
1016
+ contentEncoding = contentEncoding.trim().toLowerCase()
1017
+
1018
+ // Be more lenient with decoding compressed responses, since (very rarely)
1019
+ // servers send slightly invalid gzip responses that are still accepted
1020
+ // by common browsers.
1021
+ // Always using Z_SYNC_FLUSH is what cURL does.
1022
+ var zlibOptions = {
1023
+ flush: zlib.Z_SYNC_FLUSH,
1024
+ finishFlush: zlib.Z_SYNC_FLUSH
1025
+ }
1026
+
1027
+ if (contentEncoding === 'gzip') {
1028
+ responseContent = zlib.createGunzip(zlibOptions)
1029
+ response.pipe(responseContent)
1030
+ } else if (contentEncoding === 'deflate') {
1031
+ responseContent = zlib.createInflate(zlibOptions)
1032
+ response.pipe(responseContent)
1033
+ } else {
1034
+ // Since previous versions didn't check for Content-Encoding header,
1035
+ // ignore any invalid values to preserve backwards-compatibility
1036
+ if (contentEncoding !== 'identity') {
1037
+ debug('ignoring unrecognized Content-Encoding ' + contentEncoding)
1038
+ }
1039
+ responseContent = response
1040
+ }
1041
+ } else {
1042
+ responseContent = response
1043
+ }
1044
+
1045
+ if (self.encoding) {
1046
+ if (self.dests.length !== 0) {
1047
+ console.error('Ignoring encoding parameter as this stream is being piped to another stream which makes the encoding option invalid.')
1048
+ } else {
1049
+ responseContent.setEncoding(self.encoding)
1050
+ }
1051
+ }
1052
+
1053
+ if (self._paused) {
1054
+ responseContent.pause()
1055
+ }
1056
+
1057
+ self.responseContent = responseContent
1058
+
1059
+ self.emit('response', response)
1060
+
1061
+ self.dests.forEach(function (dest) {
1062
+ self.pipeDest(dest)
1063
+ })
1064
+
1065
+ responseContent.on('data', function (chunk) {
1066
+ if (self.timing && !self.responseStarted) {
1067
+ self.responseStartTime = (new Date()).getTime()
1068
+
1069
+ // NOTE: responseStartTime is deprecated in favor of .timings
1070
+ response.responseStartTime = self.responseStartTime
1071
+ }
1072
+ self._destdata = true
1073
+ self.emit('data', chunk)
1074
+ })
1075
+ responseContent.once('end', function (chunk) {
1076
+ self.emit('end', chunk)
1077
+ })
1078
+ responseContent.on('error', function (error) {
1079
+ self.emit('error', error)
1080
+ })
1081
+ responseContent.on('close', function () { self.emit('close') })
1082
+
1083
+ if (self.callback) {
1084
+ self.readResponseBody(response)
1085
+ } else { // if no callback
1086
+ self.on('end', function () {
1087
+ if (self._aborted) {
1088
+ debug('aborted', self.uri.href)
1089
+ return
1090
+ }
1091
+ self.emit('complete', response)
1092
+ })
1093
+ }
1094
+ }
1095
+ debug('finish init function', self.uri.href)
1096
+ }
1097
+
1098
+ Request.prototype.readResponseBody = function (response) {
1099
+ var self = this
1100
+ debug("reading response's body")
1101
+ var buffers = []
1102
+ var bufferLength = 0
1103
+ var strings = []
1104
+
1105
+ self.on('data', function (chunk) {
1106
+ if (!Buffer.isBuffer(chunk)) {
1107
+ strings.push(chunk)
1108
+ } else if (chunk.length) {
1109
+ bufferLength += chunk.length
1110
+ buffers.push(chunk)
1111
+ }
1112
+ })
1113
+ self.on('end', function () {
1114
+ debug('end event', self.uri.href)
1115
+ if (self._aborted) {
1116
+ debug('aborted', self.uri.href)
1117
+ // `buffer` is defined in the parent scope and used in a closure it exists for the life of the request.
1118
+ // This can lead to leaky behavior if the user retains a reference to the request object.
1119
+ buffers = []
1120
+ bufferLength = 0
1121
+ return
1122
+ }
1123
+
1124
+ if (bufferLength) {
1125
+ debug('has body', self.uri.href, bufferLength)
1126
+ response.body = Buffer.concat(buffers, bufferLength)
1127
+ if (self.encoding !== null) {
1128
+ response.body = response.body.toString(self.encoding)
1129
+ }
1130
+ // `buffer` is defined in the parent scope and used in a closure it exists for the life of the Request.
1131
+ // This can lead to leaky behavior if the user retains a reference to the request object.
1132
+ buffers = []
1133
+ bufferLength = 0
1134
+ } else if (strings.length) {
1135
+ // The UTF8 BOM [0xEF,0xBB,0xBF] is converted to [0xFE,0xFF] in the JS UTC16/UCS2 representation.
1136
+ // Strip this value out when the encoding is set to 'utf8', as upstream consumers won't expect it and it breaks JSON.parse().
1137
+ if (self.encoding === 'utf8' && strings[0].length > 0 && strings[0][0] === '\uFEFF') {
1138
+ strings[0] = strings[0].substring(1)
1139
+ }
1140
+ response.body = strings.join('')
1141
+ }
1142
+
1143
+ if (self._json) {
1144
+ try {
1145
+ response.body = JSON.parse(response.body, self._jsonReviver)
1146
+ } catch (e) {
1147
+ debug('invalid JSON received', self.uri.href)
1148
+ }
1149
+ }
1150
+ debug('emitting complete', self.uri.href)
1151
+ if (typeof response.body === 'undefined' && !self._json) {
1152
+ response.body = self.encoding === null ? Buffer.alloc(0) : ''
1153
+ }
1154
+ self.emit('complete', response, response.body)
1155
+ })
1156
+ }
1157
+
1158
+ Request.prototype.abort = function () {
1159
+ var self = this
1160
+ self._aborted = true
1161
+
1162
+ if (self.req) {
1163
+ self.req.abort()
1164
+ } else if (self.response) {
1165
+ self.response.destroy()
1166
+ }
1167
+
1168
+ self.clearTimeout()
1169
+ self.emit('abort')
1170
+ }
1171
+
1172
+ Request.prototype.pipeDest = function (dest) {
1173
+ var self = this
1174
+ var response = self.response
1175
+ // Called after the response is received
1176
+ if (dest.headers && !dest.headersSent) {
1177
+ if (response.caseless.has('content-type')) {
1178
+ var ctname = response.caseless.has('content-type')
1179
+ if (dest.setHeader) {
1180
+ dest.setHeader(ctname, response.headers[ctname])
1181
+ } else {
1182
+ dest.headers[ctname] = response.headers[ctname]
1183
+ }
1184
+ }
1185
+
1186
+ if (response.caseless.has('content-length')) {
1187
+ var clname = response.caseless.has('content-length')
1188
+ if (dest.setHeader) {
1189
+ dest.setHeader(clname, response.headers[clname])
1190
+ } else {
1191
+ dest.headers[clname] = response.headers[clname]
1192
+ }
1193
+ }
1194
+ }
1195
+ if (dest.setHeader && !dest.headersSent) {
1196
+ for (var i in response.headers) {
1197
+ // If the response content is being decoded, the Content-Encoding header
1198
+ // of the response doesn't represent the piped content, so don't pass it.
1199
+ if (!self.gzip || i !== 'content-encoding') {
1200
+ dest.setHeader(i, response.headers[i])
1201
+ }
1202
+ }
1203
+ dest.statusCode = response.statusCode
1204
+ }
1205
+ if (self.pipefilter) {
1206
+ self.pipefilter(response, dest)
1207
+ }
1208
+ }
1209
+
1210
+ Request.prototype.qs = function (q, clobber) {
1211
+ var self = this
1212
+ var base
1213
+ if (!clobber && self.uri.query) {
1214
+ base = self._qs.parse(self.uri.query)
1215
+ } else {
1216
+ base = {}
1217
+ }
1218
+
1219
+ for (var i in q) {
1220
+ base[i] = q[i]
1221
+ }
1222
+
1223
+ var qs = self._qs.stringify(base)
1224
+
1225
+ if (qs === '') {
1226
+ return self
1227
+ }
1228
+
1229
+ self.uri = url.parse(self.uri.href.split('?')[0] + '?' + qs)
1230
+ self.url = self.uri
1231
+ self.path = self.uri.path
1232
+
1233
+ if (self.uri.host === 'unix') {
1234
+ self.enableUnixSocket()
1235
+ }
1236
+
1237
+ return self
1238
+ }
1239
+ Request.prototype.form = function (form) {
1240
+ var self = this
1241
+ if (form) {
1242
+ if (!/^application\/x-www-form-urlencoded\b/.test(self.getHeader('content-type'))) {
1243
+ self.setHeader('content-type', 'application/x-www-form-urlencoded')
1244
+ }
1245
+ self.body = (typeof form === 'string')
1246
+ ? self._qs.rfc3986(form.toString('utf8'))
1247
+ : self._qs.stringify(form).toString('utf8')
1248
+ return self
1249
+ }
1250
+ // create form-data object
1251
+ self._form = new FormData()
1252
+ self._form.on('error', function (err) {
1253
+ err.message = 'form-data: ' + err.message
1254
+ self.emit('error', err)
1255
+ self.abort()
1256
+ })
1257
+ return self._form
1258
+ }
1259
+ Request.prototype.multipart = function (multipart) {
1260
+ var self = this
1261
+
1262
+ self._multipart.onRequest(multipart)
1263
+
1264
+ if (!self._multipart.chunked) {
1265
+ self.body = self._multipart.body
1266
+ }
1267
+
1268
+ return self
1269
+ }
1270
+ Request.prototype.json = function (val) {
1271
+ var self = this
1272
+
1273
+ if (!self.hasHeader('accept')) {
1274
+ self.setHeader('accept', 'application/json')
1275
+ }
1276
+
1277
+ if (typeof self.jsonReplacer === 'function') {
1278
+ self._jsonReplacer = self.jsonReplacer
1279
+ }
1280
+
1281
+ self._json = true
1282
+ if (typeof val === 'boolean') {
1283
+ if (self.body !== undefined) {
1284
+ if (!/^application\/x-www-form-urlencoded\b/.test(self.getHeader('content-type'))) {
1285
+ self.body = safeStringify(self.body, self._jsonReplacer)
1286
+ } else {
1287
+ self.body = self._qs.rfc3986(self.body)
1288
+ }
1289
+ if (!self.hasHeader('content-type')) {
1290
+ self.setHeader('content-type', 'application/json')
1291
+ }
1292
+ }
1293
+ } else {
1294
+ self.body = safeStringify(val, self._jsonReplacer)
1295
+ if (!self.hasHeader('content-type')) {
1296
+ self.setHeader('content-type', 'application/json')
1297
+ }
1298
+ }
1299
+
1300
+ if (typeof self.jsonReviver === 'function') {
1301
+ self._jsonReviver = self.jsonReviver
1302
+ }
1303
+
1304
+ return self
1305
+ }
1306
+ Request.prototype.getHeader = function (name, headers) {
1307
+ var self = this
1308
+ var result, re, match
1309
+ if (!headers) {
1310
+ headers = self.headers
1311
+ }
1312
+ Object.keys(headers).forEach(function (key) {
1313
+ if (key.length !== name.length) {
1314
+ return
1315
+ }
1316
+ re = new RegExp(name, 'i')
1317
+ match = key.match(re)
1318
+ if (match) {
1319
+ result = headers[key]
1320
+ }
1321
+ })
1322
+ return result
1323
+ }
1324
+ Request.prototype.enableUnixSocket = function () {
1325
+ // Get the socket & request paths from the URL
1326
+ var unixParts = this.uri.path.split(':')
1327
+ var host = unixParts[0]
1328
+ var path = unixParts[1]
1329
+ // Apply unix properties to request
1330
+ this.socketPath = host
1331
+ this.uri.pathname = path
1332
+ this.uri.path = path
1333
+ this.uri.host = host
1334
+ this.uri.hostname = host
1335
+ this.uri.isUnix = true
1336
+ }
1337
+
1338
+ Request.prototype.auth = function (user, pass, sendImmediately, bearer) {
1339
+ var self = this
1340
+
1341
+ self._auth.onRequest(user, pass, sendImmediately, bearer)
1342
+
1343
+ return self
1344
+ }
1345
+ Request.prototype.aws = function (opts, now) {
1346
+ var self = this
1347
+
1348
+ if (!now) {
1349
+ self._aws = opts
1350
+ return self
1351
+ }
1352
+
1353
+ if (opts.sign_version === 4 || opts.sign_version === '4') {
1354
+ // use aws4
1355
+ var options = {
1356
+ host: self.uri.host,
1357
+ path: self.uri.path,
1358
+ method: self.method,
1359
+ headers: self.headers,
1360
+ body: self.body
1361
+ }
1362
+ if (opts.service) {
1363
+ options.service = opts.service
1364
+ }
1365
+ var signRes = aws4.sign(options, {
1366
+ accessKeyId: opts.key,
1367
+ secretAccessKey: opts.secret,
1368
+ sessionToken: opts.session
1369
+ })
1370
+ self.setHeader('authorization', signRes.headers.Authorization)
1371
+ self.setHeader('x-amz-date', signRes.headers['X-Amz-Date'])
1372
+ if (signRes.headers['X-Amz-Security-Token']) {
1373
+ self.setHeader('x-amz-security-token', signRes.headers['X-Amz-Security-Token'])
1374
+ }
1375
+ } else {
1376
+ // default: use aws-sign2
1377
+ var date = new Date()
1378
+ self.setHeader('date', date.toUTCString())
1379
+ var auth = {
1380
+ key: opts.key,
1381
+ secret: opts.secret,
1382
+ verb: self.method.toUpperCase(),
1383
+ date: date,
1384
+ contentType: self.getHeader('content-type') || '',
1385
+ md5: self.getHeader('content-md5') || '',
1386
+ amazonHeaders: aws2.canonicalizeHeaders(self.headers)
1387
+ }
1388
+ var path = self.uri.path
1389
+ if (opts.bucket && path) {
1390
+ auth.resource = '/' + opts.bucket + path
1391
+ } else if (opts.bucket && !path) {
1392
+ auth.resource = '/' + opts.bucket
1393
+ } else if (!opts.bucket && path) {
1394
+ auth.resource = path
1395
+ } else if (!opts.bucket && !path) {
1396
+ auth.resource = '/'
1397
+ }
1398
+ auth.resource = aws2.canonicalizeResource(auth.resource)
1399
+ self.setHeader('authorization', aws2.authorization(auth))
1400
+ }
1401
+
1402
+ return self
1403
+ }
1404
+ Request.prototype.httpSignature = function (opts) {
1405
+ var self = this
1406
+ httpSignature.signRequest({
1407
+ getHeader: function (header) {
1408
+ return self.getHeader(header, self.headers)
1409
+ },
1410
+ setHeader: function (header, value) {
1411
+ self.setHeader(header, value)
1412
+ },
1413
+ method: self.method,
1414
+ path: self.path
1415
+ }, opts)
1416
+ debug('httpSignature authorization', self.getHeader('authorization'))
1417
+
1418
+ return self
1419
+ }
1420
+ Request.prototype.hawk = function (opts) {
1421
+ var self = this
1422
+ self.setHeader('Authorization', hawk.header(self.uri, self.method, opts))
1423
+ }
1424
+ Request.prototype.oauth = function (_oauth) {
1425
+ var self = this
1426
+
1427
+ self._oauth.onRequest(_oauth)
1428
+
1429
+ return self
1430
+ }
1431
+
1432
+ Request.prototype.jar = function (jar) {
1433
+ var self = this
1434
+ var cookies
1435
+
1436
+ if (self._redirect.redirectsFollowed === 0) {
1437
+ self.originalCookieHeader = self.getHeader('cookie')
1438
+ }
1439
+
1440
+ if (!jar) {
1441
+ // disable cookies
1442
+ cookies = false
1443
+ self._disableCookies = true
1444
+ } else {
1445
+ var targetCookieJar = jar.getCookieString ? jar : globalCookieJar
1446
+ var urihref = self.uri.href
1447
+ // fetch cookie in the Specified host
1448
+ if (targetCookieJar) {
1449
+ cookies = targetCookieJar.getCookieString(urihref)
1450
+ }
1451
+ }
1452
+
1453
+ // if need cookie and cookie is not empty
1454
+ if (cookies && cookies.length) {
1455
+ if (self.originalCookieHeader) {
1456
+ // Don't overwrite existing Cookie header
1457
+ self.setHeader('cookie', self.originalCookieHeader + '; ' + cookies)
1458
+ } else {
1459
+ self.setHeader('cookie', cookies)
1460
+ }
1461
+ }
1462
+ self._jar = jar
1463
+ return self
1464
+ }
1465
+
1466
+ // Stream API
1467
+ Request.prototype.pipe = function (dest, opts) {
1468
+ var self = this
1469
+
1470
+ if (self.response) {
1471
+ if (self._destdata) {
1472
+ self.emit('error', new Error('You cannot pipe after data has been emitted from the response.'))
1473
+ } else if (self._ended) {
1474
+ self.emit('error', new Error('You cannot pipe after the response has been ended.'))
1475
+ } else {
1476
+ stream.Stream.prototype.pipe.call(self, dest, opts)
1477
+ self.pipeDest(dest)
1478
+ return dest
1479
+ }
1480
+ } else {
1481
+ self.dests.push(dest)
1482
+ stream.Stream.prototype.pipe.call(self, dest, opts)
1483
+ return dest
1484
+ }
1485
+ }
1486
+ Request.prototype.write = function () {
1487
+ var self = this
1488
+ if (self._aborted) { return }
1489
+
1490
+ if (!self._started) {
1491
+ self.start()
1492
+ }
1493
+ if (self.req) {
1494
+ return self.req.write.apply(self.req, arguments)
1495
+ }
1496
+ }
1497
+ Request.prototype.end = function (chunk) {
1498
+ var self = this
1499
+ if (self._aborted) { return }
1500
+
1501
+ if (chunk) {
1502
+ self.write(chunk)
1503
+ }
1504
+ if (!self._started) {
1505
+ self.start()
1506
+ }
1507
+ if (self.req) {
1508
+ self.req.end()
1509
+ }
1510
+ }
1511
+ Request.prototype.pause = function () {
1512
+ var self = this
1513
+ if (!self.responseContent) {
1514
+ self._paused = true
1515
+ } else {
1516
+ self.responseContent.pause.apply(self.responseContent, arguments)
1517
+ }
1518
+ }
1519
+ Request.prototype.resume = function () {
1520
+ var self = this
1521
+ if (!self.responseContent) {
1522
+ self._paused = false
1523
+ } else {
1524
+ self.responseContent.resume.apply(self.responseContent, arguments)
1525
+ }
1526
+ }
1527
+ Request.prototype.destroy = function () {
1528
+ var self = this
1529
+ this.clearTimeout()
1530
+ if (!self._ended) {
1531
+ self.end()
1532
+ } else if (self.response) {
1533
+ self.response.destroy()
1534
+ }
1535
+ }
1536
+
1537
+ Request.prototype.clearTimeout = function () {
1538
+ if (this.timeoutTimer) {
1539
+ clearTimeout(this.timeoutTimer)
1540
+ this.timeoutTimer = null
1541
+ }
1542
+ }
1543
+
1544
+ Request.defaultProxyHeaderWhiteList =
1545
+ Tunnel.defaultProxyHeaderWhiteList.slice()
1546
+
1547
+ Request.defaultProxyHeaderExclusiveList =
1548
+ Tunnel.defaultProxyHeaderExclusiveList.slice()
1549
+
1550
+ // Exports
1551
+
1552
+ Request.prototype.toJSON = requestToJSON
1553
+ module.exports = Request