diff --git a/package.json b/package.json index eaf6b18cd..14daddef1 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "@turf/center": "^6.3.0", "@turf/helpers": "^6.3.0", "@types/": "rawgraphs/rawgraphs-charts", + "@types/auth0-js": "^9.21.5", "@types/d3-shape": "^3.0.2", "@types/detect-it": "^4.0.1", "@types/draft-js": "^0.11.9", @@ -47,6 +48,7 @@ "@types/react-csv": "^1.1.2", "@types/react-router-hash-link": "^2.4.0", "apexcharts": "^3.27.0", + "auth0-js": "^9.23.3", "axios": "^0.21.3", "babel-plugin-transform-remove-console": "^6.9.4", "craco-plugin-react-hot-reload": "^0.1.0", @@ -86,6 +88,7 @@ "react-dropzone": "^14.2.3", "react-error-boundary": "^4.0.10", "react-google-drive-picker": "^1.2.2", + "react-google-one-tap-login": "^0.1.1", "react-grid-carousel": "^1.0.1", "react-hook-form": "^7.43.9", "react-indexed-db": "^1.0.12", diff --git a/src/app/Routes.tsx b/src/app/Routes.tsx index a9942eaf7..245e0bf9a 100755 --- a/src/app/Routes.tsx +++ b/src/app/Routes.tsx @@ -2,16 +2,19 @@ // base import React, { Suspense, lazy } from "react"; +import { socialAuth } from "app/utils/socialAuth"; import { useScrollToTop } from "app/hooks/useScrollToTop"; import { PageLoader } from "app/modules/common/page-loader"; import { RouteWithAppBar } from "app/utils/RouteWithAppBar"; import { Route, Switch, useHistory } from "react-router-dom"; import { NoMatchPage } from "app/modules/common/no-match-page"; +import { useGoogleOneTapLogin } from "react-google-one-tap-login"; import { AppState, Auth0Provider, User, WithAuthenticationRequiredOptions, + useAuth0, withAuthenticationRequired, } from "@auth0/auth0-react"; @@ -78,6 +81,37 @@ const Auth0ProviderWithRedirectCallback = (props: { ); }; +const OneTapLoginComponent = () => { + const { isLoading, isAuthenticated } = useAuth0(); + const loadRef = React.useRef(null); + + useGoogleOneTapLogin({ + disabled: isLoading || isAuthenticated, + onError: (error) => console.log(error), + onSuccess: (response) => socialAuth("google-oauth2", response.email), + googleAccountConfigs: { + client_id: process.env.REACT_APP_GOOGLE_API_CLIENT_ID!, + cancel_on_tap_outside: false, + }, + }); + + const onBeforeUnload = () => { + if (loadRef.current) { + loadRef.current.style.display = "block"; + } + }; + + React.useEffect(() => { + window.onbeforeunload = onBeforeUnload; + }, []); + + return ( +
+ +
+ ); +}; + export function MainRoutes() { useScrollToTop(); @@ -90,6 +124,7 @@ export function MainRoutes() { redirect_uri: `${window.location.origin}/callback`, }} > + }> diff --git a/src/app/modules/callback-module/index.tsx b/src/app/modules/callback-module/index.tsx index 8cf3da31f..264a0b2bc 100644 --- a/src/app/modules/callback-module/index.tsx +++ b/src/app/modules/callback-module/index.tsx @@ -6,11 +6,13 @@ import { PageLoader } from "app/modules/common/page-loader"; function AuthCallbackModule() { const history = useHistory(); - const { error, isAuthenticated } = useAuth0(); + const { error, isAuthenticated, getAccessTokenSilently } = useAuth0(); React.useEffect(() => { if (isAuthenticated) { history.replace("/"); + } else { + getAccessTokenSilently(); } }, [isAuthenticated]); diff --git a/src/app/modules/home-module/components/Loader/index.tsx b/src/app/modules/home-module/components/Loader/index.tsx index 3c7016736..dfcaf842d 100644 --- a/src/app/modules/home-module/components/Loader/index.tsx +++ b/src/app/modules/home-module/components/Loader/index.tsx @@ -17,7 +17,7 @@ const ProcessingIcon = () => ( cy="80" fill="transparent" stroke="#DADAF8" - stroke-width="8px" + strokeWidth="8px" > ( cy="80" fill="transparent" stroke="#6061E5" - stroke-linecap="round" - stroke-width="10px" - stroke-dasharray="239.6px" - stroke-dashoffset="109.9px" + strokeLinecap="round" + strokeWidth="10px" + strokeDasharray="239.6px" + strokeDashoffset="109.9px" > ); diff --git a/src/app/modules/home-module/index.tsx b/src/app/modules/home-module/index.tsx index b5c0c72a0..5c583bb9f 100644 --- a/src/app/modules/home-module/index.tsx +++ b/src/app/modules/home-module/index.tsx @@ -7,6 +7,7 @@ import { useRecoilState, useResetRecoilState } from "recoil"; import { Box, Grid, Container, IconButton, Popover } from "@material-ui/core"; /* project */ import { Tab } from "app/components/Styled/tabs"; +import { socialAuth } from "app/utils/socialAuth"; import HomeFooter from "app/modules/home-module/components/Footer"; import ChartsGrid from "app/modules/home-module/components/Charts/chartsGrid"; import ReportsGrid from "app/modules/home-module/components/Reports/reportsGrid"; @@ -43,7 +44,7 @@ import { export default function HomeModule() { useTitle("DX DataXplorer"); - const { isAuthenticated, loginWithRedirect } = useAuth0(); + const { isAuthenticated } = useAuth0(); // clear persisted states const clearPersistedReportState = useResetRecoilState( @@ -131,10 +132,6 @@ export default function HomeModule() { setSortPopoverAnchorEl(null); }; - const handleLogin = () => { - loginWithRedirect(); - }; - const openSortPopover = Boolean(sortPopoverAnchorEl); React.useEffect(() => { @@ -230,10 +227,10 @@ export default function HomeModule() { } `} > - - diff --git a/src/app/modules/home-module/sub-modules/partners/components/bestDecisionBlock.tsx b/src/app/modules/home-module/sub-modules/partners/components/bestDecisionBlock.tsx index 721432603..7535d534c 100644 --- a/src/app/modules/home-module/sub-modules/partners/components/bestDecisionBlock.tsx +++ b/src/app/modules/home-module/sub-modules/partners/components/bestDecisionBlock.tsx @@ -1,16 +1,15 @@ -import { Grid } from "@material-ui/core"; import React from "react"; -import RightArr from "app/modules/home-module/assets/right-arr-icon.svg"; +import { Link } from "react-router-dom"; +import { Grid } from "@material-ui/core"; +import { useAuth0 } from "@auth0/auth0-react"; +import { socialAuth } from "app/utils/socialAuth"; import { bestDecisioncss } from "app/modules/home-module/sub-modules/partners/style"; import { ReactComponent as GoogleIcon } from "app/modules/onboarding-module/asset/google-img.svg"; import { ReactComponent as LinkedInIcon } from "app/modules/onboarding-module/asset/linkedIn-img.svg"; -import { Link } from "react-router-dom"; -import { useAuth0 } from "@auth0/auth0-react"; + export default function BestDecisionBlock() { - const { isAuthenticated, loginWithRedirect } = useAuth0(); - const handleLogin = () => { - loginWithRedirect(); - }; + const { isAuthenticated } = useAuth0(); + return (

Best decisions are based on data

@@ -71,10 +70,10 @@ export default function BestDecisionBlock() { > {!isAuthenticated && (
- -
diff --git a/src/app/modules/home-module/sub-modules/partners/components/empowerBlock.tsx b/src/app/modules/home-module/sub-modules/partners/components/empowerBlock.tsx index 5b6e9453d..e7457319d 100644 --- a/src/app/modules/home-module/sub-modules/partners/components/empowerBlock.tsx +++ b/src/app/modules/home-module/sub-modules/partners/components/empowerBlock.tsx @@ -1,12 +1,15 @@ import React from "react"; +import { Link } from "react-router-dom"; import Grid from "@material-ui/core/Grid"; +import { useAuth0 } from "@auth0/auth0-react"; +import { socialAuth } from "app/utils/socialAuth"; import { HomePrimaryButton } from "app/components/Styled/button"; +import { ReactComponent as GoogleIcon } from "app/modules/onboarding-module/asset/google-img.svg"; import { ReactComponent as SmallEllipse } from "app/modules/home-module/assets/cases-sm-ellipse.svg"; +import { ReactComponent as LinkedInIcon } from "app/modules/onboarding-module/asset/linkedIn-img.svg"; import { ReactComponent as TopRightEllipse } from "app/modules/home-module/assets/top-right-ellipse.svg"; import { ReactComponent as BottomLeftEllipse } from "app/modules/home-module/assets/bottom-left-ellipse.svg"; import { ReactComponent as BottomRightEllipse } from "app/modules/home-module/assets/bottom-right-ellipse.svg"; -import { ReactComponent as GoogleIcon } from "app/modules/onboarding-module/asset/google-img.svg"; -import { ReactComponent as LinkedInIcon } from "app/modules/onboarding-module/asset/linkedIn-img.svg"; import { empowercss, SmallEllipseCss, @@ -14,16 +17,11 @@ import { BottomLeftEllipseCss, BottomRightEllipseCss, } from "app/modules/home-module/sub-modules/partners/style"; -import { Link } from "react-router-dom"; -import { useAuth0 } from "@auth0/auth0-react"; export default function EmpowerBlock(props: { view?: "why-dx" | "contact" | "about" | "partners"; }) { - const { isAuthenticated, loginWithRedirect } = useAuth0(); - const handleLogin = () => { - loginWithRedirect(); - }; + const { isAuthenticated } = useAuth0(); let mainText = ""; let subText = ""; @@ -100,10 +98,10 @@ export default function EmpowerBlock(props: { } `} > - - diff --git a/src/app/modules/home-module/sub-modules/why-dx/components/tryUsBlock.tsx b/src/app/modules/home-module/sub-modules/why-dx/components/tryUsBlock.tsx index 3e8967d3a..b2b0610bd 100644 --- a/src/app/modules/home-module/sub-modules/why-dx/components/tryUsBlock.tsx +++ b/src/app/modules/home-module/sub-modules/why-dx/components/tryUsBlock.tsx @@ -1,15 +1,14 @@ import React from "react"; -import { ReactComponent as RightArr } from "app/modules/home-module/assets/right-arr-icon.svg"; import { Link } from "react-router-dom"; import { useAuth0 } from "@auth0/auth0-react"; +import { socialAuth } from "app/utils/socialAuth"; +import { ReactComponent as RightArr } from "app/modules/home-module/assets/right-arr-icon.svg"; import { ReactComponent as GoogleIcon } from "app/modules/onboarding-module/asset/google-img.svg"; import { ReactComponent as LinkedInIcon } from "app/modules/onboarding-module/asset/linkedIn-img.svg"; export default function TryUsBlock() { - const { isAuthenticated, loginWithRedirect } = useAuth0(); - const handleLogin = () => { - loginWithRedirect(); - }; + const { isAuthenticated } = useAuth0(); + return ( <>

- - diff --git a/src/app/modules/onboarding-module/component/card/index.tsx b/src/app/modules/onboarding-module/component/card/index.tsx index b1aca5437..130268bb9 100644 --- a/src/app/modules/onboarding-module/component/card/index.tsx +++ b/src/app/modules/onboarding-module/component/card/index.tsx @@ -1,23 +1,18 @@ import React from "react"; -import { useAuth0 } from "@auth0/auth0-react"; import Checkbox from "@material-ui/core/Checkbox"; +import { socialAuth } from "app/utils/socialAuth"; import FormControlLabel from "@material-ui/core/FormControlLabel"; import { socialloginbuttoncss, termsOfServiceCss } from "./style"; import { ReactComponent as GoogleIcon } from "../../asset/google-img.svg"; import { ReactComponent as LinkedInIcon } from "../../asset/linkedIn-img.svg"; export default function AuthCard(props: { isLogin?: boolean }) { - const { loginWithRedirect } = useAuth0(); const [checked, setChecked] = React.useState(false); const handleChange = (event: React.ChangeEvent) => { setChecked(event.target.checked); }; - const onButtonClick = () => { - loginWithRedirect(); - }; - return (

- - diff --git a/src/app/utils/socialAuth.ts b/src/app/utils/socialAuth.ts new file mode 100644 index 000000000..8f8c57ee9 --- /dev/null +++ b/src/app/utils/socialAuth.ts @@ -0,0 +1,19 @@ +import Auth0JS from "auth0-js"; + +export function socialAuth( + connection: "google-oauth2" | "linkedin" | "github" | "windowslive", + login_hint?: string +) { + const webAuth = new Auth0JS.WebAuth({ + domain: process.env.REACT_APP_AUTH0_DOMAIN as string, + clientID: process.env.REACT_APP_AUTH0_CLIENT as string, + audience: process.env.REACT_APP_AUTH0_AUDIENCE as string, + redirectUri: `${window.location.origin}/callback`, + }); + + webAuth.authorize({ + connection, + login_hint, + responseType: "token", + }); +} diff --git a/yarn.lock b/yarn.lock index 460bc6ab8..be2a29111 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2558,6 +2558,11 @@ d3-voronoi-treemap "^1.1.1" louvain "^1.2.0" +"@types/auth0-js@^9.21.5": + version "9.21.5" + resolved "https://registry.yarnpkg.com/@types/auth0-js/-/auth0-js-9.21.5.tgz#2adec936a48ddaaf761a9118a759dfcdecfa3316" + integrity sha512-hQInFZkMPjrV8s49lefXBd6nym8+kdFxhdzzjlMAvy+7qHSk+TLCwUoMhvU6FQP3prj2j4NTtsufaqkUwiPgug== + "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": version "7.1.18" resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz" @@ -3835,7 +3840,7 @@ arrify@^2.0.1: resolved "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz" integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== -asap@~2.0.3, asap@~2.0.6: +asap@^2.0.0, asap@~2.0.3, asap@~2.0.6: version "2.0.6" resolved "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= @@ -3906,6 +3911,20 @@ attr-accept@^2.2.2: resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-2.2.2.tgz#646613809660110749e92f2c10833b70968d929b" integrity sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg== +auth0-js@^9.23.3: + version "9.23.3" + resolved "https://registry.yarnpkg.com/auth0-js/-/auth0-js-9.23.3.tgz#ec3c1e04eeb409fac780c84d32388dd80d3a52d7" + integrity sha512-VVh3/1SiECWlwDU3XQ3Xhg40W9Buu18jYZYO93PEerApacm508v67SxBLKh5WeCGaqCUyPamU+NusguhWVn1Qw== + dependencies: + base64-js "^1.5.1" + idtoken-verifier "^2.2.4" + js-cookie "^2.2.0" + minimist "^1.2.5" + qs "^6.10.1" + superagent "^7.1.5" + url-join "^4.0.1" + winchan "^0.2.2" + autoprefixer@^10.4.2: version "10.4.2" resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.2.tgz" @@ -4163,7 +4182,7 @@ balanced-match@^2.0.0: resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz" integrity sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA== -base64-js@^1.3.1: +base64-js@^1.3.1, base64-js@^1.5.1: version "1.5.1" resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -4696,6 +4715,11 @@ commondir@^1.0.1: resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= +component-emitter@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.1.tgz#ef1d5796f7d93f135ee6fb684340b26403c97d17" + integrity sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ== + compress-commons@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/compress-commons/-/compress-commons-2.1.1.tgz" @@ -4788,6 +4812,11 @@ cookie@0.4.1: resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz" integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== +cookiejar@^2.1.3: + version "2.1.4" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.4.tgz#ee669c1fea2cf42dc31585469d193fef0d65771b" + integrity sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw== + copy-to-clipboard@^3, copy-to-clipboard@^3.3.1: version "3.3.1" resolved "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz" @@ -4937,6 +4966,11 @@ crypto-js@^4.0.0: resolved "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz" integrity sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw== +crypto-js@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.2.0.tgz#4d931639ecdfd12ff80e8186dba6af2c2e856631" + integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q== + crypto-random-string@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz" @@ -5977,6 +6011,13 @@ debug@^3.1.1, debug@^3.2.7: dependencies: ms "^2.1.1" +debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + decamelize-keys@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz" @@ -6163,6 +6204,14 @@ detective@^5.2.0: defined "^1.0.0" minimist "^1.1.1" +dezalgo@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.4.tgz#751235260469084c132157dfa857f386d4c33d81" + integrity sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig== + dependencies: + asap "^2.0.0" + wrappy "1" + didyoumean@^1.2.2: version "1.2.2" resolved "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz" @@ -6610,6 +6659,11 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" +es6-promise@^4.2.8: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + escalade@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" @@ -7140,6 +7194,11 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= +fast-safe-stringify@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" + integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== + fast-shallow-equal@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/fast-shallow-equal/-/fast-shallow-equal-1.0.0.tgz" @@ -7434,6 +7493,15 @@ form-data@^3.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + form-data@~2.3.2: version "2.3.3" resolved "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz" @@ -7443,6 +7511,16 @@ form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" +formidable@^2.0.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/formidable/-/formidable-2.1.2.tgz#fa973a2bec150e4ce7cac15589d7a25fc30ebd89" + integrity sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g== + dependencies: + dezalgo "^1.0.4" + hexoid "^1.0.0" + once "^1.4.0" + qs "^6.11.0" + forwarded@0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" @@ -7950,6 +8028,11 @@ he@^1.2.0: resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== +hexoid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hexoid/-/hexoid-1.0.0.tgz#ad10c6573fb907de23d9ec63a711267d9dc9bc18" + integrity sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g== + history@^4.9.0: version "4.10.1" resolved "https://registry.npmjs.org/history/-/history-4.10.1.tgz" @@ -8268,6 +8351,18 @@ identity-obj-proxy@^3.0.0: dependencies: harmony-reflect "^1.4.6" +idtoken-verifier@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/idtoken-verifier/-/idtoken-verifier-2.2.4.tgz#5749bd3fc9b757db40ad764484173584fb19fb55" + integrity sha512-5t7O8cNHpJBB8FnwLD0qFZqy/+qGICObQKUl0njD6vXKHhpZPLEe8LU7qv/GBWB3Qv5e/wAIFHYVi4SoQwdOxQ== + dependencies: + base64-js "^1.5.1" + crypto-js "^4.2.0" + es6-promise "^4.2.8" + jsbn "^1.1.0" + unfetch "^4.2.0" + url-join "^4.0.1" + ieee754@^1.1.12, ieee754@^1.1.13: version "1.2.1" resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" @@ -9256,7 +9351,7 @@ js-beautify@^1.5.10: glob "^8.1.0" nopt "^6.0.0" -js-cookie@^2.2.1: +js-cookie@^2.2.0, js-cookie@^2.2.1: version "2.2.1" resolved "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz" integrity sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ== @@ -9281,6 +9376,11 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" +jsbn@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" + integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" @@ -10106,7 +10206,7 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -methods@~1.1.2: +methods@^1.1.2, methods@~1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= @@ -10144,6 +10244,11 @@ mime@1.6.0: resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== +mime@2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== + mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" @@ -11763,6 +11868,13 @@ qs@6.9.6: resolved "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz" integrity sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ== +qs@^6.10.1, qs@^6.10.3, qs@^6.11.0: + version "6.11.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" + integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== + dependencies: + side-channel "^1.0.4" + qs@~6.5.2: version "6.5.3" resolved "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz" @@ -12030,6 +12142,11 @@ react-google-drive-picker@^1.2.2: resolved "https://registry.yarnpkg.com/react-google-drive-picker/-/react-google-drive-picker-1.2.2.tgz#93b6ad36f76744bc8a235c7070adb9c6fb7c69f5" integrity sha512-x30mYkt9MIwPCgL+fyK75HZ8E6G5L/WGW0bfMG6kbD4NG2kmdlmV9oH5lPa6P6d46y9hj5Y3btAMrZd4JRRkSA== +react-google-one-tap-login@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/react-google-one-tap-login/-/react-google-one-tap-login-0.1.1.tgz#12a61e63e19251622cf1575b601d79fd4d07847a" + integrity sha512-RCbOfR3Z7VcRae4AzrLoBfY/aqqdN24pkQeNz9CJ0W65C9SY3vAwF0Yp8mwpeFwsugaZ5b1HZsfhUYWtb3IMrw== + react-grid-carousel@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/react-grid-carousel/-/react-grid-carousel-1.0.1.tgz" @@ -12939,7 +13056,7 @@ semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: dependencies: lru-cache "^6.0.0" -semver@^7.5.3: +semver@^7.3.7, semver@^7.5.3: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -13655,6 +13772,23 @@ sugarss@^2.0.0: dependencies: postcss "^7.0.2" +superagent@^7.1.5: + version "7.1.6" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-7.1.6.tgz#64f303ed4e4aba1e9da319f134107a54cacdc9c6" + integrity sha512-gZkVCQR1gy/oUXr+kxJMLDjla434KmSOKbx5iGD30Ql+AkJQ/YlPKECJy2nhqOsHLjGHzoDTXNSjhnvWhzKk7g== + dependencies: + component-emitter "^1.3.0" + cookiejar "^2.1.3" + debug "^4.3.4" + fast-safe-stringify "^2.1.1" + form-data "^4.0.0" + formidable "^2.0.1" + methods "^1.1.2" + mime "2.6.0" + qs "^6.10.3" + readable-stream "^3.6.0" + semver "^7.3.7" + supercluster@^7.1.4: version "7.1.4" resolved "https://registry.npmjs.org/supercluster/-/supercluster-7.1.4.tgz" @@ -14294,6 +14428,11 @@ underscore.string@~3.3.5: sprintf-js "^1.1.1" util-deprecate "^1.0.2" +unfetch@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.2.0.tgz#7e21b0ef7d363d8d9af0fb929a5555f6ef97a3be" + integrity sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA== + unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz" @@ -14387,6 +14526,11 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +url-join@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" + integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== + url-polyfill@^1.1.12: version "1.1.12" resolved "https://registry.yarnpkg.com/url-polyfill/-/url-polyfill-1.1.12.tgz#6cdaa17f6b022841b3aec0bf8dbd87ac0cd33331" @@ -14836,6 +14980,11 @@ which@^2.0.1, which@~2.0.2: dependencies: isexe "^2.0.0" +winchan@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/winchan/-/winchan-0.2.2.tgz#6766917b88e5e1cb75f455ffc7cc13f51e5c834e" + integrity sha512-pvN+IFAbRP74n/6mc6phNyCH8oVkzXsto4KCHPJ2AScniAnA1AmeLI03I2BzjePpaClGSI4GUMowzsD3qz5PRQ== + word-wrap@^1.1.0, word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz"