{\r\n\t\tsetLoading(true);\r\n\t\tlet result: AuthResult;\r\n\t\ttry {\r\n\t\t\tresult = await AuthApi.login(rsp);\r\n\t\t} catch (ex) {\r\n\t\t\tconsole.error('error signing in');\r\n\t\t\tsetError(true);\r\n\t\t} finally {\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t\tif (result.Authenticated) {\r\n\t\t\tsetLoggedIn(true);\r\n\t\t\tsetName(result.First);\r\n\t\t\tsetPicture(result.Picture);\r\n\t\t\twindow.dispatchEvent(new CustomEvent(Events.UserAuthEventName));\r\n\t\t} else {\r\n\t\t\tconsole.warn('Unable to log in user', result);\r\n\t\t\tsetError(true);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction isManuallyLoggedOut(): boolean {\r\n\t\treturn sessionStorage.getItem(MANUAL_LOG_OUT_KEY) === MANUAL_LOG_OUT_TRUE_VALUE;\r\n\t}\r\n\r\n\tfunction prompt(redirectOnFail?: boolean): void {\r\n\r\n\t\tif (isManuallyLoggedOut()) {\r\n\t\t\tconsole.debug('skipping prompt because manually logged out');\r\n\t\t\tif (redirectOnFail) {\r\n\t\t\t\tredirectToAccount();\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfunction promptCallback(notification: google.accounts.Notification): void {\r\n\t\t\tconst momentType = notification.getMomentType();\r\n\t\t\tswitch (momentType) {\r\n\t\t\t\tcase 'dismissed':\r\n\t\t\t\t\tconst dismissedReason = notification.getDismissedReason();\r\n\t\t\t\t\tif (dismissedReason === 'credential_returned') {\r\n\t\t\t\t\t\tconsole.debug('Google one tap sign in dismissed event', dismissedReason);\r\n\t\t\t\t\t\treturn; // SUCCESS\r\n\t\t\t\t\t}\r\n\t\t\t\t\tconsole.debug('Google one tap dismissed. Reason:', dismissedReason);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'display':\r\n\t\t\t\t\tif (notification.isNotDisplayed()) {\r\n\t\t\t\t\t\tconst notDisplayedReason = notification.getNotDisplayedReason();\r\n\t\t\t\t\t\tconsole.debug('Google one tap not displayed. Reason:', notDisplayedReason);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tconsole.debug('Google one tap sign in display event in progress');\r\n\t\t\t\t\t\treturn; // IN PROGRESS\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'skipped':\r\n\t\t\t\t\tconst skippedReason = notification.getSkippedReason();\r\n\t\t\t\t\tconsole.debug('Google one tap skipped. Reason:', skippedReason);;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tassertUnreachable(momentType);\r\n\t\t\t}\r\n\r\n\t\t\t// we will only reach here if we failed to sign in.\r\n\t\t\tif (redirectOnFail) {\r\n\t\t\t\tredirectToAccount();\r\n\t\t\t}\r\n\t\t}\r\n\t\tgoogle.accounts.id.prompt(promptCallback);\r\n\t}\r\n\r\n\tfunction loginButtonClicked() {\r\n\t\tsessionStorage.setItem(MANUAL_LOG_OUT_KEY, MANUAL_LOG_OUT_FALSE_VALUE)\r\n\t\tsetLoading(true);\r\n\t\tprompt(true);\r\n\t}\r\n\r\n\tif (error) {\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t{String.fromCharCode(57344)}Login Error\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\tif (loading) {\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\tLogging you in...\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n\r\n\tif (loggedIn) {\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\tAccount\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\treturn (\r\n\t\t\r\n\t);\r\n\r\n};\r\n\r\nexport default AuthenticatorButton;\r\n","import { GenericApi } from './GenericApi';\r\nimport { AuthResult } from './types/Auth';\r\n\r\nexport module AuthApi {\r\n\tconst BASE_INFO_URL: string = '/umbraco/surface/auth';\r\n\r\n\texport async function login(loginResponse: google.accounts.CredentialResponse): Promise {\r\n\t\treturn await GenericApi.postRequest(`${BASE_INFO_URL}/login/`, loginResponse);\r\n\t}\r\n\r\n\texport async function logout(): Promise {\r\n\t\tawait GenericApi.fireAndForget(`/logout/`);\r\n\t}\r\n}\r\n","/** The minimum query length before getting autocomplete results. */\r\nexport const StaticMapsApiKey: string = 'AIzaSyAUvq6JL2desvPjQXiJm85ZSR-PMoZBaYY';\r\nexport const GoogleYoloClientId: string = '234402634311-gea90hhtrpd8hf6r1rtdi4dmpkjdoq68.apps.googleusercontent.com';\r\n","export module GenericApi {\r\n\r\n\tconst MergeDefaultGet: (options: RequestInit) => RequestInit = (options: RequestInit) => ({\r\n\t\tmethod: 'GET',\r\n\t\tcredentials: 'same-origin',\r\n\t\t...options\r\n\t});\r\n\r\n\texport async function fireAndForget(url: string, options: RequestInit = {}): Promise {\r\n\t\tconst init: RequestInit = MergeDefaultGet(options);\r\n\t\tconst request: Request = new Request(url, init);\r\n\t\tconst response: Response = await fetch(request);\r\n\t\tif (response.status === 200) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\texport async function getRequest(url: string, options: RequestInit = {}): Promise {\r\n\t\tconst init: RequestInit = MergeDefaultGet(options);\r\n\r\n\t\treturn await genericRequest(url, init);\r\n\t}\r\n\r\n\texport async function postRequest(url: string, body: TBody, options: RequestInit = {}): Promise {\r\n\t\tconst init: RequestInit = {\r\n\t\t\tmethod: 'POST',\r\n\t\t\tcredentials: 'same-origin',\r\n\t\t\tbody: JSON.stringify(body),\r\n\t\t\t...options\r\n\t\t};\r\n\r\n\t\treturn await genericRequest(url, init);\r\n\t}\r\n\r\n\texport async function postFormData(url: string, body: FormData, options: RequestInit = {}): Promise {\r\n\t\tconst init: RequestInit = {\r\n\t\t\tmethod: 'POST',\r\n\t\t\tcredentials: 'same-origin',\r\n\t\t\tbody,\r\n\t\t\t...options\r\n\t\t};\r\n\r\n\t\treturn await genericRequest(url, init);\r\n\t}\r\n\r\n\tasync function genericRequest(url: string, init: RequestInit): Promise {\r\n\t\tconst request: Request = new Request(url, init);\r\n\t\tconst response: Response = await fetch(request);\r\n\t\tif (response.status === 200) {\r\n\t\t\treturn await response.json() as T;\r\n\t\t}\r\n\t\tthrow `Status ${response.status}: when fetching '${url}'`;\r\n\t}\r\n\r\n}\r\n","export module Events {\r\n\texport const UserAuthEventName: string = 'user_auth';\r\n\texport const UserLogoutEventName: string = 'user_logout';\r\n}\r\n"],"sourceRoot":""}