From 962f946b455e2eca0b8225e2571b7e6e5a0e3347 Mon Sep 17 00:00:00 2001 From: ludojmj Date: Sat, 22 Apr 2023 17:48:25 +0200 Subject: [PATCH] Upgrade react-oidc to 6.16.14 & cleanup --- client/jsconfig.json | 2 +- client/package-lock.json | 648 ++++++++---------- client/package.json | 12 +- client/public/OidcServiceWorker.js | 369 +--------- client/src/App.svelte | 4 +- client/src/components/oidc/AuthWrapper.svelte | 3 +- client/src/lib/const.js | 7 +- client/src/lib/oidc.js | 10 +- client/src/lib/store.js | 10 - 9 files changed, 283 insertions(+), 782 deletions(-) diff --git a/client/jsconfig.json b/client/jsconfig.json index ee5e92f..021c454 100644 --- a/client/jsconfig.json +++ b/client/jsconfig.json @@ -8,7 +8,7 @@ * a value or a type, so tell TypeScript to enforce using * `import type` instead of `import` for Types. */ - "importsNotUsedAsValues": "error", + "verbatimModuleSyntax": true, "isolatedModules": true, "resolveJsonModule": true, /** diff --git a/client/package-lock.json b/client/package-lock.json index e58edc4..2c71f73 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -8,20 +8,20 @@ "name": "svelte-netcore-identity", "version": "0.0.1", "devDependencies": { - "@axa-fr/vanilla-oidc": "^6.16.0", - "@sveltejs/vite-plugin-svelte": "^2.0.2", - "axios": "^1.2.2", + "@axa-fr/vanilla-oidc": "^6.16.14", + "@sveltejs/vite-plugin-svelte": "^2.0.4", + "axios": "^1.3.5", "bootstrap": "^5.2.3", - "sass": "^1.57.1", - "svelte": "^3.55.0", + "sass": "^1.61.0", + "svelte": "^3.58.0", "svelte-navigator": "^3.2.2", - "vite": "^4.0.4" + "vite": "^4.2.1" } }, "node_modules/@axa-fr/vanilla-oidc": { - "version": "6.16.0", - "resolved": "https://registry.npmjs.org/@axa-fr/vanilla-oidc/-/vanilla-oidc-6.16.0.tgz", - "integrity": "sha512-cBKU73RtrNBwbbeUKkGCjT/4s9QF7gNysN2Vb4e1JN8RuvN0fZ0/JFpwwgrlMKHZtBruqrpumC/E0tvGrHv2zA==", + "version": "6.16.14", + "resolved": "https://registry.npmjs.org/@axa-fr/vanilla-oidc/-/vanilla-oidc-6.16.14.tgz", + "integrity": "sha512-Cwy9QA7BWfw0Sd9yMeZ3SnuoW4JfyBPyEA6eT9EXVHYWjiMa2bZfYtUHNsdYobRMwkDlFVK7ObjMzd4+ki1//Q==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -29,9 +29,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.16.tgz", - "integrity": "sha512-BUuWMlt4WSXod1HSl7aGK8fJOsi+Tab/M0IDK1V1/GstzoOpqc/v3DqmN8MkuapPKQ9Br1WtLAN4uEgWR8x64A==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.17.tgz", + "integrity": "sha512-E6VAZwN7diCa3labs0GYvhEPL2M94WLF8A+czO8hfjREXxba8Ng7nM5VxV+9ihNXIY1iQO1XxUU4P7hbqbICxg==", "cpu": [ "arm" ], @@ -45,9 +45,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.16.tgz", - "integrity": "sha512-hFHVAzUKp9Tf8psGq+bDVv+6hTy1bAOoV/jJMUWwhUnIHsh6WbFMhw0ZTkqDuh7TdpffFoHOiIOIxmHc7oYRBQ==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.17.tgz", + "integrity": "sha512-jaJ5IlmaDLFPNttv0ofcwy/cfeY4bh/n705Tgh+eLObbGtQBK3EPAu+CzL95JVE4nFAliyrnEu0d32Q5foavqg==", "cpu": [ "arm64" ], @@ -61,9 +61,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.16.tgz", - "integrity": "sha512-9WhxJpeb6XumlfivldxqmkJepEcELekmSw3NkGrs+Edq6sS5KRxtUBQuKYDD7KqP59dDkxVbaoPIQFKWQG0KLg==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.17.tgz", + "integrity": "sha512-446zpfJ3nioMC7ASvJB1pszHVskkw4u/9Eu8s5yvvsSDTzYh4p4ZIRj0DznSl3FBF0Z/mZfrKXTtt0QCoFmoHA==", "cpu": [ "x64" ], @@ -77,9 +77,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.16.tgz", - "integrity": "sha512-8Z+wld+vr/prHPi2O0X7o1zQOfMbXWGAw9hT0jEyU/l/Yrg+0Z3FO9pjPho72dVkZs4ewZk0bDOFLdZHm8jEfw==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.17.tgz", + "integrity": "sha512-m/gwyiBwH3jqfUabtq3GH31otL/0sE0l34XKpSIqR7NjQ/XHQ3lpmQHLHbG8AHTGCw8Ao059GvV08MS0bhFIJQ==", "cpu": [ "arm64" ], @@ -93,9 +93,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.16.tgz", - "integrity": "sha512-CYkxVvkZzGCqFrt7EgjFxQKhlUPyDkuR9P0Y5wEcmJqVI8ncerOIY5Kej52MhZyzOBXkYrJgZeVZC9xXXoEg9A==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.17.tgz", + "integrity": "sha512-4utIrsX9IykrqYaXR8ob9Ha2hAY2qLc6ohJ8c0CN1DR8yWeMrTgYFjgdeQ9LIoTOfLetXjuCu5TRPHT9yKYJVg==", "cpu": [ "x64" ], @@ -109,9 +109,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.16.tgz", - "integrity": "sha512-fxrw4BYqQ39z/3Ja9xj/a1gMsVq0xEjhSyI4a9MjfvDDD8fUV8IYliac96i7tzZc3+VytyXX+XNsnpEk5sw5Wg==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.17.tgz", + "integrity": "sha512-4PxjQII/9ppOrpEwzQ1b0pXCsFLqy77i0GaHodrmzH9zq2/NEhHMAMJkJ635Ns4fyJPFOlHMz4AsklIyRqFZWA==", "cpu": [ "arm64" ], @@ -125,9 +125,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.16.tgz", - "integrity": "sha512-8p3v1D+du2jiDvSoNVimHhj7leSfST9YlKsAEO7etBfuqjaBMndo0fmjNLp0JCMld+XIx9L80tooOkyUv1a1PQ==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.17.tgz", + "integrity": "sha512-lQRS+4sW5S3P1sv0z2Ym807qMDfkmdhUYX30GRBURtLTrJOPDpoU0kI6pVz1hz3U0+YQ0tXGS9YWveQjUewAJw==", "cpu": [ "x64" ], @@ -141,9 +141,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.16.tgz", - "integrity": "sha512-bYaocE1/PTMRmkgSckZ0D0Xn2nox8v2qlk+MVVqm+VECNKDdZvghVZtH41dNtBbwADSvA6qkCHGYeWm9LrNCBw==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.17.tgz", + "integrity": "sha512-biDs7bjGdOdcmIk6xU426VgdRUpGg39Yz6sT9Xp23aq+IEHDb/u5cbmu/pAANpDB4rZpY/2USPhCA+w9t3roQg==", "cpu": [ "arm" ], @@ -157,9 +157,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.16.tgz", - "integrity": "sha512-N3u6BBbCVY3xeP2D8Db7QY8I+nZ+2AgOopUIqk+5yCoLnsWkcVxD2ay5E9iIdvApFi1Vg1lZiiwaVp8bOpAc4A==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.17.tgz", + "integrity": "sha512-2+pwLx0whKY1/Vqt8lyzStyda1v0qjJ5INWIe+d8+1onqQxHLLi3yr5bAa4gvbzhZqBztifYEu8hh1La5+7sUw==", "cpu": [ "arm64" ], @@ -173,9 +173,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.16.tgz", - "integrity": "sha512-dxjqLKUW8GqGemoRT9v8IgHk+T4tRm1rn1gUcArsp26W9EkK/27VSjBVUXhEG5NInHZ92JaQ3SSMdTwv/r9a2A==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.17.tgz", + "integrity": "sha512-IBTTv8X60dYo6P2t23sSUYym8fGfMAiuv7PzJ+0LcdAndZRzvke+wTVxJeCq4WgjppkOpndL04gMZIFvwoU34Q==", "cpu": [ "ia32" ], @@ -189,9 +189,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.16.tgz", - "integrity": "sha512-MdUFggHjRiCCwNE9+1AibewoNq6wf94GLB9Q9aXwl+a75UlRmbRK3h6WJyrSGA6ZstDJgaD2wiTSP7tQNUYxwA==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.17.tgz", + "integrity": "sha512-WVMBtcDpATjaGfWfp6u9dANIqmU9r37SY8wgAivuKmgKHE+bWSuv0qXEFt/p3qXQYxJIGXQQv6hHcm7iWhWjiw==", "cpu": [ "loong64" ], @@ -205,9 +205,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.16.tgz", - "integrity": "sha512-CO3YmO7jYMlGqGoeFeKzdwx/bx8Vtq/SZaMAi+ZLDUnDUdfC7GmGwXzIwDJ70Sg+P9pAemjJyJ1icKJ9R3q/Fg==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.17.tgz", + "integrity": "sha512-2kYCGh8589ZYnY031FgMLy0kmE4VoGdvfJkxLdxP4HJvWNXpyLhjOvxVsYjYZ6awqY4bgLR9tpdYyStgZZhi2A==", "cpu": [ "mips64el" ], @@ -221,9 +221,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.16.tgz", - "integrity": "sha512-DSl5Czh5hCy/7azX0Wl9IdzPHX2H8clC6G87tBnZnzUpNgRxPFhfmArbaHoAysu4JfqCqbB/33u/GL9dUgCBAw==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.17.tgz", + "integrity": "sha512-KIdG5jdAEeAKogfyMTcszRxy3OPbZhq0PPsW4iKKcdlbk3YE4miKznxV2YOSmiK/hfOZ+lqHri3v8eecT2ATwQ==", "cpu": [ "ppc64" ], @@ -237,9 +237,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.16.tgz", - "integrity": "sha512-sSVVMEXsqf1fQu0j7kkhXMViroixU5XoaJXl1u/u+jbXvvhhCt9YvA/B6VM3aM/77HuRQ94neS5bcisijGnKFQ==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.17.tgz", + "integrity": "sha512-Cj6uWLBR5LWhcD/2Lkfg2NrkVsNb2sFM5aVEfumKB2vYetkA/9Uyc1jVoxLZ0a38sUhFk4JOVKH0aVdPbjZQeA==", "cpu": [ "riscv64" ], @@ -253,9 +253,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.16.tgz", - "integrity": "sha512-jRqBCre9gZGoCdCN/UWCCMwCMsOg65IpY9Pyj56mKCF5zXy9d60kkNRdDN6YXGjr3rzcC4DXnS/kQVCGcC4yPQ==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.17.tgz", + "integrity": "sha512-lK+SffWIr0XsFf7E0srBjhpkdFVJf3HEgXCwzkm69kNbRar8MhezFpkIwpk0qo2IOQL4JE4mJPJI8AbRPLbuOQ==", "cpu": [ "s390x" ], @@ -269,9 +269,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.16.tgz", - "integrity": "sha512-G1+09TopOzo59/55lk5Q0UokghYLyHTKKzD5lXsAOOlGDbieGEFJpJBr3BLDbf7cz89KX04sBeExAR/pL/26sA==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.17.tgz", + "integrity": "sha512-XcSGTQcWFQS2jx3lZtQi7cQmDYLrpLRyz1Ns1DzZCtn898cWfm5Icx/DEWNcTU+T+tyPV89RQtDnI7qL2PObPg==", "cpu": [ "x64" ], @@ -285,9 +285,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.16.tgz", - "integrity": "sha512-xwjGJB5wwDEujLaJIrSMRqWkbigALpBNcsF9SqszoNKc+wY4kPTdKrSxiY5ik3IatojePP+WV108MvF6q6np4w==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.17.tgz", + "integrity": "sha512-RNLCDmLP5kCWAJR+ItLM3cHxzXRTe4N00TQyQiimq+lyqVqZWGPAvcyfUBM0isE79eEZhIuGN09rAz8EL5KdLA==", "cpu": [ "x64" ], @@ -301,9 +301,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.16.tgz", - "integrity": "sha512-yeERkoxG2nR2oxO5n+Ms7MsCeNk23zrby2GXCqnfCpPp7KNc0vxaaacIxb21wPMfXXRhGBrNP4YLIupUBrWdlg==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.17.tgz", + "integrity": "sha512-PAXswI5+cQq3Pann7FNdcpSUrhrql3wKjj3gVkmuz6OHhqqYxKvi6GgRBoaHjaG22HV/ZZEgF9TlS+9ftHVigA==", "cpu": [ "x64" ], @@ -317,9 +317,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.16.tgz", - "integrity": "sha512-nHfbEym0IObXPhtX6Va3H5GaKBty2kdhlAhKmyCj9u255ktAj0b1YACUs9j5H88NRn9cJCthD1Ik/k9wn8YKVg==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.17.tgz", + "integrity": "sha512-V63egsWKnx/4V0FMYkr9NXWrKTB5qFftKGKuZKFIrAkO/7EWLFnbBZNM1CvJ6Sis+XBdPws2YQSHF1Gqf1oj/Q==", "cpu": [ "x64" ], @@ -333,9 +333,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.16.tgz", - "integrity": "sha512-pdD+M1ZOFy4hE15ZyPX09fd5g4DqbbL1wXGY90YmleVS6Y5YlraW4BvHjim/X/4yuCpTsAFvsT4Nca2lbyDH/A==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.17.tgz", + "integrity": "sha512-YtUXLdVnd6YBSYlZODjWzH+KzbaubV0YVd6UxSfoFfa5PtNJNaW+1i+Hcmjpg2nEe0YXUCNF5bkKy1NnBv1y7Q==", "cpu": [ "arm64" ], @@ -349,9 +349,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.16.tgz", - "integrity": "sha512-IPEMfU9p0c3Vb8PqxaPX6BM9rYwlTZGYOf9u+kMdhoILZkVKEjq6PKZO0lB+isojWwAnAqh4ZxshD96njTXajg==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.17.tgz", + "integrity": "sha512-yczSLRbDdReCO74Yfc5tKG0izzm+lPMYyO1fFTcn0QNwnKmc3K+HdxZWLGKg4pZVte7XVgcFku7TIZNbWEJdeQ==", "cpu": [ "ia32" ], @@ -365,9 +365,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.16.tgz", - "integrity": "sha512-1YYpoJ39WV/2bnShPwgdzJklc+XS0bysN6Tpnt1cWPdeoKOG4RMEY1g7i534QxXX/rPvNx/NLJQTTCeORYzipg==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.17.tgz", + "integrity": "sha512-FNZw7H3aqhF9OyRQbDDnzUApDXfC1N6fgBhkqEO2jvYCJ+DxMTfZVqg3AX0R1khg1wHTBRD5SdcibSJ+XF6bFg==", "cpu": [ "x64" ], @@ -381,15 +381,15 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", "dev": true }, "node_modules/@popperjs/core": { - "version": "2.11.6", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz", - "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==", + "version": "2.11.7", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.7.tgz", + "integrity": "sha512-Cr4OjIkipTtcXKjAsm8agyleBuDHvxzeBoa1v543lbv1YaIwQjESsVcmjiWiPEbC1FIeHOG/Op9kdCmAmiS3Kw==", "dev": true, "peer": true, "funding": { @@ -398,17 +398,17 @@ } }, "node_modules/@sveltejs/vite-plugin-svelte": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.0.2.tgz", - "integrity": "sha512-xCEan0/NNpQuL0l5aS42FjwQ6wwskdxC3pW1OeFtEKNZwRg7Evro9lac9HesGP6TdFsTv2xMes5ASQVKbCacxg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.1.0.tgz", + "integrity": "sha512-Bc9A8mtTGlhTICdLL/aZ+jyHI3kwtkcXremOH5xwjbNNKOTOtY8nMyG8/oZ5KK8IuUfAn1WL58Bp2tofDJBW0w==", "dev": true, "dependencies": { "debug": "^4.3.4", - "deepmerge": "^4.2.2", + "deepmerge": "^4.3.1", "kleur": "^4.1.5", - "magic-string": "^0.27.0", + "magic-string": "^0.30.0", "svelte-hmr": "^0.15.1", - "vitefu": "^0.2.3" + "vitefu": "^0.2.4" }, "engines": { "node": "^14.18.0 || >= 16" @@ -438,9 +438,9 @@ "dev": true }, "node_modules/axios": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.2.tgz", - "integrity": "sha512-bz/J4gS2S3I7mpN/YZfGFTqhXTYzRho8Ay38w2otuuDR322KzFIWm/4W2K6gIwvWaws5n+mnb7D1lN9uD+QH6Q==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.6.tgz", + "integrity": "sha512-PEcdkk7JcdPiMDkvM4K6ZBRYq9keuVJsToxm2zQIM70Qqo2WHTdJZMXcG9X+RmRp2VPNUQC8W1RAGbgt6b1yMg==", "dev": true, "dependencies": { "follow-redirects": "^1.15.0", @@ -571,9 +571,9 @@ "dev": true }, "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, "engines": { "node": ">=0.10.0" @@ -589,9 +589,9 @@ } }, "node_modules/esbuild": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.16.tgz", - "integrity": "sha512-24JyKq10KXM5EBIgPotYIJ2fInNWVVqflv3gicIyQqfmUqi4HvDW1VR790cBgLJHCl96Syy7lhoz7tLFcmuRmg==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.17.tgz", + "integrity": "sha512-/jUywtAymR8jR4qsa2RujlAF7Krpt5VWi72Q2yuLD4e/hvtNcFQ0I1j8m/bxq238pf3/0KO5yuXNpuLx8BE1KA==", "dev": true, "hasInstallScript": true, "bin": { @@ -601,28 +601,28 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.16.16", - "@esbuild/android-arm64": "0.16.16", - "@esbuild/android-x64": "0.16.16", - "@esbuild/darwin-arm64": "0.16.16", - "@esbuild/darwin-x64": "0.16.16", - "@esbuild/freebsd-arm64": "0.16.16", - "@esbuild/freebsd-x64": "0.16.16", - "@esbuild/linux-arm": "0.16.16", - "@esbuild/linux-arm64": "0.16.16", - "@esbuild/linux-ia32": "0.16.16", - "@esbuild/linux-loong64": "0.16.16", - "@esbuild/linux-mips64el": "0.16.16", - "@esbuild/linux-ppc64": "0.16.16", - "@esbuild/linux-riscv64": "0.16.16", - "@esbuild/linux-s390x": "0.16.16", - "@esbuild/linux-x64": "0.16.16", - "@esbuild/netbsd-x64": "0.16.16", - "@esbuild/openbsd-x64": "0.16.16", - "@esbuild/sunos-x64": "0.16.16", - "@esbuild/win32-arm64": "0.16.16", - "@esbuild/win32-ia32": "0.16.16", - "@esbuild/win32-x64": "0.16.16" + "@esbuild/android-arm": "0.17.17", + "@esbuild/android-arm64": "0.17.17", + "@esbuild/android-x64": "0.17.17", + "@esbuild/darwin-arm64": "0.17.17", + "@esbuild/darwin-x64": "0.17.17", + "@esbuild/freebsd-arm64": "0.17.17", + "@esbuild/freebsd-x64": "0.17.17", + "@esbuild/linux-arm": "0.17.17", + "@esbuild/linux-arm64": "0.17.17", + "@esbuild/linux-ia32": "0.17.17", + "@esbuild/linux-loong64": "0.17.17", + "@esbuild/linux-mips64el": "0.17.17", + "@esbuild/linux-ppc64": "0.17.17", + "@esbuild/linux-riscv64": "0.17.17", + "@esbuild/linux-s390x": "0.17.17", + "@esbuild/linux-x64": "0.17.17", + "@esbuild/netbsd-x64": "0.17.17", + "@esbuild/openbsd-x64": "0.17.17", + "@esbuild/sunos-x64": "0.17.17", + "@esbuild/win32-arm64": "0.17.17", + "@esbuild/win32-ia32": "0.17.17", + "@esbuild/win32-x64": "0.17.17" } }, "node_modules/fill-range": { @@ -685,12 +685,6 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -703,18 +697,6 @@ "node": ">= 6" } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/immutable": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.2.tgz", @@ -733,18 +715,6 @@ "node": ">=8" } }, - "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -794,9 +764,9 @@ } }, "node_modules/magic-string": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", - "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", + "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", "dev": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.13" @@ -873,12 +843,6 @@ "tslib": "^2.0.3" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -939,27 +903,10 @@ "node": ">=8.10.0" } }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/rollup": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.9.1.tgz", - "integrity": "sha512-GswCYHXftN8ZKGVgQhTFUJB/NBXxrRGgO2NCy6E8s1rwEJ4Q9/VttNqcYfEvx4dTo4j58YqdC3OVztPzlKSX8w==", + "version": "3.20.7", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.20.7.tgz", + "integrity": "sha512-P7E2zezKSLhWnTz46XxjSmInrbOCiul1yf+kJccMxT56vxjHwCbDfoLbiqFgu+WQoo9ij2PkraYaBstgB2prBA==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -973,9 +920,9 @@ } }, "node_modules/sass": { - "version": "1.57.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.57.1.tgz", - "integrity": "sha512-O2+LwLS79op7GI0xZ8fqzF7X2m/m8WFfI02dHOdsK5R2ECeS5F62zrwg/relM1rjSLy7Vd/DiMNIvPrQGsA0jw==", + "version": "1.62.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.62.0.tgz", + "integrity": "sha512-Q4USplo4pLYgCi+XlipZCWUQz5pkg/ruSSgJ0WRDSb/+3z9tXUOkQ7QPYn4XrhZKYAK4HlpaQecRwKLJX6+DBg==", "dev": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", @@ -986,7 +933,7 @@ "sass": "sass.js" }, "engines": { - "node": ">=12.0.0" + "node": ">=14.0.0" } }, "node_modules/source-map-js": { @@ -998,22 +945,10 @@ "node": ">=0.10.0" } }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/svelte": { - "version": "3.55.0", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.55.0.tgz", - "integrity": "sha512-uGu2FVMlOuey4JoKHKrpZFkoYyj0VLjJdz47zX5+gVK5odxHM40RVhar9/iK2YFRVxvfg9FkhfVlR0sjeIrOiA==", + "version": "3.58.0", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.58.0.tgz", + "integrity": "sha512-brIBNNB76mXFmU/Kerm4wFnkskBbluBDCjx/8TcpYRb298Yh2dztS2kQ6bhtjMcvUhd5ynClfwpz5h2gnzdQ1A==", "dev": true, "engines": { "node": ">= 8" @@ -1091,15 +1026,14 @@ } }, "node_modules/vite": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.0.4.tgz", - "integrity": "sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.1.tgz", + "integrity": "sha512-EPmfPLAI79Z/RofuMvkIS0Yr091T2ReUoXQqc5ppBX/sjFRhHKiPPF/R46cTdoci/XgeQpB23diiJxq5w30vdg==", "dev": true, "dependencies": { - "esbuild": "^0.16.3", - "postcss": "^8.4.20", - "resolve": "^1.22.1", - "rollup": "^3.7.0" + "esbuild": "^0.17.5", + "postcss": "^8.4.21", + "rollup": "^3.20.2" }, "bin": { "vite": "bin/vite.js" @@ -1156,193 +1090,193 @@ }, "dependencies": { "@axa-fr/vanilla-oidc": { - "version": "6.16.0", - "resolved": "https://registry.npmjs.org/@axa-fr/vanilla-oidc/-/vanilla-oidc-6.16.0.tgz", - "integrity": "sha512-cBKU73RtrNBwbbeUKkGCjT/4s9QF7gNysN2Vb4e1JN8RuvN0fZ0/JFpwwgrlMKHZtBruqrpumC/E0tvGrHv2zA==", + "version": "6.16.14", + "resolved": "https://registry.npmjs.org/@axa-fr/vanilla-oidc/-/vanilla-oidc-6.16.14.tgz", + "integrity": "sha512-Cwy9QA7BWfw0Sd9yMeZ3SnuoW4JfyBPyEA6eT9EXVHYWjiMa2bZfYtUHNsdYobRMwkDlFVK7ObjMzd4+ki1//Q==", "dev": true, "requires": { "base64-js": "1.5.1" } }, "@esbuild/android-arm": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.16.tgz", - "integrity": "sha512-BUuWMlt4WSXod1HSl7aGK8fJOsi+Tab/M0IDK1V1/GstzoOpqc/v3DqmN8MkuapPKQ9Br1WtLAN4uEgWR8x64A==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.17.tgz", + "integrity": "sha512-E6VAZwN7diCa3labs0GYvhEPL2M94WLF8A+czO8hfjREXxba8Ng7nM5VxV+9ihNXIY1iQO1XxUU4P7hbqbICxg==", "dev": true, "optional": true }, "@esbuild/android-arm64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.16.tgz", - "integrity": "sha512-hFHVAzUKp9Tf8psGq+bDVv+6hTy1bAOoV/jJMUWwhUnIHsh6WbFMhw0ZTkqDuh7TdpffFoHOiIOIxmHc7oYRBQ==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.17.tgz", + "integrity": "sha512-jaJ5IlmaDLFPNttv0ofcwy/cfeY4bh/n705Tgh+eLObbGtQBK3EPAu+CzL95JVE4nFAliyrnEu0d32Q5foavqg==", "dev": true, "optional": true }, "@esbuild/android-x64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.16.tgz", - "integrity": "sha512-9WhxJpeb6XumlfivldxqmkJepEcELekmSw3NkGrs+Edq6sS5KRxtUBQuKYDD7KqP59dDkxVbaoPIQFKWQG0KLg==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.17.tgz", + "integrity": "sha512-446zpfJ3nioMC7ASvJB1pszHVskkw4u/9Eu8s5yvvsSDTzYh4p4ZIRj0DznSl3FBF0Z/mZfrKXTtt0QCoFmoHA==", "dev": true, "optional": true }, "@esbuild/darwin-arm64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.16.tgz", - "integrity": "sha512-8Z+wld+vr/prHPi2O0X7o1zQOfMbXWGAw9hT0jEyU/l/Yrg+0Z3FO9pjPho72dVkZs4ewZk0bDOFLdZHm8jEfw==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.17.tgz", + "integrity": "sha512-m/gwyiBwH3jqfUabtq3GH31otL/0sE0l34XKpSIqR7NjQ/XHQ3lpmQHLHbG8AHTGCw8Ao059GvV08MS0bhFIJQ==", "dev": true, "optional": true }, "@esbuild/darwin-x64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.16.tgz", - "integrity": "sha512-CYkxVvkZzGCqFrt7EgjFxQKhlUPyDkuR9P0Y5wEcmJqVI8ncerOIY5Kej52MhZyzOBXkYrJgZeVZC9xXXoEg9A==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.17.tgz", + "integrity": "sha512-4utIrsX9IykrqYaXR8ob9Ha2hAY2qLc6ohJ8c0CN1DR8yWeMrTgYFjgdeQ9LIoTOfLetXjuCu5TRPHT9yKYJVg==", "dev": true, "optional": true }, "@esbuild/freebsd-arm64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.16.tgz", - "integrity": "sha512-fxrw4BYqQ39z/3Ja9xj/a1gMsVq0xEjhSyI4a9MjfvDDD8fUV8IYliac96i7tzZc3+VytyXX+XNsnpEk5sw5Wg==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.17.tgz", + "integrity": "sha512-4PxjQII/9ppOrpEwzQ1b0pXCsFLqy77i0GaHodrmzH9zq2/NEhHMAMJkJ635Ns4fyJPFOlHMz4AsklIyRqFZWA==", "dev": true, "optional": true }, "@esbuild/freebsd-x64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.16.tgz", - "integrity": "sha512-8p3v1D+du2jiDvSoNVimHhj7leSfST9YlKsAEO7etBfuqjaBMndo0fmjNLp0JCMld+XIx9L80tooOkyUv1a1PQ==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.17.tgz", + "integrity": "sha512-lQRS+4sW5S3P1sv0z2Ym807qMDfkmdhUYX30GRBURtLTrJOPDpoU0kI6pVz1hz3U0+YQ0tXGS9YWveQjUewAJw==", "dev": true, "optional": true }, "@esbuild/linux-arm": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.16.tgz", - "integrity": "sha512-bYaocE1/PTMRmkgSckZ0D0Xn2nox8v2qlk+MVVqm+VECNKDdZvghVZtH41dNtBbwADSvA6qkCHGYeWm9LrNCBw==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.17.tgz", + "integrity": "sha512-biDs7bjGdOdcmIk6xU426VgdRUpGg39Yz6sT9Xp23aq+IEHDb/u5cbmu/pAANpDB4rZpY/2USPhCA+w9t3roQg==", "dev": true, "optional": true }, "@esbuild/linux-arm64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.16.tgz", - "integrity": "sha512-N3u6BBbCVY3xeP2D8Db7QY8I+nZ+2AgOopUIqk+5yCoLnsWkcVxD2ay5E9iIdvApFi1Vg1lZiiwaVp8bOpAc4A==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.17.tgz", + "integrity": "sha512-2+pwLx0whKY1/Vqt8lyzStyda1v0qjJ5INWIe+d8+1onqQxHLLi3yr5bAa4gvbzhZqBztifYEu8hh1La5+7sUw==", "dev": true, "optional": true }, "@esbuild/linux-ia32": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.16.tgz", - "integrity": "sha512-dxjqLKUW8GqGemoRT9v8IgHk+T4tRm1rn1gUcArsp26W9EkK/27VSjBVUXhEG5NInHZ92JaQ3SSMdTwv/r9a2A==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.17.tgz", + "integrity": "sha512-IBTTv8X60dYo6P2t23sSUYym8fGfMAiuv7PzJ+0LcdAndZRzvke+wTVxJeCq4WgjppkOpndL04gMZIFvwoU34Q==", "dev": true, "optional": true }, "@esbuild/linux-loong64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.16.tgz", - "integrity": "sha512-MdUFggHjRiCCwNE9+1AibewoNq6wf94GLB9Q9aXwl+a75UlRmbRK3h6WJyrSGA6ZstDJgaD2wiTSP7tQNUYxwA==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.17.tgz", + "integrity": "sha512-WVMBtcDpATjaGfWfp6u9dANIqmU9r37SY8wgAivuKmgKHE+bWSuv0qXEFt/p3qXQYxJIGXQQv6hHcm7iWhWjiw==", "dev": true, "optional": true }, "@esbuild/linux-mips64el": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.16.tgz", - "integrity": "sha512-CO3YmO7jYMlGqGoeFeKzdwx/bx8Vtq/SZaMAi+ZLDUnDUdfC7GmGwXzIwDJ70Sg+P9pAemjJyJ1icKJ9R3q/Fg==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.17.tgz", + "integrity": "sha512-2kYCGh8589ZYnY031FgMLy0kmE4VoGdvfJkxLdxP4HJvWNXpyLhjOvxVsYjYZ6awqY4bgLR9tpdYyStgZZhi2A==", "dev": true, "optional": true }, "@esbuild/linux-ppc64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.16.tgz", - "integrity": "sha512-DSl5Czh5hCy/7azX0Wl9IdzPHX2H8clC6G87tBnZnzUpNgRxPFhfmArbaHoAysu4JfqCqbB/33u/GL9dUgCBAw==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.17.tgz", + "integrity": "sha512-KIdG5jdAEeAKogfyMTcszRxy3OPbZhq0PPsW4iKKcdlbk3YE4miKznxV2YOSmiK/hfOZ+lqHri3v8eecT2ATwQ==", "dev": true, "optional": true }, "@esbuild/linux-riscv64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.16.tgz", - "integrity": "sha512-sSVVMEXsqf1fQu0j7kkhXMViroixU5XoaJXl1u/u+jbXvvhhCt9YvA/B6VM3aM/77HuRQ94neS5bcisijGnKFQ==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.17.tgz", + "integrity": "sha512-Cj6uWLBR5LWhcD/2Lkfg2NrkVsNb2sFM5aVEfumKB2vYetkA/9Uyc1jVoxLZ0a38sUhFk4JOVKH0aVdPbjZQeA==", "dev": true, "optional": true }, "@esbuild/linux-s390x": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.16.tgz", - "integrity": "sha512-jRqBCre9gZGoCdCN/UWCCMwCMsOg65IpY9Pyj56mKCF5zXy9d60kkNRdDN6YXGjr3rzcC4DXnS/kQVCGcC4yPQ==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.17.tgz", + "integrity": "sha512-lK+SffWIr0XsFf7E0srBjhpkdFVJf3HEgXCwzkm69kNbRar8MhezFpkIwpk0qo2IOQL4JE4mJPJI8AbRPLbuOQ==", "dev": true, "optional": true }, "@esbuild/linux-x64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.16.tgz", - "integrity": "sha512-G1+09TopOzo59/55lk5Q0UokghYLyHTKKzD5lXsAOOlGDbieGEFJpJBr3BLDbf7cz89KX04sBeExAR/pL/26sA==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.17.tgz", + "integrity": "sha512-XcSGTQcWFQS2jx3lZtQi7cQmDYLrpLRyz1Ns1DzZCtn898cWfm5Icx/DEWNcTU+T+tyPV89RQtDnI7qL2PObPg==", "dev": true, "optional": true }, "@esbuild/netbsd-x64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.16.tgz", - "integrity": "sha512-xwjGJB5wwDEujLaJIrSMRqWkbigALpBNcsF9SqszoNKc+wY4kPTdKrSxiY5ik3IatojePP+WV108MvF6q6np4w==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.17.tgz", + "integrity": "sha512-RNLCDmLP5kCWAJR+ItLM3cHxzXRTe4N00TQyQiimq+lyqVqZWGPAvcyfUBM0isE79eEZhIuGN09rAz8EL5KdLA==", "dev": true, "optional": true }, "@esbuild/openbsd-x64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.16.tgz", - "integrity": "sha512-yeERkoxG2nR2oxO5n+Ms7MsCeNk23zrby2GXCqnfCpPp7KNc0vxaaacIxb21wPMfXXRhGBrNP4YLIupUBrWdlg==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.17.tgz", + "integrity": "sha512-PAXswI5+cQq3Pann7FNdcpSUrhrql3wKjj3gVkmuz6OHhqqYxKvi6GgRBoaHjaG22HV/ZZEgF9TlS+9ftHVigA==", "dev": true, "optional": true }, "@esbuild/sunos-x64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.16.tgz", - "integrity": "sha512-nHfbEym0IObXPhtX6Va3H5GaKBty2kdhlAhKmyCj9u255ktAj0b1YACUs9j5H88NRn9cJCthD1Ik/k9wn8YKVg==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.17.tgz", + "integrity": "sha512-V63egsWKnx/4V0FMYkr9NXWrKTB5qFftKGKuZKFIrAkO/7EWLFnbBZNM1CvJ6Sis+XBdPws2YQSHF1Gqf1oj/Q==", "dev": true, "optional": true }, "@esbuild/win32-arm64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.16.tgz", - "integrity": "sha512-pdD+M1ZOFy4hE15ZyPX09fd5g4DqbbL1wXGY90YmleVS6Y5YlraW4BvHjim/X/4yuCpTsAFvsT4Nca2lbyDH/A==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.17.tgz", + "integrity": "sha512-YtUXLdVnd6YBSYlZODjWzH+KzbaubV0YVd6UxSfoFfa5PtNJNaW+1i+Hcmjpg2nEe0YXUCNF5bkKy1NnBv1y7Q==", "dev": true, "optional": true }, "@esbuild/win32-ia32": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.16.tgz", - "integrity": "sha512-IPEMfU9p0c3Vb8PqxaPX6BM9rYwlTZGYOf9u+kMdhoILZkVKEjq6PKZO0lB+isojWwAnAqh4ZxshD96njTXajg==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.17.tgz", + "integrity": "sha512-yczSLRbDdReCO74Yfc5tKG0izzm+lPMYyO1fFTcn0QNwnKmc3K+HdxZWLGKg4pZVte7XVgcFku7TIZNbWEJdeQ==", "dev": true, "optional": true }, "@esbuild/win32-x64": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.16.tgz", - "integrity": "sha512-1YYpoJ39WV/2bnShPwgdzJklc+XS0bysN6Tpnt1cWPdeoKOG4RMEY1g7i534QxXX/rPvNx/NLJQTTCeORYzipg==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.17.tgz", + "integrity": "sha512-FNZw7H3aqhF9OyRQbDDnzUApDXfC1N6fgBhkqEO2jvYCJ+DxMTfZVqg3AX0R1khg1wHTBRD5SdcibSJ+XF6bFg==", "dev": true, "optional": true }, "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", "dev": true }, "@popperjs/core": { - "version": "2.11.6", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz", - "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==", + "version": "2.11.7", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.7.tgz", + "integrity": "sha512-Cr4OjIkipTtcXKjAsm8agyleBuDHvxzeBoa1v543lbv1YaIwQjESsVcmjiWiPEbC1FIeHOG/Op9kdCmAmiS3Kw==", "dev": true, "peer": true }, "@sveltejs/vite-plugin-svelte": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.0.2.tgz", - "integrity": "sha512-xCEan0/NNpQuL0l5aS42FjwQ6wwskdxC3pW1OeFtEKNZwRg7Evro9lac9HesGP6TdFsTv2xMes5ASQVKbCacxg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.1.0.tgz", + "integrity": "sha512-Bc9A8mtTGlhTICdLL/aZ+jyHI3kwtkcXremOH5xwjbNNKOTOtY8nMyG8/oZ5KK8IuUfAn1WL58Bp2tofDJBW0w==", "dev": true, "requires": { "debug": "^4.3.4", - "deepmerge": "^4.2.2", + "deepmerge": "^4.3.1", "kleur": "^4.1.5", - "magic-string": "^0.27.0", + "magic-string": "^0.30.0", "svelte-hmr": "^0.15.1", - "vitefu": "^0.2.3" + "vitefu": "^0.2.4" } }, "anymatch": { @@ -1362,9 +1296,9 @@ "dev": true }, "axios": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.2.tgz", - "integrity": "sha512-bz/J4gS2S3I7mpN/YZfGFTqhXTYzRho8Ay38w2otuuDR322KzFIWm/4W2K6gIwvWaws5n+mnb7D1lN9uD+QH6Q==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.6.tgz", + "integrity": "sha512-PEcdkk7JcdPiMDkvM4K6ZBRYq9keuVJsToxm2zQIM70Qqo2WHTdJZMXcG9X+RmRp2VPNUQC8W1RAGbgt6b1yMg==", "dev": true, "requires": { "follow-redirects": "^1.15.0", @@ -1441,9 +1375,9 @@ "dev": true }, "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true }, "delayed-stream": { @@ -1453,33 +1387,33 @@ "dev": true }, "esbuild": { - "version": "0.16.16", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.16.tgz", - "integrity": "sha512-24JyKq10KXM5EBIgPotYIJ2fInNWVVqflv3gicIyQqfmUqi4HvDW1VR790cBgLJHCl96Syy7lhoz7tLFcmuRmg==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.17.tgz", + "integrity": "sha512-/jUywtAymR8jR4qsa2RujlAF7Krpt5VWi72Q2yuLD4e/hvtNcFQ0I1j8m/bxq238pf3/0KO5yuXNpuLx8BE1KA==", "dev": true, "requires": { - "@esbuild/android-arm": "0.16.16", - "@esbuild/android-arm64": "0.16.16", - "@esbuild/android-x64": "0.16.16", - "@esbuild/darwin-arm64": "0.16.16", - "@esbuild/darwin-x64": "0.16.16", - "@esbuild/freebsd-arm64": "0.16.16", - "@esbuild/freebsd-x64": "0.16.16", - "@esbuild/linux-arm": "0.16.16", - "@esbuild/linux-arm64": "0.16.16", - "@esbuild/linux-ia32": "0.16.16", - "@esbuild/linux-loong64": "0.16.16", - "@esbuild/linux-mips64el": "0.16.16", - "@esbuild/linux-ppc64": "0.16.16", - "@esbuild/linux-riscv64": "0.16.16", - "@esbuild/linux-s390x": "0.16.16", - "@esbuild/linux-x64": "0.16.16", - "@esbuild/netbsd-x64": "0.16.16", - "@esbuild/openbsd-x64": "0.16.16", - "@esbuild/sunos-x64": "0.16.16", - "@esbuild/win32-arm64": "0.16.16", - "@esbuild/win32-ia32": "0.16.16", - "@esbuild/win32-x64": "0.16.16" + "@esbuild/android-arm": "0.17.17", + "@esbuild/android-arm64": "0.17.17", + "@esbuild/android-x64": "0.17.17", + "@esbuild/darwin-arm64": "0.17.17", + "@esbuild/darwin-x64": "0.17.17", + "@esbuild/freebsd-arm64": "0.17.17", + "@esbuild/freebsd-x64": "0.17.17", + "@esbuild/linux-arm": "0.17.17", + "@esbuild/linux-arm64": "0.17.17", + "@esbuild/linux-ia32": "0.17.17", + "@esbuild/linux-loong64": "0.17.17", + "@esbuild/linux-mips64el": "0.17.17", + "@esbuild/linux-ppc64": "0.17.17", + "@esbuild/linux-riscv64": "0.17.17", + "@esbuild/linux-s390x": "0.17.17", + "@esbuild/linux-x64": "0.17.17", + "@esbuild/netbsd-x64": "0.17.17", + "@esbuild/openbsd-x64": "0.17.17", + "@esbuild/sunos-x64": "0.17.17", + "@esbuild/win32-arm64": "0.17.17", + "@esbuild/win32-ia32": "0.17.17", + "@esbuild/win32-x64": "0.17.17" } }, "fill-range": { @@ -1515,12 +1449,6 @@ "dev": true, "optional": true }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, "glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -1530,15 +1458,6 @@ "is-glob": "^4.0.1" } }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, "immutable": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.2.tgz", @@ -1554,15 +1473,6 @@ "binary-extensions": "^2.0.0" } }, - "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -1600,9 +1510,9 @@ } }, "magic-string": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", - "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", + "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", "dev": true, "requires": { "@jridgewell/sourcemap-codec": "^1.4.13" @@ -1661,12 +1571,6 @@ "tslib": "^2.0.3" } }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -1705,30 +1609,19 @@ "picomatch": "^2.2.1" } }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, "rollup": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.9.1.tgz", - "integrity": "sha512-GswCYHXftN8ZKGVgQhTFUJB/NBXxrRGgO2NCy6E8s1rwEJ4Q9/VttNqcYfEvx4dTo4j58YqdC3OVztPzlKSX8w==", + "version": "3.20.7", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.20.7.tgz", + "integrity": "sha512-P7E2zezKSLhWnTz46XxjSmInrbOCiul1yf+kJccMxT56vxjHwCbDfoLbiqFgu+WQoo9ij2PkraYaBstgB2prBA==", "dev": true, "requires": { "fsevents": "~2.3.2" } }, "sass": { - "version": "1.57.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.57.1.tgz", - "integrity": "sha512-O2+LwLS79op7GI0xZ8fqzF7X2m/m8WFfI02dHOdsK5R2ECeS5F62zrwg/relM1rjSLy7Vd/DiMNIvPrQGsA0jw==", + "version": "1.62.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.62.0.tgz", + "integrity": "sha512-Q4USplo4pLYgCi+XlipZCWUQz5pkg/ruSSgJ0WRDSb/+3z9tXUOkQ7QPYn4XrhZKYAK4HlpaQecRwKLJX6+DBg==", "dev": true, "requires": { "chokidar": ">=3.0.0 <4.0.0", @@ -1742,16 +1635,10 @@ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "dev": true }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, "svelte": { - "version": "3.55.0", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.55.0.tgz", - "integrity": "sha512-uGu2FVMlOuey4JoKHKrpZFkoYyj0VLjJdz47zX5+gVK5odxHM40RVhar9/iK2YFRVxvfg9FkhfVlR0sjeIrOiA==", + "version": "3.58.0", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.58.0.tgz", + "integrity": "sha512-brIBNNB76mXFmU/Kerm4wFnkskBbluBDCjx/8TcpYRb298Yh2dztS2kQ6bhtjMcvUhd5ynClfwpz5h2gnzdQ1A==", "dev": true }, "svelte-hmr": { @@ -1803,16 +1690,15 @@ "peer": true }, "vite": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.0.4.tgz", - "integrity": "sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.1.tgz", + "integrity": "sha512-EPmfPLAI79Z/RofuMvkIS0Yr091T2ReUoXQqc5ppBX/sjFRhHKiPPF/R46cTdoci/XgeQpB23diiJxq5w30vdg==", "dev": true, "requires": { - "esbuild": "^0.16.3", + "esbuild": "^0.17.5", "fsevents": "~2.3.2", - "postcss": "^8.4.20", - "resolve": "^1.22.1", - "rollup": "^3.7.0" + "postcss": "^8.4.21", + "rollup": "^3.20.2" } }, "vitefu": { diff --git a/client/package.json b/client/package.json index 7dd4592..403a8f0 100644 --- a/client/package.json +++ b/client/package.json @@ -9,13 +9,13 @@ "preview": "vite preview" }, "devDependencies": { - "@axa-fr/vanilla-oidc": "^6.16.0", - "@sveltejs/vite-plugin-svelte": "^2.0.2", - "axios": "^1.2.2", + "@axa-fr/vanilla-oidc": "^6.16.14", + "@sveltejs/vite-plugin-svelte": "^2.0.4", + "axios": "^1.3.5", "bootstrap": "^5.2.3", - "sass": "^1.57.1", - "svelte": "^3.55.0", + "sass": "^1.61.0", + "svelte": "^3.58.0", "svelte-navigator": "^3.2.2", - "vite": "^4.0.4" + "vite": "^4.2.1" } } \ No newline at end of file diff --git a/client/public/OidcServiceWorker.js b/client/public/OidcServiceWorker.js index abe6b7f..ca22aa3 100644 --- a/client/public/OidcServiceWorker.js +++ b/client/public/OidcServiceWorker.js @@ -1,369 +1,2 @@ -const N = "OidcTrustedDomains.js", y = "*", _ = { - REFRESH_TOKEN: "REFRESH_TOKEN_SECURED_BY_OIDC_SERVICE_WORKER", - ACCESS_TOKEN: "ACCESS_TOKEN_SECURED_BY_OIDC_SERVICE_WORKER", - NONCE_TOKEN: "NONCE_SECURED_BY_OIDC_SERVICE_WORKER", - CODE_VERIFIER: "CODE_VERIFIER_SECURED_BY_OIDC_SERVICE_WORKER" -}, v = { - access_token_or_id_token_invalid: "access_token_or_id_token_invalid", - access_token_invalid: "access_token_invalid", - id_token_invalid: "id_token_invalid" -}, A = "/.well-known/openid-configuration"; -function x(n, t) { - if (!t) - return; - if (!n.find((e) => { - var s; - let o; - return typeof e == "string" ? o = new RegExp(`^${e}`) : o = e, (s = o.test) == null ? void 0 : s.call(o, t); - })) - throw new Error( - "Domain " + t + " is not trusted, please add domain in " + N - ); -} -const D = (n, t, i) => { - var e; - if (t.endsWith(A)) - return null; - for (const [o, s] of Object.entries(n)) { - const a = s.oidcServerConfiguration; - if (!a || a.tokenEndpoint && t === a.tokenEndpoint || a.revocationEndpoint && t === a.revocationEndpoint) - continue; - const u = a.userInfoEndpoint ? [a.userInfoEndpoint, ...i[o]] : [...i[o]]; - let c = !1; - if (u.find((l) => l === y)) - c = !0; - else - for (let l = 0; l < u.length; l++) { - let r = u[l]; - if (typeof r == "string" && (r = new RegExp(`^${r}`)), (e = r.test) != null && e.call(r, t)) { - c = !0; - break; - } - } - if (c) - return s.tokens ? s : null; - } - return null; -}; -function K(n, t) { - return n.split(t).length - 1; -} -function M(n) { - return JSON.parse( - P(n.split(".")[1].replace("-", "+").replace("_", "/")) - ); -} -function P(n) { - return decodeURIComponent( - Array.prototype.map.call( - atob(n), - (t) => "%" + ("00" + t.charCodeAt(0).toString(16)).slice(-2) - ).join("") - ); -} -function U(n, t) { - const i = new Date().getTime() / 1e3; - return Math.round( - t - n - i - ); -} -function W(n) { - return n ? U(0, n.expiresAt) > 0 : !1; -} -const w = (n) => { - try { - return n && K(n, ".") === 2 ? M(n) : null; - } catch (t) { - console.warn(t); - } - return null; -}, F = (n, t, i) => { - if (n.idTokenPayload) { - const e = n.idTokenPayload; - if (i.issuer !== e.iss) - return { isValid: !1, reason: "Issuer does not match" }; - const o = new Date().getTime() / 1e3; - if (e.exp && e.exp < o) - return { isValid: !1, reason: "Token expired" }; - const s = 60 * 60 * 24 * 7; - if (e.iat && e.iat + s < o) - return { isValid: !1, reason: "Token is used from too long time" }; - if (e.nonce && e.nonce !== t) - return { isValid: !1, reason: "Nonce does not match" }; - } - return { isValid: !0, reason: "" }; -}; -function O(n) { - const t = n.configurationName; - return (i) => i.status !== 200 ? i : i.json().then((e) => { - if (!e.issued_at) { - const f = new Date().getTime() / 1e3; - e.issued_at = f; - } - const o = w(e.access_token), s = { - ...e, - access_token: _.ACCESS_TOKEN + "_" + t, - accessTokenPayload: o - }; - e.accessTokenPayload = o; - let a = null; - if (e.id_token) { - if (a = w(e.id_token), e.idTokenPayload = { ...a }, a.nonce && n.nonce != null) { - const f = _.NONCE_TOKEN + "_" + n.configurationName; - a.nonce = f; - } - s.idTokenPayload = a; - } - e.refresh_token && (s.refresh_token = _.REFRESH_TOKEN + "_" + t); - const u = a && a.exp ? a.exp : Number.MAX_VALUE, c = o && o.exp ? o.exp : e.issued_at + e.expires_in; - let l; - const r = n.oidcConfiguration.token_renew_mode; - r === v.access_token_invalid ? l = c : r === v.id_token_invalid ? l = u : l = u < c ? u : c, s.expiresAt = l, e.expiresAt = l; - const T = n.nonce ? n.nonce.nonce : null, { isValid: d, reason: k } = F( - e, - T, - n.oidcServerConfiguration - ); - if (!d) - throw Error(`Tokens are not OpenID valid, reason: ${k}`); - if (n.tokens != null && "refresh_token" in n.tokens && !("refresh_token" in e)) { - const f = n.tokens.refresh_token; - n.tokens = { - ...e, - refresh_token: f - }; - } else - n.tokens = e; - n.status = "LOGGED_IN"; - const p = JSON.stringify(s); - return new Response(p, i); - }); -} -function C(n) { - const t = {}; - for (const i of n.keys()) - n.has(i) && (t[i] = n.get(i)); - return t; -} -const V = (n) => new Promise((t) => setTimeout(t, n)), g = self; -g.importScripts(N); -const I = Math.round(new Date().getTime() / 1e3).toString(), b = "OidcKeepAliveServiceWorker.json", q = (n) => { - console.log("[OidcServiceWorker] service worker installed " + I), n.waitUntil(g.skipWaiting()); -}, L = (n) => { - console.log("[OidcServiceWorker] service worker activated " + I), n.waitUntil(g.clients.claim()); -}; -let S = null; -const h = { - default: { - configurationName: "default", - tokens: null, - status: null, - state: null, - codeVerifier: null, - nonce: null, - oidcServerConfiguration: null - } -}, H = (n, t) => { - const i = []; - for (const [, e] of Object.entries(n)) - (e.oidcServerConfiguration != null && t.startsWith(e.oidcServerConfiguration.tokenEndpoint) || e.oidcServerConfiguration != null && e.oidcServerConfiguration.revocationEndpoint && t.startsWith(e.oidcServerConfiguration.revocationEndpoint)) && i.push(e); - return i; -}, j = async (n) => { - const i = n.request.headers.has("oidc-vanilla"), e = { status: 200, statusText: "oidc-service-worker" }, o = new Response("{}", e); - if (!i) - for (let s = 0; s < 240; s++) - await V(1e3 + Math.floor(Math.random() * 1e3)), await (await caches.open("oidc_dummy_cache")).put(n.request, o.clone()); - return o; -}, J = async (n) => { - const t = n.request, i = t.url; - if (t.url.includes(b)) { - n.respondWith(j(n)); - return; - } - const e = D( - h, - t.url, - trustedDomains - ); - if (e && e.tokens && e.tokens.access_token) { - for (; e.tokens && !W(e.tokens); ) - await V(200); - const u = new Request(t, { - headers: { - ...C(t.headers), - authorization: "Bearer " + e.tokens.access_token - }, - mode: e.oidcConfiguration.service_worker_convert_all_requests_to_cors ? "cors" : t.mode - }); - n.waitUntil(n.respondWith(fetch(u))); - return; - } - if (n.request.method !== "POST") - return; - let o = null; - const s = H( - h, - t.url - ), a = s.length; - if (a > 0) { - const u = new Promise((c, l) => { - const r = t.clone(); - r.text().then((d) => { - if (d.includes(_.REFRESH_TOKEN) || d.includes(_.ACCESS_TOKEN)) { - let k = d; - for (let f = 0; f < a; f++) { - const E = s[f]; - if (E && E.tokens != null) { - const m = _.REFRESH_TOKEN + "_" + E.configurationName; - if (d.includes(m)) { - k = k.replace( - m, - encodeURIComponent(E.tokens.refresh_token) - ), o = E; - break; - } - const R = _.ACCESS_TOKEN + "_" + E.configurationName; - if (d.includes(R)) { - k = k.replace( - R, - encodeURIComponent(E.tokens.access_token) - ), o = E; - break; - } - } - } - const p = fetch(t, { - body: k, - method: r.method, - headers: { - ...C(t.headers) - }, - mode: r.mode, - cache: r.cache, - redirect: r.redirect, - referrer: r.referrer, - credentials: r.credentials, - integrity: r.integrity - }); - return o && o.oidcServerConfiguration != null && o.oidcServerConfiguration.revocationEndpoint && i.startsWith( - o.oidcServerConfiguration.revocationEndpoint - ) ? p.then(async (f) => { - const E = await f.text(); - return new Response(E, f); - }) : p.then(O(o)); - } else if (d.includes("code_verifier=") && S) { - o = h[S], S = null; - let k = d; - if (o && o.codeVerifier != null) { - const p = _.CODE_VERIFIER + "_" + o.configurationName; - d.includes(p) && (k = k.replace( - p, - o.codeVerifier - )); - } - return fetch(t, { - body: k, - method: r.method, - headers: { - ...C(t.headers) - }, - mode: r.mode, - cache: r.cache, - redirect: r.redirect, - referrer: r.referrer, - credentials: r.credentials, - integrity: r.integrity - }).then(O(o)); - } - }).then((d) => { - d !== void 0 ? c(d) : (console.log("success undefined"), l(new Error("Response is undefined inside a success"))); - }).catch((d) => { - d !== void 0 ? l(d) : (console.log("error undefined"), l(new Error("Response is undefined inside a error"))); - }); - }); - n.waitUntil(n.respondWith(u)); - } -}, Y = (n) => { - const t = n.ports[0], i = n.data, e = i.configurationName; - let o = h[e]; - switch (o || (h[e] = { - tokens: null, - state: null, - codeVerifier: null, - oidcServerConfiguration: null, - oidcConfiguration: void 0, - nonce: null, - status: null, - configurationName: e - }, o = h[e], trustedDomains[e] || (trustedDomains[e] = [])), i.type) { - case "clear": - o.tokens = null, o.state = null, o.codeVerifier = null, o.status = i.data.status, t.postMessage({ configurationName: e }); - return; - case "init": { - const s = i.data.oidcServerConfiguration, a = trustedDomains[e]; - a.find((c) => c === y) || [ - s.tokenEndpoint, - s.revocationEndpoint, - s.userInfoEndpoint, - s.issuer - ].forEach((c) => { - x(a, c); - }), o.oidcServerConfiguration = s, o.oidcConfiguration = i.data.oidcConfiguration; - const u = i.data.where; - if (u === "loginCallbackAsync" || u === "tryKeepExistingSessionAsync" ? S = e : S = null, !o.tokens) - t.postMessage({ - tokens: null, - status: o.status, - configurationName: e - }); - else { - const c = { - ...o.tokens, - access_token: _.ACCESS_TOKEN + "_" + e - }; - c.refresh_token && (c.refresh_token = _.REFRESH_TOKEN + "_" + e), c.idTokenPayload && c.idTokenPayload.nonce && o.nonce != null && (c.idTokenPayload.nonce = _.NONCE_TOKEN + "_" + e), t.postMessage({ - tokens: c, - status: o.status, - configurationName: e - }); - } - return; - } - case "setState": - o.state = i.data.state, t.postMessage({ configurationName: e }); - return; - case "getState": { - const s = o.state; - t.postMessage({ configurationName: e, state: s }); - return; - } - case "setCodeVerifier": - o.codeVerifier = i.data.codeVerifier, t.postMessage({ configurationName: e }); - return; - case "getCodeVerifier": { - t.postMessage({ - configurationName: e, - codeVerifier: _.CODE_VERIFIER + "_" + e - }); - return; - } - case "setSessionState": - o.sessionState = i.data.sessionState, t.postMessage({ configurationName: e }); - return; - case "getSessionState": { - const s = o.sessionState; - t.postMessage({ configurationName: e, sessionState: s }); - return; - } - case "setNonce": - o.nonce = i.data.nonce, t.postMessage({ configurationName: e }); - return; - default: - o.items = { ...i.data }, t.postMessage({ configurationName: e }); - } -}; -g.addEventListener("install", q); -g.addEventListener("activate", L); -g.addEventListener("fetch", J); -g.addEventListener("message", Y); +"use strict";const N="OidcTrustedDomains.js",y="*",_={REFRESH_TOKEN:"REFRESH_TOKEN_SECURED_BY_OIDC_SERVICE_WORKER",ACCESS_TOKEN:"ACCESS_TOKEN_SECURED_BY_OIDC_SERVICE_WORKER",NONCE_TOKEN:"NONCE_SECURED_BY_OIDC_SERVICE_WORKER",CODE_VERIFIER:"CODE_VERIFIER_SECURED_BY_OIDC_SERVICE_WORKER"},v={access_token_or_id_token_invalid:"access_token_or_id_token_invalid",access_token_invalid:"access_token_invalid",id_token_invalid:"id_token_invalid"},A="/.well-known/openid-configuration";function x(n,t){if(!t)return;if(!n.find(e=>{var s;let o;return typeof e=="string"?o=new RegExp(`^${e}`):o=e,(s=o.test)==null?void 0:s.call(o,t)}))throw new Error("Domain "+t+" is not trusted, please add domain in "+N)}const D=(n,t,i)=>{var e;if(t.endsWith(A))return null;for(const[o,s]of Object.entries(n)){const a=s.oidcServerConfiguration;if(!a||a.tokenEndpoint&&t===a.tokenEndpoint||a.revocationEndpoint&&t===a.revocationEndpoint)continue;const d=a.userInfoEndpoint?[a.userInfoEndpoint,...i[o]]:[...i[o]];let c=!1;if(d.find(u=>u===y))c=!0;else for(let u=0;u"%"+("00"+t.charCodeAt(0).toString(16)).slice(-2)).join(""))}function P(n,t){const i=new Date().getTime()/1e3;return Math.round(t-n-i)}function W(n){return n?P(0,n.expiresAt)>0:!1}const w=n=>{try{return n&&K(n,".")===2?M(n):null}catch(t){console.warn(t)}return null},F=(n,t,i)=>{if(n.idTokenPayload){const e=n.idTokenPayload;if(i.issuer!==e.iss)return{isValid:!1,reason:"Issuer does not match"};const o=new Date().getTime()/1e3;if(e.exp&&e.expi.status!==200?i:i.json().then(e=>{if(!e.issued_at){const f=new Date().getTime()/1e3;e.issued_at=f}const o=w(e.access_token),s={...e,access_token:_.ACCESS_TOKEN+"_"+t,accessTokenPayload:o};e.accessTokenPayload=o;let a=null;if(e.id_token){if(a=w(e.id_token),e.idTokenPayload={...a},a.nonce&&n.nonce!=null){const f=_.NONCE_TOKEN+"_"+n.configurationName;a.nonce=f}s.idTokenPayload=a}e.refresh_token&&(s.refresh_token=_.REFRESH_TOKEN+"_"+t);const d=a&&a.exp?a.exp:Number.MAX_VALUE,c=o&&o.exp?o.exp:e.issued_at+e.expires_in;let u;const r=n.oidcConfiguration.token_renew_mode;r===v.access_token_invalid?u=c:r===v.id_token_invalid?u=d:u=dnew Promise(t=>setTimeout(t,n)),g=self;g.importScripts(N);const I=Math.round(new Date().getTime()/1e3).toString(),b="OidcKeepAliveServiceWorker.json",q=n=>{console.log("[OidcServiceWorker] service worker installed "+I),n.waitUntil(g.skipWaiting())},L=n=>{console.log("[OidcServiceWorker] service worker activated "+I),n.waitUntil(g.clients.claim())};let S=null;const h={default:{configurationName:"default",tokens:null,status:null,state:null,codeVerifier:null,nonce:null,oidcServerConfiguration:null}},H=(n,t)=>{const i=[];for(const[,e]of Object.entries(n))(e.oidcServerConfiguration!=null&&t.startsWith(e.oidcServerConfiguration.tokenEndpoint)||e.oidcServerConfiguration!=null&&e.oidcServerConfiguration.revocationEndpoint&&t.startsWith(e.oidcServerConfiguration.revocationEndpoint))&&i.push(e);return i},j=async n=>{const t=n.request,i=t.headers.has("oidc-vanilla"),e={status:200,statusText:"oidc-service-worker"},o=new Response("{}",e);if(!i){const s=new URL(t.url),a=Number(s.searchParams.get("minSleepSeconds"))||240;for(let d=0;d{const t=n.request,i=t.url;if(t.url.includes(b)){n.respondWith(j(n));return}const e=D(h,t.url,trustedDomains);if(e&&e.tokens&&e.tokens.access_token){for(;e.tokens&&!W(e.tokens);)await V(200);const d=new Request(t,{headers:{...C(t.headers),authorization:"Bearer "+e.tokens.access_token},mode:e.oidcConfiguration.service_worker_convert_all_requests_to_cors?"cors":t.mode});n.waitUntil(n.respondWith(fetch(d)));return}if(n.request.method!=="POST")return;let o=null;const s=H(h,t.url),a=s.length;if(a>0){const d=new Promise((c,u)=>{const r=t.clone();r.text().then(l=>{if(l.includes(_.REFRESH_TOKEN)||l.includes(_.ACCESS_TOKEN)){let k=l;for(let f=0;f{const E=await f.text();return new Response(E,f)}):p.then(O(o))}else if(l.includes("code_verifier=")&&S){o=h[S],S=null;let k=l;if(o&&o.codeVerifier!=null){const p=_.CODE_VERIFIER+"_"+o.configurationName;l.includes(p)&&(k=k.replace(p,o.codeVerifier))}return fetch(t,{body:k,method:r.method,headers:{...C(t.headers)},mode:r.mode,cache:r.cache,redirect:r.redirect,referrer:r.referrer,credentials:r.credentials,integrity:r.integrity}).then(O(o))}}).then(l=>{l!==void 0?c(l):(console.log("success undefined"),u(new Error("Response is undefined inside a success")))}).catch(l=>{l!==void 0?u(l):(console.log("error undefined"),u(new Error("Response is undefined inside a error")))})});n.waitUntil(n.respondWith(d))}},Y=n=>{const t=n.ports[0],i=n.data,e=i.configurationName;let o=h[e];switch(o||(h[e]={tokens:null,state:null,codeVerifier:null,oidcServerConfiguration:null,oidcConfiguration:void 0,nonce:null,status:null,configurationName:e},o=h[e],trustedDomains[e]||(trustedDomains[e]=[])),i.type){case"clear":o.tokens=null,o.state=null,o.codeVerifier=null,o.status=i.data.status,t.postMessage({configurationName:e});return;case"init":{const s=i.data.oidcServerConfiguration,a=trustedDomains[e];a.find(c=>c===y)||[s.tokenEndpoint,s.revocationEndpoint,s.userInfoEndpoint,s.issuer].forEach(c=>{x(a,c)}),o.oidcServerConfiguration=s,o.oidcConfiguration=i.data.oidcConfiguration;const d=i.data.where;if(d==="loginCallbackAsync"||d==="tryKeepExistingSessionAsync"?S=e:S=null,!o.tokens)t.postMessage({tokens:null,status:o.status,configurationName:e});else{const c={...o.tokens,access_token:_.ACCESS_TOKEN+"_"+e};c.refresh_token&&(c.refresh_token=_.REFRESH_TOKEN+"_"+e),c.idTokenPayload&&c.idTokenPayload.nonce&&o.nonce!=null&&(c.idTokenPayload.nonce=_.NONCE_TOKEN+"_"+e),t.postMessage({tokens:c,status:o.status,configurationName:e})}return}case"setState":o.state=i.data.state,t.postMessage({configurationName:e});return;case"getState":{const s=o.state;t.postMessage({configurationName:e,state:s});return}case"setCodeVerifier":o.codeVerifier=i.data.codeVerifier,t.postMessage({configurationName:e});return;case"getCodeVerifier":{t.postMessage({configurationName:e,codeVerifier:_.CODE_VERIFIER+"_"+e});return}case"setSessionState":o.sessionState=i.data.sessionState,t.postMessage({configurationName:e});return;case"getSessionState":{const s=o.sessionState;t.postMessage({configurationName:e,sessionState:s});return}case"setNonce":o.nonce=i.data.nonce,t.postMessage({configurationName:e});return;default:o.items={...i.data},t.postMessage({configurationName:e})}};g.addEventListener("install",q);g.addEventListener("activate",L);g.addEventListener("fetch",J);g.addEventListener("message",Y); //# sourceMappingURL=OidcServiceWorker.js.map diff --git a/client/src/App.svelte b/client/src/App.svelte index ab762c1..a87638f 100644 --- a/client/src/App.svelte +++ b/client/src/App.svelte @@ -2,7 +2,7 @@ import "./variables.scss"; import { Router, Route } from "svelte-navigator"; import { crud } from "./lib/const.js"; - import { userInfo } from "./lib/store.js"; + import { tokens } from "./lib/store.js"; import AuthWrapper from "./components/oidc/AuthWrapper.svelte"; import CrudManager from "./components/CrudManager.svelte"; import StuffCreate from "./components/StuffCreate.svelte"; @@ -33,5 +33,5 @@ -
{JSON.stringify($userInfo, null, "\t")}
+
{JSON.stringify($tokens, null, "\t")}
diff --git a/client/src/components/oidc/AuthWrapper.svelte b/client/src/components/oidc/AuthWrapper.svelte index 433be84..40ed308 100644 --- a/client/src/components/oidc/AuthWrapper.svelte +++ b/client/src/components/oidc/AuthWrapper.svelte @@ -2,13 +2,12 @@ // AuthWrapper.svelte import { onMount } from "svelte"; import { isAuthLoading, tokens } from "../../lib/store.js"; - import { getTokenAync, getUserAsync } from "../../lib/oidc.js"; + import { getTokenAync } from "../../lib/oidc.js"; import Loading from "../common/Loading.svelte"; import Login from "./Login.svelte"; onMount(async () => { await getTokenAync(); - await getUserAsync(); }); diff --git a/client/src/lib/const.js b/client/src/lib/const.js index 64a1793..e1436a3 100644 --- a/client/src/lib/const.js +++ b/client/src/lib/const.js @@ -5,9 +5,10 @@ export const configuration = { silent_redirect_uri: window.location.origin + "/authentication/silent-callback", scope: "openid profile email api offline_access", authority: "https://demo.duendesoftware.com", - // service_worker_relative_url: "/OidcServiceWorker.js", - // service_worker_only: true, - // monitor_session: true + service_worker_relative_url: '/OidcServiceWorker.js', + service_worker_only: false, + silent_login_timeout: 1000, + monitor_session: true, }; export const apiErrMsg = { diff --git a/client/src/lib/oidc.js b/client/src/lib/oidc.js index 7809daf..cd8ea05 100644 --- a/client/src/lib/oidc.js +++ b/client/src/lib/oidc.js @@ -1,6 +1,6 @@ // oidc.js import { VanillaOidc } from "@axa-fr/vanilla-oidc"; -import { isAuthLoading, tokens, userInfo } from "./store.js"; +import { isAuthLoading, tokens } from "./store.js"; import { configuration } from "./const.js"; const href = window.location.href; @@ -23,14 +23,6 @@ export let getTokenAync = async () => { }); }; -export let getUserAsync = async () => { - vanillaOidc.getValidTokenAsync().then(() => { - vanillaOidc.userInfoAsync().then((result) => { - userInfo.set(result); - }); - }); -}; - export const loginAsync = async () => { await vanillaOidc.loginAsync("/"); }; diff --git a/client/src/lib/store.js b/client/src/lib/store.js index bb6fc8a..3f6d505 100644 --- a/client/src/lib/store.js +++ b/client/src/lib/store.js @@ -2,16 +2,6 @@ import { writable } from "svelte/store"; export const isAuthLoading = writable(false); -isAuthLoading.subscribe(value => value); - export const isLoading = writable(false); -isLoading.subscribe(value => value); - export const selectedItem = writable(JSON.parse(localStorage.getItem("selectedItem")) || {}); -selectedItem.subscribe(val => localStorage.setItem("selectedItem", JSON.stringify(val))); - export const tokens = writable(null); -tokens.subscribe(value => value); - -export const userInfo = writable(null); -userInfo.subscribe(value => value); \ No newline at end of file