{"version":3,"file":"no-auth-CpdmmsCs.js","sources":["../../../app/javascript/utils/external-redirect.ts","../../../app/javascript/containers/no-auth.ts"],"sourcesContent":["import { EXTERNAL_REDIRECT_URIS } from '~/config'\n\nconst getExternalRedirectURIs = () => {\n return EXTERNAL_REDIRECT_URIS.map((uri) => {\n const { host, protocol } = new URL(uri)\n return protocol + '//' + host\n })\n}\n\nexport const isExternalRedirect = (redirectURI: string | string[]) => {\n if (!redirectURI) return false\n if (Array.isArray(redirectURI)) return false\n if (redirectURI.startsWith('/')) return false\n\n const { host, protocol } = new URL(redirectURI)\n\n if (!host || !protocol) return false\n\n const uri = protocol + '//' + host\n return getExternalRedirectURIs().includes(uri)\n}\n","/**\n * Component to handle displaying pages which require no authentication. e.g\n * pages which are only visible when the user is logged out.\n *\n * Will check if the user is logged in, redirecting if they are or showing the\n * page if they are not.\n */\nimport queryString from 'query-string'\nimport { useEffect } from 'react'\nimport { useStore } from 'react-redux'\nimport { useLocation, useNavigate } from 'react-router-dom'\n\nimport { isExternalRedirect } from '~/utils/external-redirect'\n\nimport type { ReactNode } from 'react'\n\nexport type Props = {\n children: ReactNode\n queryParams: Record>\n}\n\nconst handleAccountAuthed = (queryParams, navigate) => {\n if (queryParams.client_id) {\n const uri = '/auth-app?' + new URLSearchParams(queryParams).toString()\n\n navigate(uri)\n } else {\n const { redirect_uri: redirectURI } = queryParams\n\n if (isExternalRedirect(redirectURI)) {\n navigate(redirectURI)\n } else {\n navigate(redirectURI || '/myaccount')\n }\n }\n}\n\nexport const NoAuth = (props: Props) => {\n const location = useLocation()\n const navigate = useNavigate()\n const state = useStore().getState()\n // @ts-expect-error TS2339\n const { authenticated } = state.auth\n const queryParams = props.queryParams || queryString.parse(location.search)\n\n useEffect(() => {\n if (authenticated) {\n handleAccountAuthed(queryParams, navigate)\n }\n }, [authenticated, queryParams])\n\n return props.children\n}\n\nexport default NoAuth\n"],"names":["getExternalRedirectURIs","EXTERNAL_REDIRECT_URIS","uri","host","protocol","isExternalRedirect","redirectURI","handleAccountAuthed","queryParams","navigate","NoAuth","props","location","useLocation","useNavigate","state","useStore","authenticated","queryString","useEffect"],"mappings":"iLAEA,MAAMA,EAA0B,IACvBC,EAAuB,IAAKC,GAAQ,CACzC,KAAM,CAAE,KAAAC,EAAM,SAAAC,CAAa,EAAA,IAAI,IAAIF,CAAG,EACtC,OAAOE,EAAW,KAAOD,CAAA,CAC1B,EAGUE,EAAsBC,GAAmC,CAGpE,GAFI,CAACA,GACD,MAAM,QAAQA,CAAW,GACzBA,EAAY,WAAW,GAAG,EAAU,MAAA,GAExC,KAAM,CAAE,KAAAH,EAAM,SAAAC,CAAa,EAAA,IAAI,IAAIE,CAAW,EAE9C,GAAI,CAACH,GAAQ,CAACC,EAAiB,MAAA,GAEzB,MAAAF,EAAME,EAAW,KAAOD,EACvB,OAAAH,EAAA,EAA0B,SAASE,CAAG,CAC/C,ECCMK,EAAsB,CAACC,EAAaC,IAAa,CACrD,GAAID,EAAY,UAAW,CACzB,MAAMN,EAAM,aAAe,IAAI,gBAAgBM,CAAW,EAAE,SAAS,EAErEC,EAASP,CAAG,CAAA,KACP,CACC,KAAA,CAAE,aAAcI,CAAA,EAAgBE,EAElCH,EAAmBC,CAAW,EAChCG,EAASH,CAAW,EAEpBG,EAASH,GAAe,YAAY,CACtC,CAEJ,EAEaI,EAAUC,GAAiB,CACtC,MAAMC,EAAWC,EAAY,EACvBJ,EAAWK,EAAY,EACvBC,EAAQC,EAAS,EAAE,SAAS,EAE5B,CAAE,cAAAC,GAAkBF,EAAM,KAC1BP,EAAcG,EAAM,aAAeO,EAAY,MAAMN,EAAS,MAAM,EAE1EO,OAAAA,EAAAA,UAAU,IAAM,CACVF,GACFV,EAAoBC,EAAaC,CAAQ,CAC3C,EACC,CAACQ,EAAeT,CAAW,CAAC,EAExBG,EAAM,QACf"}