Replace request with node-fetch, implement retry-on-error
This commit is contained in:
		
							parent
							
								
									31fd89ad58
								
							
						
					
					
						commit
						3cc2c25775
					
				|  | @ -1,46 +1,53 @@ | |||
| import util from 'util'; | ||||
| import request from 'request'; | ||||
| import fetch from 'node-fetch'; | ||||
| 
 | ||||
| const YOUTUBE_BASE = 'https://www.youtube.com/%s'; | ||||
| const WATCH_BASE = util.format(YOUTUBE_BASE, 'watch?v=%s'); | ||||
| const PLAYER_REGEX = /ytplayer\.config = (\{.*?\});/; | ||||
| const PLAYER_CONFIG_REGEX = /ytplayer\.config = (\{.*?\});/; | ||||
| 
 | ||||
| /** | ||||
|  * Make a promise that is resolved in a point in the future. | ||||
|  * | ||||
|  * @param Number time Time to wait before resolving the promise (ms). | ||||
|  * @return null | ||||
|  */ | ||||
| const sleep = time => new Promise(resolve => setTimeout(resolve, time)); | ||||
| 
 | ||||
| /** | ||||
|  * Fetch the `ytplayer.config` object for a YouTube video. | ||||
|  * | ||||
|  * @async | ||||
|  * @param videoId Identifier of the video to fetch. | ||||
|  * @return The player configuration object. | ||||
|  * @param String videoId Identifier of the video to fetch. | ||||
|  * @param Number retries Allowed number of retries after fetch errors. | ||||
|  * @param Number cooldown Time to wait before retrying (ms). | ||||
|  * @return Object The player configuration object. | ||||
|  */ | ||||
| export const getPlayerConfig = videoId => | ||||
| export const getPlayerConfig = async (videoId, retries = 3, cooldown = 1000) => | ||||
| { | ||||
|     const url = util.format(WATCH_BASE, videoId); | ||||
| 
 | ||||
|     return new Promise((resolve, reject) => | ||||
|     { | ||||
|         request(url, (err, _, body) => | ||||
|         { | ||||
|             if (err) | ||||
|             { | ||||
|                 reject(err); | ||||
|                 return; | ||||
|             } | ||||
|     const res = await fetch(url); | ||||
|     const body = await res.text(); | ||||
| 
 | ||||
|     // Look for the definition of ytplayer.config and unserialize it
 | ||||
|             // and the player_response subobject
 | ||||
|             try | ||||
|     const configSearch = body.match(PLAYER_CONFIG_REGEX); | ||||
| 
 | ||||
|     if (configSearch === null) | ||||
|     { | ||||
|                 const playerConfig = JSON.parse(body.match(PLAYER_REGEX)[1]); | ||||
|                 playerConfig.args.player_response | ||||
|                     = JSON.parse(playerConfig.args.player_response); | ||||
|                 resolve(playerConfig); | ||||
|             } | ||||
|             catch (err) | ||||
|         if (retries > 0) | ||||
|         { | ||||
|                 reject(err); | ||||
|             console.info(`Error while fetching ${videoId}, retrying in ${cooldown} ms`); | ||||
|             await sleep(cooldown); | ||||
|             return getPlayerConfig(videoId, retries - 1, cooldown * 2); | ||||
|         } | ||||
|         }); | ||||
|     }); | ||||
|         else | ||||
|         { | ||||
|             throw new Error('Unable to find player configuration'); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     const config = JSON.parse(configSearch[1]); | ||||
|     config.args.player_response = JSON.parse(config.args.player_response); | ||||
|     return config; | ||||
| }; | ||||
| 
 | ||||
| /** | ||||
|  |  | |||
|  | @ -4,336 +4,10 @@ | |||
|   "lockfileVersion": 1, | ||||
|   "requires": true, | ||||
|   "dependencies": { | ||||
|     "ajv": { | ||||
|       "version": "6.12.6", | ||||
|       "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", | ||||
|       "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", | ||||
|       "requires": { | ||||
|         "fast-deep-equal": "^3.1.1", | ||||
|         "fast-json-stable-stringify": "^2.0.0", | ||||
|         "json-schema-traverse": "^0.4.1", | ||||
|         "uri-js": "^4.2.2" | ||||
|       } | ||||
|     }, | ||||
|     "asn1": { | ||||
|       "version": "0.2.4", | ||||
|       "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", | ||||
|       "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", | ||||
|       "requires": { | ||||
|         "safer-buffer": "~2.1.0" | ||||
|       } | ||||
|     }, | ||||
|     "assert-plus": { | ||||
|       "version": "1.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", | ||||
|       "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" | ||||
|     }, | ||||
|     "asynckit": { | ||||
|       "version": "0.4.0", | ||||
|       "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", | ||||
|       "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" | ||||
|     }, | ||||
|     "aws-sign2": { | ||||
|       "version": "0.7.0", | ||||
|       "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", | ||||
|       "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" | ||||
|     }, | ||||
|     "aws4": { | ||||
|       "version": "1.11.0", | ||||
|       "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", | ||||
|       "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" | ||||
|     }, | ||||
|     "bcrypt-pbkdf": { | ||||
|       "version": "1.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", | ||||
|       "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", | ||||
|       "requires": { | ||||
|         "tweetnacl": "^0.14.3" | ||||
|       } | ||||
|     }, | ||||
|     "caseless": { | ||||
|       "version": "0.12.0", | ||||
|       "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", | ||||
|       "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" | ||||
|     }, | ||||
|     "combined-stream": { | ||||
|       "version": "1.0.8", | ||||
|       "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", | ||||
|       "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", | ||||
|       "requires": { | ||||
|         "delayed-stream": "~1.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "core-util-is": { | ||||
|       "version": "1.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", | ||||
|       "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" | ||||
|     }, | ||||
|     "dashdash": { | ||||
|       "version": "1.14.1", | ||||
|       "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", | ||||
|       "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", | ||||
|       "requires": { | ||||
|         "assert-plus": "^1.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "delayed-stream": { | ||||
|       "version": "1.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", | ||||
|       "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" | ||||
|     }, | ||||
|     "ecc-jsbn": { | ||||
|       "version": "0.1.2", | ||||
|       "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", | ||||
|       "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", | ||||
|       "requires": { | ||||
|         "jsbn": "~0.1.0", | ||||
|         "safer-buffer": "^2.1.0" | ||||
|       } | ||||
|     }, | ||||
|     "extend": { | ||||
|       "version": "3.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", | ||||
|       "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" | ||||
|     }, | ||||
|     "extsprintf": { | ||||
|       "version": "1.3.0", | ||||
|       "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", | ||||
|       "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" | ||||
|     }, | ||||
|     "fast-deep-equal": { | ||||
|       "version": "3.1.3", | ||||
|       "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", | ||||
|       "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" | ||||
|     }, | ||||
|     "fast-json-stable-stringify": { | ||||
|       "version": "2.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", | ||||
|       "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" | ||||
|     }, | ||||
|     "forever-agent": { | ||||
|       "version": "0.6.1", | ||||
|       "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", | ||||
|       "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" | ||||
|     }, | ||||
|     "form-data": { | ||||
|       "version": "2.3.3", | ||||
|       "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", | ||||
|       "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", | ||||
|       "requires": { | ||||
|         "asynckit": "^0.4.0", | ||||
|         "combined-stream": "^1.0.6", | ||||
|         "mime-types": "^2.1.12" | ||||
|       } | ||||
|     }, | ||||
|     "getpass": { | ||||
|       "version": "0.1.7", | ||||
|       "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", | ||||
|       "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", | ||||
|       "requires": { | ||||
|         "assert-plus": "^1.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "har-schema": { | ||||
|       "version": "2.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", | ||||
|       "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" | ||||
|     }, | ||||
|     "har-validator": { | ||||
|       "version": "5.1.5", | ||||
|       "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", | ||||
|       "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", | ||||
|       "requires": { | ||||
|         "ajv": "^6.12.3", | ||||
|         "har-schema": "^2.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "http-signature": { | ||||
|       "version": "1.2.0", | ||||
|       "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", | ||||
|       "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", | ||||
|       "requires": { | ||||
|         "assert-plus": "^1.0.0", | ||||
|         "jsprim": "^1.2.2", | ||||
|         "sshpk": "^1.7.0" | ||||
|       } | ||||
|     }, | ||||
|     "is-typedarray": { | ||||
|       "version": "1.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", | ||||
|       "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" | ||||
|     }, | ||||
|     "isstream": { | ||||
|       "version": "0.1.2", | ||||
|       "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", | ||||
|       "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" | ||||
|     }, | ||||
|     "jsbn": { | ||||
|       "version": "0.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", | ||||
|       "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" | ||||
|     }, | ||||
|     "json-schema": { | ||||
|       "version": "0.2.3", | ||||
|       "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", | ||||
|       "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" | ||||
|     }, | ||||
|     "json-schema-traverse": { | ||||
|       "version": "0.4.1", | ||||
|       "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", | ||||
|       "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" | ||||
|     }, | ||||
|     "json-stringify-safe": { | ||||
|       "version": "5.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", | ||||
|       "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" | ||||
|     }, | ||||
|     "jsprim": { | ||||
|       "version": "1.4.1", | ||||
|       "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", | ||||
|       "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", | ||||
|       "requires": { | ||||
|         "assert-plus": "1.0.0", | ||||
|         "extsprintf": "1.3.0", | ||||
|         "json-schema": "0.2.3", | ||||
|         "verror": "1.10.0" | ||||
|       } | ||||
|     }, | ||||
|     "mime-db": { | ||||
|       "version": "1.44.0", | ||||
|       "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", | ||||
|       "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" | ||||
|     }, | ||||
|     "mime-types": { | ||||
|       "version": "2.1.27", | ||||
|       "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", | ||||
|       "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", | ||||
|       "requires": { | ||||
|         "mime-db": "1.44.0" | ||||
|       } | ||||
|     }, | ||||
|     "oauth-sign": { | ||||
|       "version": "0.9.0", | ||||
|       "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", | ||||
|       "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" | ||||
|     }, | ||||
|     "performance-now": { | ||||
|       "version": "2.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", | ||||
|       "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" | ||||
|     }, | ||||
|     "psl": { | ||||
|       "version": "1.8.0", | ||||
|       "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", | ||||
|       "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" | ||||
|     }, | ||||
|     "punycode": { | ||||
|       "version": "2.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", | ||||
|       "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" | ||||
|     }, | ||||
|     "qs": { | ||||
|       "version": "6.5.2", | ||||
|       "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", | ||||
|       "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" | ||||
|     }, | ||||
|     "request": { | ||||
|       "version": "2.88.2", | ||||
|       "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", | ||||
|       "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", | ||||
|       "requires": { | ||||
|         "aws-sign2": "~0.7.0", | ||||
|         "aws4": "^1.8.0", | ||||
|         "caseless": "~0.12.0", | ||||
|         "combined-stream": "~1.0.6", | ||||
|         "extend": "~3.0.2", | ||||
|         "forever-agent": "~0.6.1", | ||||
|         "form-data": "~2.3.2", | ||||
|         "har-validator": "~5.1.3", | ||||
|         "http-signature": "~1.2.0", | ||||
|         "is-typedarray": "~1.0.0", | ||||
|         "isstream": "~0.1.2", | ||||
|         "json-stringify-safe": "~5.0.1", | ||||
|         "mime-types": "~2.1.19", | ||||
|         "oauth-sign": "~0.9.0", | ||||
|         "performance-now": "^2.1.0", | ||||
|         "qs": "~6.5.2", | ||||
|         "safe-buffer": "^5.1.2", | ||||
|         "tough-cookie": "~2.5.0", | ||||
|         "tunnel-agent": "^0.6.0", | ||||
|         "uuid": "^3.3.2" | ||||
|       } | ||||
|     }, | ||||
|     "safe-buffer": { | ||||
|       "version": "5.2.1", | ||||
|       "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", | ||||
|       "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" | ||||
|     }, | ||||
|     "safer-buffer": { | ||||
|       "version": "2.1.2", | ||||
|       "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", | ||||
|       "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" | ||||
|     }, | ||||
|     "sshpk": { | ||||
|       "version": "1.16.1", | ||||
|       "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", | ||||
|       "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", | ||||
|       "requires": { | ||||
|         "asn1": "~0.2.3", | ||||
|         "assert-plus": "^1.0.0", | ||||
|         "bcrypt-pbkdf": "^1.0.0", | ||||
|         "dashdash": "^1.12.0", | ||||
|         "ecc-jsbn": "~0.1.1", | ||||
|         "getpass": "^0.1.1", | ||||
|         "jsbn": "~0.1.0", | ||||
|         "safer-buffer": "^2.0.2", | ||||
|         "tweetnacl": "~0.14.0" | ||||
|       } | ||||
|     }, | ||||
|     "tough-cookie": { | ||||
|       "version": "2.5.0", | ||||
|       "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", | ||||
|       "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", | ||||
|       "requires": { | ||||
|         "psl": "^1.1.28", | ||||
|         "punycode": "^2.1.1" | ||||
|       } | ||||
|     }, | ||||
|     "tunnel-agent": { | ||||
|       "version": "0.6.0", | ||||
|       "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", | ||||
|       "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", | ||||
|       "requires": { | ||||
|         "safe-buffer": "^5.0.1" | ||||
|       } | ||||
|     }, | ||||
|     "tweetnacl": { | ||||
|       "version": "0.14.5", | ||||
|       "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", | ||||
|       "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" | ||||
|     }, | ||||
|     "uri-js": { | ||||
|       "version": "4.4.0", | ||||
|       "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", | ||||
|       "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", | ||||
|       "requires": { | ||||
|         "punycode": "^2.1.0" | ||||
|       } | ||||
|     }, | ||||
|     "uuid": { | ||||
|       "version": "3.4.0", | ||||
|       "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", | ||||
|       "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" | ||||
|     }, | ||||
|     "verror": { | ||||
|       "version": "1.10.0", | ||||
|       "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", | ||||
|       "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", | ||||
|       "requires": { | ||||
|         "assert-plus": "^1.0.0", | ||||
|         "core-util-is": "1.0.2", | ||||
|         "extsprintf": "^1.2.0" | ||||
|       } | ||||
|     "node-fetch": { | ||||
|       "version": "2.6.1", | ||||
|       "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", | ||||
|       "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| { | ||||
|   "name": "epenser-maze", | ||||
|   "name": "youtube-maze", | ||||
|   "private": true, | ||||
|   "version": "0.2.0", | ||||
|   "version": "0.3.0", | ||||
|   "main": "src/index.js", | ||||
|   "license": "CC0", | ||||
|   "scripts": { | ||||
|  | @ -9,6 +9,6 @@ | |||
|     "defakator": "mkdir -p build && node explore/index.mjs XM1ssJ8yxdg build/defakator.dot && dot -Tsvg build/defakator.dot -o build/defakator.svg" | ||||
|   }, | ||||
|   "dependencies": { | ||||
|     "request": "^2.88.2" | ||||
|     "node-fetch": "^2.6.1" | ||||
|   } | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue