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,1482 @@
1
+ /*!
2
+ * Copyright (c) 2015, Salesforce.com, Inc.
3
+ * All rights reserved.
4
+ *
5
+ * Redistribution and use in source and binary forms, with or without
6
+ * modification, are permitted provided that the following conditions are met:
7
+ *
8
+ * 1. Redistributions of source code must retain the above copyright notice,
9
+ * this list of conditions and the following disclaimer.
10
+ *
11
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
12
+ * this list of conditions and the following disclaimer in the documentation
13
+ * and/or other materials provided with the distribution.
14
+ *
15
+ * 3. Neither the name of Salesforce.com nor the names of its contributors may
16
+ * be used to endorse or promote products derived from this software without
17
+ * specific prior written permission.
18
+ *
19
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
23
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29
+ * POSSIBILITY OF SUCH DAMAGE.
30
+ */
31
+ 'use strict';
32
+ var net = require('net');
33
+ var urlParse = require('url').parse;
34
+ var util = require('util');
35
+ var pubsuffix = require('./pubsuffix-psl');
36
+ var Store = require('./store').Store;
37
+ var MemoryCookieStore = require('./memstore').MemoryCookieStore;
38
+ var pathMatch = require('./pathMatch').pathMatch;
39
+ var VERSION = require('./version');
40
+
41
+ var punycode;
42
+ try {
43
+ punycode = require('punycode');
44
+ } catch(e) {
45
+ console.warn("tough-cookie: can't load punycode; won't use punycode for domain normalization");
46
+ }
47
+
48
+ // From RFC6265 S4.1.1
49
+ // note that it excludes \x3B ";"
50
+ var COOKIE_OCTETS = /^[\x21\x23-\x2B\x2D-\x3A\x3C-\x5B\x5D-\x7E]+$/;
51
+
52
+ var CONTROL_CHARS = /[\x00-\x1F]/;
53
+
54
+ // From Chromium // '\r', '\n' and '\0' should be treated as a terminator in
55
+ // the "relaxed" mode, see:
56
+ // https://github.com/ChromiumWebApps/chromium/blob/b3d3b4da8bb94c1b2e061600df106d590fda3620/net/cookies/parsed_cookie.cc#L60
57
+ var TERMINATORS = ['\n', '\r', '\0'];
58
+
59
+ // RFC6265 S4.1.1 defines path value as 'any CHAR except CTLs or ";"'
60
+ // Note ';' is \x3B
61
+ var PATH_VALUE = /[\x20-\x3A\x3C-\x7E]+/;
62
+
63
+ // date-time parsing constants (RFC6265 S5.1.1)
64
+
65
+ var DATE_DELIM = /[\x09\x20-\x2F\x3B-\x40\x5B-\x60\x7B-\x7E]/;
66
+
67
+ var MONTH_TO_NUM = {
68
+ jan:0, feb:1, mar:2, apr:3, may:4, jun:5,
69
+ jul:6, aug:7, sep:8, oct:9, nov:10, dec:11
70
+ };
71
+ var NUM_TO_MONTH = [
72
+ 'Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'
73
+ ];
74
+ var NUM_TO_DAY = [
75
+ 'Sun','Mon','Tue','Wed','Thu','Fri','Sat'
76
+ ];
77
+
78
+ var MAX_TIME = 2147483647000; // 31-bit max
79
+ var MIN_TIME = 0; // 31-bit min
80
+
81
+ /*
82
+ * Parses a Natural number (i.e., non-negative integer) with either the
83
+ * <min>*<max>DIGIT ( non-digit *OCTET )
84
+ * or
85
+ * <min>*<max>DIGIT
86
+ * grammar (RFC6265 S5.1.1).
87
+ *
88
+ * The "trailingOK" boolean controls if the grammar accepts a
89
+ * "( non-digit *OCTET )" trailer.
90
+ */
91
+ function parseDigits(token, minDigits, maxDigits, trailingOK) {
92
+ var count = 0;
93
+ while (count < token.length) {
94
+ var c = token.charCodeAt(count);
95
+ // "non-digit = %x00-2F / %x3A-FF"
96
+ if (c <= 0x2F || c >= 0x3A) {
97
+ break;
98
+ }
99
+ count++;
100
+ }
101
+
102
+ // constrain to a minimum and maximum number of digits.
103
+ if (count < minDigits || count > maxDigits) {
104
+ return null;
105
+ }
106
+
107
+ if (!trailingOK && count != token.length) {
108
+ return null;
109
+ }
110
+
111
+ return parseInt(token.substr(0,count), 10);
112
+ }
113
+
114
+ function parseTime(token) {
115
+ var parts = token.split(':');
116
+ var result = [0,0,0];
117
+
118
+ /* RF6256 S5.1.1:
119
+ * time = hms-time ( non-digit *OCTET )
120
+ * hms-time = time-field ":" time-field ":" time-field
121
+ * time-field = 1*2DIGIT
122
+ */
123
+
124
+ if (parts.length !== 3) {
125
+ return null;
126
+ }
127
+
128
+ for (var i = 0; i < 3; i++) {
129
+ // "time-field" must be strictly "1*2DIGIT", HOWEVER, "hms-time" can be
130
+ // followed by "( non-digit *OCTET )" so therefore the last time-field can
131
+ // have a trailer
132
+ var trailingOK = (i == 2);
133
+ var num = parseDigits(parts[i], 1, 2, trailingOK);
134
+ if (num === null) {
135
+ return null;
136
+ }
137
+ result[i] = num;
138
+ }
139
+
140
+ return result;
141
+ }
142
+
143
+ function parseMonth(token) {
144
+ token = String(token).substr(0,3).toLowerCase();
145
+ var num = MONTH_TO_NUM[token];
146
+ return num >= 0 ? num : null;
147
+ }
148
+
149
+ /*
150
+ * RFC6265 S5.1.1 date parser (see RFC for full grammar)
151
+ */
152
+ function parseDate(str) {
153
+ if (!str) {
154
+ return;
155
+ }
156
+
157
+ /* RFC6265 S5.1.1:
158
+ * 2. Process each date-token sequentially in the order the date-tokens
159
+ * appear in the cookie-date
160
+ */
161
+ var tokens = str.split(DATE_DELIM);
162
+ if (!tokens) {
163
+ return;
164
+ }
165
+
166
+ var hour = null;
167
+ var minute = null;
168
+ var second = null;
169
+ var dayOfMonth = null;
170
+ var month = null;
171
+ var year = null;
172
+
173
+ for (var i=0; i<tokens.length; i++) {
174
+ var token = tokens[i].trim();
175
+ if (!token.length) {
176
+ continue;
177
+ }
178
+
179
+ var result;
180
+
181
+ /* 2.1. If the found-time flag is not set and the token matches the time
182
+ * production, set the found-time flag and set the hour- value,
183
+ * minute-value, and second-value to the numbers denoted by the digits in
184
+ * the date-token, respectively. Skip the remaining sub-steps and continue
185
+ * to the next date-token.
186
+ */
187
+ if (second === null) {
188
+ result = parseTime(token);
189
+ if (result) {
190
+ hour = result[0];
191
+ minute = result[1];
192
+ second = result[2];
193
+ continue;
194
+ }
195
+ }
196
+
197
+ /* 2.2. If the found-day-of-month flag is not set and the date-token matches
198
+ * the day-of-month production, set the found-day-of- month flag and set
199
+ * the day-of-month-value to the number denoted by the date-token. Skip
200
+ * the remaining sub-steps and continue to the next date-token.
201
+ */
202
+ if (dayOfMonth === null) {
203
+ // "day-of-month = 1*2DIGIT ( non-digit *OCTET )"
204
+ result = parseDigits(token, 1, 2, true);
205
+ if (result !== null) {
206
+ dayOfMonth = result;
207
+ continue;
208
+ }
209
+ }
210
+
211
+ /* 2.3. If the found-month flag is not set and the date-token matches the
212
+ * month production, set the found-month flag and set the month-value to
213
+ * the month denoted by the date-token. Skip the remaining sub-steps and
214
+ * continue to the next date-token.
215
+ */
216
+ if (month === null) {
217
+ result = parseMonth(token);
218
+ if (result !== null) {
219
+ month = result;
220
+ continue;
221
+ }
222
+ }
223
+
224
+ /* 2.4. If the found-year flag is not set and the date-token matches the
225
+ * year production, set the found-year flag and set the year-value to the
226
+ * number denoted by the date-token. Skip the remaining sub-steps and
227
+ * continue to the next date-token.
228
+ */
229
+ if (year === null) {
230
+ // "year = 2*4DIGIT ( non-digit *OCTET )"
231
+ result = parseDigits(token, 2, 4, true);
232
+ if (result !== null) {
233
+ year = result;
234
+ /* From S5.1.1:
235
+ * 3. If the year-value is greater than or equal to 70 and less
236
+ * than or equal to 99, increment the year-value by 1900.
237
+ * 4. If the year-value is greater than or equal to 0 and less
238
+ * than or equal to 69, increment the year-value by 2000.
239
+ */
240
+ if (year >= 70 && year <= 99) {
241
+ year += 1900;
242
+ } else if (year >= 0 && year <= 69) {
243
+ year += 2000;
244
+ }
245
+ }
246
+ }
247
+ }
248
+
249
+ /* RFC 6265 S5.1.1
250
+ * "5. Abort these steps and fail to parse the cookie-date if:
251
+ * * at least one of the found-day-of-month, found-month, found-
252
+ * year, or found-time flags is not set,
253
+ * * the day-of-month-value is less than 1 or greater than 31,
254
+ * * the year-value is less than 1601,
255
+ * * the hour-value is greater than 23,
256
+ * * the minute-value is greater than 59, or
257
+ * * the second-value is greater than 59.
258
+ * (Note that leap seconds cannot be represented in this syntax.)"
259
+ *
260
+ * So, in order as above:
261
+ */
262
+ if (
263
+ dayOfMonth === null || month === null || year === null || second === null ||
264
+ dayOfMonth < 1 || dayOfMonth > 31 ||
265
+ year < 1601 ||
266
+ hour > 23 ||
267
+ minute > 59 ||
268
+ second > 59
269
+ ) {
270
+ return;
271
+ }
272
+
273
+ return new Date(Date.UTC(year, month, dayOfMonth, hour, minute, second));
274
+ }
275
+
276
+ function formatDate(date) {
277
+ var d = date.getUTCDate(); d = d >= 10 ? d : '0'+d;
278
+ var h = date.getUTCHours(); h = h >= 10 ? h : '0'+h;
279
+ var m = date.getUTCMinutes(); m = m >= 10 ? m : '0'+m;
280
+ var s = date.getUTCSeconds(); s = s >= 10 ? s : '0'+s;
281
+ return NUM_TO_DAY[date.getUTCDay()] + ', ' +
282
+ d+' '+ NUM_TO_MONTH[date.getUTCMonth()] +' '+ date.getUTCFullYear() +' '+
283
+ h+':'+m+':'+s+' GMT';
284
+ }
285
+
286
+ // S5.1.2 Canonicalized Host Names
287
+ function canonicalDomain(str) {
288
+ if (str == null) {
289
+ return null;
290
+ }
291
+ str = str.trim().replace(/^\./,''); // S4.1.2.3 & S5.2.3: ignore leading .
292
+
293
+ // convert to IDN if any non-ASCII characters
294
+ if (punycode && /[^\u0001-\u007f]/.test(str)) {
295
+ str = punycode.toASCII(str);
296
+ }
297
+
298
+ return str.toLowerCase();
299
+ }
300
+
301
+ // S5.1.3 Domain Matching
302
+ function domainMatch(str, domStr, canonicalize) {
303
+ if (str == null || domStr == null) {
304
+ return null;
305
+ }
306
+ if (canonicalize !== false) {
307
+ str = canonicalDomain(str);
308
+ domStr = canonicalDomain(domStr);
309
+ }
310
+
311
+ /*
312
+ * "The domain string and the string are identical. (Note that both the
313
+ * domain string and the string will have been canonicalized to lower case at
314
+ * this point)"
315
+ */
316
+ if (str == domStr) {
317
+ return true;
318
+ }
319
+
320
+ /* "All of the following [three] conditions hold:" (order adjusted from the RFC) */
321
+
322
+ /* "* The string is a host name (i.e., not an IP address)." */
323
+ if (net.isIP(str)) {
324
+ return false;
325
+ }
326
+
327
+ /* "* The domain string is a suffix of the string" */
328
+ var idx = str.indexOf(domStr);
329
+ if (idx <= 0) {
330
+ return false; // it's a non-match (-1) or prefix (0)
331
+ }
332
+
333
+ // e.g "a.b.c".indexOf("b.c") === 2
334
+ // 5 === 3+2
335
+ if (str.length !== domStr.length + idx) { // it's not a suffix
336
+ return false;
337
+ }
338
+
339
+ /* "* The last character of the string that is not included in the domain
340
+ * string is a %x2E (".") character." */
341
+ if (str.substr(idx-1,1) !== '.') {
342
+ return false;
343
+ }
344
+
345
+ return true;
346
+ }
347
+
348
+
349
+ // RFC6265 S5.1.4 Paths and Path-Match
350
+
351
+ /*
352
+ * "The user agent MUST use an algorithm equivalent to the following algorithm
353
+ * to compute the default-path of a cookie:"
354
+ *
355
+ * Assumption: the path (and not query part or absolute uri) is passed in.
356
+ */
357
+ function defaultPath(path) {
358
+ // "2. If the uri-path is empty or if the first character of the uri-path is not
359
+ // a %x2F ("/") character, output %x2F ("/") and skip the remaining steps.
360
+ if (!path || path.substr(0,1) !== "/") {
361
+ return "/";
362
+ }
363
+
364
+ // "3. If the uri-path contains no more than one %x2F ("/") character, output
365
+ // %x2F ("/") and skip the remaining step."
366
+ if (path === "/") {
367
+ return path;
368
+ }
369
+
370
+ var rightSlash = path.lastIndexOf("/");
371
+ if (rightSlash === 0) {
372
+ return "/";
373
+ }
374
+
375
+ // "4. Output the characters of the uri-path from the first character up to,
376
+ // but not including, the right-most %x2F ("/")."
377
+ return path.slice(0, rightSlash);
378
+ }
379
+
380
+ function trimTerminator(str) {
381
+ for (var t = 0; t < TERMINATORS.length; t++) {
382
+ var terminatorIdx = str.indexOf(TERMINATORS[t]);
383
+ if (terminatorIdx !== -1) {
384
+ str = str.substr(0,terminatorIdx);
385
+ }
386
+ }
387
+
388
+ return str;
389
+ }
390
+
391
+ function parseCookiePair(cookiePair, looseMode) {
392
+ cookiePair = trimTerminator(cookiePair);
393
+
394
+ var firstEq = cookiePair.indexOf('=');
395
+ if (looseMode) {
396
+ if (firstEq === 0) { // '=' is immediately at start
397
+ cookiePair = cookiePair.substr(1);
398
+ firstEq = cookiePair.indexOf('='); // might still need to split on '='
399
+ }
400
+ } else { // non-loose mode
401
+ if (firstEq <= 0) { // no '=' or is at start
402
+ return; // needs to have non-empty "cookie-name"
403
+ }
404
+ }
405
+
406
+ var cookieName, cookieValue;
407
+ if (firstEq <= 0) {
408
+ cookieName = "";
409
+ cookieValue = cookiePair.trim();
410
+ } else {
411
+ cookieName = cookiePair.substr(0, firstEq).trim();
412
+ cookieValue = cookiePair.substr(firstEq+1).trim();
413
+ }
414
+
415
+ if (CONTROL_CHARS.test(cookieName) || CONTROL_CHARS.test(cookieValue)) {
416
+ return;
417
+ }
418
+
419
+ var c = new Cookie();
420
+ c.key = cookieName;
421
+ c.value = cookieValue;
422
+ return c;
423
+ }
424
+
425
+ function parse(str, options) {
426
+ if (!options || typeof options !== 'object') {
427
+ options = {};
428
+ }
429
+ str = str.trim();
430
+
431
+ // We use a regex to parse the "name-value-pair" part of S5.2
432
+ var firstSemi = str.indexOf(';'); // S5.2 step 1
433
+ var cookiePair = (firstSemi === -1) ? str : str.substr(0, firstSemi);
434
+ var c = parseCookiePair(cookiePair, !!options.loose);
435
+ if (!c) {
436
+ return;
437
+ }
438
+
439
+ if (firstSemi === -1) {
440
+ return c;
441
+ }
442
+
443
+ // S5.2.3 "unparsed-attributes consist of the remainder of the set-cookie-string
444
+ // (including the %x3B (";") in question)." plus later on in the same section
445
+ // "discard the first ";" and trim".
446
+ var unparsed = str.slice(firstSemi + 1).trim();
447
+
448
+ // "If the unparsed-attributes string is empty, skip the rest of these
449
+ // steps."
450
+ if (unparsed.length === 0) {
451
+ return c;
452
+ }
453
+
454
+ /*
455
+ * S5.2 says that when looping over the items "[p]rocess the attribute-name
456
+ * and attribute-value according to the requirements in the following
457
+ * subsections" for every item. Plus, for many of the individual attributes
458
+ * in S5.3 it says to use the "attribute-value of the last attribute in the
459
+ * cookie-attribute-list". Therefore, in this implementation, we overwrite
460
+ * the previous value.
461
+ */
462
+ var cookie_avs = unparsed.split(';');
463
+ while (cookie_avs.length) {
464
+ var av = cookie_avs.shift().trim();
465
+ if (av.length === 0) { // happens if ";;" appears
466
+ continue;
467
+ }
468
+ var av_sep = av.indexOf('=');
469
+ var av_key, av_value;
470
+
471
+ if (av_sep === -1) {
472
+ av_key = av;
473
+ av_value = null;
474
+ } else {
475
+ av_key = av.substr(0,av_sep);
476
+ av_value = av.substr(av_sep+1);
477
+ }
478
+
479
+ av_key = av_key.trim().toLowerCase();
480
+
481
+ if (av_value) {
482
+ av_value = av_value.trim();
483
+ }
484
+
485
+ switch(av_key) {
486
+ case 'expires': // S5.2.1
487
+ if (av_value) {
488
+ var exp = parseDate(av_value);
489
+ // "If the attribute-value failed to parse as a cookie date, ignore the
490
+ // cookie-av."
491
+ if (exp) {
492
+ // over and underflow not realistically a concern: V8's getTime() seems to
493
+ // store something larger than a 32-bit time_t (even with 32-bit node)
494
+ c.expires = exp;
495
+ }
496
+ }
497
+ break;
498
+
499
+ case 'max-age': // S5.2.2
500
+ if (av_value) {
501
+ // "If the first character of the attribute-value is not a DIGIT or a "-"
502
+ // character ...[or]... If the remainder of attribute-value contains a
503
+ // non-DIGIT character, ignore the cookie-av."
504
+ if (/^-?[0-9]+$/.test(av_value)) {
505
+ var delta = parseInt(av_value, 10);
506
+ // "If delta-seconds is less than or equal to zero (0), let expiry-time
507
+ // be the earliest representable date and time."
508
+ c.setMaxAge(delta);
509
+ }
510
+ }
511
+ break;
512
+
513
+ case 'domain': // S5.2.3
514
+ // "If the attribute-value is empty, the behavior is undefined. However,
515
+ // the user agent SHOULD ignore the cookie-av entirely."
516
+ if (av_value) {
517
+ // S5.2.3 "Let cookie-domain be the attribute-value without the leading %x2E
518
+ // (".") character."
519
+ var domain = av_value.trim().replace(/^\./, '');
520
+ if (domain) {
521
+ // "Convert the cookie-domain to lower case."
522
+ c.domain = domain.toLowerCase();
523
+ }
524
+ }
525
+ break;
526
+
527
+ case 'path': // S5.2.4
528
+ /*
529
+ * "If the attribute-value is empty or if the first character of the
530
+ * attribute-value is not %x2F ("/"):
531
+ * Let cookie-path be the default-path.
532
+ * Otherwise:
533
+ * Let cookie-path be the attribute-value."
534
+ *
535
+ * We'll represent the default-path as null since it depends on the
536
+ * context of the parsing.
537
+ */
538
+ c.path = av_value && av_value[0] === "/" ? av_value : null;
539
+ break;
540
+
541
+ case 'secure': // S5.2.5
542
+ /*
543
+ * "If the attribute-name case-insensitively matches the string "Secure",
544
+ * the user agent MUST append an attribute to the cookie-attribute-list
545
+ * with an attribute-name of Secure and an empty attribute-value."
546
+ */
547
+ c.secure = true;
548
+ break;
549
+
550
+ case 'httponly': // S5.2.6 -- effectively the same as 'secure'
551
+ c.httpOnly = true;
552
+ break;
553
+
554
+ default:
555
+ c.extensions = c.extensions || [];
556
+ c.extensions.push(av);
557
+ break;
558
+ }
559
+ }
560
+
561
+ return c;
562
+ }
563
+
564
+ // avoid the V8 deoptimization monster!
565
+ function jsonParse(str) {
566
+ var obj;
567
+ try {
568
+ obj = JSON.parse(str);
569
+ } catch (e) {
570
+ return e;
571
+ }
572
+ return obj;
573
+ }
574
+
575
+ function fromJSON(str) {
576
+ if (!str) {
577
+ return null;
578
+ }
579
+
580
+ var obj;
581
+ if (typeof str === 'string') {
582
+ obj = jsonParse(str);
583
+ if (obj instanceof Error) {
584
+ return null;
585
+ }
586
+ } else {
587
+ // assume it's an Object
588
+ obj = str;
589
+ }
590
+
591
+ var c = new Cookie();
592
+ for (var i=0; i<Cookie.serializableProperties.length; i++) {
593
+ var prop = Cookie.serializableProperties[i];
594
+ if (obj[prop] === undefined ||
595
+ obj[prop] === Cookie.prototype[prop])
596
+ {
597
+ continue; // leave as prototype default
598
+ }
599
+
600
+ if (prop === 'expires' ||
601
+ prop === 'creation' ||
602
+ prop === 'lastAccessed')
603
+ {
604
+ if (obj[prop] === null) {
605
+ c[prop] = null;
606
+ } else {
607
+ c[prop] = obj[prop] == "Infinity" ?
608
+ "Infinity" : new Date(obj[prop]);
609
+ }
610
+ } else {
611
+ c[prop] = obj[prop];
612
+ }
613
+ }
614
+
615
+ return c;
616
+ }
617
+
618
+ /* Section 5.4 part 2:
619
+ * "* Cookies with longer paths are listed before cookies with
620
+ * shorter paths.
621
+ *
622
+ * * Among cookies that have equal-length path fields, cookies with
623
+ * earlier creation-times are listed before cookies with later
624
+ * creation-times."
625
+ */
626
+
627
+ function cookieCompare(a,b) {
628
+ var cmp = 0;
629
+
630
+ // descending for length: b CMP a
631
+ var aPathLen = a.path ? a.path.length : 0;
632
+ var bPathLen = b.path ? b.path.length : 0;
633
+ cmp = bPathLen - aPathLen;
634
+ if (cmp !== 0) {
635
+ return cmp;
636
+ }
637
+
638
+ // ascending for time: a CMP b
639
+ var aTime = a.creation ? a.creation.getTime() : MAX_TIME;
640
+ var bTime = b.creation ? b.creation.getTime() : MAX_TIME;
641
+ cmp = aTime - bTime;
642
+ if (cmp !== 0) {
643
+ return cmp;
644
+ }
645
+
646
+ // break ties for the same millisecond (precision of JavaScript's clock)
647
+ cmp = a.creationIndex - b.creationIndex;
648
+
649
+ return cmp;
650
+ }
651
+
652
+ // Gives the permutation of all possible pathMatch()es of a given path. The
653
+ // array is in longest-to-shortest order. Handy for indexing.
654
+ function permutePath(path) {
655
+ if (path === '/') {
656
+ return ['/'];
657
+ }
658
+ if (path.lastIndexOf('/') === path.length-1) {
659
+ path = path.substr(0,path.length-1);
660
+ }
661
+ var permutations = [path];
662
+ while (path.length > 1) {
663
+ var lindex = path.lastIndexOf('/');
664
+ if (lindex === 0) {
665
+ break;
666
+ }
667
+ path = path.substr(0,lindex);
668
+ permutations.push(path);
669
+ }
670
+ permutations.push('/');
671
+ return permutations;
672
+ }
673
+
674
+ function getCookieContext(url) {
675
+ if (url instanceof Object) {
676
+ return url;
677
+ }
678
+ // NOTE: decodeURI will throw on malformed URIs (see GH-32).
679
+ // Therefore, we will just skip decoding for such URIs.
680
+ try {
681
+ url = decodeURI(url);
682
+ }
683
+ catch(err) {
684
+ // Silently swallow error
685
+ }
686
+
687
+ return urlParse(url);
688
+ }
689
+
690
+ function Cookie(options) {
691
+ options = options || {};
692
+
693
+ Object.keys(options).forEach(function(prop) {
694
+ if (Cookie.prototype.hasOwnProperty(prop) &&
695
+ Cookie.prototype[prop] !== options[prop] &&
696
+ prop.substr(0,1) !== '_')
697
+ {
698
+ this[prop] = options[prop];
699
+ }
700
+ }, this);
701
+
702
+ this.creation = this.creation || new Date();
703
+
704
+ // used to break creation ties in cookieCompare():
705
+ Object.defineProperty(this, 'creationIndex', {
706
+ configurable: false,
707
+ enumerable: false, // important for assert.deepEqual checks
708
+ writable: true,
709
+ value: ++Cookie.cookiesCreated
710
+ });
711
+ }
712
+
713
+ Cookie.cookiesCreated = 0; // incremented each time a cookie is created
714
+
715
+ Cookie.parse = parse;
716
+ Cookie.fromJSON = fromJSON;
717
+
718
+ Cookie.prototype.key = "";
719
+ Cookie.prototype.value = "";
720
+
721
+ // the order in which the RFC has them:
722
+ Cookie.prototype.expires = "Infinity"; // coerces to literal Infinity
723
+ Cookie.prototype.maxAge = null; // takes precedence over expires for TTL
724
+ Cookie.prototype.domain = null;
725
+ Cookie.prototype.path = null;
726
+ Cookie.prototype.secure = false;
727
+ Cookie.prototype.httpOnly = false;
728
+ Cookie.prototype.extensions = null;
729
+
730
+ // set by the CookieJar:
731
+ Cookie.prototype.hostOnly = null; // boolean when set
732
+ Cookie.prototype.pathIsDefault = null; // boolean when set
733
+ Cookie.prototype.creation = null; // Date when set; defaulted by Cookie.parse
734
+ Cookie.prototype.lastAccessed = null; // Date when set
735
+ Object.defineProperty(Cookie.prototype, 'creationIndex', {
736
+ configurable: true,
737
+ enumerable: false,
738
+ writable: true,
739
+ value: 0
740
+ });
741
+
742
+ Cookie.serializableProperties = Object.keys(Cookie.prototype)
743
+ .filter(function(prop) {
744
+ return !(
745
+ Cookie.prototype[prop] instanceof Function ||
746
+ prop === 'creationIndex' ||
747
+ prop.substr(0,1) === '_'
748
+ );
749
+ });
750
+
751
+ Cookie.prototype.inspect = function inspect() {
752
+ var now = Date.now();
753
+ return 'Cookie="'+this.toString() +
754
+ '; hostOnly='+(this.hostOnly != null ? this.hostOnly : '?') +
755
+ '; aAge='+(this.lastAccessed ? (now-this.lastAccessed.getTime())+'ms' : '?') +
756
+ '; cAge='+(this.creation ? (now-this.creation.getTime())+'ms' : '?') +
757
+ '"';
758
+ };
759
+
760
+ // Use the new custom inspection symbol to add the custom inspect function if
761
+ // available.
762
+ if (util.inspect.custom) {
763
+ Cookie.prototype[util.inspect.custom] = Cookie.prototype.inspect;
764
+ }
765
+
766
+ Cookie.prototype.toJSON = function() {
767
+ var obj = {};
768
+
769
+ var props = Cookie.serializableProperties;
770
+ for (var i=0; i<props.length; i++) {
771
+ var prop = props[i];
772
+ if (this[prop] === Cookie.prototype[prop]) {
773
+ continue; // leave as prototype default
774
+ }
775
+
776
+ if (prop === 'expires' ||
777
+ prop === 'creation' ||
778
+ prop === 'lastAccessed')
779
+ {
780
+ if (this[prop] === null) {
781
+ obj[prop] = null;
782
+ } else {
783
+ obj[prop] = this[prop] == "Infinity" ? // intentionally not ===
784
+ "Infinity" : this[prop].toISOString();
785
+ }
786
+ } else if (prop === 'maxAge') {
787
+ if (this[prop] !== null) {
788
+ // again, intentionally not ===
789
+ obj[prop] = (this[prop] == Infinity || this[prop] == -Infinity) ?
790
+ this[prop].toString() : this[prop];
791
+ }
792
+ } else {
793
+ if (this[prop] !== Cookie.prototype[prop]) {
794
+ obj[prop] = this[prop];
795
+ }
796
+ }
797
+ }
798
+
799
+ return obj;
800
+ };
801
+
802
+ Cookie.prototype.clone = function() {
803
+ return fromJSON(this.toJSON());
804
+ };
805
+
806
+ Cookie.prototype.validate = function validate() {
807
+ if (!COOKIE_OCTETS.test(this.value)) {
808
+ return false;
809
+ }
810
+ if (this.expires != Infinity && !(this.expires instanceof Date) && !parseDate(this.expires)) {
811
+ return false;
812
+ }
813
+ if (this.maxAge != null && this.maxAge <= 0) {
814
+ return false; // "Max-Age=" non-zero-digit *DIGIT
815
+ }
816
+ if (this.path != null && !PATH_VALUE.test(this.path)) {
817
+ return false;
818
+ }
819
+
820
+ var cdomain = this.cdomain();
821
+ if (cdomain) {
822
+ if (cdomain.match(/\.$/)) {
823
+ return false; // S4.1.2.3 suggests that this is bad. domainMatch() tests confirm this
824
+ }
825
+ var suffix = pubsuffix.getPublicSuffix(cdomain);
826
+ if (suffix == null) { // it's a public suffix
827
+ return false;
828
+ }
829
+ }
830
+ return true;
831
+ };
832
+
833
+ Cookie.prototype.setExpires = function setExpires(exp) {
834
+ if (exp instanceof Date) {
835
+ this.expires = exp;
836
+ } else {
837
+ this.expires = parseDate(exp) || "Infinity";
838
+ }
839
+ };
840
+
841
+ Cookie.prototype.setMaxAge = function setMaxAge(age) {
842
+ if (age === Infinity || age === -Infinity) {
843
+ this.maxAge = age.toString(); // so JSON.stringify() works
844
+ } else {
845
+ this.maxAge = age;
846
+ }
847
+ };
848
+
849
+ // gives Cookie header format
850
+ Cookie.prototype.cookieString = function cookieString() {
851
+ var val = this.value;
852
+ if (val == null) {
853
+ val = '';
854
+ }
855
+ if (this.key === '') {
856
+ return val;
857
+ }
858
+ return this.key+'='+val;
859
+ };
860
+
861
+ // gives Set-Cookie header format
862
+ Cookie.prototype.toString = function toString() {
863
+ var str = this.cookieString();
864
+
865
+ if (this.expires != Infinity) {
866
+ if (this.expires instanceof Date) {
867
+ str += '; Expires='+formatDate(this.expires);
868
+ } else {
869
+ str += '; Expires='+this.expires;
870
+ }
871
+ }
872
+
873
+ if (this.maxAge != null && this.maxAge != Infinity) {
874
+ str += '; Max-Age='+this.maxAge;
875
+ }
876
+
877
+ if (this.domain && !this.hostOnly) {
878
+ str += '; Domain='+this.domain;
879
+ }
880
+ if (this.path) {
881
+ str += '; Path='+this.path;
882
+ }
883
+
884
+ if (this.secure) {
885
+ str += '; Secure';
886
+ }
887
+ if (this.httpOnly) {
888
+ str += '; HttpOnly';
889
+ }
890
+ if (this.extensions) {
891
+ this.extensions.forEach(function(ext) {
892
+ str += '; '+ext;
893
+ });
894
+ }
895
+
896
+ return str;
897
+ };
898
+
899
+ // TTL() partially replaces the "expiry-time" parts of S5.3 step 3 (setCookie()
900
+ // elsewhere)
901
+ // S5.3 says to give the "latest representable date" for which we use Infinity
902
+ // For "expired" we use 0
903
+ Cookie.prototype.TTL = function TTL(now) {
904
+ /* RFC6265 S4.1.2.2 If a cookie has both the Max-Age and the Expires
905
+ * attribute, the Max-Age attribute has precedence and controls the
906
+ * expiration date of the cookie.
907
+ * (Concurs with S5.3 step 3)
908
+ */
909
+ if (this.maxAge != null) {
910
+ return this.maxAge<=0 ? 0 : this.maxAge*1000;
911
+ }
912
+
913
+ var expires = this.expires;
914
+ if (expires != Infinity) {
915
+ if (!(expires instanceof Date)) {
916
+ expires = parseDate(expires) || Infinity;
917
+ }
918
+
919
+ if (expires == Infinity) {
920
+ return Infinity;
921
+ }
922
+
923
+ return expires.getTime() - (now || Date.now());
924
+ }
925
+
926
+ return Infinity;
927
+ };
928
+
929
+ // expiryTime() replaces the "expiry-time" parts of S5.3 step 3 (setCookie()
930
+ // elsewhere)
931
+ Cookie.prototype.expiryTime = function expiryTime(now) {
932
+ if (this.maxAge != null) {
933
+ var relativeTo = now || this.creation || new Date();
934
+ var age = (this.maxAge <= 0) ? -Infinity : this.maxAge*1000;
935
+ return relativeTo.getTime() + age;
936
+ }
937
+
938
+ if (this.expires == Infinity) {
939
+ return Infinity;
940
+ }
941
+ return this.expires.getTime();
942
+ };
943
+
944
+ // expiryDate() replaces the "expiry-time" parts of S5.3 step 3 (setCookie()
945
+ // elsewhere), except it returns a Date
946
+ Cookie.prototype.expiryDate = function expiryDate(now) {
947
+ var millisec = this.expiryTime(now);
948
+ if (millisec == Infinity) {
949
+ return new Date(MAX_TIME);
950
+ } else if (millisec == -Infinity) {
951
+ return new Date(MIN_TIME);
952
+ } else {
953
+ return new Date(millisec);
954
+ }
955
+ };
956
+
957
+ // This replaces the "persistent-flag" parts of S5.3 step 3
958
+ Cookie.prototype.isPersistent = function isPersistent() {
959
+ return (this.maxAge != null || this.expires != Infinity);
960
+ };
961
+
962
+ // Mostly S5.1.2 and S5.2.3:
963
+ Cookie.prototype.cdomain =
964
+ Cookie.prototype.canonicalizedDomain = function canonicalizedDomain() {
965
+ if (this.domain == null) {
966
+ return null;
967
+ }
968
+ return canonicalDomain(this.domain);
969
+ };
970
+
971
+ function CookieJar(store, options) {
972
+ if (typeof options === "boolean") {
973
+ options = {rejectPublicSuffixes: options};
974
+ } else if (options == null) {
975
+ options = {};
976
+ }
977
+ if (options.rejectPublicSuffixes != null) {
978
+ this.rejectPublicSuffixes = options.rejectPublicSuffixes;
979
+ }
980
+ if (options.looseMode != null) {
981
+ this.enableLooseMode = options.looseMode;
982
+ }
983
+
984
+ if (!store) {
985
+ store = new MemoryCookieStore();
986
+ }
987
+ this.store = store;
988
+ }
989
+ CookieJar.prototype.store = null;
990
+ CookieJar.prototype.rejectPublicSuffixes = true;
991
+ CookieJar.prototype.enableLooseMode = false;
992
+ var CAN_BE_SYNC = [];
993
+
994
+ CAN_BE_SYNC.push('setCookie');
995
+ CookieJar.prototype.setCookie = function(cookie, url, options, cb) {
996
+ var err;
997
+ var context = getCookieContext(url);
998
+ if (options instanceof Function) {
999
+ cb = options;
1000
+ options = {};
1001
+ }
1002
+
1003
+ var host = canonicalDomain(context.hostname);
1004
+ var loose = this.enableLooseMode;
1005
+ if (options.loose != null) {
1006
+ loose = options.loose;
1007
+ }
1008
+
1009
+ // S5.3 step 1
1010
+ if (!(cookie instanceof Cookie)) {
1011
+ cookie = Cookie.parse(cookie, { loose: loose });
1012
+ }
1013
+ if (!cookie) {
1014
+ err = new Error("Cookie failed to parse");
1015
+ return cb(options.ignoreError ? null : err);
1016
+ }
1017
+
1018
+ // S5.3 step 2
1019
+ var now = options.now || new Date(); // will assign later to save effort in the face of errors
1020
+
1021
+ // S5.3 step 3: NOOP; persistent-flag and expiry-time is handled by getCookie()
1022
+
1023
+ // S5.3 step 4: NOOP; domain is null by default
1024
+
1025
+ // S5.3 step 5: public suffixes
1026
+ if (this.rejectPublicSuffixes && cookie.domain) {
1027
+ var suffix = pubsuffix.getPublicSuffix(cookie.cdomain());
1028
+ if (suffix == null) { // e.g. "com"
1029
+ err = new Error("Cookie has domain set to a public suffix");
1030
+ return cb(options.ignoreError ? null : err);
1031
+ }
1032
+ }
1033
+
1034
+ // S5.3 step 6:
1035
+ if (cookie.domain) {
1036
+ if (!domainMatch(host, cookie.cdomain(), false)) {
1037
+ err = new Error("Cookie not in this host's domain. Cookie:"+cookie.cdomain()+" Request:"+host);
1038
+ return cb(options.ignoreError ? null : err);
1039
+ }
1040
+
1041
+ if (cookie.hostOnly == null) { // don't reset if already set
1042
+ cookie.hostOnly = false;
1043
+ }
1044
+
1045
+ } else {
1046
+ cookie.hostOnly = true;
1047
+ cookie.domain = host;
1048
+ }
1049
+
1050
+ //S5.2.4 If the attribute-value is empty or if the first character of the
1051
+ //attribute-value is not %x2F ("/"):
1052
+ //Let cookie-path be the default-path.
1053
+ if (!cookie.path || cookie.path[0] !== '/') {
1054
+ cookie.path = defaultPath(context.pathname);
1055
+ cookie.pathIsDefault = true;
1056
+ }
1057
+
1058
+ // S5.3 step 8: NOOP; secure attribute
1059
+ // S5.3 step 9: NOOP; httpOnly attribute
1060
+
1061
+ // S5.3 step 10
1062
+ if (options.http === false && cookie.httpOnly) {
1063
+ err = new Error("Cookie is HttpOnly and this isn't an HTTP API");
1064
+ return cb(options.ignoreError ? null : err);
1065
+ }
1066
+
1067
+ var store = this.store;
1068
+
1069
+ if (!store.updateCookie) {
1070
+ store.updateCookie = function(oldCookie, newCookie, cb) {
1071
+ this.putCookie(newCookie, cb);
1072
+ };
1073
+ }
1074
+
1075
+ function withCookie(err, oldCookie) {
1076
+ if (err) {
1077
+ return cb(err);
1078
+ }
1079
+
1080
+ var next = function(err) {
1081
+ if (err) {
1082
+ return cb(err);
1083
+ } else {
1084
+ cb(null, cookie);
1085
+ }
1086
+ };
1087
+
1088
+ if (oldCookie) {
1089
+ // S5.3 step 11 - "If the cookie store contains a cookie with the same name,
1090
+ // domain, and path as the newly created cookie:"
1091
+ if (options.http === false && oldCookie.httpOnly) { // step 11.2
1092
+ err = new Error("old Cookie is HttpOnly and this isn't an HTTP API");
1093
+ return cb(options.ignoreError ? null : err);
1094
+ }
1095
+ cookie.creation = oldCookie.creation; // step 11.3
1096
+ cookie.creationIndex = oldCookie.creationIndex; // preserve tie-breaker
1097
+ cookie.lastAccessed = now;
1098
+ // Step 11.4 (delete cookie) is implied by just setting the new one:
1099
+ store.updateCookie(oldCookie, cookie, next); // step 12
1100
+
1101
+ } else {
1102
+ cookie.creation = cookie.lastAccessed = now;
1103
+ store.putCookie(cookie, next); // step 12
1104
+ }
1105
+ }
1106
+
1107
+ store.findCookie(cookie.domain, cookie.path, cookie.key, withCookie);
1108
+ };
1109
+
1110
+ // RFC6365 S5.4
1111
+ CAN_BE_SYNC.push('getCookies');
1112
+ CookieJar.prototype.getCookies = function(url, options, cb) {
1113
+ var context = getCookieContext(url);
1114
+ if (options instanceof Function) {
1115
+ cb = options;
1116
+ options = {};
1117
+ }
1118
+
1119
+ var host = canonicalDomain(context.hostname);
1120
+ var path = context.pathname || '/';
1121
+
1122
+ var secure = options.secure;
1123
+ if (secure == null && context.protocol &&
1124
+ (context.protocol == 'https:' || context.protocol == 'wss:'))
1125
+ {
1126
+ secure = true;
1127
+ }
1128
+
1129
+ var http = options.http;
1130
+ if (http == null) {
1131
+ http = true;
1132
+ }
1133
+
1134
+ var now = options.now || Date.now();
1135
+ var expireCheck = options.expire !== false;
1136
+ var allPaths = !!options.allPaths;
1137
+ var store = this.store;
1138
+
1139
+ function matchingCookie(c) {
1140
+ // "Either:
1141
+ // The cookie's host-only-flag is true and the canonicalized
1142
+ // request-host is identical to the cookie's domain.
1143
+ // Or:
1144
+ // The cookie's host-only-flag is false and the canonicalized
1145
+ // request-host domain-matches the cookie's domain."
1146
+ if (c.hostOnly) {
1147
+ if (c.domain != host) {
1148
+ return false;
1149
+ }
1150
+ } else {
1151
+ if (!domainMatch(host, c.domain, false)) {
1152
+ return false;
1153
+ }
1154
+ }
1155
+
1156
+ // "The request-uri's path path-matches the cookie's path."
1157
+ if (!allPaths && !pathMatch(path, c.path)) {
1158
+ return false;
1159
+ }
1160
+
1161
+ // "If the cookie's secure-only-flag is true, then the request-uri's
1162
+ // scheme must denote a "secure" protocol"
1163
+ if (c.secure && !secure) {
1164
+ return false;
1165
+ }
1166
+
1167
+ // "If the cookie's http-only-flag is true, then exclude the cookie if the
1168
+ // cookie-string is being generated for a "non-HTTP" API"
1169
+ if (c.httpOnly && !http) {
1170
+ return false;
1171
+ }
1172
+
1173
+ // deferred from S5.3
1174
+ // non-RFC: allow retention of expired cookies by choice
1175
+ if (expireCheck && c.expiryTime() <= now) {
1176
+ store.removeCookie(c.domain, c.path, c.key, function(){}); // result ignored
1177
+ return false;
1178
+ }
1179
+
1180
+ return true;
1181
+ }
1182
+
1183
+ store.findCookies(host, allPaths ? null : path, function(err,cookies) {
1184
+ if (err) {
1185
+ return cb(err);
1186
+ }
1187
+
1188
+ cookies = cookies.filter(matchingCookie);
1189
+
1190
+ // sorting of S5.4 part 2
1191
+ if (options.sort !== false) {
1192
+ cookies = cookies.sort(cookieCompare);
1193
+ }
1194
+
1195
+ // S5.4 part 3
1196
+ var now = new Date();
1197
+ cookies.forEach(function(c) {
1198
+ c.lastAccessed = now;
1199
+ });
1200
+ // TODO persist lastAccessed
1201
+
1202
+ cb(null,cookies);
1203
+ });
1204
+ };
1205
+
1206
+ CAN_BE_SYNC.push('getCookieString');
1207
+ CookieJar.prototype.getCookieString = function(/*..., cb*/) {
1208
+ var args = Array.prototype.slice.call(arguments,0);
1209
+ var cb = args.pop();
1210
+ var next = function(err,cookies) {
1211
+ if (err) {
1212
+ cb(err);
1213
+ } else {
1214
+ cb(null, cookies
1215
+ .sort(cookieCompare)
1216
+ .map(function(c){
1217
+ return c.cookieString();
1218
+ })
1219
+ .join('; '));
1220
+ }
1221
+ };
1222
+ args.push(next);
1223
+ this.getCookies.apply(this,args);
1224
+ };
1225
+
1226
+ CAN_BE_SYNC.push('getSetCookieStrings');
1227
+ CookieJar.prototype.getSetCookieStrings = function(/*..., cb*/) {
1228
+ var args = Array.prototype.slice.call(arguments,0);
1229
+ var cb = args.pop();
1230
+ var next = function(err,cookies) {
1231
+ if (err) {
1232
+ cb(err);
1233
+ } else {
1234
+ cb(null, cookies.map(function(c){
1235
+ return c.toString();
1236
+ }));
1237
+ }
1238
+ };
1239
+ args.push(next);
1240
+ this.getCookies.apply(this,args);
1241
+ };
1242
+
1243
+ CAN_BE_SYNC.push('serialize');
1244
+ CookieJar.prototype.serialize = function(cb) {
1245
+ var type = this.store.constructor.name;
1246
+ if (type === 'Object') {
1247
+ type = null;
1248
+ }
1249
+
1250
+ // update README.md "Serialization Format" if you change this, please!
1251
+ var serialized = {
1252
+ // The version of tough-cookie that serialized this jar. Generally a good
1253
+ // practice since future versions can make data import decisions based on
1254
+ // known past behavior. When/if this matters, use `semver`.
1255
+ version: 'tough-cookie@'+VERSION,
1256
+
1257
+ // add the store type, to make humans happy:
1258
+ storeType: type,
1259
+
1260
+ // CookieJar configuration:
1261
+ rejectPublicSuffixes: !!this.rejectPublicSuffixes,
1262
+
1263
+ // this gets filled from getAllCookies:
1264
+ cookies: []
1265
+ };
1266
+
1267
+ if (!(this.store.getAllCookies &&
1268
+ typeof this.store.getAllCookies === 'function'))
1269
+ {
1270
+ return cb(new Error('store does not support getAllCookies and cannot be serialized'));
1271
+ }
1272
+
1273
+ this.store.getAllCookies(function(err,cookies) {
1274
+ if (err) {
1275
+ return cb(err);
1276
+ }
1277
+
1278
+ serialized.cookies = cookies.map(function(cookie) {
1279
+ // convert to serialized 'raw' cookies
1280
+ cookie = (cookie instanceof Cookie) ? cookie.toJSON() : cookie;
1281
+
1282
+ // Remove the index so new ones get assigned during deserialization
1283
+ delete cookie.creationIndex;
1284
+
1285
+ return cookie;
1286
+ });
1287
+
1288
+ return cb(null, serialized);
1289
+ });
1290
+ };
1291
+
1292
+ // well-known name that JSON.stringify calls
1293
+ CookieJar.prototype.toJSON = function() {
1294
+ return this.serializeSync();
1295
+ };
1296
+
1297
+ // use the class method CookieJar.deserialize instead of calling this directly
1298
+ CAN_BE_SYNC.push('_importCookies');
1299
+ CookieJar.prototype._importCookies = function(serialized, cb) {
1300
+ var jar = this;
1301
+ var cookies = serialized.cookies;
1302
+ if (!cookies || !Array.isArray(cookies)) {
1303
+ return cb(new Error('serialized jar has no cookies array'));
1304
+ }
1305
+ cookies = cookies.slice(); // do not modify the original
1306
+
1307
+ function putNext(err) {
1308
+ if (err) {
1309
+ return cb(err);
1310
+ }
1311
+
1312
+ if (!cookies.length) {
1313
+ return cb(err, jar);
1314
+ }
1315
+
1316
+ var cookie;
1317
+ try {
1318
+ cookie = fromJSON(cookies.shift());
1319
+ } catch (e) {
1320
+ return cb(e);
1321
+ }
1322
+
1323
+ if (cookie === null) {
1324
+ return putNext(null); // skip this cookie
1325
+ }
1326
+
1327
+ jar.store.putCookie(cookie, putNext);
1328
+ }
1329
+
1330
+ putNext();
1331
+ };
1332
+
1333
+ CookieJar.deserialize = function(strOrObj, store, cb) {
1334
+ if (arguments.length !== 3) {
1335
+ // store is optional
1336
+ cb = store;
1337
+ store = null;
1338
+ }
1339
+
1340
+ var serialized;
1341
+ if (typeof strOrObj === 'string') {
1342
+ serialized = jsonParse(strOrObj);
1343
+ if (serialized instanceof Error) {
1344
+ return cb(serialized);
1345
+ }
1346
+ } else {
1347
+ serialized = strOrObj;
1348
+ }
1349
+
1350
+ var jar = new CookieJar(store, serialized.rejectPublicSuffixes);
1351
+ jar._importCookies(serialized, function(err) {
1352
+ if (err) {
1353
+ return cb(err);
1354
+ }
1355
+ cb(null, jar);
1356
+ });
1357
+ };
1358
+
1359
+ CookieJar.deserializeSync = function(strOrObj, store) {
1360
+ var serialized = typeof strOrObj === 'string' ?
1361
+ JSON.parse(strOrObj) : strOrObj;
1362
+ var jar = new CookieJar(store, serialized.rejectPublicSuffixes);
1363
+
1364
+ // catch this mistake early:
1365
+ if (!jar.store.synchronous) {
1366
+ throw new Error('CookieJar store is not synchronous; use async API instead.');
1367
+ }
1368
+
1369
+ jar._importCookiesSync(serialized);
1370
+ return jar;
1371
+ };
1372
+ CookieJar.fromJSON = CookieJar.deserializeSync;
1373
+
1374
+ CookieJar.prototype.clone = function(newStore, cb) {
1375
+ if (arguments.length === 1) {
1376
+ cb = newStore;
1377
+ newStore = null;
1378
+ }
1379
+
1380
+ this.serialize(function(err,serialized) {
1381
+ if (err) {
1382
+ return cb(err);
1383
+ }
1384
+ CookieJar.deserialize(serialized, newStore, cb);
1385
+ });
1386
+ };
1387
+
1388
+ CAN_BE_SYNC.push('removeAllCookies');
1389
+ CookieJar.prototype.removeAllCookies = function(cb) {
1390
+ var store = this.store;
1391
+
1392
+ // Check that the store implements its own removeAllCookies(). The default
1393
+ // implementation in Store will immediately call the callback with a "not
1394
+ // implemented" Error.
1395
+ if (store.removeAllCookies instanceof Function &&
1396
+ store.removeAllCookies !== Store.prototype.removeAllCookies)
1397
+ {
1398
+ return store.removeAllCookies(cb);
1399
+ }
1400
+
1401
+ store.getAllCookies(function(err, cookies) {
1402
+ if (err) {
1403
+ return cb(err);
1404
+ }
1405
+
1406
+ if (cookies.length === 0) {
1407
+ return cb(null);
1408
+ }
1409
+
1410
+ var completedCount = 0;
1411
+ var removeErrors = [];
1412
+
1413
+ function removeCookieCb(removeErr) {
1414
+ if (removeErr) {
1415
+ removeErrors.push(removeErr);
1416
+ }
1417
+
1418
+ completedCount++;
1419
+
1420
+ if (completedCount === cookies.length) {
1421
+ return cb(removeErrors.length ? removeErrors[0] : null);
1422
+ }
1423
+ }
1424
+
1425
+ cookies.forEach(function(cookie) {
1426
+ store.removeCookie(cookie.domain, cookie.path, cookie.key, removeCookieCb);
1427
+ });
1428
+ });
1429
+ };
1430
+
1431
+ CookieJar.prototype._cloneSync = syncWrap('clone');
1432
+ CookieJar.prototype.cloneSync = function(newStore) {
1433
+ if (!newStore.synchronous) {
1434
+ throw new Error('CookieJar clone destination store is not synchronous; use async API instead.');
1435
+ }
1436
+ return this._cloneSync(newStore);
1437
+ };
1438
+
1439
+ // Use a closure to provide a true imperative API for synchronous stores.
1440
+ function syncWrap(method) {
1441
+ return function() {
1442
+ if (!this.store.synchronous) {
1443
+ throw new Error('CookieJar store is not synchronous; use async API instead.');
1444
+ }
1445
+
1446
+ var args = Array.prototype.slice.call(arguments);
1447
+ var syncErr, syncResult;
1448
+ args.push(function syncCb(err, result) {
1449
+ syncErr = err;
1450
+ syncResult = result;
1451
+ });
1452
+ this[method].apply(this, args);
1453
+
1454
+ if (syncErr) {
1455
+ throw syncErr;
1456
+ }
1457
+ return syncResult;
1458
+ };
1459
+ }
1460
+
1461
+ // wrap all declared CAN_BE_SYNC methods in the sync wrapper
1462
+ CAN_BE_SYNC.forEach(function(method) {
1463
+ CookieJar.prototype[method+'Sync'] = syncWrap(method);
1464
+ });
1465
+
1466
+ exports.version = VERSION;
1467
+ exports.CookieJar = CookieJar;
1468
+ exports.Cookie = Cookie;
1469
+ exports.Store = Store;
1470
+ exports.MemoryCookieStore = MemoryCookieStore;
1471
+ exports.parseDate = parseDate;
1472
+ exports.formatDate = formatDate;
1473
+ exports.parse = parse;
1474
+ exports.fromJSON = fromJSON;
1475
+ exports.domainMatch = domainMatch;
1476
+ exports.defaultPath = defaultPath;
1477
+ exports.pathMatch = pathMatch;
1478
+ exports.getPublicSuffix = pubsuffix.getPublicSuffix;
1479
+ exports.cookieCompare = cookieCompare;
1480
+ exports.permuteDomain = require('./permuteDomain').permuteDomain;
1481
+ exports.permutePath = permutePath;
1482
+ exports.canonicalDomain = canonicalDomain;