From 2c95a156099e8ef3bfc260ba0b949faa18fb52ca Mon Sep 17 00:00:00 2001 From: Eugene Pankov Date: Fri, 16 Jul 2021 20:25:00 +0200 Subject: [PATCH] wip --- .gitignore | 1 - package.json | 7 +- poetry.lock | 17 +- pyproject.toml | 1 + src/assets/favicon.png | Bin 0 -> 4038 bytes src/components/configModal.component.pug | 3 + src/components/home.component.ts | 17 -- src/index.html | 13 + src/index.pug | 9 - src/services/appConnector.service.ts | 19 +- src/terminal.html | 21 ++ src/terminal.pug | 17 -- tabby/app/api.py | 25 +- tabby/app/consumers.py | 10 +- tabby/middleware.py | 20 ++ tabby/settings.py | 5 +- webpack.config.js | 32 ++- yarn.lock | 299 +++++++++++++++++------ 18 files changed, 379 insertions(+), 137 deletions(-) create mode 100644 src/assets/favicon.png create mode 100644 src/index.html delete mode 100644 src/index.pug create mode 100644 src/terminal.html delete mode 100644 src/terminal.pug create mode 100644 tabby/middleware.py diff --git a/.gitignore b/.gitignore index 38bbb07..e723c94 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,6 @@ node_modules dist .mypy_cache app-dist -*.html db.sqlite3 __pycache__ .vscode diff --git a/package.json b/package.json index 738e258..5c58dbe 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,6 @@ "@ngtools/webpack": "^12.0.4", "@tabby-gang/to-string-loader": "^1.1.7-beta.1", "@types/node": "^11.9.5", - "analytics": "^0.7.5", "apply-loader": "^2.0.0", "awesome-typescript-loader": "^5.2.1", "bootstrap": "^5.0.1", @@ -36,6 +35,8 @@ "css-loader": "^2.1.0", "deepmerge": "^4.2.2", "file-loader": "^1.1.11", + "html-loader": "^2.1.2", + "html-webpack-plugin": "^5.3.2", "js-yaml": "^4.1.0", "ngx-toastr": "^14.0.0", "node-sass": "^6.0.0", @@ -57,7 +58,5 @@ "webpack-cli": "^4.7.2", "zone.js": "^0.11.4" }, - "dependencies": { - "@analytics/google-analytics": "^0.5.3" - } + "dependencies": {} } diff --git a/poetry.lock b/poetry.lock index 826de18..c01842c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -491,6 +491,17 @@ category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +[[package]] +name = "pyga" +version = "2.6.2" +description = "Server side implementation of Google Analytics in Python." +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +six = "*" + [[package]] name = "pyhamcrest" version = "2.0.2" @@ -841,7 +852,7 @@ testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] [metadata] lock-version = "1.1" python-versions = "^3.7" -content-hash = "e15a4f9c7fdbf146c22cdd14ac7e67c7fa975a1db04f10c34a6b4c8aa8c9c91e" +content-hash = "198155cefe870371fb615a4787e9117dd1f1b9ea25116df55741b1dcd4eb2c12" [metadata.files] appdirs = [ @@ -1088,6 +1099,10 @@ pyflakes = [ {file = "pyflakes-2.3.1-py2.py3-none-any.whl", hash = "sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3"}, {file = "pyflakes-2.3.1.tar.gz", hash = "sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db"}, ] +pyga = [ + {file = "pyga-2.6.2-py3-none-any.whl", hash = "sha256:062e0468915130cde882d52e4ca5bc0a01d21d66b5f23b6e1fec045dcefc5942"}, + {file = "pyga-2.6.2.tar.gz", hash = "sha256:09da0e36bc4d44a82ab3dbc6128300b14715b902d98311f0866162de45d2fddc"}, +] pyhamcrest = [ {file = "PyHamcrest-2.0.2-py3-none-any.whl", hash = "sha256:7ead136e03655af85069b6f47b23eb7c3e5c221aa9f022a4fbb499f5b7308f29"}, {file = "PyHamcrest-2.0.2.tar.gz", hash = "sha256:412e00137858f04bde0729913874a48485665f2d36fe9ee449f26be864af9316"}, diff --git a/pyproject.toml b/pyproject.toml index f45e678..e978701 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,6 +22,7 @@ gunicorn = "^20.1.0" Twisted = "20.3.0" semver = "^2.13.0" requests = "^2.25.1" +pyga = "^2.6.2" [tool.poetry.dev-dependencies] flake8 = "^3.9.2" diff --git a/src/assets/favicon.png b/src/assets/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..c86931639e0753aa6e6a8e53d62fbff8baa584cc GIT binary patch literal 4038 zcmV;%4>|COP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 + + + + + + + Tabby + + + + + diff --git a/src/index.pug b/src/index.pug deleted file mode 100644 index 0780272..0000000 --- a/src/index.pug +++ /dev/null @@ -1,9 +0,0 @@ -doctype html -html - head - base(href='/') - meta(name='viewport', content='initial-scale=1, minimal-ui, shrink-to-fit=no') - script(src='/static/index.js', defer) - title Tabby - body - app diff --git a/src/services/appConnector.service.ts b/src/services/appConnector.service.ts index 5f46abd..480298d 100644 --- a/src/services/appConnector.service.ts +++ b/src/services/appConnector.service.ts @@ -14,7 +14,7 @@ export class SocketProxy { url: string authToken: string - webSocket: WebSocket + webSocket: WebSocket|null initialBuffer: Buffer options: { host: string @@ -35,18 +35,18 @@ export class SocketProxy { this.url = gateway.url this.authToken = gateway.auth_token } catch (err) { - this.error$.next(err) + this.close(err) return } } try { this.webSocket = new WebSocket(this.url) } catch (err) { - this.error$.next(err) + this.close(err) return } this.webSocket.onerror = err => { - this.error$.next(new Error(`Failed to connect to the connection gateway at ${this.url}`)) + this.close(new Error(`Failed to connect to the connection gateway at ${this.url}`)) return } this.webSocket.onmessage = async event => { @@ -100,7 +100,7 @@ export class SocketProxy { } close (error?: Error): void { - this.webSocket.close() + this.webSocket?.close() if (error) { this.error$.next(error) } @@ -177,6 +177,13 @@ export class AppConnectorService { } async chooseConnectionGateway (): Promise { - return await this.http.post('/api/1/gateways/choose', {}).toPromise() + try { + return await this.http.post('/api/1/gateways/choose', {}).toPromise() + } catch (err){ + if (err.status === 503) { + throw new Error('All connections gateway are unavailable right now') + } + throw err + } } } diff --git a/src/terminal.html b/src/terminal.html new file mode 100644 index 0000000..841b3ab --- /dev/null +++ b/src/terminal.html @@ -0,0 +1,21 @@ + + + + + + + + + + + + + diff --git a/src/terminal.pug b/src/terminal.pug deleted file mode 100644 index 1a58f3f..0000000 --- a/src/terminal.pug +++ /dev/null @@ -1,17 +0,0 @@ -doctype html -html.tabby - head - meta(charset='UTF-8') - script(src='/static/terminal.js') - style#custom-css - style. - body { transition: 0.5s background; } - body - app-root(style='display: none') - .preload-logo - div - .tabby-logo - h1.tabby-title Tabby - sup α - .progress - .bar(style='width: 0%') diff --git a/tabby/app/api.py b/tabby/app/api.py index 7d99a28..dc5e192 100644 --- a/tabby/app/api.py +++ b/tabby/app/api.py @@ -5,8 +5,8 @@ from django.conf import settings from django.contrib.auth import logout from dataclasses import dataclass from pathlib import Path -from rest_framework import fields -from rest_framework.exceptions import PermissionDenied, NotFound +from rest_framework import fields, status +from rest_framework.exceptions import APIException, PermissionDenied, NotFound from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response from rest_framework.mixins import ListModelMixin, RetrieveModelMixin, UpdateModelMixin @@ -145,6 +145,12 @@ class InstanceInfoViewSet(RetrieveModelMixin, GenericViewSet): } +class NoGatewaysError(APIException): + status_code = status.HTTP_503_SERVICE_UNAVAILABLE + default_detail ='No connection gateways available.' + default_code = 'no_gateways' + + class ChooseGatewayViewSet(RetrieveModelMixin, GenericViewSet): queryset = Gateway.objects.filter(enabled=True) serializer_class = GatewaySerializer @@ -158,12 +164,19 @@ class ChooseGatewayViewSet(RetrieveModelMixin, GenericViewSet): def get_object(self): gateways = list(self.queryset) + random.shuffle(gateways) if not len(gateways): raise NotFound() - gw = random.choice(gateways) loop = asyncio.new_event_loop() - gw.auth_token = loop.run_until_complete(self._authorize_client(gw)) - loop.close() + try: + for gw in gateways: + try: + gw.auth_token = loop.run_until_complete(self._authorize_client(gw)) + except ConnectionError: + continue + return gw - return gw + raise NoGatewaysError() + finally: + loop.close() diff --git a/tabby/app/consumers.py b/tabby/app/consumers.py index 89e1b67..2aafb0b 100644 --- a/tabby/app/consumers.py +++ b/tabby/app/consumers.py @@ -33,7 +33,10 @@ class GatewayConnection: async def connect(self): self.context = websockets.connect(self.url, ssl=GatewayConnection._ssl_context) - self.socket = await self.context.__aenter__() + try: + self.socket = await self.context.__aenter__() + except OSError: + raise ConnectionError() async def send(self, data): await self.socket.send(data) @@ -69,7 +72,10 @@ class GatewayAdminConnection: async def connect(self): self.context = websockets.connect(self.url, ssl=GatewayAdminConnection._ssl_context) - self.socket = await self.context.__aenter__() + try: + self.socket = await self.context.__aenter__() + except OSError: + raise ConnectionError() async def authorize_client(self) -> str: token = secrets.token_hex(32) diff --git a/tabby/middleware.py b/tabby/middleware.py new file mode 100644 index 0000000..8f6948f --- /dev/null +++ b/tabby/middleware.py @@ -0,0 +1,20 @@ +import logging +from django.conf import settings +from pyga.requests import Tracker, Page, Session, Visitor + + +class GAMiddleware: + def __init__(self, get_response): + self.get_response = get_response + if settings.GA_ID: + self.tracker = Tracker(settings.GA_ID, settings.GA_DOMAIN) + + def __call__(self, request): + response = self.get_response(request) + if settings.GA_ID and request.path in ['/', '/app']: + try: + self.tracker.track_pageview(Page(request.path), Session(), Visitor()) + except Exception: + logging.exception() + + return response diff --git a/tabby/settings.py b/tabby/settings.py index e7265c7..9ab1545 100644 --- a/tabby/settings.py +++ b/tabby/settings.py @@ -46,6 +46,7 @@ MIDDLEWARE = [ 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', + 'tabby.middleware.GAMiddleware', ] ROOT_URLCONF = 'tabby.urls' @@ -184,6 +185,8 @@ for key in [ 'GITHUB_SPONSORS_MIN_PAYMENT', 'GITHUB_TOKEN', 'ENABLE_LOGIN', + 'GA_ID', + 'GA_DOMAIN', ]: globals()[key] = os.getenv(key) @@ -197,7 +200,7 @@ for key in [ for key in [ 'ENABLE_LOGIN', ]: - globals()[key] = int(globals()[key]) if globals()[key] else None + globals()[key] = bool(globals()[key]) if globals()[key] else None for key in [ diff --git a/webpack.config.js b/webpack.config.js index cd39c56..deae2c6 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,24 +1,32 @@ const path = require('path') const webpack = require('webpack') const { AngularWebpackPlugin } = require('@ngtools/webpack') +const HtmlWebpackPlugin = require('html-webpack-plugin') + +const htmlPluginOptions = { + hash: true, + minify: false +} module.exports = { target: 'web', entry: { - 'index.ignore': 'file-loader?name=index.html!pug-html-loader!' + path.resolve(__dirname, './src/index.pug'), index: path.resolve(__dirname, 'src/index.ts'), - 'terminal.ignore': 'file-loader?name=terminal.html!pug-html-loader!' + path.resolve(__dirname, './src/terminal.pug'), terminal: path.resolve(__dirname, 'src/terminal.ts'), }, mode: process.env.DEV ? 'development' : 'production', context: __dirname, - devtool: 'cheap-module-source-map', + devtool: 'source-map', output: { path: path.join(__dirname, 'build'), pathinfo: true, + publicPath: '/static/', filename: '[name].js', chunkFilename: '[name].bundle.js', }, + cache: !process.env.DEV ? false : { + type: 'filesystem', + }, resolve: { modules: [ 'src/', @@ -56,7 +64,11 @@ module.exports = { { test: /\.(jpeg|png|svg)?$/, type: 'asset/resource', - } + }, + { + test: /\.html$/, + loader: 'html-loader', + }, ], }, @@ -65,5 +77,17 @@ module.exports = { tsconfig: 'tsconfig.main.json', directTemplateLoading: false, }), + new HtmlWebpackPlugin({ + template: './src/index.html', + filename: 'index.html', + chunks: ['index'], + ...htmlPluginOptions, + }), + new HtmlWebpackPlugin({ + template: './src/terminal.html', + filename: 'terminal.html', + chunks: ['terminal'], + ...htmlPluginOptions, + }), ], } diff --git a/yarn.lock b/yarn.lock index 3418d83..189cbcd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,32 +2,6 @@ # yarn lockfile v1 -"@analytics/cookie-utils@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@analytics/cookie-utils/-/cookie-utils-0.2.3.tgz#e6ab923f88d89f7b02da0cfab585ff193977052f" - integrity sha512-RiMAVpSluRbWb2hlT9wMJ0r2l+MUZzScYjY+w2iWRzjOr9Zzzs4tYzJT6Sd94PDz3LzCuf4aGOwS6pkKXTEBLw== - -"@analytics/core@^0.10.5": - version "0.10.5" - resolved "https://registry.yarnpkg.com/@analytics/core/-/core-0.10.5.tgz#655f62a77e2290750439cfcd76a840e13ca3c480" - integrity sha512-R2W8ybinHXVnWeVLsvI/+ukHzgCWSRT7EoIi6afbWcAsotneFE6vwLwGAKbWIdnGITl1ZaYU6i6wquF6nfF9sQ== - dependencies: - analytics-utils "^0.4.4" - -"@analytics/google-analytics@^0.5.3": - version "0.5.3" - resolved "https://registry.yarnpkg.com/@analytics/google-analytics/-/google-analytics-0.5.3.tgz#08642f6e9ab9a76aceb53356ea66c53552eec9b7" - integrity sha512-5ZH3hpM8W/rhBrF+3TNjD2ZjabW4A8k/maqF4IGmWWNq31Bd8xh3KAhifDs76xn8hTWKGapTORZLfo87mB+9Dw== - dependencies: - universal-analytics "^0.4.20" - -"@analytics/storage-utils@^0.2.5": - version "0.2.5" - resolved "https://registry.yarnpkg.com/@analytics/storage-utils/-/storage-utils-0.2.5.tgz#bc82a1b5dea8e47ae18718aae687c3408ae7c504" - integrity sha512-RJdKjR4O86eB5fIfApFfhN8Be/Q709DQiRA7UyS0Ymo6w+usnPPxpm6GaKHVop5CIn3vtlMuUxRA4qZhhBrfMw== - dependencies: - "@analytics/cookie-utils" "^0.2.3" - "@angular/animations@^11.0.0": version "11.2.14" resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-11.2.14.tgz#cf119ea779bf11bd3759f1355c85e4e8e9e7bb03" @@ -401,6 +375,11 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.47.tgz#d7a51db20f0650efec24cd04994f523d93172ed4" integrity sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg== +"@types/html-minifier-terser@^5.0.0": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz#693b316ad323ea97eed6b38ed1a3cc02b1672b57" + integrity sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w== + "@types/json-schema@*", "@types/json-schema@^7.0.6": version "7.0.7" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" @@ -645,22 +624,6 @@ amdefine@>=0.0.4: resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= -analytics-utils@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/analytics-utils/-/analytics-utils-0.4.4.tgz#0fc032c8d3dd8a37f6275ea47f678958204d5bf3" - integrity sha512-MJ6sT28L9RdLIxf/rrcfoDmnfWNxmDlF32q5SKbsce+KRPUPu+BuAp4IUUMgM+nYKWZAsxjI/piFXWqOv97awQ== - dependencies: - "@analytics/storage-utils" "^0.2.5" - dlv "^1.1.3" - -analytics@^0.7.5: - version "0.7.5" - resolved "https://registry.yarnpkg.com/analytics/-/analytics-0.7.5.tgz#c65deb0605e6db840415c5f371f894d3dc627919" - integrity sha512-qOQuczBCux574jxfksdVMhD0in9iw8L7PEEjZ/h/OEolbY2UBpFXqydOSyNRG+oF28bBlSPaDQDc3g8f2CwhKA== - dependencies: - "@analytics/core" "^0.10.5" - "@analytics/storage-utils" "^0.2.5" - ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -899,6 +862,11 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + bootstrap@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.0.1.tgz#e7939d599119dc818a90478a2a299bdaff037e09" @@ -982,6 +950,14 @@ call-bind@^1.0.0: function-bind "^1.1.1" get-intrinsic "^1.0.2" +camel-case@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== + dependencies: + pascal-case "^3.1.2" + tslib "^2.0.3" + camelcase-keys@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" @@ -1097,6 +1073,13 @@ clean-css@^4.1.11: dependencies: source-map "~0.6.0" +clean-css@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" + integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== + dependencies: + source-map "~0.6.0" + cliui@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" @@ -1192,6 +1175,11 @@ commander@^2.8.1: resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== +commander@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + commander@^7.0.0: version "7.2.0" resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" @@ -1282,6 +1270,17 @@ css-loader@^2.1.0: postcss-value-parser "^3.3.0" schema-utils "^1.0.0" +css-select@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.1.3.tgz#a70440f70317f2669118ad74ff105e65849c7067" + integrity sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA== + dependencies: + boolbase "^1.0.0" + css-what "^5.0.0" + domhandler "^4.2.0" + domutils "^2.6.0" + nth-check "^2.0.0" + css-selector-tokenizer@^0.7.0: version "0.7.1" resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz#a177271a8bca5019172f4f891fc6eed9cbf68d5d" @@ -1291,6 +1290,11 @@ css-selector-tokenizer@^0.7.0: fastparse "^1.1.1" regexpu-core "^1.0.0" +css-what@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.0.1.tgz#3efa820131f4669a8ac2408f9c32e7c7de9f4cad" + integrity sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg== + cssesc@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" @@ -1332,13 +1336,6 @@ debug@^4.1.0: dependencies: ms "2.1.2" -debug@^4.1.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" - integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== - dependencies: - ms "2.1.2" - decamelize@^1.0.0, decamelize@^1.1.2, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -1398,16 +1395,56 @@ dependency-graph@^0.7.2: resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.7.2.tgz#91db9de6eb72699209d88aea4c1fd5221cac1c49" integrity sha512-KqtH4/EZdtdfWX0p6MGP9jljvxSY6msy/pRUD4jgNwVpv3v1QmNLlsB3LDSSUg79BRVSn7jI1QPRtArGABovAQ== -dlv@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" - integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== - doctypes@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/doctypes/-/doctypes-1.1.0.tgz#ea80b106a87538774e8a3a4a5afe293de489e0a9" integrity sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk= +dom-converter@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-serializer@^1.0.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91" + integrity sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + +domelementtype@^2.0.1, domelementtype@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" + integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== + +domhandler@^4.0.0, domhandler@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.2.0.tgz#f9768a5f034be60a89a27c2e4d0f74eba0d8b059" + integrity sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA== + dependencies: + domelementtype "^2.2.0" + +domutils@^2.5.2, domutils@^2.6.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.7.0.tgz#8ebaf0c41ebafcf55b0b72ec31c56323712c5442" + integrity sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -1466,6 +1503,11 @@ enhanced-resolve@^5.8.0: graceful-fs "^4.2.4" tapable "^2.2.0" +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + env-paths@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" @@ -1975,11 +2017,58 @@ has@^1.0.1, has@^1.0.3: dependencies: function-bind "^1.1.1" +he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + hosted-git-info@^2.1.4: version "2.8.8" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== +html-loader@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/html-loader/-/html-loader-2.1.2.tgz#17eb111441e863a9308071ed876b4ba861f143df" + integrity sha512-XB4O1+6mpLp4qy/3qg5+1QPZ/uXvWtO64hNAX87sKHwcHkp1LJGU7V3sJ9iVmRACElAZXQ4YOO/Lbkx5kYfl9A== + dependencies: + html-minifier-terser "^5.1.1" + parse5 "^6.0.1" + +html-minifier-terser@^5.0.1, html-minifier-terser@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#922e96f1f3bb60832c2634b79884096389b1f054" + integrity sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg== + dependencies: + camel-case "^4.1.1" + clean-css "^4.2.3" + commander "^4.1.1" + he "^1.2.0" + param-case "^3.0.3" + relateurl "^0.2.7" + terser "^4.6.3" + +html-webpack-plugin@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.3.2.tgz#7b04bf80b1f6fe84a6d3f66c8b79d64739321b08" + integrity sha512-HvB33boVNCz2lTyBsSiMffsJ+m0YLIQ+pskblXgN9fnjS1BgEcuAfdInfXfGrkdXV406k9FiDi86eVCDBgJOyQ== + dependencies: + "@types/html-minifier-terser" "^5.0.0" + html-minifier-terser "^5.0.1" + lodash "^4.17.21" + pretty-error "^3.0.4" + tapable "^2.0.0" + +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" + http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" @@ -2479,7 +2568,7 @@ lodash@^4.17.11, lodash@^4.17.4: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== -lodash@^4.17.5: +lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.5: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -2512,6 +2601,13 @@ loud-rejection@^1.0.0: currently-unhandled "^0.4.1" signal-exit "^3.0.0" +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -2721,6 +2817,14 @@ ngx-toastr@^14.0.0: dependencies: tslib "^2.1.0" +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + node-gyp@^7.1.0: version "7.1.2" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-7.1.2.tgz#21a810aebb187120251c3bcec979af1587b188ae" @@ -2803,6 +2907,13 @@ npmlog@^4.0.0, npmlog@^4.1.2: gauge "~2.7.3" set-blocking "~2.0.0" +nth-check@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.0.tgz#1bb4f6dac70072fc313e8c9cd1417b5074c0a125" + integrity sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q== + dependencies: + boolbase "^1.0.0" + number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" @@ -2915,6 +3026,14 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1" integrity sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ== +param-case@^3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + parse-json@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" @@ -2922,6 +3041,19 @@ parse-json@^2.2.0: dependencies: error-ex "^1.2.0" +parse5@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" @@ -3053,6 +3185,14 @@ postcss@^7.0.5, postcss@^7.0.6: source-map "^0.6.1" supports-color "^6.1.0" +pretty-error@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-3.0.4.tgz#94b1d54f76c1ed95b9c604b9de2194838e5b574e" + integrity sha512-ytLFLfv1So4AO1UkoBF6GXQgJRaKbiSiGFICaOPNwQ3CMvBvXpLRubeQWyPGnsbV/t9ml9qto6IeCsho0aEvwQ== + dependencies: + lodash "^4.17.20" + renderkid "^2.0.6" + 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" @@ -3441,6 +3581,22 @@ regjsparser@^0.1.4: dependencies: jsesc "~0.5.0" +relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= + +renderkid@^2.0.6: + version "2.0.7" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.7.tgz#464f276a6bdcee606f4a15993f9b29fc74ca8609" + integrity sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ== + dependencies: + css-select "^4.1.3" + dom-converter "^0.2.0" + htmlparser2 "^6.1.0" + lodash "^4.17.21" + strip-ansi "^3.0.1" + repeat-element@^1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" @@ -3755,7 +3911,7 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.5.3, source-map-support@~0.5.19: +source-map-support@^0.5.3, source-map-support@~0.5.12, source-map-support@~0.5.19: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== @@ -3780,7 +3936,7 @@ source-map@^0.5.0, source-map@^0.5.6, source-map@~0.5.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0: +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -3991,7 +4147,7 @@ tapable@^1.0.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tapable@^2.1.1, tapable@^2.2.0: +tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.0.tgz#5c373d281d9c672848213d0e037d1c4165ab426b" integrity sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw== @@ -4020,6 +4176,15 @@ terser-webpack-plugin@^5.1.1: source-map "^0.6.1" terser "^5.7.0" +terser@^4.6.3: + version "4.8.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" + integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + terser@^5.7.0: version "5.7.0" resolved "https://registry.yarnpkg.com/terser/-/terser-5.7.0.tgz#a761eeec206bc87b605ab13029876ead938ae693" @@ -4101,7 +4266,7 @@ trim-newlines@^1.0.0: dependencies: glob "^7.1.2" -tslib@^2.0.0, tslib@^2.1.0: +tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e" integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg== @@ -4163,15 +4328,6 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^2.0.1" -universal-analytics@^0.4.20: - version "0.4.23" - resolved "https://registry.yarnpkg.com/universal-analytics/-/universal-analytics-0.4.23.tgz#d915e676850c25c4156762471bdd7cf2eaaca8ac" - integrity sha512-lgMIH7XBI6OgYn1woDEmxhGdj8yDefMKg7GkWdeATAlQZFrMrNyxSkpDzY57iY0/6fdlzTbBV03OawvvzG+q7A== - dependencies: - debug "^4.1.1" - request "^2.88.2" - uuid "^3.0.0" - universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" @@ -4207,7 +4363,12 @@ util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -uuid@^3.0.0, uuid@^3.1.0, uuid@^3.3.2: +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= + +uuid@^3.1.0, uuid@^3.3.2: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==