From 5398e1d89aef5c509e1ad30177fbb72bed241a3c Mon Sep 17 00:00:00 2001 From: Yarmo Mackenbach Date: Tue, 4 Jul 2023 12:43:55 +0200 Subject: [PATCH 1/9] chore: update deps --- package.json | 4 +- yarn.lock | 1425 +++++++++++++++++++++++++++----------------------- 2 files changed, 760 insertions(+), 669 deletions(-) diff --git a/package.json b/package.json index 35b6eb4..e061397 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "bent": "^7.3.12", "body-parser": "^1.19.0", "dialog-polyfill": "^0.5.6", - "doipjs": "^0.18.3", + "doipjs": "^0.19.0", "dotenv": "^16.0.3", "express": "^4.17.1", "express-validator": "^6.13.0", @@ -34,7 +34,7 @@ "mini-css-extract-plugin": "^2.5.3", "mocha": "^10.1.0", "nodemon": "^2.0.20", - "rome": "^11.0.0", + "rome": "^12.1", "standard": "^17.0.0", "style-loader": "^3.3.1", "webpack": "^5.75.0", diff --git a/yarn.lock b/yarn.lock index 19a39c0..4c14572 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,18 +2,23 @@ # yarn lockfile v1 +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== + "@ampproject/remapping@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" - integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== + version "2.2.1" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" + integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== dependencies: - "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" "@babel/cli@^7.16.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.21.0.tgz#1868eb70e9824b427fc607610cce8e9e7889e7e1" - integrity sha512-xi7CxyS8XjSyiwUGCfwf+brtJxjW1/ZTcBUkP10xawIEXLX5HzLn+3aXkgxozcP2UhRhtKTmQurw9Uaes7jZrA== + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.22.6.tgz#63f5be2a0abd587ccfbdc93424fa85f43142cc53" + integrity sha512-Be3/RfEDmkMRGT1+ru5nTkfcvWz5jDOYg1V9rXqTz2u9Qt96O1ryboGvxVBp7wOnYWDB8DNHIWb6DThrpudfOw== dependencies: "@jridgewell/trace-mapping" "^0.3.17" commander "^4.0.1" @@ -26,199 +31,199 @@ "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents.3" chokidar "^3.4.0" -"@babel/code-frame@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" - integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== +"@babel/code-frame@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.5.tgz#234d98e1551960604f1246e6475891a570ad5658" + integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ== dependencies: - "@babel/highlight" "^7.18.6" + "@babel/highlight" "^7.22.5" -"@babel/compat-data@^7.20.5": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.0.tgz#c241dc454e5b5917e40d37e525e2f4530c399298" - integrity sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g== +"@babel/compat-data@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.6.tgz#15606a20341de59ba02cd2fcc5086fcbe73bf544" + integrity sha512-29tfsWTq2Ftu7MXmimyC0C5FDZv5DYxOZkh3XD3+QW4V/BYuv/LyEsjj3c0hqedEaDt6DBfDvexMKU8YevdqFg== "@babel/core@^7.16.5": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.0.tgz#1341aefdcc14ccc7553fcc688dd8986a2daffc13" - integrity sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA== + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.6.tgz#aafafbe86e9a1679d876b99dc46382964ef72494" + integrity sha512-HPIyDa6n+HKw5dEuway3vVAhBboYCtREBMp+IWeseZy6TFtzn6MHkCH2KKYUOC/vKKwgSMHQW4htBOrmuRPXfw== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.21.0" - "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-module-transforms" "^7.21.0" - "@babel/helpers" "^7.21.0" - "@babel/parser" "^7.21.0" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.0" - "@babel/types" "^7.21.0" + "@babel/code-frame" "^7.22.5" + "@babel/generator" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helpers" "^7.22.6" + "@babel/parser" "^7.22.6" + "@babel/template" "^7.22.5" + "@babel/traverse" "^7.22.6" + "@babel/types" "^7.22.5" + "@nicolo-ribaudo/semver-v6" "^6.3.3" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.2" - semver "^6.3.0" -"@babel/generator@^7.21.0", "@babel/generator@^7.21.1": - version "7.21.1" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.1.tgz#951cc626057bc0af2c35cd23e9c64d384dea83dd" - integrity sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA== +"@babel/generator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.5.tgz#1e7bf768688acfb05cf30b2369ef855e82d984f7" + integrity sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA== dependencies: - "@babel/types" "^7.21.0" + "@babel/types" "^7.22.5" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/helper-annotate-as-pure@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" - integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== +"@babel/helper-annotate-as-pure@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" + integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== dependencies: - "@babel/types" "^7.18.6" + "@babel/types" "^7.22.5" -"@babel/helper-compilation-targets@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz#a6cd33e93629f5eb473b021aac05df62c4cd09bb" - integrity sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ== +"@babel/helper-compilation-targets@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.6.tgz#e30d61abe9480aa5a83232eb31c111be922d2e52" + integrity sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA== dependencies: - "@babel/compat-data" "^7.20.5" - "@babel/helper-validator-option" "^7.18.6" - browserslist "^4.21.3" + "@babel/compat-data" "^7.22.6" + "@babel/helper-validator-option" "^7.22.5" + "@nicolo-ribaudo/semver-v6" "^6.3.3" + browserslist "^4.21.9" lru-cache "^5.1.1" - semver "^6.3.0" -"@babel/helper-environment-visitor@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" - integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== +"@babel/helper-environment-visitor@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98" + integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q== -"@babel/helper-function-name@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4" - integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg== +"@babel/helper-function-name@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz#ede300828905bb15e582c037162f99d5183af1be" + integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ== dependencies: - "@babel/template" "^7.20.7" - "@babel/types" "^7.21.0" + "@babel/template" "^7.22.5" + "@babel/types" "^7.22.5" -"@babel/helper-hoist-variables@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" - integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== +"@babel/helper-hoist-variables@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" + integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== dependencies: - "@babel/types" "^7.18.6" + "@babel/types" "^7.22.5" -"@babel/helper-module-imports@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" - integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== +"@babel/helper-module-imports@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz#1a8f4c9f4027d23f520bd76b364d44434a72660c" + integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg== dependencies: - "@babel/types" "^7.18.6" + "@babel/types" "^7.22.5" -"@babel/helper-module-transforms@^7.21.0": - version "7.21.2" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz#160caafa4978ac8c00ac66636cb0fa37b024e2d2" - integrity sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ== +"@babel/helper-module-transforms@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz#0f65daa0716961b6e96b164034e737f60a80d2ef" + integrity sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw== dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-simple-access" "^7.20.2" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.19.1" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.2" - "@babel/types" "^7.21.2" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.5" + "@babel/template" "^7.22.5" + "@babel/traverse" "^7.22.5" + "@babel/types" "^7.22.5" -"@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" - integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== +"@babel/helper-plugin-utils@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" + integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== -"@babel/helper-simple-access@^7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" - integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== +"@babel/helper-simple-access@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" + integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== dependencies: - "@babel/types" "^7.20.2" + "@babel/types" "^7.22.5" -"@babel/helper-split-export-declaration@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" - integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== +"@babel/helper-split-export-declaration@^7.22.5", "@babel/helper-split-export-declaration@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" + integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== dependencies: - "@babel/types" "^7.18.6" + "@babel/types" "^7.22.5" -"@babel/helper-string-parser@^7.19.4": - version "7.19.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" - integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== +"@babel/helper-string-parser@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" + integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== -"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" - integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== +"@babel/helper-validator-identifier@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193" + integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== -"@babel/helper-validator-option@^7.18.6": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" - integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== +"@babel/helper-validator-option@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz#de52000a15a177413c8234fa3a8af4ee8102d0ac" + integrity sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw== -"@babel/helpers@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.21.0.tgz#9dd184fb5599862037917cdc9eecb84577dc4e7e" - integrity sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA== +"@babel/helpers@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.6.tgz#8e61d3395a4f0c5a8060f309fb008200969b5ecd" + integrity sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA== dependencies: - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.0" - "@babel/types" "^7.21.0" + "@babel/template" "^7.22.5" + "@babel/traverse" "^7.22.6" + "@babel/types" "^7.22.5" -"@babel/highlight@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== +"@babel/highlight@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.5.tgz#aa6c05c5407a67ebce408162b7ede789b4d22031" + integrity sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw== dependencies: - "@babel/helper-validator-identifier" "^7.18.6" + "@babel/helper-validator-identifier" "^7.22.5" chalk "^2.0.0" js-tokens "^4.0.0" "@babel/node@^7.16.5": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/node/-/node-7.20.7.tgz#609be7f841893e24931b7910263babfde84040a9" - integrity sha512-AQt3gVcP+fpFuoFn4FmIW/+5JovvEoA9og4Y1LrRw0pv3jkl4tujZMMy3X/3ugjLrEy3k1aNywo3JIl3g+jVXQ== + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/node/-/node-7.22.6.tgz#a47b4f150f06bad1808823c4519690ded6c93911" + integrity sha512-Lt6v+RUQOTsEOXLv+KfjogLFkFfsLPPSoXZqmbngfVatkWjQPnFGHO0xjFRcN6XEvm3vsnZn+AWQiRpgZFsdIA== dependencies: - "@babel/register" "^7.18.9" + "@babel/register" "^7.22.5" commander "^4.0.1" - core-js "^3.26.0" + core-js "^3.30.2" node-environment-flags "^1.0.5" regenerator-runtime "^0.13.11" v8flags "^3.1.1" -"@babel/parser@^7.20.7", "@babel/parser@^7.21.0", "@babel/parser@^7.21.2", "@babel/parser@^7.6.0", "@babel/parser@^7.9.6": - version "7.21.2" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.2.tgz#dacafadfc6d7654c3051a66d6fe55b6cb2f2a0b3" - integrity sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ== +"@babel/parser@^7.22.5", "@babel/parser@^7.22.6", "@babel/parser@^7.6.0", "@babel/parser@^7.9.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.6.tgz#201f8b47be20c76c7c5743b9c16129760bf9a975" + integrity sha512-EIQu22vNkceq3LbjAq7knDf/UmtI2qbcNI8GRBlijez6TpQLvSodJPYfydQmNA5buwkxxxa/PVI44jjYZ+/cLw== -"@babel/plugin-syntax-jsx@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" - integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== +"@babel/plugin-syntax-jsx@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918" + integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-react-jsx@^7.16.5": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.0.tgz#656b42c2fdea0a6d8762075d58ef9d4e3c4ab8a2" - integrity sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg== + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz#932c291eb6dd1153359e2a90cb5e557dcf068416" + integrity sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA== dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-jsx" "^7.18.6" - "@babel/types" "^7.21.0" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-jsx" "^7.22.5" + "@babel/types" "^7.22.5" -"@babel/register@^7.18.9": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.21.0.tgz#c97bf56c2472e063774f31d344c592ebdcefa132" - integrity sha512-9nKsPmYDi5DidAqJaQooxIhsLJiNMkGr8ypQ8Uic7cIox7UCDsM7HuUGxdGT7mSDTYbqzIdsOWzfBton/YJrMw== +"@babel/register@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.22.5.tgz#e4d8d0f615ea3233a27b5c6ada6750ee59559939" + integrity sha512-vV6pm/4CijSQ8Y47RH5SopXzursN35RQINfGJkmOlcpAtGuf94miFvIPhCKGQN7WGIcsgG1BHEX2KVdTYwTwUQ== dependencies: clone-deep "^4.0.1" find-cache-dir "^2.0.0" @@ -226,38 +231,38 @@ pirates "^4.0.5" source-map-support "^0.5.16" -"@babel/template@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" - integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== +"@babel/template@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec" + integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw== dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" + "@babel/code-frame" "^7.22.5" + "@babel/parser" "^7.22.5" + "@babel/types" "^7.22.5" -"@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2": - version "7.21.2" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.21.2.tgz#ac7e1f27658750892e815e60ae90f382a46d8e75" - integrity sha512-ts5FFU/dSUPS13tv8XiEObDu9K+iagEKME9kAbaP7r0Y9KtZJZ+NGndDvWoRAYNpeWafbpFeki3q9QoMD6gxyw== +"@babel/traverse@^7.22.5", "@babel/traverse@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.6.tgz#8f2f83a5c588251584914debeee38f35f661a300" + integrity sha512-53CijMvKlLIDlOTrdWiHileRddlIiwUIyCKqYa7lYnnPldXCG5dUSN38uT0cA6i7rHWNKJLH0VU/Kxdr1GzB3w== dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.21.1" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.21.0" - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.21.2" - "@babel/types" "^7.21.2" + "@babel/code-frame" "^7.22.5" + "@babel/generator" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/parser" "^7.22.6" + "@babel/types" "^7.22.5" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.18.6", "@babel/types@^7.20.2", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.6.1", "@babel/types@^7.9.6": - version "7.21.2" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.2.tgz#92246f6e00f91755893c2876ad653db70c8310d1" - integrity sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw== +"@babel/types@^7.22.5", "@babel/types@^7.6.1", "@babel/types@^7.9.6": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.5.tgz#cd93eeaab025880a3a47ec881f4b096a5b786fbe" + integrity sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA== dependencies: - "@babel/helper-string-parser" "^7.19.4" - "@babel/helper-validator-identifier" "^7.19.1" + "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.5" to-fast-properties "^2.0.0" "@colors/colors@1.5.0": @@ -279,14 +284,26 @@ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== -"@eslint/eslintrc@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.0.tgz#943309d8697c52fc82c076e90c1c74fbbe69dbff" - integrity sha512-fluIaaV+GyV24CCu/ggiHdV+j4RNh85yQnAYS/G2mZODZgGmmlrgCydjUcV3YvxCm9x8nMAfThsqTni4KiXT4A== +"@eslint-community/eslint-utils@^4.2.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.4.0": + version "4.5.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884" + integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ== + +"@eslint/eslintrc@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.0.tgz#82256f164cc9e0b59669efc19d57f8092706841d" + integrity sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.4.0" + espree "^9.6.0" globals "^13.19.0" ignore "^5.2.0" import-fresh "^3.2.1" @@ -294,15 +311,15 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.35.0": - version "8.35.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.35.0.tgz#b7569632b0b788a0ca0e438235154e45d42813a7" - integrity sha512-JXdzbRiWclLVoD8sNUjR443VVlYqiYmDVT6rGUEIEHU5YJW0gaVZwV2xgM7D4arkvASqD0IlLUVjHiFuxaftRw== +"@eslint/js@8.44.0": + version "8.44.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.44.0.tgz#961a5903c74139390478bdc808bcde3fc45ab7af" + integrity sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw== -"@humanwhocodes/config-array@^0.11.8": - version "0.11.8" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" - integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== +"@humanwhocodes/config-array@^0.11.10": + version "0.11.10" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" + integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== dependencies: "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" @@ -318,18 +335,10 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== -"@jridgewell/gen-mapping@^0.1.0": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" - integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== - dependencies: - "@jridgewell/set-array" "^1.0.0" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" - integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== dependencies: "@jridgewell/set-array" "^1.0.1" "@jridgewell/sourcemap-codec" "^1.4.10" @@ -340,28 +349,33 @@ resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== -"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": +"@jridgewell/set-array@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== -"@jridgewell/source-map@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" - integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== +"@jridgewell/source-map@^0.3.3": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" + integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== dependencies: "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": +"@jridgewell/sourcemap-codec@1.4.14": version "1.4.14" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== -"@jridgewell/trace-mapping@^0.3.14", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.17" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" - integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.18" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" + integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== dependencies: "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" @@ -371,6 +385,11 @@ resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz#323d72dd25103d0c4fbdce89dadf574a787b1f9b" integrity sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ== +"@nicolo-ribaudo/semver-v6@^6.3.3": + version "6.3.3" + resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz#ea6d23ade78a325f7a52750aab1526b02b628c29" + integrity sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -392,25 +411,25 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@openpgp/hkp-client@^0.0.2": - version "0.0.2" - resolved "https://registry.yarnpkg.com/@openpgp/hkp-client/-/hkp-client-0.0.2.tgz#d8737358efcf6412c8273f89385e020766613e88" - integrity sha512-hA71RhqfLfNltZsy/USTQehE2QAVB3eK4xx8p76XtFJy5Zg6gK2XbZvOC/x/yG8i2Ipbyul1DMTMxH9v8rfPKw== +"@openpgp/hkp-client@^0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@openpgp/hkp-client/-/hkp-client-0.0.3.tgz#8e8edb328e4220a56d9c232876c5d7f1a7f6441c" + integrity sha512-Sqv4wc3z1GeO6Fz0aNdtJge+8N7UF1jb8xTjus3NKO6LL/z50baAYlQHgyq7KIp6gBRpM1FH9lk+C1oQCLIwdg== dependencies: node-fetch "^2.6.1" -"@openpgp/wkd-client@^0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@openpgp/wkd-client/-/wkd-client-0.0.3.tgz#e9f137ed21ee8631451782e22a2740fd781a2534" - integrity sha512-qe+uWtCJetuG78KhfiQyEA+ZciC/qeECXRj+LCm4m0s98qR2wPwYHRI1u8aFbtkN6G4ZMyKN+opY++fJS5l3vg== +"@openpgp/wkd-client@^0.0.4": + version "0.0.4" + resolved "https://registry.yarnpkg.com/@openpgp/wkd-client/-/wkd-client-0.0.4.tgz#a8a2925a6bc044548c92091e7a45bac0bb504850" + integrity sha512-JBd8w39YlD4QguLf9RN+LGLBBr5xoJnKMeXdJauOJEx/NssibZT7/f6Hqo1gCwjf5b2nybq+1hCTM0arHLLOWQ== dependencies: "@peculiar/webcrypto" "^1.1.6" node-fetch "^2.6.1" -"@peculiar/asn1-schema@^2.1.6", "@peculiar/asn1-schema@^2.3.0": - version "2.3.3" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-schema/-/asn1-schema-2.3.3.tgz#21418e1f3819e0b353ceff0c2dad8ccb61acd777" - integrity sha512-6GptMYDMyWBHTUKndHaDsRZUO/XMSgIns2krxcm2L7SEExRHwawFvSwNBhqNPR9HJwv3MruAiF1bhN0we6j6GQ== +"@peculiar/asn1-schema@^2.3.6": + version "2.3.6" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-schema/-/asn1-schema-2.3.6.tgz#3dd3c2ade7f702a9a94dfb395c192f5fa5d6b922" + integrity sha512-izNRxPoaeJeg/AyH8hER6s+H7p4itk+03QCa4sbxI3lNdseQYCuxzgsuNK8bTXChtLTjpJz6NmXKA73qLa3rCA== dependencies: asn1js "^3.0.5" pvtsutils "^1.3.2" @@ -424,15 +443,15 @@ tslib "^2.0.0" "@peculiar/webcrypto@^1.1.6": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@peculiar/webcrypto/-/webcrypto-1.4.1.tgz#821493bd5ad0f05939bd5f53b28536f68158360a" - integrity sha512-eK4C6WTNYxoI7JOabMoZICiyqRRtJB220bh0Mbj5RwRycleZf9BPyZoxsTvpP0FpmVS2aS13NKOuh5/tN3sIRw== + version "1.4.3" + resolved "https://registry.yarnpkg.com/@peculiar/webcrypto/-/webcrypto-1.4.3.tgz#078b3e8f598e847b78683dc3ba65feb5029b93a7" + integrity sha512-VtaY4spKTdN5LjJ04im/d/joXuvLbQdgy5Z4DXF4MFZhQ+MTrejbNMkfZBp1Bs3O5+bFqnJgyGdPuZQflvIa5A== dependencies: - "@peculiar/asn1-schema" "^2.3.0" + "@peculiar/asn1-schema" "^2.3.6" "@peculiar/json-schema" "^1.1.12" pvtsutils "^1.3.2" - tslib "^2.4.1" - webcrypto-core "^1.7.4" + tslib "^2.5.0" + webcrypto-core "^1.7.7" "@polka/url@^1.0.0-next.20": version "1.0.0-next.21" @@ -444,31 +463,61 @@ resolved "https://registry.yarnpkg.com/@rometools/cli-darwin-arm64/-/cli-darwin-arm64-11.0.0.tgz#8f916df0580fede2325434a50ed5b1f2cf972696" integrity sha512-F3vkdY+s3FLIEnAjSbyHTuIPB88cLpccimW4ecid5I7S6GzGG3iUJI4xT00JhH73K4P/qW20/9r+kH1T9Du8Xg== +"@rometools/cli-darwin-arm64@12.1.3": + version "12.1.3" + resolved "https://registry.yarnpkg.com/@rometools/cli-darwin-arm64/-/cli-darwin-arm64-12.1.3.tgz#b00fe225e34047c4dac63588e237b11ebec47694" + integrity sha512-AmFTUDYjBuEGQp/Wwps+2cqUr+qhR7gyXAUnkL5psCuNCz3807TrUq/ecOoct5MIavGJTH6R4aaSL6+f+VlBEg== + "@rometools/cli-darwin-x64@11.0.0": version "11.0.0" resolved "https://registry.yarnpkg.com/@rometools/cli-darwin-x64/-/cli-darwin-x64-11.0.0.tgz#1393a5bba26e8c5352737270a1a98f2759f40d14" integrity sha512-X6jhtS6Iml4GOzgNtnLwIp/KXXhSdqeVyfv69m/AHnIzx3gQAjPZ7BPnJLvTCbhe4SKHL+uTZYFSCJpkUUKE6w== +"@rometools/cli-darwin-x64@12.1.3": + version "12.1.3" + resolved "https://registry.yarnpkg.com/@rometools/cli-darwin-x64/-/cli-darwin-x64-12.1.3.tgz#e5bbf02afb1aab7447e743092245dea992b4b29f" + integrity sha512-k8MbWna8q4LRlb005N2X+JS1UQ+s3ZLBBvwk4fP8TBxlAJXUz17jLLu/Fi+7DTTEmMhM84TWj4FDKW+rNar28g== + "@rometools/cli-linux-arm64@11.0.0": version "11.0.0" resolved "https://registry.yarnpkg.com/@rometools/cli-linux-arm64/-/cli-linux-arm64-11.0.0.tgz#efbfd36013455fc5d940b24b1b195a43aba87bcb" integrity sha512-dktTJJlTpmycBZ2TwhJBcAO8ztK8DdevdyZnFFxdYRvtmJgTjIsC2UFayf/SbKew8B8q1IhI0it+D6ihAeIpeg== +"@rometools/cli-linux-arm64@12.1.3": + version "12.1.3" + resolved "https://registry.yarnpkg.com/@rometools/cli-linux-arm64/-/cli-linux-arm64-12.1.3.tgz#e75b01b74c134edc811e21fa7e1e440602930d59" + integrity sha512-X/uLhJ2/FNA3nu5TiyeNPqiD3OZoFfNfRvw6a3ut0jEREPvEn72NI7WPijH/gxSz55znfQ7UQ6iM4DZumUknJg== + "@rometools/cli-linux-x64@11.0.0": version "11.0.0" resolved "https://registry.yarnpkg.com/@rometools/cli-linux-x64/-/cli-linux-x64-11.0.0.tgz#675532d9f603b88ab0686da800ec711b45d22085" integrity sha512-WVcnXPNdWGUWo0p4NU8YzuthjYR7q+b4vRcjdxtP1DlpphZmSsoC/RSE85nEqRAz8hChcKUansVzOPM8BSsuGA== +"@rometools/cli-linux-x64@12.1.3": + version "12.1.3" + resolved "https://registry.yarnpkg.com/@rometools/cli-linux-x64/-/cli-linux-x64-12.1.3.tgz#2b9f4a68079783f275d4d27df83e4fa2220ec6fc" + integrity sha512-csP17q1eWiUXx9z6Jr/JJPibkplyKIwiWPYNzvPCGE8pHlKhwZj3YHRuu7Dm/4EOqx0XFIuqqWZUYm9bkIC8xg== + "@rometools/cli-win32-arm64@11.0.0": version "11.0.0" resolved "https://registry.yarnpkg.com/@rometools/cli-win32-arm64/-/cli-win32-arm64-11.0.0.tgz#4d50f446acf2bc126cb58b5cff5a4d53b7c6a378" integrity sha512-tPj6RThQzS7Q45jqQll7NlTYvNcsg/BEP3LYiiazqSh9FAFnMkrV6ewUcMPKWyAfiyLs7jlz4rRvdNRUSygzfQ== +"@rometools/cli-win32-arm64@12.1.3": + version "12.1.3" + resolved "https://registry.yarnpkg.com/@rometools/cli-win32-arm64/-/cli-win32-arm64-12.1.3.tgz#714acb67ac4ea4c15e2bc6aea4dd290c76c8efc6" + integrity sha512-RymHWeod57EBOJY4P636CgUwYA6BQdkQjh56XKk4pLEHO6X1bFyMet2XL7KlHw5qOTalzuzf5jJqUs+vf3jdXQ== + "@rometools/cli-win32-x64@11.0.0": version "11.0.0" resolved "https://registry.yarnpkg.com/@rometools/cli-win32-x64/-/cli-win32-x64-11.0.0.tgz#c6d48db5ea52b393dae7fe04bfe803ad8cee71a5" integrity sha512-bmBai8WHxYjsGk1+je7ZTfCUCWq30WJI3pQM8pzTA674lfGTZ9ymJoZwTaIMSO4rL5V9mlO6uLunsBKso9VqOg== +"@rometools/cli-win32-x64@12.1.3": + version "12.1.3" + resolved "https://registry.yarnpkg.com/@rometools/cli-win32-x64/-/cli-win32-x64-12.1.3.tgz#b4f53491d2ca8f1234b3613b7cc73418ad8d76bb" + integrity sha512-yHSKYidqJMV9nADqg78GYA+cZ0hS1twANAjiFibQdXj9aGzD+s/IzIFEIi/U/OBLvWYg/SCw0QVozi2vTlKFDQ== + "@sindresorhus/is@^4.0.0": version "4.6.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" @@ -500,22 +549,17 @@ "@types/estree" "*" "@types/eslint@*": - version "8.21.1" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.21.1.tgz#110b441a210d53ab47795124dbc3e9bb993d1e7c" - integrity sha512-rc9K8ZpVjNcLs8Fp0dkozd5Pt2Apk1glO4Vgz8ix1u6yFByxfqo5Yavpy65o+93TAe24jr7v+eSBtFLvOQtCRQ== + version "8.40.2" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.40.2.tgz#2833bc112d809677864a4b0e7d1de4f04d7dac2d" + integrity sha512-PRVjQ4Eh9z9pmmtaq8nTjZjQwKFk7YIHIud3lRoKRBgUQjgjRmoGxxGEPXQkF+lH7QkHJRNr5F4aBgYCW0lqpQ== dependencies: "@types/estree" "*" "@types/json-schema" "*" -"@types/estree@*": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" - integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== - -"@types/estree@^0.0.51": - version "0.0.51" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" - integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== +"@types/estree@*", "@types/estree@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" + integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== "@types/glob@^7.1.1": version "7.2.0" @@ -531,9 +575,9 @@ integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== "@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": - version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + version "7.0.12" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" + integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== "@types/json5@^0.0.29": version "0.0.29" @@ -553,9 +597,9 @@ integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== "@types/node@*": - version "18.14.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.14.3.tgz#485070908df2e7b476ecaf83108e50b4d925a153" - integrity sha512-1y36CC5iL5CMyKALzwX9cwwxcWIxvIBe3gzs4GrXWXEQ8klQnCZ2U/WDGiNrXHmQcUhnaun17XG9TEIDlGj2RA== + version "20.3.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.3.tgz#329842940042d2b280897150e023e604d11657d6" + integrity sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw== "@types/responselike@^1.0.0": version "1.0.0" @@ -574,141 +618,141 @@ resolved "https://registry.yarnpkg.com/@vercel/ncc/-/ncc-0.34.0.tgz#d0139528320e46670d949c82967044a8f66db054" integrity sha512-G9h5ZLBJ/V57Ou9vz5hI8pda/YQX5HQszCs3AmIus3XzsmRn/0Ptic5otD3xVST8QLKk7AMk7AqpsyQGN7MZ9A== -"@webassemblyjs/ast@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" - integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== +"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24" + integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== dependencies: - "@webassemblyjs/helper-numbers" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/helper-numbers" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" -"@webassemblyjs/floating-point-hex-parser@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" - integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== +"@webassemblyjs/floating-point-hex-parser@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" + integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== -"@webassemblyjs/helper-api-error@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" - integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== +"@webassemblyjs/helper-api-error@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" + integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== -"@webassemblyjs/helper-buffer@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" - integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== +"@webassemblyjs/helper-buffer@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093" + integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== -"@webassemblyjs/helper-numbers@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" - integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== +"@webassemblyjs/helper-numbers@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5" + integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.1" - "@webassemblyjs/helper-api-error" "1.11.1" + "@webassemblyjs/floating-point-hex-parser" "1.11.6" + "@webassemblyjs/helper-api-error" "1.11.6" "@xtuc/long" "4.2.2" -"@webassemblyjs/helper-wasm-bytecode@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" - integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== +"@webassemblyjs/helper-wasm-bytecode@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" + integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== -"@webassemblyjs/helper-wasm-section@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" - integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== +"@webassemblyjs/helper-wasm-section@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577" + integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" -"@webassemblyjs/ieee754@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" - integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== +"@webassemblyjs/ieee754@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a" + integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== dependencies: "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/leb128@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" - integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== +"@webassemblyjs/leb128@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" + integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== dependencies: "@xtuc/long" "4.2.2" -"@webassemblyjs/utf8@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" - integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== +"@webassemblyjs/utf8@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" + integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== -"@webassemblyjs/wasm-edit@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" - integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== +"@webassemblyjs/wasm-edit@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab" + integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/helper-wasm-section" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - "@webassemblyjs/wasm-opt" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - "@webassemblyjs/wast-printer" "1.11.1" + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/helper-wasm-section" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + "@webassemblyjs/wasm-opt" "1.11.6" + "@webassemblyjs/wasm-parser" "1.11.6" + "@webassemblyjs/wast-printer" "1.11.6" -"@webassemblyjs/wasm-gen@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" - integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== +"@webassemblyjs/wasm-gen@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268" + integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/ieee754" "1.11.1" - "@webassemblyjs/leb128" "1.11.1" - "@webassemblyjs/utf8" "1.11.1" + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" -"@webassemblyjs/wasm-opt@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" - integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== +"@webassemblyjs/wasm-opt@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2" + integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + "@webassemblyjs/wasm-parser" "1.11.6" -"@webassemblyjs/wasm-parser@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" - integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== +"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1" + integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-api-error" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/ieee754" "1.11.1" - "@webassemblyjs/leb128" "1.11.1" - "@webassemblyjs/utf8" "1.11.1" + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-api-error" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" -"@webassemblyjs/wast-printer@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" - integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== +"@webassemblyjs/wast-printer@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20" + integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== dependencies: - "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/ast" "1.11.6" "@xtuc/long" "4.2.2" -"@webpack-cli/configtest@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.0.1.tgz#a69720f6c9bad6aef54a8fa6ba9c3533e7ef4c7f" - integrity sha512-njsdJXJSiS2iNbQVS0eT8A/KPnmyH4pv1APj2K0d1wrZcBLw+yppxOy4CGqa0OxDJkzfL/XELDhD8rocnIwB5A== +"@webpack-cli/configtest@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.1.1.tgz#3b2f852e91dac6e3b85fb2a314fb8bef46d94646" + integrity sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw== -"@webpack-cli/info@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-2.0.1.tgz#eed745799c910d20081e06e5177c2b2569f166c0" - integrity sha512-fE1UEWTwsAxRhrJNikE7v4EotYflkEhBL7EbajfkPlf6E37/2QshOy/D48Mw8G5XMFlQtS6YV42vtbG9zBpIQA== +"@webpack-cli/info@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-2.0.2.tgz#cc3fbf22efeb88ff62310cf885c5b09f44ae0fdd" + integrity sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A== -"@webpack-cli/serve@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.1.tgz#34bdc31727a1889198855913db2f270ace6d7bf8" - integrity sha512-0G7tNyS+yW8TdgHwZKlDWYXFA6OJQnoLCQvYKkQP0Q2X205PSQ6RNUj0M+1OB/9gRQaUZ/ccYfaxd0nhaWKfjw== +"@webpack-cli/serve@^2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.5.tgz#325db42395cd49fe6c14057f9a900e427df8810e" + integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ== "@xmpp/base64@^0.13.1": version "0.13.1" @@ -958,10 +1002,10 @@ accepts@~1.3.8: mime-types "~2.1.34" negotiator "0.6.3" -acorn-import-assertions@^1.7.6: - version "1.8.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" - integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== +acorn-import-assertions@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" + integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== acorn-jsx@^5.3.2: version "5.3.2" @@ -978,10 +1022,10 @@ acorn@^7.1.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.0.4, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0: - version "8.8.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" - integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== +acorn@^8.0.4, acorn@^8.7.1, acorn@^8.8.2, acorn@^8.9.0: + version "8.9.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.9.0.tgz#78a16e3b2bcc198c10822786fa6679e245db5b59" + integrity sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ== ajv-formats@^2.1.1: version "2.1.1" @@ -995,7 +1039,7 @@ ajv-keywords@^3.5.2: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv-keywords@^5.0.0: +ajv-keywords@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== @@ -1012,7 +1056,7 @@ ajv@^6.10.0, ajv@^6.12.4, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.0, ajv@^8.6.3, ajv@^8.8.0: +ajv@^8.0.0, ajv@^8.6.3, ajv@^8.9.0: version "8.12.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== @@ -1064,12 +1108,20 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" + array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== -array-includes@^3.1.5, array-includes@^3.1.6: +array-includes@^3.1.6: version "3.1.6" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== @@ -1304,15 +1356,15 @@ browser-stdout@1.3.1: resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== -browserslist@^4.14.5, browserslist@^4.21.3: - version "4.21.5" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" - integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== +browserslist@^4.14.5, browserslist@^4.21.9: + version "4.21.9" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.9.tgz#e11bdd3c313d7e2a9e87e8b4b0c7872b13897635" + integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg== dependencies: - caniuse-lite "^1.0.30001449" - electron-to-chromium "^1.4.284" - node-releases "^2.0.8" - update-browserslist-db "^1.0.10" + caniuse-lite "^1.0.30001503" + electron-to-chromium "^1.4.431" + node-releases "^2.0.12" + update-browserslist-db "^1.0.11" buffer-from@^1.0.0: version "1.1.2" @@ -1342,9 +1394,9 @@ cacheable-lookup@^5.0.3: integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== cacheable-request@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27" - integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== + version "7.0.4" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817" + integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== dependencies: clone-response "^1.0.2" get-stream "^5.1.0" @@ -1377,10 +1429,10 @@ camelcase@^6.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001449: - version "1.0.30001458" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001458.tgz#871e35866b4654a7d25eccca86864f411825540c" - integrity sha512-lQ1VlUUq5q9ro9X+5gOEyH7i3vm+AYVT1WDCVB69XOZ17KZRhnZ9J0Sqz7wTHQaLBJccNCHq8/Ww5LlOIZbB0w== +caniuse-lite@^1.0.30001503: + version "1.0.30001512" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001512.tgz#7450843fb581c39f290305a83523c7a9ef0d4cb4" + integrity sha512-2S9nK0G/mE+jasCUsMPlARhRCts1ebcp2Ji8Y8PWi4NDE1iRdLCnEPHkEfeBrGC45L4isBx5ur3IQ6yTE2mRZw== caseless@~0.12.0: version "0.12.0" @@ -1425,9 +1477,9 @@ character-parser@^2.2.0: is-regex "^1.0.3" chardet@^1.2.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-1.5.1.tgz#2a15770a46ce15e25a99f2741c949f43f9925dd5" - integrity sha512-0XMOtA52igKDOIfvJZJ6v0+J9yMF3IuYyEa5oFUxBXA01G6mwCNKpul3bgbFf7lmZuqwN/oyg/zQ1cGS7NyJkQ== + version "1.6.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-1.6.0.tgz#d04ea6e254916770c0e15ab678cbc7864c967fd1" + integrity sha512-+QOTw3otC4+FxdjK9RopGpNOglADbr4WPFi0SonkO99JbpkTPbMxmdm4NenhF5Zs+4gPXLI1+y2uazws5TMe8w== check-error@^1.0.2: version "1.0.2" @@ -1546,9 +1598,9 @@ color@^3.1.3: color-string "^1.6.0" colorette@^2.0.14: - version "2.0.19" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" - integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== colorspace@1.1.x: version "1.1.4" @@ -1558,6 +1610,11 @@ colorspace@1.1.x: color "^3.1.3" text-hex "1.0.x" +commander@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== + commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -1573,11 +1630,6 @@ commander@^7.2.0: resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== -commander@^9.4.1: - version "9.5.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" - integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== - commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -1635,10 +1687,10 @@ copy-webpack-plugin@^10.2.4: schema-utils "^4.0.0" serialize-javascript "^6.0.0" -core-js@^3.26.0: - version "3.29.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.29.0.tgz#0273e142b67761058bcde5615c503c7406b572d6" - integrity sha512-VG23vuEisJNkGl6XQmFJd3rEG/so/CNatqeE+7uZAwTSwFeB/qaO0be8xZYUNWprJ/GIwL8aMt9cj1kvbpTZhg== +core-js@^3.30.2: + version "3.31.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.31.0.tgz#4471dd33e366c79d8c0977ed2d940821719db344" + integrity sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ== cors@^2.8.5: version "2.8.5" @@ -1681,14 +1733,14 @@ cross-spawn@^7.0.2, cross-spawn@^7.0.3: which "^2.0.1" css-loader@^6.6.0: - version "6.7.3" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.7.3.tgz#1e8799f3ccc5874fdd55461af51137fcc5befbcd" - integrity sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ== + version "6.8.1" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.8.1.tgz#0f8f52699f60f5e679eab4ec0fcd68b8e8a50a88" + integrity sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g== dependencies: icss-utils "^5.1.0" - postcss "^8.4.19" + postcss "^8.4.21" postcss-modules-extract-imports "^3.0.0" - postcss-modules-local-by-default "^4.0.0" + postcss-modules-local-by-default "^4.0.3" postcss-modules-scope "^3.0.0" postcss-modules-values "^4.0.0" postcss-value-parser "^4.2.0" @@ -1754,7 +1806,7 @@ defer-to-connect@^2.0.0: resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== -define-properties@^1.1.3, define-properties@^1.1.4: +define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== @@ -1783,9 +1835,9 @@ diff@5.0.0: integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== dijkstrajs@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/dijkstrajs/-/dijkstrajs-1.0.2.tgz#2e48c0d3b825462afe75ab4ad5e829c8ece36257" - integrity sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg== + version "1.0.3" + resolved "https://registry.yarnpkg.com/dijkstrajs/-/dijkstrajs-1.0.3.tgz#4c8dbdea1f0f6478bff94d9c49c784d623e4fc23" + integrity sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA== dir-glob@^3.0.1: version "3.0.1" @@ -1813,13 +1865,13 @@ doctypes@^1.1.0: resolved "https://registry.yarnpkg.com/doctypes/-/doctypes-1.1.0.tgz#ea80b106a87538774e8a3a4a5afe293de489e0a9" integrity sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ== -doipjs@^0.18.3: - version "0.18.3" - resolved "https://registry.yarnpkg.com/doipjs/-/doipjs-0.18.3.tgz#26f5b0dbf98db7060516a9bac4b698d42e11166d" - integrity sha512-C/1FoUm/dw8/T0RYawuyP5WQJbwRI8CGKrFP7/UCzRT68Zm/NvAyAVqqrHfNs7D3n1nZI0qRYCkYGvrX5eyxoQ== +doipjs@^0.19.0: + version "0.19.0" + resolved "https://registry.yarnpkg.com/doipjs/-/doipjs-0.19.0.tgz#6cbd93305dcca5e261b016acc29868ebbae680ab" + integrity sha512-fn+/Rvk8o0hReLAvZl9ohmaRr+Coxi7w1cve6YiBlKGxx8cteAfmnVQRZIbxzIvD4yShbR9uIjFjELM1iPsZrA== dependencies: - "@openpgp/hkp-client" "^0.0.2" - "@openpgp/wkd-client" "^0.0.3" + "@openpgp/hkp-client" "^0.0.3" + "@openpgp/wkd-client" "^0.0.4" "@xmpp/client" "^0.13.1" "@xmpp/debug" "^0.13.0" axios "^0.25.0" @@ -1831,16 +1883,18 @@ doipjs@^0.18.3: express-validator "^6.10.0" hash-wasm "^4.9.0" irc-upd "^0.11.0" + jose "^4.14.4" merge-options "^3.0.3" openpgp "^5.5.0" + rfc4648 "^1.5.2" rome "^11.0.0" valid-url "^1.0.9" - validator "^13.5.2" + validator "^13.9.0" dotenv@^16.0.3: - version "16.0.3" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" - integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== + version "16.3.1" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.1.tgz#369034de7d7e5b120972693352a3bf112172cc3e" + integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ== dotenv@^8.2.0: version "8.6.0" @@ -1857,10 +1911,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.4.284: - version "1.4.315" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.315.tgz#b60a6676b3a1db332cfc8919118344aa06b9ac99" - integrity sha512-ndBQYz3Eyy3rASjjQ9poMJGoAlsZ/aZnq6GBsGL4w/4sWIAwiUHVSsMuADbxa8WJw7pZ0oxLpGbtoDt4vRTdCg== +electron-to-chromium@^1.4.431: + version "1.4.449" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.449.tgz#79ffe4514c81c35d4eb13030a63ff3383a8cc655" + integrity sha512-TxLRpRUj/107ATefeP8VIUWNOv90xJxZZbCW/eIbSZQiuiFANCx2b7u+GbVc9X4gU+xnbvypNMYVM/WArE1DNQ== emoji-regex@^7.0.1: version "7.0.3" @@ -1894,18 +1948,18 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enhanced-resolve@^5.10.0: - version "5.12.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634" - integrity sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ== +enhanced-resolve@^5.15.0: + version "5.15.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" + integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" entities@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174" - integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== entities@~3.0.1: version "3.0.1" @@ -1913,9 +1967,9 @@ entities@~3.0.1: integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== envinfo@^7.7.3: - version "7.8.1" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" - integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== + version "7.10.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.10.0.tgz#55146e3909cc5fe63c22da63fb15b05aeac35b13" + integrity sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw== error-ex@^1.3.1: version "1.3.2" @@ -1924,18 +1978,18 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.19.0, es-abstract@^1.20.4: - version "1.21.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.1.tgz#e6105a099967c08377830a0c9cb589d570dd86c6" - integrity sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg== +es-abstract@^1.19.0, es-abstract@^1.20.4, es-abstract@^1.21.2: + version "1.21.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.2.tgz#a56b9695322c8a185dc25975aa3b8ec31d0e7eff" + integrity sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg== dependencies: + array-buffer-byte-length "^1.0.0" available-typed-arrays "^1.0.5" call-bind "^1.0.2" es-set-tostringtag "^2.0.1" es-to-primitive "^1.2.1" - function-bind "^1.1.1" function.prototype.name "^1.1.5" - get-intrinsic "^1.1.3" + get-intrinsic "^1.2.0" get-symbol-description "^1.0.0" globalthis "^1.0.3" gopd "^1.0.1" @@ -1943,8 +1997,8 @@ es-abstract@^1.19.0, es-abstract@^1.20.4: has-property-descriptors "^1.0.0" has-proto "^1.0.1" has-symbols "^1.0.3" - internal-slot "^1.0.4" - is-array-buffer "^3.0.1" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" is-callable "^1.2.7" is-negative-zero "^2.0.2" is-regex "^1.1.4" @@ -1952,11 +2006,12 @@ es-abstract@^1.19.0, es-abstract@^1.20.4: is-string "^1.0.7" is-typed-array "^1.1.10" is-weakref "^1.0.2" - object-inspect "^1.12.2" + object-inspect "^1.12.3" object-keys "^1.1.1" object.assign "^4.1.4" regexp.prototype.flags "^1.4.3" safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.7" string.prototype.trimend "^1.0.6" string.prototype.trimstart "^1.0.6" typed-array-length "^1.0.4" @@ -1968,10 +2023,10 @@ es-array-method-boxes-properly@^1.0.0: resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== -es-module-lexer@^0.9.0: - version "0.9.3" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" - integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== +es-module-lexer@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.3.0.tgz#6be9c9e0b4543a60cd166ff6f8b4e9dae0b0c16f" + integrity sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA== es-set-tostringtag@^2.0.1: version "2.0.1" @@ -2023,10 +2078,10 @@ eslint-config-standard-jsx@^11.0.0: resolved "https://registry.yarnpkg.com/eslint-config-standard-jsx/-/eslint-config-standard-jsx-11.0.0.tgz#70852d395731a96704a592be5b0bfaccfeded239" integrity sha512-+1EV/R0JxEK1L0NGolAr8Iktm3Rgotx3BKwgaX+eAuSX8D952LULKtjgZD3F+e6SvibONnhLwoTi9DPxN5LvvQ== -eslint-config-standard@17.0.0: - version "17.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz#fd5b6cf1dcf6ba8d29f200c461de2e19069888cf" - integrity sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg== +eslint-config-standard@17.1.0: + version "17.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz#40ffb8595d47a6b242e07cbfd49dc211ed128975" + integrity sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q== eslint-import-resolver-node@^0.3.7: version "0.3.7" @@ -2038,9 +2093,9 @@ eslint-import-resolver-node@^0.3.7: resolve "^1.22.1" eslint-module-utils@^2.7.4: - version "2.7.4" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" - integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== + version "2.8.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" + integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== dependencies: debug "^3.2.7" @@ -2052,7 +2107,7 @@ eslint-plugin-es@^4.1.0: eslint-utils "^2.0.0" regexpp "^3.0.0" -eslint-plugin-import@^2.26.0: +eslint-plugin-import@^2.27.5: version "2.27.5" resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65" integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow== @@ -2073,10 +2128,10 @@ eslint-plugin-import@^2.26.0: semver "^6.3.0" tsconfig-paths "^3.14.1" -eslint-plugin-n@^15.1.0: - version "15.6.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-15.6.1.tgz#f7e77f24abb92a550115cf11e29695da122c398c" - integrity sha512-R9xw9OtCRxxaxaszTQmQAlPgM+RdGjaL1akWuY/Fv9fRAi8Wj4CUKc6iYVG8QNRjRuo8/BqVYIpfqberJUEacA== +eslint-plugin-n@^15.7.0: + version "15.7.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz#e29221d8f5174f84d18f2eb94765f2eeea033b90" + integrity sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q== dependencies: builtins "^5.0.1" eslint-plugin-es "^4.1.0" @@ -2087,12 +2142,12 @@ eslint-plugin-n@^15.1.0: resolve "^1.22.1" semver "^7.3.8" -eslint-plugin-promise@^6.0.0: +eslint-plugin-promise@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz#269a3e2772f62875661220631bd4dafcb4083816" integrity sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig== -eslint-plugin-react@^7.28.0: +eslint-plugin-react@^7.32.2: version "7.32.2" resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz#e71f21c7c265ebce01bcbc9d0955170c55571f10" integrity sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg== @@ -2121,10 +2176,10 @@ eslint-scope@5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-scope@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" - integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== +eslint-scope@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" + integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" @@ -2153,19 +2208,21 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint-visitor-keys@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" - integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" + integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== -eslint@^8.13.0: - version "8.35.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.35.0.tgz#fffad7c7e326bae606f0e8f436a6158566d42323" - integrity sha512-BxAf1fVL7w+JLRQhWl2pzGeSiGqbWumV4WNvc9Rhp6tiCtm4oHnyPBSEtMGZwrQgudFQ+otqzWoPB7x+hxoWsw== +eslint@^8.41.0: + version "8.44.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.44.0.tgz#51246e3889b259bbcd1d7d736a0c10add4f0e500" + integrity sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A== dependencies: - "@eslint/eslintrc" "^2.0.0" - "@eslint/js" "8.35.0" - "@humanwhocodes/config-array" "^0.11.8" + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.4.0" + "@eslint/eslintrc" "^2.1.0" + "@eslint/js" "8.44.0" + "@humanwhocodes/config-array" "^0.11.10" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" ajv "^6.10.0" @@ -2174,10 +2231,9 @@ eslint@^8.13.0: debug "^4.3.2" doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.1.1" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.3.0" - espree "^9.4.0" + eslint-scope "^7.2.0" + eslint-visitor-keys "^3.4.1" + espree "^9.6.0" esquery "^1.4.2" esutils "^2.0.2" fast-deep-equal "^3.1.3" @@ -2185,33 +2241,31 @@ eslint@^8.13.0: find-up "^5.0.0" glob-parent "^6.0.2" globals "^13.19.0" - grapheme-splitter "^1.0.4" + graphemer "^1.4.0" ignore "^5.2.0" import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" is-path-inside "^3.0.3" - js-sdsl "^4.1.4" js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" lodash.merge "^4.6.2" minimatch "^3.1.2" natural-compare "^1.4.0" - optionator "^0.9.1" - regexpp "^3.2.0" + optionator "^0.9.3" strip-ansi "^6.0.1" strip-json-comments "^3.1.0" text-table "^0.2.0" -espree@^9.4.0: - version "9.4.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" - integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== +espree@^9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.0.tgz#80869754b1c6560f32e3b6929194a3fe07c5b82f" + integrity sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A== dependencies: - acorn "^8.8.0" + acorn "^8.9.0" acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.3.0" + eslint-visitor-keys "^3.4.1" esquery@^1.4.2: version "1.5.0" @@ -2303,9 +2357,9 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-glob@^3.0.3, fast-glob@^3.2.7: - version "3.2.12" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" - integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + version "3.3.0" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.0.tgz#7c40cb491e1e2ed5664749e87bfb516dbe8727c0" + integrity sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -2488,7 +2542,7 @@ function.prototype.name@^1.1.5: es-abstract "^1.19.0" functions-have-names "^1.2.2" -functions-have-names@^1.2.2: +functions-have-names@^1.2.2, functions-have-names@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== @@ -2509,12 +2563,13 @@ get-func-name@^2.0.0: integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" - integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== + version "1.2.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" + integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== dependencies: function-bind "^1.1.1" has "^1.0.3" + has-proto "^1.0.1" has-symbols "^1.0.3" get-stdin@^8.0.0: @@ -2655,14 +2710,14 @@ got@^11.8.2: responselike "^2.0.0" graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== gzip-size@^6.0.0: version "6.0.0" @@ -2835,7 +2890,7 @@ inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -internal-slot@^1.0.3, internal-slot@^1.0.4: +internal-slot@^1.0.3, internal-slot@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== @@ -2869,7 +2924,7 @@ irc-upd@^0.11.0: chardet "^1.2.1" iconv-lite "^0.6.2" -is-array-buffer@^3.0.1: +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== @@ -2916,9 +2971,9 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-core-module@^2.11.0, is-core-module@^2.9.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" - integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== + version "2.12.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" + integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== dependencies: has "^1.0.3" @@ -3055,6 +3110,11 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -3074,10 +3134,10 @@ jest-worker@^27.4.5: merge-stream "^2.0.0" supports-color "^8.0.0" -js-sdsl@^4.1.4: - version "4.3.0" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.3.0.tgz#aeefe32a451f7af88425b11fdb5f58c90ae1d711" - integrity sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ== +jose@^4.14.4: + version "4.14.4" + resolved "https://registry.yarnpkg.com/jose/-/jose-4.14.4.tgz#59e09204e2670c3164ee24cbfe7115c6f8bff9ca" + integrity sha512-j8GhLiKmUAh+dsFXlX1aJCbt5KMibuKb+d7j1JaOJG6s2UjX1PQlW+OKB/sD4a/5ZYF4RcmYmLSndOoU3Lt/3g== js-stringify@^1.0.2: version "1.0.2" @@ -3166,12 +3226,14 @@ jstransformer@1.0.0: promise "^7.0.1" "jsx-ast-utils@^2.4.1 || ^3.0.0": - version "3.3.3" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea" - integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw== + version "3.3.4" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.4.tgz#b896535fed5b867650acce5a9bd4135ffc7b3bf9" + integrity sha512-fX2TVdCViod6HwKEtSWGHs57oFhVfCMwieb9PuRDgjDPh5XeqJiHFFFJCHxU5cnTc3Bu/GRL+kPiFmw8XWOfKw== dependencies: - array-includes "^3.1.5" - object.assign "^4.1.3" + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + object.assign "^4.1.4" + object.values "^1.1.6" keyv@^4.0.0, keyv@^4.5.0: version "4.5.2" @@ -3433,9 +3495,9 @@ mimic-response@^3.1.0: integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== mini-css-extract-plugin@^2.5.3: - version "2.7.2" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.2.tgz#e049d3ea7d3e4e773aad585c6cb329ce0c7b72d7" - integrity sha512-EdlUizq13o0Pd+uCp+WO/JpkLvHRVGt97RqfeGhXqAcorYo1ypJSpkV+WDT0vY/kmh/p7wRdJNJtuyK540PXDw== + version "2.7.6" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz#282a3d38863fddcd2e0c220aaed5b90bc156564d" + integrity sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw== dependencies: schema-utils "^4.0.0" @@ -3515,10 +3577,10 @@ nanoid@3.3.3: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== -nanoid@^3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" - integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== +nanoid@^3.3.6: + version "3.3.6" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" + integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== natural-compare@^1.4.0: version "1.4.0" @@ -3544,21 +3606,21 @@ node-environment-flags@^1.0.5: semver "^5.7.0" node-fetch@^2.6.1, node-fetch@^2.6.6: - version "2.6.9" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6" - integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg== + version "2.6.12" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.12.tgz#02eb8e22074018e3d5a83016649d04df0e348fba" + integrity sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g== dependencies: whatwg-url "^5.0.0" -node-releases@^2.0.8: - version "2.0.10" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" - integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== +node-releases@^2.0.12: + version "2.0.12" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039" + integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ== nodemon@^2.0.20: - version "2.0.20" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.20.tgz#e3537de768a492e8d74da5c5813cb0c7486fc701" - integrity sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw== + version "2.0.22" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.22.tgz#182c45c3a78da486f673d6c1702e00728daf5258" + integrity sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ== dependencies: chokidar "^3.5.2" debug "^3.2.7" @@ -3593,7 +3655,7 @@ object-assign@^4, object-assign@^4.1.1: resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.12.2, object-inspect@^1.9.0: +object-inspect@^1.12.3, object-inspect@^1.9.0: version "1.12.3" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== @@ -3603,7 +3665,7 @@ object-keys@^1.1.1: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@^4.1.3, object.assign@^4.1.4: +object.assign@^4.1.4: version "4.1.4" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== @@ -3632,14 +3694,15 @@ object.fromentries@^2.0.6: es-abstract "^1.20.4" object.getownpropertydescriptors@^2.0.3: - version "2.1.5" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz#db5a9002489b64eef903df81d6623c07e5b4b4d3" - integrity sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw== + version "2.1.6" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.6.tgz#5e5c384dd209fa4efffead39e3a0512770ccc312" + integrity sha512-lq+61g26E/BgHv0ZTFgRvi7NMEPuAxLkFU7rukXjc/AlwH4Am5xXVnIXy3un1bg/JPbXHrixRkK1itUzzPiIjQ== dependencies: array.prototype.reduce "^1.0.5" call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.21.2" + safe-array-concat "^1.0.0" object.hasown@^1.1.2: version "1.1.2" @@ -3685,23 +3748,23 @@ opener@^1.5.2: integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== openpgp@^5.5.0: - version "5.7.0" - resolved "https://registry.yarnpkg.com/openpgp/-/openpgp-5.7.0.tgz#fe0a346f26171ffb726636ae7ccb24a504281dbc" - integrity sha512-wchYJQfFbSaocUvUIYqNrWD+lRSmFSG1d3Ak2CHeXFocDSEsf7Uc1zUzHjSdlZPTvGeeXPQ+MJrwVtalL4QCBg== + version "5.9.0" + resolved "https://registry.yarnpkg.com/openpgp/-/openpgp-5.9.0.tgz#f7ebe7b1e228aebc494835509ec9239853faed61" + integrity sha512-wEI6TAinCAq8ZLZA4oZ3ZtJ2BhhHj+CiPCd8TzE7zCicr0V8tvG5UF76OtddLLOJcK63w3Aj3KiRd+VLMScirQ== dependencies: asn1.js "^5.0.0" -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== +optionator@^0.9.3: + version "0.9.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" - word-wrap "^1.2.3" p-cancelable@^2.0.0: version "2.1.1" @@ -3829,9 +3892,9 @@ pify@^4.0.1: integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== pirates@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" - integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== + version "4.0.6" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== pkg-conf@^3.1.0: version "3.1.0" @@ -3865,10 +3928,10 @@ postcss-modules-extract-imports@^3.0.0: resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== -postcss-modules-local-by-default@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" - integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== +postcss-modules-local-by-default@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz#b08eb4f083050708998ba2c6061b50c2870ca524" + integrity sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA== dependencies: icss-utils "^5.0.0" postcss-selector-parser "^6.0.2" @@ -3889,9 +3952,9 @@ postcss-modules-values@^4.0.0: icss-utils "^5.0.0" postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: - version "6.0.11" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" - integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== + version "6.0.13" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b" + integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" @@ -3901,12 +3964,12 @@ postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^8.4.19: - version "8.4.21" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4" - integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== +postcss@^8.4.21: + version "8.4.24" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.24.tgz#f714dba9b2284be3cc07dbd2fc57ee4dc972d2df" + integrity sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg== dependencies: - nanoid "^3.3.4" + nanoid "^3.3.6" picocolors "^1.0.0" source-map-js "^1.0.2" @@ -4073,9 +4136,9 @@ pvutils@^1.1.3: integrity sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ== qrcode@^1.4.4: - version "1.5.1" - resolved "https://registry.yarnpkg.com/qrcode/-/qrcode-1.5.1.tgz#0103f97317409f7bc91772ef30793a54cd59f0cb" - integrity sha512-nS8NJ1Z3md8uTjKtP+SGGhfqmTCs5flU/xR623oI0JX+Wepz9R8UrRVCTBTJm3qGw3rH6jJ6MUHjkDx15cxSSg== + version "1.5.3" + resolved "https://registry.yarnpkg.com/qrcode/-/qrcode-1.5.3.tgz#03afa80912c0dccf12bc93f615a535aad1066170" + integrity sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg== dependencies: dijkstrajs "^1.0.1" encode-utf8 "^1.0.3" @@ -4136,7 +4199,7 @@ react-is@^16.13.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -readable-stream@^3.4.0: +readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -4145,15 +4208,6 @@ readable-stream@^3.4.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@^3.6.0: - version "3.6.1" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.1.tgz#f9f9b5f536920253b3d26e7660e7da4ccff9bb62" - integrity sha512-+rQmrWMYGA90yenhTYsLWAsLsqVC8osOw6PKE1HDYiO0gdPeKe/xDHNzIAIn4C91YQ6oenEhfYqqc1883qHbjQ== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -4174,15 +4228,15 @@ regenerator-runtime@^0.13.11: integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== regexp.prototype.flags@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" - integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + version "1.5.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" + integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - functions-have-names "^1.2.2" + define-properties "^1.2.0" + functions-have-names "^1.2.3" -regexpp@^3.0.0, regexpp@^3.2.0: +regexpp@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== @@ -4225,11 +4279,11 @@ resolve-from@^5.0.0: integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== resolve@^1.15.1, resolve@^1.20.0, resolve@^1.22.1: - version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + version "1.22.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" + integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== dependencies: - is-core-module "^2.9.0" + is-core-module "^2.11.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -4254,6 +4308,11 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== +rfc4648@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/rfc4648/-/rfc4648-1.5.2.tgz#cf5dac417dd83e7f4debf52e3797a723c1373383" + integrity sha512-tLOizhR6YGovrEBLatX1sdcuhoSCXddw3mqNVAcKxGJ+J0hFeJ+SjeWCv5UPA/WU3YzWPPuCVYgXBKZUPGpKtg== + rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" @@ -4281,6 +4340,18 @@ rome@^11.0.0: "@rometools/cli-win32-arm64" "11.0.0" "@rometools/cli-win32-x64" "11.0.0" +rome@^12.1: + version "12.1.3" + resolved "https://registry.yarnpkg.com/rome/-/rome-12.1.3.tgz#4d4d62cad16216843680bd3ca11a4c248134902a" + integrity sha512-e+ff72hxDpe/t5/Us7YRBVw3PBET7SeczTQNn6tvrWdrCaAw3qOukQQ+tDCkyFtS4yGsnhjrJbm43ctNbz27Yg== + optionalDependencies: + "@rometools/cli-darwin-arm64" "12.1.3" + "@rometools/cli-darwin-x64" "12.1.3" + "@rometools/cli-linux-arm64" "12.1.3" + "@rometools/cli-linux-x64" "12.1.3" + "@rometools/cli-win32-arm64" "12.1.3" + "@rometools/cli-win32-x64" "12.1.3" + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -4288,6 +4359,16 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +safe-array-concat@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.0.tgz#2064223cba3c08d2ee05148eedbc563cd6d84060" + integrity sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + has-symbols "^1.0.3" + isarray "^2.0.5" + safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" @@ -4337,24 +4418,24 @@ saslmechanisms@^0.1.1: resolved "https://registry.yarnpkg.com/saslmechanisms/-/saslmechanisms-0.1.1.tgz#478be1429500fcfaa780be88b3343ced7d2a9182" integrity sha512-pVlvK5ysevz8MzybRnDIa2YMxn0OJ7b9lDiWhMoaKPoJ7YkAg/7YtNjUgaYzElkwHxsw8dBMhaEn7UP6zxEwPg== -schema-utils@^3.1.0, schema-utils@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" - integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== +schema-utils@^3.1.1, schema-utils@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" + integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== dependencies: "@types/json-schema" "^7.0.8" ajv "^6.12.5" ajv-keywords "^3.5.2" schema-utils@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7" - integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg== + version "4.2.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.2.0.tgz#70d7c93e153a273a805801882ebd3bff20d89c8b" + integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw== dependencies: "@types/json-schema" "^7.0.9" - ajv "^8.8.0" + ajv "^8.9.0" ajv-formats "^2.1.1" - ajv-keywords "^5.0.0" + ajv-keywords "^5.1.0" semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: version "5.7.1" @@ -4367,9 +4448,9 @@ semver@^6.3.0: integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== semver@^7.0.0, semver@^7.3.8: - version "7.3.8" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + version "7.5.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" + integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== dependencies: lru-cache "^6.0.0" @@ -4404,7 +4485,7 @@ serialize-javascript@6.0.0: dependencies: randombytes "^2.1.0" -serialize-javascript@^6.0.0: +serialize-javascript@^6.0.0, serialize-javascript@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== @@ -4529,9 +4610,9 @@ stack-trace@0.0.x: integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== standard-engine@^15.0.0: - version "15.0.0" - resolved "https://registry.yarnpkg.com/standard-engine/-/standard-engine-15.0.0.tgz#e37ca2e1a589ef85431043a3e87cb9ce95a4ca4e" - integrity sha512-4xwUhJNo1g/L2cleysUqUv7/btn7GEbYJvmgKrQ2vd/8pkTmN8cpqAZg+BT8Z1hNeEH787iWUdOpL8fmApLtxA== + version "15.1.0" + resolved "https://registry.yarnpkg.com/standard-engine/-/standard-engine-15.1.0.tgz#717409a002edd13cd57f6554fdd3464d9a22a774" + integrity sha512-VHysfoyxFu/ukT+9v49d4BRXIokFRZuH3z1VRxzFArZdjSCFpro6rEIU3ji7e4AoAtuSfKBkiOmsrDqKW5ZSRw== dependencies: get-stdin "^8.0.0" minimist "^1.2.6" @@ -4539,18 +4620,19 @@ standard-engine@^15.0.0: xdg-basedir "^4.0.0" standard@^17.0.0: - version "17.0.0" - resolved "https://registry.yarnpkg.com/standard/-/standard-17.0.0.tgz#85718ecd04dc4133908434660788708cca855aa1" - integrity sha512-GlCM9nzbLUkr+TYR5I2WQoIah4wHA2lMauqbyPLV/oI5gJxqhHzhjl9EG2N0lr/nRqI3KCbCvm/W3smxvLaChA== + version "17.1.0" + resolved "https://registry.yarnpkg.com/standard/-/standard-17.1.0.tgz#829eeeb3139ad50714294d3531592d60ad1286af" + integrity sha512-jaDqlNSzLtWYW4lvQmU0EnxWMUGQiwHasZl5ZEIwx3S/ijZDjZOzs1y1QqKwKs5vqnFpGtizo4NOYX2s0Voq/g== dependencies: - eslint "^8.13.0" - eslint-config-standard "17.0.0" + eslint "^8.41.0" + eslint-config-standard "17.1.0" eslint-config-standard-jsx "^11.0.0" - eslint-plugin-import "^2.26.0" - eslint-plugin-n "^15.1.0" - eslint-plugin-promise "^6.0.0" - eslint-plugin-react "^7.28.0" + eslint-plugin-import "^2.27.5" + eslint-plugin-n "^15.7.0" + eslint-plugin-promise "^6.1.1" + eslint-plugin-react "^7.32.2" standard-engine "^15.0.0" + version-guard "^1.1.1" statuses@2.0.1: version "2.0.1" @@ -4597,6 +4679,15 @@ string.prototype.matchall@^4.0.8: regexp.prototype.flags "^1.4.3" side-channel "^1.0.4" +string.prototype.trim@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" + integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + string.prototype.trimend@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" @@ -4647,9 +4738,9 @@ strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1. integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== style-loader@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.1.tgz#057dfa6b3d4d7c7064462830f9113ed417d38575" - integrity sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ== + version "3.3.3" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.3.tgz#bba8daac19930169c0c9c96706749a597ae3acff" + integrity sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw== supports-color@8.1.1, supports-color@^8.0.0: version "8.1.1" @@ -4682,24 +4773,24 @@ tapable@^2.1.1, tapable@^2.2.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== -terser-webpack-plugin@^5.1.3: - version "5.3.6" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz#5590aec31aa3c6f771ce1b1acca60639eab3195c" - integrity sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ== +terser-webpack-plugin@^5.3.7: + version "5.3.9" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1" + integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== dependencies: - "@jridgewell/trace-mapping" "^0.3.14" + "@jridgewell/trace-mapping" "^0.3.17" jest-worker "^27.4.5" schema-utils "^3.1.1" - serialize-javascript "^6.0.0" - terser "^5.14.1" + serialize-javascript "^6.0.1" + terser "^5.16.8" -terser@^5.14.1: - version "5.16.5" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.5.tgz#1c285ca0655f467f92af1bbab46ab72d1cb08e5a" - integrity sha512-qcwfg4+RZa3YvlFh0qjifnzBHjKGNbtDo9yivMqMFDy9Q6FSaQWSB/j1xKhsoUFJIqDOM3TsN6D5xbrMrFcHbg== +terser@^5.16.8: + version "5.18.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.18.2.tgz#ff3072a0faf21ffd38f99acc9a0ddf7b5f07b948" + integrity sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w== dependencies: - "@jridgewell/source-map" "^0.3.2" - acorn "^8.5.0" + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" commander "^2.20.0" source-map-support "~0.5.20" @@ -4767,10 +4858,10 @@ tsconfig-paths@^3.14.1: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^2.0.0, tslib@^2.4.0, tslib@^2.4.1: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" - integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== +tslib@^2.0.0, tslib@^2.4.0, tslib@^2.5.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3" + integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA== type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" @@ -4841,10 +4932,10 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -update-browserslist-db@^1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" - integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== +update-browserslist-db@^1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" + integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== dependencies: escalade "^3.1.1" picocolors "^1.0.0" @@ -4878,7 +4969,7 @@ valid-url@^1.0.9: resolved "https://registry.yarnpkg.com/valid-url/-/valid-url-1.0.9.tgz#1c14479b40f1397a75782f115e4086447433a200" integrity sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA== -validator@^13.5.2, validator@^13.9.0: +validator@^13.9.0: version "13.9.0" resolved "https://registry.yarnpkg.com/validator/-/validator-13.9.0.tgz#33e7b85b604f3bbce9bb1a05d5c3e22e1c2ff855" integrity sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA== @@ -4888,6 +4979,11 @@ vary@^1, vary@~1.1.2: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== +version-guard@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/version-guard/-/version-guard-1.1.1.tgz#7a6e87a1babff1b43d6a7b0fd239731e278262fa" + integrity sha512-MGQLX89UxmYHgDvcXyjBI0cbmoW+t/dANDppNPrno64rYr8nH4SHSuElQuSYdXGEs0mUzdQe1BY+FhVPNsAmJQ== + void-elements@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" @@ -4901,12 +4997,12 @@ watchpack@^2.4.0: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" -webcrypto-core@^1.7.4: - version "1.7.6" - resolved "https://registry.yarnpkg.com/webcrypto-core/-/webcrypto-core-1.7.6.tgz#e32c4a12a13de4251f8f9ef336a6cba7cdec9b55" - integrity sha512-TBPiewB4Buw+HI3EQW+Bexm19/W4cP/qZG/02QJCXN+iN+T5sl074vZ3rJcle/ZtDBQSgjkbsQO/1eFcxnSBUA== +webcrypto-core@^1.7.7: + version "1.7.7" + resolved "https://registry.yarnpkg.com/webcrypto-core/-/webcrypto-core-1.7.7.tgz#06f24b3498463e570fed64d7cab149e5437b162c" + integrity sha512-7FjigXNsBfopEj+5DV2nhNpfic2vumtjjgPmeDKk45z+MJwXKKfhPB7118Pfzrmh4jqOMST6Ch37iPAHoImg5g== dependencies: - "@peculiar/asn1-schema" "^2.1.6" + "@peculiar/asn1-schema" "^2.3.6" "@peculiar/json-schema" "^1.1.12" asn1js "^3.0.1" pvtsutils "^1.3.2" @@ -4918,9 +5014,9 @@ webidl-conversions@^3.0.0: integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== webpack-bundle-analyzer@^4.7.0: - version "4.8.0" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.8.0.tgz#951b8aaf491f665d2ae325d8b84da229157b1d04" - integrity sha512-ZzoSBePshOKhr+hd8u6oCkZVwpVaXgpw23ScGLFpR6SjYI7+7iIWYarjN6OEYOfRt8o7ZyZZQk0DuMizJ+LEIg== + version "4.9.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.0.tgz#fc093c4ab174fd3dcbd1c30b763f56d10141209d" + integrity sha512-+bXGmO1LyiNx0i9enBu3H8mv42sj/BJWhZNFwjz92tVnBa9J3JMGo2an2IXlEleoDOPn/Hofl5hr/xCpObUDtw== dependencies: "@discoveryjs/json-ext" "0.5.7" acorn "^8.0.4" @@ -4934,16 +5030,16 @@ webpack-bundle-analyzer@^4.7.0: ws "^7.3.1" webpack-cli@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.0.1.tgz#95fc0495ac4065e9423a722dec9175560b6f2d9a" - integrity sha512-S3KVAyfwUqr0Mo/ur3NzIp6jnerNpo7GUO6so51mxLi1spqsA17YcMXy0WOIJtBSnj748lthxC6XLbNKh/ZC+A== + version "5.1.4" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.1.4.tgz#c8e046ba7eaae4911d7e71e2b25b776fcc35759b" + integrity sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg== dependencies: "@discoveryjs/json-ext" "^0.5.0" - "@webpack-cli/configtest" "^2.0.1" - "@webpack-cli/info" "^2.0.1" - "@webpack-cli/serve" "^2.0.1" + "@webpack-cli/configtest" "^2.1.1" + "@webpack-cli/info" "^2.0.2" + "@webpack-cli/serve" "^2.0.5" colorette "^2.0.14" - commander "^9.4.1" + commander "^10.0.1" cross-spawn "^7.0.3" envinfo "^7.7.3" fastest-levenshtein "^1.0.12" @@ -4953,9 +5049,9 @@ webpack-cli@^5.0.0: webpack-merge "^5.7.3" webpack-merge@^5.7.3: - version "5.8.0" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" - integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== + version "5.9.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.9.0.tgz#dc160a1c4cf512ceca515cc231669e9ddb133826" + integrity sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg== dependencies: clone-deep "^4.0.1" wildcard "^2.0.0" @@ -4966,21 +5062,21 @@ webpack-sources@^3.2.3: integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== webpack@^5.75.0: - version "5.75.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.75.0.tgz#1e440468647b2505860e94c9ff3e44d5b582c152" - integrity sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ== + version "5.88.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.88.1.tgz#21eba01e81bd5edff1968aea726e2fbfd557d3f8" + integrity sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ== dependencies: "@types/eslint-scope" "^3.7.3" - "@types/estree" "^0.0.51" - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/wasm-edit" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" + "@types/estree" "^1.0.0" + "@webassemblyjs/ast" "^1.11.5" + "@webassemblyjs/wasm-edit" "^1.11.5" + "@webassemblyjs/wasm-parser" "^1.11.5" acorn "^8.7.1" - acorn-import-assertions "^1.7.6" + acorn-import-assertions "^1.9.0" browserslist "^4.14.5" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.10.0" - es-module-lexer "^0.9.0" + enhanced-resolve "^5.15.0" + es-module-lexer "^1.2.1" eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" @@ -4989,9 +5085,9 @@ webpack@^5.75.0: loader-runner "^4.2.0" mime-types "^2.1.27" neo-async "^2.6.2" - schema-utils "^3.1.0" + schema-utils "^3.2.0" tapable "^2.1.1" - terser-webpack-plugin "^5.1.3" + terser-webpack-plugin "^5.3.7" watchpack "^2.4.0" webpack-sources "^3.2.3" @@ -5015,9 +5111,9 @@ which-boxed-primitive@^1.0.2: is-symbol "^1.0.3" which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q== + version "2.0.1" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" + integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== which-typed-array@^1.1.9: version "1.1.9" @@ -5039,9 +5135,9 @@ which@^2.0.1: isexe "^2.0.0" wildcard@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" - integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== + version "2.0.1" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" + integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== winston-transport@^4.5.0: version "4.5.0" @@ -5053,9 +5149,9 @@ winston-transport@^4.5.0: triple-beam "^1.3.0" winston@^3.8.2: - version "3.8.2" - resolved "https://registry.yarnpkg.com/winston/-/winston-3.8.2.tgz#56e16b34022eb4cff2638196d9646d7430fdad50" - integrity sha512-MsE1gRx1m5jdTTO9Ld/vND4krP2To+lgDoMEHGGa4HIlAUyXJtfc7CxQcGXVyz2IBpw5hbFkj2b/AtUdQwyRew== + version "3.9.0" + resolved "https://registry.yarnpkg.com/winston/-/winston-3.9.0.tgz#2bbdeb8167a75fac6d9a0c6d002890cd908016c2" + integrity sha512-jW51iW/X95BCW6MMtZWr2jKQBP4hV5bIDq9QrIjfDk6Q9QuxvTKEAlpUNAzP+HYHFFCeENhph16s0zEunu4uuQ== dependencies: "@colors/colors" "1.5.0" "@dabh/diagnostics" "^2.0.2" @@ -5079,11 +5175,6 @@ with@^7.0.0: assert-never "^1.2.1" babel-walk "3.0.0-canary-5" -word-wrap@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - workerpool@6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" @@ -5127,9 +5218,9 @@ ws@^7.3.1: integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== ws@^8.4.0: - version "8.12.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.12.1.tgz#c51e583d79140b5e42e39be48c934131942d4a8f" - integrity sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew== + version "8.13.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== xdg-basedir@^4.0.0: version "4.0.0" From 375173ecdf683d79d4cb74f2cb7b0a887db19a1a Mon Sep 17 00:00:00 2001 From: Yarmo Mackenbach Date: Tue, 4 Jul 2023 12:44:29 +0200 Subject: [PATCH 2/9] feat: add lint script to project --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index e061397..c2deaa5 100644 --- a/package.json +++ b/package.json @@ -44,12 +44,13 @@ "scripts": { "start": "node --experimental-fetch ./", "dev": "LOG_LEVEL=debug yarn run watch & yarn run build:static:dev", - "test": "yarn run standard:check && yarn run rome:check && mocha", + "test": "yarn run lint && mocha", "watch": "./node_modules/.bin/nodemon --config nodemon.json ./", "build": "yarn run build:server & yarn run build:static", "build:server": "ncc build ./src/index.js -o dist", "build:static": "webpack --config webpack.config.js --env static=true --env mode=production", "build:static:dev": "webpack --config webpack.config.js --env static=true --env mode=development", + "lint": "yarn run standard:check && yarn run rome:check", "standard:check": "./node_modules/.bin/standard ./src", "standard:fix": "./node_modules/.bin/standard --fix ./src", "rome:check": "./node_modules/.bin/rome check ./src", From 3ff82ff46d5d472e5a7a809e7f62768ab18b6021 Mon Sep 17 00:00:00 2001 From: Yarmo Mackenbach Date: Tue, 4 Jul 2023 12:49:11 +0200 Subject: [PATCH 3/9] fix: fix linting issues --- src/server/keys.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/server/keys.js b/src/server/keys.js index 474efab..5b61aff 100644 --- a/src/server/keys.js +++ b/src/server/keys.js @@ -121,7 +121,7 @@ const fetchHKP = (id, keyserverDomain) => { fetchURL: null } - keyserverDomain = keyserverDomain || 'keys.openpgp.org' + const keyserverDomainNormalized = keyserverDomain || 'keys.openpgp.org' let query = '' if (id.includes('@')) { @@ -135,9 +135,9 @@ const fetchHKP = (id, keyserverDomain) => { query = `0x${sanitizedId}` } - output.fetchURL = `https://${keyserverDomain}/pks/lookup?op=get&options=mr&search=${query}` + output.fetchURL = `https://${keyserverDomainNormalized}/pks/lookup?op=get&options=mr&search=${query}` - const hash = createHash('md5').update(`${query}__${keyserverDomain}`).digest('hex') + const hash = createHash('md5').update(`${query}__${keyserverDomainNormalized}`).digest('hex') if (c && await c.get(hash)) { output.publicKey = await readKey({ @@ -145,7 +145,7 @@ const fetchHKP = (id, keyserverDomain) => { }) } else { try { - output.publicKey = await doipjs.keys.fetchHKP(query, keyserverDomain) + output.publicKey = await doipjs.keys.fetchHKP(query, keyserverDomainNormalized) } catch (error) { reject(new Error('No public keys could be fetched using HKP')) } From 6676c789619526a7bef3fc415c759f577f582e6e Mon Sep 17 00:00:00 2001 From: Yarmo Mackenbach Date: Thu, 13 Jul 2023 11:00:56 +0200 Subject: [PATCH 4/9] feat: introduce API v3, obsolete older versions --- src/api/v0/index.js | 399 -------------------------------- src/api/v1/index.js | 23 -- src/api/v2/keyoxide_profile.js | 370 ----------------------------- src/api/{v2 => v3}/index.js | 2 +- src/api/v3/keyoxide_profile.js | 185 +++++++++++++++ src/api/{v2 => v3}/proxy_get.js | 23 -- 6 files changed, 186 insertions(+), 816 deletions(-) delete mode 100644 src/api/v0/index.js delete mode 100644 src/api/v1/index.js delete mode 100644 src/api/v2/keyoxide_profile.js rename src/api/{v2 => v3}/index.js (98%) create mode 100644 src/api/v3/keyoxide_profile.js rename src/api/{v2 => v3}/proxy_get.js (92%) diff --git a/src/api/v0/index.js b/src/api/v0/index.js deleted file mode 100644 index 32c7764..0000000 --- a/src/api/v0/index.js +++ /dev/null @@ -1,399 +0,0 @@ -/* -Copyright (C) 2021 Yarmo Mackenbach - -This program is free software: you can redistribute it and/or modify it under -the terms of the GNU Affero General Public License as published by the Free -Software Foundation, either version 3 of the License, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more -details. - -You should have received a copy of the GNU Affero General Public License along -with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - -If your software can interact with users remotely through a computer network, -you should also make sure that it provides a way for users to get its source. -For example, if your program is a web application, its interface could display -a "Source" link that leads users to an archive of the code. There are many -ways you could offer source, and different solutions will be better for different -programs; see section 13 for the specific requirements. - -You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. For -more information on this, and how to apply and follow the GNU AGPL, see . -*/ -import express from 'express' -import { check, validationResult } from 'express-validator' -import Ajv from 'ajv' -import { generateWKDProfile, generateHKPProfile, generateAutoProfile } from '../../server/index.js' -import * as dotenv from 'dotenv' -dotenv.config() - -const router = express.Router() -const ajv = new Ajv({ coerceTypes: true }) - -const apiProfileSchema = { - type: 'object', - properties: { - keyData: { - type: 'object', - properties: { - fingerprint: { - type: 'string' - }, - openpgp4fpr: { - type: 'string' - }, - users: { - type: 'array', - items: { - type: 'object', - properties: { - userData: { - type: 'object', - properties: { - id: { type: 'string' }, - name: { type: 'string' }, - email: { type: 'string' }, - comment: { type: 'string' }, - isPrimary: { type: 'boolean' }, - isRevoked: { type: 'boolean' } - } - }, - claims: { - type: 'array', - items: { - type: 'object', - properties: { - claimVersion: { type: 'integer' }, - uri: { type: 'string' }, - fingerprint: { type: 'string' }, - status: { type: 'string' }, - matches: { - type: 'array', - items: { - type: 'object', - properties: { - serviceProvider: { - type: 'object', - properties: { - type: { type: 'string' }, - name: { type: 'string' } - } - }, - match: { - type: 'object', - properties: { - regularExpression: { type: 'object' }, - isAmbiguous: { type: 'boolean' } - } - }, - profile: { - type: 'object', - properties: { - display: { type: 'string' }, - uri: { type: 'string' }, - qr: { type: 'string' } - } - }, - proof: { - type: 'object', - properties: { - uri: { type: 'string' }, - request: { - type: 'object', - properties: { - fetcher: { type: 'string' }, - access: { type: 'string' }, - format: { type: 'string' }, - data: { type: 'object' } - } - } - } - }, - claim: { - type: 'object', - properties: { - format: { type: 'string' }, - relation: { type: 'string' }, - path: { - type: 'array', - items: { - type: 'string' - } - } - } - } - } - } - }, - verification: { - type: 'object' - }, - summary: { - type: 'object', - properties: { - profileName: { type: 'string' }, - profileURL: { type: 'string' }, - serviceProviderName: { type: 'string' }, - isVerificationDone: { type: 'boolean' }, - isVerified: { type: 'boolean' } - } - } - } - } - } - } - } - }, - primaryUserIndex: { - type: 'integer' - }, - key: { - type: 'object', - properties: { - data: { type: 'object' }, - fetchMethod: { type: 'string' }, - uri: { type: 'string' } - } - } - } - }, - keyoxide: { - type: 'object', - properties: { - url: { type: 'string' } - } - }, - extra: { - type: 'object', - properties: { - avatarURL: { type: 'string' } - } - }, - errors: { - type: 'array' - } - }, - required: ['keyData', 'keyoxide', 'extra', 'errors'], - additionalProperties: false -} - -const apiProfileValidate = ajv.compile(apiProfileSchema) - -const doVerification = async (data) => { - const promises = [] - const results = [] - const verificationOptions = { - proxy: { - hostname: process.env.PROXY_HOSTNAME, - policy: (process.env.PROXY_HOSTNAME !== '') ? 'adaptive' : 'never' - } - } - - // Return early if no users in key - if (!data.keyData.users) { - return data - } - - for (let iUser = 0; iUser < data.keyData.users.length; iUser++) { - const user = data.keyData.users[iUser] - - for (let iClaim = 0; iClaim < user.claims.length; iClaim++) { - const claim = user.claims[iClaim] - - promises.push( - new Promise((resolve, reject) => { - (async () => { - await claim.verify(verificationOptions) - results.push([iUser, iClaim, claim]) - resolve() - })() - }) - ) - } - } - await Promise.all(promises) - - results.forEach(result => { - data.keyData.users[result[0]].claims[result[1]] = result[2] - }) - - return data -} - -const sanitize = (data) => { - const dataClone = JSON.parse(JSON.stringify(data)) - - if (dataClone.keyData.users) { - for (let iUser = 0; iUser < dataClone.keyData.users.length; iUser++) { - const user = dataClone.keyData.users[iUser] - - for (let iClaim = 0; iClaim < user.claims.length; iClaim++) { - const claim = user.claims[iClaim] - - // TODO Fix upstream - for (let iMatch = 0; iMatch < claim.matches.length; iMatch++) { - const match = claim.matches[iMatch] - if (Array.isArray(match.claim)) { - match.claim = match.claim[0] - } - } - // TODO Fix upstream - if (!claim.verification) { - claim.verification = {} - } - // TODO Fix upstream - claim.matches.forEach(match => { - match.proof.request.access = ['generic', 'nocors', 'granted', 'server'][match.proof.request.access] - match.claim.format = ['uri', 'fingerprint', 'message'][match.claim.format] - match.claim.relation = ['contains', 'equals', 'oneof'][match.claim.relation] - }) - - data.keyData.users[iUser].claims[iClaim] = claim - } - } - } - - const valid = apiProfileValidate(data) - if (!valid) { - throw new Error('Profile data sanitization error') - } - - return data -} - -const addSummaryToClaims = (data) => { - // Return early if no users in key - if (!data.keyData.users) { - return data - } - - // To be removed when data is added by DOIP library - for (let userIndex = 0; userIndex < data.keyData.users.length; userIndex++) { - const user = data.keyData.users[userIndex] - - for (let claimIndex = 0; claimIndex < user.claims.length; claimIndex++) { - const claim = user.claims[claimIndex] - - const isVerificationDone = claim.status === 'verified' - const isVerified = isVerificationDone ? claim.verification.result : false - const isAmbiguous = isVerified - ? false - : claim.matches.length > 1 || claim.matches[0].match.isAmbiguous - - data.keyData.users[userIndex].claims[claimIndex].summary = { - profileName: !isAmbiguous ? claim.matches[0].profile.display : claim.uri, - profileURL: !isAmbiguous ? claim.matches[0].profile.uri : '', - serviceProviderName: !isAmbiguous ? claim.matches[0].serviceprovider.name : '', - isVerificationDone, - isVerified - } - } - } - - return data -} - -router.get('/profile/fetch', - check('query').exists(), - check('protocol').optional().toLowerCase().isIn(['hkp', 'wkd']), - check('doVerification').default(false).isBoolean().toBoolean(), - check('returnPublicKey').default(false).isBoolean().toBoolean(), - async (req, res) => { - const valRes = validationResult(req) - if (!valRes.isEmpty()) { - res.status(400).send(valRes) - return - } - - // Generate profile - let data - switch (req.query.protocol) { - case 'wkd': - data = await generateWKDProfile(req.query.query) - break - case 'hkp': - data = await generateHKPProfile(req.query.query) - break - default: - data = await generateAutoProfile(req.query.query) - break - } - - if (data.errors.length > 0) { - data.key = undefined - res.status(500).send(data) - } - - // Return public key - if (req.query.returnPublicKey) { - data.keyData.key.data = data.key.publicKey - } - data.key = undefined - - // Do verification - if (req.query.doVerification) { - data = await doVerification(data) - } - - try { - // Sanitize JSON - data = sanitize(data) - } catch (error) { - data.keyData = {} - data.extra = {} - data.errors = [error.message] - } - - // Add missing data - data = addSummaryToClaims(data) - - let statusCode = 200 - if (data.errors.length > 0) { - statusCode = 500 - } - - res.status(statusCode).send(data) - } -) - -router.get('/profile/verify', - check('data').exists().isJSON(), - async (req, res) => { - const valRes = validationResult(req) - if (!valRes.isEmpty()) { - res.status(400).send(valRes) - return - } - - // Do verification - let data = await doVerification(req.query.data) - - try { - // Sanitize JSON - data = sanitize(data) - } catch (error) { - data.keyData = {} - data.extra = {} - data.errors = [error.message] - } - - // Add missing data - data = addSummaryToClaims(data) - - let statusCode = 200 - if (data.errors.length > 0) { - statusCode = 500 - } - - res.status(statusCode).send(data) - } -) - -export default router diff --git a/src/api/v1/index.js b/src/api/v1/index.js deleted file mode 100644 index c61d247..0000000 --- a/src/api/v1/index.js +++ /dev/null @@ -1,23 +0,0 @@ -/* -Copyright 2022 Yarmo Mackenbach - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ -import express from 'express' -const router = express.Router() - -router.get('*', (req, res) => { - return res.status(501).send('Proxy v1 API endpoint is no longer supported, please migrate to proxy v2 API endpoint') -}) - -export default router diff --git a/src/api/v2/keyoxide_profile.js b/src/api/v2/keyoxide_profile.js deleted file mode 100644 index f13a7c2..0000000 --- a/src/api/v2/keyoxide_profile.js +++ /dev/null @@ -1,370 +0,0 @@ -/* -Copyright (C) 2022 Yarmo Mackenbach - -This program is free software: you can redistribute it and/or modify it under -the terms of the GNU Affero General Public License as published by the Free -Software Foundation, either version 3 of the License, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more -details. - -You should have received a copy of the GNU Affero General Public License along -with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - -If your software can interact with users remotely through a computer network, -you should also make sure that it provides a way for users to get its source. -For example, if your program is a web application, its interface could display -a "Source" link that leads users to an archive of the code. There are many -ways you could offer source, and different solutions will be better for different -programs; see section 13 for the specific requirements. - -You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. For -more information on this, and how to apply and follow the GNU AGPL, see . -*/ -import express from 'express' -import { check, validationResult } from 'express-validator' -import Ajv from 'ajv' -import { generateWKDProfile, generateHKPProfile, generateAutoProfile } from '../../server/index.js' -import * as dotenv from 'dotenv' -dotenv.config() - -const router = express.Router() -const ajv = new Ajv({ coerceTypes: true }) - -const apiProfileSchema = { - type: 'object', - properties: { - keyData: { - type: 'object', - properties: { - fingerprint: { - type: 'string' - }, - openpgp4fpr: { - type: 'string' - }, - users: { - type: 'array', - items: { - type: 'object', - properties: { - userData: { - type: 'object', - properties: { - id: { type: 'string' }, - name: { type: 'string' }, - email: { type: 'string' }, - comment: { type: 'string' }, - isPrimary: { type: 'boolean' }, - isRevoked: { type: 'boolean' } - } - }, - claims: { - type: 'array', - items: { - type: 'object', - properties: { - claimVersion: { type: 'integer' }, - uri: { type: 'string' }, - fingerprint: { type: 'string' }, - status: { type: 'string' }, - matches: { - type: 'array', - items: { - type: 'object', - properties: { - serviceProvider: { - type: 'object', - properties: { - type: { type: 'string' }, - name: { type: 'string' } - } - }, - match: { - type: 'object', - properties: { - regularExpression: { type: 'object' }, - isAmbiguous: { type: 'boolean' } - } - }, - profile: { - type: 'object', - properties: { - display: { type: 'string' }, - uri: { type: 'string' }, - qr: { type: 'string' } - } - }, - proof: { - type: 'object', - properties: { - uri: { type: 'string' }, - request: { - type: 'object', - properties: { - fetcher: { type: 'string' }, - access: { type: 'string' }, - format: { type: 'string' }, - data: { type: 'object' } - } - } - } - }, - claim: { - type: 'array', - items: { - type: 'object', - properties: { - format: { type: 'string' }, - relation: { type: 'string' }, - path: { - type: 'array', - items: { - type: 'string' - } - } - } - } - } - } - } - }, - verification: { - type: 'object' - }, - summary: { - type: 'object', - properties: { - profileName: { type: 'string' }, - profileURL: { type: 'string' }, - serviceProviderName: { type: 'string' }, - isVerificationDone: { type: 'boolean' }, - isVerified: { type: 'boolean' } - } - } - } - } - } - } - } - }, - primaryUserIndex: { - type: 'integer' - }, - key: { - type: 'object', - properties: { - data: { type: 'object' }, - fetchMethod: { type: 'string' }, - uri: { type: 'string' } - } - } - } - }, - keyoxide: { - type: 'object', - properties: { - url: { type: 'string' } - } - }, - extra: { - type: 'object', - properties: { - avatarURL: { type: 'string' } - } - }, - errors: { - type: 'array' - } - }, - required: ['keyData', 'keyoxide', 'extra', 'errors'], - additionalProperties: false -} - -const apiProfileValidate = ajv.compile(apiProfileSchema) - -const doVerification = async (data) => { - const promises = [] - const results = [] - const verificationOptions = { - proxy: { - hostname: process.env.PROXY_HOSTNAME, - policy: (process.env.PROXY_HOSTNAME !== '') ? 'adaptive' : 'never' - } - } - - // Return early if no users in key - if (!data.keyData.users) { - return data - } - - for (let iUser = 0; iUser < data.keyData.users.length; iUser++) { - const user = data.keyData.users[iUser] - - for (let iClaim = 0; iClaim < user.claims.length; iClaim++) { - const claim = user.claims[iClaim] - - promises.push( - new Promise((resolve, reject) => { - (async () => { - await claim.verify(verificationOptions) - results.push([iUser, iClaim, claim]) - resolve() - })() - }) - ) - } - } - await Promise.all(promises) - - results.forEach(result => { - data.keyData.users[result[0]].claims[result[1]] = result[2] - }) - - return data -} - -const sanitize = (data) => { - const valid = apiProfileValidate(data) - if (!valid) { - throw new Error('Profile data sanitization error') - } - - return data -} - -const addSummaryToClaims = (data) => { - // Return early if no users in key - if (!data.keyData.users) { - return data - } - - // To be removed when data is added by DOIP library - for (let userIndex = 0; userIndex < data.keyData.users.length; userIndex++) { - const user = data.keyData.users[userIndex] - - for (let claimIndex = 0; claimIndex < user.claims.length; claimIndex++) { - const claim = user.claims[claimIndex] - - const isVerificationDone = claim.status === 'verified' - const isVerified = isVerificationDone ? claim.verification.result : false - const isAmbiguous = isVerified - ? false - : claim.matches.length > 1 || claim.matches[0].match.isAmbiguous - - data.keyData.users[userIndex].claims[claimIndex].summary = { - profileName: !isAmbiguous ? claim.matches[0].profile.display : claim.uri, - profileURL: !isAmbiguous ? claim.matches[0].profile.uri : '', - serviceProviderName: !isAmbiguous ? claim.matches[0].serviceprovider.name : '', - isVerificationDone, - isVerified - } - } - } - - return data -} - -router.get('/fetch', - check('query').exists(), - check('protocol').optional().toLowerCase().isIn(['hkp', 'wkd']), - check('doVerification').default(false).isBoolean().toBoolean(), - check('returnPublicKey').default(false).isBoolean().toBoolean(), - async (req, res) => { - const valRes = validationResult(req) - if (!valRes.isEmpty()) { - res.status(400).send(valRes) - return - } - - // Generate profile - let data - switch (req.query.protocol) { - case 'wkd': - data = await generateWKDProfile(req.query.query) - break - case 'hkp': - data = await generateHKPProfile(req.query.query) - break - default: - data = await generateAutoProfile(req.query.query) - break - } - - if (data.errors.length > 0) { - data.key = undefined - res.status(500).send(data) - } - - // Return public key - if (req.query.returnPublicKey) { - data.keyData.key.data = data.key.publicKey - } - data.key = undefined - - // Do verification - if (req.query.doVerification) { - data = await doVerification(data) - } - - try { - // Sanitize JSON - data = sanitize(data) - } catch (error) { - data.keyData = {} - data.extra = {} - data.errors = [error.message] - } - - // Add missing data - data = addSummaryToClaims(data) - - let statusCode = 200 - if (data.errors.length > 0) { - statusCode = 500 - } - - res.status(statusCode).send(data) - } -) - -router.get('/verify', - check('data').exists().isJSON(), - async (req, res) => { - const valRes = validationResult(req) - if (!valRes.isEmpty()) { - res.status(400).send(valRes) - return - } - - // Do verification - let data = await doVerification(req.query.data) - - try { - // Sanitize JSON - data = sanitize(data) - } catch (error) { - data.keyData = {} - data.extra = {} - data.errors = [error.message] - } - - // Add missing data - data = addSummaryToClaims(data) - - let statusCode = 200 - if (data.errors.length > 0) { - statusCode = 500 - } - - res.status(statusCode).send(data) - } -) - -export default router diff --git a/src/api/v2/index.js b/src/api/v3/index.js similarity index 98% rename from src/api/v2/index.js rename to src/api/v3/index.js index 1b17e75..80a0d28 100644 --- a/src/api/v2/index.js +++ b/src/api/v3/index.js @@ -1,5 +1,5 @@ /* -Copyright (C) 2022 Yarmo Mackenbach +Copyright (C) 2023 Yarmo Mackenbach This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free diff --git a/src/api/v3/keyoxide_profile.js b/src/api/v3/keyoxide_profile.js new file mode 100644 index 0000000..b1ba960 --- /dev/null +++ b/src/api/v3/keyoxide_profile.js @@ -0,0 +1,185 @@ +/* +Copyright (C) 2023 Yarmo Mackenbach + +This program is free software: you can redistribute it and/or modify it under +the terms of the GNU Affero General Public License as published by the Free +Software Foundation, either version 3 of the License, or (at your option) +any later version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more +details. + +You should have received a copy of the GNU Affero General Public License along +with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + +If your software can interact with users remotely through a computer network, +you should also make sure that it provides a way for users to get its source. +For example, if your program is a web application, its interface could display +a "Source" link that leads users to an archive of the code. There are many +ways you could offer source, and different solutions will be better for different +programs; see section 13 for the specific requirements. + +You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. For +more information on this, and how to apply and follow the GNU AGPL, see . +*/ +import express from 'express' +import { check, validationResult } from 'express-validator' +import Ajv from 'ajv/dist/2020.js' +import * as dotenv from 'dotenv' +import { Claim } from 'doipjs' +import { generateAspeProfile, generateWKDProfile, generateHKPProfile, generateAutoProfile } from '../../server/index.js' +import { claimSchema, personaSchema, profileSchema, serviceProviderSchema } from '../../schemas.js' +dotenv.config() + +const router = express.Router() +const ajv = new Ajv({ + schemas: [profileSchema, personaSchema, claimSchema, serviceProviderSchema] +}) + +const apiProfileValidate = ajv.compile(profileSchema) + +const doVerification = async (profile) => { + const promises = [] + const results = [] + const verificationOptions = { + proxy: { + hostname: process.env.PROXY_HOSTNAME, + policy: (process.env.PROXY_HOSTNAME !== '') ? 'adaptive' : 'never' + } + } + + // Return early if no users in key + if (!profile.personas) { + return profile + } + + for (let iUser = 0; iUser < profile.personas.length; iUser++) { + const user = profile.personas[iUser] + + for (let iClaim = 0; iClaim < user.claims.length; iClaim++) { + const claim = user.claims[iClaim] + + promises.push( + new Promise((resolve, reject) => { + (async () => { + await claim.verify(verificationOptions) + results.push([iUser, iClaim, claim]) + resolve() + })() + }) + ) + } + } + await Promise.all(promises) + + results.forEach(result => { + profile.personas[result[0]].claims[result[1]] = result[2] + }) + + return profile +} + +const validate = (profile) => { + const valid = apiProfileValidate(profile) + if (!valid) { + throw new Error(`Profile data validation error: ${apiProfileValidate.errors.map(x => x.message).join(', ')}`) + } +} + +router.get('/fetch', + check('query').exists(), + check('protocol').optional().toLowerCase().isIn(['aspe', 'hkp', 'wkd']), + check('doVerification').default(false).isBoolean().toBoolean(), + async (req, res) => { + const valRes = validationResult(req) + if (!valRes.isEmpty()) { + res.status(400).send(valRes) + return + } + + // Generate profile + let data + switch (req.query.protocol) { + case 'aspe': + data = await generateAspeProfile(req.query.query) + break + case 'wkd': + data = await generateWKDProfile(req.query.query) + break + case 'hkp': + data = await generateHKPProfile(req.query.query) + break + default: + data = await generateAutoProfile(req.query.query) + break + } + + if ('errors' in data && data.errors.length > 0) { + res.status(500).send(data) + } + + // Do verification + if (req.query.doVerification) { + data = await doVerification(data) + } + + data = data.toJSON() + + try { + // Validate JSON + validate(data) + } catch (error) { + data = { + errors: [error.message] + } + } + + let statusCode = 200 + if ('errors' in data && data.errors.length > 0) { + statusCode = 500 + } + + res.status(statusCode).send(data) + } +) + +router.get('/verify', + check('data').exists().isJSON(), + async (req, res) => { + const valRes = validationResult(req) + if (!valRes.isEmpty()) { + res.status(400).send(valRes) + return + } + + let profile = Claim.fromJson(req.query.data) + + // Do verification + let data = await doVerification(profile) + + data = data.toJSON() + + try { + // Validate JSON + validate(data) + } catch (error) { + data = { + errors: [error.message] + } + } + + let statusCode = 200 + if ('errors' in data) { + statusCode = 500 + } + + res.status(statusCode).send(data) + } +) + +export default router diff --git a/src/api/v2/proxy_get.js b/src/api/v3/proxy_get.js similarity index 92% rename from src/api/v2/proxy_get.js rename to src/api/v3/proxy_get.js index 5cacfa6..a766735 100644 --- a/src/api/v2/proxy_get.js +++ b/src/api/v3/proxy_get.js @@ -51,9 +51,6 @@ const opts = { telegram: { token: process.env.TELEGRAM_TOKEN || null }, - twitter: { - bearerToken: process.env.TWITTER_BEARER_TOKEN || null - }, xmpp: { service: process.env.XMPP_SERVICE || null, username: process.env.XMPP_USERNAME || null, @@ -138,26 +135,6 @@ router.get( } ) -// Twitter route -router.get('/twitter', query('tweetId').isInt(), async (req, res) => { - if (!opts.claims.twitter.bearerToken) { - return res.status(501).json({ errors: 'Twitter not enabled on server' }) - } - const errors = validationResult(req) - if (!errors.isEmpty()) { - return res.status(400).json({ errors: errors.array() }) - } - - fetcher.twitter - .fn(req.query, opts) - .then((data) => { - return res.status(200).send(data) - }) - .catch((err) => { - return res.status(400).json({ errors: err.message ? err.message : err }) - }) -}) - // Matrix route router.get( '/matrix', From 59fc51c40787e32bda17719dcbd117750c9904f5 Mon Sep 17 00:00:00 2001 From: Yarmo Mackenbach Date: Thu, 13 Jul 2023 11:10:58 +0200 Subject: [PATCH 5/9] feat: update server code --- src/routes/api.js | 19 +- src/routes/main.js | 3 +- src/routes/profile.js | 25 +- src/schemas.js | 376 +++++++++++++++++++++ src/server/demo.js | 81 ----- src/server/index.js | 199 +++++------ src/server/{keys.js => openpgpProfiles.js} | 122 ++++--- src/server/utils.js | 2 +- 8 files changed, 559 insertions(+), 268 deletions(-) create mode 100644 src/schemas.js delete mode 100644 src/server/demo.js rename src/server/{keys.js => openpgpProfiles.js} (69%) diff --git a/src/routes/api.js b/src/routes/api.js index 969a1aa..8e15298 100644 --- a/src/routes/api.js +++ b/src/routes/api.js @@ -28,16 +28,19 @@ if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU AGPL, see . */ import express from 'express' -import apiRouter0 from '../api/v0/index.js' -import apiRouter1 from '../api/v1/index.js' -import apiRouter2 from '../api/v2/index.js' +import apiRouter3 from '../api/v3/index.js' const router = express.Router() -if ((process.env.ENABLE_MAIN_MODULE ?? 'true') === 'true') { - router.use('/0', apiRouter0) -} -router.use('/1', apiRouter1) -router.use('/2', apiRouter2) +router.get('/0', (req, res) => { + return res.status(501).send('Proxy v0 API endpoint is no longer supported, please migrate to proxy v3 API endpoint') +}) +router.get('/1', (req, res) => { + return res.status(501).send('Proxy v1 API endpoint is no longer supported, please migrate to proxy v3 API endpoint') +}) +router.get('/2', (req, res) => { + return res.status(501).send('Proxy v2 API endpoint is no longer supported, please migrate to proxy v3 API endpoint') +}) +router.use('/3', apiRouter3) export default router diff --git a/src/routes/main.js b/src/routes/main.js index ed1aa49..34fb518 100644 --- a/src/routes/main.js +++ b/src/routes/main.js @@ -30,7 +30,6 @@ more information on this, and how to apply and follow the GNU AGPL, see { } } - res.render('index', { highlights, demoData }) + res.render('index', { highlights }) }) router.get('/privacy', (req, res) => { diff --git a/src/routes/profile.js b/src/routes/profile.js index c7040d4..78149f5 100644 --- a/src/routes/profile.js +++ b/src/routes/profile.js @@ -30,6 +30,7 @@ more information on this, and how to apply and follow the GNU AGPL, see { router.post('/sig', bodyParser, async (req, res) => { const data = await generateSignatureProfile(req.body.signature) const title = utils.generatePageTitle('profile', data) - res.set('ariadne-identity-proof', data.keyData.openpgp4fpr) + res.set('ariadne-identity-proof', data.identifier) res.render('profile', { title, - data, + data: data instanceof Profile ? data.toJSON() : data, isSignature: true, signature: req.body.signature, enable_message_encryption: false, @@ -55,10 +56,10 @@ router.post('/sig', bodyParser, async (req, res) => { router.get('/wkd/:id', async (req, res) => { const data = await generateWKDProfile(req.params.id) const title = utils.generatePageTitle('profile', data) - res.set('ariadne-identity-proof', data.keyData.openpgp4fpr) + res.set('ariadne-identity-proof', data.identifier) res.render('profile', { title, - data, + data: data instanceof Profile ? data.toJSON() : data, enable_message_encryption: false, enable_signature_verification: false }) @@ -67,10 +68,10 @@ router.get('/wkd/:id', async (req, res) => { router.get('/hkp/:id', async (req, res) => { const data = await generateHKPProfile(req.params.id) const title = utils.generatePageTitle('profile', data) - res.set('ariadne-identity-proof', data.keyData.openpgp4fpr) + res.set('ariadne-identity-proof', data.identifier) res.render('profile', { title, - data, + data: data instanceof Profile ? data.toJSON() : data, enable_message_encryption: false, enable_signature_verification: false }) @@ -79,10 +80,10 @@ router.get('/hkp/:id', async (req, res) => { router.get('/hkp/:server/:id', async (req, res) => { const data = await generateHKPProfile(req.params.id, req.params.server) const title = utils.generatePageTitle('profile', data) - res.set('ariadne-identity-proof', data.keyData.openpgp4fpr) + res.set('ariadne-identity-proof', data.identifier) res.render('profile', { title, - data, + data: data instanceof Profile ? data.toJSON() : data, enable_message_encryption: false, enable_signature_verification: false }) @@ -91,10 +92,10 @@ router.get('/hkp/:server/:id', async (req, res) => { router.get('/keybase/:username/:fingerprint', async (req, res) => { const data = await generateKeybaseProfile(req.params.username, req.params.fingerprint) const title = utils.generatePageTitle('profile', data) - res.set('ariadne-identity-proof', data.keyData.openpgp4fpr) + res.set('ariadne-identity-proof', data.identifier) res.render('profile', { title, - data, + data: data instanceof Profile ? data.toJSON() : data, enable_message_encryption: false, enable_signature_verification: false }) @@ -103,10 +104,10 @@ router.get('/keybase/:username/:fingerprint', async (req, res) => { router.get('/:id', async (req, res) => { const data = await generateAutoProfile(req.params.id) const title = utils.generatePageTitle('profile', data) - res.set('ariadne-identity-proof', data.keyData.openpgp4fpr) + res.set('ariadne-identity-proof', data.identifier) res.render('profile', { title, - data, + data: data instanceof Profile ? data.toJSON() : data, enable_message_encryption: false, enable_signature_verification: false }) diff --git a/src/schemas.js b/src/schemas.js new file mode 100644 index 0000000..9ac16ae --- /dev/null +++ b/src/schemas.js @@ -0,0 +1,376 @@ +/* +Copyright (C) 2023 Yarmo Mackenbach + +This program is free software: you can redistribute it and/or modify it under +the terms of the GNU Affero General Public License as published by the Free +Software Foundation, either version 3 of the License, or (at your option) +any later version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more +details. + +You should have received a copy of the GNU Affero General Public License along +with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + +If your software can interact with users remotely through a computer network, +you should also make sure that it provides a way for users to get its source. +For example, if your program is a web application, its interface could display +a "Source" link that leads users to an archive of the code. There are many +ways you could offer source, and different solutions will be better for different +programs; see section 13 for the specific requirements. + +You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. For +more information on this, and how to apply and follow the GNU AGPL, see . +*/ +export const profileSchema = { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://spec.keyoxide.org/2/profile.schema.json", + "title": "Profile", + "description": "Keyoxide profile with personas", + "type": "object", + "properties": { + "profileVersion": { + "description": "The version of the profile", + "type": "integer" + }, + "profileType": { + "description": "The type of the profile [openpgp, asp]", + "type": "string" + }, + "identifier": { + "description": "Identifier of the profile (email, fingerprint, URI)", + "type": "string" + }, + "personas": { + "description": "The personas inside the profile", + "type": "array", + "items": { + "$ref": "https://spec.keyoxide.org/2/persona.schema.json" + }, + "minItems": 1, + "uniqueItems": true + }, + "primaryPersonaIndex": { + "description": "The index of the primary persona", + "type": "integer" + }, + "publicKey": { + "description": "The cryptographic key associated with the profile", + "type": "object", + "properties": { + "keyType": { + "description": "The type of cryptographic key [eddsa, es256, openpgp, none]", + "type": "string" + }, + "encoding": { + "description": "The encoding of the cryptographic key [pem, jwk, armored_pgp, none]", + "type": "string" + }, + "encodedKey": { + "description": "The encoded cryptographic key (PEM, stringified JWK, ...)", + "type": ["string", "null"] + }, + "fetch": { + "description": "Details on how to fetch the public key", + "type": "object", + "properties": { + "method": { + "description": "The method to fetch the key [aspe, hkp, wkd, http, none]", + "type": "string" + }, + "query": { + "description": "The query to fetch the key", + "type": ["string", "null"] + }, + "resolvedUrl": { + "description": "The URL the method eventually resolved to", + "type": ["string", "null"] + } + } + } + }, + "required": [ + "keyType", + "fetch" + ] + }, + "verifiers": { + "description": "A list of links to verifiers", + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "description": "Name of the verifier site", + "type": "string" + }, + "url": { + "description": "URL to the profile page on the verifier site", + "type": "string" + } + } + }, + "uniqueItems": true + } + }, + "required": [ + "profileVersion", + "profileType", + "identifier", + "personas", + "primaryPersonaIndex", + "publicKey", + "verifiers" + ], + "additionalProperties": false +} + + +export const personaSchema = { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://spec.keyoxide.org/2/persona.schema.json", + "title": "Profile", + "description": "Keyoxide persona with identity claims", + "type": "object", + "properties": { + "identifier": { + "description": "Identifier of the persona", + "type": ["string", "null"] + }, + "name": { + "description": "Name of the persona", + "type": "string" + }, + "email": { + "description": "Email address of the persona", + "type": ["string", "null"] + }, + "description": { + "description": "Description of the persona", + "type": ["string", "null"] + }, + "avatarUrl": { + "description": "URL to an avatar image", + "type": ["string", "null"] + }, + "isRevoked": { + "type": "boolean" + }, + "claims": { + "description": "A list of identity claims", + "type": "array", + "items": { + "$ref": "https://spec.keyoxide.org/2/claim.schema.json" + }, + "uniqueItems": true + } + }, + "required": [ + "name", + "claims" + ], + "additionalProperties": false +} + +export const claimSchema = { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://spec.keyoxide.org/2/claim.schema.json", + "title": "Identity claim", + "description": "Verifiable online identity claim", + "type": "object", + "properties": { + "claimVersion": { + "description": "The version of the claim", + "type": "integer" + }, + "uri": { + "description": "The claim URI", + "type": "string" + }, + "proofs": { + "description": "The proofs that would verify the claim", + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1, + "uniqueItems": true + }, + "matches": { + "description": "Service providers matched to the claim", + "type": "array", + "items": { + "$ref": "https://spec.keyoxide.org/2/serviceprovider.schema.json" + }, + "uniqueItems": true + }, + "status": { + "type": "integer", + "description": "Claim status code" + }, + "display": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Account name to display in the user interface" + }, + "url": { + "type": ["string", "null"], + "description": "URL to link to in the user interface" + }, + "serviceProviderName": { + "type": ["string", "null"], + "description": "Name of the service provider to display in the user interface" + } + } + } + }, + "required": [ + "claimVersion", + "uri", + "proofs", + "status", + "display" + ], + "additionalProperties": false +} + +export const serviceProviderSchema = { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://spec.keyoxide.org/2/serviceprovider.schema.json", + "title": "Service provider", + "description": "A service provider that can be matched to identity claims", + "type": "object", + "properties": { + "about": { + "description": "Details about the service provider", + "type": "object", + "properties": { + "name": { + "description": "Full name of the service provider", + "type": "string" + }, + "id": { + "description": "Identifier of the service provider (no whitespace or symbols, lowercase)", + "type": "string" + }, + "homepage": { + "description": "URL to the homepage of the service provider", + "type": ["string", "null"] + } + } + }, + "profile": { + "description": "What the profile would look like if the match is correct", + "type": "object", + "properties": { + "display": { + "description": "Profile name to be displayed", + "type": "string" + }, + "uri": { + "description": "URI or URL for public access to the profile", + "type": "string" + }, + "qr": { + "description": "URI or URL associated with the profile usually served as a QR code", + "type": ["string", "null"] + } + } + }, + "claim": { + "description": "Details from the claim matching process", + "type": "object", + "properties": { + "uriRegularExpression": { + "description": "Regular expression used to parse the URI", + "type": "string" + }, + "uriIsAmbiguous": { + "description": "Whether this match automatically excludes other matches", + "type": "boolean" + } + } + }, + "proof": { + "description": "Information for the proof verification process", + "type": "object", + "properties": { + "request": { + "description": "Details to request the potential proof", + "type": "object", + "properties": { + "uri": { + "description": "Location of the proof", + "type": ["string", "null"] + }, + "accessRestriction": { + "description": "Type of access restriction [none, nocors, granted, server]", + "type": "string" + }, + "fetcher": { + "description": "Name of the fetcher to use", + "type": "string" + }, + "data": { + "description": "Data needed by the fetcher or proxy to request the proof", + "type": "object", + "additionalProperties": true + } + } + }, + "response": { + "description": "Details about the expected response", + "type": "object", + "properties": { + "format": { + "description": "Expected format of the proof [text, json]", + "type": "string" + }, + } + }, + "target": { + "description": "Details about the target located in the response", + "type": "array", + "items": { + "type": "object", + "properties": { + "format": { + "description": "How is the proof formatted [uri, fingerprint]", + "type": "string" + }, + "encoding": { + "description": "How is the proof encoded [plain, html, xml]", + "type": "string" + }, + "relation": { + "description": "How are the response and the target related [contains, equals]", + "type": "string" + }, + "path": { + "description": "Path to the target location if the response is JSON", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + }, + "required": [ + "about", + "profile", + "claim", + "proof" + ], + "additionalProperties": false +} diff --git a/src/server/demo.js b/src/server/demo.js deleted file mode 100644 index e03d05d..0000000 --- a/src/server/demo.js +++ /dev/null @@ -1,81 +0,0 @@ -/* -Copyright (C) 2021 Yarmo Mackenbach - -This program is free software: you can redistribute it and/or modify it under -the terms of the GNU Affero General Public License as published by the Free -Software Foundation, either version 3 of the License, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more -details. - -You should have received a copy of the GNU Affero General Public License along -with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - -If your software can interact with users remotely through a computer network, -you should also make sure that it provides a way for users to get its source. -For example, if your program is a web application, its interface could display -a "Source" link that leads users to an archive of the code. There are many -ways you could offer source, and different solutions will be better for different -programs; see section 13 for the specific requirements. - -You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. For -more information on this, and how to apply and follow the GNU AGPL, see . -*/ -export default { - claimVersion: 1, - uri: 'https://fosstodon.org/@keyoxide', - fingerprint: '9f0048ac0b23301e1f77e994909f6bd6f80f485d', - status: 'verified', - matches: [ - { - serviceprovider: { - type: 'web', - name: 'mastodon (demo)' - }, - match: { - regularExpression: {}, - isAmbiguous: true - }, - profile: { - display: '@keyoxide@fosstodon.org', - uri: 'https://fosstodon.org/@keyoxide', - qr: null - }, - proof: { - uri: 'https://fosstodon.org/@keyoxide', - request: { - fetcher: 'http', - access: 0, - format: 'json', - data: { - url: 'https://fosstodon.org/@keyoxide', - format: 'json' - } - } - }, - claim: { - format: 1, - relation: 0, - path: [ - 'attachment', - 'value' - ] - } - } - ], - verification: { - result: true, - completed: true, - errors: [], - proof: { - fetcher: 'http', - viaProxy: false - } - } -} diff --git a/src/server/index.js b/src/server/index.js index 06ad467..176425d 100644 --- a/src/server/index.js +++ b/src/server/index.js @@ -29,45 +29,48 @@ more information on this, and how to apply and follow the GNU AGPL, see { + logger.debug('Generating an ASPE profile', + { component: 'aspe_profile_generator', action: 'start', profile_id: id }) + + return doipjs.asp.fetchASPE(id) + .then(profile => { + profile.addVerifier('keyoxide', `https://${process.env.DOMAIN}/${id}`) + profile = processAspProfile(profile) + return profile + }) + .catch(err => { + logger.warn('Failed to generate ASPE profile', + { component: 'aspe_profile_generator', action: 'failure', error: err.message, profile_id: id }) + + return { + errors: [err.message] + } + }) +} + const generateWKDProfile = async (id) => { logger.debug('Generating a WKD profile', { component: 'wkd_profile_generator', action: 'start', profile_id: id }) return fetchWKD(id) - .then(async key => { - let keyData = await doipjs.keys.process(key.publicKey) - keyData.openpgp4fpr = `openpgp4fpr:${keyData.fingerprint.toLowerCase()}` - keyData.key.fetchMethod = 'wkd' - keyData.key.uri = key.fetchURL - keyData.key.data = {} - keyData = processKeyData(keyData) - - const keyoxideData = {} - keyoxideData.url = `https://${process.env.DOMAIN}/wkd/${id}` + .then(async profile => { + profile.addVerifier('keyoxide', `https://${process.env.DOMAIN}/wkd/${id}`) + profile = processOpenPgpProfile(profile) logger.debug('Generating a WKD profile', { component: 'wkd_profile_generator', action: 'done', profile_id: id }) - return { - key, - keyData, - keyoxide: keyoxideData, - extra: await computeExtraData(key, keyData), - errors: [] - } + return profile }) .catch(err => { logger.warn('Failed to generate WKD profile', { component: 'wkd_profile_generator', action: 'failure', error: err.message, profile_id: id }) return { - key: {}, - keyData: {}, - keyoxide: {}, - extra: {}, errors: [err.message] } }) @@ -78,41 +81,27 @@ const generateHKPProfile = async (id, keyserverDomain) => { { component: 'hkp_profile_generator', action: 'start', profile_id: id, keyserver_domain: keyserverDomain || '' }) return fetchHKP(id, keyserverDomain) - .then(async key => { - let keyData = await doipjs.keys.process(key.publicKey) - keyData.openpgp4fpr = `openpgp4fpr:${keyData.fingerprint.toLowerCase()}` - keyData.key.fetchMethod = 'hkp' - keyData.key.uri = key.fetchURL - keyData.key.data = {} - keyData = processKeyData(keyData) - - const keyoxideData = {} + .then(async profile => { + let keyoxideUrl if (!keyserverDomain || keyserverDomain === 'keys.openpgp.org') { - keyoxideData.url = `https://${process.env.DOMAIN}/hkp/${id}` + keyoxideUrl = `https://${process.env.DOMAIN}/hkp/${id}` } else { - keyoxideData.url = `https://${process.env.DOMAIN}/hkp/${keyserverDomain}/${id}` + keyoxideUrl = `https://${process.env.DOMAIN}/hkp/${keyserverDomain}/${id}` } + profile.addVerifier('keyoxide', keyoxideUrl) + profile = processOpenPgpProfile(profile) + logger.debug('Generating a HKP profile', { component: 'hkp_profile_generator', action: 'done', profile_id: id, keyserver_domain: keyserverDomain || '' }) - return { - key, - keyData, - keyoxide: keyoxideData, - extra: await computeExtraData(key, keyData), - errors: [] - } + return profile }) .catch(err => { logger.warn('Failed to generate HKP profile', { component: 'hkp_profile_generator', action: 'failure', error: err.message, profile_id: id, keyserver_domain: keyserverDomain || '' }) return { - key: {}, - keyData: {}, - keyoxide: {}, - extra: {}, errors: [err.message] } }) @@ -121,25 +110,31 @@ const generateHKPProfile = async (id, keyserverDomain) => { const generateAutoProfile = async (id) => { let result + const aspeRe = /aspe:(.*):(.*)/ + + if (aspeRe.test(id)) { + result = await generateAspeProfile(id) + + if (result && !('errors' in result)) { + return result + } + } + if (id.includes('@')) { result = await generateWKDProfile(id) - if (result && result.errors.length === 0) { + if (result && !('errors' in result)) { return result } } result = await generateHKPProfile(id) - if (result && result.errors.length === 0) { + if (result && !('errors' in result)) { return result } return { - key: {}, - keyData: {}, - keyoxide: {}, - extra: {}, - errors: ['No public keys could be found'] + errors: ['No public profile/keys could be found'] } } @@ -149,34 +144,20 @@ const generateSignatureProfile = async (signature) => { return fetchSignature(signature) .then(async key => { - let keyData = key.keyData - keyData.openpgp4fpr = `openpgp4fpr:${keyData.fingerprint.toLowerCase()}` - key.keyData = undefined - keyData.key.data = {} - keyData = processKeyData(keyData) - - const keyoxideData = {} + let profile = await doipjs.signatures.parse(key.publicKey) + profile.addVerifier('keyoxide', keyoxideUrl) + profile = processOpenPgpProfile(profile) logger.debug('Generating a signature profile', { component: 'signature_profile_generator', action: 'done' }) - return { - key, - keyData, - keyoxide: keyoxideData, - extra: await computeExtraData(key, keyData), - errors: [] - } + return profile }) .catch(err => { logger.warn('Failed to generate a signature profile', { component: 'signature_profile_generator', action: 'failure', error: err.message }) return { - key: {}, - keyData: {}, - keyoxide: {}, - extra: {}, errors: [err.message] } }) @@ -187,72 +168,91 @@ const generateKeybaseProfile = async (username, fingerprint) => { { component: 'keybase_profile_generator', action: 'start', username, fingerprint }) return fetchKeybase(username, fingerprint) - .then(async key => { - let keyData = await doipjs.keys.process(key.publicKey) - keyData.openpgp4fpr = `openpgp4fpr:${keyData.fingerprint.toLowerCase()}` - keyData.key.fetchMethod = 'hkp' - keyData.key.uri = key.fetchURL - keyData.key.data = {} - keyData = processKeyData(keyData) - - const keyoxideData = {} - keyoxideData.url = `https://${process.env.DOMAIN}/keybase/${username}/${fingerprint}` + .then(async profile => { + profile.addVerifier('keyoxide', `https://${process.env.DOMAIN}/keybase/${username}/${fingerprint}`) + profile = processOpenPgpProfile(profile) logger.debug('Generating a Keybase profile', { component: 'keybase_profile_generator', action: 'done', username, fingerprint }) - return { - key, - keyData, - keyoxide: keyoxideData, - extra: await computeExtraData(key, keyData), - errors: [] - } + return profile }) .catch(err => { logger.warn('Failed to generate a Keybase profile', { component: 'keybase_profile_generator', action: 'failure', error: err.message, username, fingerprint }) return { - key: {}, - keyData: {}, - keyoxide: {}, - extra: {}, errors: [err.message] } }) } -const processKeyData = (keyData) => { - keyData.users.forEach(user => { +const processAspProfile = async (/** @type {import('doipjs').Profile */ profile) => { + profile.personas.forEach(persona => { // Remove faulty claims - user.claims = user.claims.filter(claim => { + persona.claims = persona.claims.filter(claim => { return claim instanceof doipjs.Claim }) // Match claims - user.claims.forEach(claim => { + persona.claims.forEach(claim => { claim.match() }) // Sort claims - user.claims.sort((a, b) => { + persona.claims.sort((a, b) => { if (a.matches.length === 0) return 1 if (b.matches.length === 0) return -1 - if (a.matches[0].serviceprovider.name < b.matches[0].serviceprovider.name) { + if (a.matches[0].about.name < b.matches[0].about.name) { return -1 } - if (a.matches[0].serviceprovider.name > b.matches[0].serviceprovider.name) { + if (a.matches[0].about.name > b.matches[0].about.name) { return 1 } return 0 }) }) - keyData.primaryUserIndex ||= 0 + // Overwrite avatarUrl + // TODO: don't overwrite avatarUrl once it's fully supported + profile.personas[profile.primaryPersonaIndex].avatarUrl = `https://api.dicebear.com/6.x/shapes/svg?seed=${profile.publicKey.fingerprint}&size=128` - return keyData + return profile +} + +const processOpenPgpProfile = async (/** @type {import('doipjs').Profile */ profile) => { + profile.personas.forEach(persona => { + // Remove faulty claims + persona.claims = persona.claims.filter(claim => { + return claim instanceof doipjs.Claim + }) + + // Match claims + persona.claims.forEach(claim => { + claim.match() + }) + + // Sort claims + persona.claims.sort((a, b) => { + if (a.matches.length === 0) return 1 + if (b.matches.length === 0) return -1 + + if (a.matches[0].about.name < b.matches[0].about.name) { + return -1 + } + if (a.matches[0].about.name > b.matches[0].about.name) { + return 1 + } + return 0 + }) + }) + + // Overwrite avatarUrl + // TODO: don't overwrite avatarUrl once it's fully supported + profile.personas[profile.primaryPersonaIndex].avatarUrl = await libravatar.get_avatar_url({ email: profile.personas[profile.primaryPersonaIndex].email, size: 128, default: 'mm', https: true }) + + return profile } const computeExtraData = async (key, keyData) => { @@ -265,6 +265,7 @@ const computeExtraData = async (key, keyData) => { } } +export { generateAspeProfile } export { generateWKDProfile } export { generateHKPProfile } export { generateAutoProfile } diff --git a/src/server/keys.js b/src/server/openpgpProfiles.js similarity index 69% rename from src/server/keys.js rename to src/server/openpgpProfiles.js index 5b61aff..8bec8fd 100644 --- a/src/server/keys.js +++ b/src/server/openpgpProfiles.js @@ -39,10 +39,9 @@ const c = process.env.ENABLE_EXPERIMENTAL_CACHE ? new Keyv() : null const fetchWKD = (id) => { return new Promise((resolve, reject) => { (async () => { - const output = { - publicKey: null, - fetchURL: null - } + let publicKey = null + let profile = null + let fetchURL = null if (!id.includes('@')) { reject(new Error(`The WKD identifier "${id}" is invalid`)) @@ -59,14 +58,14 @@ const fetchWKD = (id) => { const hash = createHash('md5').update(id).digest('hex') if (c && await c.get(hash)) { - plaintext = Uint8Array.from((await c.get(hash)).split(',')) + profile = doipjs.Claim.fromJson(JSON.parse(await c.get(hash))) } - if (!plaintext) { + if (!profile) { try { plaintext = await got(urlAdvanced).then((response) => { if (response.statusCode === 200) { - output.fetchURL = urlAdvanced + fetchURL = urlAdvanced return new Uint8Array(response.rawBody) } else { return null @@ -76,7 +75,7 @@ const fetchWKD = (id) => { try { plaintext = await got(urlDirect).then((response) => { if (response.statusCode === 200) { - output.fetchURL = urlDirect + fetchURL = urlDirect return new Uint8Array(response.rawBody) } else { return null @@ -91,24 +90,29 @@ const fetchWKD = (id) => { reject(new Error('No public keys could be fetched using WKD')) } - if (c && plaintext instanceof Uint8Array) { - await c.set(hash, plaintext.toString(), 60 * 1000) + try { + publicKey = await readKey({ + binaryKey: plaintext + }) + } catch (error) { + reject(new Error('No public keys could be read from the data fetched using WKD')) } + + if (!publicKey) { + reject(new Error('No public keys could be read from the data fetched using WKD')) + } + + profile = await doipjs.openpgp.parsePublicKey(publicKey) + profile.publicKey.fetch.method = 'wkd' + profile.publicKey.fetch.query = id + profile.publicKey.fetch.resolvedUrl = fetchURL } - try { - output.publicKey = await readKey({ - binaryKey: plaintext - }) - } catch (error) { - reject(new Error('No public keys could be read from the data fetched using WKD')) + if (c && plaintext instanceof Uint8Array) { + await c.set(hash, JSON.stringify(profile), 60 * 1000) } - if (!output.publicKey) { - reject(new Error('No public keys could be read from the data fetched using WKD')) - } - - resolve(output) + resolve(profile) })() }) } @@ -116,10 +120,8 @@ const fetchWKD = (id) => { const fetchHKP = (id, keyserverDomain) => { return new Promise((resolve, reject) => { (async () => { - const output = { - publicKey: null, - fetchURL: null - } + let profile = null + let fetchURL = null const keyserverDomainNormalized = keyserverDomain || 'keys.openpgp.org' @@ -135,31 +137,36 @@ const fetchHKP = (id, keyserverDomain) => { query = `0x${sanitizedId}` } - output.fetchURL = `https://${keyserverDomainNormalized}/pks/lookup?op=get&options=mr&search=${query}` + fetchURL = `https://${keyserverDomainNormalized}/pks/lookup?op=get&options=mr&search=${query}` const hash = createHash('md5').update(`${query}__${keyserverDomainNormalized}`).digest('hex') if (c && await c.get(hash)) { - output.publicKey = await readKey({ - armoredKey: await c.get(hash) - }) - } else { + profile = doipjs.Claim.fromJson(JSON.parse(await c.get(hash))) + } + + if (!profile) { try { - output.publicKey = await doipjs.keys.fetchHKP(query, keyserverDomainNormalized) + profile = await doipjs.openpgp.fetchHKP(query, keyserverDomainNormalized) } catch (error) { - reject(new Error('No public keys could be fetched using HKP')) + profile = null } } - if (!output.publicKey) { + if (!profile) { reject(new Error('No public keys could be fetched using HKP')) + return } - if (c && output.publicKey instanceof PublicKey) { - await c.set(hash, output.publicKey.armor(), 60 * 1000) + profile.publicKey.fetch.method = 'hkp' + profile.publicKey.fetch.query = id + profile.publicKey.fetch.resolvedUrl = fetchURL + + if (c && profile instanceof doipjs.Profile) { + await c.set(hash, JSON.stringify(profile), 60 * 1000) } - resolve(output) + resolve(profile) })() }) } @@ -167,11 +174,7 @@ const fetchHKP = (id, keyserverDomain) => { const fetchSignature = (signature) => { return new Promise((resolve, reject) => { (async () => { - const output = { - publicKey: null, - fetchURL: null, - keyData: null - } + let profile = null // Check validity of signature let signatureData @@ -185,30 +188,18 @@ const fetchSignature = (signature) => { // Process the signature try { - output.keyData = await doipjs.signatures.process(signature) - output.publicKey = output.keyData.key.data + profile = await doipjs.signatures.parse(signature) // TODO Find the URL to the key - output.fetchURL = null } catch (error) { reject(new Error(`Signature could not be properly read (${error.message})`)) } // Check if a key was fetched - if (!output.publicKey) { - reject(new Error('No public keys could be fetched')) + if (!profile) { + reject(new Error('No profile could be fetched')) } - // Check validity of signature - const verified = await verify({ - message: signatureData, - verificationKeys: output.publicKey - }) - - if (!await verified.signatures[0].verified) { - reject(new Error('Signature was invalid')) - } - - resolve(output) + resolve(profile) })() }) } @@ -216,23 +207,24 @@ const fetchSignature = (signature) => { const fetchKeybase = (username, fingerprint) => { return new Promise((resolve, reject) => { (async () => { - const output = { - publicKey: null, - fetchURL: null - } + let profile = null + let fetchURL = null try { - output.publicKey = await doipjs.keys.fetchKeybase(username, fingerprint) - output.fetchURL = `https://keybase.io/${username}/pgp_keys.asc?fingerprint=${fingerprint}` + profile = await doipjs.openpgp.fetchKeybase(username, fingerprint) + fetchURL = `https://keybase.io/${username}/pgp_keys.asc?fingerprint=${fingerprint}` } catch (error) { reject(new Error('No public keys could be fetched from Keybase')) } - if (!output.publicKey) { + if (!profile) { reject(new Error('No public keys could be fetched from Keybase')) } - resolve(output) + profile.publicKey.fetch.method = 'http' + profile.publicKey.fetch.resolvedUrl = fetchURL + + resolve(profile) })() }) } diff --git a/src/server/utils.js b/src/server/utils.js index cd83172..30884e2 100644 --- a/src/server/utils.js +++ b/src/server/utils.js @@ -39,7 +39,7 @@ export function generatePageTitle (type, data) { switch (type) { case 'profile': try { - return `${data.keyData.users[data.keyData.primaryUserIndex].userData.name} - Keyoxide` + return `${data.personas[data.primaryPersonaIndex].name} - Keyoxide` } catch (error) { return 'Profile - Keyoxide' } From 9864a5fb6685fdd92ca044c491d3462365523c11 Mon Sep 17 00:00:00 2001 From: Yarmo Mackenbach Date: Thu, 13 Jul 2023 11:11:16 +0200 Subject: [PATCH 6/9] feat: update client code --- static-src/kx-claim.js | 32 +++++++++++--------------------- static-src/kx-key.js | 36 +++++++++++++++++++----------------- static-src/utils.js | 19 ++++--------------- 3 files changed, 34 insertions(+), 53 deletions(-) diff --git a/static-src/kx-claim.js b/static-src/kx-claim.js index fa4ab83..1e3d3b4 100644 --- a/static-src/kx-claim.js +++ b/static-src/kx-claim.js @@ -45,7 +45,7 @@ export class Claim extends HTMLElement { } async verify() { - const claim = new doipjs.Claim(JSON.parse(this.getAttribute('data-claim'))); + const claim = doipjs.Claim.fromJson(JSON.parse(this.getAttribute('data-claim'))); await claim.verify({ proxy: { policy: 'adaptive', @@ -57,24 +57,14 @@ export class Claim extends HTMLElement { updateContent(value) { const root = this; - const claim = new doipjs.Claim(JSON.parse(value)); + const claim = doipjs.Claim.fromJson(JSON.parse(value)); - switch (claim.matches[0].serviceprovider.name) { - case 'dns': - case 'xmpp': - case 'irc': - root.querySelector('.info .subtitle').innerText = claim.matches[0].serviceprovider.name.toUpperCase(); - break; - - default: - root.querySelector('.info .subtitle').innerText = claim.matches[0].serviceprovider.name; - break; - } + root.querySelector('.info .subtitle').innerText = claim.matches[0].about.name; root.querySelector('.info .title').innerText = claim.matches[0].profile.display; try { - if (claim.status === 'verified') { - root.querySelector('.icons .verificationStatus').setAttribute('data-value', claim.verification.result ? 'success' : 'failed'); + if (claim.status >= 200) { + root.querySelector('.icons .verificationStatus').setAttribute('data-value', claim.status < 300 ? 'success' : 'failed'); } else { root.querySelector('.icons .verificationStatus').setAttribute('data-value', 'running'); } @@ -86,7 +76,7 @@ export class Claim extends HTMLElement { elContent.innerHTML = ``; // Handle failed ambiguous claim - if (claim.status === 'verified' && !claim.verification.result && claim.isAmbiguous()) { + if (claim.status >= 300 && claim.isAmbiguous()) { root.querySelector('.info .subtitle').innerText = '---'; const subsection_alert = elContent.appendChild(document.createElement('div')); @@ -119,8 +109,8 @@ export class Claim extends HTMLElement { } const proof_link = subsection_links_text.appendChild(document.createElement('p')); - if (claim.matches[0].proof.uri) { - proof_link.innerHTML = `Proof link: ${claim.matches[0].proof.uri}`; + if (claim.matches[0].proof.request.uri) { + proof_link.innerHTML = `Proof link: ${claim.matches[0].proof.request.uri}`; } else { proof_link.innerHTML = `Proof link: not accessible from browser`; } @@ -155,7 +145,7 @@ export class Claim extends HTMLElement { const subsection_status_text = subsection_status.appendChild(document.createElement('div')); const verification = subsection_status_text.appendChild(document.createElement('p')); - if (claim.status === 'verified') { + if (claim.status >= 200) { verification.innerHTML = `Claim verification has completed.`; subsection_status_icon.setAttribute('src', '/static/img/check-decagram.svg'); subsection_status_icon.setAttribute('alt', ''); @@ -177,10 +167,10 @@ export class Claim extends HTMLElement { const subsection_result_text = subsection_result.appendChild(document.createElement('div')); const result = subsection_result_text.appendChild(document.createElement('p')); - result.innerHTML = `The claim ${claim.verification.result ? 'HAS BEEN' : 'COULD NOT BE'} verified by the proof.`; + result.innerHTML = `The claim ${claim.status >= 200 && claim.status < 300 ? 'HAS BEEN' : 'COULD NOT BE'} verified by the proof.`; // Additional info - if (claim.verification.proof.viaProxy) { + if (claim.status === 201) { elContent.appendChild(document.createElement('hr')); const subsection_info = elContent.appendChild(document.createElement('div')); diff --git a/static-src/kx-key.js b/static-src/kx-key.js index 42a67b9..442fbcc 100644 --- a/static-src/kx-key.js +++ b/static-src/kx-key.js @@ -46,7 +46,7 @@ export class Key extends HTMLElement { const root = this; const data = JSON.parse(value); - root.querySelector('.info .subtitle').innerText = data.key.fetchMethod; + root.querySelector('.info .subtitle').innerText = `${data.keyType} / ${data.fetch.method}`; root.querySelector('.info .title').innerText = data.fingerprint; const elContent = root.querySelector('.content'); @@ -62,22 +62,24 @@ export class Key extends HTMLElement { const subsection_links_text = subsection_links.appendChild(document.createElement('div')); const profile_link = subsection_links_text.appendChild(document.createElement('p')); - profile_link.innerHTML = `Key link: ${data.key.uri}`; + profile_link.innerHTML = `Key link: ${data.fetch.resolvedUrl}`; - elContent.appendChild(document.createElement('hr')); - - // QR Code - const subsection_qr = elContent.appendChild(document.createElement('div')); - subsection_qr.setAttribute('class', 'subsection'); - const subsection_qr_icon = subsection_qr.appendChild(document.createElement('img')); - subsection_qr_icon.setAttribute('src', '/static/img/qrcode.svg'); - subsection_qr_icon.setAttribute('alt', ''); - subsection_qr_icon.setAttribute('aria-hidden', 'true'); - const subsection_qr_text = subsection_qr.appendChild(document.createElement('div')); - - const button_fingerprintQR = subsection_qr_text.appendChild(document.createElement('button')); - button_fingerprintQR.innerText = `Show OpenPGP fingerprint QR`; - button_fingerprintQR.setAttribute('onClick', `window.showQR('${data.fingerprint}', 'fingerprint')`); - button_fingerprintQR.setAttribute('aria-label', `Show QR code for cryptographic fingerprint`); + if (data.keyType === 'openpgp') { + elContent.appendChild(document.createElement('hr')); + + // QR Code + const subsection_qr = elContent.appendChild(document.createElement('div')); + subsection_qr.setAttribute('class', 'subsection'); + const subsection_qr_icon = subsection_qr.appendChild(document.createElement('img')); + subsection_qr_icon.setAttribute('src', '/static/img/qrcode.svg'); + subsection_qr_icon.setAttribute('alt', ''); + subsection_qr_icon.setAttribute('aria-hidden', 'true'); + const subsection_qr_text = subsection_qr.appendChild(document.createElement('div')); + + const button_fingerprintQR = subsection_qr_text.appendChild(document.createElement('button')); + button_fingerprintQR.innerText = `Show OpenPGP fingerprint QR`; + button_fingerprintQR.setAttribute('onClick', `window.showQR('${data.fingerprint}', 'fingerprint')`); + button_fingerprintQR.setAttribute('aria-label', `Show QR code for cryptographic fingerprint`); + } } } \ No newline at end of file diff --git a/static-src/utils.js b/static-src/utils.js index 50e21b5..b87f28e 100644 --- a/static-src/utils.js +++ b/static-src/utils.js @@ -74,33 +74,22 @@ export async function generateProfileURL(data) { // Fetch OpenPGP key based on information stored in window export async function fetchProfileKey() { - if (window.kx.key.object && window.kx.key.object instanceof openpgp.PublicKey) { + if (window.kx.publicKey.key && window.kx.publicKey.key instanceof openpgp.PublicKey) { return; } - const rawKeyData = await fetch(window.kx.key.url) let key, errorMsg try { key = (await openpgp.readKey({ - binaryKey: new Uint8Array(await rawKeyData.clone().arrayBuffer()) + armoredKey: window.kx.publicKey.encodedKey })) - } catch(error) { + } catch (error) { errorMsg = error.message } - if (!key) { - try { - key = (await openpgp.readKey({ - armoredKey: await rawKeyData.clone().text() - })) - } catch (error) { - errorMsg = error.message - } - } - if (key) { - window.kx.key.object = key + window.kx.publicKey.key = key return } else { throw new Error(`Public key could not be fetched (${errorMsg})`) From 348df9f17f99c543ed7f7ecac9b7cb74d5c4552d Mon Sep 17 00:00:00 2001 From: Yarmo Mackenbach Date: Thu, 13 Jul 2023 11:11:33 +0200 Subject: [PATCH 7/9] feat: update templates --- views/profile.pug | 64 +++++++++++++++++++--------------------- views/templates/base.pug | 2 ++ 2 files changed, 32 insertions(+), 34 deletions(-) diff --git a/views/profile.pug b/views/profile.pug index 93de2c2..95db723 100644 --- a/views/profile.pug +++ b/views/profile.pug @@ -1,20 +1,23 @@ extends templates/base.pug -mixin generateUser(user, isPrimary) +mixin generatePersona(persona, isPrimary) h2 - span.p-email #{user.userData.email} + if persona.email + span.p-email Identity claims (#{persona.email}) + else + span.p-email Identity claims if isPrimary small.primary primary - if user.userData.comment - span.p-comment ⓘ #{user.userData.comment} - each claim in user.claims + if persona.description + span.p-comment ⓘ #{persona.description} + each claim in persona.claims if claim.matches.length > 0 kx-claim.kx-item(data-claim=claim) details(aria-label="Claim") summary .info - p.subtitle= claim.matches[0].serviceprovider.name - p.title= claim.matches[0].profile.display + p.subtitle= claim.display.serviceproviderName + p.title= claim.display.name .icons .verificationStatus(data-value='running') .inProgress @@ -22,12 +25,12 @@ mixin generateUser(user, isPrimary) .subsection img(src='/static/img/link.png') div - if (claim.matches[0].profile.uri) + if (claim.display.url) p Profile link: - a(rel='me' href=claim.matches[0].profile.uri aria-label="Link to profile")= claim.matches[0].profile.uri + a(rel='me' href=claim.display.url aria-label="Link to profile")= claim.display.url else p Profile link: not accessible from browser - if (claim.matches[0].proof.uri) + if (claim.matches.length === 1 && claim.matches[0].proof.uri) p Proof link: a(href=claim.matches[0].proof.uri aria-label="Link to proof")= claim.matches[0].proof.uri else @@ -36,10 +39,7 @@ mixin generateUser(user, isPrimary) block content script. kx = { - key: { - url: "!{data && data.key && data.key.fetchURL ? data.key.fetchURL : null}", - object: null - } + publicKey: !{JSON.stringify(data.publicKey)} } if (data && 'errors' in data && data.errors.length > 0) @@ -80,12 +80,7 @@ block content dialog#dialog--verifySignature div form(method='post') - label(for="sigVerInput") Signature - textarea#sigVerInput.input(name='signature') - input.no-margin(type='submit' name='submit' value='VERIFY SIGNATURE') - br - br - label(for="sigVerOutput") Verification result + label(for="sigVerInput") Signature name textarea#sigVerOutput.output(name='message' placeholder='Waiting for input' readonly) form(method="dialog") input(type="submit" value="Close") @@ -108,9 +103,9 @@ block content unless (isSignature && !signature) #profileHeader.card.card--transparent.card--profileHeader - img#profileAvatar.u-logo(src=data.extra.avatarURL alt="avatar") + img#profileAvatar.u-logo(src=data.personas[data.primaryPersonaIndex].avatarUrl alt="avatar") - p#profileName.p-name= data.keyData.users[data.keyData.primaryUserIndex].userData.name + p#profileName.p-name= data.personas[data.primaryPersonaIndex].name if (enable_message_encryption || enable_signature_verification) .button-wrapper @@ -119,27 +114,28 @@ block content if (enable_signature_verification) button(onClick="document.querySelector('#dialog--verifySignature').showModal();") Verify signature - +generateUser(data.keyData.users[data.keyData.primaryUserIndex], true) - each user, index in data.keyData.users - unless index == data.keyData.primaryUserIndex - +generateUser(user, false) + +generatePersona(data.personas[data.primaryPersonaIndex], true && data.personas.length > 1) + each persona, index in data.personas + unless index == data.primaryPersonaIndex + +generatePersona(persona, false) #profileProofs.card.card--transparent h2 Key - kx-key.kx-item(data-keydata=data.keyData) + kx-key.kx-item(data-keydata=data.publicKey) details(aria-label="Key") summary .info - p.subtitle= data.keyData.key.fetchMethod - p.title= data.keyData.fingerprint + p.subtitle= data.publicKey.fetch.method + p.title= data.identifier .content .subsection img(src='/static/img/link.png') div p Key link: - a.u-key(href=data.keyData.key.uri rel="pgpkey" aria-label="Link to cryptographic key")= data.keyData.key.uri + a.u-key(href=data.publicKey.fetch.resolvedUrl rel="pgpkey" aria-label="Link to cryptographic key")= data.publicKey.fetch.resolvedUrl hr - .subsection - img(src='/static/img/qrcode.png') - div - button(onClick=`showQR('${data.keyData.fingerprint}', 'fingerprint')` aria-label='Show QR code for cryptographic fingerprint') Show OpenPGP fingerprint QR \ No newline at end of file + if (data.profileType === 'openpgp') + .subsection + img(src='/static/img/qrcode.png') + div + button(onClick=`showQR('${data.publicKey.fingerprint}', 'fingerprint')` aria-label='Show QR code for cryptographic fingerprint') Show OpenPGP fingerprint QR \ No newline at end of file diff --git a/views/templates/base.pug b/views/templates/base.pug index 3088428..9dbf6c0 100644 --- a/views/templates/base.pug +++ b/views/templates/base.pug @@ -18,4 +18,6 @@ html(lang='en') link(rel='stylesheet' href='/static/main.css') script(type='application/javascript' defer src='/static/openpgp.js' charset='utf-8') + script(type='application/javascript' defer src='/static/doipFetchers.js' charset='utf-8') + script(type='application/javascript' defer src='/static/doip.js' charset='utf-8') script(type='application/javascript' defer src='/static/main.js' charset='utf-8') \ No newline at end of file From 2760adf5f86ed73799af5b1c712bf399cbd7c5e2 Mon Sep 17 00:00:00 2001 From: Yarmo Mackenbach Date: Thu, 13 Jul 2023 11:12:07 +0200 Subject: [PATCH 8/9] feat: update project --- package.json | 4 +-- webpack.config.js | 13 ++++--- yarn.lock | 91 ++++++++++------------------------------------- 3 files changed, 29 insertions(+), 79 deletions(-) diff --git a/package.json b/package.json index c2deaa5..3a5d0bb 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "bent": "^7.3.12", "body-parser": "^1.19.0", "dialog-polyfill": "^0.5.6", - "doipjs": "^0.19.0", + "doipjs": "^1.0.0", "dotenv": "^16.0.3", "express": "^4.17.1", "express-validator": "^6.13.0", @@ -28,7 +28,7 @@ "devDependencies": { "@vercel/ncc": "^0.34.0", "chai": "^4.3.6", - "copy-webpack-plugin": "^10.2.4", + "copy-webpack-plugin": "^11.0.0", "css-loader": "^6.6.0", "license-check-and-add": "^4.0.5", "mini-css-extract-plugin": "^2.5.3", diff --git a/webpack.config.js b/webpack.config.js index a68d06a..fcbc590 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -13,10 +13,8 @@ export default (env) => { mode: env.mode, entry: { main: { - import: './static-src/index.js', - dependOn: 'openpgp', - }, - openpgp: './node_modules/openpgp/dist/openpgp.js', + import: './static-src/index.js' + } }, output: { filename: '[name].js', @@ -62,12 +60,19 @@ export default (env) => { new CopyPlugin({ patterns: [ { from: './static-src/files/', to: '../static/' }, + { from: './node_modules/openpgp/dist/openpgp.js', to: '../static/openpgp.js' }, + { from: './node_modules/doipjs/dist/doip.core.js', to: '../static/doip.js' }, + { from: './node_modules/doipjs/dist/doip.fetchers.minimal.js', to: '../static/doipFetchers.js' }, ], options: { concurrency: 10, }, }), ], + externals: { + doipjs: 'doip', + openpgp: 'openpgp' + } } } else { return {} diff --git a/yarn.lock b/yarn.lock index 4c14572..d24e058 100644 --- a/yarn.lock +++ b/yarn.lock @@ -458,61 +458,31 @@ resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== -"@rometools/cli-darwin-arm64@11.0.0": - version "11.0.0" - resolved "https://registry.yarnpkg.com/@rometools/cli-darwin-arm64/-/cli-darwin-arm64-11.0.0.tgz#8f916df0580fede2325434a50ed5b1f2cf972696" - integrity sha512-F3vkdY+s3FLIEnAjSbyHTuIPB88cLpccimW4ecid5I7S6GzGG3iUJI4xT00JhH73K4P/qW20/9r+kH1T9Du8Xg== - "@rometools/cli-darwin-arm64@12.1.3": version "12.1.3" resolved "https://registry.yarnpkg.com/@rometools/cli-darwin-arm64/-/cli-darwin-arm64-12.1.3.tgz#b00fe225e34047c4dac63588e237b11ebec47694" integrity sha512-AmFTUDYjBuEGQp/Wwps+2cqUr+qhR7gyXAUnkL5psCuNCz3807TrUq/ecOoct5MIavGJTH6R4aaSL6+f+VlBEg== -"@rometools/cli-darwin-x64@11.0.0": - version "11.0.0" - resolved "https://registry.yarnpkg.com/@rometools/cli-darwin-x64/-/cli-darwin-x64-11.0.0.tgz#1393a5bba26e8c5352737270a1a98f2759f40d14" - integrity sha512-X6jhtS6Iml4GOzgNtnLwIp/KXXhSdqeVyfv69m/AHnIzx3gQAjPZ7BPnJLvTCbhe4SKHL+uTZYFSCJpkUUKE6w== - "@rometools/cli-darwin-x64@12.1.3": version "12.1.3" resolved "https://registry.yarnpkg.com/@rometools/cli-darwin-x64/-/cli-darwin-x64-12.1.3.tgz#e5bbf02afb1aab7447e743092245dea992b4b29f" integrity sha512-k8MbWna8q4LRlb005N2X+JS1UQ+s3ZLBBvwk4fP8TBxlAJXUz17jLLu/Fi+7DTTEmMhM84TWj4FDKW+rNar28g== -"@rometools/cli-linux-arm64@11.0.0": - version "11.0.0" - resolved "https://registry.yarnpkg.com/@rometools/cli-linux-arm64/-/cli-linux-arm64-11.0.0.tgz#efbfd36013455fc5d940b24b1b195a43aba87bcb" - integrity sha512-dktTJJlTpmycBZ2TwhJBcAO8ztK8DdevdyZnFFxdYRvtmJgTjIsC2UFayf/SbKew8B8q1IhI0it+D6ihAeIpeg== - "@rometools/cli-linux-arm64@12.1.3": version "12.1.3" resolved "https://registry.yarnpkg.com/@rometools/cli-linux-arm64/-/cli-linux-arm64-12.1.3.tgz#e75b01b74c134edc811e21fa7e1e440602930d59" integrity sha512-X/uLhJ2/FNA3nu5TiyeNPqiD3OZoFfNfRvw6a3ut0jEREPvEn72NI7WPijH/gxSz55znfQ7UQ6iM4DZumUknJg== -"@rometools/cli-linux-x64@11.0.0": - version "11.0.0" - resolved "https://registry.yarnpkg.com/@rometools/cli-linux-x64/-/cli-linux-x64-11.0.0.tgz#675532d9f603b88ab0686da800ec711b45d22085" - integrity sha512-WVcnXPNdWGUWo0p4NU8YzuthjYR7q+b4vRcjdxtP1DlpphZmSsoC/RSE85nEqRAz8hChcKUansVzOPM8BSsuGA== - "@rometools/cli-linux-x64@12.1.3": version "12.1.3" resolved "https://registry.yarnpkg.com/@rometools/cli-linux-x64/-/cli-linux-x64-12.1.3.tgz#2b9f4a68079783f275d4d27df83e4fa2220ec6fc" integrity sha512-csP17q1eWiUXx9z6Jr/JJPibkplyKIwiWPYNzvPCGE8pHlKhwZj3YHRuu7Dm/4EOqx0XFIuqqWZUYm9bkIC8xg== -"@rometools/cli-win32-arm64@11.0.0": - version "11.0.0" - resolved "https://registry.yarnpkg.com/@rometools/cli-win32-arm64/-/cli-win32-arm64-11.0.0.tgz#4d50f446acf2bc126cb58b5cff5a4d53b7c6a378" - integrity sha512-tPj6RThQzS7Q45jqQll7NlTYvNcsg/BEP3LYiiazqSh9FAFnMkrV6ewUcMPKWyAfiyLs7jlz4rRvdNRUSygzfQ== - "@rometools/cli-win32-arm64@12.1.3": version "12.1.3" resolved "https://registry.yarnpkg.com/@rometools/cli-win32-arm64/-/cli-win32-arm64-12.1.3.tgz#714acb67ac4ea4c15e2bc6aea4dd290c76c8efc6" integrity sha512-RymHWeod57EBOJY4P636CgUwYA6BQdkQjh56XKk4pLEHO6X1bFyMet2XL7KlHw5qOTalzuzf5jJqUs+vf3jdXQ== -"@rometools/cli-win32-x64@11.0.0": - version "11.0.0" - resolved "https://registry.yarnpkg.com/@rometools/cli-win32-x64/-/cli-win32-x64-11.0.0.tgz#c6d48db5ea52b393dae7fe04bfe803ad8cee71a5" - integrity sha512-bmBai8WHxYjsGk1+je7ZTfCUCWq30WJI3pQM8pzTA674lfGTZ9ymJoZwTaIMSO4rL5V9mlO6uLunsBKso9VqOg== - "@rometools/cli-win32-x64@12.1.3": version "12.1.3" resolved "https://registry.yarnpkg.com/@rometools/cli-win32-x64/-/cli-win32-x64-12.1.3.tgz#b4f53491d2ca8f1234b3613b7cc73418ad8d76bb" @@ -1137,11 +1107,6 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array-union@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-3.0.1.tgz#da52630d327f8b88cfbfb57728e2af5cd9b6b975" - integrity sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw== - array.prototype.flat@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" @@ -1675,14 +1640,14 @@ cookie@0.5.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== -copy-webpack-plugin@^10.2.4: - version "10.2.4" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-10.2.4.tgz#6c854be3fdaae22025da34b9112ccf81c63308fe" - integrity sha512-xFVltahqlsRcyyJqQbDY6EYTtyQZF9rf+JPjwHObLdPFMEISqkFkr7mFoVOC6BfYS/dNThyoQKvziugm+OnwBg== +copy-webpack-plugin@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz#96d4dbdb5f73d02dd72d0528d1958721ab72e04a" + integrity sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ== dependencies: - fast-glob "^3.2.7" + fast-glob "^3.2.11" glob-parent "^6.0.1" - globby "^12.0.2" + globby "^13.1.1" normalize-path "^3.0.0" schema-utils "^4.0.0" serialize-javascript "^6.0.0" @@ -1865,10 +1830,10 @@ doctypes@^1.1.0: resolved "https://registry.yarnpkg.com/doctypes/-/doctypes-1.1.0.tgz#ea80b106a87538774e8a3a4a5afe293de489e0a9" integrity sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ== -doipjs@^0.19.0: - version "0.19.0" - resolved "https://registry.yarnpkg.com/doipjs/-/doipjs-0.19.0.tgz#6cbd93305dcca5e261b016acc29868ebbae680ab" - integrity sha512-fn+/Rvk8o0hReLAvZl9ohmaRr+Coxi7w1cve6YiBlKGxx8cteAfmnVQRZIbxzIvD4yShbR9uIjFjELM1iPsZrA== +doipjs@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/doipjs/-/doipjs-1.0.0.tgz#cb0fe9f324a8c3cd3ddb0a4bec009c772f06ab1e" + integrity sha512-KUIbHBE5fdIose6mml9uf4rd5m7cz2g3929DPs1EZamHV/V0M8RgUhGC4u6QGYYHREDrG3fOj43V9RrCG4hv5A== dependencies: "@openpgp/hkp-client" "^0.0.3" "@openpgp/wkd-client" "^0.0.4" @@ -1877,7 +1842,6 @@ doipjs@^0.19.0: axios "^0.25.0" browser-or-node "^1.3.0" cors "^2.8.5" - dotenv "^8.2.0" entities "^4.4.0" express "^4.17.1" express-validator "^6.10.0" @@ -1887,7 +1851,6 @@ doipjs@^0.19.0: merge-options "^3.0.3" openpgp "^5.5.0" rfc4648 "^1.5.2" - rome "^11.0.0" valid-url "^1.0.9" validator "^13.9.0" @@ -1896,11 +1859,6 @@ dotenv@^16.0.3: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.1.tgz#369034de7d7e5b120972693352a3bf112172cc3e" integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ== -dotenv@^8.2.0: - version "8.6.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" - integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== - duplexer@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" @@ -2356,7 +2314,7 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.0.3, fast-glob@^3.2.7: +fast-glob@^3.0.3, fast-glob@^3.2.11, fast-glob@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.0.tgz#7c40cb491e1e2ed5664749e87bfb516dbe8727c0" integrity sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA== @@ -2673,15 +2631,14 @@ globby@^10.0.1: merge2 "^1.2.3" slash "^3.0.0" -globby@^12.0.2: - version "12.2.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-12.2.0.tgz#2ab8046b4fba4ff6eede835b29f678f90e3d3c22" - integrity sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA== +globby@^13.1.1: + version "13.2.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.2.tgz#63b90b1bf68619c2135475cbd4e71e66aa090592" + integrity sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w== dependencies: - array-union "^3.0.1" dir-glob "^3.0.1" - fast-glob "^3.2.7" - ignore "^5.1.9" + fast-glob "^3.3.0" + ignore "^5.2.4" merge2 "^1.4.1" slash "^4.0.0" @@ -2851,7 +2808,7 @@ ignore-by-default@^1.0.1: resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== -ignore@^5.1.1, ignore@^5.1.2, ignore@^5.1.9, ignore@^5.2.0: +ignore@^5.1.1, ignore@^5.1.2, ignore@^5.2.0, ignore@^5.2.4: version "5.2.4" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== @@ -4328,18 +4285,6 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" -rome@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/rome/-/rome-11.0.0.tgz#cd2f00fadfd3611399eba9a2f87612e1f3299a23" - integrity sha512-rRo6JOwpMLc3OkeTDRXkrmrDqnxDvZ75GS4f0jLDBNmRgDXWbu0F8eVnJoRn+VbK2AE7vWvhVOMBjnWowcopkQ== - optionalDependencies: - "@rometools/cli-darwin-arm64" "11.0.0" - "@rometools/cli-darwin-x64" "11.0.0" - "@rometools/cli-linux-arm64" "11.0.0" - "@rometools/cli-linux-x64" "11.0.0" - "@rometools/cli-win32-arm64" "11.0.0" - "@rometools/cli-win32-x64" "11.0.0" - rome@^12.1: version "12.1.3" resolved "https://registry.yarnpkg.com/rome/-/rome-12.1.3.tgz#4d4d62cad16216843680bd3ca11a4c248134902a" From b8114bad9e77e960792b77b1d32b3b40b0419fe9 Mon Sep 17 00:00:00 2001 From: Yarmo Mackenbach Date: Thu, 13 Jul 2023 11:19:48 +0200 Subject: [PATCH 9/9] fix: fix linting issues --- src/api/v3/keyoxide_profile.js | 4 +- src/schemas.js | 507 ++++++++++++++++----------------- src/server/index.js | 11 - src/server/openpgpProfiles.js | 12 +- 4 files changed, 256 insertions(+), 278 deletions(-) diff --git a/src/api/v3/keyoxide_profile.js b/src/api/v3/keyoxide_profile.js index b1ba960..ed8ebd5 100644 --- a/src/api/v3/keyoxide_profile.js +++ b/src/api/v3/keyoxide_profile.js @@ -37,7 +37,7 @@ import { claimSchema, personaSchema, profileSchema, serviceProviderSchema } from dotenv.config() const router = express.Router() -const ajv = new Ajv({ +const ajv = new Ajv({ schemas: [profileSchema, personaSchema, claimSchema, serviceProviderSchema] }) @@ -157,7 +157,7 @@ router.get('/verify', return } - let profile = Claim.fromJson(req.query.data) + const profile = Claim.fromJson(req.query.data) // Do verification let data = await doVerification(profile) diff --git a/src/schemas.js b/src/schemas.js index 9ac16ae..9c4a77f 100644 --- a/src/schemas.js +++ b/src/schemas.js @@ -28,336 +28,335 @@ if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU AGPL, see . */ export const profileSchema = { - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://spec.keyoxide.org/2/profile.schema.json", - "title": "Profile", - "description": "Keyoxide profile with personas", - "type": "object", - "properties": { - "profileVersion": { - "description": "The version of the profile", - "type": "integer" + $schema: 'https://json-schema.org/draft/2020-12/schema', + $id: 'https://spec.keyoxide.org/2/profile.schema.json', + title: 'Profile', + description: 'Keyoxide profile with personas', + type: 'object', + properties: { + profileVersion: { + description: 'The version of the profile', + type: 'integer' }, - "profileType": { - "description": "The type of the profile [openpgp, asp]", - "type": "string" + profileType: { + description: 'The type of the profile [openpgp, asp]', + type: 'string' }, - "identifier": { - "description": "Identifier of the profile (email, fingerprint, URI)", - "type": "string" + identifier: { + description: 'Identifier of the profile (email, fingerprint, URI)', + type: 'string' }, - "personas": { - "description": "The personas inside the profile", - "type": "array", - "items": { - "$ref": "https://spec.keyoxide.org/2/persona.schema.json" + personas: { + description: 'The personas inside the profile', + type: 'array', + items: { + $ref: 'https://spec.keyoxide.org/2/persona.schema.json' }, - "minItems": 1, - "uniqueItems": true + minItems: 1, + uniqueItems: true }, - "primaryPersonaIndex": { - "description": "The index of the primary persona", - "type": "integer" + primaryPersonaIndex: { + description: 'The index of the primary persona', + type: 'integer' }, - "publicKey": { - "description": "The cryptographic key associated with the profile", - "type": "object", - "properties": { - "keyType": { - "description": "The type of cryptographic key [eddsa, es256, openpgp, none]", - "type": "string" + publicKey: { + description: 'The cryptographic key associated with the profile', + type: 'object', + properties: { + keyType: { + description: 'The type of cryptographic key [eddsa, es256, openpgp, none]', + type: 'string' }, - "encoding": { - "description": "The encoding of the cryptographic key [pem, jwk, armored_pgp, none]", - "type": "string" + encoding: { + description: 'The encoding of the cryptographic key [pem, jwk, armored_pgp, none]', + type: 'string' }, - "encodedKey": { - "description": "The encoded cryptographic key (PEM, stringified JWK, ...)", - "type": ["string", "null"] + encodedKey: { + description: 'The encoded cryptographic key (PEM, stringified JWK, ...)', + type: ['string', 'null'] }, - "fetch": { - "description": "Details on how to fetch the public key", - "type": "object", - "properties": { - "method": { - "description": "The method to fetch the key [aspe, hkp, wkd, http, none]", - "type": "string" + fetch: { + description: 'Details on how to fetch the public key', + type: 'object', + properties: { + method: { + description: 'The method to fetch the key [aspe, hkp, wkd, http, none]', + type: 'string' }, - "query": { - "description": "The query to fetch the key", - "type": ["string", "null"] + query: { + description: 'The query to fetch the key', + type: ['string', 'null'] }, - "resolvedUrl": { - "description": "The URL the method eventually resolved to", - "type": ["string", "null"] + resolvedUrl: { + description: 'The URL the method eventually resolved to', + type: ['string', 'null'] } } } }, - "required": [ - "keyType", - "fetch" + required: [ + 'keyType', + 'fetch' ] }, - "verifiers": { - "description": "A list of links to verifiers", - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "description": "Name of the verifier site", - "type": "string" + verifiers: { + description: 'A list of links to verifiers', + type: 'array', + items: { + type: 'object', + properties: { + name: { + description: 'Name of the verifier site', + type: 'string' }, - "url": { - "description": "URL to the profile page on the verifier site", - "type": "string" + url: { + description: 'URL to the profile page on the verifier site', + type: 'string' } } }, - "uniqueItems": true + uniqueItems: true } }, - "required": [ - "profileVersion", - "profileType", - "identifier", - "personas", - "primaryPersonaIndex", - "publicKey", - "verifiers" + required: [ + 'profileVersion', + 'profileType', + 'identifier', + 'personas', + 'primaryPersonaIndex', + 'publicKey', + 'verifiers' ], - "additionalProperties": false + additionalProperties: false } - export const personaSchema = { - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://spec.keyoxide.org/2/persona.schema.json", - "title": "Profile", - "description": "Keyoxide persona with identity claims", - "type": "object", - "properties": { - "identifier": { - "description": "Identifier of the persona", - "type": ["string", "null"] + $schema: 'https://json-schema.org/draft/2020-12/schema', + $id: 'https://spec.keyoxide.org/2/persona.schema.json', + title: 'Profile', + description: 'Keyoxide persona with identity claims', + type: 'object', + properties: { + identifier: { + description: 'Identifier of the persona', + type: ['string', 'null'] }, - "name": { - "description": "Name of the persona", - "type": "string" + name: { + description: 'Name of the persona', + type: 'string' }, - "email": { - "description": "Email address of the persona", - "type": ["string", "null"] + email: { + description: 'Email address of the persona', + type: ['string', 'null'] }, - "description": { - "description": "Description of the persona", - "type": ["string", "null"] + description: { + description: 'Description of the persona', + type: ['string', 'null'] }, - "avatarUrl": { - "description": "URL to an avatar image", - "type": ["string", "null"] + avatarUrl: { + description: 'URL to an avatar image', + type: ['string', 'null'] }, - "isRevoked": { - "type": "boolean" + isRevoked: { + type: 'boolean' }, - "claims": { - "description": "A list of identity claims", - "type": "array", - "items": { - "$ref": "https://spec.keyoxide.org/2/claim.schema.json" + claims: { + description: 'A list of identity claims', + type: 'array', + items: { + $ref: 'https://spec.keyoxide.org/2/claim.schema.json' }, - "uniqueItems": true + uniqueItems: true } }, - "required": [ - "name", - "claims" + required: [ + 'name', + 'claims' ], - "additionalProperties": false + additionalProperties: false } export const claimSchema = { - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://spec.keyoxide.org/2/claim.schema.json", - "title": "Identity claim", - "description": "Verifiable online identity claim", - "type": "object", - "properties": { - "claimVersion": { - "description": "The version of the claim", - "type": "integer" + $schema: 'https://json-schema.org/draft/2020-12/schema', + $id: 'https://spec.keyoxide.org/2/claim.schema.json', + title: 'Identity claim', + description: 'Verifiable online identity claim', + type: 'object', + properties: { + claimVersion: { + description: 'The version of the claim', + type: 'integer' }, - "uri": { - "description": "The claim URI", - "type": "string" + uri: { + description: 'The claim URI', + type: 'string' }, - "proofs": { - "description": "The proofs that would verify the claim", - "type": "array", - "items": { - "type": "string" + proofs: { + description: 'The proofs that would verify the claim', + type: 'array', + items: { + type: 'string' }, - "minItems": 1, - "uniqueItems": true + minItems: 1, + uniqueItems: true }, - "matches": { - "description": "Service providers matched to the claim", - "type": "array", - "items": { - "$ref": "https://spec.keyoxide.org/2/serviceprovider.schema.json" + matches: { + description: 'Service providers matched to the claim', + type: 'array', + items: { + $ref: 'https://spec.keyoxide.org/2/serviceprovider.schema.json' }, - "uniqueItems": true + uniqueItems: true }, - "status": { - "type": "integer", - "description": "Claim status code" + status: { + type: 'integer', + description: 'Claim status code' }, - "display": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Account name to display in the user interface" + display: { + type: 'object', + properties: { + name: { + type: 'string', + description: 'Account name to display in the user interface' }, - "url": { - "type": ["string", "null"], - "description": "URL to link to in the user interface" + url: { + type: ['string', 'null'], + description: 'URL to link to in the user interface' }, - "serviceProviderName": { - "type": ["string", "null"], - "description": "Name of the service provider to display in the user interface" + serviceProviderName: { + type: ['string', 'null'], + description: 'Name of the service provider to display in the user interface' } } } }, - "required": [ - "claimVersion", - "uri", - "proofs", - "status", - "display" + required: [ + 'claimVersion', + 'uri', + 'proofs', + 'status', + 'display' ], - "additionalProperties": false + additionalProperties: false } export const serviceProviderSchema = { - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://spec.keyoxide.org/2/serviceprovider.schema.json", - "title": "Service provider", - "description": "A service provider that can be matched to identity claims", - "type": "object", - "properties": { - "about": { - "description": "Details about the service provider", - "type": "object", - "properties": { - "name": { - "description": "Full name of the service provider", - "type": "string" + $schema: 'https://json-schema.org/draft/2020-12/schema', + $id: 'https://spec.keyoxide.org/2/serviceprovider.schema.json', + title: 'Service provider', + description: 'A service provider that can be matched to identity claims', + type: 'object', + properties: { + about: { + description: 'Details about the service provider', + type: 'object', + properties: { + name: { + description: 'Full name of the service provider', + type: 'string' }, - "id": { - "description": "Identifier of the service provider (no whitespace or symbols, lowercase)", - "type": "string" + id: { + description: 'Identifier of the service provider (no whitespace or symbols, lowercase)', + type: 'string' }, - "homepage": { - "description": "URL to the homepage of the service provider", - "type": ["string", "null"] + homepage: { + description: 'URL to the homepage of the service provider', + type: ['string', 'null'] } } }, - "profile": { - "description": "What the profile would look like if the match is correct", - "type": "object", - "properties": { - "display": { - "description": "Profile name to be displayed", - "type": "string" + profile: { + description: 'What the profile would look like if the match is correct', + type: 'object', + properties: { + display: { + description: 'Profile name to be displayed', + type: 'string' }, - "uri": { - "description": "URI or URL for public access to the profile", - "type": "string" + uri: { + description: 'URI or URL for public access to the profile', + type: 'string' }, - "qr": { - "description": "URI or URL associated with the profile usually served as a QR code", - "type": ["string", "null"] + qr: { + description: 'URI or URL associated with the profile usually served as a QR code', + type: ['string', 'null'] } } }, - "claim": { - "description": "Details from the claim matching process", - "type": "object", - "properties": { - "uriRegularExpression": { - "description": "Regular expression used to parse the URI", - "type": "string" + claim: { + description: 'Details from the claim matching process', + type: 'object', + properties: { + uriRegularExpression: { + description: 'Regular expression used to parse the URI', + type: 'string' }, - "uriIsAmbiguous": { - "description": "Whether this match automatically excludes other matches", - "type": "boolean" + uriIsAmbiguous: { + description: 'Whether this match automatically excludes other matches', + type: 'boolean' } } }, - "proof": { - "description": "Information for the proof verification process", - "type": "object", - "properties": { - "request": { - "description": "Details to request the potential proof", - "type": "object", - "properties": { - "uri": { - "description": "Location of the proof", - "type": ["string", "null"] + proof: { + description: 'Information for the proof verification process', + type: 'object', + properties: { + request: { + description: 'Details to request the potential proof', + type: 'object', + properties: { + uri: { + description: 'Location of the proof', + type: ['string', 'null'] }, - "accessRestriction": { - "description": "Type of access restriction [none, nocors, granted, server]", - "type": "string" + accessRestriction: { + description: 'Type of access restriction [none, nocors, granted, server]', + type: 'string' }, - "fetcher": { - "description": "Name of the fetcher to use", - "type": "string" + fetcher: { + description: 'Name of the fetcher to use', + type: 'string' }, - "data": { - "description": "Data needed by the fetcher or proxy to request the proof", - "type": "object", - "additionalProperties": true + data: { + description: 'Data needed by the fetcher or proxy to request the proof', + type: 'object', + additionalProperties: true } } }, - "response": { - "description": "Details about the expected response", - "type": "object", - "properties": { - "format": { - "description": "Expected format of the proof [text, json]", - "type": "string" - }, + response: { + description: 'Details about the expected response', + type: 'object', + properties: { + format: { + description: 'Expected format of the proof [text, json]', + type: 'string' + } } }, - "target": { - "description": "Details about the target located in the response", - "type": "array", - "items": { - "type": "object", - "properties": { - "format": { - "description": "How is the proof formatted [uri, fingerprint]", - "type": "string" + target: { + description: 'Details about the target located in the response', + type: 'array', + items: { + type: 'object', + properties: { + format: { + description: 'How is the proof formatted [uri, fingerprint]', + type: 'string' }, - "encoding": { - "description": "How is the proof encoded [plain, html, xml]", - "type": "string" + encoding: { + description: 'How is the proof encoded [plain, html, xml]', + type: 'string' }, - "relation": { - "description": "How are the response and the target related [contains, equals]", - "type": "string" + relation: { + description: 'How are the response and the target related [contains, equals]', + type: 'string' }, - "path": { - "description": "Path to the target location if the response is JSON", - "type": "array", - "items": { - "type": "string" + path: { + description: 'Path to the target location if the response is JSON', + type: 'array', + items: { + type: 'string' } } } @@ -366,11 +365,11 @@ export const serviceProviderSchema = { } } }, - "required": [ - "about", - "profile", - "claim", - "proof" + required: [ + 'about', + 'profile', + 'claim', + 'proof' ], - "additionalProperties": false + additionalProperties: false } diff --git a/src/server/index.js b/src/server/index.js index 176425d..d0b4a4f 100644 --- a/src/server/index.js +++ b/src/server/index.js @@ -145,7 +145,6 @@ const generateSignatureProfile = async (signature) => { return fetchSignature(signature) .then(async key => { let profile = await doipjs.signatures.parse(key.publicKey) - profile.addVerifier('keyoxide', keyoxideUrl) profile = processOpenPgpProfile(profile) logger.debug('Generating a signature profile', @@ -255,16 +254,6 @@ const processOpenPgpProfile = async (/** @type {import('doipjs').Profile */ prof return profile } -const computeExtraData = async (key, keyData) => { - // Get the primary user - const primaryUser = await key.publicKey.getPrimaryUser() - - // Query libravatar to get the avatar url - return { - avatarURL: await libravatar.get_avatar_url({ email: primaryUser.user.userID.email, size: 128, default: 'mm', https: true }) - } -} - export { generateAspeProfile } export { generateWKDProfile } export { generateHKPProfile } diff --git a/src/server/openpgpProfiles.js b/src/server/openpgpProfiles.js index 8bec8fd..2192bbe 100644 --- a/src/server/openpgpProfiles.js +++ b/src/server/openpgpProfiles.js @@ -29,7 +29,7 @@ more information on this, and how to apply and follow the GNU AGPL, see { (async () => { let profile = null - // Check validity of signature - let signatureData - try { - signatureData = await readCleartextMessage({ - cleartextMessage: signature - }) - } catch (error) { - reject(new Error(`Signature could not be properly read (${error.message})`)) - } - // Process the signature try { profile = await doipjs.signatures.parse(signature)