diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3ad496a --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +node_modules/ +.envrc +.vscode diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..67fbe6a --- /dev/null +++ b/package-lock.json @@ -0,0 +1,533 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "@types/form-data": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-2.2.0.tgz", + "integrity": "sha512-vm5OGsKc61Sx/GTRMQ9d0H0PYCDebT78/bdIBPCoPEHdgp0etaH1RzMmkDygymUmyXTj3rdWQn0sRUpYKZzljA==", + "requires": { + "@types/node": "8.0.17" + } + }, + "@types/node": { + "version": "8.0.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.0.17.tgz", + "integrity": "sha512-iq0LxqG6P9GV/2bVA2AQAQ58NvneLdVDVs9dJ+88Jk6gDK9opNC0SushdYqlAyvxo0dk0NJjTKCenq/l3AKtuA==" + }, + "@types/node-feedparser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@types/node-feedparser/-/node-feedparser-2.2.0.tgz", + "integrity": "sha512-QpvFkA1v1yfElZFmolkJecAFa7mohidn0/WhYlLwGLWFNUOAta4wgishQBk5Oi9PI2ThAAzIx4nxHGfpZPajqw==", + "requires": { + "@types/node": "8.0.17", + "@types/sax": "1.0.0" + } + }, + "@types/request": { + "version": "0.0.43", + "resolved": "https://registry.npmjs.org/@types/request/-/request-0.0.43.tgz", + "integrity": "sha1-/MWc/YjmMDToE8aISgqt4tD36TU=", + "requires": { + "@types/form-data": "2.2.0", + "@types/node": "8.0.17" + } + }, + "@types/sax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.0.0.tgz", + "integrity": "sha1-MNXmvb8Sba9uQSxjklHdl0vUfNw=", + "requires": { + "@types/node": "8.0.17" + } + }, + "addressparser": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/addressparser/-/addressparser-1.0.1.tgz", + "integrity": "sha1-R6++GiqSYhkdtoOOT9HTm0CCF0Y=" + }, + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "array-indexofobject": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/array-indexofobject/-/array-indexofobject-0.0.1.tgz", + "integrity": "sha1-qqEo5iybPDWAlFaMIZ/2T+SJ1Co=" + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" + }, + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=" + }, + "aws4": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "requires": { + "hoek": "2.16.3" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "combined-stream": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "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=" + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "requires": { + "boom": "2.10.1" + } + }, + "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" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "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.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" + }, + "extsprintf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", + "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=" + }, + "feedparser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/feedparser/-/feedparser-2.2.1.tgz", + "integrity": "sha1-P2kJt25THqh2zs/qsyCAKhptC5I=", + "requires": { + "addressparser": "1.0.1", + "array-indexofobject": "0.0.1", + "lodash.assign": "4.2.0", + "lodash.get": "4.4.2", + "lodash.has": "4.5.2", + "lodash.uniq": "4.5.0", + "readable-stream": "2.3.3", + "sax": "1.2.3" + } + }, + "feedparser-promised": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/feedparser-promised/-/feedparser-promised-1.3.0.tgz", + "integrity": "sha1-zASkbWFHUDkqSdCbq2XFQxg6Dvo=", + "requires": { + "@types/node-feedparser": "2.2.0", + "@types/request": "0.0.43", + "feedparser": "2.2.1", + "request": "2.81.0" + } + }, + "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.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.16" + } + }, + "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" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "har-schema": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=" + }, + "har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "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=", + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "requires": { + "jsonify": "0.0.0" + } + }, + "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=" + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" + }, + "jsprim": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", + "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=" + }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" + }, + "lodash.has": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/lodash.has/-/lodash.has-4.5.2.tgz", + "integrity": "sha1-0Z9NwQlQWMzL4rDN9O4P5Ko3yGI=" + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" + }, + "mime-db": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.29.0.tgz", + "integrity": "sha1-SNJtI1WJZRcErFkWygYAGRQmaHg=" + }, + "mime-types": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.16.tgz", + "integrity": "sha1-K4WKUuXs1RbbiXrCvodIeDBpjiM=", + "requires": { + "mime-db": "1.29.0" + } + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" + }, + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=" + }, + "readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "request": { + "version": "2.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.16", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.1.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.1.0" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "sax": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.3.tgz", + "integrity": "sha512-U/jqm5gm+jcljJwhp8Be5/JhWjl1XGwjF65aKmihVaReZ7fU69w2xESMg5PMqRqYIb8lagU4/4g3+1QXk3fgdg==" + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "requires": { + "hoek": "2.16.3" + } + }, + "sshpk": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", + "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "requires": { + "safe-buffer": "5.1.1" + } + }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" + }, + "tough-cookie": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", + "requires": { + "punycode": "1.4.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.1.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "uuid": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", + "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" + }, + "verror": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", + "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", + "requires": { + "extsprintf": "1.0.2" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..26876ab --- /dev/null +++ b/package.json @@ -0,0 +1,9 @@ +{ + "dependencies": { + "axios": "^0.16.2", + "body-parser": "^1.17.2", + "express": "^4.15.3", + "feedparser-promised": "^1.3.0", + "jsonfile": "^3.0.1" + } +} diff --git a/src/data/index.js b/src/data/index.js new file mode 100644 index 0000000..62cbab4 --- /dev/null +++ b/src/data/index.js @@ -0,0 +1,36 @@ +module.exports = { + NewsAPI: require('./sources/news-api'), + CoinMarketCap: require('./sources/coin-market-cap'), + HackerNews: require('./sources/hacker-news'), + Sidebar: require('./sources/sidebar'), + Reddit: require('./sources/reddit'), + ProductHunt: require('./sources/product-hunt'), + IndieHackers: require('./sources/indie-hackers'), + DesignerNews: require('./sources/designer-news'), + BetaList: require('./sources/beta-list'), + TheOutline: require('./sources/the-outline'), + AVClub: require('./sources/av-club'), + MacRumors: require('./sources/mac-rumors'), + FiveThirtyEight: require('./sources/538'), +}; + +/* +Refactor feeds to use pubsubhhubbub + +Things that should be feeds: +hackernews +sidebar + +DONE: +producthunt: https://www.producthunt.com/ +SCRAP - indiehackers: https://www.indiehackers.com/ +designernews: https://www.designernews.co/?format=rss +betalist: https://betalist.com/ +theoutline: https://theoutline.com/feeds/recent.rss +avclub: http://www.avclub.com/rss/ +fivethirtyeight: https://fivethirtyeight.com/features/feed/ + +TODOS: +macrumors: https://www.macrumors.com/ + +*/ diff --git a/src/data/sources/538.js b/src/data/sources/538.js new file mode 100644 index 0000000..1c3571d --- /dev/null +++ b/src/data/sources/538.js @@ -0,0 +1,9 @@ +const Feed = require('./feed'); + +class FiveThirtyEight extends Feed { + constructor() { + super('https://fivethirtyeight.com/features/feed/'); + } +} + +module.exports = new FiveThirtyEight(); diff --git a/src/data/sources/api.js b/src/data/sources/api.js new file mode 100644 index 0000000..537a8e4 --- /dev/null +++ b/src/data/sources/api.js @@ -0,0 +1,42 @@ +const axios = require('axios'); + +// Prototype for sources +class API { + static fetch(axiosConfig) { + const request = axios.create(axiosConfig); + return (endpoint, config = {}) => ( + request.get(endpoint, config).then(x => x.data) + ); + } + + static createAxiosConfig(baseURL, apiKey) { + let params = {}; + + if (!apiKey) { + return { + baseURL, + timeout: 10000, + }; + } + + if (typeof apiKey === 'string') { + params = { apiKey }; + } else { + const keyName = Object.keys(apiKey)[0]; + params = { [keyName]: apiKey[keyName] }; + } + + return { + baseURL, + timeout: 10000, + params, + }; + } + + constructor(baseURL, apiKey) { + const axiosConfig = API.createAxiosConfig(baseURL, apiKey); + this.fetch = API.fetch(axiosConfig); + } +} + +module.exports = API; diff --git a/src/data/sources/av-club.js b/src/data/sources/av-club.js new file mode 100644 index 0000000..dc03b5a --- /dev/null +++ b/src/data/sources/av-club.js @@ -0,0 +1,9 @@ +const Feed = require('./feed'); + +class AVClub extends Feed { + constructor() { + super('http://www.avclub.com/feeds/rss/'); + } +} + +module.exports = new AVClub(); diff --git a/src/data/sources/beta-list.js b/src/data/sources/beta-list.js new file mode 100644 index 0000000..ad7b02d --- /dev/null +++ b/src/data/sources/beta-list.js @@ -0,0 +1,9 @@ +const Feed = require('./feed'); + +class BetaList extends Feed { + constructor() { + super('http://feeds.feedburner.com/BetaList'); + } +} + +module.exports = new BetaList(); diff --git a/src/data/sources/coin-market-cap.js b/src/data/sources/coin-market-cap.js new file mode 100644 index 0000000..1d017b3 --- /dev/null +++ b/src/data/sources/coin-market-cap.js @@ -0,0 +1,18 @@ +const API = require('./api'); + +class CoinMarketCap extends API { + constructor() { + const baseURL = 'https://api.coinmarketcap.com/v1/' + super(baseURL); + } + + getLatestTicker(limit = 5) { + return this.fetch('ticker', { params: { limit } }); + } + + get listing() { + return this.getLatestTicker(); + } +} + +module.exports = new CoinMarketCap(); diff --git a/src/data/sources/designer-news.js b/src/data/sources/designer-news.js new file mode 100644 index 0000000..466a752 --- /dev/null +++ b/src/data/sources/designer-news.js @@ -0,0 +1,9 @@ +const Feed = require('./feed'); + +class DesignerNews extends Feed { + constructor() { + super('https://www.designernews.co/?format=rss'); + } +} + +module.exports = new DesignerNews(); diff --git a/src/data/sources/feed.js b/src/data/sources/feed.js new file mode 100644 index 0000000..64cf2dd --- /dev/null +++ b/src/data/sources/feed.js @@ -0,0 +1,17 @@ +const FeedParser = require('feedparser-promised'); + +class Feed { + constructor(uri) { + const options = { + uri, + timeout: 3000, + } + this.parseFeed = FeedParser.parse(options); + } + + get listing() { + return this.parseFeed; + } +} + +module.exports = Feed; diff --git a/src/data/sources/hacker-news.js b/src/data/sources/hacker-news.js new file mode 100644 index 0000000..a87cef0 --- /dev/null +++ b/src/data/sources/hacker-news.js @@ -0,0 +1,26 @@ +const API = require('./api'); + +class HackerNews extends API { + constructor() { + const baseURL = 'https://hacker-news.firebaseio.com/v0/'; + super(baseURL); + } + + async getTopStories() { + const topStoryIds = await this.fetch('/topstories.json'); + const top100 = topStoryIds.slice(0, 100).map(id => this.getItem(id)); + const topStories = await Promise.all(top100); + return topStories; + } + + getItem(id) { + return this.fetch(`/item/${id}.json`) + .catch(err => { throw err });; + } + + get listing() { + return this.getTopStories(); + } +} + +module.exports = new HackerNews(); diff --git a/src/data/sources/indie-hackers.js b/src/data/sources/indie-hackers.js new file mode 100644 index 0000000..555ea87 --- /dev/null +++ b/src/data/sources/indie-hackers.js @@ -0,0 +1,13 @@ +const Feed = require('./feed'); + +// All their articles are published at the same time so they'd apprear +// grouped together +// Probably shouldn't use this + +class IndieHackers extends Feed { + constructor() { + super('https://www.indiehackers.com/feed.xml'); + } +} + +module.exports = new IndieHackers(); diff --git a/src/data/sources/mac-rumors.js b/src/data/sources/mac-rumors.js new file mode 100644 index 0000000..c848ee8 --- /dev/null +++ b/src/data/sources/mac-rumors.js @@ -0,0 +1,9 @@ +const Feed = require('./feed'); + +class MacRumors extends Feed { + constructor() { + super('http://feeds.macrumors.com/MacRumors-All'); + } +} + +module.exports = new MacRumors(); diff --git a/src/data/sources/news-api.js b/src/data/sources/news-api.js new file mode 100644 index 0000000..4247c64 --- /dev/null +++ b/src/data/sources/news-api.js @@ -0,0 +1,30 @@ +const API = require('./api'); + +class NewsAPI extends API { + constructor() { + const baseURL = 'https://newsapi.org/v1/'; + const API_KEY = process.env.NEWS_API_KEY; + super(baseURL, API_KEY); + } + + getAllSources() { + const params = { + language: 'en', + } + return this.fetch('/sources', { params }); + } + + getArticlesFrom(source) { + const params = { + source, + } + return this.fetch('/articles', { params }); + } + + listing(source) { + return this.getArticlesFrom(source); + } +} + + +module.exports = new NewsAPI(); diff --git a/src/data/sources/product-hunt.js b/src/data/sources/product-hunt.js new file mode 100644 index 0000000..607adf2 --- /dev/null +++ b/src/data/sources/product-hunt.js @@ -0,0 +1,9 @@ +const Feed = require('./feed'); + +class ProductHunt extends Feed { + constructor() { + super('https://www.producthunt.com/feed'); + } +} + +module.exports = new ProductHunt(); diff --git a/src/data/sources/reddit.js b/src/data/sources/reddit.js new file mode 100644 index 0000000..c3d4338 --- /dev/null +++ b/src/data/sources/reddit.js @@ -0,0 +1,18 @@ +const API = require('./api'); + +class Reddit extends API { + constructor() { + const baseURL = 'http://reddit.com/api/v1'; + super(baseURL); + } + + getHotListings() { + return this.fetch('/hot'); + } + + get listing() { + return this.getHotListings(); + } +} + +module.exports = new Reddit(); diff --git a/src/data/sources/sidebar.js b/src/data/sources/sidebar.js new file mode 100644 index 0000000..45cf859 --- /dev/null +++ b/src/data/sources/sidebar.js @@ -0,0 +1,18 @@ +const API = require('./api'); + +class Sidebar extends API { + constructor() { + const baseURL = 'https://sidebar.io/'; + super(baseURL); + } + + getListing() { + return this.fetch('/api'); + } + + get listing() { + return this.getListing(); + } +} + +module.exports = new Sidebar(); diff --git a/src/data/sources/the-outline.js b/src/data/sources/the-outline.js new file mode 100644 index 0000000..68c1b52 --- /dev/null +++ b/src/data/sources/the-outline.js @@ -0,0 +1,9 @@ +const Feed = require('./feed'); + +class TheOutline extends Feed { + constructor() { + super('https://theoutline.com/feeds/recent.rss'); + } +} + +module.exports = new TheOutline(); diff --git a/src/icons.json b/src/icons.json new file mode 100644 index 0000000..81673e6 --- /dev/null +++ b/src/icons.json @@ -0,0 +1 @@ +[{"src":"https://icons.better-idea.org/icon?url=http://www.abc.net.au/news&size=70..120..200","name":"ABC News (AU)"},{"src":"https://icons.better-idea.org/icon?url=http://www.aljazeera.com&size=70..120..200","name":"Al Jazeera English"},{"src":"https://icons.better-idea.org/icon?url=http://arstechnica.com&size=70..120..200","name":"Ars Technica"},{"src":"https://icons.better-idea.org/icon?url=https://apnews.com/&size=70..120..200","name":"Associated Press"},{"src":"https://icons.better-idea.org/icon?url=http://www.bbc.co.uk/news&size=70..120..200","name":"BBC News"},{"src":"https://icons.better-idea.org/icon?url=http://www.bbc.co.uk/sport&size=70..120..200","name":"BBC Sport"},{"src":"https://icons.better-idea.org/icon?url=http://www.bild.de&size=70..120..200","name":"Bild"},{"src":"https://icons.better-idea.org/icon?url=http://www.bloomberg.com&size=70..120..200","name":"Bloomberg"},{"src":"https://icons.better-idea.org/icon?url=http://www.breitbart.com&size=70..120..200","name":"Breitbart News"},{"src":"https://icons.better-idea.org/icon?url=http://www.businessinsider.com&size=70..120..200","name":"Business Insider"},{"src":"https://icons.better-idea.org/icon?url=http://uk.businessinsider.com&size=70..120..200","name":"Business Insider (UK)"},{"src":"https://icons.better-idea.org/icon?url=https://www.buzzfeed.com&size=70..120..200","name":"Buzzfeed"},{"src":"https://icons.better-idea.org/icon?url=http://www.cnbc.com&size=70..120..200","name":"CNBC"},{"src":"https://icons.better-idea.org/icon?url=http://us.cnn.com&size=70..120..200","name":"CNN"},{"src":"https://icons.better-idea.org/icon?url=http://www.dailymail.co.uk/home/index.html&size=70..120..200","name":"Daily Mail"},{"src":"https://icons.better-idea.org/icon?url=http://www.tagesspiegel.de&size=70..120..200","name":"Der Tagesspiegel"},{"src":"https://icons.better-idea.org/icon?url=http://www.zeit.de/index&size=70..120..200","name":"Die Zeit"},{"src":"https://icons.better-idea.org/icon?url=https://www.engadget.com&size=70..120..200","name":"Engadget"},{"src":"https://icons.better-idea.org/icon?url=http://www.ew.com&size=70..120..200","name":"Entertainment Weekly"},{"src":"https://icons.better-idea.org/icon?url=http://espn.go.com&size=70..120..200","name":"ESPN"},{"src":"https://icons.better-idea.org/icon?url=http://www.espncricinfo.com/&size=70..120..200","name":"ESPN Cric Info"},{"src":"https://icons.better-idea.org/icon?url=http://www.ft.com/home/uk&size=70..120..200","name":"Financial Times"},{"src":"https://icons.better-idea.org/icon?url=http://www.focus.de&size=70..120..200","name":"Focus"},{"src":"https://icons.better-idea.org/icon?url=http://www.football-italia.net&size=70..120..200","name":"Football Italia"},{"src":"https://icons.better-idea.org/icon?url=http://fortune.com&size=70..120..200","name":"Fortune"},{"src":"https://icons.better-idea.org/icon?url=http://www.fourfourtwo.com/news&size=70..120..200","name":"FourFourTwo"},{"src":"https://icons.better-idea.org/icon?url=http://www.foxsports.com&size=70..120..200","name":"Fox Sports"},{"src":"https://icons.better-idea.org/icon?url=https://news.google.com&size=70..120..200","name":"Google News"},{"src":"https://icons.better-idea.org/icon?url=http://www.gruenderszene.de&size=70..120..200","name":"Gruenderszene"},{"src":"https://icons.better-idea.org/icon?url=https://news.ycombinator.com&size=70..120..200","name":"Hacker News"},{"src":"https://icons.better-idea.org/icon?url=http://www.handelsblatt.com&size=70..120..200","name":"Handelsblatt"},{"src":"https://icons.better-idea.org/icon?url=http://www.ign.com&size=70..120..200","name":"IGN"},{"src":"https://icons.better-idea.org/icon?url=http://www.independent.co.uk&size=70..120..200","name":"Independent"},{"src":"https://icons.better-idea.org/icon?url=http://mashable.com&size=70..120..200","name":"Mashable"},{"src":"https://icons.better-idea.org/icon?url=http://metro.co.uk&size=70..120..200","name":"Metro"},{"src":"https://icons.better-idea.org/icon?url=http://www.mirror.co.uk/&size=70..120..200","name":"Mirror"},{"src":"https://icons.better-idea.org/icon?url=http://www.mtv.com/news&size=70..120..200","name":"MTV News"},{"src":"https://icons.better-idea.org/icon?url=http://www.mtv.co.uk/news&size=70..120..200","name":"MTV News (UK)"},{"src":"https://icons.better-idea.org/icon?url=http://news.nationalgeographic.com&size=70..120..200","name":"National Geographic"},{"src":"https://icons.better-idea.org/icon?url=https://www.newscientist.com/section/news&size=70..120..200","name":"New Scientist"},{"src":"https://icons.better-idea.org/icon?url=http://www.newsweek.com&size=70..120..200","name":"Newsweek"},{"src":"https://icons.better-idea.org/icon?url=http://nymag.com&size=70..120..200","name":"New York Magazine"},{"src":"https://icons.better-idea.org/icon?url=http://www.nfl.com/news&size=70..120..200","name":"NFL News"},{"src":"https://icons.better-idea.org/icon?url=http://www.polygon.com&size=70..120..200","name":"Polygon"},{"src":"https://icons.better-idea.org/icon?url=http://www.recode.net&size=70..120..200","name":"Recode"},{"src":"https://icons.better-idea.org/icon?url=https://www.reddit.com/r/all&size=70..120..200","name":"Reddit /r/all"},{"src":"https://icons.better-idea.org/icon?url=http://www.reuters.com&size=70..120..200","name":"Reuters"},{"src":"https://icons.better-idea.org/icon?url=http://www.spiegel.de&size=70..120..200","name":"Spiegel Online"},{"src":"https://icons.better-idea.org/icon?url=http://t3n.de&size=70..120..200","name":"T3n"},{"src":"https://icons.better-idea.org/icon?url=http://talksport.com&size=70..120..200","name":"TalkSport"},{"src":"https://icons.better-idea.org/icon?url=https://techcrunch.com&size=70..120..200","name":"TechCrunch"},{"src":"https://icons.better-idea.org/icon?url=http://www.techradar.com&size=70..120..200","name":"TechRadar"},{"src":"https://icons.better-idea.org/icon?url=http://www.economist.com&size=70..120..200","name":"The Economist"},{"src":"https://icons.better-idea.org/icon?url=https://www.theguardian.com/au&size=70..120..200","name":"The Guardian (AU)"},{"src":"https://icons.better-idea.org/icon?url=https://www.theguardian.com/uk&size=70..120..200","name":"The Guardian (UK)"},{"src":"https://icons.better-idea.org/icon?url=http://www.thehindu.com&size=70..120..200","name":"The Hindu"},{"src":"https://icons.better-idea.org/icon?url=http://www.huffingtonpost.com&size=70..120..200","name":"The Huffington Post"},{"src":"https://icons.better-idea.org/icon?url=http://www.theladbible.com&size=70..120..200","name":"The Lad Bible"},{"src":"https://icons.better-idea.org/icon?url=http://www.nytimes.com&size=70..120..200","name":"The New York Times"},{"src":"https://icons.better-idea.org/icon?url=http://thenextweb.com&size=70..120..200","name":"The Next Web"},{"src":"https://icons.better-idea.org/icon?url=http://www.thesportbible.com&size=70..120..200","name":"The Sport Bible"},{"src":"https://icons.better-idea.org/icon?url=http://www.telegraph.co.uk&size=70..120..200","name":"The Telegraph"},{"src":"https://icons.better-idea.org/icon?url=http://timesofindia.indiatimes.com&size=70..120..200","name":"The Times of India"},{"src":"https://icons.better-idea.org/icon?url=http://www.theverge.com&size=70..120..200","name":"The Verge"},{"src":"https://icons.better-idea.org/icon?url=http://www.wsj.com&size=70..120..200","name":"The Wall Street Journal"},{"src":"https://icons.better-idea.org/icon?url=https://www.washingtonpost.com&size=70..120..200","name":"The Washington Post"},{"src":"https://icons.better-idea.org/icon?url=http://time.com&size=70..120..200","name":"Time"},{"src":"https://icons.better-idea.org/icon?url=http://www.usatoday.com/news&size=70..120..200","name":"USA Today"},{"src":"https://icons.better-idea.org/icon?url=https://www.wired.de&size=70..120..200","name":"Wired.de"},{"src":"https://icons.better-idea.org/icon?url=http://www.wiwo.de&size=70..120..200","name":"Wirtschafts Woche"}] diff --git a/src/server.js b/src/server.js new file mode 100644 index 0000000..1d7519c --- /dev/null +++ b/src/server.js @@ -0,0 +1,107 @@ +const express = require('express'); +const bodyParser = require('body-parser'); +const axios = require('axios'); + +const jsonfile = require('jsonfile'); + +const app = express(); +const PORT = process.env.PORT || 9999; + +const data = require('./data'); + + +// Middleware +app.use(bodyParser.urlencoded({ extended: false })); + +// Routes +app.get('/', (_, response) => response.redirect('/sources')); + +app.post('/icons', (request, response) => { + response.sendStatus(200); +}) + +app.get('/news/', (_, response) => { + data.NewsAPI.getAllSources() + .then(json => response.json(json.sources)) + .catch(err => { console.error(err) }); +}); + +app.get('/news/:source', (request, response) => { + const { source } = request.params; + data.NewAPI.getArticlesFrom(source) + .then(json => response.json(json)) + .catch(err => { console.error(err) }); +}); + +app.get('/crypto', (_, response) => { + data.CoinMarketCap.listing + .then(json => response.json(json)) + .catch(err => response.sendStatus(500)); +}); + +app.get('/hacker-news', (_, response) => { + data.HackerNews.listing + .then(json => { + response.json(json); + }) + .then(err => response.sendStatus(500)); +}); + +app.get('/hacker-news/:item', (request, response) => { + data.HackerNews.getItem(request.params.item) + .then(json => { + response.json(json); + }) + .catch(err => { throw err }); +}); + +app.get('/sidebar', (_, response) => { + data.Sidebar.listing + .then(json => response.json(json)) + .catch(err => { throw err }); +}); + +app.get('/reddit', (_, response) => { + data.Reddit.listing + .then(json => response.json(json)) + .catch(err => { throw err }); +}); + +app.get('/product-hunt', (_, response) => { + data.ProductHunt.listing + .then(json => response.json(json)); +}); + +app.get('/indiehackers', (_, response) => { + data.IndieHackers.listing.then(json => response.json(json)).catch(err => { throw err }); +}); + +app.get('/designer-news', (_, response) => { + data.DesignerNews.listing.then(json => response.json(json)).catch(err => { throw err }); +}); + +app.get('/beta-list', (_, response) => { + data.BetaList.listing.then(json => response.json(json)).catch(err => { throw err }); +}); + +app.get('/the-outline', (_, response) => { + data.TheOutline.listing.then(json => response.json(json)) + .catch(err => { throw err }); +}); + +app.get('/av-club', (_, response) => { + data.AVClub.listing.then(json => response.json(json)).catch(err => { throw err }); +}) + +app.get('/538', (_, response) => { + data.FiveThirtyEight.listing.then(json => response.json(json)); +}); + +app.get('/mac-rumors', (_, response) => { + data.MacRumors.listing.then(json => response.json(json)); +}) + +app.listen(PORT); +console.log('Listening to ', PORT); + + diff --git a/yarn-error.log b/yarn-error.log new file mode 100644 index 0000000..ccd689e --- /dev/null +++ b/yarn-error.log @@ -0,0 +1,357 @@ +Arguments: + /home/enricob/n/bin/node /usr/share/yarn/bin/yarn.js add feedparser-promised + +PATH: + /home/enricob/.cargo/bin:/home/enricob/.rvm/gems/ruby-2.3.1/bin:/home/enricob/.rvm/gems/ruby-2.3.1@global/bin:/home/enricob/.rvm/rubies/ruby-2.3.1/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/enricob/Android/Sdk/tools:/home/enricob/Android/Sdk/platform-tools:/home/enricob/.yarn-global/bin:/home/enricob/.rvm/bin:/home/enricob/n/bin:/home/enricob/.rvm/bin:/home/enricob/Android/Sdk/tools:/home/enricob/Android/Sdk/platform-tools:/home/enricob/.yarn-global/bin:/home/enricob/.rvm/bin + +Yarn version: + 0.27.5 + +Node version: + 8.2.1 + +Platform: + linux x64 + +npm manifest: + { + "dependencies": { + "axios": "^0.16.2", + "body-parser": "^1.17.2", + "express": "^4.15.3", + "jsonfile": "^3.0.1" + } + } + +yarn manifest: + No manifest + +Lockfile: + # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. + # yarn lockfile v1 + + + accepts@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" + dependencies: + mime-types "~2.1.11" + negotiator "0.6.1" + + array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + + axios@^0.16.2: + version "0.16.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.16.2.tgz#ba4f92f17167dfbab40983785454b9ac149c3c6d" + dependencies: + follow-redirects "^1.2.3" + is-buffer "^1.1.5" + + body-parser@^1.17.2: + version "1.17.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.17.2.tgz#f8892abc8f9e627d42aedafbca66bf5ab99104ee" + dependencies: + bytes "2.4.0" + content-type "~1.0.2" + debug "2.6.7" + depd "~1.1.0" + http-errors "~1.6.1" + iconv-lite "0.4.15" + on-finished "~2.3.0" + qs "6.4.0" + raw-body "~2.2.0" + type-is "~1.6.15" + + bytes@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339" + + content-disposition@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + + content-type@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" + + cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + + cookie@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + + debug@2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.7.tgz#92bad1f6d05bbb6bba22cca88bcd0ec894c2861e" + dependencies: + ms "2.0.0" + + debug@^2.4.5: + version "2.6.8" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" + dependencies: + ms "2.0.0" + + depd@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" + + depd@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" + + destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + + ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + + encodeurl@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" + + escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + + etag@~1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.0.tgz#6f631aef336d6c46362b51764044ce216be3c051" + + express@^4.15.3: + version "4.15.3" + resolved "https://registry.yarnpkg.com/express/-/express-4.15.3.tgz#bab65d0f03aa80c358408972fc700f916944b662" + dependencies: + accepts "~1.3.3" + array-flatten "1.1.1" + content-disposition "0.5.2" + content-type "~1.0.2" + cookie "0.3.1" + cookie-signature "1.0.6" + debug "2.6.7" + depd "~1.1.0" + encodeurl "~1.0.1" + escape-html "~1.0.3" + etag "~1.8.0" + finalhandler "~1.0.3" + fresh "0.5.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.1" + path-to-regexp "0.1.7" + proxy-addr "~1.1.4" + qs "6.4.0" + range-parser "~1.2.0" + send "0.15.3" + serve-static "1.12.3" + setprototypeof "1.0.3" + statuses "~1.3.1" + type-is "~1.6.15" + utils-merge "1.0.0" + vary "~1.1.1" + + finalhandler@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.3.tgz#ef47e77950e999780e86022a560e3217e0d0cc89" + dependencies: + debug "2.6.7" + encodeurl "~1.0.1" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.1" + statuses "~1.3.1" + unpipe "~1.0.0" + + follow-redirects@^1.2.3: + version "1.2.4" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.2.4.tgz#355e8f4d16876b43f577b0d5ce2668b9723214ea" + dependencies: + debug "^2.4.5" + + forwarded@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.0.tgz#19ef9874c4ae1c297bcf078fde63a09b66a84363" + + fresh@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e" + + graceful-fs@^4.1.6: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + + http-errors@~1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.1.tgz#5f8b8ed98aca545656bf572997387f904a722257" + dependencies: + depd "1.1.0" + inherits "2.0.3" + setprototypeof "1.0.3" + statuses ">= 1.3.1 < 2" + + iconv-lite@0.4.15: + version "0.4.15" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" + + inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + + ipaddr.js@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.4.0.tgz#296aca878a821816e5b85d0a285a99bcff4582f0" + + is-buffer@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" + + jsonfile@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66" + optionalDependencies: + graceful-fs "^4.1.6" + + media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + + merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + + methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + + mime-db@~1.29.0: + version "1.29.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.29.0.tgz#48d26d235589651704ac5916ca06001914266878" + + mime-types@~2.1.11, mime-types@~2.1.15: + version "2.1.16" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.16.tgz#2b858a52e5ecd516db897ac2be87487830698e23" + dependencies: + mime-db "~1.29.0" + + mime@1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" + + ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + + negotiator@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + + on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + dependencies: + ee-first "1.1.1" + + parseurl@~1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" + + path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + + proxy-addr@~1.1.4: + version "1.1.5" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.5.tgz#71c0ee3b102de3f202f3b64f608d173fcba1a918" + dependencies: + forwarded "~0.1.0" + ipaddr.js "1.4.0" + + qs@6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" + + range-parser@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + + raw-body@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.2.0.tgz#994976cf6a5096a41162840492f0bdc5d6e7fb96" + dependencies: + bytes "2.4.0" + iconv-lite "0.4.15" + unpipe "1.0.0" + + send@0.15.3: + version "0.15.3" + resolved "https://registry.yarnpkg.com/send/-/send-0.15.3.tgz#5013f9f99023df50d1bd9892c19e3defd1d53309" + dependencies: + debug "2.6.7" + depd "~1.1.0" + destroy "~1.0.4" + encodeurl "~1.0.1" + escape-html "~1.0.3" + etag "~1.8.0" + fresh "0.5.0" + http-errors "~1.6.1" + mime "1.3.4" + ms "2.0.0" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.3.1" + + serve-static@1.12.3: + version "1.12.3" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.12.3.tgz#9f4ba19e2f3030c547f8af99107838ec38d5b1e2" + dependencies: + encodeurl "~1.0.1" + escape-html "~1.0.3" + parseurl "~1.3.1" + send "0.15.3" + + setprototypeof@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" + + "statuses@>= 1.3.1 < 2", statuses@~1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" + + type-is@~1.6.15: + version "1.6.15" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" + dependencies: + media-typer "0.3.0" + mime-types "~2.1.15" + + unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + + utils-merge@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" + + vary@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.1.tgz#67535ebb694c1d52257457984665323f587e8d37" + +Trace: + Error: https://registry.yarnpkg.com/@types/request/-/request-0.0.43.tgz: Request failed "503 Service Unavailable" + at Request.handleRequestError (/usr/share/yarn/lib/yarn-cli.js:56351:20) + at emitOne (events.js:115:13) + at Request.emit (events.js:210:7) + at Request.onRequestResponse (/usr/share/yarn/lib/yarn-cli.js:115128:10) + at emitOne (events.js:115:13) + at ClientRequest.emit (events.js:210:7) + at HTTPParser.parserOnIncomingClient (_http_client.js:565:21) + at HTTPParser.parserOnHeadersComplete (_http_common.js:116:23) + at TLSSocket.socketOnData (_http_client.js:454:20) + at emitOne (events.js:115:13) diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..d9f4039 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,698 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@types/form-data@*": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@types/form-data/-/form-data-2.2.0.tgz#a98aac91dc99857b6af24caef7ca6df302f31565" + dependencies: + "@types/node" "*" + +"@types/node-feedparser@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@types/node-feedparser/-/node-feedparser-2.2.0.tgz#eccc5b5969be8603965f22dc22b8f805494d93ac" + dependencies: + "@types/node" "*" + "@types/sax" "*" + +"@types/node@*": + version "8.0.17" + resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.17.tgz#677bc8c118cfb76013febb62ede1f31d2c7222a1" + +"@types/request@0.0.43": + version "0.0.43" + resolved "https://registry.yarnpkg.com/@types/request/-/request-0.0.43.tgz#fcc59cfd88e63034e813c6884a0aade2d0f7e935" + dependencies: + "@types/form-data" "*" + "@types/node" "*" + +"@types/sax@*": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/sax/-/sax-1.0.0.tgz#30d5e6bdbf126daf6e412c639251dd974bd47cdc" + dependencies: + "@types/node" "*" + +accepts@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" + dependencies: + mime-types "~2.1.11" + negotiator "0.6.1" + +addressparser@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/addressparser/-/addressparser-1.0.1.tgz#47afbe1a2a9262191db6838e4fd1d39b40821746" + +ajv@^4.9.1: + version "4.11.8" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" + dependencies: + co "^4.6.0" + json-stable-stringify "^1.0.1" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + +array-indexofobject@~0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/array-indexofobject/-/array-indexofobject-0.0.1.tgz#aaa128e62c9b3c358094568c219ff64fe489d42a" + +asn1@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + +assert-plus@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + +aws-sign2@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" + +aws4@^1.2.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" + +axios@^0.16.2: + version "0.16.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.16.2.tgz#ba4f92f17167dfbab40983785454b9ac149c3c6d" + dependencies: + follow-redirects "^1.2.3" + is-buffer "^1.1.5" + +bcrypt-pbkdf@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" + dependencies: + tweetnacl "^0.14.3" + +body-parser@^1.17.2: + version "1.17.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.17.2.tgz#f8892abc8f9e627d42aedafbca66bf5ab99104ee" + dependencies: + bytes "2.4.0" + content-type "~1.0.2" + debug "2.6.7" + depd "~1.1.0" + http-errors "~1.6.1" + iconv-lite "0.4.15" + on-finished "~2.3.0" + qs "6.4.0" + raw-body "~2.2.0" + type-is "~1.6.15" + +boom@2.x.x: + version "2.10.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" + dependencies: + hoek "2.x.x" + +bytes@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + +combined-stream@^1.0.5, combined-stream@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" + dependencies: + delayed-stream "~1.0.0" + +content-disposition@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + +content-type@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + +cookie@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +cryptiles@2.x.x: + version "2.0.5" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" + dependencies: + boom "2.x.x" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + dependencies: + assert-plus "^1.0.0" + +debug@2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.7.tgz#92bad1f6d05bbb6bba22cca88bcd0ec894c2861e" + dependencies: + ms "2.0.0" + +debug@^2.4.5: + version "2.6.8" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" + dependencies: + ms "2.0.0" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +depd@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" + +depd@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + +ecc-jsbn@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + dependencies: + jsbn "~0.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + +encodeurl@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + +etag@~1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.0.tgz#6f631aef336d6c46362b51764044ce216be3c051" + +express@^4.15.3: + version "4.15.3" + resolved "https://registry.yarnpkg.com/express/-/express-4.15.3.tgz#bab65d0f03aa80c358408972fc700f916944b662" + dependencies: + accepts "~1.3.3" + array-flatten "1.1.1" + content-disposition "0.5.2" + content-type "~1.0.2" + cookie "0.3.1" + cookie-signature "1.0.6" + debug "2.6.7" + depd "~1.1.0" + encodeurl "~1.0.1" + escape-html "~1.0.3" + etag "~1.8.0" + finalhandler "~1.0.3" + fresh "0.5.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.1" + path-to-regexp "0.1.7" + proxy-addr "~1.1.4" + qs "6.4.0" + range-parser "~1.2.0" + send "0.15.3" + serve-static "1.12.3" + setprototypeof "1.0.3" + statuses "~1.3.1" + type-is "~1.6.15" + utils-merge "1.0.0" + vary "~1.1.1" + +extend@~3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" + +extsprintf@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" + +feedparser-promised@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/feedparser-promised/-/feedparser-promised-1.3.0.tgz#cc04a46d614750392a49d09bab65c543183a0efa" + dependencies: + "@types/node-feedparser" "2.2.0" + "@types/request" "0.0.43" + feedparser "^2.1.0" + request "^2.79.0" + +feedparser@^2.1.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/feedparser/-/feedparser-2.2.1.tgz#3f6909b76e531ea876cecfeab320802a1a6d0b92" + dependencies: + addressparser "^1.0.1" + array-indexofobject "~0.0.1" + lodash.assign "^4.2.0" + lodash.get "^4.4.2" + lodash.has "^4.5.2" + lodash.uniq "^4.5.0" + readable-stream "^2.2.2" + sax "1.2.3" + +finalhandler@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.3.tgz#ef47e77950e999780e86022a560e3217e0d0cc89" + dependencies: + debug "2.6.7" + encodeurl "~1.0.1" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.1" + statuses "~1.3.1" + unpipe "~1.0.0" + +follow-redirects@^1.2.3: + version "1.2.4" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.2.4.tgz#355e8f4d16876b43f577b0d5ce2668b9723214ea" + dependencies: + debug "^2.4.5" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + +form-data@~2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + +forwarded@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.0.tgz#19ef9874c4ae1c297bcf078fde63a09b66a84363" + +fresh@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + dependencies: + assert-plus "^1.0.0" + +graceful-fs@^4.1.6: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + +har-schema@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" + +har-validator@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" + dependencies: + ajv "^4.9.1" + har-schema "^1.0.5" + +hawk@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" + dependencies: + boom "2.x.x" + cryptiles "2.x.x" + hoek "2.x.x" + sntp "1.x.x" + +hoek@2.x.x: + version "2.16.3" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" + +http-errors@~1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.1.tgz#5f8b8ed98aca545656bf572997387f904a722257" + dependencies: + depd "1.1.0" + inherits "2.0.3" + setprototypeof "1.0.3" + statuses ">= 1.3.1 < 2" + +http-signature@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" + dependencies: + assert-plus "^0.2.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +iconv-lite@0.4.15: + version "0.4.15" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" + +inherits@2.0.3, inherits@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +ipaddr.js@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.4.0.tgz#296aca878a821816e5b85d0a285a99bcff4582f0" + +is-buffer@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + +json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + dependencies: + jsonify "~0.0.0" + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + +jsonfile@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + +jsprim@^1.2.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918" + dependencies: + assert-plus "1.0.0" + extsprintf "1.0.2" + json-schema "0.2.3" + verror "1.3.6" + +lodash.assign@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" + +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + +lodash.has@^4.5.2: + version "4.5.2" + resolved "https://registry.yarnpkg.com/lodash.has/-/lodash.has-4.5.2.tgz#d19f4dc1095058cccbe2b0cdf4ee0fe4aa37c862" + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + +mime-db@~1.29.0: + version "1.29.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.29.0.tgz#48d26d235589651704ac5916ca06001914266878" + +mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.15, mime-types@~2.1.7: + version "2.1.16" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.16.tgz#2b858a52e5ecd516db897ac2be87487830698e23" + dependencies: + mime-db "~1.29.0" + +mime@1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +negotiator@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + +oauth-sign@~0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + dependencies: + ee-first "1.1.1" + +parseurl@~1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + +performance-now@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" + +process-nextick-args@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" + +proxy-addr@~1.1.4: + version "1.1.5" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.5.tgz#71c0ee3b102de3f202f3b64f608d173fcba1a918" + dependencies: + forwarded "~0.1.0" + ipaddr.js "1.4.0" + +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + +qs@6.4.0, qs@~6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" + +range-parser@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + +raw-body@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.2.0.tgz#994976cf6a5096a41162840492f0bdc5d6e7fb96" + dependencies: + bytes "2.4.0" + iconv-lite "0.4.15" + unpipe "1.0.0" + +readable-stream@^2.2.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + safe-buffer "~5.1.1" + string_decoder "~1.0.3" + util-deprecate "~1.0.1" + +request@^2.79.0: + version "2.81.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.1.1" + har-validator "~4.2.1" + hawk "~3.1.3" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + oauth-sign "~0.8.1" + performance-now "^0.2.0" + qs "~6.4.0" + safe-buffer "^5.0.1" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "^0.6.0" + uuid "^3.0.0" + +safe-buffer@^5.0.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + +sax@1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.3.tgz#a6134f5f11259b9a563f2f976bcf759d144803e3" + +send@0.15.3: + version "0.15.3" + resolved "https://registry.yarnpkg.com/send/-/send-0.15.3.tgz#5013f9f99023df50d1bd9892c19e3defd1d53309" + dependencies: + debug "2.6.7" + depd "~1.1.0" + destroy "~1.0.4" + encodeurl "~1.0.1" + escape-html "~1.0.3" + etag "~1.8.0" + fresh "0.5.0" + http-errors "~1.6.1" + mime "1.3.4" + ms "2.0.0" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.3.1" + +serve-static@1.12.3: + version "1.12.3" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.12.3.tgz#9f4ba19e2f3030c547f8af99107838ec38d5b1e2" + dependencies: + encodeurl "~1.0.1" + escape-html "~1.0.3" + parseurl "~1.3.1" + send "0.15.3" + +setprototypeof@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" + +sntp@1.x.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" + dependencies: + hoek "2.x.x" + +sshpk@^1.7.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + +"statuses@>= 1.3.1 < 2", statuses@~1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" + +string_decoder@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" + dependencies: + safe-buffer "~5.1.0" + +stringstream@~0.0.4: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" + +tough-cookie@~2.3.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" + dependencies: + punycode "^1.4.1" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + +type-is@~1.6.15: + version "1.6.15" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" + dependencies: + media-typer "0.3.0" + mime-types "~2.1.15" + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +utils-merge@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" + +uuid@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" + +vary@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.1.tgz#67535ebb694c1d52257457984665323f587e8d37" + +verror@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" + dependencies: + extsprintf "1.0.2"