diff --git a/package-lock.json b/package-lock.json index d0b920a..31efa18 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,33 +1,34 @@ { "name": "thatconference.com", - "version": "5.0.9", + "version": "5.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "thatconference.com", - "version": "5.0.9", + "version": "5.1.0", "license": "GPL-3.0", "dependencies": { - "@sentry/sveltekit": "^7.73.0" + "@sentry/sveltekit": "^7.74.0" }, "devDependencies": { - "@auth0/nextjs-auth0": "^1.9.3", - "@commitlint/cli": "^17.7.2", - "@commitlint/config-conventional": "^17.7.0", + "@auth/core": "^0.17.0", + "@auth/sveltekit": "^0.3.10", + "@commitlint/cli": "^17.8.0", + "@commitlint/config-conventional": "^17.8.0", "@fortawesome/free-regular-svg-icons": "^6.4.2", "@fullhuman/postcss-purgecss": "^5.0.0", - "@playwright/test": "^1.38.1", - "@sentry/svelte": "^7.73.0", - "@sentry/tracing": "^7.73.0", - "@stripe/stripe-js": "^2.1.7", + "@playwright/test": "^1.39.0", + "@sentry/svelte": "^7.74.0", + "@sentry/tracing": "^7.74.0", + "@stripe/stripe-js": "^2.1.8", "@sveltejs/adapter-auto": "2.1.0", - "@sveltejs/kit": "1.25.1", + "@sveltejs/kit": "1.25.2", "@tailwindcss/aspect-ratio": "^0.4.2", "@tailwindcss/forms": "^0.5.6", "@tailwindcss/line-clamp": "^0.4.4", "@tailwindcss/typography": "^0.5.10", - "@vercel/analytics": "^1.1.0", + "@vercel/analytics": "^1.1.1", "@xstate/inspect": "^0.8.0", "@xstate/svelte": "^2.1.0", "all-contributors-cli": "^6.26.1", @@ -50,7 +51,7 @@ "isomorphic-fetch": "^3.0.0", "lazysizes": "^5.3.2", "lodash": "^4.17.21", - "lucide-svelte": "^0.277.0", + "lucide-svelte": "^0.287.0", "marked": "^7.0.5", "mdsvex": "^0.11.0", "moment-timezone": "^0.5.43", @@ -60,8 +61,7 @@ "postcss-load-config": "^4.0.1", "prettier": "^3.0.3", "prettier-plugin-svelte": "^3.0.3", - "prettier-plugin-tailwindcss": "^0.5.5", - "react": "^18.2.0", + "prettier-plugin-tailwindcss": "^0.5.6", "rehype-autolink-headings": "^7.0.0", "rehype-slug": "^6.0.0", "remark-preview": "^1.0.2", @@ -124,29 +124,48 @@ "node": ">=6.0.0" } }, - "node_modules/@auth0/nextjs-auth0": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@auth0/nextjs-auth0/-/nextjs-auth0-1.9.3.tgz", - "integrity": "sha512-J+xzP6jh+F4b7JrPYeYjesY9Kdihj9gcEreYQ55qZeB43p0VMSZJSO5EqduDmgn585tKbt1TZccO7xaX0YbEeA==", + "node_modules/@auth/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@auth/core/-/core-0.17.0.tgz", + "integrity": "sha512-YkbWuXny6sv0gF/sYm7KD3GxnnGxJomoQJzibzhJuwVOYjPUjjYBv/JMTkYcfpBuPHoHZwTVR3y1J+/W18oRxA==", "dev": true, "dependencies": { - "base64url": "^3.0.1", - "cookie": "^0.5.0", - "debug": "^4.3.4", - "futoin-hkdf": "^1.5.0", - "http-errors": "^1.8.1", - "joi": "^17.6.0", - "jose": "^2.0.5", - "on-headers": "^1.0.2", - "openid-client": "^4.9.1", - "tslib": "^2.4.0", - "url-join": "^4.0.1" + "@panva/hkdf": "^1.0.4", + "cookie": "0.5.0", + "jose": "^4.11.1", + "oauth4webapi": "^2.0.6", + "preact": "10.11.3", + "preact-render-to-string": "5.2.3" }, - "engines": { - "node": "^10.13.0 || >=12.0.0" + "peerDependencies": { + "nodemailer": "^6.8.0" + }, + "peerDependenciesMeta": { + "nodemailer": { + "optional": true + } + } + }, + "node_modules/@auth/core/node_modules/jose": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.3.tgz", + "integrity": "sha512-RZJdL9Qjd1sqNdyiVteRGV/bnWtik/+PJh1JP4kT6+x1QQMn+7ryueRys5BEueuayvSVY8CWGCisCDazeRLTuw==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/@auth/sveltekit": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/@auth/sveltekit/-/sveltekit-0.3.10.tgz", + "integrity": "sha512-VQKpEY5anPjD1kDc9bbNmNpCOuKJCNvmebKazxN5gwOFL9w5lAZLfTBp1ta10qj1CfjHPYlMrLTLI+jjN5KM3g==", + "dev": true, + "dependencies": { + "@auth/core": "0.17.0" }, "peerDependencies": { - "next": ">=10" + "@sveltejs/kit": "^1.0.0", + "svelte": "^3.54.0 || ^4.0.0" } }, "node_modules/@babel/code-frame": { @@ -371,14 +390,14 @@ } }, "node_modules/@commitlint/cli": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.7.2.tgz", - "integrity": "sha512-t3N7TZq7lOeqTOyEgfGcaltHqEJf7YDlPg75MldeVPPyz14jZq/+mbGF9tueDLFX8R6RwdymrN6D+U5XwZ8Iwg==", + "version": "17.8.0", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.8.0.tgz", + "integrity": "sha512-D3LdyZYbiRyAChfJMNlAd9f2P9vNQ7GWbI9gN2o7L5hF07QJDqj4z/pcJF3PjDbJWOaUUXla287RdDmmKqH2WQ==", "dev": true, "dependencies": { "@commitlint/format": "^17.4.4", - "@commitlint/lint": "^17.7.0", - "@commitlint/load": "^17.7.2", + "@commitlint/lint": "^17.8.0", + "@commitlint/load": "^17.8.0", "@commitlint/read": "^17.5.1", "@commitlint/types": "^17.4.4", "execa": "^5.0.0", @@ -395,9 +414,9 @@ } }, "node_modules/@commitlint/config-conventional": { - "version": "17.7.0", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-17.7.0.tgz", - "integrity": "sha512-iicqh2o6et+9kWaqsQiEYZzfLbtoWv9uZl8kbI8EGfnc0HeGafQBF7AJ0ylN9D/2kj6txltsdyQs8+2fTMwWEw==", + "version": "17.8.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-17.8.0.tgz", + "integrity": "sha512-MgiFXujmqAvi7M33C7OSMTznwrVkckrbXe/aZWQ/+KFGLLF6IE50XIcjGrW0/uiDGb/im5qbqF2dh1dCFNa+sQ==", "dev": true, "dependencies": { "conventional-changelog-conventionalcommits": "^6.1.0" @@ -459,9 +478,9 @@ } }, "node_modules/@commitlint/is-ignored": { - "version": "17.7.0", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-17.7.0.tgz", - "integrity": "sha512-043rA7m45tyEfW7Zv2vZHF++176MLHH9h70fnPoYlB1slKBeKl8BwNIlnPg4xBdRBVNPaCqvXxWswx2GR4c9Hw==", + "version": "17.8.0", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-17.8.0.tgz", + "integrity": "sha512-8bR6rxNcWaNprPBdE4ePIOwbxutTQGOsRPYWssX+zjGxnEljzaZSGzFUOMxapYILlf8Tts/O1wPQgG549Rdvdg==", "dev": true, "dependencies": { "@commitlint/types": "^17.4.4", @@ -472,12 +491,12 @@ } }, "node_modules/@commitlint/lint": { - "version": "17.7.0", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-17.7.0.tgz", - "integrity": "sha512-TCQihm7/uszA5z1Ux1vw+Nf3yHTgicus/+9HiUQk+kRSQawByxZNESeQoX9ujfVd3r4Sa+3fn0JQAguG4xvvbA==", + "version": "17.8.0", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-17.8.0.tgz", + "integrity": "sha512-4ihwnqOY4TcJN6iz5Jv1LeYavvBllONwFyGxOIWmCT5s4PNMb43cws2TUdbXTZL1Vq59etGKd5LWYDFPVbs5EA==", "dev": true, "dependencies": { - "@commitlint/is-ignored": "^17.7.0", + "@commitlint/is-ignored": "^17.8.0", "@commitlint/parse": "^17.7.0", "@commitlint/rules": "^17.7.0", "@commitlint/types": "^17.4.4" @@ -487,9 +506,9 @@ } }, "node_modules/@commitlint/load": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.7.2.tgz", - "integrity": "sha512-XA7WTnsjHZ4YH6ZYsrnxgLdXzriwMMq+utZUET6spbOEEIPBCDLdOQXS26P+v3TTO4hUHOEhzUquaBv3jbBixw==", + "version": "17.8.0", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.8.0.tgz", + "integrity": "sha512-9VnGXYJCP4tXmR4YrwP8n5oX6T5ZsHfPQq6WuUQOvAI+QsDQMaTGgTRXr7us+xsjz+b+mMBSagogqfUx2aixyw==", "dev": true, "dependencies": { "@commitlint/config-validator": "^17.6.7", @@ -1114,21 +1133,6 @@ "postcss": "^8.0.0" } }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "dev": true - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "dev": true, - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.11", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", @@ -1217,166 +1221,6 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@next/env": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/env/-/env-13.5.4.tgz", - "integrity": "sha512-LGegJkMvRNw90WWphGJ3RMHMVplYcOfRWf2Be3td3sUa+1AaxmsYyANsA+znrGCBjXJNi4XAQlSoEfUxs/4kIQ==", - "dev": true, - "peer": true - }, - "node_modules/@next/swc-darwin-arm64": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.4.tgz", - "integrity": "sha512-Df8SHuXgF1p+aonBMcDPEsaahNo2TCwuie7VXED4FVyECvdXfRT9unapm54NssV9tF3OQFKBFOdlje4T43VO0w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-x64": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.4.tgz", - "integrity": "sha512-siPuUwO45PnNRMeZnSa8n/Lye5ZX93IJom9wQRB5DEOdFrw0JjOMu1GINB8jAEdwa7Vdyn1oJ2xGNaQpdQQ9Pw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.4.tgz", - "integrity": "sha512-l/k/fvRP/zmB2jkFMfefmFkyZbDkYW0mRM/LB+tH5u9pB98WsHXC0WvDHlGCYp3CH/jlkJPL7gN8nkTQVrQ/2w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.4.tgz", - "integrity": "sha512-YYGb7SlLkI+XqfQa8VPErljb7k9nUnhhRrVaOdfJNCaQnHBcvbT7cx/UjDQLdleJcfyg1Hkn5YSSIeVfjgmkTg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.4.tgz", - "integrity": "sha512-uE61vyUSClnCH18YHjA8tE1prr/PBFlBFhxBZis4XBRJoR+txAky5d7gGNUIbQ8sZZ7LVkSVgm/5Fc7mwXmRAg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.4.tgz", - "integrity": "sha512-qVEKFYML/GvJSy9CfYqAdUexA6M5AklYcQCW+8JECmkQHGoPxCf04iMh7CPR7wkHyWWK+XLt4Ja7hhsPJtSnhg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.4.tgz", - "integrity": "sha512-mDSQfqxAlfpeZOLPxLymZkX0hYF3juN57W6vFHTvwKlnHfmh12Pt7hPIRLYIShk8uYRsKPtMTth/EzpwRI+u8w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.4.tgz", - "integrity": "sha512-aoqAT2XIekIWoriwzOmGFAvTtVY5O7JjV21giozBTP5c6uZhpvTWRbmHXbmsjZqY4HnEZQRXWkSAppsIBweKqw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.4.tgz", - "integrity": "sha512-cyRvlAxwlddlqeB9xtPSfNSCRy8BOa4wtMo0IuI9P7Y0XT2qpDrpFKRyZ7kUngZis59mPVla5k8X1oOJ8RxDYg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -1412,22 +1256,22 @@ "node": ">= 8" } }, - "node_modules/@panva/asn1.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@panva/asn1.js/-/asn1.js-1.0.0.tgz", - "integrity": "sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw==", + "node_modules/@panva/hkdf": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@panva/hkdf/-/hkdf-1.1.1.tgz", + "integrity": "sha512-dhPeilub1NuIG0X5Kvhh9lH4iW3ZsHlnzwgwbOlgwQ2wG1IqFzsgHqmKPk3WzsdWAeaxKJxgM0+W433RmN45GA==", "dev": true, - "engines": { - "node": ">=10.13.0" + "funding": { + "url": "https://github.com/sponsors/panva" } }, "node_modules/@playwright/test": { - "version": "1.38.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.38.1.tgz", - "integrity": "sha512-NqRp8XMwj3AK+zKLbZShl0r/9wKgzqI/527bkptKXomtuo+dOjU9NdMASQ8DNC9z9zLOMbG53T4eihYr3XR+BQ==", + "version": "1.39.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.39.0.tgz", + "integrity": "sha512-3u1iFqgzl7zr004bGPYiN/5EZpRUSFddQBra8Rqll5N0/vfpqlP9I9EXqAoGacuAbX6c9Ulg/Cjqglp5VkK6UQ==", "dev": true, "dependencies": { - "playwright": "1.38.1" + "playwright": "1.39.0" }, "bin": { "playwright": "cli.js" @@ -1442,13 +1286,13 @@ "integrity": "sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==" }, "node_modules/@sentry-internal/tracing": { - "version": "7.73.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.73.0.tgz", - "integrity": "sha512-ig3WL/Nqp8nRQ52P205NaypGKNfIl/G+cIqge9xPW6zfRb5kJdM1YParw9GSJ1SPjEZBkBORGAML0on5H2FILw==", + "version": "7.74.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.74.0.tgz", + "integrity": "sha512-JK6IRGgdtZjswGfaGIHNWIThffhOHzVIIaGmglui+VFIzOsOqePjoxaDV0MEvzafxXZD7eWqGE5RGuZ0n6HFVg==", "dependencies": { - "@sentry/core": "7.73.0", - "@sentry/types": "7.73.0", - "@sentry/utils": "7.73.0", + "@sentry/core": "7.74.0", + "@sentry/types": "7.74.0", + "@sentry/utils": "7.74.0", "tslib": "^2.4.1 || ^1.9.3" }, "engines": { @@ -1456,15 +1300,15 @@ } }, "node_modules/@sentry/browser": { - "version": "7.73.0", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.73.0.tgz", - "integrity": "sha512-e301hUixcJ5+HNKCJwajFF5smF4opXEFSclyWsJuFNufv5J/1C1SDhbwG2JjBt5zzdSoKWJKT1ewR6vpICyoDw==", - "dependencies": { - "@sentry-internal/tracing": "7.73.0", - "@sentry/core": "7.73.0", - "@sentry/replay": "7.73.0", - "@sentry/types": "7.73.0", - "@sentry/utils": "7.73.0", + "version": "7.74.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.74.0.tgz", + "integrity": "sha512-Njr8216Z1dFUcl6NqBOk20dssK9SjoVddY74Xq+Q4p3NfXBG3lkMcACXor7SFoJRZXq8CZWGS13Cc5KwViRw4g==", + "dependencies": { + "@sentry-internal/tracing": "7.74.0", + "@sentry/core": "7.74.0", + "@sentry/replay": "7.74.0", + "@sentry/types": "7.74.0", + "@sentry/utils": "7.74.0", "tslib": "^2.4.1 || ^1.9.3" }, "engines": { @@ -1520,12 +1364,12 @@ } }, "node_modules/@sentry/core": { - "version": "7.73.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.73.0.tgz", - "integrity": "sha512-9FEz4Gq848LOgVN2OxJGYuQqxv7cIVw69VlAzWHEm3njt8mjvlTq+7UiFsGRo84+59V2FQuHxzA7vVjl90WfSg==", + "version": "7.74.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.74.0.tgz", + "integrity": "sha512-83NRuqn7nDZkSVBN5yJQqcpXDG4yMYiB7TkYUKrGTzBpRy6KUOrkCdybuKk0oraTIGiGSe5WEwCFySiNgR9FzA==", "dependencies": { - "@sentry/types": "7.73.0", - "@sentry/utils": "7.73.0", + "@sentry/types": "7.74.0", + "@sentry/utils": "7.74.0", "tslib": "^2.4.1 || ^1.9.3" }, "engines": { @@ -1533,13 +1377,13 @@ } }, "node_modules/@sentry/integrations": { - "version": "7.73.0", - "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-7.73.0.tgz", - "integrity": "sha512-IjVpn4d+aSL9L1Ntu/oAdRwujz4BzzavDsZf96Xgc/AjBnjAEUT+wT1dAwluThfuKDXmWOJHhZ2cHHMfqI+7vw==", + "version": "7.74.0", + "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-7.74.0.tgz", + "integrity": "sha512-O4UyxiV5wzXSDnEd9Z/SIt/5M12URWNtIJPPJjowlllzw8X9e3zBcnXmjMOLZ+mZWjQmRDjOoz3lPPQ17f7fvw==", "dependencies": { - "@sentry/core": "7.73.0", - "@sentry/types": "7.73.0", - "@sentry/utils": "7.73.0", + "@sentry/core": "7.74.0", + "@sentry/types": "7.74.0", + "@sentry/utils": "7.74.0", "localforage": "^1.8.1", "tslib": "^2.4.1 || ^1.9.3" }, @@ -1548,14 +1392,14 @@ } }, "node_modules/@sentry/node": { - "version": "7.73.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-7.73.0.tgz", - "integrity": "sha512-i50bRfmgkRRx0XXUbg9jGD/RuznDJxJXc4rBILhoJuhl+BjRIaoXA3ayplfJn8JLZxsNh75uJaCq4IUK70SORw==", - "dependencies": { - "@sentry-internal/tracing": "7.73.0", - "@sentry/core": "7.73.0", - "@sentry/types": "7.73.0", - "@sentry/utils": "7.73.0", + "version": "7.74.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-7.74.0.tgz", + "integrity": "sha512-uBmW2/z0cz/WFIG74ZF7lSipO0XNzMf9yrdqnZXnGDYsUZE4I4QiqDN0hNi6fkTgf9MYRC8uFem2OkAvyPJ74Q==", + "dependencies": { + "@sentry-internal/tracing": "7.74.0", + "@sentry/core": "7.74.0", + "@sentry/types": "7.74.0", + "@sentry/utils": "7.74.0", "cookie": "^0.5.0", "https-proxy-agent": "^5.0.0", "lru_map": "^0.3.3", @@ -1566,26 +1410,26 @@ } }, "node_modules/@sentry/replay": { - "version": "7.73.0", - "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.73.0.tgz", - "integrity": "sha512-a8IC9SowBisLYD2IdLkXzx7gN4iVwHDJhQvLp2B8ARs1PyPjJ7gCxSMHeGrYp94V0gOXtorNYkrxvuX8ayPROA==", + "version": "7.74.0", + "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.74.0.tgz", + "integrity": "sha512-GoYa3cHTTFVI/J1cnZ0i4X128mf/JljaswO3PWNTe2k3lSHq/LM5aV0keClRvwM0W8hlix8oOTT06nnenOUmmw==", "dependencies": { - "@sentry/core": "7.73.0", - "@sentry/types": "7.73.0", - "@sentry/utils": "7.73.0" + "@sentry/core": "7.74.0", + "@sentry/types": "7.74.0", + "@sentry/utils": "7.74.0" }, "engines": { "node": ">=12" } }, "node_modules/@sentry/svelte": { - "version": "7.73.0", - "resolved": "https://registry.npmjs.org/@sentry/svelte/-/svelte-7.73.0.tgz", - "integrity": "sha512-wori/ZeOxiYb8yWLNeFhuAiPtvDkmDMX7Cxlmg6yxc/L4Awjx5zFGtsQLW/LiEUHOTdIpJqWXhkFm6u4EMRafw==", + "version": "7.74.0", + "resolved": "https://registry.npmjs.org/@sentry/svelte/-/svelte-7.74.0.tgz", + "integrity": "sha512-dIbNOGs6wOp7QrRjDvYtuNDWeQjXRSWBWJWQVxHLpnzLoWW6isj1Iyrbm9po38CBGdmv5jcQz69Lf5GFRckgFw==", "dependencies": { - "@sentry/browser": "7.73.0", - "@sentry/types": "7.73.0", - "@sentry/utils": "7.73.0", + "@sentry/browser": "7.74.0", + "@sentry/types": "7.74.0", + "@sentry/utils": "7.74.0", "magic-string": "^0.30.0", "tslib": "^2.4.1 || ^1.9.3" }, @@ -1597,17 +1441,17 @@ } }, "node_modules/@sentry/sveltekit": { - "version": "7.73.0", - "resolved": "https://registry.npmjs.org/@sentry/sveltekit/-/sveltekit-7.73.0.tgz", - "integrity": "sha512-YssAFxuCGVBUMoc/8jUYc/mqGGRi3tiVWLAjIK4gKEXp9mHqCEKCxV8mcPvwZdNjCodIq69Y9GSMDSfrHxu7Yg==", - "dependencies": { - "@sentry-internal/tracing": "7.73.0", - "@sentry/core": "7.73.0", - "@sentry/integrations": "7.73.0", - "@sentry/node": "7.73.0", - "@sentry/svelte": "7.73.0", - "@sentry/types": "7.73.0", - "@sentry/utils": "7.73.0", + "version": "7.74.0", + "resolved": "https://registry.npmjs.org/@sentry/sveltekit/-/sveltekit-7.74.0.tgz", + "integrity": "sha512-Ijdc/5lcvpwL0owkCkZP36YzcU32Fc8/38PrqU1rXsNglBB1KyZ0zAbsCevN+Y9sv5BLVGut8uIsJ7Fc0j6iFQ==", + "dependencies": { + "@sentry-internal/tracing": "7.74.0", + "@sentry/core": "7.74.0", + "@sentry/integrations": "7.74.0", + "@sentry/node": "7.74.0", + "@sentry/svelte": "7.74.0", + "@sentry/types": "7.74.0", + "@sentry/utils": "7.74.0", "@sentry/vite-plugin": "^0.6.1", "magicast": "0.2.8", "sorcery": "0.11.0" @@ -1620,30 +1464,30 @@ } }, "node_modules/@sentry/tracing": { - "version": "7.73.0", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-7.73.0.tgz", - "integrity": "sha512-LOQR6Hkc8ZoflCXWtMlxTbCBEwv0MSOr3vesnRsmlFG8TW1YUIneU+wKnVxToWAZ8fq+6ubclnuIUKHfqTk/Tg==", + "version": "7.74.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-7.74.0.tgz", + "integrity": "sha512-rSFJADhh3J3zmkzJ1EXCOwS3h7F6o/lSKu7CWZSZ6k5kBvbCJ5AXvGQadhPdWPJMMcPFzCJaOyTKEPcwL4tbCw==", "dependencies": { - "@sentry-internal/tracing": "7.73.0" + "@sentry-internal/tracing": "7.74.0" }, "engines": { "node": ">=8" } }, "node_modules/@sentry/types": { - "version": "7.73.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.73.0.tgz", - "integrity": "sha512-/v8++bly8jW7r4cP2wswYiiVpn7eLLcqwnfPUMeCQze4zj3F3nTRIKc9BGHzU0V+fhHa3RwRC2ksqTGq1oJMDg==", + "version": "7.74.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.74.0.tgz", + "integrity": "sha512-rI5eIRbUycWjn6s6o3yAjjWtIvYSxZDdnKv5je2EZINfLKcMPj1dkl6wQd2F4y7gLfD/N6Y0wZYIXC3DUdJQQg==", "engines": { "node": ">=8" } }, "node_modules/@sentry/utils": { - "version": "7.73.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.73.0.tgz", - "integrity": "sha512-h3ZK/qpf4k76FhJV9uiSbvMz3V/0Ovy94C+5/9UgPMVCJXFmVsdw8n/dwANJ7LupVPfYP23xFGgebDMFlK1/2w==", + "version": "7.74.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.74.0.tgz", + "integrity": "sha512-k3np8nuTPtx5KDODPtULfFln4UXdE56MZCcF19Jv6Ljxf+YN/Ady1+0Oi3e0XoSvFpWNyWnglauT7M65qCE6kg==", "dependencies": { - "@sentry/types": "7.73.0", + "@sentry/types": "7.74.0", "tslib": "^2.4.1 || ^1.9.3" }, "engines": { @@ -1661,49 +1505,16 @@ "node": ">= 10" } }, - "node_modules/@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", - "dev": true, - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", - "dev": true - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "dev": true - }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", "dev": true }, - "node_modules/@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, "node_modules/@stripe/stripe-js": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@stripe/stripe-js/-/stripe-js-2.1.7.tgz", - "integrity": "sha512-oI620ARpFp5jCXfwIYMxyBJmtTFuAjSA8x3k3JgW1M6cvLmw9XgmNcGNegQWmirpozhFNflxrZEgp10og+6MSA==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@stripe/stripe-js/-/stripe-js-2.1.8.tgz", + "integrity": "sha512-j0RGEaU73Wev17n/3CFn0iVsmsa+J/o0kN8bexGQguqypvYFxSJ/iYlTwwKT39ThgSJsQtWQl8vGJC43qeoy/g==", "dev": true }, "node_modules/@sveltejs/adapter-auto": { @@ -1719,9 +1530,9 @@ } }, "node_modules/@sveltejs/kit": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.25.1.tgz", - "integrity": "sha512-pD8XsvNJNgTNkFngNlM60my/X8dXWPKVzN5RghEQr0NjGZmuCjy49AfFu2cGbZjNf5pBcqd2RCNMW912P5fkhA==", + "version": "1.25.2", + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.25.2.tgz", + "integrity": "sha512-USuuSpdAPFDiLi58N2Pwd/TG9bcUSPAlzE5iaAXaLyCTWa3l36HDKH6nV5NqBybwfeux1ZwgtIeITLZJDJ6HDg==", "hasInstallScript": true, "dependencies": { "@sveltejs/vite-plugin-svelte": "^2.4.1", @@ -1786,28 +1597,6 @@ "vite": "^4.0.0" } }, - "node_modules/@swc/helpers": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz", - "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==", - "dev": true, - "peer": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "dev": true, - "dependencies": { - "defer-to-connect": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@tailwindcss/aspect-ratio": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/@tailwindcss/aspect-ratio/-/aspect-ratio-0.4.2.tgz", @@ -1886,18 +1675,6 @@ "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", "dev": true }, - "node_modules/@types/cacheable-request": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", - "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", - "dev": true, - "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "^3.1.4", - "@types/node": "*", - "@types/responselike": "^1.0.0" - } - }, "node_modules/@types/chai": { "version": "4.3.6", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.6.tgz", @@ -1941,21 +1718,6 @@ "@types/unist": "^2" } }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", - "dev": true - }, - "node_modules/@types/keyv": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/mdast": { "version": "3.0.12", "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.12.tgz", @@ -2001,15 +1763,6 @@ "integrity": "sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==", "dev": true }, - "node_modules/@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/unist": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.8.tgz", @@ -2023,9 +1776,9 @@ "dev": true }, "node_modules/@vercel/analytics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@vercel/analytics/-/analytics-1.1.0.tgz", - "integrity": "sha512-k5ePYZPxitxxD1eJenPUUuH3qK+EtaA9OVD3oO0BRbyT/LarmZF0qdkptRSidip1arQxsTEIWvHbTuj1oksl+Q==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@vercel/analytics/-/analytics-1.1.1.tgz", + "integrity": "sha512-+NqgNmSabg3IFfxYhrWCfB/H+RCUOCR5ExRudNG2+pcRehq628DJB5e1u1xqwpLtn4pAYii4D98w7kofORAGQA==", "dev": true, "dependencies": { "server-only": "^0.0.1" @@ -2204,19 +1957,6 @@ "node": ">= 6.0.0" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ajv": { "version": "8.12.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", @@ -2613,15 +2353,6 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "node_modules/base64url": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", - "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -2696,19 +2427,6 @@ "node": "*" } }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dev": true, - "peer": true, - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, "node_modules/cac": { "version": "6.7.14", "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", @@ -2718,48 +2436,6 @@ "node": ">=8" } }, - "node_modules/cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "dev": true, - "engines": { - "node": ">=10.6.0" - } - }, - "node_modules/cacheable-request": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", - "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", - "dev": true, - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -3056,15 +2732,6 @@ "node": ">= 6" } }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -3086,13 +2753,6 @@ "node": ">= 10" } }, - "node_modules/client-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", - "dev": true, - "peer": true - }, "node_modules/clipboard": { "version": "2.0.11", "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz", @@ -3118,18 +2778,6 @@ "node": ">=12" } }, - "node_modules/clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/code-red": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz", @@ -3606,33 +3254,6 @@ "node": ">=0.10.0" } }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/deep-eql": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", @@ -3656,16 +3277,7 @@ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true, - "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, "node_modules/define-data-property": { @@ -3703,15 +3315,6 @@ "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", "dev": true }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/dependency-graph": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", @@ -3889,15 +3492,6 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", @@ -4547,15 +4141,6 @@ "node": ">=10" } }, - "node_modules/futoin-hkdf": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/futoin-hkdf/-/futoin-hkdf-1.5.3.tgz", - "integrity": "sha512-SewY5KdMpaoCeh7jachEWFsh1nNlaDjNHZXWqL5IGwtpEYHTgkr2+AMCgNwKWkcc0wpSYrZfR7he4WdmHFtDxQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -4675,13 +4260,6 @@ "node": ">=10.13.0" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true, - "peer": true - }, "node_modules/glob/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -4792,31 +4370,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", - "dev": true, - "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=10.19.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -5287,53 +4840,6 @@ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", "dev": true }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "node_modules/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", - "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "dev": true, - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/http2-wrapper/node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -5839,34 +5345,6 @@ "jiti": "bin/jiti.js" } }, - "node_modules/joi": { - "version": "17.10.1", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.10.1.tgz", - "integrity": "sha512-vIiDxQKmRidUVp8KngT8MZSOcmRVm2zV7jbMjNYWuHcJWI0bUck3nRTGQjhpPlQenIQIBC5Vp9AhcnHbWQqafw==", - "dev": true, - "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" - } - }, - "node_modules/jose": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/jose/-/jose-2.0.6.tgz", - "integrity": "sha512-FVoPY7SflDodE4lknJmbAHSUjLCzE2H1F6MS0RYKMQ8SR+lNccpMf8R4eqkNYyyUjR5qZReOzZo5C5YiHOCjjg==", - "dev": true, - "dependencies": { - "@panva/asn1.js": "^1.0.0" - }, - "engines": { - "node": ">=10.13.0 < 13 || >=13.7.0" - }, - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -6223,18 +5701,6 @@ "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", "dev": true }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, "node_modules/loupe": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", @@ -6244,15 +5710,6 @@ "get-func-name": "^2.0.0" } }, - "node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/lru_map": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", @@ -6271,9 +5728,9 @@ } }, "node_modules/lucide-svelte": { - "version": "0.277.0", - "resolved": "https://registry.npmjs.org/lucide-svelte/-/lucide-svelte-0.277.0.tgz", - "integrity": "sha512-HrlMk0mTOd3MVSWA2ZHR79QrCycLRV4pey4HWGnGGoVFsh0/P7zGyDCJxy/MKe2t4SJtcStLdKIybMHc5pjFSQ==", + "version": "0.287.0", + "resolved": "https://registry.npmjs.org/lucide-svelte/-/lucide-svelte-0.287.0.tgz", + "integrity": "sha512-z1EAdTPDnZ8lrS0hgIrrMdV02D6xq346Xmw7wtFqQddBqeI4jyvHevjtrMJqz4nI5tALv1SDTflh7cyqjZJK1w==", "dev": true, "peerDependencies": { "svelte": ">=3 <5" @@ -6477,15 +5934,6 @@ "node": ">=6" } }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", @@ -6650,53 +6098,6 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "node_modules/next": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/next/-/next-13.5.4.tgz", - "integrity": "sha512-+93un5S779gho8y9ASQhb/bTkQF17FNQOtXLKAj3lsNgltEcF0C5PMLLncDmH+8X1EnJH1kbqAERa29nRXqhjA==", - "dev": true, - "peer": true, - "dependencies": { - "@next/env": "13.5.4", - "@swc/helpers": "0.5.2", - "busboy": "1.6.0", - "caniuse-lite": "^1.0.30001406", - "postcss": "8.4.31", - "styled-jsx": "5.1.1", - "watchpack": "2.4.0" - }, - "bin": { - "next": "dist/bin/next" - }, - "engines": { - "node": ">=16.14.0" - }, - "optionalDependencies": { - "@next/swc-darwin-arm64": "13.5.4", - "@next/swc-darwin-x64": "13.5.4", - "@next/swc-linux-arm64-gnu": "13.5.4", - "@next/swc-linux-arm64-musl": "13.5.4", - "@next/swc-linux-x64-gnu": "13.5.4", - "@next/swc-linux-x64-musl": "13.5.4", - "@next/swc-win32-arm64-msvc": "13.5.4", - "@next/swc-win32-ia32-msvc": "13.5.4", - "@next/swc-win32-x64-msvc": "13.5.4" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.1.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "sass": "^1.3.0" - }, - "peerDependenciesMeta": { - "@opentelemetry/api": { - "optional": true - }, - "sass": { - "optional": true - } - } - }, "node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", @@ -6754,18 +6155,6 @@ "node": ">=0.10.0" } }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -6790,6 +6179,15 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, + "node_modules/oauth4webapi": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/oauth4webapi/-/oauth4webapi-2.3.0.tgz", + "integrity": "sha512-JGkb5doGrwzVDuHwgrR4nHJayzN4h59VCed6EW8Tql6iHDfZIabCJvg6wtbn5q6pyB2hZruI3b77Nudvq7NmvA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -6799,15 +6197,6 @@ "node": ">=0.10.0" } }, - "node_modules/object-hash": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", - "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, "node_modules/object-is": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", @@ -6848,15 +6237,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/oidc-token-hash": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.0.3.tgz", - "integrity": "sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw==", - "dev": true, - "engines": { - "node": "^10.13.0 || >=12.0.0" - } - }, "node_modules/omit-deep": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/omit-deep/-/omit-deep-0.3.0.tgz", @@ -6870,15 +6250,6 @@ "node": ">=0.10.0" } }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -6902,27 +6273,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/openid-client": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-4.9.1.tgz", - "integrity": "sha512-DYUF07AHjI3QDKqKbn2F7RqozT4hyi4JvmpodLrq0HHoNP7t/AjeG/uqiBK1/N2PZSAQEThVjDLHSmJN4iqu/w==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.1.0", - "got": "^11.8.0", - "jose": "^2.0.5", - "lru-cache": "^6.0.0", - "make-error": "^1.3.6", - "object-hash": "^2.0.1", - "oidc-token-hash": "^5.0.1" - }, - "engines": { - "node": "^10.19.0 || >=12.0.0 < 13 || >=13.7.0 < 14 || >= 14.2.0" - }, - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, "node_modules/optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", @@ -6949,15 +6299,6 @@ "node": ">=0.10.0" } }, - "node_modules/p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -7188,12 +6529,12 @@ } }, "node_modules/playwright": { - "version": "1.38.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.38.1.tgz", - "integrity": "sha512-oRMSJmZrOu1FP5iu3UrCx8JEFRIMxLDM0c/3o4bpzU5Tz97BypefWf7TuTNPWeCe279TPal5RtPPZ+9lW/Qkow==", + "version": "1.39.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.39.0.tgz", + "integrity": "sha512-naE5QT11uC/Oiq0BwZ50gDmy8c8WLPRTEWuSSFVG2egBka/1qMoSqYQcROMT9zLwJ86oPofcTH2jBY/5wWOgIw==", "dev": true, "dependencies": { - "playwright-core": "1.38.1" + "playwright-core": "1.39.0" }, "bin": { "playwright": "cli.js" @@ -7206,9 +6547,9 @@ } }, "node_modules/playwright-core": { - "version": "1.38.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.38.1.tgz", - "integrity": "sha512-tQqNFUKa3OfMf4b2jQ7aGLB8o9bS3bOY0yMEtldtC2+spf8QXG9zvXLTXUeRsoNuxEYMgLYR+NXfAa1rjKRcrg==", + "version": "1.39.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.39.0.tgz", + "integrity": "sha512-+k4pdZgs1qiM+OUkSjx96YiKsXsmb59evFoqv8SKO067qBA+Z2s/dCzJij/ZhdQcs2zlTAgRKfeiiLm8PQ2qvw==", "dev": true, "bin": { "playwright-core": "cli.js" @@ -7871,6 +7212,34 @@ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, + "node_modules/preact": { + "version": "10.11.3", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.11.3.tgz", + "integrity": "sha512-eY93IVpod/zG3uMF22Unl8h9KkrcKIRs2EGar8hwLZZDU1lkjph303V9HZBwufh2s736U6VXuhD109LYqPoffg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "node_modules/preact-render-to-string": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-5.2.3.tgz", + "integrity": "sha512-aPDxUn5o3GhWdtJtW0svRC2SS/l8D9MAgo2+AWml+BhDImb27ALf04Q2d+AHqUUOc6RdSXFIBVa2gxzgMKgtZA==", + "dev": true, + "dependencies": { + "pretty-format": "^3.8.0" + }, + "peerDependencies": { + "preact": ">=10" + } + }, + "node_modules/preact-render-to-string/node_modules/pretty-format": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-3.8.0.tgz", + "integrity": "sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==", + "dev": true + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -7906,9 +7275,9 @@ } }, "node_modules/prettier-plugin-tailwindcss": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.5.5.tgz", - "integrity": "sha512-voy0CjWv/CM8yeaduv5ZwovovpTGMR5LbzlhGF+LtEvMJt9wBeVTVnW781hL38R/RcDXCJwN2rolsgr94B/n0Q==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.5.6.tgz", + "integrity": "sha512-2Xgb+GQlkPAUCFi3sV+NOYcSI5XgduvDBL2Zt/hwJudeKXkyvRS65c38SB0yb9UB40+1rL83I6m0RtlOQ8eHdg==", "dev": true, "engines": { "node": ">=14.21.3" @@ -8050,16 +7419,6 @@ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "node_modules/punycode": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", @@ -8162,32 +7521,6 @@ "node": ">=8" } }, - "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dev": true, - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "dev": true, - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, "node_modules/react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", @@ -8619,12 +7952,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true - }, "node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -8646,18 +7973,6 @@ "node": ">=8" } }, - "node_modules/responselike": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", - "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", - "dev": true, - "dependencies": { - "lowercase-keys": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -8850,16 +8165,6 @@ "rimraf": "bin.js" } }, - "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "dev": true, - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0" - } - }, "node_modules/select": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", @@ -8898,12 +8203,6 @@ "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==" }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -9064,31 +8363,12 @@ "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", "dev": true }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/std-env": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.4.3.tgz", "integrity": "sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q==", "dev": true }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -9183,30 +8463,6 @@ "url": "https://github.com/sponsors/antfu" } }, - "node_modules/styled-jsx": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", - "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", - "dev": true, - "peer": true, - "dependencies": { - "client-only": "0.0.1" - }, - "engines": { - "node": ">= 12.0.0" - }, - "peerDependencies": { - "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "babel-plugin-macros": { - "optional": true - } - } - }, "node_modules/stylehacks": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.0.0.tgz", @@ -9795,15 +9051,6 @@ "node": ">=8.0" } }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, "node_modules/totalist": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", @@ -10234,12 +9481,6 @@ "punycode": "^2.1.0" } }, - "node_modules/url-join": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", - "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", - "dev": true - }, "node_modules/util": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", @@ -10531,20 +9772,6 @@ } } }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, - "peer": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/web-namespaces": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", diff --git a/package.json b/package.json index 44a98ee..bf60f84 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "thatconference.com", - "version": "5.0.11", + "version": "5.1.1", "description": "THATConference.com website", "main": "index.js", "type": "module", @@ -29,22 +29,23 @@ "validate": "concurrently npm:lint npm:check" }, "devDependencies": { - "@auth0/nextjs-auth0": "^1.9.3", - "@commitlint/cli": "^17.7.2", - "@commitlint/config-conventional": "^17.7.0", + "@auth/core": "^0.17.0", + "@auth/sveltekit": "^0.3.10", + "@commitlint/cli": "^17.8.0", + "@commitlint/config-conventional": "^17.8.0", "@fortawesome/free-regular-svg-icons": "^6.4.2", "@fullhuman/postcss-purgecss": "^5.0.0", - "@playwright/test": "^1.38.1", - "@sentry/svelte": "^7.73.0", - "@sentry/tracing": "^7.73.0", - "@stripe/stripe-js": "^2.1.7", + "@playwright/test": "^1.39.0", + "@sentry/svelte": "^7.74.0", + "@sentry/tracing": "^7.74.0", + "@stripe/stripe-js": "^2.1.8", "@sveltejs/adapter-auto": "2.1.0", - "@sveltejs/kit": "1.25.1", + "@sveltejs/kit": "1.25.2", "@tailwindcss/aspect-ratio": "^0.4.2", "@tailwindcss/forms": "^0.5.6", "@tailwindcss/line-clamp": "^0.4.4", "@tailwindcss/typography": "^0.5.10", - "@vercel/analytics": "^1.1.0", + "@vercel/analytics": "^1.1.1", "@xstate/inspect": "^0.8.0", "@xstate/svelte": "^2.1.0", "all-contributors-cli": "^6.26.1", @@ -67,7 +68,7 @@ "isomorphic-fetch": "^3.0.0", "lazysizes": "^5.3.2", "lodash": "^4.17.21", - "lucide-svelte": "^0.277.0", + "lucide-svelte": "^0.287.0", "marked": "^7.0.5", "mdsvex": "^0.11.0", "moment-timezone": "^0.5.43", @@ -77,8 +78,7 @@ "postcss-load-config": "^4.0.1", "prettier": "^3.0.3", "prettier-plugin-svelte": "^3.0.3", - "prettier-plugin-tailwindcss": "^0.5.5", - "react": "^18.2.0", + "prettier-plugin-tailwindcss": "^0.5.6", "rehype-autolink-headings": "^7.0.0", "rehype-slug": "^6.0.0", "remark-preview": "^1.0.2", @@ -105,6 +105,6 @@ "zod": "^3.22.4" }, "dependencies": { - "@sentry/sveltekit": "^7.73.0" + "@sentry/sveltekit": "^7.74.0" } } diff --git a/src/_components/footer/links.js b/src/_components/footer/links.js index 26ca474..50ea9f8 100644 --- a/src/_components/footer/links.js +++ b/src/_components/footer/links.js @@ -92,7 +92,7 @@ export const myProfileLinks = [ }, { text: 'My Profile', - href: '/my/profile' + href: '/my/profiles' }, { text: 'My Settings', diff --git a/src/_components/navigation/_components/MobileUsersProfile.svelte b/src/_components/navigation/_components/MobileUsersProfile.svelte index 176b194..6e9ebc8 100644 --- a/src/_components/navigation/_components/MobileUsersProfile.svelte +++ b/src/_components/navigation/_components/MobileUsersProfile.svelte @@ -107,7 +107,7 @@ Sign Up diff --git a/src/_components/navigation/_components/UserProfile.svelte b/src/_components/navigation/_components/UserProfile.svelte index d01dc3a..e0f8754 100644 --- a/src/_components/navigation/_components/UserProfile.svelte +++ b/src/_components/navigation/_components/UserProfile.svelte @@ -134,7 +134,7 @@ Sign Up diff --git a/src/_dataSources/api.that.tech/partner/leads/mutations.js b/src/_dataSources/api.that.tech/partner/leads/mutations.js index d73cbc0..96b6426 100644 --- a/src/_dataSources/api.that.tech/partner/leads/mutations.js +++ b/src/_dataSources/api.that.tech/partner/leads/mutations.js @@ -49,8 +49,17 @@ export default (fetch) => { let results; if (data) { - const { add } = data.partners.us.leads; - results = add; + if (data.partners.us?.leads) { + results = data.partners.us.leads.add; + } else { + let message = 'There was an issue saving the lead'; + if (errors) message = errors[0]?.message ?? message; + + results = { + message, + result: false + }; + } } return results; diff --git a/src/hooks.client.js b/src/hooks.client.js index c30796e..d267863 100644 --- a/src/hooks.client.js +++ b/src/hooks.client.js @@ -1,13 +1,13 @@ import * as Sentry from '@sentry/sveltekit'; -import { env } from '$env/dynamic/public'; +import { logging } from '$lib/config.public'; Sentry.init({ - dsn: 'https://857800ed593d481bb0da2843516d7845@o235190.ingest.sentry.io/4504617287417856', + dsn: logging.dsn, tracesSampleRate: 1, replaysSessionSampleRate: 0.1, replaysOnErrorSampleRate: 1, integrations: [new Sentry.Replay()], - environment: env.PUBLIC_VERCEL_ENV + environment: logging.environment }); export const handleError = Sentry.handleErrorWithSentry(); diff --git a/src/hooks.server.js b/src/hooks.server.js index 1673a84..6a8ad4d 100644 --- a/src/hooks.server.js +++ b/src/hooks.server.js @@ -1,12 +1,103 @@ +import { redirect } from '@sveltejs/kit'; import { sequence } from '@sveltejs/kit/hooks'; -import { env } from '$env/dynamic/public'; +import { SvelteKitAuth } from '@auth/sveltekit'; +import Auth0Provider from '@auth/core/providers/auth0'; import * as Sentry from '@sentry/sveltekit'; +import { logging } from '$lib/config.public'; +import { parseOnly } from '$lib/svelteAuth/parseJwt'; + +import { securityConfig as publicConfig } from '$lib/config.public'; +import { securityConfig as privateConfig } from '$lib/config.private'; + +const { clientID, issuerBaseURL } = publicConfig(); +const { clientSecret, secret } = privateConfig(); + Sentry.init({ - dsn: 'https://857800ed593d481bb0da2843516d7845@o235190.ingest.sentry.io/4504617287417856', - tracesSampleRate: 1, - environment: env.PUBLIC_VERCEL_ENV + dsn: logging.dsn, + environment: logging.environment, + tracesSampleRate: 1 }); +const loginRedirectPaths = ['/my', '/sponsor-admin', '/admin', '/speakers']; + +async function authorization({ event, resolve }) { + if ( + loginRedirectPaths.reduce((a, c) => { + if (event.url.pathname.startsWith(c)) { + a = true; + } + return a; + }, false) + ) { + const session = await event.locals.getSession(); + if (!session?.user) { + let toPath = event.url.pathname; + if (event.url.searchParams.size > 0) { + toPath += `?${event.url.searchParams.toString()}`; + } + throw redirect(303, `/login-redirect?returnTo=${toPath}`); + } + } + + return resolve(event); +} + +const authConfig = { + providers: [ + Auth0Provider({ + id: 'auth0', + name: 'Auth0', + clientId: clientID, + clientSecret, + issuer: issuerBaseURL, + wellKnown: 'https://auth.that.tech/.well-known/openid-configuration', + authorization: { + params: { + audience: 'https://api.that.tech/graphql', + scope: 'openid profile email offline_access' + } + } + }) + ], + secret, + debug: false, + session: { + maxAge: 3600 * 24 // 1440 mins, 1 day + }, + callbacks: { + redirect(redirectGoo) { + const { url, baseUrl } = redirectGoo; + if (url.startsWith('/')) return `${baseUrl}${url}`; + // Allows callback URLs on the same origin + else if (new URL(url).origin === baseUrl) return url; + return baseUrl; + }, + jwt(jwtGoo) { + const { account, token } = jwtGoo; + if (account) { + token.accessToken = account.access_token; + token.idToken = account.id_token; + } + return token; + }, + session(sessionGoo) { + const { session, token } = sessionGoo; + session.accessToken = token.accessToken; + session.idToken = token.idToken; + session.user.id = token.sub; + session.user.sub = token.sub; + const payload = parseOnly(token.accessToken); + if (payload) { + const { permissions } = payload; + if (permissions && Array.isArray(permissions)) { + session.user.permissions = permissions; + } + } + return session; + } + } +}; + export const handleError = Sentry.handleErrorWithSentry(); -export const handle = sequence(Sentry.sentryHandle()); +export const handle = sequence(Sentry.sentryHandle(), SvelteKitAuth(authConfig), authorization); diff --git a/src/lib/config.public.js b/src/lib/config.public.js index b8b8362..20c9d39 100644 --- a/src/lib/config.public.js +++ b/src/lib/config.public.js @@ -27,7 +27,7 @@ export const securityConfig = () => { const config = { clientID: env.PUBLIC_AUTH0_CLIENT_ID || configMissing('PUBLIC_AUTH0_CLIENT_ID'), baseURL: env.PUBLIC_AUTH0_BASE_URL || `https://thatconference.com`, - issuerBaseURL: `https://auth.that.tech`, + issuerBaseURL: `https://auth.that.tech/`, authorizationParams: { scope: env.PUBLIC_AUTH0_SCOPE || 'openid profile email offline_access', diff --git a/src/lib/security/auth.js b/src/lib/security/auth.js deleted file mode 100644 index 0c6ad67..0000000 --- a/src/lib/security/auth.js +++ /dev/null @@ -1,100 +0,0 @@ -import { redirect } from '@sveltejs/kit'; -import { initAuth0 as origInitAuth0 } from '@auth0/nextjs-auth0'; -import { auth0Wrapper, auth0WrapperJson } from './wrappers'; -import lodash from 'lodash'; - -const { isNil, isEmpty } = lodash; - -export function initAuth0(config) { - const auth0 = origInitAuth0(config); - const getSession = auth0WrapperJson((req, res) => auth0.getSession(req, res)); - - return { - getSession: getSession, - getAccessToken: auth0WrapperJson((req, res, auth0FnOptions) => - auth0.getAccessToken(req, res, auth0FnOptions) - ), - - handleLogin: auth0Wrapper((req, res, auth0FnOptions) => - auth0.handleLogin(req, res, auth0FnOptions) - ), - - handleLogout: auth0Wrapper((req, res, auth0FnOptions) => - auth0.handleLogout(req, res, auth0FnOptions) - ), - - handleCallback: auth0Wrapper((req, res, auth0FnOptions) => - auth0.handleCallback(req, res, auth0FnOptions) - ), - - handleProfile: auth0Wrapper((req, res, auth0FnOptions) => - auth0.handleProfile(req, res, auth0FnOptions) - ), - - withPageAuthRequired(opts) { - return async (loadParams) => { - const { user } = await loadParams.parent(); - if (user.isAuthenticated === true) { - if (!isNil(user) && !isEmpty(user)) { - const [provider] = user.baseUser.sub.split('|'); - if (provider !== 'twitter') { - if (user.baseUser.email_verified === false) { - throw redirect(307, `/verify-account`); - } - } - } - - if (opts?.load && typeof opts?.load === 'function') { - return opts?.load(loadParams); - } else { - return {}; - } - } else { - const { url } = loadParams; - const queryString = url.searchParams.toString(); - - const returnUrl = - opts?.returnTo || queryString ? `${url.pathname}?${queryString}` : url.pathname; - - throw redirect(307, `/login-redirect/?returnTo=${returnUrl}`); - } - }; - }, - - withApiAuthRequired: (route, opts = {}) => { - return (svelteReq) => { - if ( - svelteReq.locals.isAuthenticated && - svelteReq.locals.user && - svelteReq.locals.auth0Session - ) { - // Already populated in hooks.ts handle() function, so we don't need to do any work here - return route(svelteReq); - } - - const session = getSession(svelteReq); - - if (session && session.user) { - svelteReq.locals.auth0Session = session; - svelteReq.locals.user = { - ...svelteReq.locals.user, - ...session.user - }; - - svelteReq.locals.isAuthenticated = true; - return route(svelteReq); - } else if (opts.unauthHandler && typeof opts.unauthHandler === 'function') { - return opts.unauthHandler(svelteReq); - } else { - return { - status: 401, - body: opts.unauthJson || { - error: 'not_authenticated', - description: 'The user does not have an active session or is not authenticated' - } - }; - } - }; - } - }; -} diff --git a/src/lib/security/client.js b/src/lib/security/client.js deleted file mode 100644 index b88682a..0000000 --- a/src/lib/security/client.js +++ /dev/null @@ -1,4 +0,0 @@ -import { initAuth0 } from './auth'; -import { securityConfig } from '$lib/config.public'; - -export default initAuth0({ ...securityConfig() }); diff --git a/src/lib/security/server.js b/src/lib/security/server.js deleted file mode 100644 index 684c645..0000000 --- a/src/lib/security/server.js +++ /dev/null @@ -1,5 +0,0 @@ -import { initAuth0 } from './auth'; -import { securityConfig } from '$lib/config.public'; -import { securityConfig as securityConfigPrivate } from '$lib/config.private'; - -export default initAuth0({ ...securityConfig(), ...securityConfigPrivate() }); diff --git a/src/lib/security/wrappers.js b/src/lib/security/wrappers.js deleted file mode 100644 index ffa94ed..0000000 --- a/src/lib/security/wrappers.js +++ /dev/null @@ -1,142 +0,0 @@ -import { error } from '@sveltejs/kit'; -// TODO: Implement caching with WeakMap so that auth0's session cache can be used to best effect, as otherwise we'll be calling this too often -// Cache should, given the same Svelte request object, always return the same NextApiRequest mimic - -function mkReq(request) { - const result = { - method: 'GET', - headers: Object.fromEntries(request.headers), - query: Object.fromEntries(new URL(request.url).searchParams), - url: request.url - }; - - //todo.. this needs to get validated, since this is a get, body should always be {} - if (request.body && typeof request.body.getAll === 'function') { - // Body is a ReadOnlyFormData object from Svelte, but auth0-nextjs will expect a plain object - result.body = Object.fromEntries(request.body); - } else if (typeof request.body === 'string') { - result.body = request.body; - } else { - result.body = request.body || {}; - } - - return result; -} -class ResMimic { - constructor() { - this.headers = new Map(); - this.statusCode = 200; - this.statusMessage = undefined; - this.bodyObj = undefined; - this.bodyStr = ''; - } - - getHeader(key) { - const value = this.headers.get(key); - - if (value && value.length === 1) { - return value[0]; - } else { - return value; - } - } - - setHeader(key, value) { - const oldValue = this.headers.get(key.toLowerCase()) || []; - const newValue = typeof value === 'string' ? [...oldValue, value] : [...oldValue, ...value]; - - this.headers.set(key.toLowerCase(), newValue); - - return this; - } - - writeHead(status, reason, headers) { - this.statusCode = status; - let realHeaders; - - if (typeof reason === 'string') { - this.statusMessage = reason; - realHeaders = headers; - } else if (typeof reason === 'object' && !headers) { - realHeaders = reason; - } else { - realHeaders = headers || {}; - } - - for (const key in realHeaders) { - if (Object.prototype.hasOwnProperty.call(realHeaders, key)) { - this.setHeader(key, realHeaders[key]); - } - } - - return this; - } - - end() { - return this; - } - - send(body) { - if (typeof body === 'object') { - this.bodyObj = body; - } else { - this.bodyStr = body; - } - - return this; - } - - status(statusCode) { - this.statusCode = statusCode; - return this; - } - - json(bodyObj) { - this.bodyObj = bodyObj; - this.setHeader('content-type', 'application/json'); - this.setHeader('credentials', 'include'); - - return this; - } - - getSvelteResponse() { - const status = this.statusCode; - const headers = {}; - - for (const [k, v] of this.headers.entries()) { - headers[k] = v.length === 1 ? v[0] : v; - } - - const body = this.bodyObj ? this.bodyObj : this.bodyStr; - - return new Response(JSON.stringify(body), { - status, - headers - }); - } -} - -function auth0Wrapper(auth0fn) { - return (request, auth0FnOptions) => { - const req = mkReq(request); - const res = new ResMimic(); - - return auth0fn(req, res, auth0FnOptions) - .then(() => res.getSvelteResponse()) - .catch((err) => { - console.error('auth0 function wrapper error', err); - throw error(500, err); - }); - }; -} - -function auth0WrapperJson(auth0fn) { - return (request, auth0FnOptions) => { - const req = mkReq(request); - const res = new ResMimic(); - - return auth0fn(req, res, auth0FnOptions); - }; -} - -export { auth0Wrapper, auth0WrapperJson }; diff --git a/src/lib/svelteAuth/parseJwt.js b/src/lib/svelteAuth/parseJwt.js new file mode 100644 index 0000000..e0c50d1 --- /dev/null +++ b/src/lib/svelteAuth/parseJwt.js @@ -0,0 +1,20 @@ +export const parseOnly = (jwt) => { + let base64Payload; + if (jwt?.split) { + [, base64Payload] = jwt?.split('.') ?? []; + } + let jsonPayload = null; + if (base64Payload) { + jsonPayload = Buffer.from(base64Payload, 'base64').toString('utf8'); + } + let payload = null; + if (typeof jsonPayload === 'string') { + payload = JSON.parse(jsonPayload); + } + + if (payload?.sub) { + return payload; + } + + return null; +}; diff --git a/src/routes/(admin my)/my/+layout.js b/src/routes/(admin my)/my/+layout.js deleted file mode 100644 index cceeb3d..0000000 --- a/src/routes/(admin my)/my/+layout.js +++ /dev/null @@ -1,3 +0,0 @@ -import auth0 from '$lib/security/client'; - -export const load = auth0.withPageAuthRequired(); diff --git a/src/routes/(admin my)/my/+layout.server.js b/src/routes/(admin my)/my/+layout.server.js new file mode 100644 index 0000000..6c320a2 --- /dev/null +++ b/src/routes/(admin my)/my/+layout.server.js @@ -0,0 +1,9 @@ +import { redirect } from '@sveltejs/kit'; + +export async function load({ locals, url }) { + const session = await locals.getSession(); + const returnTo = url.searchParams?.get('returnTo') ?? '/'; + if (!session) { + redirect(303, `/login-redirect?returnTo=${returnTo}`); + } +} diff --git a/src/routes/(admin sponsor)/sponsor-admin/leads/+layout.js b/src/routes/(admin sponsor)/sponsor-admin/leads/+layout.js deleted file mode 100644 index cceeb3d..0000000 --- a/src/routes/(admin sponsor)/sponsor-admin/leads/+layout.js +++ /dev/null @@ -1,3 +0,0 @@ -import auth0 from '$lib/security/client'; - -export const load = auth0.withPageAuthRequired(); diff --git a/src/routes/(admin sponsor)/sponsor-admin/leads/[eventId]/+page.server.js b/src/routes/(admin sponsor)/sponsor-admin/leads/[eventId]/+page.server.js new file mode 100644 index 0000000..4c8dd2a --- /dev/null +++ b/src/routes/(admin sponsor)/sponsor-admin/leads/[eventId]/+page.server.js @@ -0,0 +1,5 @@ +/* This empty page is intentional + * having this +page.server page here forces the hooks.server handler to execute + * regardless if page.svelte is fully loaded or not + * https://github.com/sveltejs/kit/issues/6315 + */ diff --git a/src/routes/(admin sponsor)/sponsor-admin/my-network/+layout.js b/src/routes/(admin sponsor)/sponsor-admin/my-network/+layout.js deleted file mode 100644 index dfb80a8..0000000 --- a/src/routes/(admin sponsor)/sponsor-admin/my-network/+layout.js +++ /dev/null @@ -1,20 +0,0 @@ -import auth0 from '$lib/security/client'; -import lodash from 'lodash'; - -import partnerNetworkApi from '$dataSources/api.that.tech/partner/leads/queries'; - -const { sortBy } = lodash; - -export const load = auth0.withPageAuthRequired({ - load: async function load({ fetch }) { - const { queryMyNetwork } = partnerNetworkApi(fetch); - - const contacts = await queryMyNetwork() - .then((c) => c.filter((c) => c !== null)) - .then((r) => sortBy(r, 'createdAt').reverse()); - - return { - contacts - }; - } -}); diff --git a/src/routes/(admin sponsor)/sponsor-admin/my-network/+page.server.js b/src/routes/(admin sponsor)/sponsor-admin/my-network/+page.server.js new file mode 100644 index 0000000..6276761 --- /dev/null +++ b/src/routes/(admin sponsor)/sponsor-admin/my-network/+page.server.js @@ -0,0 +1,18 @@ +// file needs to be page.server.js to ensure security fires in hooks.server.js handle +import lodash from 'lodash'; + +import partnerNetworkApi from '$dataSources/api.that.tech/partner/leads/queries'; + +const { sortBy } = lodash; + +export async function load({ fetch }) { + const { queryMyNetwork } = partnerNetworkApi(fetch); + + const contacts = await queryMyNetwork() + .then((c) => c.filter((c) => c !== null)) + .then((r) => sortBy(r, 'createdAt').reverse()); + + return { + contacts + }; +} diff --git a/src/routes/(admin)/admin/+layout.js b/src/routes/(admin)/admin/+layout.js deleted file mode 100644 index cceeb3d..0000000 --- a/src/routes/(admin)/admin/+layout.js +++ /dev/null @@ -1,3 +0,0 @@ -import auth0 from '$lib/security/client'; - -export const load = auth0.withPageAuthRequired(); diff --git a/src/routes/(admin)/admin/check-in/[eventName]/[year]/+page.js b/src/routes/(admin)/admin/check-in/[eventName]/[year]/+page.server.js similarity index 60% rename from src/routes/(admin)/admin/check-in/[eventName]/[year]/+page.js rename to src/routes/(admin)/admin/check-in/[eventName]/[year]/+page.server.js index def123d..f159691 100644 --- a/src/routes/(admin)/admin/check-in/[eventName]/[year]/+page.js +++ b/src/routes/(admin)/admin/check-in/[eventName]/[year]/+page.server.js @@ -1,9 +1,15 @@ +import { error } from '@sveltejs/kit'; import lodash from 'lodash'; import checkinQueryApi from '$dataSources/api.that.tech/checkin/queries'; const { sortBy } = lodash; -export async function load({ params, fetch }) { +export async function load({ params, fetch, locals }) { + const session = await locals.getSession(); + const permissions = session?.user?.permissions ?? []; + if (!permissions.includes('volunteer')) { + throw error(401, 'Unauthorized'); + } const { eventName, year } = params; const eventSlug = `${eventName}/${year}`; diff --git a/src/routes/(root)/login-redirect/+page.svelte b/src/routes/(root)/login-redirect/+page.svelte index b06704e..8e36c49 100644 --- a/src/routes/(root)/login-redirect/+page.svelte +++ b/src/routes/(root)/login-redirect/+page.svelte @@ -2,6 +2,7 @@ import { onMount } from 'svelte'; import { page } from '$app/stores'; import { invalidateAll } from '$app/navigation'; + import { signIn } from '@auth/sveltekit/client'; const returnTo = $page.url.searchParams.has('returnTo') ? $page.url.searchParams.get('returnTo') @@ -52,16 +53,15 @@
- signIn('auth0', { callbackUrl: returnTo })} class="focus:ring-red inline-flex w-full justify-center rounded-md border border-transparent bg-red-600 px-4 py-2 text-base font-medium leading-6 text-white shadow-sm transition duration-150 ease-in-out hover:bg-red-500 focus:border-red-700 focus:outline-none sm:text-sm sm:leading-5"> Login - + { + let _url = '/'; + try { + const session = await locals.getSession(); + if (!session?.user) { + const tokenCall = await fetch('/auth/csrf'); + const csrfTokenResponse = await new Response(tokenCall.body).json(); + const csrfToken = csrfTokenResponse.csrfToken; + + const qparams = new URLSearchParams(); + qparams.append('screen_hint', 'signup'); + + const formData = new URLSearchParams(); + formData.append('redirect', 'false'); + formData.append('csrfToken', csrfToken); + formData.append('callbackUrl', '/my/profiles'); + + const signInRequest = await fetch('/auth/signin/auth0?' + qparams.toString(), { + method: 'POST', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + 'X-Auth-Return-Redirect': '1' + }, + body: formData.toString() + }); + + const signInResponse = await new Response(signInRequest.body).json(); + if (signInResponse?.url) { + _url = signInResponse.url; + } + } + } catch (err) { + Sentry.setContext('error', { err }); + throw error(500, 'Authentication Sign-up Error'); + } + + if (_url) { + throw redirect(302, _url); + } + } +}; diff --git a/src/routes/(root)/signup/+page.svelte b/src/routes/(root)/signup/+page.svelte index 3b5c263..24b2ead 100644 --- a/src/routes/(root)/signup/+page.svelte +++ b/src/routes/(root)/signup/+page.svelte @@ -5,6 +5,7 @@ import Seo from '$components/Seo.svelte'; import { Standard as StandardLink } from '$elements/links'; import Newsletter from '$components/newsletter/Short.svelte'; + import { ChevronsRight } from 'lucide-svelte'; import WelcomeQuote from '../support/_components/_WelcomeQuote.svelte'; @@ -40,24 +41,27 @@
  1. - - - - - - - 1 - - - - Create Your Login - - You will need an account to create or join any activities. - - - +
    + +
  2. @@ -76,6 +80,9 @@ Tell everyone a bit about who you are and where to find you on the internet. +
    + +
  3. @@ -92,6 +99,9 @@ We've put together a few words on how to get started with THAT. +
    + +
diff --git a/src/routes/(root)/speakers/+layout.js b/src/routes/(root)/speakers/+layout.js deleted file mode 100644 index 71527de..0000000 --- a/src/routes/(root)/speakers/+layout.js +++ /dev/null @@ -1,2 +0,0 @@ -import auth0 from '$lib/security/client'; -export const load = auth0.withPageAuthRequired(); diff --git a/src/routes/(root)/speakers/+layout.server.js b/src/routes/(root)/speakers/+layout.server.js new file mode 100644 index 0000000..59fbcd0 --- /dev/null +++ b/src/routes/(root)/speakers/+layout.server.js @@ -0,0 +1,4 @@ +/* This empty page is intentional + * having this +layout.server page here forces the hooks.server handler to execute + * https://github.com/sveltejs/kit/issues/6315 + */ diff --git a/src/routes/+layout.server.js b/src/routes/+layout.server.js index eb6fce4..1966731 100644 --- a/src/routes/+layout.server.js +++ b/src/routes/+layout.server.js @@ -1,4 +1,3 @@ -import auth0 from '$lib/security/server'; import config from '$lib/config.public'; import { QUERY_ME } from '$dataSources/api.that.tech/me'; import { loadFlashMessage } from 'sveltekit-flash-message/server'; @@ -26,8 +25,8 @@ async function queryMe(accessToken) { } export const load = loadFlashMessage(async (event) => { - let { request, locals } = event; - const auth0Session = await auth0.getSession(request); + let { locals } = event; + const auth0Session = await locals.getSession(); let user = { isAuthenticated: !!auth0Session?.user, diff --git a/src/routes/api/auth/callback/+server.js b/src/routes/api/auth/callback/+server.js deleted file mode 100644 index c9ef1d2..0000000 --- a/src/routes/api/auth/callback/+server.js +++ /dev/null @@ -1,5 +0,0 @@ -import auth0 from '$lib/security/server'; - -export function GET({ request }) { - return auth0.handleCallback(request); -} diff --git a/src/routes/api/auth/me/+server.js b/src/routes/api/auth/me/+server.js deleted file mode 100644 index 8a93cd7..0000000 --- a/src/routes/api/auth/me/+server.js +++ /dev/null @@ -1,5 +0,0 @@ -import auth0 from '$lib/security/server'; - -export function GET({ request }) { - return auth0.handleProfile(request, { refetch: true }); -} diff --git a/src/routes/api/auth/proxy/+server.js b/src/routes/api/auth/proxy/+server.js index e883c01..7ca2f76 100644 --- a/src/routes/api/auth/proxy/+server.js +++ b/src/routes/api/auth/proxy/+server.js @@ -1,19 +1,19 @@ -import auth0 from '$lib/security/server'; import { json, error } from '@sveltejs/kit'; import fetch from 'isomorphic-fetch'; import config from '$lib/config.public'; import * as Sentry from '@sentry/svelte'; -export async function POST({ request }) { +export async function POST({ request, locals }) { const body = await request.json(); - try { - const { accessToken } = await auth0.getAccessToken(request); + const session = await locals.getSession(); + const accessToken = session?.accessToken; - if (!accessToken) { - throw error(401, 'Unauthorized Access'); - } + if (!accessToken) { + throw error(401, 'Unauthorized Access'); + } + try { const results = await fetch(config.api.direct, { method: 'POST', headers: { diff --git a/src/routes/api/auth/signup/+server.js b/src/routes/api/auth/signup/+server.js deleted file mode 100644 index 015f711..0000000 --- a/src/routes/api/auth/signup/+server.js +++ /dev/null @@ -1,10 +0,0 @@ -import auth0 from '$lib/security/server'; - -export function GET({ request }) { - return auth0.handleLogin(request, { - authorizationParams: { - screen_hint: 'signup', - prompt: 'login' - } - }); -}