10 Commits

Author SHA1 Message Date
Godzil
978a3282a4 1.3.0 2018-07-30 22:47:33 +01:00
Manoël Trapier
9f0195bebc Update README.md 2018-07-30 22:47:33 +01:00
Manoël Trapier
ea20108222 Update README.md 2018-07-30 22:47:33 +01:00
Godzil
4ee814864c Add support for changing the batchfile on the command line 2018-07-30 22:47:33 +01:00
Godzil
4cbfd691c3 add missing package 2018-07-30 22:47:32 +01:00
Godzil
7c04fb7282 Make tslint happy! 2018-07-30 22:47:29 +01:00
Godzil
849c7612aa A bit of code reformating and add an option to regenerate the .crpersistant file in case it become corrupted and Crunchy try to redownload everything. 2018-07-30 22:46:29 +01:00
Roei Elisha
6ad4cbed0a make login work 2018-07-30 22:45:28 +01:00
Godzil
9e2f5401d0 Update tslint.json 2018-07-30 22:44:18 +01:00
Roei Elisha
b064b97f2d fix linter problems 2018-05-22 23:55:10 +03:00
15 changed files with 526 additions and 459 deletions

View File

@@ -21,30 +21,39 @@ It is recommended to enable authentication (`-p` and `-u`) so your account permi
## Prerequisites ## Prerequisites
* NodeJS >= 5.x (http://nodejs.org/) * NodeJS >= 8.1 (http://nodejs.org/)
* NPM >= 2.5.x (https://www.npmjs.org/) * NPM >= 5.8 (https://www.npmjs.org/)
## Installation ## Installation
Use the applicable instructions to install. Is your operating system not listed? Please ask or contribute! Use the applicable instructions to install. Is your operating system not listed? Please ask or contribute!
### Debian (Mint, Ubuntu, etc) ### Linux (Debian, Mint, Ubuntu, etc)
1. Run in *Terminal*: `sudo apt-get install nodejs npm mkvtoolnix rtmpdump ffmpeg` 1. Run in *Terminal*: `sudo apt-get install nodejs npm mkvtoolnix rtmpdump ffmpeg`
2. Run in *Terminal*: `sudo ln -s /usr/bin/nodejs /usr/bin/node` 2. Run in *Terminal*: `sudo ln -s /usr/bin/nodejs /usr/bin/node`
3. Run in *Terminal*: `sudo npm install -g crunchy` 3. Run in *Terminal*: `sudo npm install -g crunchy`
#### Updating:
1. Run in *Terminal*: `sudo npm update -g crunchy`
### Mac OS X ### Mac OS X
1. Install *Homebrew* following the instructions at http://brew.sh/ 1. Install *Homebrew* following the instructions at http://brew.sh/
2. Run in *Terminal*: `brew install node mkvtoolnix rtmpdump ffmpeg` 2. Run in *Terminal*: `brew install node mkvtoolnix rtmpdump ffmpeg`
3. Run in *Terminal*: `npm install -g crunchy` 3. Run in *Terminal*: `npm install -g crunchy`
#### Updating:
1. Run in *Terminal*: `sudo npm update -g crunchy`
### Windows ### Windows
1. Install *NodeJS* following the instructions at http://nodejs.org/ 1. Install *NodeJS* following the instructions at http://nodejs.org/
3. Run in *Command Prompt*: `npm install -g crunchy` 3. Run in *Command Prompt*: `npm install -g crunchy`
#### Updating:
1. Run in *Command Prompt*: `npm update -g crunchy`
## Instructions ## Instructions
Use the applicable instructions for the interface of your choice (currently limited to command-line). Use the applicable instructions for the interface of your choice (currently limited to command-line).

552
package-lock.json generated
View File

@@ -1,37 +1,52 @@
{ {
"name": "crunchy", "name": "crunchy",
"version": "1.2.2", "version": "1.3.0",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {
"@types/bluebird": {
"version": "3.5.20",
"resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.20.tgz",
"integrity": "sha1-9jYxcq3W9Oq7jK2lPKmvJ4Ho1qE=",
"dev": true
},
"@types/caseless": { "@types/caseless": {
"version": "0.12.1", "version": "0.12.1",
"resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.1.tgz", "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.1.tgz",
"integrity": "sha512-FhlMa34NHp9K5MY1Uz8yb+ZvuX0pnvn3jScRSNAb75KHGB8d3rEU6hqMs3Z2vjuytcMfRg6c5CHMc3wtYyD2/A==", "integrity": "sha1-l5TGnIOF0BkqzEcaVA0fjg0WIYo=",
"dev": true "dev": true
}, },
"@types/cheerio": { "@types/cheerio": {
"version": "0.22.7", "version": "0.22.7",
"resolved": "https://registry.npmjs.org/@types/cheerio/-/cheerio-0.22.7.tgz", "resolved": "https://registry.npmjs.org/@types/cheerio/-/cheerio-0.22.7.tgz",
"integrity": "sha512-+T9qBbqe/jXtTjzVddArZExahoPPmt8eq3O1ZuCKZXjBVxf/ciUYNXrIDZJEVgYvpELnv6VlPRCfLzufRxpAag==", "integrity": "sha1-SpLq/t+yufRDfTpEEABtgRFMZs4=",
"dev": true "dev": true
}, },
"@types/form-data": { "@types/form-data": {
"version": "2.2.1", "version": "2.2.1",
"resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-2.2.1.tgz", "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-2.2.1.tgz",
"integrity": "sha512-JAMFhOaHIciYVh8fb5/83nmuO/AHwmto+Hq7a9y8FzLDcC1KCU344XDOMEmahnrTFlHjgh4L0WJFczNIX2GxnQ==", "integrity": "sha1-7is7jqoRwJOCiZU2BrdFtzjFSx4=",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/node": "8.5.2" "@types/node": "*"
}
},
"@types/fs-extra": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.2.tgz",
"integrity": "sha512-Q3FWsbdmkQd1ib11A4XNWQvRD//5KpPoGawA8aB2DR7pWKoW9XQv3+dGxD/Z1eVFze23Okdo27ZQytVFlweKvQ==",
"dev": true,
"requires": {
"@types/node": "*"
} }
}, },
"@types/mkdirp": { "@types/mkdirp": {
"version": "0.5.2", "version": "0.5.2",
"resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.5.2.tgz", "resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.5.2.tgz",
"integrity": "sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==", "integrity": "sha1-UDqs/lzCcD1UhDJrGyfvpnoznB8=",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/node": "8.5.2" "@types/node": "*"
} }
}, },
"@types/node": { "@types/node": {
@@ -43,13 +58,23 @@
"@types/request": { "@types/request": {
"version": "2.47.0", "version": "2.47.0",
"resolved": "https://registry.npmjs.org/@types/request/-/request-2.47.0.tgz", "resolved": "https://registry.npmjs.org/@types/request/-/request-2.47.0.tgz",
"integrity": "sha512-/KXM5oev+nNCLIgBjkwbk8VqxmzI56woD4VUxn95O+YeQ8hJzcSmIZ1IN3WexiqBb6srzDo2bdMbsXxgXNkz5Q==", "integrity": "sha1-dqZmzuTLhdz/6mzUZFInkm2eEU4=",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/caseless": "0.12.1", "@types/caseless": "*",
"@types/form-data": "2.2.1", "@types/form-data": "*",
"@types/node": "8.5.2", "@types/node": "*",
"@types/tough-cookie": "2.3.2" "@types/tough-cookie": "*"
}
},
"@types/request-promise": {
"version": "4.1.41",
"resolved": "https://registry.npmjs.org/@types/request-promise/-/request-promise-4.1.41.tgz",
"integrity": "sha1-HiVNUTYtfty3FLYM3jA7y+CrHuA=",
"dev": true,
"requires": {
"@types/bluebird": "*",
"@types/request": "*"
} }
}, },
"@types/tough-cookie": { "@types/tough-cookie": {
@@ -61,10 +86,10 @@
"@types/xml2js": { "@types/xml2js": {
"version": "0.4.2", "version": "0.4.2",
"resolved": "https://registry.npmjs.org/@types/xml2js/-/xml2js-0.4.2.tgz", "resolved": "https://registry.npmjs.org/@types/xml2js/-/xml2js-0.4.2.tgz",
"integrity": "sha512-8aKUBSj3oGcnuiBmDLm3BIk09RYg01mz9HlQ2u4aS17oJ25DxjQrEUVGFSBVNOfM45pQW4OjcBPplq6r/exJdA==", "integrity": "sha1-pLhLOHn/1HEJU/2Syr/emopOhFY=",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/node": "8.5.2" "@types/node": "*"
} }
}, },
"ajv": { "ajv": {
@@ -72,10 +97,10 @@
"resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
"integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
"requires": { "requires": {
"co": "4.6.0", "co": "^4.6.0",
"fast-deep-equal": "1.1.0", "fast-deep-equal": "^1.0.0",
"fast-json-stable-stringify": "2.0.0", "fast-json-stable-stringify": "^2.0.0",
"json-schema-traverse": "0.3.1" "json-schema-traverse": "^0.3.0"
} }
}, },
"ansi-regex": { "ansi-regex": {
@@ -93,10 +118,10 @@
"argparse": { "argparse": {
"version": "1.0.10", "version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=",
"dev": true, "dev": true,
"requires": { "requires": {
"sprintf-js": "1.0.3" "sprintf-js": "~1.0.2"
}, },
"dependencies": { "dependencies": {
"sprintf-js": { "sprintf-js": {
@@ -128,9 +153,9 @@
"integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
}, },
"aws4": { "aws4": {
"version": "1.6.0", "version": "1.7.0",
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz",
"integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w=="
}, },
"babel-code-frame": { "babel-code-frame": {
"version": "6.26.0", "version": "6.26.0",
@@ -138,9 +163,9 @@
"integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
"dev": true, "dev": true,
"requires": { "requires": {
"chalk": "1.1.3", "chalk": "^1.1.3",
"esutils": "2.0.2", "esutils": "^2.0.2",
"js-tokens": "3.0.2" "js-tokens": "^3.0.2"
}, },
"dependencies": { "dependencies": {
"chalk": { "chalk": {
@@ -149,11 +174,11 @@
"integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
"dev": true, "dev": true,
"requires": { "requires": {
"ansi-styles": "2.2.1", "ansi-styles": "^2.2.1",
"escape-string-regexp": "1.0.5", "escape-string-regexp": "^1.0.2",
"has-ansi": "2.0.0", "has-ansi": "^2.0.0",
"strip-ansi": "3.0.1", "strip-ansi": "^3.0.0",
"supports-color": "2.0.0" "supports-color": "^2.0.0"
} }
} }
} }
@@ -170,34 +195,31 @@
"integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
"optional": true, "optional": true,
"requires": { "requires": {
"tweetnacl": "0.14.5" "tweetnacl": "^0.14.3"
} }
}, },
"big-integer": { "big-integer": {
"version": "1.6.27", "version": "1.6.30",
"resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.27.tgz", "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.30.tgz",
"integrity": "sha512-NzUKMYW4SWme+H5K+mfEmBxEF/V04PhlzoxxXwSnDig78y2t7HLBVotfDBMUhRPRA3WWID3GmJB/OJSWPhVXtg==" "integrity": "sha512-LGDF7k/8yjS+GTbfFRGiSdcPnIwcjM6kQ0lmbja3tKJzVMmqHmUFnTuUOm/Lt2KVQ3mAZVupf9KNcsew0QV8Kw=="
},
"bluebird": {
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
"integrity": "sha1-2VUfnemPH82h5oPRfukaBgLuLrk="
}, },
"boolbase": { "boolbase": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
"integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24="
}, },
"boom": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz",
"integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=",
"requires": {
"hoek": "4.2.1"
}
},
"brace-expansion": { "brace-expansion": {
"version": "1.1.8", "version": "1.1.8",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
"integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
"dev": true, "dev": true,
"requires": { "requires": {
"balanced-match": "1.0.0", "balanced-match": "^1.0.0",
"concat-map": "0.0.1" "concat-map": "0.0.1"
} }
}, },
@@ -213,14 +235,14 @@
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
}, },
"chalk": { "chalk": {
"version": "2.3.2", "version": "2.4.1",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
"integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"ansi-styles": "3.2.1", "ansi-styles": "^3.2.1",
"escape-string-regexp": "1.0.5", "escape-string-regexp": "^1.0.5",
"supports-color": "5.3.0" "supports-color": "^5.3.0"
}, },
"dependencies": { "dependencies": {
"ansi-styles": { "ansi-styles": {
@@ -229,16 +251,16 @@
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true, "dev": true,
"requires": { "requires": {
"color-convert": "1.9.1" "color-convert": "^1.9.0"
} }
}, },
"supports-color": { "supports-color": {
"version": "5.3.0", "version": "5.4.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
"integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
"dev": true, "dev": true,
"requires": { "requires": {
"has-flag": "3.0.0" "has-flag": "^3.0.0"
} }
} }
} }
@@ -248,30 +270,30 @@
"resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz",
"integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=",
"requires": { "requires": {
"css-select": "1.2.0", "css-select": "~1.2.0",
"dom-serializer": "0.1.0", "dom-serializer": "~0.1.0",
"entities": "1.1.1", "entities": "~1.1.1",
"htmlparser2": "3.9.2", "htmlparser2": "^3.9.1",
"lodash.assignin": "4.2.0", "lodash.assignin": "^4.0.9",
"lodash.bind": "4.2.1", "lodash.bind": "^4.1.4",
"lodash.defaults": "4.2.0", "lodash.defaults": "^4.0.1",
"lodash.filter": "4.6.0", "lodash.filter": "^4.4.0",
"lodash.flatten": "4.4.0", "lodash.flatten": "^4.2.0",
"lodash.foreach": "4.5.0", "lodash.foreach": "^4.3.0",
"lodash.map": "4.6.0", "lodash.map": "^4.4.0",
"lodash.merge": "4.6.0", "lodash.merge": "^4.4.0",
"lodash.pick": "4.4.0", "lodash.pick": "^4.2.1",
"lodash.reduce": "4.6.0", "lodash.reduce": "^4.4.0",
"lodash.reject": "4.6.0", "lodash.reject": "^4.4.0",
"lodash.some": "4.6.0" "lodash.some": "^4.4.0"
} }
}, },
"cloudscraper": { "cloudscraper": {
"version": "1.5.0", "version": "1.5.0",
"resolved": "https://registry.npmjs.org/cloudscraper/-/cloudscraper-1.5.0.tgz", "resolved": "https://registry.npmjs.org/cloudscraper/-/cloudscraper-1.5.0.tgz",
"integrity": "sha512-bZagLhj59+N6Z6lD9zRksYu87GthLwXdKARULi4RZ6UVpotH39ruSFN3UQmw3uuqoj00iDxkGrapAvxeurmlQA==", "integrity": "sha1-NfcLS+q+aE/ECjczrYmgP7CFb0s=",
"requires": { "requires": {
"request": "2.85.0" "request": "^2.49.0"
} }
}, },
"co": { "co": {
@@ -282,10 +304,10 @@
"color-convert": { "color-convert": {
"version": "1.9.1", "version": "1.9.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
"integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", "integrity": "sha1-wSYRB66y8pTr/+ye2eytUppgl+0=",
"dev": true, "dev": true,
"requires": { "requires": {
"color-name": "1.1.3" "color-name": "^1.1.1"
} }
}, },
"color-name": { "color-name": {
@@ -305,13 +327,13 @@
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
"integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
"requires": { "requires": {
"delayed-stream": "1.0.0" "delayed-stream": "~1.0.0"
} }
}, },
"commander": { "commander": {
"version": "2.15.1", "version": "2.15.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
"integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==" "integrity": "sha1-30boZ9D8Kuxmo0ZitAapzK//Ww8="
}, },
"concat-map": { "concat-map": {
"version": "0.0.1", "version": "0.0.1",
@@ -324,33 +346,15 @@
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
}, },
"cryptiles": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz",
"integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=",
"requires": {
"boom": "5.2.0"
},
"dependencies": {
"boom": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
"integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
"requires": {
"hoek": "4.2.1"
}
}
}
},
"css-select": { "css-select": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
"integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
"requires": { "requires": {
"boolbase": "1.0.0", "boolbase": "~1.0.0",
"css-what": "2.1.0", "css-what": "2.1",
"domutils": "1.5.1", "domutils": "1.5.1",
"nth-check": "1.0.1" "nth-check": "~1.0.1"
} }
}, },
"css-what": { "css-what": {
@@ -363,7 +367,7 @@
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
"integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
"requires": { "requires": {
"assert-plus": "1.0.0" "assert-plus": "^1.0.0"
} }
}, },
"delayed-stream": { "delayed-stream": {
@@ -382,8 +386,8 @@
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
"integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
"requires": { "requires": {
"domelementtype": "1.1.3", "domelementtype": "~1.1.1",
"entities": "1.1.1" "entities": "~1.1.1"
}, },
"dependencies": { "dependencies": {
"domelementtype": { "domelementtype": {
@@ -403,7 +407,7 @@
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.1.tgz", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.1.tgz",
"integrity": "sha1-iS5HAAqZvlW783dP/qBWHYh5wlk=", "integrity": "sha1-iS5HAAqZvlW783dP/qBWHYh5wlk=",
"requires": { "requires": {
"domelementtype": "1.3.0" "domelementtype": "1"
} }
}, },
"domutils": { "domutils": {
@@ -411,8 +415,8 @@
"resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
"integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
"requires": { "requires": {
"dom-serializer": "0.1.0", "dom-serializer": "0",
"domelementtype": "1.3.0" "domelementtype": "1"
} }
}, },
"ecc-jsbn": { "ecc-jsbn": {
@@ -421,7 +425,7 @@
"integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
"optional": true, "optional": true,
"requires": { "requires": {
"jsbn": "0.1.1" "jsbn": "~0.1.0"
} }
}, },
"entities": { "entities": {
@@ -438,7 +442,7 @@
"esprima": { "esprima": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
"integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", "integrity": "sha1-RJnt3NERDgshi6zy+n9/WfVcqAQ=",
"dev": true "dev": true
}, },
"esutils": { "esutils": {
@@ -479,7 +483,7 @@
"integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=",
"dev": true, "dev": true,
"requires": { "requires": {
"glob": "5.0.15" "glob": "~5.0.0"
}, },
"dependencies": { "dependencies": {
"glob": { "glob": {
@@ -488,11 +492,11 @@
"integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
"dev": true, "dev": true,
"requires": { "requires": {
"inflight": "1.0.6", "inflight": "^1.0.4",
"inherits": "2.0.3", "inherits": "2",
"minimatch": "3.0.4", "minimatch": "2 || 3",
"once": "1.4.0", "once": "^1.3.0",
"path-is-absolute": "1.0.1" "path-is-absolute": "^1.0.0"
} }
} }
} }
@@ -507,19 +511,19 @@
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
"integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
"requires": { "requires": {
"asynckit": "0.4.0", "asynckit": "^0.4.0",
"combined-stream": "1.0.6", "combined-stream": "1.0.6",
"mime-types": "2.1.18" "mime-types": "^2.1.12"
} }
}, },
"fs-extra": { "fs-extra": {
"version": "5.0.0", "version": "6.0.1",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz",
"integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==",
"requires": { "requires": {
"graceful-fs": "4.1.11", "graceful-fs": "^4.1.2",
"jsonfile": "4.0.0", "jsonfile": "^4.0.0",
"universalify": "0.1.1" "universalify": "^0.1.0"
} }
}, },
"fs.realpath": { "fs.realpath": {
@@ -533,7 +537,7 @@
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
"integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
"requires": { "requires": {
"assert-plus": "1.0.0" "assert-plus": "^1.0.0"
} }
}, },
"glob": { "glob": {
@@ -542,12 +546,12 @@
"integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"fs.realpath": "1.0.0", "fs.realpath": "^1.0.0",
"inflight": "1.0.6", "inflight": "^1.0.4",
"inherits": "2.0.3", "inherits": "2",
"minimatch": "3.0.4", "minimatch": "^3.0.4",
"once": "1.4.0", "once": "^1.3.0",
"path-is-absolute": "1.0.1" "path-is-absolute": "^1.0.0"
} }
}, },
"graceful-fs": { "graceful-fs": {
@@ -565,8 +569,8 @@
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
"integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
"requires": { "requires": {
"ajv": "5.5.2", "ajv": "^5.1.0",
"har-schema": "2.0.0" "har-schema": "^2.0.0"
} }
}, },
"has-ansi": { "has-ansi": {
@@ -575,7 +579,7 @@
"integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
"dev": true, "dev": true,
"requires": { "requires": {
"ansi-regex": "2.1.1" "ansi-regex": "^2.0.0"
} }
}, },
"has-flag": { "has-flag": {
@@ -584,33 +588,17 @@
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true "dev": true
}, },
"hawk": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz",
"integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==",
"requires": {
"boom": "4.3.1",
"cryptiles": "3.1.2",
"hoek": "4.2.1",
"sntp": "2.1.0"
}
},
"hoek": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
"integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA=="
},
"htmlparser2": { "htmlparser2": {
"version": "3.9.2", "version": "3.9.2",
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz",
"integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=",
"requires": { "requires": {
"domelementtype": "1.3.0", "domelementtype": "^1.3.0",
"domhandler": "2.4.1", "domhandler": "^2.3.0",
"domutils": "1.5.1", "domutils": "^1.5.1",
"entities": "1.1.1", "entities": "^1.1.1",
"inherits": "2.0.3", "inherits": "^2.0.1",
"readable-stream": "2.3.3" "readable-stream": "^2.0.2"
} }
}, },
"http-signature": { "http-signature": {
@@ -618,9 +606,9 @@
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
"integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
"requires": { "requires": {
"assert-plus": "1.0.0", "assert-plus": "^1.0.0",
"jsprim": "1.4.1", "jsprim": "^1.2.2",
"sshpk": "1.14.1" "sshpk": "^1.7.0"
} }
}, },
"inflight": { "inflight": {
@@ -629,8 +617,8 @@
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"dev": true, "dev": true,
"requires": { "requires": {
"once": "1.4.0", "once": "^1.3.0",
"wrappy": "1.0.2" "wrappy": "1"
} }
}, },
"inherits": { "inherits": {
@@ -660,13 +648,13 @@
"dev": true "dev": true
}, },
"js-yaml": { "js-yaml": {
"version": "3.11.0", "version": "3.12.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
"integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
"dev": true, "dev": true,
"requires": { "requires": {
"argparse": "1.0.10", "argparse": "^1.0.7",
"esprima": "4.0.0" "esprima": "^4.0.0"
} }
}, },
"jsbn": { "jsbn": {
@@ -695,7 +683,7 @@
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
"integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
"requires": { "requires": {
"graceful-fs": "4.1.11" "graceful-fs": "^4.1.6"
} }
}, },
"jsprim": { "jsprim": {
@@ -709,6 +697,11 @@
"verror": "1.10.0" "verror": "1.10.0"
} }
}, },
"lodash": {
"version": "4.17.10",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
"integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg=="
},
"lodash.assignin": { "lodash.assignin": {
"version": "4.2.0", "version": "4.2.0",
"resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz",
@@ -779,7 +772,7 @@
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
"integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
"requires": { "requires": {
"mime-db": "1.33.0" "mime-db": "~1.33.0"
} }
}, },
"minimatch": { "minimatch": {
@@ -788,7 +781,7 @@
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true, "dev": true,
"requires": { "requires": {
"brace-expansion": "1.1.8" "brace-expansion": "^1.1.7"
} }
}, },
"minimist": { "minimist": {
@@ -817,7 +810,7 @@
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz",
"integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=",
"requires": { "requires": {
"boolbase": "1.0.0" "boolbase": "~1.0.0"
} }
}, },
"oauth-sign": { "oauth-sign": {
@@ -831,7 +824,7 @@
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dev": true, "dev": true,
"requires": { "requires": {
"wrappy": "1.0.2" "wrappy": "1"
} }
}, },
"optimist": { "optimist": {
@@ -840,8 +833,8 @@
"integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
"dev": true, "dev": true,
"requires": { "requires": {
"minimist": "0.0.10", "minimist": "~0.0.1",
"wordwrap": "0.0.3" "wordwrap": "~0.0.2"
} }
}, },
"path-is-absolute": { "path-is-absolute": {
@@ -872,51 +865,68 @@
"integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
}, },
"qs": { "qs": {
"version": "6.5.1", "version": "6.5.2",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
"integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
}, },
"readable-stream": { "readable-stream": {
"version": "2.3.3", "version": "2.3.3",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
"integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
"requires": { "requires": {
"core-util-is": "1.0.2", "core-util-is": "~1.0.0",
"inherits": "2.0.3", "inherits": "~2.0.3",
"isarray": "1.0.0", "isarray": "~1.0.0",
"process-nextick-args": "1.0.7", "process-nextick-args": "~1.0.6",
"safe-buffer": "5.1.1", "safe-buffer": "~5.1.1",
"string_decoder": "1.0.3", "string_decoder": "~1.0.3",
"util-deprecate": "1.0.2" "util-deprecate": "~1.0.1"
} }
}, },
"request": { "request": {
"version": "2.85.0", "version": "2.87.0",
"resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz", "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz",
"integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==",
"requires": { "requires": {
"aws-sign2": "0.7.0", "aws-sign2": "~0.7.0",
"aws4": "1.6.0", "aws4": "^1.6.0",
"caseless": "0.12.0", "caseless": "~0.12.0",
"combined-stream": "1.0.6", "combined-stream": "~1.0.5",
"extend": "3.0.1", "extend": "~3.0.1",
"forever-agent": "0.6.1", "forever-agent": "~0.6.1",
"form-data": "2.3.2", "form-data": "~2.3.1",
"har-validator": "5.0.3", "har-validator": "~5.0.3",
"hawk": "6.0.2", "http-signature": "~1.2.0",
"http-signature": "1.2.0", "is-typedarray": "~1.0.0",
"is-typedarray": "1.0.0", "isstream": "~0.1.2",
"isstream": "0.1.2", "json-stringify-safe": "~5.0.1",
"json-stringify-safe": "5.0.1", "mime-types": "~2.1.17",
"mime-types": "2.1.18", "oauth-sign": "~0.8.2",
"oauth-sign": "0.8.2", "performance-now": "^2.1.0",
"performance-now": "2.1.0", "qs": "~6.5.1",
"qs": "6.5.1", "safe-buffer": "^5.1.1",
"safe-buffer": "5.1.1", "tough-cookie": "~2.3.3",
"stringstream": "0.0.5", "tunnel-agent": "^0.6.0",
"tough-cookie": "2.3.4", "uuid": "^3.1.0"
"tunnel-agent": "0.6.0", }
"uuid": "3.2.1" },
"request-promise": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.2.tgz",
"integrity": "sha1-0epG1lSm7k+O5qT+oQGMIpEZBLQ=",
"requires": {
"bluebird": "^3.5.0",
"request-promise-core": "1.1.1",
"stealthy-require": "^1.1.0",
"tough-cookie": ">=2.3.3"
}
},
"request-promise-core": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz",
"integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=",
"requires": {
"lodash": "^4.13.1"
} }
}, },
"resolve": { "resolve": {
@@ -925,7 +935,7 @@
"integrity": "sha512-aW7sVKPufyHqOmyyLzg/J+8606v5nevBgaliIlV7nUpVMsDnoBGV/cbSLNjZAg9q0Cfd/+easKVKQ8vOu8fn1Q==", "integrity": "sha512-aW7sVKPufyHqOmyyLzg/J+8606v5nevBgaliIlV7nUpVMsDnoBGV/cbSLNjZAg9q0Cfd/+easKVKQ8vOu8fn1Q==",
"dev": true, "dev": true,
"requires": { "requires": {
"path-parse": "1.0.5" "path-parse": "^1.0.5"
} }
}, },
"safe-buffer": { "safe-buffer": {
@@ -936,7 +946,7 @@
"sax": { "sax": {
"version": "1.2.4", "version": "1.2.4",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk="
}, },
"semver": { "semver": {
"version": "5.5.0", "version": "5.5.0",
@@ -944,14 +954,6 @@
"integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
"dev": true "dev": true
}, },
"sntp": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz",
"integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==",
"requires": {
"hoek": "4.2.1"
}
},
"sprintf-js": { "sprintf-js": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.1.tgz", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.1.tgz",
@@ -963,14 +965,14 @@
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz",
"integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=",
"requires": { "requires": {
"asn1": "0.2.3", "asn1": "~0.2.3",
"assert-plus": "1.0.0", "assert-plus": "^1.0.0",
"bcrypt-pbkdf": "1.0.1", "bcrypt-pbkdf": "^1.0.0",
"dashdash": "1.14.1", "dashdash": "^1.12.0",
"ecc-jsbn": "0.1.1", "ecc-jsbn": "~0.1.1",
"getpass": "0.1.7", "getpass": "^0.1.1",
"jsbn": "0.1.1", "jsbn": "~0.1.0",
"tweetnacl": "0.14.5" "tweetnacl": "~0.14.0"
} }
}, },
"stable": { "stable": {
@@ -979,26 +981,26 @@
"integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=", "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
"dev": true "dev": true
}, },
"stealthy-require": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
"integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks="
},
"string_decoder": { "string_decoder": {
"version": "1.0.3", "version": "1.0.3",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
"integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
"requires": { "requires": {
"safe-buffer": "5.1.1" "safe-buffer": "~5.1.0"
} }
}, },
"stringstream": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
"integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg="
},
"strip-ansi": { "strip-ansi": {
"version": "3.0.1", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
"dev": true, "dev": true,
"requires": { "requires": {
"ansi-regex": "2.1.1" "ansi-regex": "^2.0.0"
} }
}, },
"supports-color": { "supports-color": {
@@ -1012,7 +1014,7 @@
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
"integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
"requires": { "requires": {
"punycode": "1.4.1" "punycode": "^1.4.1"
} }
}, },
"tsconfig-lint": { "tsconfig-lint": {
@@ -1021,11 +1023,11 @@
"integrity": "sha1-rVKxNGEjnRaYA56TrR3TS93WzUs=", "integrity": "sha1-rVKxNGEjnRaYA56TrR3TS93WzUs=",
"dev": true, "dev": true,
"requires": { "requires": {
"exit": "0.1.2", "exit": "^0.1.2",
"glob": "7.1.2", "glob": "^7.0.3",
"resolve": "1.4.0", "resolve": "^1.1.7",
"stable": "0.1.6", "stable": "^0.1.5",
"tslint": "3.15.1" "tslint": "^3.6.0"
}, },
"dependencies": { "dependencies": {
"tslint": { "tslint": {
@@ -1034,41 +1036,41 @@
"integrity": "sha1-2hZcqT2P3CwIa1EWXuG6y0jJjqU=", "integrity": "sha1-2hZcqT2P3CwIa1EWXuG6y0jJjqU=",
"dev": true, "dev": true,
"requires": { "requires": {
"colors": "1.1.2", "colors": "^1.1.2",
"diff": "2.2.3", "diff": "^2.2.1",
"findup-sync": "0.3.0", "findup-sync": "~0.3.0",
"glob": "7.1.2", "glob": "^7.0.3",
"optimist": "0.6.1", "optimist": "~0.6.0",
"resolve": "1.4.0", "resolve": "^1.1.7",
"underscore.string": "3.3.4" "underscore.string": "^3.3.4"
} }
} }
} }
}, },
"tslib": { "tslib": {
"version": "1.9.0", "version": "1.9.2",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.2.tgz",
"integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ==", "integrity": "sha512-AVP5Xol3WivEr7hnssHDsaM+lVrVXWUvd1cfXTRkTj80b//6g2wIFEH6hZG0muGZRnHGrfttpdzRk3YlBkWjKw==",
"dev": true "dev": true
}, },
"tslint": { "tslint": {
"version": "5.9.1", "version": "5.10.0",
"resolved": "https://registry.npmjs.org/tslint/-/tslint-5.9.1.tgz", "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.10.0.tgz",
"integrity": "sha1-ElX4ej/1frCw4fDmEKi0dIBGya4=", "integrity": "sha1-EeJrzLiK+gLdDZlWyuPUVAtfVMM=",
"dev": true, "dev": true,
"requires": { "requires": {
"babel-code-frame": "6.26.0", "babel-code-frame": "^6.22.0",
"builtin-modules": "1.1.1", "builtin-modules": "^1.1.1",
"chalk": "2.3.2", "chalk": "^2.3.0",
"commander": "2.15.1", "commander": "^2.12.1",
"diff": "3.5.0", "diff": "^3.2.0",
"glob": "7.1.2", "glob": "^7.1.1",
"js-yaml": "3.11.0", "js-yaml": "^3.7.0",
"minimatch": "3.0.4", "minimatch": "^3.0.4",
"resolve": "1.4.0", "resolve": "^1.3.2",
"semver": "5.5.0", "semver": "^5.3.0",
"tslib": "1.9.0", "tslib": "^1.8.0",
"tsutils": "2.25.0" "tsutils": "^2.12.1"
}, },
"dependencies": { "dependencies": {
"diff": { "diff": {
@@ -1080,12 +1082,12 @@
} }
}, },
"tsutils": { "tsutils": {
"version": "2.25.0", "version": "2.27.1",
"resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.25.0.tgz", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.27.1.tgz",
"integrity": "sha512-SPgUlOAUAe6fCyPi0QR4U0jRuDsHHKvzIR6/hHd0YR0bb8MzeLJgCagkPSmZeJjWImnpJ0xq6XHa9goTvMBBCQ==", "integrity": "sha512-AE/7uzp32MmaHvNNFES85hhUDHFdFZp6OAiZcd6y4ZKKIg6orJTm8keYWBhIhrJQH3a4LzNKat7ZPXZt5aTf6w==",
"dev": true, "dev": true,
"requires": { "requires": {
"tslib": "1.9.0" "tslib": "^1.8.1"
} }
}, },
"tunnel-agent": { "tunnel-agent": {
@@ -1093,7 +1095,7 @@
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
"integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
"requires": { "requires": {
"safe-buffer": "5.1.1" "safe-buffer": "^5.0.1"
} }
}, },
"tweetnacl": { "tweetnacl": {
@@ -1103,9 +1105,9 @@
"optional": true "optional": true
}, },
"typescript": { "typescript": {
"version": "2.8.1", "version": "2.9.1",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-2.8.1.tgz", "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.1.tgz",
"integrity": "sha512-Ao/f6d/4EPLq0YwzsQz8iXflezpTkQzqAyenTiw4kCUGr1uPiFLC3+fZ+gMZz6eeI/qdRUqvC+HxIJzUAzEFdg==", "integrity": "sha512-h6pM2f/GDchCFlldnriOhs1QHuwbnmj6/v7499eMHqPeW4V2G0elua2eIc2nu8v2NdHV0Gm+tzX83Hr6nUFjQA==",
"dev": true "dev": true
}, },
"underscore.string": { "underscore.string": {
@@ -1114,8 +1116,8 @@
"integrity": "sha1-LCo/n4PmR2L9xF5s6sZRQoZCE9s=", "integrity": "sha1-LCo/n4PmR2L9xF5s6sZRQoZCE9s=",
"dev": true, "dev": true,
"requires": { "requires": {
"sprintf-js": "1.1.1", "sprintf-js": "^1.0.3",
"util-deprecate": "1.0.2" "util-deprecate": "^1.0.2"
} }
}, },
"universalify": { "universalify": {
@@ -1138,9 +1140,9 @@
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
"integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
"requires": { "requires": {
"assert-plus": "1.0.0", "assert-plus": "^1.0.0",
"core-util-is": "1.0.2", "core-util-is": "1.0.2",
"extsprintf": "1.3.0" "extsprintf": "^1.2.0"
} }
}, },
"wordwrap": { "wordwrap": {
@@ -1158,10 +1160,10 @@
"xml2js": { "xml2js": {
"version": "0.4.19", "version": "0.4.19",
"resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz",
"integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", "integrity": "sha1-aGwg8hMgnpSr8NG88e+qKRx4J6c=",
"requires": { "requires": {
"sax": "1.2.4", "sax": ">=0.6.0",
"xmlbuilder": "9.0.4" "xmlbuilder": "~9.0.1"
} }
}, },
"xmlbuilder": { "xmlbuilder": {

View File

@@ -15,34 +15,40 @@
"engines": { "engines": {
"node": ">=5.0" "node": ">=5.0"
}, },
"version": "1.2.2", "version": "1.3.0",
"bin": { "bin": {
"crunchy": "./bin/crunchy", "crunchy": "./bin/crunchy",
"crunchy.sh": "./bin/crunchy.sh" "crunchy.sh": "./bin/crunchy.sh"
}, },
"dependencies": { "dependencies": {
"big-integer": "^1.6.27", "big-integer": "^1.6.30",
"bluebird": "^3.5.1",
"cheerio": "^0.22.0", "cheerio": "^0.22.0",
"cloudscraper": "^1.5.0", "cloudscraper": "^1.5.0",
"commander": "^2.15.1", "commander": "^2.15.1",
"fs-extra": "^5.0.0", "fs-extra": "^6.0.1",
"mkdirp": "^0.5.0", "mkdirp": "^0.5.0",
"request": "^2.85.0", "request": "^2.87.0",
"request-promise": "^4.2.2",
"xml2js": "^0.4.5" "xml2js": "^0.4.5"
}, },
"devDependencies": { "devDependencies": {
"@types/bluebird": "^3.5.20",
"@types/cheerio": "^0.22.7", "@types/cheerio": "^0.22.7",
"@types/fs-extra": "^5.0.2",
"@types/mkdirp": "^0.5.2", "@types/mkdirp": "^0.5.2",
"@types/request": "^2.47.0", "@types/request": "^2.47.0",
"@types/request-promise": "^4.1.41",
"@types/xml2js": "^0.4.2", "@types/xml2js": "^0.4.2",
"tsconfig-lint": "^0.12.0", "tsconfig-lint": "^0.12.0",
"tslint": "^5.9.1", "tslint": "^5.10.0",
"typescript": "^2.8.1" "typescript": "^2.9.1"
}, },
"scripts": { "scripts": {
"prepublishOnly": "npm run build", "prepublishOnly": "npm run build",
"compile": "tsc",
"build": "tsc", "build": "tsc",
"test": "tslint -c ./tslint.json --project ./tsconfig.json ./src/**/*.ts", "test": "tslint --project .",
"start": "node ./bin/crunchy" "start": "node ./bin/crunchy"
}, },
"bugs": { "bugs": {

View File

@@ -2,15 +2,16 @@
import commander = require('commander'); import commander = require('commander');
import fs = require('fs'); import fs = require('fs');
import path = require('path'); import path = require('path');
import series from './series';
import log = require('./log'); import log = require('./log');
import series from './series';
/* correspondances between resolution and value CR excpect */ /* correspondances between resolution and value CR excpect */
let resol_table: { [id: string]: IResolData; } = { const resol_table: { [id: string]: IResolData; } =
'360': {quality:'60', format:'106'}, {
'480': {quality:'61', format:'106'}, 360: {quality: '60', format: '106'},
'720': {quality:'62', format:'106'}, 480: {quality: '61', format: '106'},
'1080': {quality:'80', format:'108'}, 720: {quality: '62', format: '106'},
1080: {quality: '80', format: '108'},
}; };
/** /**
@@ -19,47 +20,47 @@ let resol_table: { [id: string]: IResolData; } = {
export default function(args: string[], done: (err?: Error) => void) export default function(args: string[], done: (err?: Error) => void)
{ {
const config = parse(args); const config = parse(args);
const batchPath = path.join(config.output || process.cwd(), 'CrunchyRoll.txt'); const batchPath = path.join(config.output || process.cwd(), config.batch);
// set resolution // set resolution
if (config.resolution) if (config.resolution)
{ {
try try
{ {
config.video_format = resol_table[config.resolution]['format']; config.video_format = resol_table[config.resolution].format;
config.video_quality = resol_table[config.resolution]['quality']; config.video_quality = resol_table[config.resolution].quality;
} }
catch(e) catch (e)
{ {
log.warn("Invalid resolution " + config.resolution + "p. Setting to 1080p") log.warn('Invalid resolution ' + config.resolution + 'p. Setting to 1080p');
config.video_format = resol_table['1080']['format']; config.video_format = resol_table['1080'].format;
config.video_quality = resol_table['1080']['quality']; config.video_quality = resol_table['1080'].quality;
} }
} }
else else
{ {
/* 1080 by default */ /* 1080 by default */
config.video_format = resol_table['1080']['format']; config.video_format = resol_table['1080'].format;
config.video_quality = resol_table['1080']['quality']; config.video_quality = resol_table['1080'].quality;
} }
tasks(config, batchPath, (err, tasks) => tasks(config, batchPath, (err, tasksArr) =>
{ {
if (err) if (err)
{ {
return done(err); return done(err);
} }
let i = 0; let i = 0;
(function next() (function next()
{ {
if (i >= tasks.length) if (i >= tasksArr.length)
{ {
return done(); return done();
} }
series(tasks[i].config, tasks[i].address, (errin) => series(tasksArr[i].config, tasksArr[i].address, (errin) =>
{ {
if (errin) if (errin)
{ {
@@ -181,7 +182,10 @@ function parse(args: string[]): IConfigLine
.option('-o, --output <s>', 'The output path.') .option('-o, --output <s>', 'The output path.')
.option('-s, --series <s>', 'The series override.') .option('-s, --series <s>', 'The series override.')
.option('-n, --filename <s>', 'The name override.') .option('-n, --filename <s>', 'The name override.')
.option('-t, --tag <s>', 'The subgroup. (Default: CrunchyRoll)') .option('-t, --tag <s>', 'The subgroup. (Default: CrunchyRoll)', 'CrunchyRoll')
.option('-r, --resolution <s>', 'The video resolution. (Default: 1080 (360, 480, 720, 1080))') .option('-r, --resolution <s>', 'The video resolution. (Default: 1080 (360, 480, 720, 1080))',
'1080')
.option('-g, --rebuildcrp', 'Rebuild the crpersistant file.')
.option('-b, --batch <s>', 'Batch file', 'CrunchyRoll.txt')
.parse(args); .parse(args);
} }

View File

@@ -6,8 +6,8 @@ batch(process.argv, (err: any) =>
if (err) if (err)
{ {
console.error(err.stack || err); console.error(err.stack || err);
process.exit(-1) process.exit(-1);
} }
console.info("Done!") console.info('Done!');
process.exit(0) process.exit(0);
}); });

View File

@@ -57,7 +57,8 @@ function fileExist(path: string)
{ {
fs.statSync(path); fs.statSync(path);
return true; return true;
} catch (e) }
catch (e)
{ {
return false; return false;
} }
@@ -82,6 +83,13 @@ function download(config: IConfig, page: IEpisodePage, player: IEpisodePlayer, d
if (fileExist(filePath + '.mkv')) if (fileExist(filePath + '.mkv'))
{ {
let count = 0; let count = 0;
if (config.rebuildcrp)
{
log.warn('Adding \'' + fileName + '\' to the DB...');
return done(null, false);
}
log.warn('File \'' + fileName + '\' already exist...'); log.warn('File \'' + fileName + '\' already exist...');
do do
@@ -94,6 +102,11 @@ function download(config: IConfig, page: IEpisodePage, player: IEpisodePlayer, d
log.warn('Renaming to \'' + fileName + '\'...'); log.warn('Renaming to \'' + fileName + '\'...');
} }
if (config.rebuildcrp)
{
return done(null, true);
}
mkdirp(path.dirname(filePath), (errM: Error) => mkdirp(path.dirname(filePath), (errM: Error) =>
{ {
if (errM) if (errM)
@@ -258,7 +271,7 @@ function scrapePage(config: IConfig, address: string, done: (err: Error, page?:
const regexp = /\s*([^\n\r\t\f]+)\n?\s*[^0-9]*([0-9][\-0-9.]*)?,?\n?\s\s*[^0-9]*((PV )?[S0-9][P0-9.]*[a-fA-F]?)/; const regexp = /\s*([^\n\r\t\f]+)\n?\s*[^0-9]*([0-9][\-0-9.]*)?,?\n?\s\s*[^0-9]*((PV )?[S0-9][P0-9.]*[a-fA-F]?)/;
const look = $('#showmedia_about_media').text(); const look = $('#showmedia_about_media').text();
const seasonTitle = $('span[itemprop="title"]').text(); const seasonTitle = $('span[itemprop="title"]').text();
let episodeTitle = $('#showmedia_about_name').text().replace(/[“”]/g, ''); const episodeTitle = $('#showmedia_about_name').text().replace(/[“”]/g, '');
const data = regexp.exec(look); const data = regexp.exec(look);
if (!swf || !data) if (!swf || !data)

View File

@@ -17,4 +17,6 @@ interface IConfig {
resolution?: string; resolution?: string;
video_format?: string; video_format?: string;
video_quality?: string; video_quality?: string;
rebuildcrp?: boolean;
batch?: string;
} }

View File

@@ -1,7 +1,13 @@
'use strict'; 'use strict';
import request = require('request');
import cheerio = require('cheerio'); import cheerio = require('cheerio');
import request = require('request');
import rp = require('request-promise');
import Promise = require('bluebird');
import log = require('./log'); import log = require('./log');
import { RequestPromise } from 'request-promise';
import { Response } from 'request';
// tslint:disable-next-line:no-var-requires
const cloudscraper = require('cloudscraper'); const cloudscraper = require('cloudscraper');
let isAuthenticated = false; let isAuthenticated = false;
@@ -10,30 +16,84 @@ let isPremium = false;
const defaultHeaders: request.Headers = const defaultHeaders: request.Headers =
{ {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; WOW64; x64; rv:58.0) Gecko/20100101 Firefox/58.0', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; WOW64; x64; rv:58.0) Gecko/20100101 Firefox/58.0',
// Mozilla/5.0 (Windows NT 6.2; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0',
'Connection': 'keep-alive', 'Connection': 'keep-alive',
'Referer': 'https://www.crunchyroll.com/login' 'Referer': 'https://www.crunchyroll.com/login',
}; };
function generateDeviceId(): string
{
let id = '';
const possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
for (let i = 0; i < 32; i++)
{
id += possible.charAt(Math.floor(Math.random() * possible.length));
}
return id;
}
function startSession(): Promise<string>
{
return rp(
{
method: 'GET',
url: 'CR_SESSION_URL',
qs:
{
device_id: generateDeviceId(),
device_type: 'CR_DEVICE_TYPE',
access_token: 'CR_SESSION_KEY',
version: 'CR_API_VERSION',
locale: 'CR_LOCALE',
},
json: true,
})
.then((response: any) =>
{
return response.data.session_id;
});
}
function login(sessionId: string, user: string, pass: string): Promise<any>
{
return rp(
{
method: 'POST',
url: 'CR_LOGIN_URL',
form:
{
account: user,
password: pass,
session_id: sessionId,
version: 'CR_API_VERSION',
},
json: true,
})
.then((response) =>
{
if (response.error) throw new Error('Login failed: ' + response.message);
return response.data;
});
}
// TODO: logout
/** /**
* Performs a GET request for the resource. * Performs a GET request for the resource.
*/ */
export function get(config: IConfig, options: string|request.Options, done: (err: Error, result?: string) => void) export function get(config: IConfig, options: string|request.Options, done: (err: Error, result?: string) => void)
{ {
authenticate(config, err => authenticate(config, (err) =>
{ {
if (err) if (err)
{ {
return done(err); return done(err);
} }
cloudscraper.request(modify(options, 'GET'), (err: Error, response: any, body: any) => cloudscraper.request(modify(options, 'GET'), (error: Error, response: any, body: any) =>
{ {
if (err) if (error) return done(error);
{
return done(err);
}
done(null, typeof body === 'string' ? body : String(body)); done(null, typeof body === 'string' ? body : String(body));
}); });
}); });
@@ -44,20 +104,19 @@ export function get(config: IConfig, options: string|request.Options, done: (err
*/ */
export function post(config: IConfig, options: request.Options, done: (err: Error, result?: string) => void) export function post(config: IConfig, options: request.Options, done: (err: Error, result?: string) => void)
{ {
authenticate(config, err => authenticate(config, (err) =>
{ {
if (err) if (err)
{ {
return done(err); return done(err);
} }
cloudscraper.request(modify(options, 'POST'), (err: Error, response: any, body: any) => cloudscraper.request(modify(options, 'POST'), (error: Error, response: any, body: any) =>
{ {
if (err) if (error)
{ {
return done(err); return done(error);
} }
done(null, typeof body === 'string' ? body : String(body)); done(null, typeof body === 'string' ? body : String(body));
}); });
}); });
@@ -73,107 +132,70 @@ function authenticate(config: IConfig, done: (err: Error) => void)
return done(null); return done(null);
} }
/* Bypass the login page and send a login request directly */ startSession()
let options = .then((sessionId: string) =>
{ {
headers: defaultHeaders, defaultHeaders.Cookie = `sess_id=${sessionId}; c_locale=enUS`;
jar: true, return login(sessionId, config.user, config.pass);
gzip: false, })
method: 'GET', .then((userData) =>
url: 'https://www.crunchyroll.com/login'
};
cloudscraper.request(options, (err: Error, rep: string, body: string) =>
{ {
if (err) return done(err); /**
* The page return with a meta based redirection, as we wan't to check that everything is fine, reload
const $ = cheerio.load(body); * the main page. A bit convoluted, but more sure.
*/
/* Get the token from the login page */ const options =
const token = $('input[name="login_form[_token]"]').attr('value');
if (token === '')
{
return done(new Error('Can`t find token!'));
}
let options =
{ {
headers: defaultHeaders, headers: defaultHeaders,
form:
{
'login_form[name]': config.user,
'login_form[password]': config.pass,
'login_form[redirect_url]': '/',
'login_form[_token]': token
},
jar: true, jar: true,
gzip: false, url: 'http://www.crunchyroll.com/',
method: 'POST', method: 'GET',
url: 'https://www.crunchyroll.com/login'
}; };
cloudscraper.request(options, (err: Error, rep: string, body: string) => cloudscraper.request(options, (err: Error, rep: string, body: string) =>
{ {
if (err) if (err)
{ {
return done(err); return done(err);
} }
/* The page return with a meta based redirection, as we wan't to check that everything is fine, reload const $ = cheerio.load(body);
* the main page. A bit convoluted, but more sure.
*/ /* Check if auth worked */
let options = const regexps = /ga\('set', 'dimension[5-8]', '([^']*)'\);/g;
const dims = regexps.exec($('script').text());
for (let i = 1; i < 5; i++)
{ {
headers: defaultHeaders, if ((dims[i] !== undefined) && (dims[i] !== '') && (dims[i] !== 'not-registered'))
jar: true, {
url: 'http://www.crunchyroll.com/', isAuthenticated = true;
method: 'GET' }
};
cloudscraper.request(options, (err: Error, rep: string, body: string) => if ((dims[i] === 'premium') || (dims[i] === 'premiumplus'))
{
isPremium = true;
}
}
if (isAuthenticated === false)
{ {
if (err) const error = $('ul.message, li.error').text();
{ return done(new Error('Authentication failed: ' + error));
return done(err); }
}
let $ = cheerio.load(body); if (isPremium === false)
{
/* Check if auth worked */ log.warn('Do not use this app without a premium account.');
const regexps = /ga\('set', 'dimension[5-8]', '([^']*)'\);/g; }
const dims = regexps.exec($('script').text()); else
{
for (let i = 1; i < 5; i++) log.info('You have a premium account! Good!');
{ }
if ((dims[i] !== undefined) && (dims[i] !== '') && (dims[i] !== 'not-registered')) done(null);
{
isAuthenticated = true;
}
if ((dims[i] === 'premium') || (dims[i] === 'premiumplus'))
{
isPremium = true;
}
}
if (isAuthenticated === false)
{
const error = $('ul.message, li.error').text();
return done(new Error('Authentication failed: ' + error));
}
if (isPremium === false)
{
log.warn('Do not use this app without a premium account.');
}
else
{
log.info('You have a premium account! Good!');
}
done(null);
});
}); });
}); })
.catch(done);
} }
/** /**
@@ -188,5 +210,10 @@ function modify(options: string|request.Options, reqMethod: string): request.Opt
options.method = reqMethod; options.method = reqMethod;
return options; return options;
} }
return { jar: true, headers: defaultHeaders, url: options.toString(), method: reqMethod }; return {
} jar: true,
headers: defaultHeaders,
url: options.toString(),
method: reqMethod
};
}

View File

@@ -2,7 +2,7 @@
import cheerio = require('cheerio'); import cheerio = require('cheerio');
import episode from './episode'; import episode from './episode';
import fs = require('fs'); import fs = require('fs');
const fse = require('fs-extra'); import fse = require('fs-extra');
import my_request = require('./my_request'); import my_request = require('./my_request');
import path = require('path'); import path = require('path');
import url = require('url'); import url = require('url');
@@ -153,7 +153,7 @@ function page(config: IConfig, address: string, done: (err: Error, result?: ISer
episode: '', episode: '',
volume: 0, volume: 0,
}); });
done(null, {episodes: episodes.reverse(), series: ""}); done(null, {episodes: episodes.reverse(), series: ''});
} }
else else
{ {
@@ -195,7 +195,7 @@ function page(config: IConfig, address: string, done: (err: Error, result?: ISer
}); });
if (episodeCount === 0) if (episodeCount === 0)
{ {
log.warn("No episodes found for " + title + ". Could it be a movie?"); log.warn('No episodes found for ' + title + '. Could it be a movie?');
} }
done(null, {episodes: episodes.reverse(), series: title}); done(null, {episodes: episodes.reverse(), series: title});
}); });

View File

@@ -33,10 +33,10 @@ export default function(input: string|Buffer, done: (err: Error, subtitle?: stri
*/ */
function event(block: ISubtitleEvent): string function event(block: ISubtitleEvent): string
{ {
var format = 'Layer,Start,End,Style,Name,MarginL,MarginR,MarginV,Effect,Text'; const format = 'Layer,Start,End,Style,Name,MarginL,MarginR,MarginV,Effect,Text';
return '[Events]\n' + return '[Events]\n' +
'Format: ' + format + '\n' + [].concat(block.event).map(style => ('Dialogue: 0,' + 'Format: ' + format + '\n' + [].concat(block.event).map((style) => ('Dialogue: 0,' +
style.$.start + ',' + style.$.start + ',' +
style.$.end + ',' + style.$.end + ',' +
style.$.style + ',' + style.$.style + ',' +
@@ -70,13 +70,13 @@ function script(block: ISubtitle): string
*/ */
function style(block: ISubtitleStyle): string function style(block: ISubtitleStyle): string
{ {
var format = 'Name,Fontname,Fontsize,PrimaryColour,SecondaryColour,' + const format = 'Name,Fontname,Fontsize,PrimaryColour,SecondaryColour,' +
'OutlineColour,BackColour,Bold,Italic,Underline,StrikeOut,ScaleX,' + 'OutlineColour,BackColour,Bold,Italic,Underline,StrikeOut,ScaleX,' +
'ScaleY,Spacing,Angle,BorderStyle,Outline,Shadow,Alignment,' + 'ScaleY,Spacing,Angle,BorderStyle,Outline,Shadow,Alignment,' +
'MarginL,MarginR,MarginV,Encoding'; 'MarginL,MarginR,MarginV,Encoding';
return '[V4+ Styles]\n' + return '[V4+ Styles]\n' +
'Format: ' + format + '\n' + [].concat(block.style).map(style => 'Style: ' + 'Format: ' + format + '\n' + [].concat(block.style).map((style) => 'Style: ' +
style.$.name + ',' + style.$.name + ',' +
style.$.font_name + ',' + style.$.font_name + ',' +
style.$.font_size + ',' + style.$.font_size + ',' +

View File

@@ -2,7 +2,7 @@
import ass from './ass'; import ass from './ass';
import srt from './srt'; import srt from './srt';
export default <IFormatterTable> { export default {
ass: ass, ass,
srt: srt srt
}; } as IFormatterTable;

View File

@@ -17,7 +17,7 @@ export default function(config: IConfig, isSubtitled: boolean, rtmpInputPath: st
if (streamMode === 'RTMP') if (streamMode === 'RTMP')
{ {
videoPath += path.extname(rtmpInputPath); videoPath += path.extname(rtmpInputPath);
} }
else else
{ {

View File

@@ -11,30 +11,31 @@ import log = require('../log');
export default function(rtmpUrl: string, rtmpInputPath: string, swfUrl: string, filePath: string, export default function(rtmpUrl: string, rtmpInputPath: string, swfUrl: string, filePath: string,
fileExt: string, mode: string, done: (err: Error) => void) fileExt: string, mode: string, done: (err: Error) => void)
{ {
if (mode === 'RTMP') if (mode === 'RTMP')
{ {
childProcess.exec(command('rtmpdump') + ' ' + childProcess.exec(command('rtmpdump') + ' ' +
'-r "' + rtmpUrl + '" ' + '-r "' + rtmpUrl + '" ' +
'-y "' + rtmpInputPath + '" ' + '-y "' + rtmpInputPath + '" ' +
'-W "' + swfUrl + '" ' + '-W "' + swfUrl + '" ' +
'-o "' + filePath + fileExt + '"', { '-o "' + filePath + fileExt + '"', {
maxBuffer: Infinity, maxBuffer: Infinity,
}, done); }, done);
} }
else if (mode === 'HLS') else if (mode === 'HLS')
{ {
const cmd = command('ffmpeg') + ' ' + const cmd = command('ffmpeg') + ' ' +
'-i "' + rtmpInputPath + '" ' + '-i "' + rtmpInputPath + '" ' +
'-c copy -bsf:a aac_adtstoasc ' + '-c copy -bsf:a aac_adtstoasc ' +
'"' + filePath + '.mp4"'; '"' + filePath + '.mp4"';
childProcess.exec(cmd, { childProcess.exec(cmd,
maxBuffer: Infinity, {
}, done); maxBuffer: Infinity,
} }, done);
else }
{ else
log.error('No such mode: ' + mode); {
} log.error('No such mode: ' + mode);
}
} }
/** /**
@@ -44,7 +45,7 @@ function command(exe: string): string
{ {
if (os.platform() !== 'win32') if (os.platform() !== 'win32')
{ {
return exe; return exe;
} }
return '"' + path.join(__dirname, '../../bin/' + exe + '.exe') + '"'; return '"' + path.join(__dirname, '../../bin/' + exe + '.exe') + '"';

View File

@@ -6,6 +6,9 @@
"removeComments": false, "removeComments": false,
"module": "commonjs", "module": "commonjs",
"outDir": "dist", "outDir": "dist",
"sourceMap": true "sourceMap": true,
"lib": [
"es2015"
]
} }
} }

View File

@@ -9,23 +9,22 @@
"curly": false, "curly": false,
"eofline": false, "eofline": false,
"forin": true, "forin": true,
"indent": [true, 2], "indent": [true, "spaces", 2],
"interface-name": true, "interface-name": true,
"jsdoc-format": true, "jsdoc-format": true,
"label-position": true, "label-position": true,
"max-line-length": [true, 140], "max-line-length": [true, 140],
"member-ordering": [true, "member-ordering": false,
"public-before-private", "no-shadowed-variable": false,
"static-before-instance",
"variables-before-functions"
],
"array-type": [true, "array"], "array-type": [true, "array"],
"trailing-comma": false,
"no-any": false, "no-any": false,
"no-arg": true, "no-arg": true,
"no-bitwise": true, "no-bitwise": true,
"space-within-parens": false,
"no-object-literal-type-assertion": false,
"no-console": [true, "no-console": [true,
"debug", "debug",
"info",
"time", "time",
"timeEnd", "timeEnd",
"trace" "trace"
@@ -42,7 +41,6 @@
"no-use-before-declare": false, "no-use-before-declare": false,
"no-var-requires": true, "no-var-requires": true,
"one-line": [true, "one-line": [true,
"check-catch",
"check-whitespace" "check-whitespace"
], ],
"quotemark": [true, "single"], "quotemark": [true, "single"],
@@ -67,6 +65,8 @@
"check-operator", "check-operator",
"check-separator", "check-separator",
"check-type" "check-type"
] ],
"object-literal-sort-keys": false,
"ordered-imports": false
} }
} }