diff --git a/src/package-lock.json b/src/package-lock.json index de5e7f2..0159514 100644 --- a/src/package-lock.json +++ b/src/package-lock.json @@ -8,36 +8,36 @@ "name": "nullinside-ui", "version": "0.0.0", "dependencies": { - "@angular/animations": "^20.1.0", - "@angular/cdk": "^20.1.0", - "@angular/common": "^20.1.0", - "@angular/compiler": "^20.1.0", - "@angular/core": "^20.1.0", - "@angular/forms": "^20.1.0", - "@angular/material": "^20.1.0", - "@angular/platform-browser": "^20.1.0", - "@angular/platform-browser-dynamic": "^20.1.0", - "@angular/router": "^20.1.0", + "@angular/animations": "^20.1.2", + "@angular/cdk": "^20.1.2", + "@angular/common": "^20.1.2", + "@angular/compiler": "^20.1.2", + "@angular/core": "^20.1.2", + "@angular/forms": "^20.1.2", + "@angular/material": "^20.1.2", + "@angular/platform-browser": "^20.1.2", + "@angular/platform-browser-dynamic": "^20.1.2", + "@angular/router": "^20.1.2", "rxjs": "~7.8.2", "tslib": "^2.8.1", "webpack-dev-middleware": ">=7.4.2", "zone.js": "~0.15.1" }, "devDependencies": { - "@angular-devkit/build-angular": "^20.1.0", + "@angular-devkit/build-angular": "^20.1.1", "@angular-eslint/builder": "20.1.1", "@angular-eslint/eslint-plugin": "20.1.1", "@angular-eslint/eslint-plugin-template": "20.1.1", "@angular-eslint/schematics": "20.1.1", "@angular-eslint/template-parser": "20.1.1", - "@angular/build": "^20.1.0", - "@angular/cli": "^20.1.0", - "@angular/compiler-cli": "^20.1.0", + "@angular/build": "^20.1.1", + "@angular/cli": "^20.1.1", + "@angular/compiler-cli": "^20.1.2", "@types/jasmine": "~5.1.8", "@typescript-eslint/eslint-plugin": "^8.37.0", "@typescript-eslint/parser": "^8.37.0", "eslint": "^9.31.0", - "jasmine-core": "~5.8.0", + "jasmine-core": "~5.9.0", "karma": "~6.4.4", "karma-chrome-launcher": "~3.2.0", "karma-coverage": "~2.2.1", @@ -50,6 +50,199 @@ "@rollup/rollup-linux-x64-gnu": "^4.45.1" } }, + "node_modules/@algolia/client-abtesting": { + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.32.0.tgz", + "integrity": "sha512-HG/6Eib6DnJYm/B2ijWFXr4txca/YOuA4K7AsEU0JBrOZSB+RU7oeDyNBPi3c0v0UDDqlkBqM3vBU/auwZlglA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.32.0", + "@algolia/requester-browser-xhr": "5.32.0", + "@algolia/requester-fetch": "5.32.0", + "@algolia/requester-node-http": "5.32.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-analytics": { + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.32.0.tgz", + "integrity": "sha512-8Y9MLU72WFQOW3HArYv16+Wvm6eGmsqbxxM1qxtm0hvSASJbxCm+zQAZe5stqysTlcWo4BJ82KEH1PfgHbJAmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.32.0", + "@algolia/requester-browser-xhr": "5.32.0", + "@algolia/requester-fetch": "5.32.0", + "@algolia/requester-node-http": "5.32.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-common": { + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.32.0.tgz", + "integrity": "sha512-w8L+rgyXMCPBKmEdOT+RfgMrF0mT6HK60vPYWLz8DBs/P7yFdGo7urn99XCJvVLMSKXrIbZ2FMZ/i50nZTXnuQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-insights": { + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.32.0.tgz", + "integrity": "sha512-AdWfynhUeX7jz/LTiFU3wwzJembTbdLkQIOLs4n7PyBuxZ3jz4azV1CWbIP8AjUOFmul6uXbmYza+KqyS5CzOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.32.0", + "@algolia/requester-browser-xhr": "5.32.0", + "@algolia/requester-fetch": "5.32.0", + "@algolia/requester-node-http": "5.32.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-personalization": { + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.32.0.tgz", + "integrity": "sha512-bTupJY4xzGZYI4cEQcPlSjjIEzMvv80h7zXGrXY1Y0KC/n/SLiMv84v7Uy+B6AG1Kiy9FQm2ADChBLo1uEhGtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.32.0", + "@algolia/requester-browser-xhr": "5.32.0", + "@algolia/requester-fetch": "5.32.0", + "@algolia/requester-node-http": "5.32.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-query-suggestions": { + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.32.0.tgz", + "integrity": "sha512-if+YTJw1G3nDKL2omSBjQltCHUQzbaHADkcPQrGFnIGhVyHU3Dzq4g46uEv8mrL5sxL8FjiS9LvekeUlL2NRqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.32.0", + "@algolia/requester-browser-xhr": "5.32.0", + "@algolia/requester-fetch": "5.32.0", + "@algolia/requester-node-http": "5.32.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-search": { + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.32.0.tgz", + "integrity": "sha512-kmK5nVkKb4DSUgwbveMKe4X3xHdMsPsOVJeEzBvFJ+oS7CkBPmpfHAEq+CcmiPJs20YMv6yVtUT9yPWL5WgAhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.32.0", + "@algolia/requester-browser-xhr": "5.32.0", + "@algolia/requester-fetch": "5.32.0", + "@algolia/requester-node-http": "5.32.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/ingestion": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.32.0.tgz", + "integrity": "sha512-PZTqjJbx+fmPuT2ud1n4vYDSF1yrT//vOGI9HNYKNA0PM0xGUBWigf5gRivHsXa3oBnUlTyHV9j7Kqx5BHbVHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.32.0", + "@algolia/requester-browser-xhr": "5.32.0", + "@algolia/requester-fetch": "5.32.0", + "@algolia/requester-node-http": "5.32.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/monitoring": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.32.0.tgz", + "integrity": "sha512-kYYoOGjvNQAmHDS1v5sBj+0uEL9RzYqH/TAdq8wmcV+/22weKt/fjh+6LfiqkS1SCZFYYrwGnirrUhUM36lBIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.32.0", + "@algolia/requester-browser-xhr": "5.32.0", + "@algolia/requester-fetch": "5.32.0", + "@algolia/requester-node-http": "5.32.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/recommend": { + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.32.0.tgz", + "integrity": "sha512-jyIBLdskjPAL7T1g57UMfUNx+PzvYbxKslwRUKBrBA6sNEsYCFdxJAtZSLUMmw6MC98RDt4ksmEl5zVMT5bsuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.32.0", + "@algolia/requester-browser-xhr": "5.32.0", + "@algolia/requester-fetch": "5.32.0", + "@algolia/requester-node-http": "5.32.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.32.0.tgz", + "integrity": "sha512-eDp14z92Gt6JlFgiexImcWWH+Lk07s/FtxcoDaGrE4UVBgpwqOO6AfQM6dXh1pvHxlDFbMJihHc/vj3gBhPjqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.32.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-fetch": { + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.32.0.tgz", + "integrity": "sha512-rnWVglh/K75hnaLbwSc2t7gCkbq1ldbPgeIKDUiEJxZ4mlguFgcltWjzpDQ/t1LQgxk9HdIFcQfM17Hid3aQ6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.32.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-node-http": { + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.32.0.tgz", + "integrity": "sha512-LbzQ04+VLkzXY4LuOzgyjqEv/46Gwrk55PldaglMJ4i4eDXSRXGKkwJpXFwsoU+c1HMQlHIyjJBhrfsfdyRmyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.32.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, "node_modules/@ampproject/remapping": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", @@ -65,13 +258,13 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.2001.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2001.0.tgz", - "integrity": "sha512-IDBG+YP0nPaA/tIjtJ1ZPh0VEfbxSn0yCvbS7dTfqyrnmanPUFpU5qsT9vJTU6yzkuzBEhNFRzkUCQaUAziLRA==", + "version": "0.2001.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2001.1.tgz", + "integrity": "sha512-jU+fvaiS5bjh3znpHLEeKQIYb+ZVKNP0xRu3+E9EmweyG4E8AdvZnLvKTe61Ikhul2zBTFBUv46er7CHjAGEEg==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "20.1.0", + "@angular-devkit/core": "20.1.1", "rxjs": "7.8.2" }, "engines": { @@ -81,17 +274,17 @@ } }, "node_modules/@angular-devkit/build-angular": { - "version": "20.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-20.1.0.tgz", - "integrity": "sha512-u0v5X5djZnW7K9HW+tsroyYVNnoX9Q2fCw9+kTBo7kOppM1p+bQ/krLWE2joWhgC++TZV1q0y/T/uEbAP0wyMg==", + "version": "20.1.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-20.1.1.tgz", + "integrity": "sha512-a14mMnb5jpG9AtetW1IdGLVgb39aCdPXVTraCoBdiIY+TvKBnBb+zqDYCwytyXL7Q6aascVwl7QF2DHvWziyOQ==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.2001.0", - "@angular-devkit/build-webpack": "0.2001.0", - "@angular-devkit/core": "20.1.0", - "@angular/build": "20.1.0", + "@angular-devkit/architect": "0.2001.1", + "@angular-devkit/build-webpack": "0.2001.1", + "@angular-devkit/core": "20.1.1", + "@angular/build": "20.1.1", "@babel/core": "7.27.7", "@babel/generator": "7.27.5", "@babel/helper-annotate-as-pure": "7.27.3", @@ -102,7 +295,7 @@ "@babel/preset-env": "7.27.2", "@babel/runtime": "7.27.6", "@discoveryjs/json-ext": "0.6.3", - "@ngtools/webpack": "20.1.0", + "@ngtools/webpack": "20.1.1", "ansi-colors": "4.1.3", "autoprefixer": "10.4.21", "babel-loader": "10.0.0", @@ -157,7 +350,7 @@ "@angular/platform-browser": "^20.0.0", "@angular/platform-server": "^20.0.0", "@angular/service-worker": "^20.0.0", - "@angular/ssr": "^20.1.0", + "@angular/ssr": "^20.1.1", "@web/test-runner": "^0.20.0", "browser-sync": "^3.0.2", "jest": "^29.5.0", @@ -214,13 +407,13 @@ } }, "node_modules/@angular-devkit/build-webpack": { - "version": "0.2001.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.2001.0.tgz", - "integrity": "sha512-41dGClWoMAL+SoEazyw7AghvVHhbxF6LRSMjlgEiFmSy0aGVyEsYTeH+TlBwClS0KUKXtGx16C5cKch21CuAXA==", + "version": "0.2001.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.2001.1.tgz", + "integrity": "sha512-+UOleFjtW/OxehjaR+y4gFzNgVXdkhXcTC1XxiyeCr/ElQ8EBWMEYKBs/+QWTZqNJ/HSbZG4MnpGWl5djka1jw==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.2001.0", + "@angular-devkit/architect": "0.2001.1", "rxjs": "7.8.2" }, "engines": { @@ -234,9 +427,9 @@ } }, "node_modules/@angular-devkit/core": { - "version": "20.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.1.0.tgz", - "integrity": "sha512-i2t22bklvKsqdwmUtjXltRyxmJ+lJW8isrdc7XeN0N6VW/lDHSJqFlucT1+pO9+FxXJQyz3Hc1dpRd6G65mGyw==", + "version": "20.1.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.1.1.tgz", + "integrity": "sha512-5rKL/WfMhZOi0MyYWXK95kPwxSd7zhZieyo3Idtg0B1VMFP4jIa4jRkV7uz55HRPOl5/kK3aIrsxgtKuxQg50Q==", "dev": true, "license": "MIT", "dependencies": { @@ -262,13 +455,13 @@ } }, "node_modules/@angular-devkit/schematics": { - "version": "20.1.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-20.1.0.tgz", - "integrity": "sha512-0UtJAptrqsfABi0DxrY7cyvlGe5kHRiqVwB+h3g2DEv3ikXKZh1dOFR3o2bK+sVhUqgFaV8qgSnCmR9a48xY0g==", + "version": "20.1.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-20.1.1.tgz", + "integrity": "sha512-G87e0u3V9E2iqwoV8nBIuLNtMUAnb/A62LNq9eTJguyVEC0HSRWQnByhUvmv6mlABLa4worZJnE5vMbXW1LeQg==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "20.1.0", + "@angular-devkit/core": "20.1.1", "jsonc-parser": "3.3.1", "magic-string": "0.30.17", "ora": "8.2.0", @@ -386,9 +579,9 @@ } }, "node_modules/@angular/animations": { - "version": "20.1.0", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-20.1.0.tgz", - "integrity": "sha512-5ILngsvu5VPQYaIm7lRyegZaDaAEtLUIPSS8h1dzWPaCxBIJ4uwzx9RDMiF32zhbxi+q0mAO2w2FdDlzWTT3og==", + "version": "20.1.2", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-20.1.2.tgz", + "integrity": "sha512-r1JnNXZEg2Rrz53Mr4D4/S7v6ozZ3FPzJJo38lDq2WJKSkKc09R9fjFWIB/rXwEXUuiWEfNfxx+O4g6rrbXWWA==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -397,19 +590,19 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/common": "20.1.0", - "@angular/core": "20.1.0" + "@angular/common": "20.1.2", + "@angular/core": "20.1.2" } }, "node_modules/@angular/build": { - "version": "20.1.0", - "resolved": "https://registry.npmjs.org/@angular/build/-/build-20.1.0.tgz", - "integrity": "sha512-Sl4rkq5PQIrbVNk8cXx2JQhQ156H4bXLvfAYpgXPHAfSfbIIzaV25LJIfTdWSEjMzBGdIX5E0Vpi0SGwcNS7Uw==", + "version": "20.1.1", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-20.1.1.tgz", + "integrity": "sha512-N9tKfHatZEdy/uGX9atJQKVIejAvRbOMwpBj9Z5Y2RtR2vTDOOm0q86OYQW8baK19b2/HkHRe6PSPeiHpTG+8g==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.2001.0", + "@angular-devkit/architect": "0.2001.1", "@babel/core": "7.27.7", "@babel/helper-annotate-as-pure": "7.27.3", "@babel/helper-split-export-declaration": "7.24.7", @@ -451,7 +644,7 @@ "@angular/platform-browser": "^20.0.0", "@angular/platform-server": "^20.0.0", "@angular/service-worker": "^20.0.0", - "@angular/ssr": "^20.1.0", + "@angular/ssr": "^20.1.1", "karma": "^6.4.0", "less": "^4.2.0", "ng-packagr": "^20.0.0", @@ -501,12 +694,12 @@ } }, "node_modules/@angular/cdk": { - "version": "20.1.0", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-20.1.0.tgz", - "integrity": "sha512-JhgbSOv7xZqWNZjuCh8A3A7pGv0mhtmGjHo36157LrxRO6R7x2yJJjxC5nQeroKZWhgN+X/jG/EJlzEvl9PxTw==", + "version": "20.1.2", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-20.1.2.tgz", + "integrity": "sha512-mmQdXfC86FMnH6iZvXvEmHunQpp2KULfoMQ1KhIMzVEuAmHRpkct7onjLeGUqZ+VEXchRG7/gYkMKYQxtG8sag==", "license": "MIT", "dependencies": { - "parse5": "^7.1.2", + "parse5": "^8.0.0", "tslib": "^2.3.0" }, "peerDependencies": { @@ -516,20 +709,21 @@ } }, "node_modules/@angular/cli": { - "version": "20.1.0", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-20.1.0.tgz", - "integrity": "sha512-jZudpHlPVAvrywVZuhUkUr5K7ThW/6CPjT7qxZBSdOvu7cD49JPpDivCdlMh0kCBSHsJ0ZbLx35oi6zF8PegiA==", + "version": "20.1.1", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-20.1.1.tgz", + "integrity": "sha512-/lS7haW6YWy+KWkITtmfcKqq9Qsi2PP5mnPnZ2CqPgnYe6PCw+yx57tsU3qHHmYNGWnqHIvZWafBbabie18g8g==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.2001.0", - "@angular-devkit/core": "20.1.0", - "@angular-devkit/schematics": "20.1.0", + "@angular-devkit/architect": "0.2001.1", + "@angular-devkit/core": "20.1.1", + "@angular-devkit/schematics": "20.1.1", "@inquirer/prompts": "7.6.0", "@listr2/prompt-adapter-inquirer": "2.0.22", "@modelcontextprotocol/sdk": "1.13.3", - "@schematics/angular": "20.1.0", + "@schematics/angular": "20.1.1", "@yarnpkg/lockfile": "1.1.0", + "algoliasearch": "5.32.0", "ini": "5.0.0", "jsonc-parser": "3.3.1", "listr2": "8.3.3", @@ -551,9 +745,9 @@ } }, "node_modules/@angular/common": { - "version": "20.1.0", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-20.1.0.tgz", - "integrity": "sha512-RsHClHJux+4lXrHdGHVw22wekRbSjYtx6Xwjox2S+IRPP51CbX0KskAALZ9ZmtCttkYSFVtvr0S+SQrU2cu5WA==", + "version": "20.1.2", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-20.1.2.tgz", + "integrity": "sha512-MQYP+4lvw81jBRknNYgIye7N36SD68SADUB7xO+7pF5+KbGundfmZkO29uWCnTBU86C4xU4DshlFVhzFK1lreQ==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -562,14 +756,14 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/core": "20.1.0", + "@angular/core": "20.1.2", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "20.1.0", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-20.1.0.tgz", - "integrity": "sha512-sM8H3dJotIDDmI1u8qGuAn16XVfR7A4+/5s5cKLI/osnnIjafi5HHqAf76R5IlGoIv0ZHVQIYaJ/Qdvfyvdhfg==", + "version": "20.1.2", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-20.1.2.tgz", + "integrity": "sha512-BCYQArXAknOyMB5rgx9yK3p5uYFhgN91Jxo5Fbuso6M+7p1PoxOE4E9XrqQfhpVJOl9hcz7vNFnQ4Oer0R83UQ==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -579,9 +773,9 @@ } }, "node_modules/@angular/compiler-cli": { - "version": "20.1.0", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-20.1.0.tgz", - "integrity": "sha512-ajbCmvYYFxeXRdKSfdHjp62MZ2lCMUS0UzswBDAbT9sPd/ThppbvLXLsMBj8SlwaXSSBeTAa1oSHEO1MeuVvGQ==", + "version": "20.1.2", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-20.1.2.tgz", + "integrity": "sha512-NMSDavN+CJYvSze6wq7DpbrUA/EqiAD7GQoeJtuOknzUpPlWQmFOoHzTMKW+S34XlNEw+YQT0trv3DKcrE+T/w==", "dev": true, "license": "MIT", "dependencies": { @@ -602,7 +796,7 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/compiler": "20.1.0", + "@angular/compiler": "20.1.2", "typescript": ">=5.8 <5.9" }, "peerDependenciesMeta": { @@ -677,9 +871,9 @@ } }, "node_modules/@angular/core": { - "version": "20.1.0", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-20.1.0.tgz", - "integrity": "sha512-/dJooZi+OAACkjWgGMPrOOGikdtlTJXwdeXPJTgZSUD5L8oQMbhZFG0XW/1Hldvsti87wPjZPz67ivB7zR86VA==", + "version": "20.1.2", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-20.1.2.tgz", + "integrity": "sha512-8jAvpkHoXHSH0HoqNVgPstSMGmC0oaYN93HW7K2rMRxj1Uhtahkeb/7/kfnj7yLi5FDfm98ofOFT4Lxzf2eZXQ==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -688,7 +882,7 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/compiler": "20.1.0", + "@angular/compiler": "20.1.2", "rxjs": "^6.5.3 || ^7.4.0", "zone.js": "~0.15.0" }, @@ -702,9 +896,9 @@ } }, "node_modules/@angular/forms": { - "version": "20.1.0", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-20.1.0.tgz", - "integrity": "sha512-NgQxowyyG2yiSOXxtQS1xK1vAQT+4GRoMFuzmS3uBshIifgCgFckSxJHQXhlQOInuv2NsZ1Q0HuCvao+yZfIow==", + "version": "20.1.2", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-20.1.2.tgz", + "integrity": "sha512-ziOaeN0by1cTCNzwCo/IC2ekFzrM7ehc8uQHMQ6dYprSX45lJmdCsNnn+R0lx68VugvbMhHHO5ieOORf5sEmew==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -713,22 +907,22 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/common": "20.1.0", - "@angular/core": "20.1.0", - "@angular/platform-browser": "20.1.0", + "@angular/common": "20.1.2", + "@angular/core": "20.1.2", + "@angular/platform-browser": "20.1.2", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/material": { - "version": "20.1.0", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-20.1.0.tgz", - "integrity": "sha512-LfGz/V/kZwRIhzIZBiurM4Wc5CQiiJkiOChUfoEOvQLN2hckPFZbbvtg6JwxxA6nhzsDhuGHbj7Xj5dNsLfZLw==", + "version": "20.1.2", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-20.1.2.tgz", + "integrity": "sha512-xs/6yl8e/8PGvHihFSg+/6C6MupxGN0S8ym2ITKQI4vwViL1MRL274r7Ppl9N+23Kq2qeYBzFsRkxx01vxdaEA==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "peerDependencies": { - "@angular/cdk": "20.1.0", + "@angular/cdk": "20.1.2", "@angular/common": "^20.0.0 || ^21.0.0", "@angular/core": "^20.0.0 || ^21.0.0", "@angular/forms": "^20.0.0 || ^21.0.0", @@ -737,9 +931,9 @@ } }, "node_modules/@angular/platform-browser": { - "version": "20.1.0", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-20.1.0.tgz", - "integrity": "sha512-l3+Ijq5SFxT0v10DbOyMc7NzGdbK76yot2i8pXyArlPSPmpWvbbjXbiBqzrv3TSTrksHBhG3mMvyhTmHQ1cQFA==", + "version": "20.1.2", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-20.1.2.tgz", + "integrity": "sha512-jsgO4atyh6T3Rt+idHI29ENaq1a4VKfvtTgWf1S0qSCsfMt2kv5AAO+LkL6lYx8TtJu5zjAETiUwSiWUqY1jOg==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -748,9 +942,9 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/animations": "20.1.0", - "@angular/common": "20.1.0", - "@angular/core": "20.1.0" + "@angular/animations": "20.1.2", + "@angular/common": "20.1.2", + "@angular/core": "20.1.2" }, "peerDependenciesMeta": { "@angular/animations": { @@ -759,9 +953,9 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "20.1.0", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-20.1.0.tgz", - "integrity": "sha512-s+Rm2akzYTE2UFdXZPvf02TxDCDskGdUxAxa/jmJbVuOpniuY0RlbnxIKDUD0qj3bYMUkbr7f2KJwHVldqJP6w==", + "version": "20.1.2", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-20.1.2.tgz", + "integrity": "sha512-KssXr0nDZxNjJChdyNFE1wFGaR374qEKBU6mburr2dTauV+jfaL7NrBRzQuTh7GfOOwHnW0uJ4b2dGK6m1tkNw==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -770,16 +964,16 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/common": "20.1.0", - "@angular/compiler": "20.1.0", - "@angular/core": "20.1.0", - "@angular/platform-browser": "20.1.0" + "@angular/common": "20.1.2", + "@angular/compiler": "20.1.2", + "@angular/core": "20.1.2", + "@angular/platform-browser": "20.1.2" } }, "node_modules/@angular/router": { - "version": "20.1.0", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-20.1.0.tgz", - "integrity": "sha512-fuUX1+AhcVSDgSSx85o6VOtXKM3oXAza+44jQ+nJGf316P0xpLKA586DKRNPjS4sRsWM7otKuOOTXXc4AMUHpQ==", + "version": "20.1.2", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-20.1.2.tgz", + "integrity": "sha512-xMRDARfSgwDZSorrTMtv9Gdb9UtWflwn8LOgmPbj3waXyuGWUbgpoJCD0Mh6necc9fhQ60GbBRG5K2EVVr3ATQ==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -788,9 +982,9 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/common": "20.1.0", - "@angular/core": "20.1.0", - "@angular/platform-browser": "20.1.0", + "@angular/common": "20.1.2", + "@angular/core": "20.1.2", + "@angular/platform-browser": "20.1.2", "rxjs": "^6.5.3 || ^7.4.0" } }, @@ -4243,9 +4437,9 @@ } }, "node_modules/@ngtools/webpack": { - "version": "20.1.0", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-20.1.0.tgz", - "integrity": "sha512-v+Mdg+NIvkWJYWcuHCQeRC4/Wov8RxNEF8eiCPFmQGmXJllIWUybY/o9lysG1TY4j/2H56VinIBYbeK/VIBYvg==", + "version": "20.1.1", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-20.1.1.tgz", + "integrity": "sha512-HBF/bQyDjGlzv2uOXlwjrLFxdERynen7JuX3ZgI1vijc41aBX/nyMNa4MsKiOwNOQmpHGJU6qn6/gAN4DhocKQ==", "dev": true, "license": "MIT", "engines": { @@ -5170,14 +5364,14 @@ ] }, "node_modules/@schematics/angular": { - "version": "20.1.0", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-20.1.0.tgz", - "integrity": "sha512-sAEwygjY/j0tvo+EDFUAc54Hfp++K43ISe1/fdCU/M3Pseuf7oPPIm6VxxTrRc6fu4Lp5DBaD/PBkXNt/FqZpg==", + "version": "20.1.1", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-20.1.1.tgz", + "integrity": "sha512-eOEKBRcxt68xzZmqlgMJ5m9FOClzZumyltQhiBeAQfCrMAjxJZaB+pbyYreI+2DL91d/VkldJ9D/UcHZrhfLnQ==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "20.1.0", - "@angular-devkit/schematics": "20.1.0", + "@angular-devkit/core": "20.1.1", + "@angular-devkit/schematics": "20.1.1", "jsonc-parser": "3.3.1" }, "engines": { @@ -5443,9 +5637,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "24.0.14", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.14.tgz", - "integrity": "sha512-4zXMWD91vBLGRtHK3YbIoFMia+1nqEz72coM42C5ETjnNCa/heoj7NT1G67iAfOqMmcfhuCZ4uNpyz8EjlAejw==", + "version": "24.0.15", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.15.tgz", + "integrity": "sha512-oaeTSbCef7U/z7rDeJA138xpG3NuKc64/rZ2qmUFkFJmnMsAPaluIifqyWd8hSSMxyP9oie3dLAqYPblag9KgA==", "dev": true, "license": "MIT", "dependencies": { @@ -6100,6 +6294,31 @@ "ajv": "^8.8.2" } }, + "node_modules/algoliasearch": { + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.32.0.tgz", + "integrity": "sha512-84xBncKNPBK8Ae89F65+SyVcOihrIbm/3N7to+GpRBHEUXGjA3ydWTMpcRW6jmFzkBQ/eqYy/y+J+NBpJWYjBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-abtesting": "5.32.0", + "@algolia/client-analytics": "5.32.0", + "@algolia/client-common": "5.32.0", + "@algolia/client-insights": "5.32.0", + "@algolia/client-personalization": "5.32.0", + "@algolia/client-query-suggestions": "5.32.0", + "@algolia/client-search": "5.32.0", + "@algolia/ingestion": "1.32.0", + "@algolia/monitoring": "1.32.0", + "@algolia/recommend": "5.32.0", + "@algolia/requester-browser-xhr": "5.32.0", + "@algolia/requester-fetch": "5.32.0", + "@algolia/requester-node-http": "5.32.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, "node_modules/ansi-colors": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", @@ -6937,9 +7156,9 @@ } }, "node_modules/compression": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.0.tgz", - "integrity": "sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", "dev": true, "license": "MIT", "dependencies": { @@ -6947,7 +7166,7 @@ "compressible": "~2.0.18", "debug": "2.6.9", "negotiator": "~0.6.4", - "on-headers": "~1.0.2", + "on-headers": "~1.1.0", "safe-buffer": "5.2.1", "vary": "~1.1.2" }, @@ -7573,9 +7792,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.184", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.184.tgz", - "integrity": "sha512-zlaUk/wwnR/27FHNarzOtMgfxD1Q0/2Aby7PnURumQTal7yauqQ3c2HHcG/pjLFTvF3AWv44kMWyArVlfHeDlw==", + "version": "1.5.187", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.187.tgz", + "integrity": "sha512-cl5Jc9I0KGUoOoSbxvTywTa40uspGJt/BDBoDLoxJRSBpWh4FFXBsjNRHfQrONsV/OoEjDfHUmZQa2d6Ze4YgA==", "dev": true, "license": "ISC" }, @@ -9629,9 +9848,9 @@ } }, "node_modules/jasmine-core": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.8.0.tgz", - "integrity": "sha512-Q9dqmpUAfptwyueW3+HqBOkSuYd9I/clZSSfN97wXE/Nr2ROFNCwIBEC1F6kb3QXS9Fcz0LjFYSDQT+BiwjuhA==", + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.9.0.tgz", + "integrity": "sha512-OMUvF1iI6+gSRYOhMrH4QYothVLN9C3EJ6wm4g7zLJlnaTl8zbaPOr0bTw70l7QxkoM7sVFOWo83u9B2Fe2Zng==", "dev": true, "license": "MIT" }, @@ -11248,9 +11467,9 @@ "license": "MIT" }, "node_modules/msgpackr": { - "version": "1.11.4", - "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.4.tgz", - "integrity": "sha512-uaff7RG9VIC4jacFW9xzL3jc0iM32DNHe4jYVycBcjUePT/Klnfj7pqtWJt9khvDFizmjN2TlYniYmSS2LIaZg==", + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.5.tgz", + "integrity": "sha512-UjkUHN0yqp9RWKy0Lplhh+wlpdt9oQBYgULZOiFhV3VclSF1JnSQWZ5r9gORQlNYaUKQoR8itv7g7z1xDDuACA==", "dev": true, "license": "MIT", "optional": true, @@ -11706,9 +11925,9 @@ } }, "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", "dev": true, "license": "MIT", "engines": { @@ -11995,9 +12214,9 @@ } }, "node_modules/parse5": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", - "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.0.tgz", + "integrity": "sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==", "license": "MIT", "dependencies": { "entities": "^6.0.0" @@ -12034,6 +12253,19 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/parse5-html-rewriting-stream/node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, "node_modules/parse5-sax-parser": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz", @@ -12047,6 +12279,32 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, + "node_modules/parse5-sax-parser/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/parse5-sax-parser/node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, "node_modules/parse5/node_modules/entities": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", diff --git a/src/package.json b/src/package.json index eea1e88..2d8ef31 100644 --- a/src/package.json +++ b/src/package.json @@ -13,36 +13,36 @@ }, "private": true, "dependencies": { - "@angular/animations": "^20.1.0", - "@angular/cdk": "^20.1.0", - "@angular/common": "^20.1.0", - "@angular/compiler": "^20.1.0", - "@angular/core": "^20.1.0", - "@angular/forms": "^20.1.0", - "@angular/material": "^20.1.0", - "@angular/platform-browser": "^20.1.0", - "@angular/platform-browser-dynamic": "^20.1.0", - "@angular/router": "^20.1.0", + "@angular/animations": "^20.1.2", + "@angular/cdk": "^20.1.2", + "@angular/common": "^20.1.2", + "@angular/compiler": "^20.1.2", + "@angular/core": "^20.1.2", + "@angular/forms": "^20.1.2", + "@angular/material": "^20.1.2", + "@angular/platform-browser": "^20.1.2", + "@angular/platform-browser-dynamic": "^20.1.2", + "@angular/router": "^20.1.2", "rxjs": "~7.8.2", "tslib": "^2.8.1", "webpack-dev-middleware": ">=7.4.2", "zone.js": "~0.15.1" }, "devDependencies": { - "@angular-devkit/build-angular": "^20.1.0", + "@angular-devkit/build-angular": "^20.1.1", "@angular-eslint/builder": "20.1.1", "@angular-eslint/eslint-plugin": "20.1.1", "@angular-eslint/eslint-plugin-template": "20.1.1", "@angular-eslint/schematics": "20.1.1", "@angular-eslint/template-parser": "20.1.1", - "@angular/build": "^20.1.0", - "@angular/cli": "^20.1.0", - "@angular/compiler-cli": "^20.1.0", + "@angular/build": "^20.1.1", + "@angular/cli": "^20.1.1", + "@angular/compiler-cli": "^20.1.2", "@types/jasmine": "~5.1.8", "@typescript-eslint/eslint-plugin": "^8.37.0", "@typescript-eslint/parser": "^8.37.0", "eslint": "^9.31.0", - "jasmine-core": "~5.8.0", + "jasmine-core": "~5.9.0", "karma": "~6.4.4", "karma-chrome-launcher": "~3.2.0", "karma-coverage": "~2.2.1", diff --git a/src/src/app/view/login-landing-desktop/errors.ts b/src/src/app/view/login-landing-desktop/errors.ts new file mode 100644 index 0000000..2bf8768 --- /dev/null +++ b/src/src/app/view/login-landing-desktop/errors.ts @@ -0,0 +1,5 @@ +export enum Errors { + NO_ERROR, + INTERNAL_ERROR, + TWITCH_FAILED_TO_GENERATE_TOKEN +} diff --git a/src/src/app/view/login-landing-desktop/login-landing-desktop.component.html b/src/src/app/view/login-landing-desktop/login-landing-desktop.component.html index 2b1d79e..8b0a4eb 100644 --- a/src/src/app/view/login-landing-desktop/login-landing-desktop.component.html +++ b/src/src/app/view/login-landing-desktop/login-landing-desktop.component.html @@ -3,27 +3,12 @@
- @if (loggedIn) { -

LOGGED IN SUCCESSFULLY!

-

Please return to the desktop application...

- - } @else if (loading) { - Logging in + @if (error !== '') { +
{{ error }}, please try again
} @else { - @if (error !== '') { -
{{ error }}
- } @else { - @if (null !== oAuth) { -

DO NOT SHOW ON STREAM

- - } @else { -
Failed to get you authenticated, please try again
- } - } +
Login was successful!
+
Please return to the desktop application :)
+
You can close this window
}
diff --git a/src/src/app/view/login-landing-desktop/login-landing-desktop.component.scss b/src/src/app/view/login-landing-desktop/login-landing-desktop.component.scss index e69de29..8c8647a 100644 --- a/src/src/app/view/login-landing-desktop/login-landing-desktop.component.scss +++ b/src/src/app/view/login-landing-desktop/login-landing-desktop.component.scss @@ -0,0 +1,9 @@ +.instructions { + font-size: 25px; + margin-top: 10px; +} + +.sub-instructions { + font-size: 18px; + margin-top: 10px; +} diff --git a/src/src/app/view/login-landing-desktop/login-landing-desktop.component.ts b/src/src/app/view/login-landing-desktop/login-landing-desktop.component.ts index 449b521..48447b0 100644 --- a/src/src/app/view/login-landing-desktop/login-landing-desktop.component.ts +++ b/src/src/app/view/login-landing-desktop/login-landing-desktop.component.ts @@ -1,85 +1,37 @@ import {Component, inject, OnInit} from '@angular/core'; import {ActivatedRoute, ParamMap} from "@angular/router"; -import {Errors} from "../login-landing/errors"; +import {Errors} from "./errors"; import {HttpErrorResponse} from "@angular/common/http"; -import {LoadingIconComponent} from "../../common/components/loading-icon/loading-icon.component"; import {LogoComponent} from "../../common/components/logo/logo.component"; -import {OAuth} from "../../common/interface/oauth"; -import {MatButton} from "@angular/material/button"; -import {CdkCopyToClipboard} from "@angular/cdk/clipboard"; -import {interval, Subscription} from "rxjs"; @Component({ selector: 'app-login-landing-desktop', imports: [ - LoadingIconComponent, - LogoComponent, - MatButton, - CdkCopyToClipboard + LogoComponent ], templateUrl: './login-landing-desktop.component.html', styleUrl: './login-landing-desktop.component.scss' }) export class LoginLandingDesktopComponent implements OnInit { private route = inject(ActivatedRoute); - private timer: Subscription | undefined; - private desktopData: string | undefined; - loggedIn: boolean = false; error: string = ''; - oAuth: OAuth | null = null; - loading: boolean = true; ngOnInit(): void { this.route.queryParamMap.subscribe({ next: (params: ParamMap) => { + // Handle any errors const error = params.get('error'); if (null !== error) { const errorNum = +error; - if (Errors.TWITCH_ACCOUNT_HAS_NO_EMAIL === errorNum) { - this.onLoginFailed('Your Twitch account must have a valid e-mail address, please add one and try again') - } else if (Errors.TWITCH_ERROR_WITH_TOKEN === errorNum) { - this.onLoginFailed('Twitch failed to give us a valid token, please try again') - } else { - this.onLoginFailed('Sorry we did something wrong trying to log you in, please try again') + if (Errors.INTERNAL_ERROR === errorNum) { + this.onLoginFailed() + } else if (Errors.TWITCH_FAILED_TO_GENERATE_TOKEN === errorNum) { + this.onLoginFailed('Received error from twitch, it may be down temporarily') } return; } - - const oAuth = { - bearer: params.get('bearer'), - refresh: params.get('refresh'), - expiresUtc: params.get('expiresUtc'), - }; - - if (null === oAuth.bearer || null === oAuth.refresh || null === oAuth.expiresUtc) { - this.onLoginFailed(); - return; - } - - this.oAuth = { - bearer: oAuth.bearer, - refresh: oAuth.refresh, - expiresUtc: oAuth.expiresUtc - }; - - // DO NOT assign this.desktopData until AFTER you update the clipboard successfully. - // The absence of a value on this.desktopData is what tells the application we haven't logged in yet. - const json = JSON.stringify(oAuth); - navigator.clipboard.writeText(json); - this.desktopData = json; - - this.loading = false; - this.timer = interval(1000) - .subscribe({ - next: _ => { - this.runCheckForLogin(); - }, - error: e => { - console.error(e); - } - }); }, error: (_: HttpErrorResponse) => { this.onLoginFailed(); @@ -87,29 +39,7 @@ export class LoginLandingDesktopComponent implements OnInit { }); } - private runCheckForLogin() { - try { - navigator.clipboard.readText().then(text => { - // If the text matches what we put on the clipboard then we aren't signed in yet. - if (undefined === this.desktopData || text === this.desktopData) { - return; - } - - // If the text does match, we are signed in on the desktop app. Maybe...kinda....might be...you never know... - // Don't judge me. -.- - this.timer?.unsubscribe(); - this.loggedIn = true; - }) - } catch { - // Do nothing, just don't crash. - } - } - - onLoginFailed(message = ':( Failed to login, please try again'): void { + onLoginFailed(message = 'Internal error logging you in'): void { this.error = message; - this.loading = false; } - - protected readonly JSON = JSON; - protected readonly window = window; }