From 4296ee3755ceba406f79448faad273f286eef6d6 Mon Sep 17 00:00:00 2001 From: Luba Kaysina Date: Fri, 10 Jun 2022 16:31:48 +0400 Subject: [PATCH] =?UTF-8?q?=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=D0=B0=20?= =?UTF-8?q?=D0=BD=D0=BE=D1=82=D0=B8=D1=84=D0=B8=D0=BA=D0=B0=D1=86=D0=B8?= =?UTF-8?q?=D1=8E=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=D0=B0=20?= =?UTF-8?q?=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=BE=D0=BD=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B2=D0=BA=D0=BB=D0=B0=D0=B4=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=B7=D0=BE=D0=BD=D1=8B,=20=D0=BF=D0=BE=D0=B4=D1=80=D0=B0?= =?UTF-8?q?=D0=B7=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F,=20=D1=82?= =?UTF-8?q?=D0=B5=D1=80=D0=BC=D0=B8=D0=BD=D0=B0=D0=BB=D1=8B,=20=D0=BA?= =?UTF-8?q?=D0=BB=D0=B8=D0=B5=D0=BD=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- angular.json | 4 +- package-lock.json | 900 ++++++++++++++---- package.json | 3 + src/app/app.component.html | 6 +- src/app/app.component.scss | 2 +- src/app/app.component.ts | 3 + src/app/app.module.ts | 5 + .../login-modal/login-modal.component.ts | 4 +- src/app/components/menu/menu.component.html | 4 +- src/app/components/menu/menu.component.ts | 2 +- src/app/interface/data.ts | 87 +- src/app/pages/areas/areas.component.html | 52 +- src/app/pages/areas/areas.component.ts | 138 ++- src/app/pages/clients/clients.component.html | 50 +- src/app/pages/clients/clients.component.ts | 145 ++- .../pages/divisions/divisions.component.html | 52 +- .../pages/divisions/divisions.component.ts | 145 ++- src/app/pages/orders/orders.component.html | 206 +++- src/app/pages/orders/orders.component.scss | 3 + src/app/pages/orders/orders.component.ts | 205 +++- .../pages/terminals/terminals.component.html | 78 +- .../pages/terminals/terminals.component.ts | 179 +++- src/app/services/jsonrpc.service.ts | 35 +- src/assets/myAudio.mp3 | Bin 0 -> 145690 bytes src/assets/myAudio2.mp3 | Bin 0 -> 58027 bytes src/environments/environment.prod.ts | 2 +- src/environments/environment.ts | 2 +- src/styles.scss | 52 +- 28 files changed, 2109 insertions(+), 255 deletions(-) create mode 100644 src/assets/myAudio.mp3 create mode 100644 src/assets/myAudio2.mp3 diff --git a/angular.json b/angular.json index ea4531b..2856feb 100644 --- a/angular.json +++ b/angular.json @@ -82,8 +82,8 @@ "browserTarget": "selfdelivery-admin-panel:build:production" }, "development": { - "browserTarget": "selfdelivery-admin-panel:build:development", - "proxyConfig": "proxy.confi.json" + "browserTarget": "selfdelivery-admin-panel:build:development" + //"proxyConfig": "proxy.confi.json" } }, "defaultConfiguration": "development" diff --git a/package-lock.json b/package-lock.json index 375e28e..8afa049 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,15 +9,23 @@ "version": "0.0.0", "dependencies": { "@angular/animations": "~13.3.0", + "@angular/cdk": "^13.3.8", "@angular/common": "~13.3.0", "@angular/compiler": "~13.3.0", "@angular/core": "~13.3.0", "@angular/forms": "~13.3.0", + "@angular/material": "^13.3.8", "@angular/platform-browser": "~13.3.0", "@angular/platform-browser-dynamic": "~13.3.0", + "@angular/pwa": "^14.0.0", "@angular/router": "~13.3.0", + "@schematics/angular": "^14.0.0", + "primeicons": "^5.0.0", + "primeng": "^13.4.1", "rxjs": "~7.5.0", "tslib": "^2.3.0", + "uuid": "^8.3.2", + "web-push": "^3.5.0", "zone.js": "~0.11.4" }, "devDependencies": { @@ -26,6 +34,7 @@ "@angular/compiler-cli": "~13.3.0", "@types/jasmine": "~3.10.0", "@types/node": "^12.11.1", + "@types/uuid": "^8.3.4", "jasmine-core": "~4.0.0", "karma": "~6.3.0", "karma-chrome-launcher": "~3.1.0", @@ -347,6 +356,28 @@ "@angular/core": "13.3.8" } }, + "node_modules/@angular/cdk": { + "version": "13.3.8", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-13.3.8.tgz", + "integrity": "sha512-ciLYoVxsqnA9hGJTUW74A56NjArYhFdqFYmVDimWWNYAgY7jY1gCfKq9UtixUErDi29FGSCWRbLuZ6w4q0NYnA==", + "dependencies": { + "tslib": "^2.3.0" + }, + "optionalDependencies": { + "parse5": "^5.0.0" + }, + "peerDependencies": { + "@angular/common": "^13.0.0 || ^14.0.0-0", + "@angular/core": "^13.0.0 || ^14.0.0-0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/cdk/node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "optional": true + }, "node_modules/@angular/cli": { "version": "13.3.5", "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-13.3.5.tgz", @@ -383,6 +414,22 @@ "yarn": ">= 1.13.0" } }, + "node_modules/@angular/cli/node_modules/@schematics/angular": { + "version": "13.3.5", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.3.5.tgz", + "integrity": "sha512-1Ovx0cq72ZaNCyTyRD8ebIwUzpqhEH9ypWF05bfBLq3J0LlZgewIMhPJSxKmwRC3NQB5DZIYEvD0uhzBIuHCCA==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "13.3.5", + "@angular-devkit/schematics": "13.3.5", + "jsonc-parser": "3.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, "node_modules/@angular/common": { "version": "13.3.8", "resolved": "https://registry.npmjs.org/@angular/common/-/common-13.3.8.tgz", @@ -536,6 +583,23 @@ "rxjs": "^6.5.3 || ^7.4.0" } }, + "node_modules/@angular/material": { + "version": "13.3.8", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-13.3.8.tgz", + "integrity": "sha512-y+j4WphhDZXvqKwf/fNuR+QNkH13Qc0fp7//i98f8Gy3Za1NCCc5SfIoifQ7Xqwh2ZKbgnh6GTdtbT4zq+NjaQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/animations": "^13.0.0 || ^14.0.0-0", + "@angular/cdk": "13.3.8", + "@angular/common": "^13.0.0 || ^14.0.0-0", + "@angular/core": "^13.0.0 || ^14.0.0-0", + "@angular/forms": "^13.0.0 || ^14.0.0-0", + "@angular/platform-browser": "^13.0.0 || ^14.0.0-0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, "node_modules/@angular/platform-browser": { "version": "13.3.8", "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-13.3.8.tgz", @@ -574,6 +638,105 @@ "@angular/platform-browser": "13.3.8" } }, + "node_modules/@angular/pwa": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@angular/pwa/-/pwa-14.0.0.tgz", + "integrity": "sha512-HLZY+ELvd/ZAoPZI+IrBCns4yJoIIwTongZ1iVBQ21N1yWjSHv3hdW9u/eqHhq4CPziQ5FMSnNb0jxqJDyYkcQ==", + "dependencies": { + "@angular-devkit/schematics": "14.0.0", + "@schematics/angular": "14.0.0", + "parse5-html-rewriting-stream": "6.0.1" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/pwa/node_modules/@angular-devkit/core": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-14.0.0.tgz", + "integrity": "sha512-xQXpNbIeBjnbY68OFkrpFm6v7xlmTLFk6zGPIkI4T/hrqT2kNmg0y1/FcN6yMBgCEC9WVWR8SHGaPWrc5VVZMw==", + "dependencies": { + "ajv": "8.11.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.0.0", + "rxjs": "6.6.7", + "source-map": "0.7.3" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular/pwa/node_modules/@angular-devkit/schematics": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-14.0.0.tgz", + "integrity": "sha512-/ycPygU1XpdGrROdxHJUUFGwxCf5vRrcBQvVbZhB2s7+DfDAaZHyWEItDeGK04hqpeTFq4m0NUP6ylXZospWvQ==", + "dependencies": { + "@angular-devkit/core": "14.0.0", + "jsonc-parser": "3.0.0", + "magic-string": "0.26.1", + "ora": "5.4.1", + "rxjs": "6.6.7" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/pwa/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@angular/pwa/node_modules/magic-string": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.1.tgz", + "integrity": "sha512-ndThHmvgtieXe8J/VGPjG+Apu7v7ItcD5mhEIvOscWjPF/ccOiLxHaSuCAS2G+3x4GKsAbT8u7zdyamupui8Tg==", + "dependencies": { + "sourcemap-codec": "^1.4.8" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular/pwa/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@angular/pwa/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, "node_modules/@angular/router": { "version": "13.3.8", "resolved": "https://registry.npmjs.org/@angular/router/-/router-13.3.8.tgz", @@ -2514,21 +2677,104 @@ } }, "node_modules/@schematics/angular": { - "version": "13.3.5", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.3.5.tgz", - "integrity": "sha512-1Ovx0cq72ZaNCyTyRD8ebIwUzpqhEH9ypWF05bfBLq3J0LlZgewIMhPJSxKmwRC3NQB5DZIYEvD0uhzBIuHCCA==", - "dev": true, + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-14.0.0.tgz", + "integrity": "sha512-Or9sFl0kGnB9uUs03/4eRtBS5S9WW+HeSe5rS5kFyMaXdydeshAjAVffAbYB6sDp57Qw0E4LvBC0mHzuZGYp/A==", "dependencies": { - "@angular-devkit/core": "13.3.5", - "@angular-devkit/schematics": "13.3.5", + "@angular-devkit/core": "14.0.0", + "@angular-devkit/schematics": "14.0.0", "jsonc-parser": "3.0.0" }, "engines": { - "node": "^12.20.0 || ^14.15.0 || >=16.10.0", + "node": "^14.15.0 || >=16.10.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, + "node_modules/@schematics/angular/node_modules/@angular-devkit/core": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-14.0.0.tgz", + "integrity": "sha512-xQXpNbIeBjnbY68OFkrpFm6v7xlmTLFk6zGPIkI4T/hrqT2kNmg0y1/FcN6yMBgCEC9WVWR8SHGaPWrc5VVZMw==", + "dependencies": { + "ajv": "8.11.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.0.0", + "rxjs": "6.6.7", + "source-map": "0.7.3" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@schematics/angular/node_modules/@angular-devkit/schematics": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-14.0.0.tgz", + "integrity": "sha512-/ycPygU1XpdGrROdxHJUUFGwxCf5vRrcBQvVbZhB2s7+DfDAaZHyWEItDeGK04hqpeTFq4m0NUP6ylXZospWvQ==", + "dependencies": { + "@angular-devkit/core": "14.0.0", + "jsonc-parser": "3.0.0", + "magic-string": "0.26.1", + "ora": "5.4.1", + "rxjs": "6.6.7" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@schematics/angular/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@schematics/angular/node_modules/magic-string": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.1.tgz", + "integrity": "sha512-ndThHmvgtieXe8J/VGPjG+Apu7v7ItcD5mhEIvOscWjPF/ccOiLxHaSuCAS2G+3x4GKsAbT8u7zdyamupui8Tg==", + "dependencies": { + "sourcemap-codec": "^1.4.8" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@schematics/angular/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@schematics/angular/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, "node_modules/@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -2728,6 +2974,12 @@ "@types/node": "*" } }, + "node_modules/@types/uuid": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", + "dev": true + }, "node_modules/@types/ws": { "version": "8.5.3", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", @@ -2978,7 +3230,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, "dependencies": { "debug": "4" }, @@ -3026,7 +3277,6 @@ "version": "8.9.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", - "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -3042,7 +3292,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, "dependencies": { "ajv": "^8.0.0" }, @@ -3107,7 +3356,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { "node": ">=8" } @@ -3128,7 +3376,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, + "devOptional": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -3183,6 +3431,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, "node_modules/async": { "version": "2.6.4", "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", @@ -3365,7 +3624,6 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, "funding": [ { "type": "github", @@ -3409,7 +3667,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -3418,13 +3676,17 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" } }, + "node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, "node_modules/body-parser": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", @@ -3498,7 +3760,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, + "devOptional": true, "dependencies": { "fill-range": "^7.0.1" }, @@ -3539,7 +3801,6 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, "funding": [ { "type": "github", @@ -3559,6 +3820,11 @@ "ieee754": "^1.1.13" } }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -3686,7 +3952,7 @@ "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, + "devOptional": true, "funding": [ { "type": "individual", @@ -3752,7 +4018,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, "dependencies": { "restore-cursor": "^3.1.0" }, @@ -3764,7 +4029,6 @@ "version": "2.6.1", "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", - "dev": true, "engines": { "node": ">=6" }, @@ -3796,7 +4060,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true, "engines": { "node": ">=0.8" } @@ -4444,7 +4707,6 @@ "version": "4.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -4499,7 +4761,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, "dependencies": { "clone": "^1.0.2" } @@ -4739,6 +5000,14 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -5534,8 +5803,7 @@ "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-glob": { "version": "3.2.11", @@ -5599,7 +5867,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, + "devOptional": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -5902,7 +6170,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, + "devOptional": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -6100,6 +6368,17 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "node_modules/http_ece": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/http_ece/-/http_ece-1.1.0.tgz", + "integrity": "sha512-bptAfCDdPJxOs5zYSe7Y3lpr772s1G346R4Td5LgRUeCwIGpCGDUTJxRrhTNcAXbx37spge0kWEIH7QAYWNTlA==", + "dependencies": { + "urlsafe-base64": "~1.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/http-cache-semantics": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", @@ -6199,7 +6478,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, "dependencies": { "agent-base": "6", "debug": "4" @@ -6254,7 +6532,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, "funding": [ { "type": "github", @@ -6372,8 +6649,7 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { "version": "2.0.0", @@ -6520,7 +6796,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, + "devOptional": true, "dependencies": { "binary-extensions": "^2.0.0" }, @@ -6574,7 +6850,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -6592,7 +6868,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, + "devOptional": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -6604,7 +6880,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, "engines": { "node": ">=8" } @@ -6619,7 +6894,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.12.0" } @@ -6698,7 +6973,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, "engines": { "node": ">=10" }, @@ -6952,8 +7226,7 @@ "node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "node_modules/json5": { "version": "2.2.1", @@ -6970,8 +7243,7 @@ "node_modules/jsonc-parser": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", - "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", - "dev": true + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==" }, "node_modules/jsonfile": { "version": "6.1.0", @@ -6994,6 +7266,25 @@ "node >= 0.2.0" ] }, + "node_modules/jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "dependencies": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + }, "node_modules/karma": { "version": "6.3.20", "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.20.tgz", @@ -7373,7 +7664,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -7389,7 +7679,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -7404,7 +7693,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -7420,7 +7708,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -7431,14 +7718,12 @@ "node_modules/log-symbols/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/log-symbols/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "engines": { "node": ">=8" } @@ -7447,7 +7732,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -7661,7 +7945,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, "engines": { "node": ">=6" } @@ -7707,8 +7990,7 @@ "node_modules/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==", - "dev": true + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, "node_modules/minimatch": { "version": "3.0.5", @@ -7725,8 +8007,7 @@ "node_modules/minimist": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "node_modules/minipass": { "version": "3.1.6", @@ -7843,8 +8124,7 @@ "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/multicast-dns": { "version": "6.2.3", @@ -8033,7 +8313,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -8458,7 +8738,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, "dependencies": { "mimic-fn": "^2.1.0" }, @@ -8490,7 +8769,6 @@ "version": "5.4.1", "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, "dependencies": { "bl": "^4.1.0", "chalk": "^4.1.0", @@ -8513,7 +8791,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -8528,7 +8805,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -8544,7 +8820,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -8555,14 +8830,12 @@ "node_modules/ora/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/ora/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "engines": { "node": ">=8" } @@ -8571,7 +8844,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -8742,14 +9014,12 @@ "node_modules/parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" }, "node_modules/parse5-html-rewriting-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-6.0.1.tgz", "integrity": "sha512-vwLQzynJVEfUlURxgnf51yAJDQTtVpNyGD8tKi2Za7m+akukNHxCcUQMAa/mUGLhCeicFdpy7Tlvj8ZNKadprg==", - "dev": true, "dependencies": { "parse5": "^6.0.1", "parse5-sax-parser": "^6.0.1" @@ -8768,7 +9038,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-6.0.1.tgz", "integrity": "sha512-kXX+5S81lgESA0LsDuGjAlBybImAChYRMT+/uKCEXFBFOeEhS52qUCydGhU3qLRD8D9DVjaUo821WK7DM4iCeg==", - "dev": true, "dependencies": { "parse5": "^6.0.1" } @@ -8840,7 +9109,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8.6" }, @@ -9476,6 +9745,27 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/primeicons": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/primeicons/-/primeicons-5.0.0.tgz", + "integrity": "sha512-heygWF0X5HFI1otlZE62pp6ye7sZ8om78J9au2BRkg8O7Y8AHTZ9qKMRzchZUHLe8zUAvdi6hZzzm9XxgwIExw==" + }, + "node_modules/primeng": { + "version": "13.4.1", + "resolved": "https://registry.npmjs.org/primeng/-/primeng-13.4.1.tgz", + "integrity": "sha512-Dp72Yt7ORwoVYXr5r4oNTacQHUyLAdTuvXXNg9ZNjjxCdIfYZsVjTFBHBVzgEo9BpPy+/5twYy1JP/eXXDNPHg==", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": "^13.0.0", + "@angular/core": "^13.0.0", + "@angular/forms": "^13.0.0", + "primeicons": "^5.0.0", + "rxjs": "^6.0.0 || ^7.0.0", + "zone.js": "^0.10.2 || ^0.11.0" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -9534,7 +9824,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, "engines": { "node": ">=6" } @@ -9642,7 +9931,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -9656,7 +9944,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, + "devOptional": true, "dependencies": { "picomatch": "^2.2.1" }, @@ -9783,7 +10071,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -9863,7 +10150,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -9955,14 +10241,12 @@ "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/sass": { "version": "1.49.9", @@ -10324,8 +10608,7 @@ "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "node_modules/slash": { "version": "4.0.0", @@ -10429,7 +10712,6 @@ "version": "0.7.3", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, "engines": { "node": ">= 8" } @@ -10509,8 +10791,7 @@ "node_modules/sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" }, "node_modules/spdy": { "version": "4.0.2", @@ -10604,7 +10885,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, "dependencies": { "safe-buffer": "~5.2.0" } @@ -10613,7 +10893,6 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, "funding": [ { "type": "github", @@ -10647,7 +10926,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -10932,7 +11210,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, + "devOptional": true, "dependencies": { "is-number": "^7.0.0" }, @@ -11106,16 +11384,19 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, "dependencies": { "punycode": "^2.1.0" } }, + "node_modules/urlsafe-base64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/urlsafe-base64/-/urlsafe-base64-1.0.0.tgz", + "integrity": "sha1-I/iQaabGL0bPOh07ABac77kL4MY=" + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "node_modules/utils-merge": { "version": "1.0.1", @@ -11130,7 +11411,6 @@ "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, "bin": { "uuid": "dist/bin/uuid" } @@ -11188,11 +11468,29 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dev": true, "dependencies": { "defaults": "^1.0.3" } }, + "node_modules/web-push": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/web-push/-/web-push-3.5.0.tgz", + "integrity": "sha512-JC0V9hzKTqlDYJ+LTZUXtW7B175qwwaqzbbMSWDxHWxZvd3xY0C2rcotMGDavub2nAAFw+sXTsqR65/KY2A5AQ==", + "dependencies": { + "asn1.js": "^5.3.0", + "http_ece": "1.1.0", + "https-proxy-agent": "^5.0.0", + "jws": "^4.0.0", + "minimist": "^1.2.5", + "urlsafe-base64": "^1.0.0" + }, + "bin": { + "web-push": "src/cli.js" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/webpack": { "version": "5.70.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.70.0.tgz", @@ -11890,6 +12188,23 @@ "tslib": "^2.3.0" } }, + "@angular/cdk": { + "version": "13.3.8", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-13.3.8.tgz", + "integrity": "sha512-ciLYoVxsqnA9hGJTUW74A56NjArYhFdqFYmVDimWWNYAgY7jY1gCfKq9UtixUErDi29FGSCWRbLuZ6w4q0NYnA==", + "requires": { + "parse5": "^5.0.0", + "tslib": "^2.3.0" + }, + "dependencies": { + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "optional": true + } + } + }, "@angular/cli": { "version": "13.3.5", "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-13.3.5.tgz", @@ -11915,6 +12230,19 @@ "semver": "7.3.5", "symbol-observable": "4.0.0", "uuid": "8.3.2" + }, + "dependencies": { + "@schematics/angular": { + "version": "13.3.5", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.3.5.tgz", + "integrity": "sha512-1Ovx0cq72ZaNCyTyRD8ebIwUzpqhEH9ypWF05bfBLq3J0LlZgewIMhPJSxKmwRC3NQB5DZIYEvD0uhzBIuHCCA==", + "dev": true, + "requires": { + "@angular-devkit/core": "13.3.5", + "@angular-devkit/schematics": "13.3.5", + "jsonc-parser": "3.0.0" + } + } } }, "@angular/common": { @@ -12020,6 +12348,14 @@ "tslib": "^2.3.0" } }, + "@angular/material": { + "version": "13.3.8", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-13.3.8.tgz", + "integrity": "sha512-y+j4WphhDZXvqKwf/fNuR+QNkH13Qc0fp7//i98f8Gy3Za1NCCc5SfIoifQ7Xqwh2ZKbgnh6GTdtbT4zq+NjaQ==", + "requires": { + "tslib": "^2.3.0" + } + }, "@angular/platform-browser": { "version": "13.3.8", "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-13.3.8.tgz", @@ -12036,6 +12372,74 @@ "tslib": "^2.3.0" } }, + "@angular/pwa": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@angular/pwa/-/pwa-14.0.0.tgz", + "integrity": "sha512-HLZY+ELvd/ZAoPZI+IrBCns4yJoIIwTongZ1iVBQ21N1yWjSHv3hdW9u/eqHhq4CPziQ5FMSnNb0jxqJDyYkcQ==", + "requires": { + "@angular-devkit/schematics": "14.0.0", + "@schematics/angular": "14.0.0", + "parse5-html-rewriting-stream": "6.0.1" + }, + "dependencies": { + "@angular-devkit/core": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-14.0.0.tgz", + "integrity": "sha512-xQXpNbIeBjnbY68OFkrpFm6v7xlmTLFk6zGPIkI4T/hrqT2kNmg0y1/FcN6yMBgCEC9WVWR8SHGaPWrc5VVZMw==", + "requires": { + "ajv": "8.11.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.0.0", + "rxjs": "6.6.7", + "source-map": "0.7.3" + } + }, + "@angular-devkit/schematics": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-14.0.0.tgz", + "integrity": "sha512-/ycPygU1XpdGrROdxHJUUFGwxCf5vRrcBQvVbZhB2s7+DfDAaZHyWEItDeGK04hqpeTFq4m0NUP6ylXZospWvQ==", + "requires": { + "@angular-devkit/core": "14.0.0", + "jsonc-parser": "3.0.0", + "magic-string": "0.26.1", + "ora": "5.4.1", + "rxjs": "6.6.7" + } + }, + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "magic-string": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.1.tgz", + "integrity": "sha512-ndThHmvgtieXe8J/VGPjG+Apu7v7ItcD5mhEIvOscWjPF/ccOiLxHaSuCAS2G+3x4GKsAbT8u7zdyamupui8Tg==", + "requires": { + "sourcemap-codec": "^1.4.8" + } + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, "@angular/router": { "version": "13.3.8", "resolved": "https://registry.npmjs.org/@angular/router/-/router-13.3.8.tgz", @@ -13411,14 +13815,71 @@ } }, "@schematics/angular": { - "version": "13.3.5", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.3.5.tgz", - "integrity": "sha512-1Ovx0cq72ZaNCyTyRD8ebIwUzpqhEH9ypWF05bfBLq3J0LlZgewIMhPJSxKmwRC3NQB5DZIYEvD0uhzBIuHCCA==", - "dev": true, + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-14.0.0.tgz", + "integrity": "sha512-Or9sFl0kGnB9uUs03/4eRtBS5S9WW+HeSe5rS5kFyMaXdydeshAjAVffAbYB6sDp57Qw0E4LvBC0mHzuZGYp/A==", "requires": { - "@angular-devkit/core": "13.3.5", - "@angular-devkit/schematics": "13.3.5", + "@angular-devkit/core": "14.0.0", + "@angular-devkit/schematics": "14.0.0", "jsonc-parser": "3.0.0" + }, + "dependencies": { + "@angular-devkit/core": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-14.0.0.tgz", + "integrity": "sha512-xQXpNbIeBjnbY68OFkrpFm6v7xlmTLFk6zGPIkI4T/hrqT2kNmg0y1/FcN6yMBgCEC9WVWR8SHGaPWrc5VVZMw==", + "requires": { + "ajv": "8.11.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.0.0", + "rxjs": "6.6.7", + "source-map": "0.7.3" + } + }, + "@angular-devkit/schematics": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-14.0.0.tgz", + "integrity": "sha512-/ycPygU1XpdGrROdxHJUUFGwxCf5vRrcBQvVbZhB2s7+DfDAaZHyWEItDeGK04hqpeTFq4m0NUP6ylXZospWvQ==", + "requires": { + "@angular-devkit/core": "14.0.0", + "jsonc-parser": "3.0.0", + "magic-string": "0.26.1", + "ora": "5.4.1", + "rxjs": "6.6.7" + } + }, + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "magic-string": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.1.tgz", + "integrity": "sha512-ndThHmvgtieXe8J/VGPjG+Apu7v7ItcD5mhEIvOscWjPF/ccOiLxHaSuCAS2G+3x4GKsAbT8u7zdyamupui8Tg==", + "requires": { + "sourcemap-codec": "^1.4.8" + } + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } } }, "@tootallnate/once": { @@ -13617,6 +14078,12 @@ "@types/node": "*" } }, + "@types/uuid": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", + "dev": true + }, "@types/ws": { "version": "8.5.3", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", @@ -13852,7 +14319,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, "requires": { "debug": "4" } @@ -13890,7 +14356,6 @@ "version": "8.9.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", - "dev": true, "requires": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -13902,7 +14367,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, "requires": { "ajv": "^8.0.0" } @@ -13940,8 +14404,7 @@ "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "3.2.1", @@ -13956,7 +14419,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, + "devOptional": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -13999,6 +14462,17 @@ "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==", "dev": true }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, "async": { "version": "2.6.4", "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", @@ -14131,8 +14605,7 @@ "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, "base64id": { "version": "2.0.0", @@ -14156,19 +14629,23 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true + "devOptional": true }, "bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, "requires": { "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" } }, + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, "body-parser": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", @@ -14240,7 +14717,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, + "devOptional": true, "requires": { "fill-range": "^7.0.1" } @@ -14262,12 +14739,16 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, "requires": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -14367,7 +14848,7 @@ "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, + "devOptional": true, "requires": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -14408,7 +14889,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, "requires": { "restore-cursor": "^3.1.0" } @@ -14416,8 +14896,7 @@ "cli-spinners": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", - "dev": true + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==" }, "cli-width": { "version": "3.0.0", @@ -14439,8 +14918,7 @@ "clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" }, "clone-deep": { "version": "4.0.1", @@ -14929,7 +15407,6 @@ "version": "4.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, "requires": { "ms": "2.1.2" } @@ -14967,7 +15444,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, "requires": { "clone": "^1.0.2" } @@ -15151,6 +15627,14 @@ "domhandler": "^4.2.0" } }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -15672,8 +16156,7 @@ "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-glob": { "version": "3.2.11", @@ -15725,7 +16208,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, + "devOptional": true, "requires": { "to-regex-range": "^5.0.1" } @@ -15942,7 +16425,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, + "devOptional": true, "requires": { "is-glob": "^4.0.1" } @@ -16106,6 +16589,14 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "http_ece": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/http_ece/-/http_ece-1.1.0.tgz", + "integrity": "sha512-bptAfCDdPJxOs5zYSe7Y3lpr772s1G346R4Td5LgRUeCwIGpCGDUTJxRrhTNcAXbx37spge0kWEIH7QAYWNTlA==", + "requires": { + "urlsafe-base64": "~1.0.0" + } + }, "http-cache-semantics": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", @@ -16184,7 +16675,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, "requires": { "agent-base": "6", "debug": "4" @@ -16224,8 +16714,7 @@ "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "ignore": { "version": "5.2.0", @@ -16304,8 +16793,7 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { "version": "2.0.0", @@ -16418,7 +16906,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, + "devOptional": true, "requires": { "binary-extensions": "^2.0.0" } @@ -16451,7 +16939,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true + "devOptional": true }, "is-fullwidth-code-point": { "version": "3.0.0", @@ -16463,7 +16951,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, + "devOptional": true, "requires": { "is-extglob": "^2.1.1" } @@ -16471,8 +16959,7 @@ "is-interactive": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" }, "is-lambda": { "version": "1.0.1", @@ -16484,7 +16971,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true + "devOptional": true }, "is-path-cwd": { "version": "2.2.0", @@ -16532,8 +17019,7 @@ "is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" }, "is-what": { "version": "3.14.1", @@ -16729,8 +17215,7 @@ "json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "json5": { "version": "2.2.1", @@ -16741,8 +17226,7 @@ "jsonc-parser": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", - "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", - "dev": true + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==" }, "jsonfile": { "version": "6.1.0", @@ -16760,6 +17244,25 @@ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "dev": true }, + "jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "requires": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + }, "karma": { "version": "6.3.20", "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.20.tgz", @@ -17047,7 +17550,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, "requires": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -17057,7 +17559,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -17066,7 +17567,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -17076,7 +17576,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "requires": { "color-name": "~1.1.4" } @@ -17084,20 +17583,17 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -17260,8 +17756,7 @@ "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" }, "mini-css-extract-plugin": { "version": "2.5.3", @@ -17289,8 +17784,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==", - "dev": true + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, "minimatch": { "version": "3.0.5", @@ -17304,8 +17798,7 @@ "minimist": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "minipass": { "version": "3.1.6", @@ -17393,8 +17886,7 @@ "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "multicast-dns": { "version": "6.2.3", @@ -17539,7 +18031,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true + "devOptional": true }, "normalize-range": { "version": "0.1.2", @@ -17873,7 +18365,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, "requires": { "mimic-fn": "^2.1.0" } @@ -17893,7 +18384,6 @@ "version": "5.4.1", "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, "requires": { "bl": "^4.1.0", "chalk": "^4.1.0", @@ -17910,7 +18400,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -17919,7 +18408,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -17929,7 +18417,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "requires": { "color-name": "~1.1.4" } @@ -17937,20 +18424,17 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -18077,14 +18561,12 @@ "parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" }, "parse5-html-rewriting-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-6.0.1.tgz", "integrity": "sha512-vwLQzynJVEfUlURxgnf51yAJDQTtVpNyGD8tKi2Za7m+akukNHxCcUQMAa/mUGLhCeicFdpy7Tlvj8ZNKadprg==", - "dev": true, "requires": { "parse5": "^6.0.1", "parse5-sax-parser": "^6.0.1" @@ -18103,7 +18585,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-6.0.1.tgz", "integrity": "sha512-kXX+5S81lgESA0LsDuGjAlBybImAChYRMT+/uKCEXFBFOeEhS52qUCydGhU3qLRD8D9DVjaUo821WK7DM4iCeg==", - "dev": true, "requires": { "parse5": "^6.0.1" } @@ -18160,7 +18641,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true + "devOptional": true }, "pify": { "version": "2.3.0", @@ -18571,6 +19052,19 @@ "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", "dev": true }, + "primeicons": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/primeicons/-/primeicons-5.0.0.tgz", + "integrity": "sha512-heygWF0X5HFI1otlZE62pp6ye7sZ8om78J9au2BRkg8O7Y8AHTZ9qKMRzchZUHLe8zUAvdi6hZzzm9XxgwIExw==" + }, + "primeng": { + "version": "13.4.1", + "resolved": "https://registry.npmjs.org/primeng/-/primeng-13.4.1.tgz", + "integrity": "sha512-Dp72Yt7ORwoVYXr5r4oNTacQHUyLAdTuvXXNg9ZNjjxCdIfYZsVjTFBHBVzgEo9BpPy+/5twYy1JP/eXXDNPHg==", + "requires": { + "tslib": "^2.3.0" + } + }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -18621,8 +19115,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==", - "dev": true + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "qjobs": { "version": "1.2.0", @@ -18695,7 +19188,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -18706,7 +19198,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, + "devOptional": true, "requires": { "picomatch": "^2.2.1" } @@ -18810,8 +19302,7 @@ "require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" }, "requires-port": { "version": "1.0.0", @@ -18872,7 +19363,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, "requires": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -18931,14 +19421,12 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sass": { "version": "1.49.9", @@ -19220,8 +19708,7 @@ "signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "slash": { "version": "4.0.0", @@ -19301,8 +19788,7 @@ "source-map": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" }, "source-map-js": { "version": "1.0.2", @@ -19363,8 +19849,7 @@ "sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" }, "spdy": { "version": "4.0.2", @@ -19440,7 +19925,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, "requires": { "safe-buffer": "~5.2.0" }, @@ -19448,8 +19932,7 @@ "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" } } }, @@ -19468,7 +19951,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -19662,7 +20144,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, + "devOptional": true, "requires": { "is-number": "^7.0.0" } @@ -19780,16 +20262,19 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, "requires": { "punycode": "^2.1.0" } }, + "urlsafe-base64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/urlsafe-base64/-/urlsafe-base64-1.0.0.tgz", + "integrity": "sha1-I/iQaabGL0bPOh07ABac77kL4MY=" + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "utils-merge": { "version": "1.0.1", @@ -19800,8 +20285,7 @@ "uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" }, "validate-npm-package-name": { "version": "3.0.0", @@ -19847,11 +20331,23 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dev": true, "requires": { "defaults": "^1.0.3" } }, + "web-push": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/web-push/-/web-push-3.5.0.tgz", + "integrity": "sha512-JC0V9hzKTqlDYJ+LTZUXtW7B175qwwaqzbbMSWDxHWxZvd3xY0C2rcotMGDavub2nAAFw+sXTsqR65/KY2A5AQ==", + "requires": { + "asn1.js": "^5.3.0", + "http_ece": "1.1.0", + "https-proxy-agent": "^5.0.0", + "jws": "^4.0.0", + "minimist": "^1.2.5", + "urlsafe-base64": "^1.0.0" + } + }, "webpack": { "version": "5.70.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.70.0.tgz", diff --git a/package.json b/package.json index 8500e24..6cb6bc9 100644 --- a/package.json +++ b/package.json @@ -19,12 +19,15 @@ "@angular/material": "^13.3.8", "@angular/platform-browser": "~13.3.0", "@angular/platform-browser-dynamic": "~13.3.0", + "@angular/pwa": "^14.0.0", "@angular/router": "~13.3.0", + "@schematics/angular": "^14.0.0", "primeicons": "^5.0.0", "primeng": "^13.4.1", "rxjs": "~7.5.0", "tslib": "^2.3.0", "uuid": "^8.3.2", + "web-push": "^3.5.0", "zone.js": "~0.11.4" }, "devDependencies": { diff --git a/src/app/app.component.html b/src/app/app.component.html index 9d1cd13..ecf263a 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -4,12 +4,12 @@ - - + + - \ No newline at end of file + diff --git a/src/app/app.component.scss b/src/app/app.component.scss index 366c3ba..1ff9aa9 100644 --- a/src/app/app.component.scss +++ b/src/app/app.component.scss @@ -1,3 +1,3 @@ .main-container { height: 100%; -} \ No newline at end of file +} diff --git a/src/app/app.component.ts b/src/app/app.component.ts index cb6f19f..81b3fca 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -1,4 +1,5 @@ import { Component, ComponentRef, EmbeddedViewRef, OnInit, Type, ViewContainerRef } from '@angular/core'; +import { Router } from '@angular/router'; import { DialogService } from 'primeng/dynamicdialog'; import {Toast} from "primeng/toast"; import { ExitComponentComponent } from './components/exit-component/exit-component.component'; @@ -20,12 +21,14 @@ export class AppComponent implements OnInit { private cookiesService: CookiesService, private viewContainerRef: ViewContainerRef, public dialogService: DialogService, + private router: Router, ) {} ngOnInit(): void { this.messageComponent = this.appendComponent(Toast); const token = decodeURI(this.cookiesService.getItem('token') ?? '') this.isAuth = token.length ? true : false; + this.router.navigate(['/clients']) } diff --git a/src/app/app.module.ts b/src/app/app.module.ts index e632d82..5753555 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -21,6 +21,9 @@ import { DivisionsComponent } from './pages/divisions/divisions.component'; import { AreasComponent } from './pages/areas/areas.component'; import { MenuComponent } from './components/menu/menu.component'; import { ExitComponentComponent } from './components/exit-component/exit-component.component'; +import { TableModule } from 'primeng/table'; +import { ScrollPanelModule } from 'primeng/scrollpanel'; + const routes = [ { path: 'clients', component: ClientsComponent }, @@ -56,6 +59,8 @@ const routes = [ FormsModule, ReactiveFormsModule, MessagesModule, + TableModule, + ScrollPanelModule, RouterModule.forRoot(routes) ], providers: [MessageService, {provide: APP_BASE_HREF, useValue: '/'}], diff --git a/src/app/components/login-modal/login-modal.component.ts b/src/app/components/login-modal/login-modal.component.ts index f948c8e..2a5b7ea 100644 --- a/src/app/components/login-modal/login-modal.component.ts +++ b/src/app/components/login-modal/login-modal.component.ts @@ -54,7 +54,7 @@ export class LoginModalComponent implements OnInit { params: [userData.login, userData.password] }, RpcService.authService, false).subscribe({ next: (result) => { - this.cookiesService.setCookie('token', result); + this.cookiesService.setCookie('token', result.result); this.messageService.add({ severity: 'success', summary: 'Авторизация прошла успешно!', @@ -73,4 +73,4 @@ export class LoginModalComponent implements OnInit { ); } -} \ No newline at end of file +} diff --git a/src/app/components/menu/menu.component.html b/src/app/components/menu/menu.component.html index a83147c..d719f87 100644 --- a/src/app/components/menu/menu.component.html +++ b/src/app/components/menu/menu.component.html @@ -1,5 +1,5 @@ diff --git a/src/app/components/menu/menu.component.ts b/src/app/components/menu/menu.component.ts index a45dbdf..b3959d9 100644 --- a/src/app/components/menu/menu.component.ts +++ b/src/app/components/menu/menu.component.ts @@ -42,4 +42,4 @@ export class MenuComponent implements OnInit { redirect(path: string) { this.router.navigate([path]); } -} \ No newline at end of file +} diff --git a/src/app/interface/data.ts b/src/app/interface/data.ts index 5067be6..0a257a9 100644 --- a/src/app/interface/data.ts +++ b/src/app/interface/data.ts @@ -6,4 +6,89 @@ export interface UserData { export interface MenuItem { name: string; path: string; -} \ No newline at end of file +} + +export interface Delivery_address { + flat: string; + house: string; + street: string; +} + +export interface Modifiers { + group: string; + title: string; +} + +export interface Products { + area: string; + id: string; + modifiers: Modifiers[]; + nomenclature_code: string; + requested_quantity: string; + status: string; + stock_quantity: string; + title: string; + unit: string; +} + +export interface Address { + client_id: string; + id: string; + name: string; +} + +export interface Payment { + summ: number; + type: string; +} + +export interface Order { + address: Address; + comment: string; + date_created: string; + delivery_address: Delivery_address; + due_datetime: string; + external_id: string; + id: string; + payment: Payment[]; + phone: string; + products: Products[]; + status: string; + status_h: string; + item_style: string; + isWarnLine: boolean; +} + +export interface Client { + id: string; + name: string; + choose: boolean; +} + +export interface Divisions { + client_id: string; + id: string; + name: string; +} + +export interface Areas { + client_id: string; + id: string; + name: string; + selected: boolean; +} + +export interface Terminals { + area_types: []; + client_id: string; + division_id: string; + id: string; + public_id: string; +} + +export interface Notification { + id: string; + new: boolean; + new_fin: boolean; + due: boolean; +} diff --git a/src/app/pages/areas/areas.component.html b/src/app/pages/areas/areas.component.html index f922b61..a6291ad 100644 --- a/src/app/pages/areas/areas.component.html +++ b/src/app/pages/areas/areas.component.html @@ -1 +1,51 @@ -

areas

\ No newline at end of file +

Зоны

+ +

Выбран: {{chooseName}}

+ +

Выберите клиента

+
+ +
+ + + + + ID + Наименование зоны + + + + + + + + + + {{areas.id}} + {{areas.name}} + + + + + + + +
+ + + + + + + Введите наименование зоны: + + + + +
+ +
+ + + +
diff --git a/src/app/pages/areas/areas.component.ts b/src/app/pages/areas/areas.component.ts index a3b2ec0..11bd36b 100644 --- a/src/app/pages/areas/areas.component.ts +++ b/src/app/pages/areas/areas.component.ts @@ -1,4 +1,7 @@ import { Component, OnInit } from "@angular/core"; +import { JsonrpcService, RpcService } from "src/app/services/jsonrpc.service"; +import { MessageService } from "primeng/api"; +import { Areas } from "src/app/interface/data"; @Component({ @@ -7,11 +10,134 @@ import { Component, OnInit } from "@angular/core"; styleUrls: ['./areas.component.scss'] }) export class AreasComponent implements OnInit { - constructor( + public areas: Areas[] = []; + public new_ar = true; + public choose = this.jsonRpcService.ClientChoose; + public create = false; + public chooseName!: string; - ) {} + constructor( + private jsonRpcService: JsonrpcService, + private messageService: MessageService + ) { } - ngOnInit(): void { - - } -} \ No newline at end of file + ngOnInit(): void { + if (this.choose) { this.getAreas() }; + } + + async getAreas() { + this.create = false; + this.new_ar = true; + await this.jsonRpcService.rpc2({ + method: 'getAreas', + params: { + "client_id": this.choose + } + }, RpcService.authService, false) + .subscribe({ + next: (result) => { + let data = result.result; + this.areas = data; + }, + error: (err) => { + console.log('ERROR: ', err) + this.messageService.add({ + severity: 'error', + summary: 'Произошла ошибка!', + }) + } + }); + this.chooseName = this.jsonRpcService.ClientChooseName; + } + + updateArea1(id: any, name: any) { + this.new_ar = false; + setTimeout(() => document.getElementsByTagName("input")[0].value = name, 100); + this.jsonRpcService.changeId = id + } + + updateArea() { + let name_n = document.getElementsByTagName("input")[0].value + this.jsonRpcService.rpc2({ + method: 'updateArea', + params: { + "client_id": this.choose, + "area_id": this.jsonRpcService.changeId, + "name": name_n + } + }, RpcService.authService, false) + .subscribe({ + next: (result) => { + let data = result.result; + /*this.clients = data;*/ + }, + error: (err) => { + console.log('ERROR: ', err) + this.messageService.add({ + severity: 'error', + summary: 'Произошла ошибка!', + }) + } + }); + this.new_ar = true; + this.jsonRpcService.changeId = ""; + this.getAreas(); + } + + deleteArea(id: any) { + this.jsonRpcService.rpc2({ + method: 'deleteArea', + params: { + "client_id": this.choose, + "area_id": id + } + }, RpcService.authService, false) + .subscribe({ + next: (result) => { + let data = result.result; + /*this.clients = data;*/ + }, + error: (err) => { + console.log('ERROR: ', err) + this.messageService.add({ + severity: 'error', + summary: 'Произошла ошибка!', + }) + } + }); + setTimeout(() => this.getAreas(), 100); + } + + + createArea() { + this.new_ar = false; + this.create = true; + } + + createArea2() { + let name = document.getElementsByTagName("input")[0].value + this.jsonRpcService.rpc2({ + method: 'createArea', + params: { + "name": name, + "client_id": this.choose + } + }, RpcService.authService, false) + .subscribe({ + next: (result) => { + let data = result.result; + /*this.clients = data;*/ + }, + error: (err) => { + console.log('ERROR: ', err) + this.messageService.add({ + severity: 'error', + summary: 'Произошла ошибка!', + }) + } + }); + setTimeout(() => this.getAreas(), 100); + + } + +} diff --git a/src/app/pages/clients/clients.component.html b/src/app/pages/clients/clients.component.html index c2c65e6..d742916 100644 --- a/src/app/pages/clients/clients.component.html +++ b/src/app/pages/clients/clients.component.html @@ -1 +1,49 @@ -

Clients

\ No newline at end of file +

Клиенты

+ +

Выбран: {{chooseName}}

+ +

Выберите клиента

+
+ +
+ + + + + ID + Наименование организации + + + + + + + + + {{client.id}} + {{client.name}} + + + + + + +
+ + + + + + + Введите наименование организации: + + + + +
+ +
+ + + +
diff --git a/src/app/pages/clients/clients.component.ts b/src/app/pages/clients/clients.component.ts index 404e56e..8fd8680 100644 --- a/src/app/pages/clients/clients.component.ts +++ b/src/app/pages/clients/clients.component.ts @@ -1,4 +1,8 @@ import { Component, OnInit } from "@angular/core"; +import { JsonrpcService, RpcService } from "src/app/services/jsonrpc.service"; +import { MessageService } from "primeng/api"; +import { Client } from "src/app/interface/data"; + @Component({ @@ -7,11 +11,142 @@ import { Component, OnInit } from "@angular/core"; styleUrls: ['./clients.component.scss'] }) export class ClientsComponent implements OnInit { + public clients: Client[] = []; + public new_cl = true; + public choose = this.jsonRpcService.ClientChoose; + public create = false; + public chooseName!: string; + public myAudio = new Audio(); + + constructor( + private jsonRpcService: JsonrpcService, + private messageService: MessageService + ) { } - ) {} + ngOnInit(): void { + this.getClients(); + } - ngOnInit(): void { - - } -} \ No newline at end of file + async getClients() { + this.create = false; + this.new_cl = true; + await this.jsonRpcService.rpc2({ + method: 'getClients', + params: { + "name": "" + } + }, RpcService.authService, false) + .subscribe({ + next: (result) => { + let data = result.result; + this.clients = data; + }, + error: (err) => { + console.log('ERROR: ', err) + this.messageService.add({ + severity: 'error', + summary: 'Произошла ошибка!', + }) + } + }); + this.chooseName = this.jsonRpcService.ClientChooseName; + } + + changeClient1(id: any, name: any) { + this.new_cl = false; + setTimeout(() => document.getElementsByTagName("input")[0].value = name, 100); + this.jsonRpcService.changeId = id + } + + changeClient() { + let name_n = document.getElementsByTagName("input")[0].value + this.jsonRpcService.rpc2({ + method: 'updateClient', + params: { + "client_id": this.jsonRpcService.changeId, + "name": name_n + } + }, RpcService.authService, false) + .subscribe({ + next: (result) => { + let data = result.result; + /*this.clients = data;*/ + }, + error: (err) => { + console.log('ERROR: ', err) + this.messageService.add({ + severity: 'error', + summary: 'Произошла ошибка!', + }) + } + }); + this.new_cl = true; + this.jsonRpcService.changeId = ""; + this.getClients(); + } + + deleteClient(id: any) { + this.jsonRpcService.rpc2({ + method: 'deleteClient', + params: { + "client_id": id + } + }, RpcService.authService, false) + .subscribe({ + next: (result) => { + let data = result.result; + /*this.clients = data;*/ + }, + error: (err) => { + console.log('ERROR: ', err) + this.messageService.add({ + severity: 'error', + summary: 'Произошла ошибка!', + }) + } + }); + setTimeout(() => this.getClients(), 100); + } + + chooseClient(id: any, name: any) { + this.myAudio.src = "../../../assets/myAudio.mp3" + this.jsonRpcService.ClientChooseName = name; + this.jsonRpcService.ClientChoose = id; + this.choose = this.jsonRpcService.ClientChoose; + this.chooseName = this.jsonRpcService.ClientChooseName; + //this.myAudio.load(); + //this.myAudio.play(); + } + + createCient() { + this.new_cl = false; + this.create = true; + } + + createClient2() { + let name = document.getElementsByTagName("input")[0].value + this.jsonRpcService.rpc2({ + method: 'createClient', + params: { + "name": name + } + }, RpcService.authService, false) + .subscribe({ + next: (result) => { + let data = result.result; + /*this.clients = data;*/ + }, + error: (err) => { + console.log('ERROR: ', err) + this.messageService.add({ + severity: 'error', + summary: 'Произошла ошибка!', + }) + } + }); + setTimeout(() => this.getClients(), 100); + + } + +} diff --git a/src/app/pages/divisions/divisions.component.html b/src/app/pages/divisions/divisions.component.html index c93b62b..a903aad 100644 --- a/src/app/pages/divisions/divisions.component.html +++ b/src/app/pages/divisions/divisions.component.html @@ -1 +1,51 @@ -

divisions

\ No newline at end of file +

Подразделения

+ +

Выбран: {{chooseName}}

+ +

Выберите клиента

+
+ +
+ + + + + ID + Наименование подразделения + + + + + + + + + + {{Division.id}} + {{Division.name}} + + + + + + + +
+ + + + + + + Введите наименование подразделения: + + + + +
+ +
+ + + +
diff --git a/src/app/pages/divisions/divisions.component.ts b/src/app/pages/divisions/divisions.component.ts index 8994b77..a5c0695 100644 --- a/src/app/pages/divisions/divisions.component.ts +++ b/src/app/pages/divisions/divisions.component.ts @@ -1,4 +1,7 @@ import { Component, OnInit } from "@angular/core"; +import { JsonrpcService, RpcService } from "src/app/services/jsonrpc.service"; +import { MessageService } from "primeng/api"; +import { Divisions } from "src/app/interface/data"; @Component({ @@ -7,11 +10,141 @@ import { Component, OnInit } from "@angular/core"; styleUrls: ['./divisions.component.scss'] }) export class DivisionsComponent implements OnInit { - constructor( + public divisions: Divisions[] = []; + public new_div = true; + public choose = this.jsonRpcService.ClientChoose; + public create = false; + public chooseName!: string; - ) {} + constructor( + private jsonRpcService: JsonrpcService, + private messageService: MessageService + ) { } - ngOnInit(): void { - - } -} \ No newline at end of file + ngOnInit(): void { + if (this.choose) { this.getDivisions() }; + } + + async getDivisions() { + this.create = false; + this.new_div = true; + await this.jsonRpcService.rpc2({ + method: 'getDivisions', + params: { + "client_id": this.choose + } + }, RpcService.authService, false) + .subscribe({ + next: (result) => { + let data = result.result; + this.divisions = data; + }, + error: (err) => { + console.log('ERROR: ', err) + this.messageService.add({ + severity: 'error', + summary: 'Произошла ошибка!', + }) + } + }); + this.chooseName = this.jsonRpcService.ClientChooseName; + } + + changeDivision1(id: any, name: any) { + this.new_div = false; + setTimeout(() => document.getElementsByTagName("input")[0].value = name, 100); + this.jsonRpcService.changeId = id + } + + changeDivision() { + let name_n = document.getElementsByTagName("input")[0].value + this.jsonRpcService.rpc2({ + method: 'updateDivision', + params: { + "client_id": this.choose, + "division_id": this.jsonRpcService.changeId, + "name": name_n + } + }, RpcService.authService, false) + .subscribe({ + next: (result) => { + let data = result.result; + /*this.clients = data;*/ + }, + error: (err) => { + console.log('ERROR: ', err) + this.messageService.add({ + severity: 'error', + summary: 'Произошла ошибка!', + }) + } + }); + this.new_div = true; + this.jsonRpcService.changeId = ""; + this.getDivisions(); + } + + deleteDivision(id: any) { + this.jsonRpcService.rpc2({ + method: 'deleteDivision', + params: { + "client_id": this.choose, + "division_id": id + } + }, RpcService.authService, false) + .subscribe({ + next: (result) => { + let data = result.result; + /*this.clients = data;*/ + }, + error: (err) => { + console.log('ERROR: ', err) + this.messageService.add({ + severity: 'error', + summary: 'Произошла ошибка!', + }) + } + }); + setTimeout(() => this.getDivisions(), 100); + } + + chooseClient(id: any, name: any) { + console.log(id); + this.jsonRpcService.ClientChooseName = name; + this.jsonRpcService.ClientChoose = id; + this.choose = this.jsonRpcService.ClientChoose; + this.chooseName = this.jsonRpcService.ClientChooseName; + } + + createDivision() { + this.new_div = false; + this.create = true; + } + + createDivision2() { + let name = document.getElementsByTagName("input")[0].value + this.jsonRpcService.rpc2({ + method: 'createDivision', + params: { + "name": name, + "client_id": this.choose + } + }, RpcService.authService, false) + .subscribe({ + next: (result) => { + let data = result.result; + /*this.clients = data;*/ + }, + error: (err) => { + console.log('ERROR: ', err) + this.messageService.add({ + severity: 'error', + summary: 'Произошла ошибка!', + }) + } + }); + setTimeout(() => this.getDivisions(), 100); + + } + +} diff --git a/src/app/pages/orders/orders.component.html b/src/app/pages/orders/orders.component.html index 94bfa0b..80001c4 100644 --- a/src/app/pages/orders/orders.component.html +++ b/src/app/pages/orders/orders.component.html @@ -1 +1,205 @@ -

Orders

\ No newline at end of file +

Заказы

+ +

Выбран: {{chooseName}}

+ +

Выберите клиента

+
+ + +
+

Время последнего обновления: {{lastOrderUpdateTime | date:'dd.MM.yyyy HH:mm:ss'}}

+ + + + + ID + Статус + + ID точки заказа + Дата создания + Дата самовывоза + Внешний ID заказа + Телефон клиента + Тип оплаты + + + + + + + + + + + + + + + + + + {{order.id}} + {{order.status_h}} + {{order.address.name}} + {{order.date_created | date:'HH:mm dd.MM.yyyy'}} + {{order.due_datetime | date:'HH:mm dd.MM.yyyy'}} + {{order.external_id}} + {{order.phone}} + {{order.payment[0].type}} + + + + Нет данных + + +
+ + +
+ +

Заказ: {{order[0].id}}

+ + + + Внешний ID заказа + Дата создания + ID точки заказа + Статус + + + + + + + + + + + + + +

Состав заказа:

+ + + + Товар + Кол-во (факт.) + Цена + Кол-во (реал.) + Стоимость + Модификаторы + + + + + + {{ord.title}} + + {{ord.requested_quantity}} + - + {{ord.stock_quantity}} + - + + + + + + + + + {{mod.group}} + + + {{mod.title}} + + + + + + + +

Оплата:

+ + + + Сумма к оплате по безналу: + Тип оплаты: + + + + + {{pay.summ}} + {{pay.type}} + + + +
+
+ + + diff --git a/src/app/pages/orders/orders.component.scss b/src/app/pages/orders/orders.component.scss index e69de29..b9956f0 100644 --- a/src/app/pages/orders/orders.component.scss +++ b/src/app/pages/orders/orders.component.scss @@ -0,0 +1,3 @@ +.Red { + color: red; +} diff --git a/src/app/pages/orders/orders.component.ts b/src/app/pages/orders/orders.component.ts index 4e0a4e0..5829bf9 100644 --- a/src/app/pages/orders/orders.component.ts +++ b/src/app/pages/orders/orders.component.ts @@ -1,17 +1,206 @@ -import { Component, OnInit } from "@angular/core"; +import { Component, OnInit, Renderer2, ElementRef, Input } from "@angular/core"; +import { TableModule } from 'primeng/table'; +import { JsonrpcService, RpcService } from "src/app/services/jsonrpc.service"; +import { MessageService } from "primeng/api"; +import { Order, Products, Delivery_address, Notification } from "src/app/interface/data"; +import { ClientsComponent } from "../clients/clients.component"; +/*import { SwPush, NewsletterService } from '@angular/service-worker*/ @Component({ selector: 'app-orders', templateUrl: './orders.component.html', - styleUrls: ['./orders.component.scss'] + styleUrls: ['./orders.component.scss'], + providers: [ClientsComponent] }) export class OrdersComponent implements OnInit { + public orders: Array = []; + public order: Array = []; + public view: boolean = true; + public chooseName!: string; + public lastOrderUpdateTime: string = ""; + public choose = this.jsonRpcService.ClientChoose; + public notification: Array = []; + public map_new = new Map(); + public map_new_fin = new Map(); + public map_due = new Map(); + public myAudioP = new Audio(); + public myAudioA = new Audio(); + + + public statuses = [ + "К готовке", + "Готовится", + "Готово", + "Отменен", + "Можно забирать", + "У курьера", + "Доставлен", + "Не подтвержден", + "Требует согласия", + "Требуется оплата", + "Оплата просрочена", + "Новый", + "Выдан", + "Нужен возврат" + ]; + + + constructor( - - ) {} - - ngOnInit(): void { - + private jsonRpcService: JsonrpcService, + private messageService: MessageService, + private clientsComponent: ClientsComponent, + ) { } -} \ No newline at end of file + + + + async ngOnInit() { + + if (this.choose) { + this.getOrders(); + setTimeout(() => this.notif(), 700); + + setInterval(() => this.getOrders(), 60000); + this.chooseName = this.jsonRpcService.ClientChooseName; + } + + } + + notif() { + for (let i = 0; i < this.orders.length; i++) { + this.map_new.set(this.orders[i].id, true) + this.map_new_fin.set(this.orders[i].id, true) + } + } + + async getOrders() { + this.myAudioP.src = "../../../assets/myAudio.mp3"; + this.myAudioA.src = "../../../assets/myAudio2.mp3"; + if (this.view == true) { + await this.jsonRpcService.rpc2({ + method: 'getOrders', + params: { + "client_id": this.choose, "order_status": [ + "readyToStart", + "inProgress", + "complete", + "cancel", + "readyToPickup", + "onWay", + "delivered", + "unconfirmed", + "requiresConsent", + "requiresPayment", + "paymentOverdue", + "newOrder", + "issued", + "needReturnPayment" + ] + } + }, RpcService.authService, false) + .subscribe({ + next: (result) => { + let data = result.result; + this.color(data); + this.orders = data; + + + this.lastOrderUpdateTime = Date().toString(); + }, + error: (err) => { + console.log('ERROR: ', err) + this.messageService.add({ + severity: 'error', + summary: 'Произошла ошибка!', + }) + } + } + ); + } + setTimeout (() => this.notif2(), 700) + + } + + + +notif2() { + for (let i = 0; i < this.orders.length; i++) { + if (this.map_new.has(this.orders[i].id) == false) { + this.map_new.set(this.orders[i].id, true); + } + if (this.map_new_fin.has(this.orders[i].id) == false && this.map_new.has(this.orders[i].id) == true) { + this.myAudioP.load(); + this.myAudioP.play(); + this.map_new_fin.set(this.orders[i].id, true); + } + var date1 = new Date(); + var date2 = new Date(this.orders[i].due_datetime); + if ((date2.getTime() - date1.getTime() < 1000 * 3600) && (this.orders[i].status_h == 'К готовке') && (this.map_due.has(this.orders[i].id) == false) && (date2.getTime() - date1.getTime() > 1000 * 1080)) { + this.myAudioA.load(); + this.myAudioA.play(); + this.map_due.set(this.orders[i].id, true); + } + } +} + + + async vievOrder(id: any) { + + await this.jsonRpcService.rpc2({ + method: 'getOrders', + params: { "client_id": this.choose, "order_id": id } + }, RpcService.authService, false) + .subscribe({ + next: (result) => { + let data = result.result + + this.order = data + }, + error: (err) => { + console.log('ERROR: ', err) + this.messageService.add({ + severity: 'error', + summary: 'Произошла ошибка!', + }) + } + } + ); + this.view = false + } + + listOrders() { + this.view = true; + this.getOrders(); + } + + color(targetData: any) { + for (let i = 0; i < targetData.length; i++) { + var item = targetData[i]; + var date1 = new Date(); + var date2 = new Date(item.due_datetime); + if ((date2.getTime() - date1.getTime() < 1000 * 3600) && (item.status_h == 'К готовке') && (date2.getTime() - date1.getTime() >= 0)) { + item.item_style = 'orange' + }; + if ((item.status_h == 'К готовке') && (date2.getTime() - date1.getTime() < 0)) { + item.item_style = 'red' + }; + if (item.status_h == 'Готово') { + item.item_style = 'green' + }; + if ((item.status_h == 'Отменен') || (item.status_h == 'Оплата просрочена')) { + item.item_style = 'grey' + }; + if ((date2.getTime() - date1.getTime() >= 1000 * 3600) && (item.status_h == 'К готовке')) { + item.item_style = 'yellow' + }; + if (item.status_h == 'Готовится') { + item.item_style = 'blue' + }; + if (item.status_h == 'Выдан') { + item.item_style = 'lilac' + }; + } + } +} diff --git a/src/app/pages/terminals/terminals.component.html b/src/app/pages/terminals/terminals.component.html index fb374e7..3edb554 100644 --- a/src/app/pages/terminals/terminals.component.html +++ b/src/app/pages/terminals/terminals.component.html @@ -1 +1,77 @@ -

terminals

\ No newline at end of file +

Терминалы

+ + + +

Выбран: {{chooseName}}

+ +

Выберите клиента

+
+ +
+ + + + + ID + Наименование терминала + ID точки заказа + Список ID цехов готовки + Статус подключения + + + + + + + + {{terminals.id}} + {{terminals.public_id}} + {{terminals.division_id}} + {{terminals.area_types}} + + + + + + +
+ + + + + + + Введите внешний ID терминала: + + + + Введите ID точки заказа: + + + + Введите ID цехов готовки: + + + + + + Цех: {{area.name}} + + + + + + + +
+ + +
+ + + +
diff --git a/src/app/pages/terminals/terminals.component.ts b/src/app/pages/terminals/terminals.component.ts index c243843..e1b5840 100644 --- a/src/app/pages/terminals/terminals.component.ts +++ b/src/app/pages/terminals/terminals.component.ts @@ -1,4 +1,8 @@ import { Component, OnInit } from "@angular/core"; +import { JsonrpcService, RpcService } from "src/app/services/jsonrpc.service"; +import { MessageService } from "primeng/api"; +import { Terminals, Areas } from "src/app/interface/data"; +import { ScrollPanelModule } from 'primeng/scrollpanel'; @Component({ @@ -7,11 +11,176 @@ import { Component, OnInit } from "@angular/core"; styleUrls: ['./terminals.component.scss'] }) export class TerminalsComponent implements OnInit { - constructor( + public terminals: Terminals[] = []; + public new_ter = true; + public choose = this.jsonRpcService.ClientChoose; + public create = false; + public chooseName!: string; + public areas: Areas[] = []; + public chooseArea: Array = []; - ) {} - ngOnInit(): void { - + constructor( + private jsonRpcService: JsonrpcService, + private messageService: MessageService, + + //readonly swPush: SwPush, + //private newsletterService: NewsletterService + ) { } + + ngOnInit(): void { + if (this.choose) { this.getTerminals() }; + } + + async getTerminals() { + this.create = false; + this.new_ter = true; + await this.jsonRpcService.rpc2({ + method: 'getTerminals', + params: { + "client_id": this.choose + } + }, RpcService.authService, false) + .subscribe({ + next: (result) => { + let data = result.result; + this.terminals = data; + }, + error: (err) => { + console.log('ERROR: ', err) + this.messageService.add({ + severity: 'error', + summary: 'Произошла ошибка!', + }) + } + }); + this.chooseName = this.jsonRpcService.ClientChooseName; + } + + async getAreas() { + await this.jsonRpcService.rpc2({ + method: 'getAreas', + params: { + "client_id": this.choose + } + }, RpcService.authService, false) + .subscribe({ + next: (result) => { + let data = result.result; + this.areas = data; + }, + error: (err) => { + console.log('ERROR: ', err) + this.messageService.add({ + severity: 'error', + summary: 'Произошла ошибка!', + }) + } + }); + } + + updateTerminal1(id: any, public_id: any, division_id: any, area_types: any) { + this.new_ter = false; + setTimeout(() => document.getElementsByTagName("input")[0].value = public_id, 100); + setTimeout(() => document.getElementsByTagName("input")[1].value = division_id, 100); + this.jsonRpcService.changeId = id; + this.getAreas() + } + + updateTerminal() { + this.chooseArea = []; + let address = document.getElementsByTagName("input")[1].value +/* let areas = document.getElementsByTagName("input")[1].value*/ + let public_id = document.getElementsByTagName("input")[0].value + for (let i = 0; i < this.areas.length; i++) { + + if (this.areas[i].selected == true) { + this.chooseArea.push(this.areas[i].name) + } } -} \ No newline at end of file + + this.jsonRpcService.rpc2({ + method: 'updateTerminal', + params: { + "client_id": this.choose, + "terminal_id": this.jsonRpcService.changeId, + "address": address, + "areas": this.chooseArea, + "public_id": public_id + } + }, RpcService.authService, false) + .subscribe({ + next: (result) => { + let data = result.result; + /*this.clients = data;*/ + }, + error: (err) => { + console.log('ERROR: ', err) + this.messageService.add({ + severity: 'error', + summary: 'Произошла ошибка!', + }) + } + }); + this.new_ter = true; + this.jsonRpcService.changeId = ""; + this.getTerminals(); + } + + deleteTerminal(id: any) { + this.jsonRpcService.rpc2({ + method: 'deleteTerminal', + params: { + "client_id": this.choose, + "terminal_id": id + } + }, RpcService.authService, false) + .subscribe({ + next: (result) => { + let data = result.result; + /*this.clients = data;*/ + }, + error: (err) => { + console.log('ERROR: ', err) + this.messageService.add({ + severity: 'error', + summary: 'Произошла ошибка!', + }) + } + }); + setTimeout(() => this.getTerminals(), 100); + } + + + registerTerminal() { + this.new_ter = false; + this.create = true; + this.getAreas() + } + + registerTerminal2() { + let public_id = document.getElementsByTagName("input")[0].value + this.jsonRpcService.rpc2({ + method: 'registerTerminal', + params: { + "public_id": public_id, + } + }, RpcService.authService, false) + .subscribe({ + next: (result) => { + let data = result.result; + /*this.clients = data;*/ + }, + error: (err) => { + console.log('ERROR: ', err) + this.messageService.add({ + severity: 'error', + summary: 'Произошла ошибка!', + }) + } + }); + setTimeout(() => this.getTerminals(), 100); + + } + +} diff --git a/src/app/services/jsonrpc.service.ts b/src/app/services/jsonrpc.service.ts index 1e71c92..b572333 100644 --- a/src/app/services/jsonrpc.service.ts +++ b/src/app/services/jsonrpc.service.ts @@ -5,6 +5,9 @@ import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; import { CookiesService } from './cookies.service'; import { v4 as uuidv4 } from 'uuid'; +import { Areas } from "src/app/interface/data"; + + export enum RpcService{ authService, @@ -27,13 +30,17 @@ export class JsonrpcService { protected readonly api = environment.appSelfDeliveryEndPoint; private jsonrpc = '2.0'; private body!: JsonRpcBody; + public ClientChoose = ""; + public ClientChooseName = ""; + public changeId = ""; + public areas: Areas[] = []; constructor( private http: HttpClient, private cookiesService: CookiesService ) { } - rpc(data: {method: string, params: any[]},service: RpcService, auth = false): Observable { + rpc(data: {method: string, params: any},service: RpcService, auth = false): Observable { let headers = new HttpHeaders(); const token = decodeURI(this.cookiesService.getItem('token') ?? ''); headers = headers.set('Content-Type', 'application/json'); @@ -56,6 +63,32 @@ export class JsonrpcService { } } + rpc2(data: { method: string, params: any }, service: RpcService, auth = false): Observable { + let headers = new HttpHeaders(); + const token = decodeURI(this.cookiesService.getItem('token') ?? ''); + + const options = { + headers: { + 'Content-Type': 'application/json', + 'Authorization': token + }, + }; + this.body = { + id: uuidv4(), + jsonrpc: this.jsonrpc, + method: data.method, + params: { ...data.params }, + }; + try { + return this.http + .post(environment.appSelfDeliveryEndPoint, this.body, options) + .pipe(map((res: any) => res)); + } catch (error) { + return new Observable() + } + } + + handleHttpError(error: HttpErrorResponse): void { console.log(error.message); } diff --git a/src/assets/myAudio.mp3 b/src/assets/myAudio.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..fa82a404519f0d19d6c371e5da28250674333a5b GIT binary patch literal 145690 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 Iz1e^M589&W=Kufz literal 0 HcmV?d00001 diff --git a/src/assets/myAudio2.mp3 b/src/assets/myAudio2.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..f39aec888f1b7bd1521e42e8c4f73cb574f97b47 GIT binary patch literal 58027 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 t@4a)YiOJl7J!mif{Nq9Un`g8vst=uPAhZ%z=C