ahmad-module 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

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,495 @@
1
+ const querystring = require('querystring');
2
+ const sax = require('sax');
3
+ const miniget = require('miniget');
4
+ const utils = require('./utils');
5
+ // Forces Node JS version of setTimeout for Electron based applications
6
+ const { setTimeout } = require('timers');
7
+ const formatUtils = require('./format-utils');
8
+ const urlUtils = require('./url-utils');
9
+ const extras = require('./info-extras');
10
+ const sig = require('./sig');
11
+ const Cache = require('./cache');
12
+
13
+
14
+ const BASE_URL = 'https://www.youtube.com/watch?v=';
15
+
16
+
17
+ // Cached for storing basic/full info.
18
+ exports.cache = new Cache();
19
+ exports.cookieCache = new Cache(1000 * 60 * 60 * 24);
20
+ exports.watchPageCache = new Cache();
21
+ // Cache for cver used in getVideoInfoPage
22
+ let cver = '2.20210622.10.00';
23
+
24
+
25
+ // Special error class used to determine if an error is unrecoverable,
26
+ // as in, ytdl-core should not try again to fetch the video metadata.
27
+ // In this case, the video is usually unavailable in some way.
28
+ class UnrecoverableError extends Error {}
29
+
30
+
31
+ // List of URLs that show up in `notice_url` for age restricted videos.
32
+ const AGE_RESTRICTED_URLS = [
33
+ 'support.google.com/youtube/?p=age_restrictions',
34
+ 'youtube.com/t/community_guidelines',
35
+ ];
36
+
37
+
38
+ /**
39
+ * Gets info from a video without getting additional formats.
40
+ *
41
+ * @param {string} id
42
+ * @param {Object} options
43
+ * @returns {Promise<Object>}
44
+ */
45
+ exports.getBasicInfo = async(id, options) => {
46
+ if (options.IPv6Block) {
47
+ options.requestOptions = Object.assign({}, options.requestOptions, {
48
+ family: 6,
49
+ localAddress: utils.getRandomIPv6(options.IPv6Block),
50
+ });
51
+ }
52
+ const retryOptions = Object.assign({}, miniget.defaultOptions, options.requestOptions);
53
+ options.requestOptions = Object.assign({}, options.requestOptions, {});
54
+ options.requestOptions.headers = Object.assign({},
55
+ {
56
+ // eslint-disable-next-line max-len
57
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.101 Safari/537.36',
58
+ }, options.requestOptions.headers);
59
+ const validate = info => {
60
+ let playErr = utils.playError(info.player_response, ['ERROR'], UnrecoverableError);
61
+ let privateErr = privateVideoError(info.player_response);
62
+ if (playErr || privateErr) {
63
+ throw playErr || privateErr;
64
+ }
65
+ return info && info.player_response && (
66
+ info.player_response.streamingData || isRental(info.player_response) || isNotYetBroadcasted(info.player_response)
67
+ );
68
+ };
69
+ let info = await pipeline([id, options], validate, retryOptions, [
70
+ getWatchHTMLPage,
71
+ getWatchJSONPage,
72
+ getVideoInfoPage,
73
+ ]);
74
+
75
+ Object.assign(info, {
76
+ formats: parseFormats(info.player_response),
77
+ related_videos: extras.getRelatedVideos(info),
78
+ });
79
+
80
+ // Add additional properties to info.
81
+ const media = extras.getMedia(info);
82
+ const additional = {
83
+ author: extras.getAuthor(info),
84
+ media,
85
+ likes: extras.getLikes(info),
86
+ dislikes: extras.getDislikes(info),
87
+ age_restricted: !!(media && AGE_RESTRICTED_URLS.some(url =>
88
+ Object.values(media).some(v => typeof v === 'string' && v.includes(url)))
89
+ ),
90
+
91
+ // Give the standard link to the video.
92
+ video_url: BASE_URL + id,
93
+ storyboards: extras.getStoryboards(info),
94
+ chapters: extras.getChapters(info),
95
+ };
96
+
97
+ info.videoDetails = extras.cleanVideoDetails(Object.assign({},
98
+ info.player_response && info.player_response.microformat &&
99
+ info.player_response.microformat.playerMicroformatRenderer,
100
+ info.player_response && info.player_response.videoDetails, additional), info);
101
+
102
+ return info;
103
+ };
104
+
105
+ const privateVideoError = player_response => {
106
+ let playability = player_response && player_response.playabilityStatus;
107
+ if (playability && playability.status === 'LOGIN_REQUIRED' && playability.messages &&
108
+ playability.messages.filter(m => /This is a private video/.test(m)).length) {
109
+ return new UnrecoverableError(playability.reason || (playability.messages && playability.messages[0]));
110
+ } else {
111
+ return null;
112
+ }
113
+ };
114
+
115
+
116
+ const isRental = player_response => {
117
+ let playability = player_response.playabilityStatus;
118
+ return playability && playability.status === 'UNPLAYABLE' &&
119
+ playability.errorScreen && playability.errorScreen.playerLegacyDesktopYpcOfferRenderer;
120
+ };
121
+
122
+
123
+ const isNotYetBroadcasted = player_response => {
124
+ let playability = player_response.playabilityStatus;
125
+ return playability && playability.status === 'LIVE_STREAM_OFFLINE';
126
+ };
127
+
128
+
129
+ const getWatchHTMLURL = (id, options) => `${BASE_URL + id}&hl=${options.lang || 'en'}`;
130
+ const getWatchHTMLPageBody = (id, options) => {
131
+ const url = getWatchHTMLURL(id, options);
132
+ return exports.watchPageCache.getOrSet(url, () => utils.exposedMiniget(url, options).text());
133
+ };
134
+
135
+
136
+ const EMBED_URL = 'https://www.youtube.com/embed/';
137
+ const getEmbedPageBody = (id, options) => {
138
+ const embedUrl = `${EMBED_URL + id}?hl=${options.lang || 'en'}`;
139
+ return utils.exposedMiniget(embedUrl, options).text();
140
+ };
141
+
142
+
143
+ const getHTML5player = body => {
144
+ let html5playerRes =
145
+ /<script\s+src="([^"]+)"(?:\s+type="text\/javascript")?\s+name="player_ias\/base"\s*>|"jsUrl":"([^"]+)"/
146
+ .exec(body);
147
+ return html5playerRes ? html5playerRes[1] || html5playerRes[2] : null;
148
+ };
149
+
150
+
151
+ const getIdentityToken = (id, options, key, throwIfNotFound) =>
152
+ exports.cookieCache.getOrSet(key, async() => {
153
+ let page = await getWatchHTMLPageBody(id, options);
154
+ let match = page.match(/(["'])ID_TOKEN\1[:,]\s?"([^"]+)"/);
155
+ if (!match && throwIfNotFound) {
156
+ throw new UnrecoverableError('Cookie header used in request, but unable to find YouTube identity token');
157
+ }
158
+ return match && match[2];
159
+ });
160
+
161
+
162
+ /**
163
+ * Goes through each endpoint in the pipeline, retrying on failure if the error is recoverable.
164
+ * If unable to succeed with one endpoint, moves onto the next one.
165
+ *
166
+ * @param {Array.<Object>} args
167
+ * @param {Function} validate
168
+ * @param {Object} retryOptions
169
+ * @param {Array.<Function>} endpoints
170
+ * @returns {[Object, Object, Object]}
171
+ */
172
+ const pipeline = async(args, validate, retryOptions, endpoints) => {
173
+ let info;
174
+ for (let func of endpoints) {
175
+ try {
176
+ const newInfo = await retryFunc(func, args.concat([info]), retryOptions);
177
+ if (newInfo.player_response) {
178
+ newInfo.player_response.videoDetails = assign(
179
+ info && info.player_response && info.player_response.videoDetails,
180
+ newInfo.player_response.videoDetails);
181
+ newInfo.player_response = assign(info && info.player_response, newInfo.player_response);
182
+ }
183
+ info = assign(info, newInfo);
184
+ if (validate(info, false)) {
185
+ break;
186
+ }
187
+ } catch (err) {
188
+ if (err instanceof UnrecoverableError || func === endpoints[endpoints.length - 1]) {
189
+ throw err;
190
+ }
191
+ // Unable to find video metadata... so try next endpoint.
192
+ }
193
+ }
194
+ return info;
195
+ };
196
+
197
+
198
+ /**
199
+ * Like Object.assign(), but ignores `null` and `undefined` from `source`.
200
+ *
201
+ * @param {Object} target
202
+ * @param {Object} source
203
+ * @returns {Object}
204
+ */
205
+ const assign = (target, source) => {
206
+ if (!target || !source) { return target || source; }
207
+ for (let [key, value] of Object.entries(source)) {
208
+ if (value !== null && value !== undefined) {
209
+ target[key] = value;
210
+ }
211
+ }
212
+ return target;
213
+ };
214
+
215
+
216
+ /**
217
+ * Given a function, calls it with `args` until it's successful,
218
+ * or until it encounters an unrecoverable error.
219
+ * Currently, any error from miniget is considered unrecoverable. Errors such as
220
+ * too many redirects, invalid URL, status code 404, status code 502.
221
+ *
222
+ * @param {Function} func
223
+ * @param {Array.<Object>} args
224
+ * @param {Object} options
225
+ * @param {number} options.maxRetries
226
+ * @param {Object} options.backoff
227
+ * @param {number} options.backoff.inc
228
+ */
229
+ const retryFunc = async(func, args, options) => {
230
+ let currentTry = 0, result;
231
+ while (currentTry <= options.maxRetries) {
232
+ try {
233
+ result = await func(...args);
234
+ break;
235
+ } catch (err) {
236
+ if (err instanceof UnrecoverableError ||
237
+ (err instanceof miniget.MinigetError && err.statusCode < 500) || currentTry >= options.maxRetries) {
238
+ throw err;
239
+ }
240
+ let wait = Math.min(++currentTry * options.backoff.inc, options.backoff.max);
241
+ await new Promise(resolve => setTimeout(resolve, wait));
242
+ }
243
+ }
244
+ return result;
245
+ };
246
+
247
+
248
+ const jsonClosingChars = /^[)\]}'\s]+/;
249
+ const parseJSON = (source, varName, json) => {
250
+ if (!json || typeof json === 'object') {
251
+ return json;
252
+ } else {
253
+ try {
254
+ json = json.replace(jsonClosingChars, '');
255
+ return JSON.parse(json);
256
+ } catch (err) {
257
+ throw Error(`Error parsing ${varName} in ${source}: ${err.message}`);
258
+ }
259
+ }
260
+ };
261
+
262
+
263
+ const findJSON = (source, varName, body, left, right, prependJSON) => {
264
+ let jsonStr = utils.between(body, left, right);
265
+ if (!jsonStr) {
266
+ throw Error(`Could not find ${varName} in ${source}`);
267
+ }
268
+ return parseJSON(source, varName, utils.cutAfterJS(`${prependJSON}${jsonStr}`));
269
+ };
270
+
271
+
272
+ const findPlayerResponse = (source, info) => {
273
+ const player_response = info && (
274
+ (info.args && info.args.player_response) ||
275
+ info.player_response || info.playerResponse || info.embedded_player_response);
276
+ return parseJSON(source, 'player_response', player_response);
277
+ };
278
+
279
+
280
+ const getWatchJSONURL = (id, options) => `${getWatchHTMLURL(id, options)}&pbj=1`;
281
+ const getWatchJSONPage = async(id, options) => {
282
+ const reqOptions = Object.assign({ headers: {} }, options.requestOptions);
283
+ let cookie = reqOptions.headers.Cookie || reqOptions.headers.cookie;
284
+ reqOptions.headers = Object.assign({
285
+ 'x-youtube-client-name': '1',
286
+ 'x-youtube-client-version': cver,
287
+ 'x-youtube-identity-token': exports.cookieCache.get(cookie || 'browser') || '',
288
+ }, reqOptions.headers);
289
+
290
+ const setIdentityToken = async(key, throwIfNotFound) => {
291
+ if (reqOptions.headers['x-youtube-identity-token']) { return; }
292
+ reqOptions.headers['x-youtube-identity-token'] = await getIdentityToken(id, options, key, throwIfNotFound);
293
+ };
294
+
295
+ if (cookie) {
296
+ await setIdentityToken(cookie, true);
297
+ }
298
+
299
+ const jsonUrl = getWatchJSONURL(id, options);
300
+ const body = await utils.exposedMiniget(jsonUrl, options, reqOptions).text();
301
+ let parsedBody = parseJSON('watch.json', 'body', body);
302
+ if (parsedBody.reload === 'now') {
303
+ await setIdentityToken('browser', false);
304
+ }
305
+ if (parsedBody.reload === 'now' || !Array.isArray(parsedBody)) {
306
+ throw Error('Unable to retrieve video metadata in watch.json');
307
+ }
308
+ let info = parsedBody.reduce((part, curr) => Object.assign(curr, part), {});
309
+ info.player_response = findPlayerResponse('watch.json', info);
310
+ info.html5player = info.player && info.player.assets && info.player.assets.js;
311
+
312
+ return info;
313
+ };
314
+
315
+
316
+ const getWatchHTMLPage = async(id, options) => {
317
+ let body = await getWatchHTMLPageBody(id, options);
318
+ let info = { page: 'watch' };
319
+ try {
320
+ cver = utils.between(body, '{"key":"cver","value":"', '"}');
321
+ info.player_response = findJSON('watch.html', 'player_response',
322
+ body, /\bytInitialPlayerResponse\s*=\s*\{/i, '</script>', '{');
323
+ } catch (err) {
324
+ let args = findJSON('watch.html', 'player_response', body, /\bytplayer\.config\s*=\s*{/, '</script>', '{');
325
+ info.player_response = findPlayerResponse('watch.html', args);
326
+ }
327
+ info.response = findJSON('watch.html', 'response', body, /\bytInitialData("\])?\s*=\s*\{/i, '</script>', '{');
328
+ info.html5player = getHTML5player(body);
329
+ return info;
330
+ };
331
+
332
+
333
+ const INFO_HOST = 'www.youtube.com';
334
+ const INFO_PATH = '/get_video_info';
335
+ const VIDEO_EURL = 'https://youtube.googleapis.com/v/';
336
+ const getVideoInfoPage = async(id, options) => {
337
+ const url = new URL(`https://${INFO_HOST}${INFO_PATH}`);
338
+ url.searchParams.set('video_id', id);
339
+ url.searchParams.set('c', 'TVHTML5');
340
+ url.searchParams.set('cver', `7${cver.substr(1)}`);
341
+ url.searchParams.set('eurl', VIDEO_EURL + id);
342
+ url.searchParams.set('ps', 'default');
343
+ url.searchParams.set('gl', 'US');
344
+ url.searchParams.set('hl', options.lang || 'en');
345
+ url.searchParams.set('html5', '1');
346
+ const body = await utils.exposedMiniget(url.toString(), options).text();
347
+ let info = querystring.parse(body);
348
+ info.player_response = findPlayerResponse('get_video_info', info);
349
+ return info;
350
+ };
351
+
352
+
353
+ /**
354
+ * @param {Object} player_response
355
+ * @returns {Array.<Object>}
356
+ */
357
+ const parseFormats = player_response => {
358
+ let formats = [];
359
+ if (player_response && player_response.streamingData) {
360
+ formats = formats
361
+ .concat(player_response.streamingData.formats || [])
362
+ .concat(player_response.streamingData.adaptiveFormats || []);
363
+ }
364
+ return formats;
365
+ };
366
+
367
+
368
+ /**
369
+ * Gets info from a video additional formats and deciphered URLs.
370
+ *
371
+ * @param {string} id
372
+ * @param {Object} options
373
+ * @returns {Promise<Object>}
374
+ */
375
+ exports.getInfo = async(id, options) => {
376
+ let info = await exports.getBasicInfo(id, options);
377
+ const hasManifest =
378
+ info.player_response && info.player_response.streamingData && (
379
+ info.player_response.streamingData.dashManifestUrl ||
380
+ info.player_response.streamingData.hlsManifestUrl
381
+ );
382
+ let funcs = [];
383
+ if (info.formats.length) {
384
+ info.html5player = info.html5player ||
385
+ getHTML5player(await getWatchHTMLPageBody(id, options)) || getHTML5player(await getEmbedPageBody(id, options));
386
+ if (!info.html5player) {
387
+ throw Error('Unable to find html5player file');
388
+ }
389
+ const html5player = new URL(info.html5player, BASE_URL).toString();
390
+ funcs.push(sig.decipherFormats(info.formats, html5player, options));
391
+ }
392
+ if (hasManifest && info.player_response.streamingData.dashManifestUrl) {
393
+ let url = info.player_response.streamingData.dashManifestUrl;
394
+ funcs.push(getDashManifest(url, options));
395
+ }
396
+ if (hasManifest && info.player_response.streamingData.hlsManifestUrl) {
397
+ let url = info.player_response.streamingData.hlsManifestUrl;
398
+ funcs.push(getM3U8(url, options));
399
+ }
400
+
401
+ let results = await Promise.all(funcs);
402
+ info.formats = Object.values(Object.assign({}, ...results));
403
+ info.formats = info.formats.map(formatUtils.addFormatMeta);
404
+ info.formats.sort(formatUtils.sortFormats);
405
+ info.full = true;
406
+ return info;
407
+ };
408
+
409
+
410
+ /**
411
+ * Gets additional DASH formats.
412
+ *
413
+ * @param {string} url
414
+ * @param {Object} options
415
+ * @returns {Promise<Array.<Object>>}
416
+ */
417
+ const getDashManifest = (url, options) => new Promise((resolve, reject) => {
418
+ let formats = {};
419
+ const parser = sax.parser(false);
420
+ parser.onerror = reject;
421
+ let adaptationSet;
422
+ parser.onopentag = node => {
423
+ if (node.name === 'ADAPTATIONSET') {
424
+ adaptationSet = node.attributes;
425
+ } else if (node.name === 'REPRESENTATION') {
426
+ const itag = parseInt(node.attributes.ID);
427
+ if (!isNaN(itag)) {
428
+ formats[url] = Object.assign({
429
+ itag, url,
430
+ bitrate: parseInt(node.attributes.BANDWIDTH),
431
+ mimeType: `${adaptationSet.MIMETYPE}; codecs="${node.attributes.CODECS}"`,
432
+ }, node.attributes.HEIGHT ? {
433
+ width: parseInt(node.attributes.WIDTH),
434
+ height: parseInt(node.attributes.HEIGHT),
435
+ fps: parseInt(node.attributes.FRAMERATE),
436
+ } : {
437
+ audioSampleRate: node.attributes.AUDIOSAMPLINGRATE,
438
+ });
439
+ }
440
+ }
441
+ };
442
+ parser.onend = () => { resolve(formats); };
443
+ const req = utils.exposedMiniget(new URL(url, BASE_URL).toString(), options);
444
+ req.setEncoding('utf8');
445
+ req.on('error', reject);
446
+ req.on('data', chunk => { parser.write(chunk); });
447
+ req.on('end', parser.close.bind(parser));
448
+ });
449
+
450
+
451
+ /**
452
+ * Gets additional formats.
453
+ *
454
+ * @param {string} url
455
+ * @param {Object} options
456
+ * @returns {Promise<Array.<Object>>}
457
+ */
458
+ const getM3U8 = async(url, options) => {
459
+ url = new URL(url, BASE_URL);
460
+ const body = await utils.exposedMiniget(url.toString(), options).text();
461
+ let formats = {};
462
+ body
463
+ .split('\n')
464
+ .filter(line => /^https?:\/\//.test(line))
465
+ .forEach(line => {
466
+ const itag = parseInt(line.match(/\/itag\/(\d+)\//)[1]);
467
+ formats[line] = { itag, url: line };
468
+ });
469
+ return formats;
470
+ };
471
+
472
+
473
+ // Cache get info functions.
474
+ // In case a user wants to get a video's info before downloading.
475
+ for (let funcName of ['getBasicInfo', 'getInfo']) {
476
+ /**
477
+ * @param {string} link
478
+ * @param {Object} options
479
+ * @returns {Promise<Object>}
480
+ */
481
+ const func = exports[funcName];
482
+ exports[funcName] = async(link, options = {}) => {
483
+ utils.checkForUpdates();
484
+ let id = await urlUtils.getVideoID(link);
485
+ const key = [funcName, id, options.lang].join('-');
486
+ return exports.cache.getOrSet(key, () => func(id, options));
487
+ };
488
+ }
489
+
490
+
491
+ // Export a few helpers.
492
+ exports.validateID = urlUtils.validateID;
493
+ exports.validateURL = urlUtils.validateURL;
494
+ exports.getURLVideoID = urlUtils.getURLVideoID;
495
+ exports.getVideoID = urlUtils.getVideoID;
@@ -0,0 +1,122 @@
1
+ const querystring = require('querystring');
2
+ const Cache = require('./cache');
3
+ const utils = require('./utils');
4
+ const vm = require('vm');
5
+
6
+ // A shared cache to keep track of html5player js functions.
7
+ exports.cache = new Cache();
8
+
9
+ /**
10
+ * Extract signature deciphering and n parameter transform functions from html5player file.
11
+ *
12
+ * @param {string} html5playerfile
13
+ * @param {Object} options
14
+ * @returns {Promise<Array.<string>>}
15
+ */
16
+ exports.getFunctions = (html5playerfile, options) => exports.cache.getOrSet(html5playerfile, async() => {
17
+ const body = await utils.exposedMiniget(html5playerfile, options).text();
18
+ const functions = exports.extractFunctions(body);
19
+ if (!functions || !functions.length) {
20
+ throw Error('Could not extract functions');
21
+ }
22
+ exports.cache.set(html5playerfile, functions);
23
+ return functions;
24
+ });
25
+
26
+ /**
27
+ * Extracts the actions that should be taken to decipher a signature
28
+ * and tranform the n parameter
29
+ *
30
+ * @param {string} body
31
+ * @returns {Array.<string>}
32
+ */
33
+ exports.extractFunctions = body => {
34
+ const functions = [];
35
+ const extractManipulations = caller => {
36
+ const functionName = utils.between(caller, `a=a.split("");`, `.`);
37
+ if (!functionName) return '';
38
+ const functionStart = `var ${functionName}={`;
39
+ const ndx = body.indexOf(functionStart);
40
+ if (ndx < 0) return '';
41
+ const subBody = body.slice(ndx + functionStart.length - 1);
42
+ return `var ${functionName}=${utils.cutAfterJS(subBody)}`;
43
+ };
44
+ const extractDecipher = () => {
45
+ const functionName = utils.between(body, `a.set("alr","yes");c&&(c=`, `(decodeURIC`);
46
+ if (functionName && functionName.length) {
47
+ const functionStart = `${functionName}=function(a)`;
48
+ const ndx = body.indexOf(functionStart);
49
+ if (ndx >= 0) {
50
+ const subBody = body.slice(ndx + functionStart.length);
51
+ let functionBody = `var ${functionStart}${utils.cutAfterJS(subBody)}`;
52
+ functionBody = `${extractManipulations(functionBody)};${functionBody};${functionName}(sig);`;
53
+ functions.push(functionBody);
54
+ }
55
+ }
56
+ };
57
+ const extractNCode = () => {
58
+ let functionName = utils.between(body, `&&(b=a.get("n"))&&(b=`, `(b)`);
59
+ if (functionName.includes('[')) functionName = utils.between(body, `${functionName.split('[')[0]}=[`, `]`);
60
+ if (functionName && functionName.length) {
61
+ const functionStart = `${functionName}=function(a)`;
62
+ const ndx = body.indexOf(functionStart);
63
+ if (ndx >= 0) {
64
+ const subBody = body.slice(ndx + functionStart.length);
65
+ const functionBody = `var ${functionStart}${utils.cutAfterJS(subBody)};${functionName}(ncode);`;
66
+ functions.push(functionBody);
67
+ }
68
+ }
69
+ };
70
+ extractDecipher();
71
+ extractNCode();
72
+ return functions;
73
+ };
74
+
75
+ /**
76
+ * Apply decipher and n-transform to individual format
77
+ *
78
+ * @param {Object} format
79
+ * @param {vm.Script} decipherScript
80
+ * @param {vm.Script} nTransformScript
81
+ */
82
+ exports.setDownloadURL = (format, decipherScript, nTransformScript) => {
83
+ const decipher = url => {
84
+ const args = querystring.parse(url);
85
+ if (!args.s || !decipherScript) return args.url;
86
+ const components = new URL(decodeURIComponent(args.url));
87
+ components.searchParams.set(args.sp ? args.sp : 'signature',
88
+ decipherScript.runInNewContext({ sig: decodeURIComponent(args.s) }));
89
+ return components.toString();
90
+ };
91
+ const ncode = url => {
92
+ const components = new URL(decodeURIComponent(url));
93
+ const n = components.searchParams.get('n');
94
+ if (!n || !nTransformScript) return url;
95
+ components.searchParams.set('n', nTransformScript.runInNewContext({ ncode: n }));
96
+ return components.toString();
97
+ };
98
+ const cipher = !format.url;
99
+ const url = format.url || format.signatureCipher || format.cipher;
100
+ format.url = cipher ? ncode(decipher(url)) : ncode(url);
101
+ delete format.signatureCipher;
102
+ delete format.cipher;
103
+ };
104
+
105
+ /**
106
+ * Applies decipher and n parameter transforms to all format URL's.
107
+ *
108
+ * @param {Array.<Object>} formats
109
+ * @param {string} html5player
110
+ * @param {Object} options
111
+ */
112
+ exports.decipherFormats = async(formats, html5player, options) => {
113
+ let decipheredFormats = {};
114
+ let functions = await exports.getFunctions(html5player, options);
115
+ const decipherScript = functions.length ? new vm.Script(functions[0]) : null;
116
+ const nTransformScript = functions.length > 1 ? new vm.Script(functions[1]) : null;
117
+ formats.forEach(format => {
118
+ exports.setDownloadURL(format, decipherScript, nTransformScript);
119
+ decipheredFormats[format.url] = format;
120
+ });
121
+ return decipheredFormats;
122
+ };
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Get video ID.
3
+ *
4
+ * There are a few type of video URL formats.
5
+ * - https://www.youtube.com/watch?v=VIDEO_ID
6
+ * - https://m.youtube.com/watch?v=VIDEO_ID
7
+ * - https://youtu.be/VIDEO_ID
8
+ * - https://www.youtube.com/v/VIDEO_ID
9
+ * - https://www.youtube.com/embed/VIDEO_ID
10
+ * - https://music.youtube.com/watch?v=VIDEO_ID
11
+ * - https://gaming.youtube.com/watch?v=VIDEO_ID
12
+ *
13
+ * @param {string} link
14
+ * @return {string}
15
+ * @throws {Error} If unable to find a id
16
+ * @throws {TypeError} If videoid doesn't match specs
17
+ */
18
+ const validQueryDomains = new Set([
19
+ 'youtube.com',
20
+ 'www.youtube.com',
21
+ 'm.youtube.com',
22
+ 'music.youtube.com',
23
+ 'gaming.youtube.com',
24
+ ]);
25
+ const validPathDomains = /^https?:\/\/(youtu\.be\/|(www\.)?youtube\.com\/(embed|v|shorts)\/)/;
26
+ exports.getURLVideoID = link => {
27
+ const parsed = new URL(link.trim());
28
+ let id = parsed.searchParams.get('v');
29
+ if (validPathDomains.test(link.trim()) && !id) {
30
+ const paths = parsed.pathname.split('/');
31
+ id = parsed.host === 'youtu.be' ? paths[1] : paths[2];
32
+ } else if (parsed.hostname && !validQueryDomains.has(parsed.hostname)) {
33
+ throw Error('Not a YouTube domain');
34
+ }
35
+ if (!id) {
36
+ throw Error(`No video id found: "${link}"`);
37
+ }
38
+ id = id.substring(0, 11);
39
+ if (!exports.validateID(id)) {
40
+ throw TypeError(`Video id (${id}) does not match expected ` +
41
+ `format (${idRegex.toString()})`);
42
+ }
43
+ return id;
44
+ };
45
+
46
+
47
+ /**
48
+ * Gets video ID either from a url or by checking if the given string
49
+ * matches the video ID format.
50
+ *
51
+ * @param {string} str
52
+ * @returns {string}
53
+ * @throws {Error} If unable to find a id
54
+ * @throws {TypeError} If videoid doesn't match specs
55
+ */
56
+ const urlRegex = /^https?:\/\//;
57
+ exports.getVideoID = str => {
58
+ if (exports.validateID(str)) {
59
+ return str;
60
+ } else if (urlRegex.test(str.trim())) {
61
+ return exports.getURLVideoID(str);
62
+ } else {
63
+ throw Error(`No video id found: ${str}`);
64
+ }
65
+ };
66
+
67
+
68
+ /**
69
+ * Returns true if given id satifies YouTube's id format.
70
+ *
71
+ * @param {string} id
72
+ * @return {boolean}
73
+ */
74
+ const idRegex = /^[a-zA-Z0-9-_]{11}$/;
75
+ exports.validateID = id => idRegex.test(id.trim());
76
+
77
+
78
+ /**
79
+ * Checks wether the input string includes a valid id.
80
+ *
81
+ * @param {string} string
82
+ * @returns {boolean}
83
+ */
84
+ exports.validateURL = string => {
85
+ try {
86
+ exports.getURLVideoID(string);
87
+ return true;
88
+ } catch (e) {
89
+ return false;
90
+ }
91
+ };