diff --git a/package.json b/package.json
index 68017cf..9d0eae5 100644
--- a/package.json
+++ b/package.json
@@ -8,6 +8,7 @@
},
"dependencies": {
"express": "^4.17.1",
+ "mongoose": "^5.9.17",
"nodemailer": "^6.4.6",
"puppeteer": "^3.0.4"
}
diff --git a/src/db.js b/src/db.js
new file mode 100644
index 0000000..41d1367
--- /dev/null
+++ b/src/db.js
@@ -0,0 +1,33 @@
+const mongoose = require('mongoose');
+mongoose.connect("mongodb://localhost:27017/ispmonitor", {
+ useNewUrlParser: true
+});
+
+const Event = require('./schemas/Event');
+
+const commitServiceEventToDatabase = async (serviceMessages, pdfFilename) => {
+ try {
+ // we only care about the second message
+ const message = serviceMessages[1]
+ const event = new Event({
+ date: new Date(),
+ isOk: message.isOk,
+ message: message.statusText,
+ pdfFilename
+ })
+
+ await event.save();
+ return serviceMessages
+ } catch (err) {
+ console.error('error from mongoose:')
+ console.error(err)
+ return serviceMessages
+ }
+}
+
+const getAllEvents = () => Event.find().exec()
+
+module.exports = {
+ commitServiceEventToDatabase,
+ getAllEvents
+}
\ No newline at end of file
diff --git a/src/index.js b/src/index.js
index cbe6446..9aeb356 100644
--- a/src/index.js
+++ b/src/index.js
@@ -6,13 +6,17 @@ const config = require('../config')
const Mail = require( './mail.js');
const mail = new Mail();
+const { commitServiceEventToDatabase, getAllEvents } = require('./db.js');
+
let browser = undefined;
if (config.debug == false)
console.log = () => {}
+const pdfFilename = config['pdfFilename'] || 'telenor-downtime.pdf';
+
const savePageToPDF = page => {
const pdfOptions = {
- path: `telenor-downtime.pdf`,
+ path: pdfFilename,
format: "A4",
printBackground: true,
displayHeaderFooter: true,
@@ -51,8 +55,7 @@ const exitWithError = (err, message=undefined) => {
if (config.debug === true)
console.error(err)
- closeBrowser();
- process.exit(1);
+ closeBrowserAndExit(1);
}
const dismissCookiePrompt = page => {
@@ -110,8 +113,9 @@ const webscraper = async pageURL => {
.catch(err => exitWithError(err, `Unable to reach url: ${pageURL}`))
}
-function closeBrowser() {
+function closeBrowserAndExit(status=0) {
browser.close();
+ process.exit(status);
}
@@ -120,8 +124,9 @@ function run() {
.then(page => dismissCookiePrompt(page))
.then(page => savePageToPDF(page))
.then(page => getServiceMessages(page))
+ .then(serviceMessages => commitServiceEventToDatabase(serviceMessages, pdfFilename))
.then(serviceMessages => notifyIfDown(serviceMessages))
- .then(closeBrowser)
+ .then(closeBrowserAndExit)
}
run();
diff --git a/src/schemas/Event.js b/src/schemas/Event.js
new file mode 100644
index 0000000..92b18a0
--- /dev/null
+++ b/src/schemas/Event.js
@@ -0,0 +1,11 @@
+const mongoose = require('mongoose');
+const Schema = mongoose.Schema;
+
+const Event = new Schema({
+ date: Date,
+ isOk: Boolean,
+ message: String,
+ pdfFilename: String
+})
+
+module.exports = mongoose.model('Event', Event);
\ No newline at end of file
diff --git a/src/site/SF-Pro-Rounded-Light.otf b/src/site/SF-Pro-Rounded-Light.otf
new file mode 100755
index 0000000..94584f4
Binary files /dev/null and b/src/site/SF-Pro-Rounded-Light.otf differ
diff --git a/src/site/fetchLogsAndGenerateTable.js b/src/site/fetchLogsAndGenerateTable.js
new file mode 100644
index 0000000..3574655
--- /dev/null
+++ b/src/site/fetchLogsAndGenerateTable.js
@@ -0,0 +1,52 @@
+
+let indicentLogs = [
+ {
+ id: 1,
+ date: new Date('2020/05/30 01:20:38').toISOString(),
+ message: 'Vi har en feil i mobilnettet på denne adressen. Vi jobber med å løse problemet.',
+ duration: '6d 4t 32min'
+ }, {
+ id: 2,
+ date: new Date('2020/04/22 13:47:25').toISOString(),
+ message: 'Vi har en feil i internett på denne adressen. Vi jobber med å løse problemet.',
+ duration: '1d 2t 54min'
+ }
+]
+indicentLogs = indicentLogs.reverse()
+
+const newDiv = () => document.createElement('div');
+
+const closePopover = () => document.getElementById('popover').remove();
+
+const tableRowFromLog = (log, table) => {
+ const row = table.insertRow(0);
+ row.setAttribute('incident-id', log.id)
+ row.onclick = clickRowPopupIncident;
+ row.insertCell(0).innerHTML = log.date;
+ row.insertCell(1).innerHTML = log.message;
+ row.insertCell(2).innerHTML = log.duration;
+}
+
+const clickRowPopupIncident = (event) => {
+ const cell = event.toElement;
+ const row = cell.parentElement;
+ const indicentId = row.getAttribute('incident-id');
+
+ const popover = newDiv()
+ const container = newDiv()
+ popover.id = 'popover'
+ popover.onclick = closePopover;
+ container.className = 'container'
+ container.innerText = Object.values(indicentLogs[indicentId]).join('\n')
+ popover.appendChild(container)
+ document.body.appendChild(popover);
+}
+
+function fetchLogsAndGenerateTable() {
+ const table = document.getElementById('log-table');
+ const tableBody = table.tBodies[0];
+
+ indicentLogs.map(log => tableRowFromLog(log, tableBody))
+}
+
+fetchLogsAndGenerateTable()
\ No newline at end of file
diff --git a/src/site/fetchUptimeAndGenerateBarGraph.js b/src/site/fetchUptimeAndGenerateBarGraph.js
new file mode 100644
index 0000000..ef1adbc
--- /dev/null
+++ b/src/site/fetchUptimeAndGenerateBarGraph.js
@@ -0,0 +1,28 @@
+
+const createEvent = () => {
+ const event = document.createElement('div')
+ event.className = 'event';
+ const tooltip = document.createElement('span');
+ tooltip.className = 'tooltip';
+ const tooltipContent = new Date().toLocaleString()
+ tooltip.innerText = tooltipContent;
+
+ event.appendChild(tooltip);
+ return event;
+}
+
+function fetchUptimeAndGenerateBarGraph(instances=10) {
+ const graph = document.getElementById('bar-graph');
+
+ const event = createEvent()
+
+ for (var i = instances; i >= 0; i--) {
+ const clone = event.cloneNode(true)
+ Math.random() > 0.95 ? clone.className += ' error' : null;
+ graph.appendChild(clone)
+ }
+}
+
+
+// fetchUptimeAndGenerateBarGraph(20)
+fetchUptimeAndGenerateBarGraph(60)
\ No newline at end of file
diff --git a/src/site/index.html b/src/site/index.html
new file mode 100644
index 0000000..3ce12dd
--- /dev/null
+++ b/src/site/index.html
@@ -0,0 +1,57 @@
+
+
+
+ ISP downtime monitor
+
+
+
+
+ Nedetid rapport
+
+
Oppetid
+
+
+
+
+
+
+ Uptime
+
+
+ Downtime
+
+
+
+
Indicent log
+
+
+
+ | Date |
+ Incident message |
+ Duration |
+
+
+
+ | 31 Mai 2020 22:34 |
+ OK |
+ 6d 4t 32min |
+
+
+ | 31 Mai 2020 22:34 |
+ OK |
+ 6d 4t 32min |
+
+
+ | 31 Mai 2020 22:34 |
+ OK |
+ 6d 4t 32min |
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/site/style.css b/src/site/style.css
new file mode 100644
index 0000000..ace05fe
--- /dev/null
+++ b/src/site/style.css
@@ -0,0 +1,216 @@
+/**/
+:root {
+ color-scheme: light;
+ --text-color: black;
+ --background-color: white;
+ --page-background-color: #ebeceb;
+ --page-background-color-40: rgba(247,249,249,0.4);
+ --page-background-color-80: rgba(247,249,249,0.8);
+ --green: #7bed9f;
+ --red: #ff4757;
+}
+
+@media (prefers-color-scheme: dark) {
+ :root {
+ color-scheme: light dark;
+ --text-color: white;
+ --background-color: #1c1d1e;
+ --page-background-color: black;
+ --page-background-color-40: rgba(0,0,0,0.4);
+ --page-background-color-80: rgba(0,0,0,0.8);
+ }
+}
+
+@font-face {
+ font-family: AppleSF;
+ src: url(SF-Pro-Rounded-Light.otf);
+}
+
+body {
+ font-family: AppleSF;
+ background-color: var(--page-background-color);
+ padding: 0 1rem;
+ margin: 1rem;
+}
+
+.page-container {
+ background-color: var(--background-color);
+ border-radius: 0.5rem;
+ min-height: 60vh;
+ height: 100%;
+ padding: .1px 2rem 1.5rem 2rem;
+}
+
+h1,h2,h3,h4 {
+ margin: 1.5rem 0;
+ padding: 0;
+}
+h1 {
+ font-size: 3rem;
+}
+h2 {
+ font-size: 2rem;
+}
+
+.container {
+ border-radius: 0.5rem;
+}
+
+hr {
+ margin: 2.5rem 1rem;
+ height: 1px;
+ background-color: var(--text-color);
+ border: none
+}
+
+
+
+
+#bar-graph {
+ position: relative;
+ width: 100%;
+ height: 55px;
+ display: flex;
+ flex-direction: row-reverse;
+ border-radius: 0.4rem;
+ /*overflow: hidden;*/
+ /*margin: 2rem 0;*/
+ background-color: var(--page-background-color-40);
+}
+
+.event.error {
+/* position: absolute;
+ height: 100%;
+ width: 0.5rem;*/
+ background-color: var(--red);
+}
+
+.event {
+ height: 100%;
+ width: 1rem;
+ background-color: var(--green);
+ position: relative;
+ transition: transform 0.1s ease;
+}
+.event:not(:last-of-type) {
+ margin-left: 1px;
+}
+
+.event .tooltip {
+ visibility: hidden;
+ background-color: var(--page-background-color-80);
+ text-align: center;
+ padding: 0.4rem;
+ border-radius: 0.2rem;
+ position: absolute;
+ width: max-content;
+ top: calc(100% + 1rem);
+ left: 50%;
+ margin-left: -5rem;
+}
+.event:hover {
+ transform: scale(1.2);
+ z-index: 1;
+ box-shadow: -2px -2px 4px rgba(0,0,0,0.4),
+ 2px 2px 4px rgba(0,0,0,0.4);
+}
+.event:hover .tooltip {
+ visibility: visible;
+}
+
+/*.error:nth-of-type(1) {
+ left: 2rem;
+}
+.error:nth-of-type(2) {
+ left: 22rem;
+}
+.error:nth-of-type(3) {
+ right: 12rem;
+}*/
+
+.color-indicators {
+ display: flex;
+ flex-direction: row;
+ margin: 1rem 0;
+}
+
+.color-indicator-box {
+ display: block;
+ width: 1.1rem;
+ height: 1.1rem;
+ border-radius: 0.2rem;
+ margin-right: 0.5rem;
+}
+
+.color-indicators .color-indicator-box:not(:first-of-type) {
+ margin-left: 1.5rem;
+}
+.color-indicators span {
+ font-size: 1.1rem;
+ font-weight: 500;
+ letter-spacing: 1.5px;
+}
+/*.color-indicator-box:first-child) {
+ background-color: red;
+}*/
+
+.green {
+ background-color: var(--green);
+}
+.red {
+ background-color: var(--red);
+}
+
+
+
+
+#log-table {
+ width: 100%;
+}
+
+th {
+ text-align: left;
+ padding: 0.2rem 0.4rem;
+}
+
+tr {
+ font-size: 1.2rem;
+ margin: 0.3rem 0;
+ transition: transform 0.3s ease;
+}
+
+td {
+ padding: 0.6rem 0.4rem;
+}
+
+tr td:first-child {
+ border-radius: 0.3rem 0 0 0.3rem;
+}
+tr td:last-child {
+ border-radius: 0 0.3rem 0.3rem 0;
+}
+tbody tr:hover {
+ background-color: var(--page-background-color);
+ transform: scale(1.01);
+ cursor: pointer;
+}
+
+
+
+#popover {
+ position: absolute;
+ top: 0;
+ left: 0;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ width: 100vw;
+ height: 100vh;
+ background-color: var(--page-background-color-40);
+}
+#popover .container {
+ width: 70%;
+ height: 80%;
+ background-color: var(--background-color);
+ border-radius: 0.75rem;
+}
\ No newline at end of file
diff --git a/yarn.lock b/yarn.lock
index c9ee862..290caa1 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -29,6 +29,14 @@ base64-js@^1.0.2:
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1"
integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==
+bl@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/bl/-/bl-2.2.0.tgz#e1a574cdf528e4053019bb800b041c0ac88da493"
+ integrity sha512-wbgvOpqopSr7uq6fJrLH8EsvYMJf9gzfo2jCsL2eTy75qXPukA4pCgHamOQkZtY5vmfVtjB+P3LNlMHW5CEZXA==
+ dependencies:
+ readable-stream "^2.3.5"
+ safe-buffer "^5.1.1"
+
bl@^4.0.1:
version "4.0.2"
resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.2.tgz#52b71e9088515d0606d9dd9cc7aa48dc1f98e73a"
@@ -38,6 +46,11 @@ bl@^4.0.1:
inherits "^2.0.4"
readable-stream "^3.4.0"
+bluebird@3.5.1:
+ version "3.5.1"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9"
+ integrity sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==
+
brace-expansion@^1.1.7:
version "1.1.11"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
@@ -46,6 +59,11 @@ brace-expansion@^1.1.7:
balanced-match "^1.0.0"
concat-map "0.0.1"
+bson@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/bson/-/bson-1.1.4.tgz#f76870d799f15b854dffb7ee32f0a874797f7e89"
+ integrity sha512-S/yKGU1syOMzO86+dGpg2qGoDL0zvzcb262G+gqEy6TgP6rt6z6qxSFX/8X6vLC91P7G7C3nLs0+bvDzmvBA3Q==
+
buffer-crc32@~0.2.3:
version "0.2.13"
resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
@@ -69,6 +87,18 @@ concat-map@0.0.1:
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+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"
+ integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+
+debug@3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
+ integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
+ dependencies:
+ ms "2.0.0"
+
debug@4, debug@^4.1.0, debug@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
@@ -76,6 +106,11 @@ debug@4, debug@^4.1.0, debug@^4.1.1:
dependencies:
ms "^2.1.1"
+denque@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/denque/-/denque-1.4.1.tgz#6744ff7641c148c3f8a69c307e51235c1f4a37cf"
+ integrity sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ==
+
end-of-stream@^1.1.0, end-of-stream@^1.4.1:
version "1.4.4"
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
@@ -151,11 +186,26 @@ inflight@^1.0.4:
once "^1.3.0"
wrappy "1"
-inherits@2, inherits@^2.0.3, inherits@^2.0.4:
+inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3:
version "2.0.4"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+
+kareem@2.3.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/kareem/-/kareem-2.3.1.tgz#def12d9c941017fabfb00f873af95e9c99e1be87"
+ integrity sha512-l3hLhffs9zqoDe8zjmb/mAN4B8VT3L56EUvKNqLFVs9YlFA+zx7ke1DO8STAdDyYNkeSo1nKmjuvQeI12So8Xw==
+
+memory-pager@^1.0.2:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5"
+ integrity sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==
+
mime@^2.0.3:
version "2.4.5"
resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.5.tgz#d8de2ecb92982dedbb6541c9b6841d7f218ea009"
@@ -173,7 +223,63 @@ mkdirp-classic@^0.5.2:
resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113"
integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==
-ms@^2.1.1:
+mongodb@3.5.8:
+ version "3.5.8"
+ resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-3.5.8.tgz#34550856449b745d145873734bf922c12d6b9caa"
+ integrity sha512-jz7mR58z66JKL8Px4ZY+FXbgB7d0a0hEGCT7kw8iye46/gsqPrOEpZOswwJ2BQlfzsrCLKdsF9UcaUfGVN2HrQ==
+ dependencies:
+ bl "^2.2.0"
+ bson "^1.1.4"
+ denque "^1.4.1"
+ require_optional "^1.0.1"
+ safe-buffer "^5.1.2"
+ optionalDependencies:
+ saslprep "^1.0.0"
+
+mongoose-legacy-pluralize@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz#3ba9f91fa507b5186d399fb40854bff18fb563e4"
+ integrity sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==
+
+mongoose@^5.9.17:
+ version "5.9.17"
+ resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-5.9.17.tgz#9b74659481807cd9ff5b9c120cdb5087cbbd92bd"
+ integrity sha512-9EDmTiKrOu/41twlPWUA1aOsdxSN6PRIdFwTpLu4MjyNcJ/vuBE+VewKrN1jsD4oXO5rB8bMYtYxVmJQ02SrPg==
+ dependencies:
+ bson "^1.1.4"
+ kareem "2.3.1"
+ mongodb "3.5.8"
+ mongoose-legacy-pluralize "1.0.2"
+ mpath "0.7.0"
+ mquery "3.2.2"
+ ms "2.1.2"
+ regexp-clone "1.0.0"
+ safe-buffer "5.1.2"
+ sift "7.0.1"
+ sliced "1.0.1"
+
+mpath@0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/mpath/-/mpath-0.7.0.tgz#20e8102e276b71709d6e07e9f8d4d0f641afbfb8"
+ integrity sha512-Aiq04hILxhz1L+f7sjGyn7IxYzWm1zLNNXcfhDtx04kZ2Gk7uvFdgZ8ts1cWa/6d0TQmag2yR8zSGZUmp0tFNg==
+
+mquery@3.2.2:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/mquery/-/mquery-3.2.2.tgz#e1383a3951852ce23e37f619a9b350f1fb3664e7"
+ integrity sha512-XB52992COp0KP230I3qloVUbkLUxJIu328HBP2t2EsxSFtf4W1HPSOBWOXf1bqxK4Xbb66lfMJ+Bpfd9/yZE1Q==
+ dependencies:
+ bluebird "3.5.1"
+ debug "3.1.0"
+ regexp-clone "^1.0.0"
+ safe-buffer "5.1.2"
+ sliced "1.0.1"
+
+ms@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+ integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
+
+ms@2.1.2, ms@^2.1.1:
version "2.1.2"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
@@ -200,6 +306,11 @@ pend@~1.2.0:
resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA=
+process-nextick-args@~2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+ integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
progress@^2.0.1:
version "2.0.3"
resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
@@ -234,6 +345,19 @@ puppeteer@^3.0.4:
unbzip2-stream "^1.3.3"
ws "^7.2.3"
+readable-stream@^2.3.5:
+ version "2.3.7"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
+ integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.3"
+ isarray "~1.0.0"
+ process-nextick-args "~2.0.0"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.1.1"
+ util-deprecate "~1.0.1"
+
readable-stream@^3.1.1, readable-stream@^3.4.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
@@ -243,6 +367,24 @@ readable-stream@^3.1.1, readable-stream@^3.4.0:
string_decoder "^1.1.1"
util-deprecate "^1.0.1"
+regexp-clone@1.0.0, regexp-clone@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/regexp-clone/-/regexp-clone-1.0.0.tgz#222db967623277056260b992626354a04ce9bf63"
+ integrity sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==
+
+require_optional@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/require_optional/-/require_optional-1.0.1.tgz#4cf35a4247f64ca3df8c2ef208cc494b1ca8fc2e"
+ integrity sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==
+ dependencies:
+ resolve-from "^2.0.0"
+ semver "^5.1.0"
+
+resolve-from@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57"
+ integrity sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=
+
rimraf@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
@@ -250,11 +392,50 @@ rimraf@^3.0.2:
dependencies:
glob "^7.1.3"
+safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+ integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+safe-buffer@^5.1.1, safe-buffer@^5.1.2:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
+ integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+
safe-buffer@~5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519"
integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==
+saslprep@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/saslprep/-/saslprep-1.0.3.tgz#4c02f946b56cf54297e347ba1093e7acac4cf226"
+ integrity sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==
+ dependencies:
+ sparse-bitfield "^3.0.3"
+
+semver@^5.1.0:
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
+ integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
+
+sift@7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/sift/-/sift-7.0.1.tgz#47d62c50b159d316f1372f8b53f9c10cd21a4b08"
+ integrity sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g==
+
+sliced@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/sliced/-/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41"
+ integrity sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=
+
+sparse-bitfield@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz#ff4ae6e68656056ba4b3e792ab3334d38273ca11"
+ integrity sha1-/0rm5oZWBWuks+eSqzM004JzyhE=
+ dependencies:
+ memory-pager "^1.0.2"
+
string_decoder@^1.1.1:
version "1.3.0"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
@@ -262,6 +443,13 @@ string_decoder@^1.1.1:
dependencies:
safe-buffer "~5.2.0"
+string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+ integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+ dependencies:
+ safe-buffer "~5.1.0"
+
tar-fs@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.0.1.tgz#e44086c1c60d31a4f0cf893b1c4e155dabfae9e2"
@@ -296,7 +484,7 @@ unbzip2-stream@^1.3.3:
buffer "^5.2.1"
through "^2.3.8"
-util-deprecate@^1.0.1:
+util-deprecate@^1.0.1, util-deprecate@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=