diff --git a/client/src/views/Summoner.vue b/client/src/views/Summoner.vue index 8df7cd8..b9aa057 100644 --- a/client/src/views/Summoner.vue +++ b/client/src/views/Summoner.vue @@ -121,7 +121,7 @@ export default { }, created: function () { - this.getData() + this.getChampionData() }, mounted: function () { this.checkLocalStorage() @@ -260,11 +260,18 @@ export default { this.loading = false }, - getData() { + getChampionData() { console.log('API CALL FOR CHAMPIONS') + const endpoint = 'Champion' this.axios({ - method: 'GET', - url: `https://ddragon.leagueoflegends.com/cdn/${this.$patch}/data/en_US/champion.json` + method: 'POST', + url: process.env.NODE_ENV === 'development' ? 'http://localhost:5000/ddragon' : 'https://api.valentinkaelin.ch/ddragon', + headers: { + 'Content-Type': 'application/json' + }, + data: { + endpoint + } }) .then(response => { return response.data diff --git a/server/package-lock.json b/server/package-lock.json index 7b0058e..dadc9d8 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -898,6 +898,19 @@ "to-fast-properties": "^2.0.0" } }, + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "requires": { + "defer-to-connect": "^1.0.1" + } + }, "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -1233,6 +1246,35 @@ "unset-value": "^1.0.0" } }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", + "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + } + } + }, "caniuse-lite": { "version": "1.0.30000989", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz", @@ -1299,6 +1341,14 @@ } } }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "requires": { + "mimic-response": "^1.0.0" + } + }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", @@ -1482,6 +1532,19 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "defer-to-connect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.0.2.tgz", + "integrity": "sha512-k09hcQcTDY+cwgiwa6PYKLm3jlagNzQ+RSvhjzESOGOx+MNOuXkxTfEvPrO1IOQ81tArCFYQgi631clB70RpQw==" + }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -1552,6 +1615,11 @@ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz", "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==" }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -1577,6 +1645,14 @@ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "requires": { + "once": "^1.4.0" + } + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -2460,6 +2536,14 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -2517,6 +2601,24 @@ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } + }, "graceful-fs": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", @@ -2603,6 +2705,11 @@ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.4.tgz", "integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==" }, + "http-cache-semantics": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.0.3.tgz", + "integrity": "sha512-TcIMG3qeVLgDr1TEd2XvHaTnMPwYQUQMIBLy+5pLSDKYFc7UIqj39w8EGzZkaxoLv/l2K8HaI0t5AVA+YYgUew==" + }, "http-errors": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", @@ -2886,6 +2993,11 @@ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + }, "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", @@ -2921,6 +3033,14 @@ "verror": "1.10.0" } }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "requires": { + "json-buffer": "3.0.0" + } + }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", @@ -2961,6 +3081,11 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + }, "make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", @@ -3048,6 +3173,11 @@ "mime-db": "~1.37.0" } }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -3186,6 +3316,11 @@ "dev": true, "optional": true }, + "normalize-url": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.3.0.tgz", + "integrity": "sha512-0NLtR71o4k6GLP+mr6Ty34c5GA6CMoEsncKJxvQd8NzPxaHRJNnb5gZE8R1XF4CPIS7QPHLJ74IFszwtNVAHVQ==" + }, "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", @@ -3290,7 +3425,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { "wrappy": "1" } @@ -3306,6 +3440,11 @@ "mkdirp": "^0.5.1" } }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" + }, "p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", @@ -3473,6 +3612,11 @@ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", "dev": true }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + }, "private": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", @@ -3500,6 +3644,15 @@ "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==" }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -3743,6 +3896,14 @@ "on-headers": "~1.0.1" } }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "requires": { + "lowercase-keys": "^1.0.0" + } + }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", @@ -4164,6 +4325,11 @@ } } }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" + }, "to-regex": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", @@ -4356,6 +4522,14 @@ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", "dev": true }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "requires": { + "prepend-http": "^2.0.0" + } + }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", @@ -4424,8 +4598,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" } } } diff --git a/server/package.json b/server/package.json index 19ada16..069ee12 100644 --- a/server/package.json +++ b/server/package.json @@ -18,6 +18,7 @@ "cors": "^2.8.5", "dotenv": "^7.0.0", "express": "^4.17.1", + "got": "^9.6.0", "request": "^2.88.0", "request-promise": "^4.2.4", "response-time": "^2.3.2", diff --git a/server/src/Jax/DDragonRequest.js b/server/src/Jax/DDragonRequest.js new file mode 100644 index 0000000..6946a97 --- /dev/null +++ b/server/src/Jax/DDragonRequest.js @@ -0,0 +1,33 @@ +import got from 'got' + +class DDragonRequest { + constructor(endpoint, type, version) { + this.endpoint = endpoint + this.type = type + this.version = version + + this.lang = 'en_US' + } + + // https://ddragon.leagueoflegends.com/cdn/${this.$patch}/data/en_US/champion.json + // https://ddragon.leagueoflegends.com/api/versions.json + + async execute() { + let url; + if (this.version) { + url = `https://ddragon.leagueoflegends.com/${this.type}/${this.version}/data/${this.lang}/${this.endpoint}` + } else { + url = `https://ddragon.leagueoflegends.com/${this.type}/${this.endpoint}` + } + + try { + const response = await got(url); + return JSON.parse(response.body) + } catch (error) { + console.log(error.response.body); + } + } + +} + +export default DDragonRequest diff --git a/server/src/Jax/Endpoints/DDragonEndpoints/DDragonChampionEndpoint.js b/server/src/Jax/Endpoints/DDragonEndpoints/DDragonChampionEndpoint.js new file mode 100644 index 0000000..187778f --- /dev/null +++ b/server/src/Jax/Endpoints/DDragonEndpoints/DDragonChampionEndpoint.js @@ -0,0 +1,17 @@ +import DDragonRequest from '../../DDragonRequest' + +class DDragonChampionEndpoint { + constructor(version) { + this.version = version + } + + list() { + return new DDragonRequest( + `champion.json`, + 'cdn', + this.version + ).execute() + } +} + +export default DDragonChampionEndpoint diff --git a/server/src/Jax/Endpoints/DDragonEndpoints/DDragonVersionEndpoint.js b/server/src/Jax/Endpoints/DDragonEndpoints/DDragonVersionEndpoint.js new file mode 100644 index 0000000..9fb7812 --- /dev/null +++ b/server/src/Jax/Endpoints/DDragonEndpoints/DDragonVersionEndpoint.js @@ -0,0 +1,13 @@ +import DDragonRequest from '../../DDragonRequest' + +class DDragonVersionEndpoint { + list() { + return new DDragonRequest( + `versions.json`, + 'api', + null + ).execute() + } +} + +export default DDragonVersionEndpoint diff --git a/server/src/Jax/Jax.js b/server/src/Jax/Jax.js index c7f32dd..6a05469 100644 --- a/server/src/Jax/Jax.js +++ b/server/src/Jax/Jax.js @@ -1,16 +1,31 @@ -const RiotRateLimiter = require('riot-ratelimiter') +import RiotRateLimiter from 'riot-ratelimiter' import SummonerEndpoint from './Endpoints/SummonerEndpoint' +import DDragonVersionEndpoint from './Endpoints/DDragonEndpoints/DDragonVersionEndpoint' +import DDragonChampionEndpoint from './Endpoints/DDragonEndpoints/DDragonChampionEndpoint' + class Jax { constructor(key = process.env.API_KEY, region = 'euw1') { - this.key = key - this.limiter = new RiotRateLimiter() - this.region = region + return (async () => { + this.key = key + this.limiter = new RiotRateLimiter() + this.region = region + + this.Summoner = new SummonerEndpoint(this.limiter, this.region) + + this.version = (await new DDragonVersionEndpoint().list())[0] + + this.DDragon = { + Champion: new DDragonChampionEndpoint(this.version), + Version: this.version + } + + return this + })() - this.Summoner = new SummonerEndpoint(this.limiter, this.region) } - + set regionName(regionName) { this.region = regionName } diff --git a/server/src/Jax/JaxRequest.js b/server/src/Jax/JaxRequest.js index 5bf9411..d97fedf 100644 --- a/server/src/Jax/JaxRequest.js +++ b/server/src/Jax/JaxRequest.js @@ -1,7 +1,6 @@ class JaxRequest { constructor(endpoint, limiter, region) { this.endpoint = endpoint - this.region = region this.limiter = limiter this.region = region } diff --git a/server/src/server.js b/server/src/server.js index 89c6f16..7eb554a 100644 --- a/server/src/server.js +++ b/server/src/server.js @@ -20,9 +20,6 @@ const data = { finalJSON: {} } -/* Setup Riot API Wrapper */ -const jax = new Jax() - /* Set Port */ app.set('port', (process.env.PORT || 5000)) @@ -44,8 +41,14 @@ app.use(bodyParser.urlencoded({ // to support URL-encoded bodies // Create a middleware that adds a X-Response-Time header to responses app.use(responseTime()); +// Setup Jax +let jax + /* Launch app */ -app.listen(app.get('port'), () => console.log(`RiotAPI app listening on port ${app.get('port')}!`)) +app.listen(app.get('port'), async () => { + console.log(`RiotAPI app listening on port ${app.get('port')}!`) + jax = await new Jax() +}) // Send data of a summoner app.post('/api', function (req, res) { @@ -57,17 +60,25 @@ app.post('/api', function (req, res) { data.region = req.body.region; data.username = req.body.summoner; - jax.regionName = req.body.region newVersion() data.finalJSON = {}; getAccountInfos(res); }); +/* Get static file from Riot API */ +app.post('/ddragon', async function (req, res) { + console.log('DDragon Request'); + const endpoint = req.body.endpoint + const result = await jax.DDragon[endpoint].list() + res.send(result) +}) + /* Refactor with the Jax Wrapper */ async function newVersion() { - const { id, accountId } = await jax.Summoner.summonerName(data.username) + jax.regionName = data.region + const { id, accountId } = await jax.Summoner.summonerName(data.username) console.log(id, accountId) }