diff --git a/package-lock.json b/package-lock.json index 1647fea..df6f9ba 100644 --- a/package-lock.json +++ b/package-lock.json @@ -70,7 +70,7 @@ "autoprefixer": "^10.4.14", "eslint": "^8.44.0", "eslint-config-prettier": "^8.8.0", - "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-prettier": "^5.0.0-alpha.1", "eslint-plugin-vue": "^9.15.1", "postcss": "^8.4.24", "prettier": "^3.0.0", @@ -5939,6 +5939,115 @@ "node": ">=10.12.0" } }, + "node_modules/@pkgr/utils": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.1.tgz", + "integrity": "sha512-JOqwkgFEyi+OROIyq7l4Jy28h/WwhDnG/cPkXG2Z1iFbubB6jsHW1NDvmyOzTBxHr3yg68YGirmh1JUgMqa+9w==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "fast-glob": "^3.2.12", + "is-glob": "^4.0.3", + "open": "^9.1.0", + "picocolors": "^1.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@pkgr/utils/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgr/utils/node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@pkgr/utils/node_modules/open": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", + "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", + "dev": true, + "dependencies": { + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@pkgr/utils/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@pkgr/utils/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@pkgr/utils/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@pkgr/utils/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/@polka/url": { "version": "1.0.0-next.21", "resolved": "https://registry.npmmirror.com/@polka/url/-/url-1.0.0-next.21.tgz", @@ -11376,7 +11485,7 @@ "version": "1.6.51", "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", - "optional": true, + "devOptional": true, "engines": { "node": ">=0.6" } @@ -11746,6 +11855,21 @@ "optional": true, "peer": true }, + "node_modules/bundle-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", + "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", + "dev": true, + "dependencies": { + "run-applescript": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.0.0.tgz", @@ -13080,6 +13204,233 @@ "node": ">=0.10.0" } }, + "node_modules/default-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", + "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", + "dev": true, + "dependencies": { + "bundle-name": "^3.0.0", + "default-browser-id": "^3.0.0", + "execa": "^7.1.1", + "titleize": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", + "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", + "dev": true, + "dependencies": { + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id/node_modules/bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "dev": true, + "dependencies": { + "big-integer": "^1.6.44" + }, + "engines": { + "node": ">= 5.10.0" + } + }, + "node_modules/default-browser/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/default-browser/node_modules/execa": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz", + "integrity": "sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/default-browser/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "dev": true, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/default-browser/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-browser/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-browser/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-browser/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/default-gateway": { "version": "6.0.3", "resolved": "https://registry.npmmirror.com/default-gateway/-/default-gateway-6.0.3.tgz", @@ -13910,21 +14261,29 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "4.2.1", - "resolved": "https://registry.npmmirror.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", - "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "version": "5.0.0-alpha.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.0-alpha.2.tgz", + "integrity": "sha512-F6YBCbrRzvZwcINw3crm1+/uX/i+rJYaFErPtwCfUoPLywRfY7pwBtI3yMe5OpIotuaiws8cd29oM80ca6NQSQ==", "dev": true, "dependencies": { - "prettier-linter-helpers": "^1.0.0" + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.5" }, "engines": { - "node": ">=12.0.0" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/prettier" }, "peerDependencies": { - "eslint": ">=7.28.0", - "prettier": ">=2.0.0" + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "prettier": ">=3.0.0" }, "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, "eslint-config-prettier": { "optional": true } @@ -16995,6 +17354,39 @@ "npm": ">=3" } }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-inside-container/node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-interactive": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/is-interactive/-/is-interactive-1.0.0.tgz", @@ -23658,6 +24050,139 @@ "node": ">=8" } }, + "node_modules/run-applescript": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", + "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/run-applescript/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/run-applescript/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/run-applescript/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/run-applescript/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/run-applescript/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/run-applescript/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz", @@ -24784,6 +25309,22 @@ "node": ">= 10" } }, + "node_modules/synckit": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", + "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", + "dev": true, + "dependencies": { + "@pkgr/utils": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, "node_modules/tailwindcss": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.2.tgz", @@ -25274,6 +25815,18 @@ "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "dev": true }, + "node_modules/titleize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", + "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -25955,6 +26508,15 @@ "node": ">= 0.8" } }, + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/upath": { "version": "1.2.0", "resolved": "https://registry.npmmirror.com/upath/-/upath-1.2.0.tgz", diff --git a/package.json b/package.json index dfd55d2..062adb0 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,7 @@ "autoprefixer": "^10.4.14", "eslint": "^8.44.0", "eslint-config-prettier": "^8.8.0", - "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-prettier": "^5.0.0-alpha.1", "eslint-plugin-vue": "^9.15.1", "postcss": "^8.4.24", "prettier": "^3.0.0", diff --git a/src/components/InfiniteScroll.vue b/src/components/InfiniteScroll.vue index 998a15f..a184850 100644 --- a/src/components/InfiniteScroll.vue +++ b/src/components/InfiniteScroll.vue @@ -24,7 +24,7 @@ export default class InfiniteScroll extends Vue { }; this.observer = new IntersectionObserver( this.handleIntersection, - options + options, ); this.observer.observe(this.$refs.sentinel as HTMLElement); } diff --git a/src/components/World/components/camera.js b/src/components/World/components/camera.js index e561cc5..f7c3d0a 100644 --- a/src/components/World/components/camera.js +++ b/src/components/World/components/camera.js @@ -5,7 +5,7 @@ function createCamera() { 35, // fov = Field Of View 1, // aspect ratio (dummy value) 0.1, // near clipping plane - 350 // far clipping plane + 350, // far clipping plane ); // move the camera back so we can view the scene diff --git a/src/components/World/components/objects/landmarks.js b/src/components/World/components/objects/landmarks.js index 30f5e83..b8163a2 100644 --- a/src/components/World/components/objects/landmarks.js +++ b/src/components/World/components/objects/landmarks.js @@ -62,7 +62,11 @@ export async function loadLandmarks(vue, world, scene, loop) { // calculate positions for each claim, especially because some are random const locations = landmarks.map((claim) => - locForGive(claim, world.PLATFORM_SIZE, world.PLATFORM_EDGE_FOR_UNKNOWNS) + locForGive( + claim, + world.PLATFORM_SIZE, + world.PLATFORM_EDGE_FOR_UNKNOWNS, + ), ); // eslint-disable-next-line @typescript-eslint/no-this-alias @@ -92,7 +96,7 @@ export async function loadLandmarks(vue, world, scene, loop) { undefined, function (error) { console.error(error); - } + }, ); // calculate when lights shine on appearing claim area @@ -120,7 +124,7 @@ export async function loadLandmarks(vue, world, scene, loop) { .onComplete(() => { scene.remove(light); light.dispose(); - }) + }), ) .start(); world.lights = [...world.lights, light]; @@ -129,18 +133,18 @@ export async function loadLandmarks(vue, world, scene, loop) { console.error( "Got bad server response status & data of", resp.status, - resp.data + resp.data, ); vue.setAlert( "Error With Server", - "There was an error retrieving your claims from the server." + "There was an error retrieving your claims from the server.", ); } } catch (error) { console.error("Got exception contacting server:", error); vue.setAlert( "Error With Server", - "There was a problem retrieving your claims from the server." + "There was a problem retrieving your claims from the server.", ); } } diff --git a/src/libs/crypto/index.ts b/src/libs/crypto/index.ts index bec075e..fb75e20 100644 --- a/src/libs/crypto/index.ts +++ b/src/libs/crypto/index.ts @@ -20,7 +20,7 @@ export const newIdentifier = ( address: string, publicHex: string, privateHex: string, - derivationPath: string + derivationPath: string, ): Omit => { return { did: DEFAULT_DID_PROVIDER_NAME + ":" + address, @@ -46,7 +46,7 @@ export const newIdentifier = ( * @return {*} {[string, string, string, string]} */ export const deriveAddress = ( - mnemonic: string + mnemonic: string, ): [string, string, string, string] => { const UPORT_ROOT_DERIVATION_PATH = "m/7696500'/0'/0'/0'"; mnemonic = mnemonic.trim().toLowerCase(); @@ -134,7 +134,7 @@ export function fromJose(signature: string): { const signatureBytes: Uint8Array = didJwt.base64ToBytes(signature); if (signatureBytes.length < 64 || signatureBytes.length > 65) { throw new TypeError( - `Wrong size for signature. Expected 64 or 65 bytes, but got ${signatureBytes.length}` + `Wrong size for signature. Expected 64 or 65 bytes, but got ${signatureBytes.length}`, ); } const r = bytesToHex(signatureBytes.slice(0, 32)); diff --git a/src/libs/endorserServer.ts b/src/libs/endorserServer.ts index 9aabacc..0a8c38c 100644 --- a/src/libs/endorserServer.ts +++ b/src/libs/endorserServer.ts @@ -85,7 +85,7 @@ export function isHiddenDid(did) { export function didInfo(did, activeDid, identifiers, contacts) { const myId: IIdentifier | undefined = R.find( (i) => i.did === did, - identifiers + identifiers, ); if (myId) { return "You" + (myId.did !== activeDid ? " (Alt ID)" : ""); @@ -120,7 +120,7 @@ export async function createAndSubmitGive( toDid: string, description: string, hours: number, - fulfillsProjectHandleId?: string + fulfillsProjectHandleId?: string, ): Promise | InternalError> { // Make a claim const vcClaim: GiveVerifiableCredential = { diff --git a/src/libs/veramo/setup.ts b/src/libs/veramo/setup.ts index 4b3e019..f9dcfda 100644 --- a/src/libs/veramo/setup.ts +++ b/src/libs/veramo/setup.ts @@ -81,7 +81,7 @@ function didProviderName(netName: string) { const DEFAULT_DID_PROVIDER_NETWORK_NAME = "mainnet"; export const DEFAULT_DID_PROVIDER_NAME = didProviderName( - DEFAULT_DID_PROVIDER_NETWORK_NAME + DEFAULT_DID_PROVIDER_NETWORK_NAME, ); export const HANDY_APP = false; diff --git a/src/main.ts b/src/main.ts index cf29018..9238712 100644 --- a/src/main.ts +++ b/src/main.ts @@ -84,7 +84,7 @@ library.add( faTrashCan, faUser, faUsers, - faXmark + faXmark, ); import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome"; diff --git a/src/registerServiceWorker.ts b/src/registerServiceWorker.ts index 1473a0a..5b60bb7 100644 --- a/src/registerServiceWorker.ts +++ b/src/registerServiceWorker.ts @@ -7,7 +7,7 @@ if (process.env.NODE_ENV === "production") { ready() { console.log( "App is being served from cache by a service worker.\n" + - "For more details, visit https://goo.gl/AFskqB" + "For more details, visit https://goo.gl/AFskqB", ); }, registered() { @@ -24,7 +24,7 @@ if (process.env.NODE_ENV === "production") { }, offline() { console.log( - "No internet connection found. App is running in offline mode." + "No internet connection found. App is running in offline mode.", ); }, error(error) { diff --git a/src/views/AccountViewView.vue b/src/views/AccountViewView.vue index 5bc502a..4beb510 100644 --- a/src/views/AccountViewView.vue +++ b/src/views/AccountViewView.vue @@ -393,7 +393,7 @@ export default class AccountViewView extends Vue { "Clear your cache and start over (after data backup)."; console.error( "Telling user to clear cache after contact setting update because:", - err + err, ); this.alertTitle = "Error Updating Contact Setting"; } diff --git a/src/views/ContactAmountsView.vue b/src/views/ContactAmountsView.vue index 37bc5a0..d400d30 100644 --- a/src/views/ContactAmountsView.vue +++ b/src/views/ContactAmountsView.vue @@ -173,7 +173,7 @@ export default class ContactsView extends Vue { const identity = JSON.parse(account?.identity || "null"); if (!identity) { throw new Error( - "An ID is chosen but there are no keys for it so it cannot be used to talk with the service." + "An ID is chosen but there are no keys for it so it cannot be used to talk with the service.", ); } @@ -199,7 +199,7 @@ export default class ContactsView extends Vue { console.error( "Got bad response status & data of", resp.status, - resp.data + resp.data, ); this.alertTitle = "Error With Server"; this.alertMessage = @@ -224,7 +224,7 @@ export default class ContactsView extends Vue { console.error( "Got bad response status & data of", resp2.status, - resp2.data + resp2.data, ); this.alertTitle = "Error With Server"; this.alertMessage = @@ -234,7 +234,7 @@ export default class ContactsView extends Vue { const sortedResult: Array = R.sort( (a, b) => new Date(b.issuedAt).getTime() - new Date(a.issuedAt).getTime(), - result + result, ); this.giveRecords = sortedResult; } catch (error) { @@ -274,7 +274,7 @@ export default class ContactsView extends Vue { const identity = JSON.parse(account?.identity || "null"); if (!identity) { throw new Error( - "An ID is chosen but there are no keys for it so it cannot be used to talk with the service." + "An ID is chosen but there are no keys for it so it cannot be used to talk with the service.", ); } if (identity.keys[0].privateKeyHex !== null) { diff --git a/src/views/ContactQRScanShowView.vue b/src/views/ContactQRScanShowView.vue index d7e3142..feff8a6 100644 --- a/src/views/ContactQRScanShowView.vue +++ b/src/views/ContactQRScanShowView.vue @@ -65,7 +65,7 @@ export default class ContactQRScanShow extends Vue { const identity = JSON.parse(account?.identity || "null"); if (!identity) { throw new Error( - "An ID is chosen but there are no keys for it so it cannot be used to talk with the service." + "An ID is chosen but there are no keys for it so it cannot be used to talk with the service.", ); } diff --git a/src/views/ContactsView.vue b/src/views/ContactsView.vue index 5200acf..63417f1 100644 --- a/src/views/ContactsView.vue +++ b/src/views/ContactsView.vue @@ -256,7 +256,7 @@ export default class ContactsView extends Vue { const allContacts = await db.contacts.toArray(); this.contacts = R.sort( (a: Contact, b) => (a.name || "").localeCompare(b.name || ""), - allContacts + allContacts, ); } @@ -268,7 +268,7 @@ export default class ContactsView extends Vue { if (!identity) { console.error( - "Attempted to load Give records with no identity available." + "Attempted to load Give records with no identity available.", ); return; } @@ -315,7 +315,7 @@ export default class ContactsView extends Vue { console.error( "Got bad response status & data of", resp.status, - resp.data + resp.data, ); this.alertTitle = "Error With Server"; this.alertMessage = @@ -367,7 +367,7 @@ export default class ContactsView extends Vue { console.error( "Got bad response status & data of", resp.status, - resp.data + resp.data, ); this.alertTitle = "Error With Server"; this.alertMessage = @@ -402,7 +402,7 @@ export default class ContactsView extends Vue { const allContacts = this.contacts.concat([newContact]); this.contacts = R.sort( (a: Contact, b) => (a.name || "").localeCompare(b.name || ""), - allContacts + allContacts, ); } @@ -413,7 +413,7 @@ export default class ContactsView extends Vue { this.nameForDid(this.contacts, contact.did) + " with DID " + contact.did + - " ?" + " ?", ) ) { await db.open(); @@ -427,7 +427,7 @@ export default class ContactsView extends Vue { confirm( "Are you sure you want to use one of your registrations for " + this.nameForDid(this.contacts, contact.did) + - "?" + "?", ) ) { await accountsDB.open(); @@ -630,7 +630,7 @@ export default class ContactsView extends Vue { "There are " + this.givenToMeUnconfirmed[fromDid] + " unconfirmed hours from them." + - " Would you like to confirm some of those hours?" + " Would you like to confirm some of those hours?", ) ) { this.$router.push({ @@ -670,7 +670,7 @@ export default class ContactsView extends Vue { " hours " + toFrom + description + - "?" + "?", ) ) { this.createAndSubmitGive( @@ -678,7 +678,7 @@ export default class ContactsView extends Vue { fromDid, toDid, parseFloat(this.hourInput), - this.hourDescriptionInput + this.hourDescriptionInput, ); } } @@ -689,7 +689,7 @@ export default class ContactsView extends Vue { fromDid: string, toDid: string, amount: number, - description: string + description: string, ): Promise { // Make a claim const vcClaim: GiveVerifiableCredential = { diff --git a/src/views/DiscoverView.vue b/src/views/DiscoverView.vue index 27ac498..b7606d4 100644 --- a/src/views/DiscoverView.vue +++ b/src/views/DiscoverView.vue @@ -156,7 +156,7 @@ export default class DiscoverView extends Vue { if (!identity) { throw new Error( - "An ID is chosen but there are no keys for it so it cannot be used to talk with the service." + "An ID is chosen but there are no keys for it so it cannot be used to talk with the service.", ); } @@ -179,7 +179,7 @@ export default class DiscoverView extends Vue { { method: "GET", headers: await this.buildHeaders(), - } + }, ); if (response.status !== 200) { @@ -219,7 +219,7 @@ export default class DiscoverView extends Vue { { method: "GET", headers: await this.buildHeaders(), - } + }, ); if (response.status !== 200) { diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue index 252d6d0..45bde50 100644 --- a/src/views/HomeView.vue +++ b/src/views/HomeView.vue @@ -104,6 +104,7 @@ export default class HomeView extends Vue { this.allAccounts = await accountsDB.accounts.toArray(); await db.open(); const settings = await db.settings.get(MASTER_SETTINGS_KEY); + console.log(settings); this.apiServer = settings?.apiServer || ""; this.activeDid = settings?.activeDid || ""; this.allContacts = await db.contacts.toArray(); @@ -128,7 +129,7 @@ export default class HomeView extends Vue { if (!identity) { throw new Error( - "An ID is chosen but there are no keys for it so it cannot be used to talk with the service." + "An ID is chosen but there are no keys for it so it cannot be used to talk with the service.", ); } @@ -139,9 +140,8 @@ export default class HomeView extends Vue { return headers; } - updateAllFeed = async () => { + public async updateAllFeed() { this.isHiddenSpinner = false; - await this.retrieveClaims(this.apiServer, null, this.feedPreviousOldestId) .then(async (results) => { if (results.data.length > 0) { @@ -169,16 +169,16 @@ export default class HomeView extends Vue { }); this.isHiddenSpinner = true; - }; + } - retrieveClaims = async (endorserApiServer, identifier, beforeId) => { + public async retrieveClaims(endorserApiServer, identifier, beforeId) { const beforeQuery = beforeId == null ? "" : "&beforeId=" + beforeId; const response = await fetch( - this.apiServer + "/api/v2/report/gives?" + beforeQuery, + endorserApiServer + "/api/v2/report/gives?" + beforeQuery, { method: "GET", - headers: await buildHeaders(), - } + headers: await this.buildHeaders(), + }, ); if (response.status !== 200) { @@ -192,12 +192,11 @@ export default class HomeView extends Vue { } else { throw JSON.stringify(results); } - }; + } giveDescription(giveRecord) { let claim = giveRecord.fullClaim; if (claim.claim) { - // it's probably a Verified Credential claim = claim.claim; } @@ -208,7 +207,7 @@ export default class HomeView extends Vue { giverDid, this.activeDid, this.allAccounts, - this.allContacts + this.allContacts, ); const gaveAmount = claim.object?.amountOfThisGood ? this.displayAmount(claim.object.unitCode, claim.object.amountOfThisGood) @@ -221,7 +220,7 @@ export default class HomeView extends Vue { gaveRecipientId, this.activeDid, this.allAccounts, - this.allContacts + this.allContacts, ) : ""; return giverInfo + " gave " + gaveAmount + gaveRecipientInfo; @@ -276,7 +275,7 @@ export default class HomeView extends Vue { if (!identity) { throw new Error( - "An ID is chosen but there are no keys for it so it cannot be used to talk with the service." + "An ID is chosen but there are no keys for it so it cannot be used to talk with the service.", ); } @@ -287,28 +286,41 @@ export default class HomeView extends Vue { giverDid, this.activeDid, description, - hours + hours, ) .then((result) => { - const error = result.data?.error; - if (result.status !== 201 || error) { + if (isGiveCreationError(result)) { + const errorMessage = getGiveCreationErrorMessage(result); console.log("Error with give result:", result); this.alertTitle = "Error"; this.alertMessage = - error?.message || "There was an error recording the give."; + errorMessage || "There was an error recording the give."; } else { this.alertTitle = "Success"; this.alertMessage = "That gift was recorded."; } }) - .catch((e) => { - console.log("Error with give caught:", e); + .catch((error) => { + console.log("Error with give caught:", error); this.alertTitle = "Error"; this.alertMessage = - e.userMessage || - e.response?.data?.error?.message || + getGiveErrorMessage(error) || "There was an error recording the give."; }); } + + // Helper functions for readability + + isGiveCreationError(result) { + return result.status !== 201 || result.data?.error; + } + + getGiveCreationErrorMessage(result) { + return result.data?.error?.message; + } + + getGiveErrorMessage(error) { + return error.userMessage || error.response?.data?.error?.message; + } } diff --git a/src/views/ImportAccountView.vue b/src/views/ImportAccountView.vue index 048c890..ae3f0ac 100644 --- a/src/views/ImportAccountView.vue +++ b/src/views/ImportAccountView.vue @@ -72,7 +72,7 @@ export default class ImportAccountView extends Vue { this.address, this.publicHex, this.privateHex, - this.derivationPath + this.derivationPath, ); try { diff --git a/src/views/NewEditProjectView.vue b/src/views/NewEditProjectView.vue index 07e46f8..554e0ee 100644 --- a/src/views/NewEditProjectView.vue +++ b/src/views/NewEditProjectView.vue @@ -122,7 +122,7 @@ export default class NewEditProjectView extends Vue { const identity = JSON.parse(account?.identity || "null"); if (!identity) { throw new Error( - "An ID is chosen but there are no keys for it so it cannot be used to talk with the service." + "An ID is chosen but there are no keys for it so it cannot be used to talk with the service.", ); } this.LoadProject(identity); @@ -206,7 +206,7 @@ export default class NewEditProjectView extends Vue { // handleId is new in server v release-1.6.0; remove fullIri when that // version shows up here: https://endorser.ch:3000/api-docs/ useAppStore().setProjectId( - resp.data.success.handleId || resp.data.success.fullIri + resp.data.success.handleId || resp.data.success.fullIri, ); setTimeout( function (that: Vue) { @@ -216,7 +216,7 @@ export default class NewEditProjectView extends Vue { that.$router.push(route); }, 2000, - this + this, ); } } catch (error) { @@ -235,7 +235,7 @@ export default class NewEditProjectView extends Vue { } else { console.error( "Here's the full error trying to save the claim:", - error + error, ); this.alertTitle = "Claim Error"; this.alertMessage = error as string; @@ -259,7 +259,7 @@ export default class NewEditProjectView extends Vue { const identity = JSON.parse(account?.identity || "null"); if (!identity) { throw new Error( - "An ID is chosen but there are no keys for it so it cannot be used to talk with the service." + "An ID is chosen but there are no keys for it so it cannot be used to talk with the service.", ); } this.SaveProject(identity); diff --git a/src/views/ProjectViewView.vue b/src/views/ProjectViewView.vue index dffe984..77ed61a 100644 --- a/src/views/ProjectViewView.vue +++ b/src/views/ProjectViewView.vue @@ -250,7 +250,7 @@ export default class ProjectViewView extends Vue { const identity = JSON.parse(account?.identity || "null"); if (!identity) { throw new Error( - "An ID is chosen but there are no keys for it so it cannot be used to talk with the service." + "An ID is chosen but there are no keys for it so it cannot be used to talk with the service.", ); } this.LoadProject(identity); @@ -299,7 +299,7 @@ export default class ProjectViewView extends Vue { if (!identity) { throw new Error( - "An ID is chosen but there are no keys for it so it cannot be used to talk with the service." + "An ID is chosen but there are no keys for it so it cannot be used to talk with the service.", ); } @@ -312,7 +312,7 @@ export default class ProjectViewView extends Vue { this.activeDid, description, hours, - this.projectId + this.projectId, ); if (result.status !== 201 || result.data?.error) { diff --git a/src/views/ProjectsView.vue b/src/views/ProjectsView.vue index 2354b26..ce428f8 100644 --- a/src/views/ProjectsView.vue +++ b/src/views/ProjectsView.vue @@ -205,7 +205,7 @@ export default class ProjectsView extends Vue { const identity = JSON.parse(account?.identity || "null"); if (!identity) { throw new Error( - "An ID is chosen but there are no keys for it so it cannot be used to talk with the service." + "An ID is chosen but there are no keys for it so it cannot be used to talk with the service.", ); } this.current = identity;