{"version":3,"file":"loginweb/mntv-app-loginweb.069951ab.js","mappings":"kFAAA,IAAIA,EAAM,CACT,UAAW,CACV,IACA,KAED,eAAgB,CACf,IACA,KAED,UAAW,CACV,IACA,KAED,eAAgB,CACf,IACA,KAED,UAAW,CACV,KACA,KAED,eAAgB,CACf,KACA,KAED,UAAW,CACV,KACA,KAED,eAAgB,CACf,KACA,KAED,UAAW,CACV,KACA,KAED,eAAgB,CACf,KACA,KAED,UAAW,CACV,KACA,KAED,eAAgB,CACf,KACA,KAED,UAAW,CACV,KACA,KAED,eAAgB,CACf,KACA,KAED,UAAW,CACV,KACA,KAED,eAAgB,CACf,KACA,KAED,UAAW,CACV,KACA,KAED,eAAgB,CACf,KACA,KAED,UAAW,CACV,KACA,KAED,eAAgB,CACf,KACA,KAED,UAAW,CACV,KACA,KAED,eAAgB,CACf,KACA,KAED,UAAW,CACV,KACA,KAED,eAAgB,CACf,KACA,KAED,UAAW,CACV,KACA,KAED,eAAgB,CACf,KACA,KAED,UAAW,CACV,KACA,KAED,eAAgB,CACf,KACA,KAED,UAAW,CACV,KACA,KAED,eAAgB,CACf,KACA,MAGF,SAASC,oBAAoBC,GAC5B,IAAIC,EAAoBC,EAAEJ,EAAKE,GAC9B,OAAOG,QAAQC,UAAUC,MAAK,KAC7B,IAAIC,EAAI,IAAIC,MAAM,uBAAyBP,EAAM,KAEjD,MADAM,EAAEE,KAAO,mBACHF,KAIR,IAAIG,EAAMX,EAAIE,GAAMU,EAAKD,EAAI,GAC7B,OAAOR,EAAoBK,EAAEG,EAAI,IAAIJ,MAAK,IAClCJ,EAAoBU,EAAED,EAAI,MAGnCX,oBAAoBa,KAAO,IAAOC,OAAOD,KAAKd,GAC9CC,oBAAoBW,GAAK,KACzBI,EAAOC,QAAUhB,qB,eC1IjB,IAAID,EAAM,CACT,UAAW,CACV,KACA,GAED,eAAgB,CACf,KACA,GAED,UAAW,CACV,KACA,KAED,eAAgB,CACf,KACA,KAED,UAAW,CACV,KACA,KAED,eAAgB,CACf,KACA,KAED,UAAW,CACV,KACA,KAED,eAAgB,CACf,KACA,KAED,UAAW,CACV,KACA,KAED,eAAgB,CACf,KACA,KAED,UAA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","sources":["/app/apps/loginweb/node_modules/@sm/webassets/dist/locales/translated|lazy|/^/.//.*$/|chunkName: i18n/webassets/[request]|groupOptions: {}|namespace object","/app/apps/loginweb/src/locales/translated|lazy|/^/.//.*$/|chunkName: i18n/[request]|groupOptions: {}|namespace object","/app/apps/loginweb/src/app/components/CTASplitter/CTASplitter.tsx","/app/apps/loginweb/src/app/helpers/possibleTypes.ts","/app/apps/loginweb/src/app/utils/getSubdomain.ts","/app/apps/loginweb/src/app/helpers/queryParams.ts","/app/apps/loginweb/src/app/handlers/login.ts","/app/apps/loginweb/src/app/pages/login/BaseLoadingPage/index.tsx","/app/apps/loginweb/src/app/utils/auth0SamlErrorParser/handlers/index.ts","/app/apps/loginweb/src/app/utils/auth0SamlErrorParser/handlers/connectionDisabled.ts","/app/apps/loginweb/src/app/utils/auth0SamlErrorParser/handlers/idpInitiated.ts","/app/apps/loginweb/src/app/utils/auth0SamlErrorParser/handlers/invalidCert.ts","/app/apps/loginweb/src/app/utils/auth0SamlErrorParser/handlers/invalidThumbprint.ts","/app/apps/loginweb/src/app/pages/login/LoadingPage/LoadingPage.tsx","/app/apps/loginweb/src/app/utils/auth0SamlErrorParser/index.ts","/app/apps/loginweb/src/app/pages/login/hooks.tsx","/app/apps/loginweb/src/app/pages/login/StartAuthTransactionPage/index.tsx","/app/apps/loginweb/src/app/handlers/callback/handleRedirectCallback.ts","/app/apps/loginweb/src/common/utils/cleanObject.ts","/app/apps/loginweb/src/app/helpers/respondentSSOApiClient.ts","/app/apps/loginweb/src/app/handlers/callback.ts","/app/apps/loginweb/src/app/pages/login/HandleAuthCallbackPage/index.tsx","/app/apps/loginweb/src/app/pages/login/UnlinkedPage/UnlinkedWindow.tsx","/app/apps/loginweb/src/app/pages/login/UnlinkedPage/UnlinkedButtonOption.tsx","/app/apps/loginweb/src/app/pages/login/UnlinkedPage/UnlinkedErrorBanner.tsx","/app/apps/loginweb/src/app/pages/login/UnlinkedPage/UnlinkedHeader.tsx","/app/apps/loginweb/src/app/pages/login/UnlinkedPage/UnlinkedPageContent.tsx","/app/apps/loginweb/src/app/pages/login/UnlinkedPage/index.tsx","/app/apps/loginweb/src/app/pages/login/ErrorPage/copy.ts","/app/apps/loginweb/src/app/helpers/samlConnectionApi.ts","/app/apps/loginweb/src/app/pages/login/ErrorPage/index.tsx","/app/apps/loginweb/src/app/App.tsx","/app/apps/loginweb/src/app/utils/getLocaleMessages.ts","/app/apps/loginweb/src/app/entry.ts","/app/apps/loginweb/src/app/utils/bootstrapSMWeb.ts","/app/apps/loginweb/src/app/utils/createApp.tsx","/app/apps/loginweb/src/app/utils/mount.ts","/app/apps/loginweb/src/app/handlers/handlers.ts","/app/apps/loginweb/src/app/helpers/navigateTo.ts","/app/apps/loginweb/src/app/helpers/sessionStorage.ts","/app/apps/loginweb/src/app/helpers/sessionsApiClient.ts","/app/apps/loginweb/src/app/pages/login/UnlinkedPage/tokenHelper.tsx","/app/apps/loginweb/src/app/pages/sharedRoutes.ts","/app/apps/loginweb/src/app/pages/team/routes.ts","/app/apps/loginweb/src/common/helpers/amplitudeSession.ts","/app/apps/loginweb/src/app/utils/amplitudeHelpers.ts","/app/apps/loginweb/src/app/utils/history.ts","/app/apps/loginweb/src/common/entities/auth0Strategy.ts","/app/apps/loginweb/src/common/entities/smParams.ts","/app/apps/loginweb/src/common/errors/userFacing.ts","/app/apps/loginweb/src/common/helpers/asEnum.ts","/app/apps/loginweb/external var \"jsdom\""],"sourcesContent":["var map = {\n\t\"./da-DK\": [\n\t\t833,\n\t\t495\n\t],\n\t\"./da-DK.json\": [\n\t\t833,\n\t\t495\n\t],\n\t\"./de-DE\": [\n\t\t963,\n\t\t495\n\t],\n\t\"./de-DE.json\": [\n\t\t963,\n\t\t495\n\t],\n\t\"./es-LA\": [\n\t\t6137,\n\t\t495\n\t],\n\t\"./es-LA.json\": [\n\t\t6137,\n\t\t495\n\t],\n\t\"./fi-FI\": [\n\t\t1049,\n\t\t495\n\t],\n\t\"./fi-FI.json\": [\n\t\t1049,\n\t\t495\n\t],\n\t\"./fr-FR\": [\n\t\t3798,\n\t\t495\n\t],\n\t\"./fr-FR.json\": [\n\t\t3798,\n\t\t495\n\t],\n\t\"./it-IT\": [\n\t\t6977,\n\t\t495\n\t],\n\t\"./it-IT.json\": [\n\t\t6977,\n\t\t495\n\t],\n\t\"./ja-JP\": [\n\t\t8572,\n\t\t495\n\t],\n\t\"./ja-JP.json\": [\n\t\t8572,\n\t\t495\n\t],\n\t\"./ko-KR\": [\n\t\t6058,\n\t\t495\n\t],\n\t\"./ko-KR.json\": [\n\t\t6058,\n\t\t495\n\t],\n\t\"./nl-NL\": [\n\t\t4742,\n\t\t495\n\t],\n\t\"./nl-NL.json\": [\n\t\t4742,\n\t\t495\n\t],\n\t\"./no-NO\": [\n\t\t7813,\n\t\t495\n\t],\n\t\"./no-NO.json\": [\n\t\t7813,\n\t\t495\n\t],\n\t\"./pt-BR\": [\n\t\t8815,\n\t\t495\n\t],\n\t\"./pt-BR.json\": [\n\t\t8815,\n\t\t495\n\t],\n\t\"./ru-RU\": [\n\t\t7962,\n\t\t495\n\t],\n\t\"./ru-RU.json\": [\n\t\t7962,\n\t\t495\n\t],\n\t\"./sv-SE\": [\n\t\t9207,\n\t\t495\n\t],\n\t\"./sv-SE.json\": [\n\t\t9207,\n\t\t495\n\t],\n\t\"./tr-TR\": [\n\t\t8314,\n\t\t495\n\t],\n\t\"./tr-TR.json\": [\n\t\t8314,\n\t\t495\n\t],\n\t\"./zh-TW\": [\n\t\t2729,\n\t\t495\n\t],\n\t\"./zh-TW.json\": [\n\t\t2729,\n\t\t495\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(() => {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn __webpack_require__.e(ids[1]).then(() => {\n\t\treturn __webpack_require__.t(id, 3 | 16);\n\t});\n}\nwebpackAsyncContext.keys = () => (Object.keys(map));\nwebpackAsyncContext.id = 8686;\nmodule.exports = webpackAsyncContext;","var map = {\n\t\"./da-DK\": [\n\t\t9302,\n\t\t2\n\t],\n\t\"./da-DK.json\": [\n\t\t9302,\n\t\t2\n\t],\n\t\"./de-DE\": [\n\t\t9125,\n\t\t750\n\t],\n\t\"./de-DE.json\": [\n\t\t9125,\n\t\t750\n\t],\n\t\"./es-LA\": [\n\t\t4547,\n\t\t597\n\t],\n\t\"./es-LA.json\": [\n\t\t4547,\n\t\t597\n\t],\n\t\"./fi-FI\": [\n\t\t3989,\n\t\t675\n\t],\n\t\"./fi-FI.json\": [\n\t\t3989,\n\t\t675\n\t],\n\t\"./fr-FR\": [\n\t\t3836,\n\t\t821\n\t],\n\t\"./fr-FR.json\": [\n\t\t3836,\n\t\t821\n\t],\n\t\"./it-IT\": [\n\t\t2546,\n\t\t174\n\t],\n\t\"./it-IT.json\": [\n\t\t2546,\n\t\t174\n\t],\n\t\"./ja-JP\": [\n\t\t5340,\n\t\t93\n\t],\n\t\"./ja-JP.json\": [\n\t\t5340,\n\t\t93\n\t],\n\t\"./ko-KR\": [\n\t\t3097,\n\t\t890\n\t],\n\t\"./ko-KR.json\": [\n\t\t3097,\n\t\t890\n\t],\n\t\"./nl-NL\": [\n\t\t1212,\n\t\t574\n\t],\n\t\"./nl-NL.json\": [\n\t\t1212,\n\t\t574\n\t],\n\t\"./no-NO\": [\n\t\t2883,\n\t\t244\n\t],\n\t\"./no-NO.json\": [\n\t\t2883,\n\t\t244\n\t],\n\t\"./pt-BR\": [\n\t\t3924,\n\t\t319\n\t],\n\t\"./pt-BR.json\": [\n\t\t3924,\n\t\t319\n\t],\n\t\"./ru-RU\": [\n\t\t6917,\n\t\t484\n\t],\n\t\"./ru-RU.json\": [\n\t\t6917,\n\t\t484\n\t],\n\t\"./sv-SE\": [\n\t\t7570,\n\t\t130\n\t],\n\t\"./sv-SE.json\": [\n\t\t7570,\n\t\t130\n\t],\n\t\"./tr-TR\": [\n\t\t8016,\n\t\t580\n\t],\n\t\"./tr-TR.json\": [\n\t\t8016,\n\t\t580\n\t],\n\t\"./zh-TW\": [\n\t\t1515,\n\t\t10\n\t],\n\t\"./zh-TW.json\": [\n\t\t1515,\n\t\t10\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(() => {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn __webpack_require__.e(ids[1]).then(() => {\n\t\treturn __webpack_require__.t(id, 3 | 16);\n\t});\n}\nwebpackAsyncContext.keys = () => (Object.keys(map));\nwebpackAsyncContext.id = 4067;\nmodule.exports = webpackAsyncContext;","import { Box } from '@wds/box';\nimport { Responsive } from '@wds/responsive';\nimport { Theme } from '@wds/styles';\nimport { Typography } from '@wds/typography';\nimport React, { Fragment, ReactElement, ReactNode } from 'react';\nimport { createUseStyles } from 'react-jss';\n\nconst useStyles = createUseStyles((theme: Theme) => {\n const mediaQueryMinScreenSm = `@media (min-width: ${theme.breakpoints.sm}px)`;\n return {\n ctaContainer: {\n marginBottom: theme.spacing[6],\n [mediaQueryMinScreenSm]: {\n width: '240px',\n marginBottom: 0,\n },\n },\n spacer: {\n [mediaQueryMinScreenSm]: {\n borderRight: `1px solid ${theme.palette.border.main}`,\n },\n },\n };\n});\n\ntype CtaDefinition = {\n /** The call-to-action button */\n cta: ReactNode;\n\n /** Explanatory text */\n caption: ReactNode;\n\n /** unique id */\n id: string;\n};\n\n/**\n * Helper for rendering alternative CTAs side-by-side:\n *\n * ```\n * How do you want to proceed?\n * |\n * CALL TO ACTION #1 | CALL TO ACTION #2\n * |\n * Some caption explaining | Another caption explaining\n * the first option | the second option\n * ```\n *\n * - On small screens it collapses into a single column with alternatives stacked vertically\n *\n * @param ctas List of calls-to-action\n * @param prompt Prompt text to show above CTAs\n * @param swapOrder When `true`, the caption is rendered above the CTA. Default is `false`\n */\nexport default function CTASplitter({\n ctas,\n prompt,\n swapOrder = false,\n}: {\n ctas: CtaDefinition[];\n prompt?: ReactNode;\n swapOrder?: boolean;\n}): ReactElement {\n const { ctaContainer, spacer } = useStyles();\n\n const promptText = prompt ? (\n \n \n {prompt}\n \n \n ) : null;\n\n const justify = ctas.length > 1 ? 'space-between' : 'center';\n\n return (\n <>\n {promptText}\n \n {(matches: boolean) => (\n \n {ctas.map(({ cta, caption, id }, index) => (\n \n \n {swapOrder ? caption : cta}\n {swapOrder ? cta : caption}\n \n {index < ctas.length - 1 ? : null}\n \n ))}\n \n )}\n \n >\n );\n}\n","const possibleTypes = {\n SurveyQuestion: [\n 'PresentationQuestion',\n 'SingleChoiceQuestion',\n 'MultipleChoiceQuestion',\n 'OpenEndedQuestion',\n 'MatrixQuestion',\n 'DemographicQuestion',\n 'ClickMapQuestion',\n 'DatetimeQuestion',\n 'BasicQuestion',\n ],\n BaseQuestionHeader: ['SurveyQuestionHeader', 'VideoStimuliSurveyQuestionHeader'],\n PaginatedList: [\n 'AnalysisStandardViewList',\n 'RespondentList',\n 'SurveyRespondentResultsList',\n 'SurveyQuestionColumnChoiceList',\n 'SurveyQuestionList',\n 'CollaboratorList',\n 'CollectorList',\n 'CrossTabReportList',\n 'AnalysisResultsDashboardList',\n 'SurveyPageList',\n 'AnalysisSharedViewList',\n 'SurveyQuestionRowList',\n 'SurveyQuestionOptionList',\n 'WordCloudTagList',\n 'SurveyOtherResponseList',\n 'TeamImageAssetsList',\n 'ApplicationListingList',\n 'LibraryAssetsList',\n 'SurveyList',\n 'AnalysisExportJobList',\n 'SurveyTemplateList',\n 'SurveyCategoryList',\n 'SurveyCategoryIdList',\n 'SurveyTemplateCategoryList',\n 'SurveyTemplateAttributesList',\n 'TeamSurveyList',\n 'SurveyQuestionTemplateList',\n 'BillingInvoiceList',\n 'SurveyQuestionColumnList',\n 'NotificationPreferenceList',\n ],\n AnalysisStandardViewFilterRule: [\n 'QnAFilter',\n 'CollectorFilter',\n 'QuizScoreBucketsFilter',\n 'TimePeriodFilter',\n 'CompletenessFilter',\n 'RandomAssignmentFilter',\n 'RelativeTimePeriodFilter',\n 'ResponseQualityFilter',\n 'SinceLastInviteFilter',\n 'TagFilter',\n ],\n AnalysisStandardViewCompareRule: ['QuestionAndAnswerCompare', 'RandomAssignmentCompare'],\n SurveyRespondentAnswer: [\n 'SurveyChoiceResponse',\n 'SurveyImageChoiceResponse',\n 'SurveyOtherResponse',\n 'SurveyOpenEndedResponse',\n 'SurveyMatrixResponse',\n 'SurveyMatrixOtherResponse',\n 'SurveyMatrixDropDownResponse',\n 'SurveyMatrixOpenEndedResponse',\n 'SurveyFileUploadResponse',\n 'SurveyPaymentResponse',\n 'SurveyPresentationImageResponse',\n 'SurveyPresentationTextResponse',\n ],\n SurveyQuestionOption: [\n 'SurveyQuestionRow',\n 'SurveyQuestionOther',\n 'SurveyQuestionColumn',\n 'SurveyQuestionColumnChoice',\n ],\n Project: ['ConceptTestingProject'],\n ProjectVariableConfiguration: [\n 'DefaultConfiguration',\n 'ImageStimuliVariableConfiguration',\n 'TextStimuliVariableConfiguration',\n 'VideoStimuliVariableConfiguration',\n 'ProductStimuliVariableConfiguration',\n 'NormsVariableConfiguration',\n 'AttributesVariableConfiguration',\n 'StimuliComparisonQuestionVariableConfiguration',\n 'CustomQuestionsBeforeStimuliVariableConfiguration',\n 'CustomQuestionsAfterStimuliVariableConfiguration',\n ],\n ProjectVariableAnswer: ['QuestionVariableAnswer', 'QuestionBankVariableAnswer', 'ValueVariableAnswer'],\n ConceptTestingStimulus: ['ConceptTestingTextStimulus', 'ConceptTestingImageStimulus'],\n AttributeQuestion: ['SingleChoiceQuestion', 'MultipleChoiceQuestion', 'OpenEndedQuestion'],\n QuestionResponseSummary: [\n 'OneDimensionalResponseSummary',\n 'TwoDimensionalResponseSummary',\n 'ThreeDimensionalResponseSummary',\n ],\n MultipleComparisonQuestion: ['MultipleChoiceQuestion', 'SingleChoiceQuestion'],\n CustomQuestion: ['SingleChoiceQuestion', 'MultipleChoiceQuestion', 'OpenEndedQuestion'],\n ProjectEntity: ['ProjectAudienceCollectorEntity', 'ProjectSurveyEntity'],\n AudienceTargetingCriteria: [\n 'AudienceRangeCriteria',\n 'AudienceCategoricalCriteria',\n 'AudienceHouseholdIncomeRangeCriteria',\n ],\n AudienceCriteriaSelection: [\n 'AudienceCategoricalCriteriaSelection',\n 'AudienceRangeCriteriaSelection',\n 'AudienceHouseholdIncomeRangeCriteriaSelection',\n ],\n CustomQuestionResponseSummary: ['CustomQuestionAggregateResponseSummary', 'CustomQuestionStimuliResponseSummary'],\n ImageAsset: ['TeamImageAsset'],\n TeamAsset: ['TeamImageAsset'],\n Asset: ['TeamImageAsset'],\n LibraryAsset: ['LibraryImage', 'LibraryTheme', 'LibraryCustomQuestion', 'LibrarySurveyTemplate', 'LibraryDocument'],\n WelcomeFlowQuestion: [\n 'WelcomeFlowSingleChoiceQuestion',\n 'WelcomeFlowMultipleChoiceQuestion',\n 'WelcomeFlowFlagQuestion',\n 'WelcomeFlowNumberQuestion',\n 'WelcomeFlowTextQuestion',\n ],\n SurveyQuestionTemplate: [\n 'BasicQuestionTemplate',\n 'SingleChoiceQuestionTemplate',\n 'MatrixQuestionTemplate',\n 'OpenEndedQuestionTemplate',\n 'DemographicQuestionTemplate',\n 'MultipleChoiceQuestionTemplate',\n 'ClickMapQuestionTemplate',\n 'DatetimeQuestionTemplate',\n 'PresentationQuestionTemplate',\n ],\n QuestionVariableAnswerData: [\n 'DefaultQuestionVariableAnswerData',\n 'ABQuestionVariableAnswerData',\n 'VideoABQuestionVariableAnswerData',\n ],\n SurveyQuestionTemplateOption: [\n 'SurveyQuestionTemplateRow',\n 'SurveyQuestionTemplateOther',\n 'SurveyQuestionTemplateColumn',\n 'SurveyQuestionTemplateColumnChoice',\n ],\n};\n\nexport default possibleTypes;\n","const isEUSubdomain = (hostname: string): boolean => {\n const parts = hostname.split('.');\n\n return parts.length === 4 && parts[1] === 'eu';\n};\n\nexport default function getSubdomain(): string | undefined {\n let subdomain = '';\n\n try {\n const host = window.location.hostname;\n\n const parts = host.split('.');\n const isUKDomain = host.endsWith('.co.uk');\n\n // We only want to handle domains that are in the format de.surveymonkey.com or de.eu.surveymonkey.com\n const validHost = parts.length === 3 && !isUKDomain;\n const validEUHost = isEUSubdomain(host) && !isUKDomain;\n\n if (validHost) {\n [subdomain] = parts;\n } else if (validEUHost) {\n subdomain = `${parts[0]}.${parts[1]}`;\n }\n } catch (e: unknown) {\n // do nothing\n }\n\n return subdomain;\n}\n","import { QueryParams } from '~common/entities/smParams';\n\nexport default function getQueryParam(name: QueryParams): T | undefined {\n const params = new URLSearchParams(window.location.search);\n return (params.get(name) as T) || undefined;\n}\n\nexport function hasQueryParam(name: string): boolean {\n return new URLSearchParams(window.location.search).has(name);\n}\n\n/**\n * @returns The page query params as a dictionary.\n */\nexport function getAllQueryParams(): Record {\n const params = new URLSearchParams(window.location.search);\n const obj = Object.create(null);\n params.forEach((value, key) => {\n obj[key] = value;\n });\n return obj;\n}\n","import { Auth0Client, AuthorizationParams } from '@auth0/auth0-spa-js';\n\nimport { Auth0Config } from '~app/helpers/auth0Config';\nimport { stashSamlConnection, stashEp, stashSm, stashSmAllow } from '~app/helpers/sessionStorage';\nimport { getAmplitudeIds, waitForAmplitude } from '~app/utils/amplitudeHelpers';\nimport getSubdomain from '~app/utils/getSubdomain';\nimport { Auth0Strategy, isSocial } from '~common/entities/auth0Strategy';\nimport { QueryParams, SmParams } from '~common/entities/smParams';\nimport asEnum from '~common/helpers/asEnum';\nimport getQueryParam, { getAllQueryParams, hasQueryParam } from '../helpers/queryParams';\nimport { AppState, SmApp, SmShow } from './handlers';\n\nfunction getRedirectUri(ep: string | undefined): string {\n return `https://${window.location.hostname}/login/callback${ep?.includes('sso_user') ? '?sso_user=' : ''}`;\n}\n\nconst FORCE_AUTH: AuthorizationParams['prompt'] = 'login';\n\nfunction getSmShow(): SmShow | undefined {\n const showParam: SmShow | undefined = getQueryParam(QueryParams.SM_SHOW);\n if (showParam !== undefined) {\n return showParam;\n }\n\n const { pathname } = window.location;\n if (pathname.includes('sign-up')) {\n return SmShow.SIGNUP;\n }\n if (pathname.includes('forgot-password')) {\n return SmShow.FORGOT_PASSWORD;\n }\n\n return undefined;\n}\n\nfunction getSmApp(): SmApp | undefined {\n const value = getQueryParam(QueryParams.SM_APP);\n\n try {\n return asEnum(SmApp, value);\n } catch (e: unknown) {\n // value not in enum\n }\n return undefined;\n}\n\nfunction getSmForceAccontPicker(): true | undefined {\n if (hasQueryParam(SmParams.SM_FORCE_ACCOUNT_PICKER)) {\n return true;\n }\n return undefined;\n}\n\nfunction getForceAccountCreation(): true | undefined {\n const { pathname } = window.location;\n if (pathname.replace(/\\/$/, '') === '/sign-up') {\n const connection = getQueryParam(QueryParams.CONNECTION);\n try {\n // When the user came into the transaction with \"signup\" intent and a social `connection`\n // param, they'll bypass the login page and go straight to the social IdP, so their intent\n // cannot change. Let's go ahead and force account creation in this case\n const strategy = asEnum(Auth0Strategy, connection);\n return isSocial(strategy) || undefined;\n } catch (e: unknown) {\n // unknown or no connection, ignore\n }\n }\n\n return undefined;\n}\n\n/**\n * @returns the params that will be persisted with the login transaction\n */\nfunction buildAppState(): AppState {\n return {\n show: getSmShow(),\n app: getSmApp(),\n forceAccountPicker: getSmForceAccontPicker(),\n ut_source: getQueryParam(QueryParams.UT_SOURCE),\n ut_source2: getQueryParam(QueryParams.UT_SOURCE2),\n authUrl: window.location.toString(),\n forceAccountCreation: getForceAccountCreation(),\n };\n}\n\n// URL opener function for the auth redirect. Because the current /login route is just a transitional\n// spinner screen, it shouldn't appear in the user's browsing history, hence location.replace() it\nasync function replaceUrl(url: string): Promise {\n window.location.replace(url);\n return Promise.resolve();\n}\n\n/**\n * @returns Which Auth0 connection to initiate login against. If undefined, LoginApp UI will be\n * rendered and offer all the available options (password, social, SAML, etc).\n */\nfunction getConnection(ssoCanonicalName?: string): string | undefined {\n return getQueryParam(QueryParams.CONNECTION) ?? ssoCanonicalName ?? undefined;\n}\n\n/**\n * Begins a login transaction, storing the per-transaction params in\n * sessionStorage. Then navigates to the authentication provider.\n * Handles both sign-ups and logins, given the user can switch intent\n * on the login page.\n *\n * @param auth0Config Auth0 configuration\n * @param ep Optional URI where the user should be sent after completing the transaction\n * @param language The user's language code, will be passed to LoginApp to control display language\n * @param country The user's country, will be passed to LoginApp to adjust country-specific look & feel\n * @param smAllowCreateUserCookieVal\n * @param ssoCanonicalName Initiate login against the Auth0 connection with this name. This is used\n * in SSO flows when we already know what IdP the user wants.\n */\nexport default async function login({\n auth0Config,\n ep,\n language,\n country,\n smAllowCreateUserCookieVal,\n ssoCanonicalName,\n}: {\n auth0Config: Auth0Config;\n ep?: string;\n language?: string;\n country?: string;\n smAllowCreateUserCookieVal?: string;\n ssoCanonicalName?: string;\n}): Promise {\n const { domain, clientId, now } = auth0Config;\n if (!domain || !clientId) {\n throw new Error(`Missing auth0 configuration`);\n }\n\n const client = new Auth0Client({\n clientId,\n domain,\n authorizationParams: {\n redirect_uri: getRedirectUri(ep),\n },\n nowProvider: () => now,\n });\n\n const sm = getQueryParam(QueryParams.SM);\n const smAllowCreateUser = smAllowCreateUserCookieVal ?? getQueryParam(QueryParams.SM_ALLOW_CREATE_USER);\n const queryObj = getAllQueryParams();\n const connection = getConnection(ssoCanonicalName);\n\n // This saves the connection name in session storage to be used\n // when a user is done with their SSO authentication\n stashSamlConnection(connection ?? '');\n\n if (ep !== undefined) {\n stashEp(ep);\n }\n if (sm !== undefined) {\n stashSm(sm);\n }\n if (smAllowCreateUser !== undefined) {\n stashSmAllow(smAllowCreateUser);\n }\n\n // Wait for the Amplitude SDK to drop a session ID. This is important, as passing the Amp session\n // to Auth0 is what makes tracking work across the OAuth flow and back.\n await waitForAmplitude();\n\n const appState = buildAppState();\n const lang = language ?? 'en';\n const amplitudeIds = getAmplitudeIds();\n\n // navigates away\n client\n .loginWithRedirect({\n appState,\n openUrl: replaceUrl,\n authorizationParams: {\n ...queryObj, // propagate all our query params over to Auth0 (incl. 'ep' if we have it)\n [SmParams.SM_AMP_DID]: amplitudeIds.deviceId ?? undefined,\n [SmParams.SM_AMP_SID]: amplitudeIds.sessionId ?? undefined,\n [SmParams.SM_APP]: appState.app,\n [SmParams.SM_SHOW]: appState.show,\n [SmParams.SM_LOCALE]: lang,\n [SmParams.SM_COUNTRY]: country,\n [SmParams.SM_SUBDOMAIN]: getSubdomain(),\n connection,\n prompt: FORCE_AUTH, // SM auth cookie will redirect logged-in users; always prompt for Auth0 login\n },\n })\n ?.catch(e => {\n // eslint-disable-next-line no-console\n console.error('Failed to login with redirect', e);\n });\n}\n","import { MetricsTracker } from '@sm/metrics';\nimport { StaticContext } from '@sm/webassets';\nimport React, { PropsWithChildren, useContext, useEffect, useRef } from 'react';\n\nconst useInitialRender = (): boolean => {\n const isInitialRender = useRef(true);\n\n useEffect(() => {\n if (isInitialRender.current) {\n isInitialRender.current = false;\n }\n });\n\n return isInitialRender.current;\n};\n\nexport default function BaseLoadingPage({ children, pageId }: PropsWithChildren<{ pageId: string }>): JSX.Element {\n const isInitialRender = useInitialRender();\n const { user, environment, 'client-config': clientConfig } = useContext(StaticContext);\n const { countryCode: country } = environment;\n const { gtmId, loggingAPIPath, dataAnalyticsAPIPath, amplitudeToken } = clientConfig;\n\n if (isInitialRender) {\n MetricsTracker.initialize({\n user,\n dataAnalyticsAPIPath,\n loggingAPIPath,\n country,\n legacyWeb: '',\n pageId,\n gtmId,\n amplitudeToken,\n });\n }\n\n return <>{children}>;\n}\n","import { ParseResult } from '..';\n\nexport type Handler = {\n setNext(handler: Handler): Handler;\n\n handle(error: string, errorDescription: string): ParseResult | null;\n};\n\nexport abstract class AbstractHandler implements Handler {\n private nextHandler: Handler | undefined;\n\n public setNext(handler: Handler): Handler {\n this.nextHandler = handler;\n // Returning a handler from here will let us link handlers in a\n // convenient way\n return handler;\n }\n\n public handle(error: string, errorDescription: string): ParseResult | null {\n if (this.nextHandler) {\n return this.nextHandler.handle(error, errorDescription);\n }\n\n return null;\n }\n}\n","import { SamlErrorCode } from '~common/errors/userFacing';\n\nimport { ParseResult } from '..';\nimport { AbstractHandler } from '.';\n\nexport default class ConnectionDisabledHandler extends AbstractHandler {\n public handle(error: string, errorDescription: string): ParseResult | null {\n const isError = error === 'invalid_request' && errorDescription.includes('the connection was disabled');\n\n if (isError) {\n return {\n code: SamlErrorCode.CONNECTION_DISABLED,\n };\n }\n return super.handle(error, errorDescription);\n }\n}\n","import { SamlErrorCode } from '~common/errors/userFacing';\n\nimport { ParseResult } from '..';\nimport { AbstractHandler } from '.';\n\nexport default class IDPInitiatedHandler extends AbstractHandler {\n public handle(error: string, errorDescription: string): ParseResult | null {\n const isError = error === 'invalid_request' && errorDescription.includes('IdP-Initiated login is not enabled');\n\n if (isError) {\n return {\n code: SamlErrorCode.IDP_INITIATED_NOT_ENABLED,\n };\n }\n return super.handle(error, errorDescription);\n }\n}\n","import { SamlErrorCode } from '~common/errors/userFacing';\n\nimport { ParseResult } from '..';\nimport { AbstractHandler } from '.';\n\nexport default class InvalidCertHandler extends AbstractHandler {\n public handle(error: string, errorDescription: string): ParseResult | null {\n const isError =\n error === 'access_denied' &&\n (errorDescription.startsWith('The signing certificate is invalid') ||\n errorDescription.startsWith('Signature check errors') ||\n errorDescription.startsWith('Signature is missing') ||\n errorDescription.startsWith('Signature was found more than one time'));\n\n if (isError) {\n return {\n code: SamlErrorCode.X509_CANNOT_VERIFY,\n };\n }\n return super.handle(error, errorDescription);\n }\n}\n","import { SamlErrorCode } from '~common/errors/userFacing';\n\nimport { ParseResult } from '..';\nimport { AbstractHandler } from '.';\n\nexport default class InvalidThumprintHandler extends AbstractHandler {\n public handle(error: string, errorDescription: string): ParseResult | null {\n const isError = error === 'access_denied' && errorDescription.startsWith('Invalid thumbprint');\n\n if (isError) {\n return {\n code: SamlErrorCode.X509_MISMATCH,\n };\n }\n return super.handle(error, errorDescription);\n }\n}\n","import { ProgressCircle } from '@wds/progress-circle';\nimport React, { useEffect, useState } from 'react';\n\nimport BaseLoadingPage from '~app/pages/login/BaseLoadingPage';\nimport { SamlError } from '~app/helpers/sessionsApiClient';\n\nimport navigateTo from '~app/helpers/navigateTo';\nimport './loading.scss';\n\nimport getQueryParam from '~app/helpers/queryParams';\nimport parse, { ParseResult } from '~app/utils/auth0SamlErrorParser';\nimport { QueryParams } from '~common/entities/smParams';\n\nexport const TEST_ID = 'LoadingPage';\n\ntype Handler = () => void | Promise;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction isPromise(v?: any): v is Promise {\n return !!v && 'then' in v;\n}\n\nexport default function LoadingPage({ handler }: { handler: Handler }): JSX.Element {\n const [, setError] = useState();\n const handleError = (e: Error): void => {\n // Auth0 throws this error if the state been returned is not valid\n const validState = e.message !== 'Invalid state';\n\n let auth0Error: ParseResult | null = null;\n const errorReason = getQueryParam(QueryParams.ERROR);\n const errorDesc = getQueryParam(QueryParams.ERROR_DESCRIPTION);\n\n if (errorReason && errorDesc && validState) {\n auth0Error = parse(errorReason, errorDesc);\n }\n\n if ((auth0Error || e instanceof SamlError) && validState) {\n const code = auth0Error?.code ?? (e as SamlError).code;\n\n return navigateTo('/login/error', { error: code });\n }\n\n // Re-throw the error inside a new hook. This ensures that the page-level\n // error boundary will trigger.\n setError(() => {\n throw e;\n });\n };\n\n // We're not providing deps to useEffect because we only load this\n // component on page load and we're running a script for the entire lifecycle\n // of the page.\n useEffect(() => {\n const result = handler();\n if (isPromise(result)) {\n result.catch(handleError);\n }\n });\n return (\n \n \n \n \n \n );\n}\n","import { SamlErrorCode } from '~common/errors/userFacing';\nimport ConnectionDisabledHandler from './handlers/connectionDisabled';\nimport IDPInitiatedHandler from './handlers/idpInitiated';\nimport InvalidCertHandler from './handlers/invalidCert';\nimport InvalidThumprintHandler from './handlers/invalidThumbprint';\n\nexport type ParseResult = {\n code: SamlErrorCode;\n};\n\nexport default function parse(error: string, errorDescription: string): ParseResult | null {\n const idpInitiated = new IDPInitiatedHandler();\n const invalidCert = new InvalidCertHandler();\n const invalidThumbprint = new InvalidThumprintHandler();\n const connectionDisabled = new ConnectionDisabledHandler();\n\n invalidThumbprint.setNext(connectionDisabled).setNext(invalidCert).setNext(idpInitiated);\n\n return invalidThumbprint.handle(error, decodeURIComponent(errorDescription));\n}\n","import { StaticContext } from '@sm/webassets';\nimport { useContext } from 'react';\nimport { Auth0Config } from '~app/helpers/auth0Config';\n\nexport default function useAuth0Config(): Auth0Config {\n const {\n 'client-config': { auth0, now },\n } = useContext<{ 'client-config': { auth0: Auth0Config; now: number } }>(StaticContext);\n\n auth0.now = now;\n\n return auth0;\n}\n","import { StaticContext } from '@sm/webassets';\nimport React, { useContext } from 'react';\nimport { useParams } from 'react-router-dom';\nimport login from '~app/handlers/login';\nimport LoadingPage from '~app/pages/login/LoadingPage/LoadingPage';\nimport useAuth0Config from '~app/pages/login/hooks';\n\n/** Renders a spinner page that starts the auth transaction and redirects the user to Auth0 */\nexport default function StartAuthTransactionPage(): JSX.Element {\n const {\n 'client-config': { ep, smAllowCreateUser },\n environment: { languageCode: language, countryCode: country },\n } = useContext(StaticContext);\n\n const auth0Config = useAuth0Config();\n\n const { ssoCanonicalName } = useParams<{ ssoCanonicalName?: string }>();\n\n return (\n {\n // Don't need to await this promise, just ignore it\n void login({\n auth0Config,\n ep,\n language,\n country,\n smAllowCreateUserCookieVal: smAllowCreateUser,\n ssoCanonicalName,\n });\n }}\n />\n );\n}\n","import { Auth0Client, IdToken } from '@auth0/auth0-spa-js';\nimport { clientErrorHandler } from '@sm/webassets';\nimport { AppState } from '../handlers';\n\n/**\n * Handles the OAuth callback, extracting the ID Token claims, and AppState that was\n * saved with the transaction.\n *\n * @param client Configured Auth0 client\n * @returns ID Token claims and app state.\n */\nexport default async function handleRedirectCallback(\n client: Auth0Client\n): Promise<{ appState: AppState; claims: IdToken }> {\n try {\n const result = await client.handleRedirectCallback();\n const claims = await client.getIdTokenClaims();\n const appState: AppState = result.appState || {};\n\n if (!claims) {\n throw new Error('Missing ID token');\n }\n\n return { appState, claims };\n } catch (e: unknown) {\n if (e instanceof Error) {\n clientErrorHandler.logError(e, 'Failed to get ID token');\n }\n throw e;\n }\n}\n","type Input = Record;\n\n/**\n * Helper function that asserts a value that:\n * - we know is a string (or expect is a string)\n * - its typing says it _could_ be of type not-a-string\n * gets returned as type string.\n *\n * @param v any value that should be a string\n * @returns the value asserted as a string, or undefined if the value isn't a string\n */\nexport function asString(v: unknown): string | undefined {\n return typeof v === 'string' ? v : undefined;\n}\n\n/** @returns a copy of `target` with all `undefined`-valued properties omitted */\nexport default function cleanObject(target: Input): Record {\n const copy: Record = {};\n\n Object.entries(target).forEach(([key, value]) => {\n if (value !== undefined) {\n copy[key] = value;\n }\n });\n\n return copy;\n}\n","import { IdToken } from '@auth0/auth0-spa-js';\nimport { clientErrorHandler } from '@sm/webassets';\n\ntype respondentSSOTokenBody = {\n userId: string;\n userAuthCookie: string;\n redirectUrl?: string;\n};\n\nexport class RespondentSSOClient {\n readonly createRespondentSSOTokenendpointUrl = '/login/api/v1/respondent/actions/create_respondent_sso_token';\n\n async createRespondentSSOToken(idToken: IdToken, ep: string): Promise {\n const resp = await fetch(this.createRespondentSSOTokenendpointUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n id_token: idToken.__raw,\n ep,\n }),\n });\n\n if (resp.status === 200) {\n return (await resp.json()) as respondentSSOTokenBody;\n }\n\n const error = new Error('Failed to create responent SSO Token');\n clientErrorHandler.logError(error);\n throw error;\n }\n}\n\nexport default (): RespondentSSOClient => new RespondentSSOClient();\n","import { Auth0Client, IdToken } from '@auth0/auth0-spa-js';\nimport SessionClient, { IdentityNotLinkedError, SessionResult } from '../helpers/sessionsApiClient';\nimport handleRedirectCallback from './callback/handleRedirectCallback';\nimport navigateTo from '~app/helpers/navigateTo';\nimport { fetchAndRemoveEp, fetchAndRemoveSm, fetchAndRemoveSmAllow, stashIdToken } from '../helpers/sessionStorage';\nimport { Auth0Config } from '~app/helpers/auth0Config';\nimport cleanObject from '~common/utils/cleanObject';\nimport { SmParams } from '~common/entities/smParams';\nimport { AppState } from './handlers';\nimport RespondentSSOClient from '../helpers/respondentSSOApiClient';\n\nfunction handleSsoSessionResult(result: SessionResult, redirectUrl?: string): void {\n if (redirectUrl) {\n navigateTo(redirectUrl);\n } else {\n throw new Error(`redirectUrl not provided for SSO_LOGIN result: ${result}`);\n }\n}\n\nfunction handleLoggedInOrCreatedSessionResult(\n result: SessionResult,\n appState: AppState,\n ep?: string,\n sm?: string\n): void {\n navigateTo(\n '/login/next',\n cleanObject({\n ep,\n joined: result === SessionResult.CREATED ? 'true' : undefined,\n force_account_picker: appState.forceAccountPicker ? 'true' : undefined,\n sm,\n })\n );\n}\n\nfunction handleUnlinkedSessionResult(\n appState: AppState,\n claims: IdToken,\n error?: IdentityNotLinkedError,\n ep?: string,\n sm?: string,\n smAllowCreateUser?: string\n): void {\n const { app, forceAccountPicker, ut_source: utSource, ut_source2: utSource2 } = appState;\n const emailInUse = error?.emailInUse ? 'true' : undefined;\n stashIdToken(claims);\n navigateTo(\n '/login/unlinked',\n cleanObject({\n [SmParams.SM_APP]: app,\n [SmParams.SM_FORCE_ACCOUNT_PICKER]: forceAccountPicker ? '' : undefined,\n ep,\n sm,\n sm_allow_create_user: smAllowCreateUser,\n ut_source: utSource,\n ut_source2: utSource2,\n email_in_use: emailInUse,\n })\n );\n}\n\n/**\n * Completes a login transaction and establishes a session, then navigates the user\n *\n * @param config Auth0 configuration\n */\nasync function auth0Callback(\n config: Auth0Config,\n ep?: string,\n sm?: string,\n sm_allow_create_user?: string\n): Promise {\n const { domain, clientId } = config;\n if (!domain || !clientId) {\n throw new Error('Missing auth0 configuration');\n }\n\n const client = new Auth0Client({\n clientId,\n domain,\n nowProvider: () => config.now,\n });\n const { appState, claims } = await handleRedirectCallback(client);\n const { result, error, redirectUrl } = await SessionClient().createByLogin({\n claims,\n appState,\n smAllowCreateUser: sm_allow_create_user,\n });\n\n switch (result) {\n case SessionResult.SSO_LOGIN:\n handleSsoSessionResult(result, redirectUrl);\n break;\n case SessionResult.LOGGED_IN:\n case SessionResult.CREATED:\n handleLoggedInOrCreatedSessionResult(result, appState, ep, sm);\n break;\n case SessionResult.UNLINKED:\n handleUnlinkedSessionResult(appState, claims, error, ep, sm, sm_allow_create_user);\n break;\n default:\n throw new Error(`Unhandled result: ${result}`);\n }\n}\n\nexport default async function callback(config: Auth0Config, isLegacySso: boolean): Promise {\n const ep = fetchAndRemoveEp() ?? undefined;\n const sm = fetchAndRemoveSm() ?? undefined;\n\n if (ep?.includes('sso_user')) {\n const { domain, clientId } = config;\n if (!domain || !clientId) {\n throw new Error('Missing auth0 configuration');\n }\n const client = new Auth0Client({\n clientId,\n domain,\n nowProvider: () => config.now,\n });\n const { claims } = await handleRedirectCallback(client);\n const respondentSSOData = await RespondentSSOClient().createRespondentSSOToken(claims, ep);\n navigateTo(respondentSSOData.redirectUrl ?? ep);\n } else if (isLegacySso) {\n navigateTo('/user/redirect', cleanObject({ ep, sm }));\n } else {\n const sm_allow_create_user = fetchAndRemoveSmAllow() ?? undefined;\n await auth0Callback(config, ep, sm, sm_allow_create_user);\n }\n}\n","import { StaticContext } from '@sm/webassets';\nimport React, { useContext } from 'react';\nimport callback from '~app/handlers/callback';\nimport LoadingPage from '~app/pages/login/LoadingPage/LoadingPage';\nimport useAuth0Config from '~app/pages/login/hooks';\n\nexport default function HandleAuthCallbackPage(): JSX.Element {\n const {\n 'client-config': { isLegacySso },\n } = useContext(StaticContext);\n\n const auth0Config = useAuth0Config();\n\n return callback(auth0Config, isLegacySso)} />;\n}\n","import React, { PropsWithChildren, ReactNode } from 'react';\nimport { CaptiveWindow } from '@sm/webassets';\nimport { createUseStyles } from 'react-jss';\nimport { Box } from '@wds/box';\nimport { Theme } from '@wds/styles';\n\nconst useStyles = createUseStyles(({ palette }: Theme) => {\n return {\n unlinkedWindow: {\n maxWidth: '636px',\n },\n window: {\n backgroundColor: palette.background.main,\n },\n };\n});\n\nconst UnlinkedWindow = ({ addOnTop, children }: PropsWithChildren<{ addOnTop: ReactNode }>): JSX.Element => {\n const { unlinkedWindow, window } = useStyles();\n return (\n \n {addOnTop}}>\n {children}\n \n \n );\n};\n\nexport default UnlinkedWindow;\n","import React from 'react';\nimport { Button } from '@wds/button';\nimport { Theme } from '@wds/styles';\nimport { createUseStyles } from 'react-jss';\nimport { ProgressCircle } from '@wds/progress-circle';\n\nexport const BUTTON_TEST_ID = 'UnlinkedButtonOptionButton';\n\nconst useStyles = createUseStyles((theme: Theme) => ({\n buttonOverride: {\n '& a, & button': {\n // reduce padding since we have some long titles and want to avoid breaking onto another\n // line if possible\n padding: [0, theme.spacing[3]],\n },\n },\n}));\n\nexport default function UnlinkedButtonOption({\n isDisabled,\n showSpinner,\n titleText,\n onClick,\n id,\n href,\n}: {\n isDisabled: boolean;\n showSpinner: boolean;\n titleText: string;\n id?: string;\n href?: string;\n onClick(): void;\n}): JSX.Element {\n let buttonTestId: string = BUTTON_TEST_ID;\n if (typeof id !== 'undefined') {\n const suffix = `__${id}`;\n buttonTestId = `${buttonTestId}${suffix}`;\n }\n\n const { buttonOverride } = useStyles();\n\n return (\n
\n \n
\n );\n}\n\nUnlinkedButtonOption.defaultProps = {\n id: undefined,\n href: undefined,\n};\n","import React from 'react';\nimport { defineMessages, T } from '@sm/intl';\nimport { Banner } from '@wds/banner';\n\nexport const TEST_ID = 'UnlinkedErrorBanner';\nexport const ERROR_TEST_ID = 'UnlinkedErrorBanner__Error';\nexport const JWT_ERROR_TEST_ID = 'UnlinkedErrorBanner__JWTError';\n\nconst COPY = defineMessages({\n unlinkedPageErrorBanner: {\n id: 'login.UnlinkedErrorBanner.BannerCopy',\n defaultMessage: 'Sorry, something went wrong. Please try again.',\n description: '[Type: Label][Vis: high] - Banner that shows when a signup attempt failed',\n },\n unlinkedPageJwtErrorBanner: {\n id: 'login.UnlinkedErrorBanner.JWTErrorBannerCopy',\n defaultMessage: \"Your request expired. Please go back and try again.\",\n description:\n '[Type: Label][Vis: high] - Banner that instructs the user to take specific action when a signup attempt failed',\n },\n});\n\nexport default function UnlinkedErrorBanner({ JWTError }: { JWTError: boolean }): JSX.Element {\n return (\n \n {JWTError ? (\n \n \n \n ) : (\n \n \n \n )}\n \n );\n}\n","import { defineMessages, T } from '@sm/intl';\nimport React from 'react';\nimport { PageHeader } from '@wds/page-header';\nimport { createUseStyles } from 'react-jss';\nimport { Theme } from '@wds/styles';\n\nimport { SocialName } from './types';\n\nexport const TEST_ID = 'UnlinkedHeader';\n\nconst COPY = defineMessages({\n unlinkedPageHeader: {\n id: 'login.UnlinkedHeader.Header',\n defaultMessage: 'Your {socialName} account isn’t linked to a SurveyMonkey account',\n description:\n '[Type: Header][Vis: med] - Header of the page alerting the user their third party account is unlinked',\n },\n unlinkedEmailInUseHeader: {\n id: 'login.UnlinkedHeader.EmailInUseHeader',\n defaultMessage: 'Please log in with your password',\n description:\n '[Type: Header][Vis: med] - Header of the page informing the user there is an existing account linked to their social email, so they need to log in using their password',\n },\n});\n\nconst useStyles = createUseStyles((theme: Theme) => {\n return {\n headerContainer: {\n '& > *': {\n paddingTop: 0,\n paddingBottom: theme.spacing[6],\n },\n '& *': {\n backgroundColor: 'transparent',\n },\n },\n header: {\n fontSize: theme.type.fontSize.pageTitle,\n },\n };\n});\n\nexport default function UnlinkedHeader({\n socialName,\n emailInUse,\n}: {\n socialName: SocialName;\n emailInUse: boolean;\n}): JSX.Element {\n const { headerContainer, header } = useStyles();\n\n const headerText = emailInUse ? (\n \n ) : (\n \n );\n\n return (\n
\n {headerText}
}>\n <>>\n \n \n );\n}\n","import { defineMessages, t } from '@sm/intl';\nimport { createURL } from '@sm/utils';\nimport { Box } from '@wds/box';\nimport { Theme } from '@wds/styles';\nimport { Typography } from '@wds/typography';\nimport React, { useState } from 'react';\nimport { createUseStyles } from 'react-jss';\nimport CTASplitter from '~app/components/CTASplitter/CTASplitter';\nimport { AppState } from '~app/handlers/handlers';\nimport navigateTo from '~app/helpers/navigateTo';\nimport { removeIdToken } from '~app/helpers/sessionStorage';\nimport SessionClient, { SessionResult } from '~app/helpers/sessionsApiClient';\nimport UnlinkedWindow from '~app/pages/login/UnlinkedPage/UnlinkedWindow';\nimport { QueryParams, SmParams } from '~common/entities/smParams';\nimport cleanObject from '~common/utils/cleanObject';\nimport getQueryParam, { hasQueryParam } from '../../../helpers/queryParams';\nimport UnlinkedButtonOption from './UnlinkedButtonOption';\nimport UnlinkedErrorBanner from './UnlinkedErrorBanner';\nimport UnlinkedHeader from './UnlinkedHeader';\nimport getAndValidateIdToken from './tokenHelper';\nimport { AuthState } from './types';\n\nexport const TEST_ID = 'UnlinkedPage';\n\nconst COPY = defineMessages({\n unlinkedPageSignupButtonTitle: {\n id: 'login.UnlinkedPageContent.SignupTitle',\n defaultMessage: 'Create a new account',\n description: '[Type: Button][Vis: high] - Button header for the user to create a new account',\n },\n unlinkedPageSignupButtonContent: {\n id: 'login.UnlinkedPageContent.SignupContent',\n defaultMessage: 'Sign up for SurveyMonkey using your {socialName} account – it’s free and easy',\n description:\n '[Type: Button][Vis: high] - Button text informing the user what happens if they click \"Create a new account\"',\n },\n unlinkedPageLoginButtonTitle: {\n id: 'login.UnlinkedPageContent.LoginTitle',\n defaultMessage: 'Log in to an existing account',\n description: '[Type: Button][Vis: high] - Button header for the user to log in to an existing account',\n },\n unlinkedPageLoginButtonEmailInUseTitle: {\n id: 'login.UnlinkedPageContent.LoginEmailInUseTitle',\n defaultMessage: 'Log in to your account',\n description:\n '[Type: Button][Vis: high] - Button header for the user to log in to the existing account linked to their social email',\n },\n unlinkedPageLoginButtonContent: {\n id: 'login.UnlinkedPageContent.LoginContent',\n defaultMessage: 'Once you log in to SurveyMonkey, you can link your {socialName} account from the My Account page',\n description:\n '[Type: Button][Vis: high] - Button text informing the user what happens if they click \"Log in to an existing account\"',\n },\n unlinkedPageEmailInUseMessage: {\n id: 'login.UnlinkedPageContent.EmailInUseMessage',\n defaultMessage: `
We found your account with {email}.
To log in, enter this email and select Next to enter your password.
You can’t use the Log in with {socialName} option until you’ve linked your SurveyMonkey and {socialName} accounts.
`,\n description: `[Type: Paragraph][Vis: med] - Body text informing the user of what steps they must take in order to login. \"Next\" is the button label defined in LoginEmailPage:submitButtonLabel`,\n },\n unlinkedPageLoginButton: {\n id: 'login.UnlinkedPageContent.LogIn',\n defaultMessage: 'Log in',\n description: `[Type: Button][Vis: high] - Label for the \"Log in\" button`,\n },\n unlinkedPageOptionsHeaderNoEmail: {\n id: 'login.UnlinkedPageContent.OptionsHeaderNoEmail',\n defaultMessage: `What would you like to do?`,\n description: '[Type: Paragraph][Vis: med] - Header asking user what they would like to do to link their account',\n },\n});\n\nconst useStyles = createUseStyles((theme: Theme) => {\n return {\n emailInUseButtonContainer: {\n width: '240px',\n },\n };\n});\n\nexport default function UnlinkedPageContent(): JSX.Element {\n const { idToken, socialName } = getAndValidateIdToken();\n const { emailInUseButtonContainer } = useStyles();\n\n const appState: AppState = {\n app: getQueryParam(QueryParams.SM_APP),\n ep: getQueryParam(QueryParams.EP),\n forceAccountPicker: hasQueryParam(SmParams.SM_FORCE_ACCOUNT_PICKER) ? true : undefined,\n sm: getQueryParam(QueryParams.SM),\n sm_allow_create_user: getQueryParam(QueryParams.SM_ALLOW_CREATE_USER),\n ut_source: getQueryParam(QueryParams.UT_SOURCE),\n ut_source2: getQueryParam(QueryParams.UT_SOURCE2),\n };\n\n const emailInUse = !!getQueryParam(QueryParams.EMAIL_IN_USE);\n const userEmail = idToken.email as string;\n // For the \"Create a new account\" button\n const [signupState, setSignupState] = useState('pageload');\n const [signupJWTError, setSignupJWTError] = useState(false);\n\n const attemptSignUp = async (): Promise => {\n if (signupState === 'pending' || signupState === 'success') {\n return;\n }\n setSignupState('pending');\n\n try {\n const result = await SessionClient().createBySignup({ claims: idToken, appState });\n if (result === SessionResult.CREATED) {\n setSignupState('success');\n removeIdToken();\n navigateTo('/login/next', cleanObject({ ep: appState.ep, joined: 'true' }));\n } else {\n setSignupState('error');\n setSignupJWTError(result === SessionResult.INVALID_JWT);\n }\n } catch (error: unknown) {\n setSignupJWTError(false);\n setSignupState('error');\n }\n };\n\n // For the \"Log in to an existing acct\" button\n const [loginState, setLoginState] = useState('pageload');\n\n const attemptLogin = (): void => {\n // navigation to /login handled by href attr; just set state here\n if (loginState !== 'pending' && loginState !== 'success') {\n setLoginState('pending');\n }\n };\n\n const generateLoginURL = (): string => {\n return createURL(\n '/login',\n cleanObject({\n [SmParams.SM_APP]: appState.app,\n [SmParams.SM_FORCE_ACCOUNT_PICKER]: appState.forceAccountPicker ? '' : undefined,\n [SmParams.SM_EMAIL]: userEmail,\n ep: appState.ep,\n sm: appState.sm,\n sm_allow_create_user: appState.sm_allow_create_user,\n ut_source: appState.ut_source,\n ut_source2: appState.ut_source2,\n })\n );\n };\n\n const allowAccountCreation = (): boolean => {\n const baseUrl = window.location.href;\n return !baseUrl.includes('eu.');\n };\n\n // For logic affecting either/both buttons\n const areButtonsDisabled: boolean =\n loginState === 'pending' || loginState === 'success' || signupState === 'pending' || signupState === 'success';\n\n const loginButton = (label: string): JSX.Element => (\n \n );\n\n const EmailInUse = (): JSX.Element => {\n return (\n \n \n {t(\n COPY.unlinkedPageEmailInUseMessage,\n {\n email: userEmail,\n socialName,\n },\n { html: true }\n )}\n \n \n {loginButton(t(COPY.unlinkedPageLoginButton))}\n \n \n );\n };\n\n const CreateOrLogin = (): JSX.Element => {\n const signupCTA = {\n id: 'cta.signup',\n cta: (\n {\n void attemptSignUp();\n }}\n id=\"SIGNUP\"\n />\n ),\n caption: {t(COPY.unlinkedPageSignupButtonContent, { socialName })},\n };\n\n const loginCTA = {\n id: 'cta.login',\n cta: loginButton(t(COPY.unlinkedPageLoginButtonTitle)),\n caption: {t(COPY.unlinkedPageLoginButtonContent, { socialName })},\n };\n\n return (\n \n );\n };\n\n return (\n \n }\n >\n \n {/* OPTIONAL ERROR BANNER */}\n {signupState === 'error' ? : null}\n\n {emailInUse ? : }\n \n \n );\n}\n","import React, { useContext } from 'react';\nimport { StaticContext, BasePage, Helmet } from '@sm/webassets';\nimport UnlinkedPageContent from './UnlinkedPageContent';\n\nexport default function UnlinkedPage(): JSX.Element {\n const {\n locale: { isEUDC },\n } = useContext(StaticContext);\n return (\n \n \n Create or Link Your Account\n \n \n \n );\n}\n","import { Desc, defineMessages } from '@sm/intl';\nimport { getHelpCenterLink } from '@sm/webassets';\nimport { SamlErrorCode } from '~common/errors/userFacing';\n\ntype ErrorMessage = {\n values: Record;\n desc: Desc;\n};\n\nconst errorDescription = '[Type: Paragraph][Vis: high] - The description of a login failure.';\n\nconst COPY = defineMessages({\n ERROR_CODE: {\n id: 'login.copy.ErrorCode',\n defaultMessage: 'Error code',\n description: '[Type: Label][Vis: high] - The label of the error code to be shown',\n },\n ERROR_TITLE: {\n id: 'login.copy.Title',\n defaultMessage: 'Sorry, not able to log in',\n description: '[Type: Paragraph][Vis: high] - The reason a login failed',\n },\n DEFAULT: {\n id: 'login.copy.Default',\n defaultMessage: 'Ask your admin or contact your Customer Success Manager for help.',\n description: errorDescription,\n },\n GROUP_DOWNGRADED: {\n id: 'login.copy.GroupDowngraded',\n defaultMessage: 'Your group no longer has an Enterprise plan. Contact us for more info.',\n description: errorDescription,\n },\n GROUP_NOT_FOUND: {\n id: 'login.copy.GroupNotFound',\n defaultMessage: 'We’re not able to identify your group information. Ask your admin or contact us for help.',\n description: errorDescription,\n },\n NOT_AFTER_FAILURE: {\n id: 'login.copy.NotAfterFailure',\n defaultMessage: 'We’re unable to authenticate your info at this time. Ask your admin or contact us for help.',\n description: errorDescription,\n },\n NO_NAME_ID_FOUND: {\n id: 'login.copy.NoNameIDFound',\n defaultMessage: 'We’re not able to find your account ID in our system. Ask your admin or contact us for help.',\n description: errorDescription,\n },\n RESPONDENT: {\n id: 'login.copy.Respondent',\n defaultMessage: 'Your account doesn’t have permissions enabled. Contact your admin or IT team for help.',\n description: errorDescription,\n },\n SSO_NOT_ENABLED: {\n id: 'login.copy.SSONotEnabled',\n defaultMessage: 'Single sign-on isn’t enabled for your group. Contact your admin for more info.',\n description: errorDescription,\n },\n USER_PENDING_DELETION: {\n id: 'login.copy.UserPendingDeletion',\n defaultMessage:\n 'The account you’re trying to log in to may be pending deletion. Contact us for more info.',\n description: errorDescription,\n },\n USER_PENDING_REASSIGNMENT: {\n id: 'login.copy.UserPendingReassignment',\n defaultMessage:\n 'The account you’re trying to log in to was reassigned by your admin. The invitation email needs to be accepted before logging in. Contact your admin for more info.',\n description: errorDescription,\n },\n X509_CANNOT_VERIFY: {\n id: 'login.copy.X509CannotVerify',\n defaultMessage:\n 'We’re not able to identify your group information due to an incorrect certificate. Ask your admin or contact us for help.',\n description: errorDescription,\n },\n});\n\nexport const getErrorMessage = (languageCode: string, reason?: SamlErrorCode): ErrorMessage => {\n const contactUsLink = getHelpCenterLink(languageCode, { path: 'contact' });\n let values: Record = {};\n let desc: Desc;\n\n switch (reason) {\n case SamlErrorCode.GROUP_DOWNGRADED:\n case SamlErrorCode.GROUP_HAS_NO_OWNER:\n case SamlErrorCode.GROUP_OWNER_IS_NOT_ENTERPRISE:\n values = { contactUs: contactUsLink };\n desc = COPY.GROUP_DOWNGRADED;\n break;\n case SamlErrorCode.GROUP_NOT_FOUND_BY_CANONICAL_NAME:\n case SamlErrorCode.GROUP_NOT_FOUND_BY_ISSUER:\n case SamlErrorCode.GROUP_NOT_FOUND:\n desc = COPY.GROUP_NOT_FOUND;\n break;\n case SamlErrorCode.NOT_AFTER_FAILURE:\n case SamlErrorCode.NOT_BEFORE_FAILURE:\n case SamlErrorCode.SAML_RESPONSE_ALREADY_SEEN:\n desc = COPY.NOT_AFTER_FAILURE;\n break;\n case SamlErrorCode.NO_NAME_ID_FOUND:\n desc = COPY.NO_NAME_ID_FOUND;\n break;\n case SamlErrorCode.RESPONDENT_ONLY:\n desc = COPY.RESPONDENT;\n break;\n case SamlErrorCode.SSO_NOT_ENABLED:\n case SamlErrorCode.GROUP_NOT_SSO_ENABLED:\n desc = COPY.SSO_NOT_ENABLED;\n break;\n case SamlErrorCode.USER_PENDING_DELETION:\n case SamlErrorCode.USER_IS_PENDING_DELETION:\n values = { contactUs: contactUsLink };\n desc = COPY.USER_PENDING_DELETION;\n break;\n case SamlErrorCode.USER_PENDING_REASSIGNMENT:\n case SamlErrorCode.USER_IS_PENDING_REASSIGNMENT:\n desc = COPY.USER_PENDING_REASSIGNMENT;\n break;\n case SamlErrorCode.X509_CANNOT_VERIFY:\n case SamlErrorCode.X509_MISMATCH:\n desc = COPY.X509_CANNOT_VERIFY;\n break;\n default:\n desc = COPY.DEFAULT;\n break;\n }\n\n return {\n desc,\n values,\n };\n};\n\nexport default COPY;\n","/**\n * This takes in a connection name and returns the canonical link of the connection\n *\n * @param connection The connection name\n * @returns The canonical link for the connection name\n */\nconst getCanonicalLink = (connection: string): string => `/login/sso/${connection}`;\n\nconst refreshSamlConnection = async (connection: string): Promise => {\n const endpointUrl = '/login/api/v1/saml_connections/refresh';\n\n try {\n const resp = await fetch(endpointUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n connection,\n }),\n });\n\n if (resp.status === 200) {\n return true;\n }\n } catch (e: unknown) {\n // nothing\n }\n\n return false;\n};\n\nexport default {\n getCanonicalLink,\n refreshSamlConnection,\n};\n","import React, { useContext, useEffect } from 'react';\nimport { ProgressCircle } from '@wds/progress-circle';\nimport { FiveHundredErrorPage, StaticContext } from '@sm/webassets';\nimport { t, T } from '@sm/intl';\n\nimport getQueryParam from '~app/helpers/queryParams';\nimport BaseLoadingPage from '~app/pages/login/BaseLoadingPage';\nimport { QueryParams } from '~common/entities/smParams';\nimport { SamlErrorCode } from '~common/errors/userFacing';\nimport COPY, { getErrorMessage } from './copy';\nimport { fetchSamlConnection, removeSamlConnection } from '~app/helpers/sessionStorage';\nimport samlConnectionApi from '~app/helpers/samlConnectionApi';\n\nexport const LOADING_TEST_ID = 'LoadingPage';\n\nexport function getSamlErrorCode(errorReason: string | undefined): SamlErrorCode | undefined {\n if (errorReason && Object.values(SamlErrorCode).includes(errorReason)) {\n return errorReason as SamlErrorCode;\n }\n\n return undefined;\n}\n\nexport default function ErrorPage(): JSX.Element {\n const [isLoading, setIsLoading] = React.useState(true);\n\n const {\n environment: { languageCode },\n pageRequestId,\n } = useContext(StaticContext);\n const errorReason = getQueryParam(QueryParams.ERROR);\n const samlErrorCode = getSamlErrorCode(errorReason);\n const connection = fetchSamlConnection();\n\n useEffect(() => {\n (async () => {\n const shouldRefreshSamlConnection =\n !!connection &&\n samlErrorCode &&\n (samlErrorCode === SamlErrorCode.X509_MISMATCH || samlErrorCode === SamlErrorCode.X509_CANNOT_VERIFY);\n\n try {\n if (shouldRefreshSamlConnection) {\n const refreshed = await samlConnectionApi.refreshSamlConnection(connection as string);\n\n // redirect user back to canonical link if connection was refreshed\n if (refreshed) {\n // Remove the connection from storage before redirecting\n removeSamlConnection();\n window.location.href = samlConnectionApi.getCanonicalLink(connection as string);\n return;\n }\n }\n } catch (e: unknown) {\n // ignore\n }\n\n // We want to stop showing the spinner if the page is not redirecting\n setIsLoading(false);\n })();\n });\n\n if (isLoading) {\n return (\n \n \n \n \n \n );\n }\n\n if (samlErrorCode) {\n const { desc, values } = getErrorMessage(languageCode, samlErrorCode);\n\n return (\n }\n />\n );\n }\n\n return ;\n}\n","import loadable from '@loadable/component';\nimport { FourOhFourError, GlobalThemeProvider } from '@sm/webassets';\nimport { WrenchTheme } from '@wds/styles';\nimport { Route, Switch, useLocation } from 'react-router-dom';\nimport React from 'react';\n\nimport StartAuthTransactionPage from '~app/pages/login/StartAuthTransactionPage';\nimport HandleAuthCallbackPage from '~app/pages/login/HandleAuthCallbackPage';\nimport LoadingPage from './pages/login/LoadingPage/LoadingPage';\nimport UnlinkedPage from './pages/login/UnlinkedPage';\nimport LoginErrorPage from './pages/login/ErrorPage';\nimport SHARED_ROUTES from './pages/sharedRoutes';\nimport TeamRoutes from './pages/team/routes';\n\n// Team join pages go in their own separate chunk\nconst TeamPage = loadable(\n async () => import(/* webpackChunkName: 'loginweb-team-join' */ './pages/team/TeamBasePage'),\n {\n fallback: {}} />,\n }\n);\n\n// Survey share interstitial page goes in a separate chunk, since it's off the main path\nconst SurveyShareInterstitialPage = loadable(\n async () =>\n import(/* webpackChunkName: 'loginweb-survey-share' */ './pages/survey-share/SurveyShareInterstitialPage'),\n {\n fallback: {}} />,\n }\n);\n\nconst App = (): JSX.Element => {\n const { search } = useLocation();\n\n return (\n \n \n \n \n \n\n \n {/*\n We have a single callback path registered with the auth server. It routes to distinct\n login flows based on the query param. Determine which flow we're in.\n - /login/callback?team-join => TeamPage\n - /login/callback => normal login/sign-up\n */}\n \n \n \n \n \n \n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n \n \n );\n};\n\nexport default App;\n","type Messages = { [K: string]: string };\n\nconst DEFAULT_LOCALE = 'en-US';\nconst FALLBACK = {};\n\nexport default async function getLocaleMessages(locale: string): Promise {\n if (locale === DEFAULT_LOCALE) {\n // Default locale will use the default fallback strings\n return FALLBACK;\n }\n try {\n const webassetsTranslationsModule: Messages = await import(\n /* webpackChunkName: \"i18n/webassets/[request]\" */ `@sm/webassets/dist/locales/translated/${locale}`\n );\n const appTranslationsModule: Messages = await import(\n /* webpackChunkName: \"i18n/[request]\" */ `../../locales/translated/${locale}`\n );\n return {\n ...webassetsTranslationsModule,\n ...appTranslationsModule,\n };\n } catch (err: unknown) {\n return FALLBACK;\n }\n}\n","import 'regenerator-runtime/runtime';\nimport 'core-js/stable';\n\nimport { ApolloClient, NormalizedCacheObject } from '@apollo/client';\nimport createBrowserApolloClient from '@sm/apollo-clients/dist/browser';\n\nimport { clientErrorHandler } from '@sm/webassets';\nimport possibleTypes from './helpers/possibleTypes';\nimport { bootstrapSMWeb, createApp, getLocaleMessages, mount } from './utils';\n\nconst { staticData, environ, locale } = bootstrapSMWeb(window);\nconst {\n pageRequestId,\n 'client-config': { appName, appVersion, graphQLUri },\n gql: { gqlCache = {} } = {},\n} = staticData;\n\nconst apolloClient: ApolloClient = createBrowserApolloClient({\n uri: graphQLUri,\n cacheHydration: gqlCache,\n pageRequestId,\n possibleTypes,\n linkOptions: {\n credentials: 'include',\n batchInterval: 30,\n },\n metadata: { appName, appVersion },\n availableLoggedOutPaths: ['/lo-graphql/teamJoin'],\n});\n\ngetLocaleMessages(locale)\n .then(createApp(environ, staticData, apolloClient))\n .then(mount(document))\n .catch(clientErrorHandler.logError);\n","import { initializeClientErrorHandler } from '@sm/webassets';\n\nexport default function bootstrapSMWeb(window: Window): SMConfig {\n const staticData = window.SM?.__LOAD_PAYLOAD_CACHE__;\n if (!staticData) {\n throw new Error('__LOAD_PAYLOAD_CACHE__ not found in window.SM');\n }\n\n initializeClientErrorHandler();\n\n const { environment: environ } = staticData;\n const locale = environ?.slLanguageLocale;\n\n if (!locale) {\n throw new Error('Misconfigured SMEnviron');\n }\n\n return {\n locale,\n environ,\n staticData,\n };\n}\n","import SMEnviron from '@sm/environ';\nimport { L10nProvider } from '@sm/intl';\nimport { LanguageCode } from '@sm/locale';\nimport { ApolloClient, NormalizedCacheObject, ApolloProvider } from '@apollo/client';\nimport { ErrorBoundary, FiveHundredErrorPage, HelmetProvider, StaticProvider } from '@sm/webassets';\nimport React, { ReactElement } from 'react';\nimport { Router } from 'react-router-dom';\nimport App from '../App';\nimport history from './history';\n\nexport default function createApp(\n environ: SMEnviron,\n staticData: { [K in string]: unknown },\n apolloClient: ApolloClient\n): (msgs: { [K: string]: string }) => ReactElement {\n return (localeMessages: { [K: string]: string }) => (\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n","import { ReactElement } from 'react';\nimport { hydrate, render } from 'react-dom';\n\ntype DocumentLike = {\n getElementById(id: string): HTMLElement | null;\n};\n\nexport default function mount(document: DocumentLike): (app: ReactElement) => void {\n const target = document.getElementById('reactApp');\n if (!target) {\n throw new Error('App node not found in document');\n }\n\n return (app: ReactElement) => {\n if (target.innerHTML.trim().length) {\n return hydrate(app, target);\n }\n return render(app, target);\n };\n}\n","// Interfaces for the client side handler code.\n\nimport { UtSourceParams } from '~common/entities/user';\n\n/**\n * Any additional data stored by the client that is associated with\n * a particular login transaction.\n *\n * - `ep`: \"end page\"; where the user is redirected to after auth\n * - `show`: what auth experience the user should first get on LoginApp\n * - `forceAccountCreation`: true to create a SurveyMonkey account instead of showing the\n * \"unlinked 3rd party account\" page when possible.\n */\nexport type AppState = {\n ep?: string;\n show?: SmShow;\n app?: SmApp;\n forceAccountPicker?: boolean;\n forceAccountCreation?: boolean;\n sm?: string;\n sm_allow_create_user?: string;\n authUrl?: string; // The complete original login URL that the client came into the transaction with.\n} & UtSourceParams;\n\n/** Possible values for the `sm.show` query parameter */\nexport enum SmShow {\n SIGNUP = 'sign-up',\n LOGIN = 'log-in',\n FORGOT_PASSWORD = 'forgot-password',\n}\n\n/** Possible values for the `sm.app` query parameter */\nexport enum SmApp {\n CORE = 'core',\n CONTRIBUTE = 'contribute',\n REWARDS = 'rewards',\n MOBILE = 'mobile',\n}\n","import { createURL } from '@sm/utils';\n\n/**\n * Navigates to the given base URL and query.\n */\nexport default function navigateTo(url: string, params?: Record): void {\n window.location.replace(createURL(url, params));\n}\n","import { IdToken } from '@auth0/auth0-spa-js';\n\nconst ID_TOKEN_NAMESPACE = 'unlinkedState';\nconst EP_PARAM_NAMESPACE = 'ep';\nconst SM_PARAM_NAMESPACE = 'sm';\nconst SM_ALLOW_CREATE_PARAM_NAMESPACE = 'sm_allow_create_user';\nconst CONNECTION_NAME_NAMESPACE = 'auth.conn';\n\nfunction stash(namespace: string, value: string): void {\n window.sessionStorage.setItem(namespace, value);\n}\n\nfunction fetch(namespace: string): string | null {\n return window.sessionStorage.getItem(namespace);\n}\n\nfunction remove(namespace: string): void {\n window.sessionStorage.removeItem(namespace);\n}\n\nexport function stashSamlConnection(connection: string): void {\n stash(CONNECTION_NAME_NAMESPACE, connection);\n}\n\nexport function fetchSamlConnection(): string | null {\n return fetch(CONNECTION_NAME_NAMESPACE);\n}\n\nexport function removeSamlConnection(): void {\n remove(CONNECTION_NAME_NAMESPACE);\n}\n\nexport function stashIdToken(idToken: IdToken): void {\n stash(ID_TOKEN_NAMESPACE, JSON.stringify(idToken));\n}\n\nexport function fetchIdToken(): IdToken | null {\n const token = fetch(ID_TOKEN_NAMESPACE);\n if (!token) {\n return null;\n }\n return JSON.parse(token) as IdToken;\n}\n\nexport function removeIdToken(): void {\n remove(ID_TOKEN_NAMESPACE);\n}\n\nexport function stashEp(ep: string): void {\n stash(EP_PARAM_NAMESPACE, ep);\n}\n\nexport function fetchAndRemoveEp(): string | null {\n const ep = fetch(EP_PARAM_NAMESPACE);\n remove(EP_PARAM_NAMESPACE);\n return ep;\n}\n\nexport function stashSm(sm: string): void {\n stash(SM_PARAM_NAMESPACE, sm);\n}\n\nexport function fetchAndRemoveSm(): string | null {\n const sm = fetch(SM_PARAM_NAMESPACE);\n remove(SM_PARAM_NAMESPACE);\n return sm;\n}\n\nexport function stashSmAllow(sm_allow_create_user: string): void {\n stash(SM_ALLOW_CREATE_PARAM_NAMESPACE, sm_allow_create_user);\n}\n\nexport function fetchAndRemoveSmAllow(): string | null {\n const sm_allow_create_user = fetch(SM_ALLOW_CREATE_PARAM_NAMESPACE);\n remove(SM_ALLOW_CREATE_PARAM_NAMESPACE);\n return sm_allow_create_user;\n}\n","import { IdToken } from '@auth0/auth0-spa-js';\nimport { clientErrorHandler } from '@sm/webassets';\nimport { UtSourceParams } from 'src/common/entities/user';\nimport { Auth0Strategy, getStrategyBySub } from '~common/entities/auth0Strategy';\nimport { FormattedError, SamlErrorCode } from '~common/errors/userFacing';\nimport { AppState, SmApp } from '../handlers/handlers';\nimport { getAmplitudeIds, waitForAmplitude } from '~app/utils/amplitudeHelpers';\nimport { AmplitudeSessionInfo } from '~common/helpers/amplitudeSession';\n\n// The types of errors that the server can return from POST /api/v1/sessions\nexport class IdentityAlreadyLinkedError extends Error {}\n\nexport class SamlError extends Error {\n code: SamlErrorCode;\n\n constructor(detail: string, code: SamlErrorCode) {\n super(detail);\n this.code = code;\n }\n}\n\nexport class IdentityNotLinkedError extends Error {\n /**\n * Whether the email asserted by the social identity is in use by an existing account\n */\n emailInUse: boolean;\n\n constructor(emailInUse = false) {\n super();\n this.emailInUse = emailInUse;\n }\n}\nexport class InvalidJWTError extends Error {}\nexport class InvalidInviteError extends Error {}\n\nexport enum SessionResult {\n /** Could not create a session because no account was linked. User intervention is needed. */\n UNLINKED = 1,\n\n /** Could not create a session because of issue detected with the JWT (with no further detail, intentionally) */\n INVALID_JWT = 2,\n\n /** Existing user successfully logged in */\n LOGGED_IN = 3,\n\n /** New user created and then logged in */\n CREATED = 4,\n\n /** User login via SSO */\n SSO_LOGIN = 5,\n}\n\n/** Which type of account we'd prefer to log into */\nexport type AccountTypePreference = 'contribute' | 'rewards' | undefined;\n\n/** Return value from sucessful POST /sessions call */\ntype SessionResponseBody = {\n user: {\n id: string;\n };\n redirectUrl?: string;\n};\n\nfunction toPref(smApp?: SmApp): AccountTypePreference {\n switch (smApp) {\n case undefined:\n case SmApp.CORE:\n case SmApp.MOBILE:\n return undefined;\n case SmApp.CONTRIBUTE:\n return 'contribute';\n case SmApp.REWARDS:\n return 'rewards';\n }\n}\n\nexport class SessionClient {\n readonly endpointUrl = '/login/api/v1/sessions';\n\n private static getSignupParams(appState: AppState): Pick {\n const { ut_source, ut_source2 } = appState;\n return { ut_source, ut_source2 };\n }\n\n /**\n * @returns Whether we should create a SurveyMonkey account linked to the user's token subject\n * without prompting the user\n */\n private static shouldCreateAccount(\n appState: AppState,\n claims: IdToken,\n notLinkedError: IdentityNotLinkedError\n ): boolean {\n // Create an account when the user authenticated via Auth0 strategy (i.e. email+password).\n // This is the typical case when a user has just created an Auth0 email identity.\n if (getStrategyBySub(claims.sub) === Auth0Strategy.Auth0) {\n return true;\n }\n\n // Create an account if the 'force' param is set, and the email isn't already in use\n if (appState.forceAccountCreation && !notLinkedError.emailInUse) {\n return true;\n }\n\n return false;\n }\n\n private static handleError(body: { errors: FormattedError[] }): never {\n const {\n errors: [serverError],\n } = body;\n\n if (Object.values(SamlErrorCode).includes(serverError.code)) {\n throw new SamlError(serverError.detail, serverError.code as unknown as SamlErrorCode);\n }\n\n switch (serverError.code) {\n case 'identity_already_linked':\n throw new IdentityAlreadyLinkedError();\n case 'identity_not_linked':\n throw new IdentityNotLinkedError(serverError.extra === 'email_in_use_by_password_account');\n case 'invalid_invite':\n throw new InvalidInviteError();\n case 'unauthorized':\n // The remote UserService rejected the JWT\n throw new InvalidJWTError();\n case 'invalid_request':\n if (\n serverError.source &&\n serverError.source.location === 'body' &&\n serverError.source.pointer === '.id_token'\n ) {\n // Shallow validation failed (probably because the JWT expired)\n throw new InvalidJWTError();\n }\n break;\n default:\n break; // will throw generic error below\n }\n\n const error = new Error('Failed to create session');\n clientErrorHandler.logError(error);\n throw error;\n }\n\n /**\n * Authenticate using the identity token, by first attempting to login and creating a new SM user\n * if necessary.\n *\n * @throws `IdentityAlreadyLinkedError` if the identity is already linked to an SM user.\n * @throws Generic error on other failure.\n * @returns A SessionResult and optionally a detailed error field\n */\n async createByLogin({\n claims,\n appState,\n smAllowCreateUser,\n }: {\n claims: IdToken;\n appState: AppState;\n smAllowCreateUser?: string;\n }): Promise<{ result: SessionResult; error?: IdentityNotLinkedError; redirectUrl?: string }> {\n const idToken = claims.__raw;\n\n // Try to login\n let notLinkedError: IdentityNotLinkedError | undefined;\n try {\n const response = await this.postSessions({\n idToken,\n action: 'login',\n preference: toPref(appState.app),\n authUrl: appState.authUrl,\n });\n\n if (response.redirectUrl) {\n return { result: SessionResult.SSO_LOGIN, redirectUrl: response.redirectUrl };\n }\n\n return { result: SessionResult.LOGGED_IN };\n } catch (e: unknown) {\n if (!(e instanceof IdentityNotLinkedError)) {\n throw e;\n }\n notLinkedError = e;\n }\n\n // Identity is not linked to an SM account. Check if we should create one.\n if (SessionClient.shouldCreateAccount(appState, claims, notLinkedError)) {\n const result = await this.createBySignup({ claims, appState, smAllowCreateUser });\n return { result };\n }\n\n // Identity not linked and we couldn't create an account for them. Just return unlinked, and\n // let the user decide how to proceed.\n return { result: SessionResult.UNLINKED, error: notLinkedError };\n }\n\n /**\n * Authenticate using the identity token, by creating a new SM user on the fly.\n *\n * @param claims The ID token\n * @param appState\n * @param inviteToken Optional invite token if user is being created in the context of\n * a team invite workflow\n *\n * @throws `IdentityAlreadyLinkedError` if the identity is already linked to an SM user.\n * @throws Generic error on other failure.\n */\n async createBySignup({\n claims,\n appState,\n inviteToken = undefined,\n smAllowCreateUser = undefined,\n }: {\n claims: IdToken;\n appState: AppState;\n inviteToken?: string;\n smAllowCreateUser?: string;\n }): Promise {\n const idToken = claims.__raw;\n\n try {\n await this.postSessions({\n idToken,\n action: 'signup',\n signupParams: SessionClient.getSignupParams(appState),\n inviteToken,\n smAllowCreateUser,\n authUrl: appState.authUrl,\n });\n return SessionResult.CREATED;\n } catch (e: unknown) {\n if (e instanceof InvalidJWTError) {\n return SessionResult.INVALID_JWT;\n }\n throw e;\n }\n }\n\n /**\n * Authenticate an existing SM user using the identity token.\n *\n * @param idToken\n * @throws IdentityNotLinkedError\n * @throws InvalidJWTError\n */\n async login(idToken: IdToken): Promise {\n return this.postSessions({ action: 'login', idToken: idToken.__raw });\n }\n\n /**\n * Switch to a linked account by the active session.\n *\n * @param targetUserId Id of the linked user account being switched to\n */\n async switch(targetUserId: string): Promise {\n return this.postSessions({ action: 'switch', targetUserId });\n }\n\n private async postSessions(\n opts:\n | {\n action: 'login';\n idToken: string;\n preference?: AccountTypePreference;\n authUrl?: string;\n }\n | {\n action: 'signup';\n idToken: string;\n signupParams: UtSourceParams;\n inviteToken?: string;\n smAllowCreateUser?: string;\n authUrl?: string;\n }\n | { action: 'switch'; targetUserId: string }\n ): Promise {\n let ampIds: AmplitudeSessionInfo = {};\n if (opts.action === 'login' || opts.action === 'signup') {\n await waitForAmplitude();\n ampIds = getAmplitudeIds();\n }\n\n const resp = await fetch(this.endpointUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n action: opts.action,\n id_token: 'idToken' in opts ? opts.idToken : undefined,\n preference: opts.action === 'login' ? opts.preference : undefined,\n signup_params: opts.action === 'signup' ? opts.signupParams : undefined,\n invite_token: opts.action === 'signup' ? opts.inviteToken : undefined,\n sm_allow_create_user: opts.action === 'signup' ? opts.smAllowCreateUser : undefined,\n target_user_id: opts.action === 'switch' ? opts.targetUserId : undefined,\n auth_url: opts.action === 'login' || opts.action === 'signup' ? opts.authUrl : undefined,\n sm_amp_sid: ampIds.sessionId ?? undefined,\n sm_amp_did: ampIds.deviceId ?? undefined,\n }),\n });\n\n if (resp.status === 200) {\n return (await resp.json()) as SessionResponseBody;\n }\n\n return SessionClient.handleError(await resp.json());\n }\n}\n\nexport default (): SessionClient => new SessionClient();\n","import { IdToken } from '@auth0/auth0-spa-js';\nimport { fetchIdToken } from '../../../helpers/sessionStorage';\nimport { SocialName } from './types';\n\n/**\n * Given an id token from a social login, returns the display name of the social IDP.\n *\n * @param idToken\n * @returns The social IDP name. The returned values are brand/company names, so they don't\n * need to be translated.\n */\nexport function getSocialName(idToken: IdToken): SocialName {\n // loose type-check that idToken _is_ an IdToken\n if (typeof idToken.sub === 'undefined') {\n throw new Error('idToken not in expected IdToken shape');\n }\n\n const { sub } = idToken;\n\n // verify sub one of expected social providers\n let socialName: SocialName;\n switch (sub.split('|')[0]) {\n case 'google-oauth2':\n socialName = 'Google';\n break;\n case 'facebook':\n socialName = 'Facebook';\n break;\n case 'windowslive':\n socialName = 'Microsoft';\n break;\n case 'linkedin':\n socialName = 'LinkedIn';\n break;\n case 'apple':\n socialName = 'Apple';\n break;\n default:\n throw new Error('Unidentifiable third party social provider');\n }\n return socialName;\n}\n\nexport default function getAndValidateIdToken(): { idToken: IdToken; socialName: SocialName } {\n // verify token JSON-serializable and of expected shape\n let idToken: IdToken | null;\n try {\n idToken = fetchIdToken();\n } catch (error: unknown) {\n throw new Error('idToken not in expected JSON-serializable format');\n }\n if (idToken === null) {\n throw new Error('No id token present in app state');\n }\n\n const socialName = getSocialName(idToken);\n\n return { idToken, socialName };\n}\n","// Routes shared by the login and team pages\n\nconst SHARED_ROUTES = Object.freeze({\n /** Our callback URL that is allow-listed on the auth server */\n CALLBACK: '/login/callback',\n});\n\nexport default SHARED_ROUTES;\n","const ROUTES = Object.freeze({\n LANDING: '/login/team/join/:inviteToken',\n CREATE: '/login/team/join/:inviteToken/create',\n CONVERT: '/login/team/join/:inviteToken/convert',\n\n REASSIGN_LANDING: '/login/team/reassign/:inviteToken',\n REASSIGN_CONFIRM: '/login/team/reassign/:inviteToken/confirm',\n});\n\nexport default ROUTES;\n","/* Helper functions for parsing Amplitude session. These are consumed by BOTH client and server code */\n\nexport type AmplitudeSessionInfo = {\n deviceId?: string;\n sessionId?: number;\n};\n\nfunction atob(input: string): string {\n // This works in the browser or Node.js\n return typeof window !== 'undefined' ? window.atob(input) : Buffer.from(input, 'base64').toString('latin1');\n}\n\nexport function getAmplitudeStorageKey(amplitudeToken: string): string {\n // the amplitude SDK names its storage key `AMP_`\n return `AMP_${amplitudeToken.substring(0, 10)}`;\n}\n\n/**\n * Parse Amplitude session from a string\n * @param json A string containing JSON data\n */\nexport function parseAmplitudeSession(json: string | undefined | null): AmplitudeSessionInfo {\n if (typeof json !== 'string') {\n return {};\n }\n\n try {\n const parsed = JSON.parse(json);\n return {\n deviceId: parsed.deviceId,\n sessionId: parsed.sessionId,\n };\n } catch (e: unknown) {\n // give up\n return {};\n }\n}\n\n/**\n * Parse Amplitude session from cookie\n *\n * @param cookies Object containing cookies as name-value pairs\n */\nexport default function parseAmplitudeCookie(\n cookies: Record,\n amplitudeToken: string\n): AmplitudeSessionInfo {\n const storageKey = getAmplitudeStorageKey(amplitudeToken);\n\n let cookieData = cookies[storageKey];\n if (!cookieData) {\n return {};\n }\n\n // Normalize it before parsing\n cookieData = decodeURIComponent(atob(cookieData));\n\n return parseAmplitudeSession(cookieData);\n}\n","import { MetricsTracker, USER_EVENTS } from '@sm/metrics';\nimport { parse as parseCookie } from 'cookie';\nimport parseAmplitudeCookie, {\n AmplitudeSessionInfo,\n getAmplitudeStorageKey,\n parseAmplitudeSession,\n} from '~common/helpers/amplitudeSession';\n\n/* Client-side Amplitude helper functions */\n\n// How long we'll wait for Amplitude SDK to initialize before giving up\nconst amplitudeInitTimeoutMs = 150;\n\n// Time between checks\nconst pollIntervalMs = 50;\n\n/** Parse Amplitude session from local storage */\nfunction parseAmplitudeStorage(s: Storage, amplitudeToken: string): AmplitudeSessionInfo {\n const storageKey = getAmplitudeStorageKey(amplitudeToken);\n const data = s.getItem(storageKey);\n return parseAmplitudeSession(data);\n}\n\n/**\n * Extracts the device and session IDs from the Amplitude cookie\n *\n * @returns An object containing the extracted device/session IDs\n */\nexport function getAmplitudeIds(): AmplitudeSessionInfo {\n const amplitudeToken = MetricsTracker?.getConfig()?.amplitudeToken;\n\n if (!amplitudeToken) {\n return {};\n }\n\n // Check for cookie storage\n const cookieTokens = parseCookie(document.cookie);\n const fromCookie = parseAmplitudeCookie(cookieTokens, amplitudeToken);\n\n if (fromCookie.deviceId && fromCookie.sessionId) {\n // Use the cookie values\n return fromCookie;\n }\n\n // Cookie not found, try localStorage fallback\n return parseAmplitudeStorage(window.localStorage, amplitudeToken);\n}\n\n/**\n * Polls a predicate function until it returns true or timeout elapses.\n *\n * @resolves To `'ok'` if condition returned true, or `'timeout'` if timeout elapsed\n * @rejects On runtime error in `condition()`\n */\nasync function waitFor(predicate: () => boolean): Promise<'ok' | 'timeout'> {\n return new Promise((resolve, reject) => {\n const timeoutId = setTimeout(() => resolve('timeout'), amplitudeInitTimeoutMs);\n\n const check = (): void => {\n try {\n if (predicate()) {\n clearTimeout(timeoutId);\n resolve('ok');\n } else {\n setTimeout(check, pollIntervalMs);\n }\n } catch (e: unknown) {\n const err = e as Error;\n clearTimeout(timeoutId);\n reject(err);\n }\n };\n\n setTimeout(check, 0); // start on next tick\n });\n}\n\n/**\n * This function forces the Amplitude SDK to start up, and returns once it has written the\n * session ID and device ID to storage. If we can't find the SID/DID in a reasonable time,\n * give up and return so we don't block the user's transaction.\n *\n * ⚠️ NOTE: this won't work in all cases: in particular, users who haven't yet consented to functional\n * cookies will not get an Amp session. But given the current @sm/metrics design this is the best\n * we can do.\n */\nexport async function waitForAmplitude(): Promise {\n // Track a useless event, this triggers initialization of the Amplitude SDK as a side effect\n MetricsTracker.track({\n name: USER_EVENTS.VIRTUAL_PAGE_VIEW,\n data: {\n amplitudeEvent: 'login init',\n },\n });\n\n // Poll until we find a session or our timeout elapses\n await waitFor(() => !!getAmplitudeIds().sessionId);\n}\n","import { createBrowserHistory } from 'history';\n\nexport default createBrowserHistory();\n","import asEnum from '~common/helpers/asEnum';\n\n/**\n * An Auth0 login strategy. The strategy appears in Auth0-issued ID Tokens as the leftmost\n * segment of the `sub` claim.\n *\n * Example sub claims:\n * - `auth0|deadbeef`\n * - `facebook|111222333444`\n * - `samlp|bigcorp|user@email.com`\n */\nexport enum Auth0Strategy {\n Apple = 'apple',\n Auth0 = 'auth0',\n Facebook = 'facebook',\n Google = 'google-oauth2',\n LinkedIn = 'linkedin',\n Microsoft = 'windowslive',\n Saml = 'samlp',\n}\n\nexport function isSocial(s: Auth0Strategy): boolean {\n switch (s) {\n case Auth0Strategy.Apple:\n case Auth0Strategy.Facebook:\n case Auth0Strategy.Google:\n case Auth0Strategy.LinkedIn:\n case Auth0Strategy.Microsoft:\n return true;\n default:\n return false;\n }\n}\n\n/** Gets the Auth0 login strategy from a `sub` claim */\nexport function getStrategyBySub(sub: string): Auth0Strategy {\n const [strategyPart] = sub.split('|');\n return asEnum(Auth0Strategy, strategyPart);\n}\n","/** The names of known \"sm.\" query params that can be added to the auth URL */\nexport enum SmParams {\n SM_APP = 'sm.app',\n SM_COUNTRY = 'sm.country',\n SM_EMAIL = 'sm.email',\n SM_FORCE_ACCOUNT_PICKER = 'sm.force_account_picker',\n SM_INVITE_TOKEN = 'sm.invite_token',\n SM_LOCALE = 'sm.locale',\n SM_SUBDOMAIN = 'sm.subdomain',\n SM_ORIGIN = 'sm.origin',\n SM_SHOW = 'sm.show',\n // amplitude device ID\n SM_AMP_DID = 'sm.amp_did',\n // amplitude session ID\n SM_AMP_SID = 'sm.amp_sid',\n}\n\n/** Possible values for the sm.origin param */\nexport enum SmOrigin {\n SURVEYENDPAGE = 'surveyendpage',\n}\n\n/** Inbound query params that we understand */\nexport enum QueryParams {\n CONNECTION = 'connection',\n EMAIL_IN_USE = 'email_in_use',\n ERROR = 'error',\n ERROR_DESCRIPTION = 'error_description',\n EP = 'ep',\n SM = 'sm',\n SM_ALLOW_CREATE_USER = 'sm_allow_create_user',\n SM_APP = 'sm.app',\n SM_LOCALE = 'sm.locale',\n SM_SHOW = 'sm.show',\n UT_SOURCE = 'ut_source',\n UT_SOURCE2 = 'ut_source2',\n}\n\nexport default SmParams;\n","/* Error types that may be observed by the client */\n\nexport enum SamlErrorCode {\n // Usersvc codes\n DOMAIN_LOCKED = 'domain_locked',\n EMAIL_ROLE_BASED = 'email_role_based',\n GROUP_DOWNGRADED = 'group_downgraded',\n GROUP_HAS_NO_OWNER = 'group_has_no_owner',\n GROUP_NOT_FOUND = 'group_not_found',\n GROUP_NOT_FOUND_BY_CANONICAL_NAME = 'group_not_found_by_canonical_name',\n GROUP_NOT_FOUND_BY_ISSUER = 'group_not_found_by_issuer',\n GROUP_NOT_SSO_ENABLED = 'group_not_sso_enabled',\n GROUP_OWNER_IS_NOT_ENTERPRISE = 'group_owner_is_not_enterprise',\n INVALID_EMAIL = 'invalid_email',\n INVALID_EMAIL_IN_USER_ATTRIBUTES = 'invalid_email_in_user_attributes',\n NOT_AFTER_FAILURE = 'not_after_failure',\n NOT_BEFORE_FAILURE = 'not_before_failure',\n NO_NAME_ID_FOUND = 'no_nameID_found',\n RESPONDENT_ONLY = 'respondent_only',\n REQUEST_DENIED = 'request_denied',\n SAML_RESPONSE_ALREADY_SEEN = 'saml_response_already_seen',\n SSO_NOT_ENABLED = 'sso_not_enabled',\n USER_PENDING_DELETION = 'user_pending_deletion',\n USER_IS_PENDING_DELETION = 'user_is_pending_deletion',\n USER_PENDING_REASSIGNMENT = 'user_pending_reassignment',\n USER_IS_PENDING_REASSIGNMENT = 'user_is_pending_reassignment',\n X509_CANNOT_VERIFY = 'x509_cannot_verify',\n X509_MISMATCH = 'x509_mismatch',\n\n // Non Usersvc codes\n CONNECTION_DISABLED = 'connection_disabled',\n IDP_INITIATED_NOT_ENABLED = 'idp_init_not_enabled',\n}\n\nexport type ErrorCode =\n | 'accept_forbidden'\n | 'content_type_not_acceptable'\n | 'data_center_mismatch'\n | 'identity_already_linked'\n | 'identity_not_linked'\n | 'internal_error'\n | 'invalid_invite'\n | 'invalid_request'\n | 'method_not_allowed'\n | 'not_enough_seats'\n | 'profile'\n | 'profile_not_found'\n | 'multiple_profiles_found'\n | 'rate_limit_exceeded'\n | 'resource_not_found'\n | 'temporarily_unavailable'\n | 'unauthorized'\n | 'user_already_in_group'\n | 'user_is_hipaa';\n\ntype ErrorSource =\n | {\n location: 'body';\n pointer: string;\n }\n | {\n location: 'headers';\n header: string;\n }\n | {\n location: 'path';\n }\n | {\n location: 'query';\n parameter: string;\n };\n\nexport type FormattedError = {\n code: ErrorCode | SamlErrorCode;\n detail: string;\n source?: ErrorSource;\n retryAfter?: string;\n isEmailInUse?: boolean;\n extra?: string;\n};\n","/**\n * @returns a string value if it belongs to the enum.\n * @throws if the value is not a member of the enum.\n */\nexport default function asEnum(\n enumObject: { [K in T]: TEnumValue },\n value: unknown\n): TEnumValue {\n const isOk = (v: unknown): v is TEnumValue => Object.values(enumObject).includes(value);\n\n if (isOk(value)) {\n return value;\n }\n\n throw new Error(`Value \"${value}\" is not a member of enum [${Object.values(enumObject).join(',')}]`);\n}\n","module.exports = jsdom;"],"names":["map","webpackAsyncContext","req","__webpack_require__","o","Promise","resolve","then","e","Error","code","ids","id","t","keys","Object","module","exports","useStyles","createUseStyles","theme","mediaQueryMinScreenSm","breakpoints","sm","ctaContainer","marginBottom","spacing","width","spacer","borderRight","palette","border","main","CTASplitter","ctas","prompt","swapOrder","_useStyles","promptText","React","Box","mb","Typography","align","variant","justify","length","Responsive","minWidth","matches","assign","mt","mx","flexJustify","display","cta","caption","index","Fragment","key","className","flexDirection","SurveyQuestion","BaseQuestionHeader","PaginatedList","AnalysisStandardViewFilterRule","AnalysisStandardViewCompareRule","SurveyRespondentAnswer","SurveyQuestionOption","Project","ProjectVariableConfiguration","ProjectVariableAnswer","ConceptTestingStimulus","AttributeQuestion","QuestionResponseSummary","MultipleComparisonQuestion","CustomQuestion","ProjectEntity","AudienceTargetingCriteria","AudienceCriteriaSelection","CustomQuestionResponseSummary","ImageAsset","TeamAsset","Asset","LibraryAsset","WelcomeFlowQuestion","SurveyQuestionTemplate","QuestionVariableAnswerData","SurveyQuestionTemplateOption","getSubdomain","subdomain","host","window","location","hostname","parts","split","isUKDomain","endsWith","validHost","validEUHost","isEUSubdomain","_slicedToArray","getQueryParam","name","URLSearchParams","search","get","undefined","hasQueryParam","has","getRedirectUri","ep","includes","getSmShow","showParam","QueryParams","pathname","SmShow","getSmApp","value","asEnum","SmApp","getSmForceAccontPicker","SmParams","getForceAccountCreation","replace","connection","strategy","Auth0Strategy","isSocial","async","replaceUrl","url","login","auth0Config","language","country","smAllowCreateUserCookieVal","ssoCanonicalName","_client$loginWithRedi","_amplitudeIds$deviceI","_amplitudeIds$session","domain","clientId","now","client","Auth0Client","authorizationParams","redirect_uri","nowProvider","smAllowCreateUser","queryObj","getAllQueryParams","params","obj","create","forEach","getConnection","_ref","_getQueryParam","stashSamlConnection","stashEp","stashSm","stashSmAllow","waitForAmplitude","appState","buildAppState","show","app","forceAccountPicker","ut_source","ut_source2","authUrl","toString","forceAccountCreation","lang","amplitudeIds","getAmplitudeIds","loginWithRedirect","openUrl","_objectSpread","deviceId","sessionId","catch","console","error","BaseLoadingPage","children","pageId","isInitialRender","useInitialRender","useRef","useEffect","current","_useContext","useContext","StaticContext","user","environment","clientConfig","countryCode","gtmId","loggingAPIPath","dataAnalyticsAPIPath","amplitudeToken","MetricsTracker","legacyWeb","AbstractHandler","constructor","nextHandler","setNext","handler","this","handle","errorDescription","ConnectionDisabledHandler","SamlErrorCode","super","IDPInitiatedHandler","InvalidCertHandler","startsWith","InvalidThumprintHandler","LoadingPage","_useState","useState","setError","handleError","validState","message","auth0Error","errorReason","errorDesc","parse","idpInitiated","invalidCert","invalidThumbprint","connectionDisabled","decodeURIComponent","SamlError","_auth0Error$code","_auth0Error","navigateTo","result","isPromise","v","ProgressCircle","continuous","useAuth0Config","_useContext$clientCo","auth0","StartAuthTransactionPage","_useContext$environme","languageCode","useParams","handleRedirectCallback","claims","getIdTokenClaims","clientErrorHandler","cleanObject","target","copy","entries","displayName","RespondentSSOClient","createRespondentSSOTokenendpointUrl","idToken","resp","fetch","method","headers","body","JSON","stringify","id_token","__raw","status","json","auth0Callback","config","sm_allow_create_user","_await$handleRedirect","_await$SessionClient$","SessionClient","createByLogin","redirectUrl","SessionResult","handleSsoSessionResult","handleLoggedInOrCreatedSessionResult","joined","force_account_picker","handleUnlinkedSessionResult","utSource","utSource2","emailInUse","stashIdToken","email_in_use","callback","isLegacySso","_fetchAndRemoveEp","_fetchAndRemoveSm","fetchAndRemoveEp","fetchAndRemoveSm","_respondentSSOData$re","respondentSSOData","createRespondentSSOToken","_fetchAndRemoveSmAllo","fetchAndRemoveSmAllow","HandleAuthCallbackPage","unlinkedWindow","maxWidth","backgroundColor","background","UnlinkedWindow","addOnTop","CaptiveWindow","logoPosition","buttonOverride","padding","UnlinkedButtonOption","isDisabled","showSpinner","titleText","onClick","href","buttonTestId","Button","stretched","color","size","disabled","defaultProps","COPY","defineMessages","unlinkedPageErrorBanner","defaultMessage","description","unlinkedPageJwtErrorBanner","UnlinkedErrorBanner","JWTError","Banner","showIcon","T","desc","html","unlinkedPageHeader","unlinkedEmailInUseHeader","headerContainer","paddingTop","paddingBottom","header","fontSize","type","pageTitle","UnlinkedHeader","socialName","headerText","values","PageHeader","centered","title","unlinkedPageSignupButtonTitle","unlinkedPageSignupButtonContent","unlinkedPageLoginButtonTitle","unlinkedPageLoginButtonEmailInUseTitle","unlinkedPageLoginButtonContent","unlinkedPageEmailInUseMessage","unlinkedPageLoginButton","unlinkedPageOptionsHeaderNoEmail","emailInUseButtonContainer","UnlinkedPageContent","_getAndValidateIdToke","getAndValidateIdToken","userEmail","email","_useState2","signupState","setSignupState","_useState3","_useState4","signupJWTError","setSignupJWTError","_useState5","_useState6","loginState","setLoginState","attemptLogin","areButtonsDisabled","loginButton","label","createURL","EmailInUse","CreateOrLogin","signupCTA","createBySignup","removeIdToken","attemptSignUp","loginCTA","UnlinkedPage","isEUDC","locale","BasePage","includeHeader","showSignupButton","includeFooter","excludeMenuItems","Helmet","ERROR_CODE","ERROR_TITLE","DEFAULT","GROUP_DOWNGRADED","GROUP_NOT_FOUND","NOT_AFTER_FAILURE","NO_NAME_ID_FOUND","RESPONDENT","SSO_NOT_ENABLED","USER_PENDING_DELETION","USER_PENDING_REASSIGNMENT","X509_CANNOT_VERIFY","ErrorPage","_React$useState","_React$useState2","isLoading","setIsLoading","pageRequestId","samlErrorCode","getSamlErrorCode","fetchSamlConnection","shouldRefreshSamlConnection","samlConnectionApi","removeSamlConnection","_getErrorMessage","getErrorMessage","reason","contactUsLink","getHelpCenterLink","path","contactUs","FiveHundredErrorPage","requestId","openingMessage","errorTitle","errorMessage","TeamPage","loadable","fallback","SurveyShareInterstitialPage","App","useLocation","GlobalThemeProvider","WrenchTheme","Switch","Route","exact","SHARED_ROUTES","LoginErrorPage","TeamRoutes","FourOhFourError","FALLBACK","_bootstrapSMWeb","bootstrapSMWeb","_window$SM","staticData","SM","__LOAD_PAYLOAD_CACHE__","initializeClientErrorHandler","environ","slLanguageLocale","_staticData$clientCo","appName","appVersion","graphQLUri","_staticData$gql","gql","_staticData$gql2$gqlC","gqlCache","apolloClient","createBrowserApolloClient","uri","cacheHydration","possibleTypes","linkOptions","credentials","batchInterval","metadata","availableLoggedOutPaths","getLocaleMessages","webassetsTranslationsModule","appTranslationsModule","err","createApp","localeMessages","ErrorBoundary","FallbackComponent","HelmetProvider","ApolloProvider","Router","history","StaticProvider","L10nProvider","localeCode","mount","document","getElementById","innerHTML","trim","hydrate","render","ID_TOKEN_NAMESPACE","EP_PARAM_NAMESPACE","SM_PARAM_NAMESPACE","SM_ALLOW_CREATE_PARAM_NAMESPACE","CONNECTION_NAME_NAMESPACE","stash","namespace","sessionStorage","setItem","getItem","remove","removeItem","fetchIdToken","token","IdentityAlreadyLinkedError","detail","IdentityNotLinkedError","InvalidJWTError","InvalidInviteError","toPref","smApp","endpointUrl","notLinkedError","getStrategyBySub","sub","serverError","errors","extra","source","pointer","response","postSessions","action","preference","SSO_LOGIN","LOGGED_IN","shouldCreateAccount","UNLINKED","inviteToken","signupParams","getSignupParams","CREATED","INVALID_JWT","targetUserId","opts","_ampIds$sessionId","_ampIds$deviceId","ampIds","signup_params","invite_token","target_user_id","auth_url","sm_amp_sid","sm_amp_did","getSocialName","freeze","CALLBACK","LANDING","CREATE","CONVERT","REASSIGN_LANDING","REASSIGN_CONFIRM","getAmplitudeStorageKey","substring","parseAmplitudeSession","parsed","parseAmplitudeCookie","cookies","cookieData","atob","input","Buffer","from","_MetricsTracker$getCo","fromCookie","parseCookie","cookie","parseAmplitudeStorage","s","storageKey","localStorage","USER_EVENTS","data","amplitudeEvent","waitFor","predicate","reject","timeoutId","setTimeout","check","clearTimeout","createBrowserHistory","Apple","Facebook","Google","LinkedIn","Microsoft","_sub$split","strategyPart","SmOrigin","enumObject","join","jsdom"],"sourceRoot":""}