From ceb8a3fb9445cc7cdac4f08e2b7e0496726ca7b0 Mon Sep 17 00:00:00 2001 From: marcioaffonso Date: Thu, 8 Dec 2022 18:23:13 -0300 Subject: [PATCH 1/4] [VIDECO-8004] - Update Insights-API samples with applicationIds --- .env.template | 9 +- .gitignore | 1 + README.md | 25 +- helpers/token-generator.js | 31 +++ package-lock.json | 336 +++++++++++++-------------- public/index.html | 4 - server.js | 25 +- src/charts/BitrateByCountry.js | 2 +- src/charts/FailuresByBrowser.js | 2 +- src/charts/SdkDistribution.js | 2 +- src/charts/UsageByDay.js | 2 +- src/charts/UsageByParticipantTier.js | 2 +- src/charts/UsageBySession.js | 22 +- src/charts/VideoStats.js | 45 ++-- src/css/Loading.css | 4 +- src/index.js | 7 +- 16 files changed, 293 insertions(+), 226 deletions(-) create mode 100644 helpers/token-generator.js diff --git a/.env.template b/.env.template index d457e49..4aadd17 100644 --- a/.env.template +++ b/.env.template @@ -1,8 +1,13 @@ # OpenTok config env variables -REACT_APP_INSIGHTS_URL = https://insights.opentok.com -REACT_APP_API_KEY = YOUR_API_KEY +REACT_APP_INSIGHTS_URL = https://tools.vonage.com/video/insights-api +REACT_APP_API_KEY = YOUR_API_KEY_OR_APPLICATION_ID + +# For TokBox users, only API_SECRET = YOUR_API_SECRET +# For Nexmo users, only +PRIVATE_KEY_PATH = ./private.key + # App config env variables SERVER_PORT = 4000 REACT_APP_SERVER_URL = http://localhost:4000 diff --git a/.gitignore b/.gitignore index c3c1554..aa1581d 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,4 @@ .env.production.local npm-debug.log* +private.key diff --git a/README.md b/README.md index ff32e11..e8b1b0f 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,8 @@ Environment Variable Names and Description: - `REACT_APP_INSIGHTS_URL` (Required): The URL for the OpenTok Insights API server. - `REACT_APP_API_KEY` (Required): Your OpenTok API Key. -- `API_SECRET` (Required): Your OpenTok API Secret. +- `API_SECRET` (Required only for TokBox users): Your OpenTok API Secret (For TokBox users, only). +- `PRIVATE_KEY_PATH` (Required only for Nexmo users): Your Private Key (For Nexmo users, only). - `SERVER_PORT` (Required): The port number for your server to run on. - `REACT_APP_SERVER_URL` (Required): The URL for your server app. - `APP_CLIENT_URL` (Required): The URL for your client app. @@ -50,7 +51,7 @@ This ensures that only those are accessible by the client, protecting your API s ``` { - project(projectId: ${YOUR_API_KEY}) { + project(projectId: "${YOUR_API_KEY}") { projectData( start: ${moment().subtract(10, 'days')}, interval: DAILY @@ -76,7 +77,7 @@ This ensures that only those are accessible by the client, protecting your API s ``` { - project(projectId: ${YOUR_API_KEY}) { + project(projectId: "${YOUR_API_KEY}") { projectData( start: ${moment().subtract(10, 'days')}, groupBy: SDK_TYPE, @@ -102,7 +103,7 @@ Here is the generic query to Insights API to get specified tier related insights ``` { - project(projectId: ${apiKey}) { + project(projectId: "${YOUR_API_KEY}") { projectData( start: ${moment(startDate)}, end: ${moment(endDate)}, @@ -156,7 +157,7 @@ and populate the stacked area chart. ``` { - project(projectId: ${YOUR_API_KEY}) { + project(projectId: "${YOUR_API_KEY}") { projectData( start: ${moment().subtract(10, 'days')}, groupBy: BROWSER_NAME, @@ -189,7 +190,7 @@ and populate the stacked area chart. ``` { - project(projectId: ${YOUR_API_KEY}) { + project(projectId: "${YOUR_API_KEY}") { projectData( start: ${moment().subtract(10, 'days')}, groupBy: COUNTRY, @@ -218,7 +219,7 @@ and populate the stacked area chart. ``` { - project(projectId: ${YOUR_API_KEY}) { + project(projectId: "${YOUR_API_KEY}") { sessionData { sessionSummaries(start: ${moment().subtract(10, 'days')}) { totalCount @@ -235,7 +236,7 @@ and populate the stacked area chart. ``` { - project(projectId: ${YOUR_API_KEY}) { + project(projectId: "${YOUR_API_KEY}") { sessionData { sessions(sessionIds: ["${YOUR_SESSION_ID}"]) { resources { @@ -275,7 +276,7 @@ and populate the stacked area chart. ``` { - project(projectId: ${YOUR_API_KEY}) { + project(projectId: "${YOUR_API_KEY}") { sessionData { sessionSummaries( start: ${moment().subtract(10, 'days')} @@ -302,7 +303,7 @@ input `endCursor` parameter to obtain the next page of data. For more informatio ``` { - project(projectId: ${YOUR_API_KEY}) { + project(projectId: "${YOUR_API_KEY}") { sessionData { sessions(sessionIds: ["${YOUR_SESSION_ID}"]) { resources { @@ -323,7 +324,7 @@ input `endCursor` parameter to obtain the next page of data. For more informatio ``` { - project(projectId: ${YOUR_API_KEY}) { + project(projectId: "${YOUR_API_KEY}") { sessionData { sessions(sessionIds: ["${YOUR_SESSION_ID}"]) { resources { @@ -349,7 +350,7 @@ input `endCursor` parameter to obtain the next page of data. For more informatio ``` { - project(projectId: ${YOUR_API_KEY}) { + project(projectId: "${YOUR_API_KEY}") { projectData( start: ${moment(startDate)}, end: ${moment(endDate)}, diff --git a/helpers/token-generator.js b/helpers/token-generator.js new file mode 100644 index 0000000..d52a33c --- /dev/null +++ b/helpers/token-generator.js @@ -0,0 +1,31 @@ +const jwt = require('jsonwebtoken'); +const fs = require('fs'); + +const EXPIRATION_SECS = (60 * 60); // 1 hour + +const getCurrentTime = () => Math.floor(new Date() / 1000); + +const createTokenTokBox = (apiKey, apiSecret) => { + const currentTime = getCurrentTime(); + return jwt.sign({ + iss: apiKey, + ist: 'project', + iat: currentTime, + exp: currentTime + EXPIRATION_SECS + }, apiSecret); +}; + +const createTokenNexmo = (applicationId, privateKeyPath) => { + const privateKey = fs.readFileSync(privateKeyPath); + const currentTime = getCurrentTime(); + return jwt.sign({ + iat: currentTime, + exp: currentTime + EXPIRATION_SECS, + application_id: applicationId + }, privateKey, { algorithm: "RS256" }); +}; + +module.exports = { + createTokenTokBox, + createTokenNexmo, +}; diff --git a/package-lock.json b/package-lock.json index 9ea28d7..0b940fe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1192,7 +1192,7 @@ "@csstools/convert-colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", - "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==" + "integrity": "sha1-rUldxBsS511YjG24uYNPCPoTHrc=" }, "@csstools/normalize.css": { "version": "10.1.0", @@ -2725,7 +2725,7 @@ "@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + "integrity": "sha1-7vAUoxRa5Hehy8AM0eVSM23Ot5A=" }, "@xtuc/long": { "version": "4.2.2", @@ -2993,12 +2993,12 @@ "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + "integrity": "sha1-aALmJk79GMeQobDVF/DyYnvyyUo=" }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", "requires": { "sprintf-js": "~1.0.2" } @@ -3040,7 +3040,7 @@ "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=" }, "arr-union": { "version": "3.1.0", @@ -3113,7 +3113,7 @@ "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "integrity": "sha1-jSR136tVO7M+d7VOWeiAu4ziMTY=", "requires": { "safer-buffer": "~2.1.0" } @@ -3211,7 +3211,7 @@ "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + "integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=" }, "autoprefixer": { "version": "9.8.6", @@ -3278,7 +3278,7 @@ "babel-extract-comments": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz", - "integrity": "sha512-qWWzi4TlddohA91bFwgt6zO/J0X+io7Qp184Fw0m2JYRSTZnJbFR8+07KmzudHCZgOiKRCrjhylwv9Xd8gfhVQ==", + "integrity": "sha1-Cirt+BQX7TkbheGLRhTmk6A1GiE=", "requires": { "babylon": "^6.18.0" } @@ -3728,7 +3728,7 @@ "babylon": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" + "integrity": "sha1-ry87iPpvXB5MY00aD46sT1WzleM=" }, "balanced-match": { "version": "1.0.0", @@ -3738,7 +3738,7 @@ "base": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", "requires": { "cache-base": "^1.0.1", "class-utils": "^0.3.5", @@ -3760,7 +3760,7 @@ "is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "requires": { "kind-of": "^6.0.0" } @@ -3768,7 +3768,7 @@ "is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "requires": { "kind-of": "^6.0.0" } @@ -3776,7 +3776,7 @@ "is-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -3864,7 +3864,7 @@ "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "requires": { "ms": "2.0.0" } @@ -3899,7 +3899,7 @@ "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -3926,7 +3926,7 @@ "browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "integrity": "sha1-Mmc0ZC9APavDADIJhTu3CtQo70g=", "requires": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", @@ -3939,7 +3939,7 @@ "browserify-cipher": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "integrity": "sha1-jWR0wbhwv9q807z8wZNKEOlPFfA=", "requires": { "browserify-aes": "^1.0.4", "browserify-des": "^1.0.0", @@ -3949,7 +3949,7 @@ "browserify-des": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "integrity": "sha1-OvTx9Zg5QDVy8cZiBDdfen9wPpw=", "requires": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", @@ -3997,7 +3997,7 @@ "browserify-zlib": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=", "requires": { "pako": "~1.0.5" } @@ -4040,12 +4040,12 @@ "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=" }, "buffer-indexof": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" + "integrity": "sha1-Uvq8xqYG0aADAoAmSO9o9jnaJow=" }, "buffer-xor": { "version": "1.0.3", @@ -4101,7 +4101,7 @@ "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", "requires": { "collection-visit": "^1.0.0", "component-emitter": "^1.2.1", @@ -4175,7 +4175,7 @@ "caniuse-api": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "integrity": "sha1-Xk2Q4idJYdRikZl99Znj7QCO5MA=", "requires": { "browserslist": "^4.0.0", "caniuse-lite": "^1.0.0", @@ -4184,9 +4184,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001202", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001202.tgz", - "integrity": "sha512-ZcijQNqrcF8JNLjzvEiXqX4JUYxoZa7Pvcsd9UD8Kz4TvhTonOSNRsK+qtvpVL4l6+T1Rh4LFtLfnNWg6BGWCQ==" + "version": "1.0.30001436", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001436.tgz", + "integrity": "sha512-ZmWkKsnC2ifEPoWUvSAIGyOYwT+keAaaWPHiQ9DfMqS1t6tfuyFYoWR78TeZtznkEQ64+vGXH9cZrElwR2Mrxg==" }, "capture-exit": { "version": "2.0.0", @@ -4289,7 +4289,7 @@ "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=", "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -4303,7 +4303,7 @@ "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", "requires": { "arr-union": "^3.1.0", "define-property": "^0.2.5", @@ -4332,7 +4332,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=" } } }, @@ -4421,7 +4421,7 @@ "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", "requires": { "color-name": "1.1.3" } @@ -4473,7 +4473,7 @@ "common-tags": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", - "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==" + "integrity": "sha1-jjFT5ULUo56bEFVENK+q+YlWqTc=" }, "commondir": { "version": "1.0.1", @@ -4530,7 +4530,7 @@ "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "requires": { "ms": "2.0.0" } @@ -4545,7 +4545,7 @@ "concat-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=", "requires": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -4634,7 +4634,7 @@ "find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=", "dev": true, "requires": { "locate-path": "^3.0.0" @@ -4652,13 +4652,13 @@ "invert-kv": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "integrity": "sha1-c5P1r6Weyf9fZ6J2INEcIm4+7AI=", "dev": true }, "lcid": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "integrity": "sha1-bvXS32DlL4LrIopMNz6NHzlyU88=", "dev": true, "requires": { "invert-kv": "^2.0.0" @@ -4667,7 +4667,7 @@ "locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=", "dev": true, "requires": { "p-locate": "^3.0.0", @@ -4714,7 +4714,7 @@ "p-locate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=", "dev": true, "requires": { "p-limit": "^2.0.0" @@ -4856,7 +4856,7 @@ "copy-concurrently": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "integrity": "sha1-kilzmMrjSTf8r9bsgTnBgFHwteA=", "requires": { "aproba": "^1.1.1", "fs-write-stream-atomic": "^1.0.8", @@ -4956,7 +4956,7 @@ "create-hash": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "integrity": "sha1-iJB4rxGmN1a8+1m9IhmWvjqe8ZY=", "requires": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", @@ -4968,7 +4968,7 @@ "create-hmac": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "integrity": "sha1-aRcMeLOrlXFHsriwRXLkfq0iQ/8=", "requires": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", @@ -4993,7 +4993,7 @@ "crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=", "requires": { "browserify-cipher": "^1.0.0", "browserify-sign": "^4.0.0", @@ -5047,7 +5047,7 @@ "css-declaration-sorter": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", - "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "integrity": "sha1-wZiUD2OnbX42wecQGLABchBUyyI=", "requires": { "postcss": "^7.0.1", "timsort": "^0.3.0" @@ -5135,7 +5135,7 @@ "css-select-base-adapter": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" + "integrity": "sha1-Oy/0lyzDYquIVhUHqVQIoUMhNdc=" }, "css-tree": { "version": "1.0.0-alpha.37", @@ -5265,7 +5265,7 @@ "cssnano-util-raw-cache": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", - "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "integrity": "sha1-sm1f1fcqEd/np4RvtMZyYPlr8oI=", "requires": { "postcss": "^7.0.0" } @@ -5273,7 +5273,7 @@ "cssnano-util-same-parent": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", - "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==" + "integrity": "sha1-V0CC+yhZ0ttDOFWDXZqEVuoYu/M=" }, "csso": { "version": "4.2.0", @@ -5450,7 +5450,7 @@ "define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=", "requires": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" @@ -5459,7 +5459,7 @@ "is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "requires": { "kind-of": "^6.0.0" } @@ -5467,7 +5467,7 @@ "is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "requires": { "kind-of": "^6.0.0" } @@ -5475,7 +5475,7 @@ "is-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -5577,7 +5577,7 @@ "detect-port-alt": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "integrity": "sha1-JHB96r6TLUo89iEwICfCsmZWgnU=", "requires": { "address": "^1.0.1", "debug": "^2.6.0" @@ -5586,7 +5586,7 @@ "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "requires": { "ms": "2.0.0" } @@ -5601,7 +5601,7 @@ "diffie-hellman": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "integrity": "sha1-QOjumPVaIUlgcUaSHGPhrl89KHU=", "requires": { "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", @@ -5631,7 +5631,7 @@ "dns-packet": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "integrity": "sha1-EqpCaYEHW+UAuRDu3NC0fdfe2lo=", "requires": { "ip": "^1.1.0", "safe-buffer": "^5.0.1" @@ -5656,7 +5656,7 @@ "dom-converter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "integrity": "sha1-ZyGp2u4uKTaClVtq/kFncWJ7t2g=", "requires": { "utila": "~0.4" } @@ -5689,7 +5689,7 @@ "domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" + "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=" }, "domelementtype": { "version": "1.3.1", @@ -5722,7 +5722,7 @@ "domutils": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "integrity": "sha1-Vuo0HoNOBuZ0ivehyyXaZ+qfjCo=", "requires": { "dom-serializer": "0", "domelementtype": "1" @@ -6103,7 +6103,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", "optional": true }, "type-check": { @@ -6308,7 +6308,7 @@ "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "requires": { "ms": "2.0.0" } @@ -6327,7 +6327,7 @@ "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "requires": { "ms": "2.0.0" } @@ -6412,7 +6412,7 @@ "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "requires": { "ms": "2.0.0" } @@ -6643,7 +6643,7 @@ "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=" }, "esquery": { "version": "1.4.0", @@ -6716,7 +6716,7 @@ "evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=", "requires": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" @@ -6857,7 +6857,7 @@ "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "requires": { "ms": "2.0.0" } @@ -6882,7 +6882,7 @@ "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=" }, "extend-shallow": { "version": "3.0.2", @@ -6896,7 +6896,7 @@ "is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", "requires": { "is-plain-object": "^2.0.4" } @@ -7089,7 +7089,7 @@ "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "requires": { "ms": "2.0.0" } @@ -7303,7 +7303,7 @@ "form-data": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "integrity": "sha1-3M5SwF9kTymManq5Nr1yTO/786Y=", "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -7600,7 +7600,7 @@ "harmony-reflect": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.1.tgz", - "integrity": "sha512-WJTeyp0JzGtHcuMsi7rw2VwtkvLa+JyfEKJCFyfcS0+CDkjQ5lHPu7zEhFZP+PDSRrEgXa5Ah0l1MbgbE41XjA==" + "integrity": "sha1-wQjU8rtFHv73o3hh/b2ucsm976k=" }, "has": { "version": "1.0.3", @@ -7706,12 +7706,12 @@ "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=" }, "hex-color-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" + "integrity": "sha1-TAb8y0YC/iYCs8k9+C1+fb8aio4=" }, "hmac-drbg": { "version": "1.0.1", @@ -7789,7 +7789,7 @@ "html-comment-regex": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", - "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==" + "integrity": "sha1-l9RoiutcgYhqNk+qDK0d2hTUM6c=" }, "html-encoding-sniffer": { "version": "2.0.1", @@ -8341,7 +8341,7 @@ "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", "requires": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -8351,7 +8351,7 @@ "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=" } } }, @@ -8452,7 +8452,7 @@ "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", "requires": { "isobject": "^3.0.1" } @@ -8478,7 +8478,7 @@ "is-resolvable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" + "integrity": "sha1-+xj4fOH+uSUWnJpAfBkxijIG7Yg=" }, "is-root": { "version": "2.1.0", @@ -8498,7 +8498,7 @@ "is-svg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", - "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", + "integrity": "sha1-kyHb0pwhLlypnE+peUxxS8r6L3U=", "requires": { "html-comment-regex": "^1.1.0" } @@ -8519,7 +8519,7 @@ "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=" }, "is-wsl": { "version": "2.2.0", @@ -10163,7 +10163,7 @@ "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + "integrity": "sha1-gFZNLkg9rPbo7yCWUKZ98/DCg6Q=" }, "json-parse-better-errors": { "version": "1.0.2", @@ -10183,7 +10183,7 @@ "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=" }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -10360,7 +10360,7 @@ "killable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==" + "integrity": "sha1-TIzkQRh6Bhx0dPuHygjipjgZSJI=" }, "kind-of": { "version": "6.0.3", @@ -10393,7 +10393,7 @@ "last-call-webpack-plugin": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", + "integrity": "sha1-l0LfDhDjz0blwDgcLekNOnotdVU=", "requires": { "lodash": "^4.17.5", "webpack-sources": "^1.1.0" @@ -10635,7 +10635,7 @@ "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "integrity": "sha1-tdB7jjIW4+J81yjXL3DR5qNCAF8=", "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1", @@ -10722,7 +10722,7 @@ "miller-rabin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=", "requires": { "bn.js": "^4.0.0", "brorand": "^1.0.1" @@ -10802,7 +10802,7 @@ "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + "integrity": "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc=" }, "minimalistic-crypto-utils": { "version": "1.0.1", @@ -10812,7 +10812,7 @@ "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", "requires": { "brace-expansion": "^1.1.7" } @@ -10866,7 +10866,7 @@ "mississippi": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "integrity": "sha1-6goykfl+C16HdrNj1fChLZTGcCI=", "requires": { "concat-stream": "^1.5.0", "duplexify": "^3.4.2", @@ -10892,7 +10892,7 @@ "is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", "requires": { "is-plain-object": "^2.0.4" } @@ -10943,7 +10943,7 @@ "multicast-dns": { "version": "6.2.3", "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "integrity": "sha1-oOx72QVcQoL3kMPIL04o2zsxsik=", "requires": { "dns-packet": "^1.3.1", "thunky": "^1.0.2" @@ -10968,7 +10968,7 @@ "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=", "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -11205,7 +11205,7 @@ "nth-check": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "integrity": "sha1-sr0pXDfj3VijvwcAN2Zjuk2c8Fw=", "requires": { "boolbase": "~1.0.0" } @@ -11229,7 +11229,7 @@ "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + "integrity": "sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU=" }, "object-assign": { "version": "4.1.1", @@ -11352,7 +11352,7 @@ "obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" + "integrity": "sha1-Cb6jND1BhZ69RGKS0RydTbYZCE4=" }, "on-finished": { "version": "2.3.0", @@ -11440,7 +11440,7 @@ "original": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "integrity": "sha1-5EKmHP/hxf0gpl8yYcJmY7MD8l8=", "requires": { "url-parse": "^1.4.3" } @@ -11843,7 +11843,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=" }, "supports-color": { "version": "6.1.0", @@ -11885,7 +11885,7 @@ "postcss-color-functional-notation": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz", - "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==", + "integrity": "sha1-Xv03qI+6vrAKKWbR5T2Yztk/dOA=", "requires": { "postcss": "^7.0.2", "postcss-values-parser": "^2.0.0" @@ -11913,7 +11913,7 @@ "postcss-color-mod-function": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz", - "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==", + "integrity": "sha1-gWuhRawRzDy2uqkFp1pJ+QPk0x0=", "requires": { "@csstools/convert-colors": "^1.4.0", "postcss": "^7.0.2", @@ -11923,7 +11923,7 @@ "postcss-color-rebeccapurple": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz", - "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==", + "integrity": "sha1-x6ib6HK7dORbHjAiv+V0iCPm3nc=", "requires": { "postcss": "^7.0.2", "postcss-values-parser": "^2.0.0" @@ -11951,7 +11951,7 @@ "postcss-convert-values": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", - "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "integrity": "sha1-yjgT7U2g+BL51DcDWE5Enr4Ymn8=", "requires": { "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" @@ -11984,7 +11984,7 @@ "postcss-custom-selectors": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz", - "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==", + "integrity": "sha1-ZIWMbrLs/y+0HQsoyd17PbTef7o=", "requires": { "postcss": "^7.0.2", "postcss-selector-parser": "^5.0.0-rc.3" @@ -12010,7 +12010,7 @@ "postcss-dir-pseudo-class": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz", - "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==", + "integrity": "sha1-bjpBd9Dts6vMhf22+7HCbauuq6I=", "requires": { "postcss": "^7.0.2", "postcss-selector-parser": "^5.0.0-rc.3" @@ -12044,7 +12044,7 @@ "postcss-discard-duplicates": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", - "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "integrity": "sha1-P+EzzTyCKC5VD8myORdqkge3hOs=", "requires": { "postcss": "^7.0.0" } @@ -12052,7 +12052,7 @@ "postcss-discard-empty": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", - "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "integrity": "sha1-yMlR6fc+2UKAGUWERKAq2Qu592U=", "requires": { "postcss": "^7.0.0" } @@ -12060,7 +12060,7 @@ "postcss-discard-overridden": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", - "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "integrity": "sha1-ZSrvipZybwKfXj4AFG7npOdV/1c=", "requires": { "postcss": "^7.0.0" } @@ -12077,7 +12077,7 @@ "postcss-env-function": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz", - "integrity": "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==", + "integrity": "sha1-Dz49PFfwlKksK69LYkHwsNpTZdc=", "requires": { "postcss": "^7.0.2", "postcss-values-parser": "^2.0.0" @@ -12094,7 +12094,7 @@ "postcss-focus-visible": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz", - "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==", + "integrity": "sha1-R30QcROt5gJLFBKDF63ivR4XBG4=", "requires": { "postcss": "^7.0.2" } @@ -12102,7 +12102,7 @@ "postcss-focus-within": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz", - "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==", + "integrity": "sha1-djuHiFls7puHTJmSAc3egGWe9oA=", "requires": { "postcss": "^7.0.2" } @@ -12118,7 +12118,7 @@ "postcss-gap-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz", - "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==", + "integrity": "sha1-QxwZKrPtlqPD0J8v9hWWD5AsFxU=", "requires": { "postcss": "^7.0.2" } @@ -12126,7 +12126,7 @@ "postcss-image-set-function": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz", - "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==", + "integrity": "sha1-KJIKLymUW+1MMZjX32SW1BDT8og=", "requires": { "postcss": "^7.0.2", "postcss-values-parser": "^2.0.0" @@ -12144,7 +12144,7 @@ "postcss-lab-function": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz", - "integrity": "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==", + "integrity": "sha1-u1GmhWzRIomrSuINseOCHvE9fS4=", "requires": { "@csstools/convert-colors": "^1.4.0", "postcss": "^7.0.2", @@ -12190,7 +12190,7 @@ "postcss-loader": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", - "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", + "integrity": "sha1-a5eUPkfHLYRfqeA/Jzdz1OjdbC0=", "requires": { "loader-utils": "^1.1.0", "postcss": "^7.0.0", @@ -12231,7 +12231,7 @@ "postcss-logical": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz", - "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==", + "integrity": "sha1-JJXQ+LgunyYnJfdflAGzTntF1bU=", "requires": { "postcss": "^7.0.2" } @@ -12239,7 +12239,7 @@ "postcss-media-minmax": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz", - "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==", + "integrity": "sha1-t1u2y8IXyKxJQz4S8iBIgUpPXtU=", "requires": { "postcss": "^7.0.2" } @@ -12290,7 +12290,7 @@ "postcss-minify-font-values": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", - "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "integrity": "sha1-zUw0TM5HQ0P6xdgiBqssvLiv1aY=", "requires": { "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" @@ -12424,7 +12424,7 @@ "postcss-normalize-charset": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", - "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "integrity": "sha1-izWt067oOhNrBHHg1ZvlilAoXdQ=", "requires": { "postcss": "^7.0.0" } @@ -12519,7 +12519,7 @@ "postcss-normalize-unicode": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", - "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "integrity": "sha1-hBvUj9zzAZrUuqdJOj02O1KuHPs=", "requires": { "browserslist": "^4.0.0", "postcss": "^7.0.0", @@ -12536,7 +12536,7 @@ "postcss-normalize-url": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", - "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "integrity": "sha1-EOQ3+GvHx+WPe5ZS7YeNqqlfquE=", "requires": { "is-absolute-url": "^2.0.0", "normalize-url": "^3.0.0", @@ -12592,7 +12592,7 @@ "postcss-overflow-shorthand": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz", - "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==", + "integrity": "sha1-MezzUOnG9t3CUKePDD4RHzLdTDA=", "requires": { "postcss": "^7.0.2" } @@ -12600,7 +12600,7 @@ "postcss-page-break": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz", - "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==", + "integrity": "sha1-rdUtDgpSjKvmr+6LRuKrsnffRr8=", "requires": { "postcss": "^7.0.2" } @@ -12608,7 +12608,7 @@ "postcss-place": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz", - "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==", + "integrity": "sha1-6fOdM9LcWE5G7h20Wtt3yp0dzGI=", "requires": { "postcss": "^7.0.2", "postcss-values-parser": "^2.0.0" @@ -12661,7 +12661,7 @@ "postcss-pseudo-class-any-link": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz", - "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==", + "integrity": "sha1-LtPu05OzcCh53sSocDKyENrrBNE=", "requires": { "postcss": "^7.0.2", "postcss-selector-parser": "^5.0.0-rc.3" @@ -12716,7 +12716,7 @@ "postcss-replace-overflow-wrap": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz", - "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==", + "integrity": "sha1-YbNg/9rtyoTHyRjSsPDQ6lWasBw=", "requires": { "postcss": "^7.0.2" } @@ -12749,7 +12749,7 @@ "postcss-selector-matches": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz", - "integrity": "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==", + "integrity": "sha1-ccgkj5F7osyTA3yWN+4JxkQ2/P8=", "requires": { "balanced-match": "^1.0.0", "postcss": "^7.0.2" @@ -12796,7 +12796,7 @@ "postcss-unique-selectors": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", - "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "integrity": "sha1-lEaRHzKJv9ZMbWgPBzwDsfnuS6w=", "requires": { "alphanum-sort": "^1.0.0", "postcss": "^7.0.0", @@ -12957,7 +12957,7 @@ "public-encrypt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "integrity": "sha1-T8ydd6B+SLp1J+fL4N4z0HATMeA=", "requires": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", @@ -12986,7 +12986,7 @@ "pumpify": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "integrity": "sha1-NlE74karJ1cLGjdKXOJ4v9dDcM4=", "requires": { "duplexify": "^3.6.0", "inherits": "^2.0.3", @@ -12996,7 +12996,7 @@ "pump": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "integrity": "sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk=", "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -13007,7 +13007,7 @@ "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=" }, "q": { "version": "1.5.1", @@ -13067,7 +13067,7 @@ "randomfill": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "integrity": "sha1-ySGW/IarQr6YPxvzF3giSTHWFFg=", "requires": { "randombytes": "^2.0.5", "safe-buffer": "^5.1.0" @@ -13475,7 +13475,7 @@ "recursive-readdir": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", - "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", + "integrity": "sha1-mUb7MnThYo3m42svZxSVO0hFCU8=", "requires": { "minimatch": "3.0.4" } @@ -13524,7 +13524,7 @@ "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=", "requires": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" @@ -13613,7 +13613,7 @@ "repeat-element": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" + "integrity": "sha1-eC4NglwMWjuzlzH4Tv7mt0Lmsc4=" }, "repeat-string": { "version": "1.6.1", @@ -13820,7 +13820,7 @@ "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=" }, "retry": { "version": "0.12.0", @@ -13882,7 +13882,7 @@ "ripemd160": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "integrity": "sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw=", "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1" @@ -14179,7 +14179,7 @@ "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=" }, "saxes": { "version": "5.0.1", @@ -14249,7 +14249,7 @@ "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "requires": { "ms": "2.0.0" }, @@ -14293,7 +14293,7 @@ "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "requires": { "ms": "2.0.0" } @@ -14366,7 +14366,7 @@ "sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "integrity": "sha1-N6XPC4HsvGlD3hCbopYNGyZYSuc=", "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -14393,7 +14393,7 @@ "shellwords": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "integrity": "sha1-1rkYHBpI05cyTISHHvvPxz/AZUs=", "optional": true }, "side-channel": { @@ -14422,7 +14422,7 @@ "is-arrayish": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + "integrity": "sha1-RXSirlb3qyBolvtDHq7tBm/fjwM=" } } }, @@ -14472,7 +14472,7 @@ "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=", "requires": { "base": "^0.11.1", "debug": "^2.2.0", @@ -14487,7 +14487,7 @@ "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "requires": { "ms": "2.0.0" } @@ -14513,7 +14513,7 @@ "snapdragon-node": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", "requires": { "define-property": "^1.0.0", "isobject": "^3.0.0", @@ -14531,7 +14531,7 @@ "is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "requires": { "kind-of": "^6.0.0" } @@ -14539,7 +14539,7 @@ "is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "requires": { "kind-of": "^6.0.0" } @@ -14547,7 +14547,7 @@ "is-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -14559,7 +14559,7 @@ "snapdragon-util": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", "requires": { "kind-of": "^3.2.0" }, @@ -14635,7 +14635,7 @@ "source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + "integrity": "sha1-OZO9hzv8SEecyp6jpUeDXHwVSzQ=" }, "source-map": { "version": "0.5.7", @@ -14742,7 +14742,7 @@ "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", "requires": { "extend-shallow": "^3.0.0" } @@ -14779,7 +14779,7 @@ "stable": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + "integrity": "sha1-g26zyDgv4pNv6vVEYxAXzn1Ho88=" }, "stack-utils": { "version": "2.0.3", @@ -14866,7 +14866,7 @@ "stream-each": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "integrity": "sha1-6+J6DDibBPvMIzZClS4Qcxr6m64=", "requires": { "end-of-stream": "^1.1.0", "stream-shift": "^1.0.0" @@ -14875,7 +14875,7 @@ "stream-http": { "version": "2.8.3", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "integrity": "sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw=", "requires": { "builtin-status-codes": "^3.0.0", "inherits": "^2.0.1", @@ -15035,7 +15035,7 @@ "stringify-object": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "integrity": "sha1-cDBlrvyhkwDTzoivT1s5VtdVZik=", "requires": { "get-own-enumerable-property-symbols": "^3.0.0", "is-obj": "^1.0.1", @@ -15065,7 +15065,7 @@ "strip-comments": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-1.0.2.tgz", - "integrity": "sha512-kL97alc47hoyIQSV165tTt9rG5dn4w1dNnBhOQ3bOU1Nc1hel09jnXANaHJ7vzHLd4Ju8kseDGzlev96pghLFw==", + "integrity": "sha1-grnEXn8FhzvuU/NxaK+TCqNoZ50=", "requires": { "babel-extract-comments": "^1.0.0", "babel-plugin-transform-object-rest-spread": "^6.26.0" @@ -15120,7 +15120,7 @@ "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", "requires": { "has-flag": "^3.0.0" } @@ -15320,7 +15320,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=" } } }, @@ -15397,7 +15397,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=" }, "terser": { "version": "5.6.0", @@ -15441,7 +15441,7 @@ "through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=", "requires": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -15530,7 +15530,7 @@ "to-regex": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=", "requires": { "define-property": "^2.0.2", "extend-shallow": "^3.0.2", @@ -15711,12 +15711,12 @@ "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" + "integrity": "sha1-JhmADEyCWADv3YNDr33Zkzy+KBg=" }, "unicode-match-property-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "integrity": "sha1-jtKjJWmWG86SJ9Cc0/+7j+1fAgw=", "requires": { "unicode-canonical-property-names-ecmascript": "^1.0.4", "unicode-property-aliases-ecmascript": "^1.0.4" @@ -15756,7 +15756,7 @@ "unique-filename": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "integrity": "sha1-HWl2k2mtoFgxA6HmrodoG1ZXMjA=", "requires": { "unique-slug": "^2.0.0" } @@ -15919,7 +15919,7 @@ "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + "integrity": "sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=" }, "util": { "version": "0.11.1", @@ -16299,7 +16299,7 @@ "wbuf": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "integrity": "sha1-wdjRSTFtPqhShIiVy2oL/oh7h98=", "requires": { "minimalistic-assert": "^1.0.0" } @@ -17038,7 +17038,7 @@ "webpack-log": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "integrity": "sha1-W3ko4GN1k/EZ0y9iJ8HgrDHhtH8=", "requires": { "ansi-colors": "^3.0.0", "uuid": "^3.3.2" @@ -17104,7 +17104,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=" } } }, @@ -17126,7 +17126,7 @@ "whatwg-encoding": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "integrity": "sha1-WrrPd3wyFmpR0IXWtPPn0nET3bA=", "requires": { "iconv-lite": "0.4.24" } @@ -17468,7 +17468,7 @@ "xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" + "integrity": "sha1-auc+Bt5NjG5H+fsYH3jWSK1FfGo=" }, "xmlchars": { "version": "2.2.0", diff --git a/public/index.html b/public/index.html index 3f4b8e8..9aa4d97 100644 --- a/public/index.html +++ b/public/index.html @@ -21,11 +21,7 @@
-
-
diff --git a/server.js b/server.js index d5c8d41..d9187fe 100644 --- a/server.js +++ b/server.js @@ -1,20 +1,31 @@ require('dotenv').config(); const express = require('express'); -const jwt = require('jsonwebtoken'); +const { createTokenTokBox, createTokenNexmo } = require('./helpers/token-generator'); const API_KEY = process.env.REACT_APP_API_KEY; const API_SECRET = process.env.API_SECRET; +const PRIVATE_KEY_PATH = process.env.PRIVATE_KEY_PATH; const CLIENT_URL = process.env.APP_CLIENT_URL; const PORT = process.env.SERVER_PORT || 4000; +const isTokBoxApiKey = /^-?\d+$/.test(API_KEY); + /** * Ensure all the required variables are set for the environment */ -if (!API_KEY || !API_SECRET || !CLIENT_URL) { +if (!API_KEY || !CLIENT_URL) { console.error('You need to set your env variables before running the project.'); return; } +if (!API_SECRET && isTokBoxApiKey) { + console.error('You need to set your secret.'); + return; +} +if (!PRIVATE_KEY_PATH && !isTokBoxApiKey) { + console.error('You need to set your private key.'); + return; +} /** * Initialize the app @@ -34,13 +45,9 @@ app.use((req, res, next) => { * @returns {JSON} */ app.get('/token', (req, res) => { - const currentTime = Math.floor(new Date() / 1000); - const token = jwt.sign({ - iss: API_KEY, - ist: 'project', - iat: currentTime, - exp: currentTime + (60 * 60) // 1 hour - }, API_SECRET); + const token = isTokBoxApiKey ? + createTokenTokBox(API_KEY, API_SECRET) : + createTokenNexmo(API_KEY, PRIVATE_KEY_PATH); res.send(JSON.stringify({ API_KEY, token, diff --git a/src/charts/BitrateByCountry.js b/src/charts/BitrateByCountry.js index dac510c..b3b5a00 100644 --- a/src/charts/BitrateByCountry.js +++ b/src/charts/BitrateByCountry.js @@ -11,7 +11,7 @@ const apiKey = process.env.REACT_APP_API_KEY; const query = gql` { - project(projectId: ${apiKey}) { + project(projectId: "${apiKey}") { projectData( start: ${moment().subtract(10, 'days')}, groupBy: COUNTRY, diff --git a/src/charts/FailuresByBrowser.js b/src/charts/FailuresByBrowser.js index 315547a..732b9f8 100644 --- a/src/charts/FailuresByBrowser.js +++ b/src/charts/FailuresByBrowser.js @@ -11,7 +11,7 @@ const apiKey = process.env.REACT_APP_API_KEY; const query = gql` { - project(projectId: ${apiKey}) { + project(projectId: "${apiKey}") { projectData( start: ${moment().subtract(10, 'days')}, groupBy: BROWSER, diff --git a/src/charts/SdkDistribution.js b/src/charts/SdkDistribution.js index b461b97..063d048 100644 --- a/src/charts/SdkDistribution.js +++ b/src/charts/SdkDistribution.js @@ -11,7 +11,7 @@ const apiKey = process.env.REACT_APP_API_KEY; const query = gql` { - project(projectId: ${apiKey}) { + project(projectId: "${apiKey}") { projectData( start: ${moment().subtract(10, 'days')}, groupBy: SDK_TYPE, diff --git a/src/charts/UsageByDay.js b/src/charts/UsageByDay.js index ecd301d..4ef31ab 100644 --- a/src/charts/UsageByDay.js +++ b/src/charts/UsageByDay.js @@ -11,7 +11,7 @@ const apiKey = process.env.REACT_APP_API_KEY; const query = gql` { - project(projectId: ${apiKey}) { + project(projectId: "${apiKey}") { projectData( start: ${moment().subtract(10, 'days')}, interval: DAILY diff --git a/src/charts/UsageByParticipantTier.js b/src/charts/UsageByParticipantTier.js index ffb37f9..e1bce18 100644 --- a/src/charts/UsageByParticipantTier.js +++ b/src/charts/UsageByParticipantTier.js @@ -73,7 +73,7 @@ class UsageByParticipantTier extends Component { ppmDisplaySettings.map(ppm => formattedPPM += `${ppm.key}\n`); const query = gql` { - project(projectId: ${apiKey}) { + project(projectId: "${apiKey}") { projectData( start: ${moment(startDate)}, end: ${moment(endDate)}, diff --git a/src/charts/UsageBySession.js b/src/charts/UsageBySession.js index 0a1d1fb..01cc4b1 100644 --- a/src/charts/UsageBySession.js +++ b/src/charts/UsageBySession.js @@ -14,6 +14,7 @@ import TableRow from '@material-ui/core/TableRow'; import Paper from '@material-ui/core/Paper'; import Loading from '../components/Loading'; import NoResultsFound from '../components/NoResultsFound'; +import ErrorMessage from '../components/ErrorMessage'; import round from './helpers/round'; const apiKey = process.env.REACT_APP_API_KEY; @@ -21,7 +22,7 @@ const apiKey = process.env.REACT_APP_API_KEY; /* Get all session IDs from the last 10 days */ const sessionSummariesQuery = endCursor => gql` { - project(projectId: ${apiKey}) { + project(projectId: "${apiKey}") { sessionData { sessionSummaries( start: ${moment().subtract(10, 'days')} @@ -43,7 +44,7 @@ const sessionSummariesQuery = endCursor => gql` /* Get the publisherMinutes and subscriberMinutes for every session Id within sessionIds */ const sessionQuery = sessionIds => gql` { - project(projectId: ${apiKey}) { + project(projectId: "${apiKey}") { sessionData { sessions(sessionIds: [${sessionIds}]) { resources { @@ -92,16 +93,27 @@ class UsageBySession extends Component { } async componentDidMount() { - await this.getSessionsInfo(); + try { + await this.getSessionsInfo(); + } + catch (error) { + this.setState({ error }); + } this.setState({ loading: false }); } render() { - const { sessionsInfo, loading } = this.state; + const { sessionsInfo, loading, error } = this.state; if (loading) return ; + if (error) return ; if (sessionsInfo.length === 0) return ; const handleNext = async () => { this.setState({ loadingMore: true }); - await this.getSessionsInfo(); + try { + await this.getSessionsInfo(); + } + catch (error) { + this.setState({ error }); + } this.setState({ loadingMore: false }); } return ( diff --git a/src/charts/VideoStats.js b/src/charts/VideoStats.js index bb68efd..24e2af4 100644 --- a/src/charts/VideoStats.js +++ b/src/charts/VideoStats.js @@ -5,13 +5,14 @@ import { Line } from 'react-chartjs-2'; import { get, map } from 'lodash'; import moment from 'moment'; import Loading from '../components/Loading'; +import ErrorMessage from '../components/ErrorMessage'; const apiKey = process.env.REACT_APP_API_KEY; /* Get all session IDs from the last 10 days */ const sessionSummariesQuery = gql` { - project(projectId: ${apiKey}) { + project(projectId: "${apiKey}") { sessionData { sessionSummaries(start: ${moment().subtract(10, 'days')}) { totalCount @@ -27,7 +28,7 @@ const sessionSummariesQuery = gql` /* Get the publisherMinutes and subscriberMinutes for every session Id within sessionIds */ const sessionQuery = sessionIds => gql` { - project(projectId: ${apiKey}) { + project(projectId: "${apiKey}") { sessionData { sessions(sessionIds: [${sessionIds}]) { resources { @@ -109,25 +110,31 @@ class VideoStats extends Component { return chartData; } async componentDidMount() { - let sessionIds = map(await this.getSessions(), (session) => `"${session.sessionId}"`); - const sessionsInfo = await this.getSessionsInfo(sessionIds); - // Find the meeting that has the largest number of stream statistics let meetingWithMostStats = {}; - let largestStatsCount = 0; - sessionsInfo.forEach(sessionInfo => { - const meetingArray = get(sessionInfo, 'meetings.resources', []); - meetingArray.forEach(meeting => { - let statsCount = 0; - const publisherArray = get(meeting, 'publishers.resources', []); - publisherArray.forEach(pubResources => { - statsCount += get(pubResources, 'streamStatsCollection.resources.length', 0); + try { + let sessionIds = map(await this.getSessions(), (session) => `"${session.sessionId}"`); + const sessionsInfo = await this.getSessionsInfo(sessionIds); + // Find the meeting that has the largest number of stream statistics + let largestStatsCount = 0; + sessionsInfo.forEach(sessionInfo => { + const meetingArray = get(sessionInfo, 'meetings.resources', []); + meetingArray.forEach(meeting => { + let statsCount = 0; + const publisherArray = get(meeting, 'publishers.resources', []); + publisherArray.forEach(pubResources => { + statsCount += get(pubResources, 'streamStatsCollection.resources.length', 0); + }); + if (statsCount > largestStatsCount) { + meetingWithMostStats = meeting; + largestStatsCount = statsCount; + } }); - if (statsCount > largestStatsCount) { - meetingWithMostStats = meeting; - largestStatsCount = statsCount; - } }); - }); + } catch (error) { + this.setState({ + error + }); + } const streamChartData = this.convertStreamArrayToChartData(meetingWithMostStats); this.setState({ streamChartData, @@ -135,7 +142,9 @@ class VideoStats extends Component { }); } render() { + const error = this.state.error; if (this.state.loading) return ; + if (error) return ; return ( get(urlJoin(SERVER_URL, '/token')) .then(({ data }) => ({ - headers: { 'X-OPENTOK-AUTH': data.token } + headers: { [headerKey]: headerValue.replace('$token', data.token) } })) ); From bb6cfb731e9476acbb084c25a7f8a58caef5b442 Mon Sep 17 00:00:00 2001 From: marcioaffonso Date: Thu, 8 Dec 2022 18:43:26 -0300 Subject: [PATCH 2/4] Modify to fix nexmo token generator --- helpers/token-generator.js | 9 ++++++--- package-lock.json | 13 +++++++++---- package.json | 3 ++- server.js | 13 +++++++++---- 4 files changed, 26 insertions(+), 12 deletions(-) diff --git a/helpers/token-generator.js b/helpers/token-generator.js index d52a33c..b091ea4 100644 --- a/helpers/token-generator.js +++ b/helpers/token-generator.js @@ -1,5 +1,5 @@ const jwt = require('jsonwebtoken'); -const fs = require('fs'); +const { v1 } = require('uuid'); const EXPIRATION_SECS = (60 * 60); // 1 hour @@ -15,11 +15,14 @@ const createTokenTokBox = (apiKey, apiSecret) => { }, apiSecret); }; -const createTokenNexmo = (applicationId, privateKeyPath) => { - const privateKey = fs.readFileSync(privateKeyPath); +const createTokenNexmo = (applicationId, privateKey) => { + if (!(privateKey instanceof Buffer)) { + throw new Error("You must set up your private key file."); + } const currentTime = getCurrentTime(); return jwt.sign({ iat: currentTime, + jti: v1(), exp: currentTime + EXPIRATION_SECS, application_id: applicationId }, privateKey, { algorithm: "RS256" }); diff --git a/package-lock.json b/package-lock.json index 0b940fe..4c9b919 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11131,6 +11131,12 @@ "lru-cache": "^6.0.0" } }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "optional": true + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -15956,10 +15962,9 @@ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "optional": true + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" }, "v8-compile-cache": { "version": "2.3.0", diff --git a/package.json b/package.json index f96e8e5..38e120d 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,8 @@ "react-chartjs-2": "^2.7.6", "react-dom": "^16.9.0", "react-scripts": "^4.0.3", - "url-join": "^4.0.1" + "url-join": "^4.0.1", + "uuid": "^9.0.0" }, "scripts": { "start": "concurrently \"npm run server\" \"npm run client\"", diff --git a/server.js b/server.js index d9187fe..e19f5c0 100644 --- a/server.js +++ b/server.js @@ -1,6 +1,7 @@ require('dotenv').config(); const express = require('express'); +const fs = require('fs'); const { createTokenTokBox, createTokenNexmo } = require('./helpers/token-generator'); const API_KEY = process.env.REACT_APP_API_KEY; @@ -10,6 +11,7 @@ const CLIENT_URL = process.env.APP_CLIENT_URL; const PORT = process.env.SERVER_PORT || 4000; const isTokBoxApiKey = /^-?\d+$/.test(API_KEY); +let privateKey; /** * Ensure all the required variables are set for the environment @@ -22,9 +24,12 @@ if (!API_SECRET && isTokBoxApiKey) { console.error('You need to set your secret.'); return; } -if (!PRIVATE_KEY_PATH && !isTokBoxApiKey) { - console.error('You need to set your private key.'); - return; +if (!isTokBoxApiKey) { + if (!PRIVATE_KEY_PATH) { + console.error('You need to set your private key.'); + return; + } + privateKey = fs.readFileSync(PRIVATE_KEY_PATH); } /** @@ -47,7 +52,7 @@ app.use((req, res, next) => { app.get('/token', (req, res) => { const token = isTokBoxApiKey ? createTokenTokBox(API_KEY, API_SECRET) : - createTokenNexmo(API_KEY, PRIVATE_KEY_PATH); + createTokenNexmo(API_KEY, privateKey); res.send(JSON.stringify({ API_KEY, token, From 1b15ea4632d47c2b3004705e696989cc6c229f7a Mon Sep 17 00:00:00 2001 From: marcioaffonso Date: Thu, 8 Dec 2022 18:49:12 -0300 Subject: [PATCH 3/4] Modify to add minor fixes --- helpers/token-generator.js | 10 ++++++++++ server.js | 2 +- src/charts/VideoStats.js | 4 +--- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/helpers/token-generator.js b/helpers/token-generator.js index b091ea4..41c54ab 100644 --- a/helpers/token-generator.js +++ b/helpers/token-generator.js @@ -5,6 +5,11 @@ const EXPIRATION_SECS = (60 * 60); // 1 hour const getCurrentTime = () => Math.floor(new Date() / 1000); +/** + * Generates a new token for TokBox users + * @param apiKey - TokBox API Key + * @param apiSecret - TokBox API Secret + */ const createTokenTokBox = (apiKey, apiSecret) => { const currentTime = getCurrentTime(); return jwt.sign({ @@ -15,6 +20,11 @@ const createTokenTokBox = (apiKey, apiSecret) => { }, apiSecret); }; +/** + * Generates a new token for Nexmo users + * @param applicationId - Nexmo Application ID + * @param privateKey - Buffer containing the private key + */ const createTokenNexmo = (applicationId, privateKey) => { if (!(privateKey instanceof Buffer)) { throw new Error("You must set up your private key file."); diff --git a/server.js b/server.js index e19f5c0..4b009df 100644 --- a/server.js +++ b/server.js @@ -51,7 +51,7 @@ app.use((req, res, next) => { */ app.get('/token', (req, res) => { const token = isTokBoxApiKey ? - createTokenTokBox(API_KEY, API_SECRET) : + createTokenTokBox(API_KEY, API_SECRET) : createTokenNexmo(API_KEY, privateKey); res.send(JSON.stringify({ API_KEY, diff --git a/src/charts/VideoStats.js b/src/charts/VideoStats.js index 24e2af4..fa471bb 100644 --- a/src/charts/VideoStats.js +++ b/src/charts/VideoStats.js @@ -131,9 +131,7 @@ class VideoStats extends Component { }); }); } catch (error) { - this.setState({ - error - }); + this.setState({ error }); } const streamChartData = this.convertStreamArrayToChartData(meetingWithMostStats); this.setState({ From fd64d45cbcf819d839d382c46e605202d27ce43c Mon Sep 17 00:00:00 2001 From: marcioaffonso Date: Fri, 9 Dec 2022 17:05:57 -0300 Subject: [PATCH 4/4] Modify to fix text in readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e8b1b0f..d6dbc05 100644 --- a/README.md +++ b/README.md @@ -32,8 +32,8 @@ Environment Variable Names and Description: - `REACT_APP_INSIGHTS_URL` (Required): The URL for the OpenTok Insights API server. - `REACT_APP_API_KEY` (Required): Your OpenTok API Key. -- `API_SECRET` (Required only for TokBox users): Your OpenTok API Secret (For TokBox users, only). -- `PRIVATE_KEY_PATH` (Required only for Nexmo users): Your Private Key (For Nexmo users, only). +- `API_SECRET` (Required when using an OpenTok project): The OpenTok API secret (For OpenTok projects, only). +- `PRIVATE_KEY_PATH` (Required when using a Vonage application): The file path to the private key (for your Vonage application, only). - `SERVER_PORT` (Required): The port number for your server to run on. - `REACT_APP_SERVER_URL` (Required): The URL for your server app. - `APP_CLIENT_URL` (Required): The URL for your client app.