diff --git a/.eslintrc b/.eslintrc index e0967bb..9762e4e 100644 --- a/.eslintrc +++ b/.eslintrc @@ -4,6 +4,7 @@ "no-console": 0, "no-restricted-syntax": 0, "no-await-in-loop": 0, - "no-param-reassign": 0 + "no-param-reassign": 0, + "no-shadow": 0 } } \ No newline at end of file diff --git a/config.json b/config.json index f18c711..eeca6b4 100644 --- a/config.json +++ b/config.json @@ -1,3 +1,78 @@ { - "catchall": "spotimail.com" + "discord": { + "token": "NTc3OTM5NjA1NjA1ODQyOTQ2.XNsW6Q.px9rRxM4wY7838PSDQWa6ni1m3Q", + "prefix": ".", + "activity": "v{VERSION}", + "defaultTokenSet": "bots.json", + "admins": ["471344177045569546", "448294491032518666"], + "channels": { + "hq-trivia": "568926468290248734", + "hq-words": "568926468290248734", + "confetti": "568927056172285981" + } + }, + "crowdsource": { + "userToken": "NTQxNjYyNjgyODM1ODQ1MTIw.D0Y3TA.xnJuTkmYwI7ckwCkhGbkcMHsgR8", + "keywords": [ + { "keyword": "{num}", "weight": 5 }, + { "keyword": "{num}{num}", "weight": 5 }, + { "keyword": "def {num}", "weight": 6 }, + { "keyword": "its {num}", "weight": 6 }, + { "keyword": "{num} apg", "weight": 6 }, + { "keyword": "{num} apb", "weight": 6 }, + { "keyword": "{num} apddg", "weight": 6 }, + { "keyword": "conf {num}", "weight": 6 }, + { "keyword": "{num}?", "weight": 3 }, + { "keyword": "{num}/", "weight": 3 }, + { "keyword": "w{num}", "weight": 1 }, + { "keyword": "?{num}", "weight": 3 }, + { "keyword": "not {num}", "weight": -6 }, + { "keyword": "n{num}", "weight": -6 }, + { "keyword": "ban {num}", "weight": -6 }, + { "keyword": "not {num}?", "weight": -3 }, + { "keyword": "n{num}?", "weight": -3 } + ], + "channels": { + "hq": [ + { "id": "568926468290248734", "weight": 4, "name": "HUB" }, + { "id": "459842150323060736", "weight": 2, "name": "Trivia Dimension" }, + { "id": "525131707410677761", "weight": 3, "name": "Trivia Tribe" }, + { "id": "513818250652680213", "weight": 2, "name": "Trivia World" }, + { "id": "523359669280833536", "weight": 2, "name": "Trivia Games Live" }, + { "id": "535628205139296256", "weight": 2, "name": "Trivia Nation" }, + { "id": "568617830258442255", "weight": 2, "name": "Trivia Revolution" }, + { "id": "566622019232202758", "weight": 2, "name": "Galaxy United Nation" } + ], + "confetti": [ + { "id": "568927056172285981", "weight": 4, "name": "HUB" }, + { "id": "523359734406053889", "weight": 2, "name": "Trivia Games Live" }, + { "id": "529487355804123176", "weight": 3, "name": "Trivia Tribe" }, + { "id": "514915010955313153", "weight": 2, "name": "Trivia World" }, + { "id": "535628245371060234", "weight": 1, "name": "Trivia Nation" } + ], + "loco": [ + { "id": "570155872861290519", "weight": 2, "name": "Study IQ" }, + { "id": "566621341478944778", "weight": 3, "name": "Galaxy United Nation" }, + { "id": "571684755016515584", "weight": 3, "name": "Galaxy United Nation Private" } + ] + } + }, + "google": { + "id": "006883007914406821508:5viuurulssa", + "key": "AIzaSyDOb7WFUKrJdPKvWHurpOuU2hqaCAclzfs", + "negations": [ + "neither", + "not", + "fewest", + "hasnt", + "isnt", + "least", + "never", + "wont", + "shortest", + "won't", + "isn't", + "hasn't" + ] + } } \ No newline at end of file diff --git a/package.json b/package.json index 67f2fc0..59cf083 100644 --- a/package.json +++ b/package.json @@ -1,15 +1,18 @@ { "name": "emu", - "version": "1.0.0", + "version": "0.0.3", "main": "src/index.js", "repository": "https://github.com/vilP1l/emu", "author": "vilP1L ", "license": "MIT", "private": true, "dependencies": { + "canvas": "^2.5.0", "colors": "^1.3.3", + "discord.js": "https://github.com/discordjs/discord.js", "enquirer": "^2.3.0", "faker": "^4.1.0", + "jsonwebtoken": "^8.5.1", "request": "^2.88.0", "ws": "^7.0.0" }, diff --git a/src/classes/Client.js b/src/classes/Client.js index c81d69d..50a0c2f 100644 --- a/src/classes/Client.js +++ b/src/classes/Client.js @@ -7,13 +7,14 @@ import faker from 'faker'; request.promise = promisify(request); export default class Client { - constructor(loginToken, index) { - if (!loginToken) throw new Error('No login token was provided.'); + constructor({ accessToken, loginToken }, index) { + if (!accessToken || !loginToken) throw new Error('Insufficient account credentials provided.'); this.index = index || 0; if (index === 0 || !index) this.master = true; + this.accessToken = accessToken; this.loginToken = loginToken; this.headers = { - 'x-hq-client': 'Android/1.28.2', + 'x-hq-client': 'Android/1.33.0', 'user-agent': 'okhttp/3.8.0', 'x-hq-lang': 'en', 'x-hq-country': 'US', @@ -76,7 +77,7 @@ export default class Client { const i = setInterval(() => { if (this.ws.readyState !== this.ws.OPEN) return clearInterval(i); this.ws.ping(); - if (this.debug) console.log(`${` Client ${this.index} `.bgBlue.black}${' PING '.bgGreen.black}`); + if (this.debug) console.log(`${` Client ${this.index} [DEBUG] `.bgBlue.black}${' PING '.bgGreen.black}`); return true; }, 5000); this.subscribe(); @@ -88,6 +89,10 @@ export default class Client { return true; } + disconnect() { + this.ws.close(); + } + subscribe() { if (!this.ws || this.ws.readyState !== this.ws.OPEN) throw new Error('No WebSocket connection is active.'); this.ws.send(JSON.stringify({ @@ -129,7 +134,10 @@ export default class Client { submitAnswer(index) { if (!this.inTheGame) return; if (!this.ws || this.ws.readyState !== this.ws.OPEN) throw new Error('No WebSocket connection is active.'); - if (index > 2 || index < 0) return; + if (index > 2 || index < 0) { + if (this.debug) console.log(`${` Client ${this.index} [DEBUG] `.bgBlue.black}${' Invalid index given to submitAnswer. '.bgRed.black}`); + return; + } const { answerId } = this.answers[index]; if (!answerId) return; this.ws.send(JSON.stringify({ @@ -183,4 +191,9 @@ export default class Client { if (this.logging) console.log(`${` Client ${this.index} `.bgBlue.black}${` Successfully cashed out to ${this.email}! `.bgGreen.black}`); return true; } + + async getUserData() { + const { body } = await request.promise('https://api-quiz.hype.space/users/me', { headers: this.headers }); + return JSON.parse(body); + } } diff --git a/src/classes/CrowdClient.js b/src/classes/CrowdClient.js new file mode 100644 index 0000000..38cf5a5 --- /dev/null +++ b/src/classes/CrowdClient.js @@ -0,0 +1,30 @@ +import { Client } from 'discord.js'; +import { crowdsource } from '../../config'; + +export default class CrowdClient extends Client { + constructor(options, client) { + super(options); + this.client = client; + this.login(options.token); + this.on('message', (msg) => { + const games = Object.keys(crowdsource.channels); + games.forEach((g) => { + const channels = crowdsource.channels[g].map(c => c.id); + const weights = crowdsource.channels[g].map(c => c.weight); + if (channels.includes(msg.channel.id)) { + if (msg.content.match(/[1-3]/g)) { + const weight = weights[channels.indexOf(msg.channel.id)]; + let m; + m = msg.content.toLowerCase(); + m = m.split(' ').join(''); + crowdsource.keywords.forEach((k) => { + k.keywordNum = k.keyword.replace(/{num}/g, m.match(/[1-3]/g)[0]); + k.keywordNum = k.keywordNum.split(' ').join(''); + if (m === k.keywordNum) client.weights[g][m.match(/[1-3]/g)[0] - 1] += k.weight * weight; + }); + } + } + }); + }); + } +} diff --git a/src/fonts/CircularStd-Black.ttf b/src/fonts/CircularStd-Black.ttf new file mode 100644 index 0000000..7e88c61 Binary files /dev/null and b/src/fonts/CircularStd-Black.ttf differ diff --git a/src/fonts/CircularStd-Medium.ttf b/src/fonts/CircularStd-Medium.ttf new file mode 100644 index 0000000..4b50d1e Binary files /dev/null and b/src/fonts/CircularStd-Medium.ttf differ diff --git a/src/modules/img.js b/src/modules/img.js new file mode 100644 index 0000000..f9f9245 --- /dev/null +++ b/src/modules/img.js @@ -0,0 +1,133 @@ +import { createCanvas, registerFont } from 'canvas'; + +export const genResults = async (game, winners, winnings, accuracy) => { + const roundRect = (ctx, x, y, width, height, radius, fill, stroke) => { + if (typeof stroke === 'undefined') { + stroke = true; + } + if (typeof radius === 'undefined') { + radius = 5; + } + ctx.beginPath(); + ctx.moveTo(x + radius, y); + ctx.lineTo(x + width - radius, y); + ctx.quadraticCurveTo(x + width, y, x + width, y + radius); + ctx.lineTo(x + width, y + height - radius); + ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height); + ctx.lineTo(x + radius, y + height); + ctx.quadraticCurveTo(x, y + height, x, y + height - radius); + ctx.lineTo(x, y + radius); + ctx.quadraticCurveTo(x, y, x + radius, y); + ctx.closePath(); + if (stroke) { + ctx.stroke(); + } + if (fill) { + ctx.fill(); + } + }; + + const canvas = createCanvas(450, 230); + const ctx = canvas.getContext('2d'); + registerFont('src/utils/CircularStd-Black.ttf', { family: 'Circular' }); + registerFont('src/utils/CircularStd-Medium.ttf', { family: 'CircularMed', weight: 100 }); + switch (game) { + case 'HQ Trivia': + ctx.fillStyle = 'rgba(52, 58, 153, 1)'; + ctx.strokeStyle = 'rgba(54, 60, 152, 1)'; + break; + case 'Loco Trivia': + ctx.fillStyle = 'rgba(39, 32, 69, 1)'; + ctx.strokeStyle = 'rgba(39, 32, 69, 1)'; + break; + case 'Confetti Trivia': + ctx.fillStyle = 'rgba(66, 102, 171, 1)'; + ctx.strokeStyle = 'rgba(66, 102, 171, 1)'; + break; + default: + ctx.fillStyle = 'rgba(52, 58, 153, 1)'; + ctx.strokeStyle = 'rgba(54, 60, 152, 1)'; + break; + } + roundRect(ctx, 0, 0, canvas.width, canvas.height, 40, true, true); + ctx.fillStyle = 'white'; + ctx.font = '45px Circular'; + ctx.fillText(game, (canvas.width / 2) - (ctx.measureText(game).width / 2), 70); + ctx.strokeStyle = 'white'; + ctx.lineWidth = 5; + roundRect(ctx, 2, 2, canvas.width - 4, canvas.height - 4, 40, false, true); + ctx.beginPath(); + ctx.moveTo((canvas.width / 2) - (ctx.measureText(game).width / 2), 80); + ctx.lineTo((canvas.width / 2) + (ctx.measureText(game).width / 2), 80); + ctx.stroke(); + ctx.font = '25px CircularMed'; + ctx.fillText(`${winners.toLocaleString('en')} players won ${winnings}`, (canvas.width / 2) - (ctx.measureText(`${winners.toLocaleString('en')} Players won ${winnings}`).width / 2), 125); + ctx.fillText(`Accuracy: ${accuracy}`, (canvas.width / 2) - (ctx.measureText(`Accuracy: ${accuracy}`).width / 2), 165); + ctx.font = '15px Circular'; + ctx.fillText('Trivia Orchard | invite.gg/orchard', (canvas.width / 2) - (ctx.measureText('Trivia Orchard | invite.gg/orchard').width / 2), canvas.height - 20); + return canvas.toBuffer(); +}; + +export const getWordsImage = (puzzleState) => { + const puzzleStateLengths = puzzleState.map(i => i.length); + const biggestLength = Math.max(...puzzleStateLengths); + const canvas = createCanvas(biggestLength * 90 + 100, puzzleState.length * 130 + 75); + const ctx = canvas.getContext('2d'); + registerFont('src/utils/CircularStd-Black.ttf', { family: 'Circular' }); + registerFont('src/utils/CircularStd-Medium.ttf', { family: 'CircularMed', weight: 100 }); + + const roundRect = (ctx, x, y, width, height, radius, fill, stroke) => { + if (typeof stroke === 'undefined') { + stroke = true; + } + if (typeof radius === 'undefined') { + radius = 5; + } + ctx.beginPath(); + ctx.moveTo(x + radius, y); + ctx.lineTo(x + width - radius, y); + ctx.quadraticCurveTo(x + width, y, x + width, y + radius); + ctx.lineTo(x + width, y + height - radius); + ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height); + ctx.lineTo(x + radius, y + height); + ctx.quadraticCurveTo(x, y + height, x, y + height - radius); + ctx.lineTo(x, y + radius); + ctx.quadraticCurveTo(x, y, x + radius, y); + ctx.closePath(); + if (stroke) { + ctx.stroke(); + } + if (fill) { + ctx.fill(); + } + }; + + const wordsLetter = (ctx, letter, x, y, scale) => { + ctx.fillStyle = 'white'; + ctx.strokeStyle = 'white'; + ctx.shadowBlur = 10; + ctx.shadowColor = 'black'; + roundRect(ctx, x, y, scale * 40, scale * 50, 10, true, true); + ctx.fillStyle = 'black'; + const fontSize = 25 * scale; + ctx.font = `${fontSize}px Circular`; + ctx.textAlign = 'center'; + ctx.textBaseline = 'middle'; + ctx.shadowBlur = 0; + ctx.fillText(letter, x + 20 * scale, y + 25 * scale); + }; + + let x = 50; + let y = 50; + // eslint-disable-next-line no-restricted-syntax + for (const state of puzzleState) { + // eslint-disable-next-line no-restricted-syntax + for (const letter of state) { + wordsLetter(ctx, letter, x, y, 2); + x += 90; + } + x = 50; + y += 130; + } + return canvas.toBuffer(); +}; diff --git a/src/utils/getTokens.js b/src/utils/getTokens.js new file mode 100644 index 0000000..c71b8b7 --- /dev/null +++ b/src/utils/getTokens.js @@ -0,0 +1,7 @@ +import fs from 'fs'; + +export default (file) => { + if (!file) throw new Error('No file was provided.'); + const contents = fs.readFileSync(`./tokens/${file}`, 'UTF8'); + return JSON.parse(contents); +}; diff --git a/src/utils/google.js b/src/utils/google.js new file mode 100644 index 0000000..3cd7454 --- /dev/null +++ b/src/utils/google.js @@ -0,0 +1,29 @@ +import request from 'request'; +import { promisify } from 'util'; +import { google } from '../../config'; + +request.promise = promisify(request); + +export default async (query, answers) => { + const { body } = await request.promise(`https://www.googleapis.com/customsearch/v1?cx=${google.id}&key=${google.key}&q=${query}`); + const { searchInformation, items } = JSON.parse(body); + if (searchInformation.totalResults === '0') return [0, 0, 0]; + let weights = [0, 0, 0]; + for (let i = 0; i < 3; i += 1) { + for (const item of items) { + const regex = new RegExp(answers[i].text, 'gi'); + const snippet = item.snippet.match(regex) || []; + const title = item.title.match(regex) || []; + weights[i] += snippet.length * 2; + weights[i] += title.length; + } + } + const includesNegation = (negation) => { + const Regex = new RegExp(negation, 'gi'); + return query.match(Regex); + }; + if (google.negations.some(includesNegation)) { + weights = weights.map(w => weights.reduce((a, b) => a + b) - w); + } + return weights; +}; diff --git a/src/modules/hq-checklives.js b/src/utils/img.js similarity index 100% rename from src/modules/hq-checklives.js rename to src/utils/img.js diff --git a/yarn.lock b/yarn.lock index c64080d..3ad35b8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -879,7 +879,7 @@ async-each@^1.0.1: resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== -async-limiter@^1.0.0: +async-limiter@^1.0.0, async-limiter@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== @@ -990,6 +990,11 @@ browserslist@^4.5.2, browserslist@^4.5.4: electron-to-chromium "^1.3.127" node-releases "^1.1.17" +buffer-equal-constant-time@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" + integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= + buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -1020,6 +1025,15 @@ caniuse-lite@^1.0.30000963: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000967.tgz#a5039577806fccee80a04aaafb2c0890b1ee2f73" integrity sha512-rUBIbap+VJfxTzrM4akJ00lkvVb5/n5v3EGXfWzSH5zT8aJmGzjA8HWhJ4U6kCpzxozUSnB+yvAYDRPY6mRpgQ== +canvas@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/canvas/-/canvas-2.5.0.tgz#cf0ef59d4790575689c0d50e59c7b8023a11f38a" + integrity sha512-wwRz2cLMgb9d+rnotOJCoc04Bzj3aJMpWc6JxAD6lP7bYz0ldcn0sKddoZ0vhD5T8HBxrK+XmRDJb68/2VqARw== + dependencies: + nan "^2.13.2" + node-pre-gyp "^0.11.0" + simple-get "^3.0.3" + caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -1231,6 +1245,13 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + dependencies: + mimic-response "^1.0.0" + deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" @@ -1285,6 +1306,18 @@ detect-libc@^1.0.2: resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= +"discord.js@https://github.com/discordjs/discord.js": + version "12.0.0-dev" + resolved "https://github.com/discordjs/discord.js#72dd872fce70754b0f7616f3d31b5616a48c7188" + dependencies: + form-data "^2.3.3" + node-fetch "^2.3.0" + pako "^1.0.8" + prism-media "^1.0.0" + setimmediate "^1.0.5" + tweetnacl "^1.0.1" + ws "^6.1.3" + doctrine@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" @@ -1308,6 +1341,13 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" +ecdsa-sig-formatter@1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" + integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== + dependencies: + safe-buffer "^5.0.1" + electron-to-chromium@^1.3.127: version "1.3.133" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.133.tgz#c47639c19b91feee3e22fad69f5556142007008c" @@ -1660,7 +1700,7 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= -form-data@~2.3.2: +form-data@^2.3.3, form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== @@ -2181,6 +2221,22 @@ json5@^2.1.0: dependencies: minimist "^1.2.0" +jsonwebtoken@^8.5.1: + version "8.5.1" + resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" + integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w== + dependencies: + jws "^3.2.2" + lodash.includes "^4.3.0" + lodash.isboolean "^3.0.3" + lodash.isinteger "^4.0.4" + lodash.isnumber "^3.0.3" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.once "^4.0.0" + ms "^2.1.1" + semver "^5.6.0" + jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -2191,6 +2247,23 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" +jwa@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" + integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== + dependencies: + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jws@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" + integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== + dependencies: + jwa "^1.4.1" + safe-buffer "^5.0.1" + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -2249,6 +2322,41 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" +lodash.includes@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" + integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8= + +lodash.isboolean@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" + integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= + +lodash.isinteger@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" + integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M= + +lodash.isnumber@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" + integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w= + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= + +lodash.once@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= + lodash@^4.17.10, lodash@^4.17.11: version "4.17.11" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" @@ -2317,6 +2425,11 @@ mimic-fn@^1.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -2379,7 +2492,7 @@ mute-stream@0.0.7: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= -nan@^2.12.1: +nan@^2.12.1, nan@^2.13.2: version "2.13.2" resolved "https://registry.yarnpkg.com/nan/-/nan-2.13.2.tgz#f51dc7ae66ba7d5d55e1e6d4d8092e802c9aefe7" integrity sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw== @@ -2420,11 +2533,32 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== +node-fetch@^2.3.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.5.0.tgz#8028c49fc1191bba56a07adc6e2a954644a48501" + integrity sha512-YuZKluhWGJwCcUu4RlZstdAxr8bFfOVHakc1mplwHkk8J+tqM1Y5yraYvIUpeX8aY7+crCwiELJq7Vl0o0LWXw== + node-modules-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= +node-pre-gyp@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz#db1f33215272f692cd38f03238e3e9b47c5dd054" + integrity sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q== + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.1" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.2.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4" + node-pre-gyp@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" @@ -2564,7 +2698,7 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -once@^1.3.0: +once@^1.3.0, once@^1.3.1: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= @@ -2655,6 +2789,11 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +pako@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" + integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -2762,6 +2901,11 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= +prism-media@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/prism-media/-/prism-media-1.0.2.tgz#1e0f097f67d799211177a50d5276fdd2ef1c7fd7" + integrity sha512-KCu3SlT1EtS0lvF74NGLSTzr5jrkRajE9n+S2jnUvvdiN5SpjsGj0/HgR1QK9+985Yv8cxjwZnpFRaj+SimDGA== + private@^0.1.6: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" @@ -3061,6 +3205,11 @@ set-value@^2.0.0: is-plain-object "^2.0.3" split-string "^3.0.1" +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -3078,6 +3227,20 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= +simple-concat@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6" + integrity sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY= + +simple-get@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.0.3.tgz#924528ac3f9d7718ce5e9ec1b1a69c0be4d62efa" + integrity sha512-Wvre/Jq5vgoz31Z9stYWPLn0PqRqmBDpFSdypAnHu5AvRVCYPRYGnvryNLiXu8GOBNDH82J2FRHUGMjjHUpXFw== + dependencies: + decompress-response "^3.3.0" + once "^1.3.1" + simple-concat "^1.0.0" + slash@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" @@ -3388,6 +3551,11 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= +tweetnacl@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.1.tgz#2594d42da73cd036bd0d2a54683dd35a6b55ca17" + integrity sha512-kcoMoKTPYnoeS50tzoqjPY3Uv9axeuuFAZY9M/9zFnhoVvRfxz9K29IMPD7jGmt2c8SW7i3gT9WqDl2+nV7p4A== + type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" @@ -3523,6 +3691,13 @@ write@1.0.3: dependencies: mkdirp "^0.5.1" +ws@^6.1.3: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + dependencies: + async-limiter "~1.0.0" + ws@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/ws/-/ws-7.0.0.tgz#79351cbc3f784b3c20d0821baf4b4ff809ffbf51"