5844.js.map (49495B)
1 {"version":3,"file":"bundles/12c8185ea2689492c07b/5844.js","mappings":"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","sources":["webpack://element-web/./src/components/views/auth/LoginWithQRFlow.tsx","webpack://element-web/./src/components/views/auth/LoginWithQR.tsx"],"sourcesContent":["/*\nCopyright 2024 New Vector Ltd.\nCopyright 2022-2024 The Matrix.org Foundation C.I.C.\n\nSPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE files in the repository root for full details.\n*/\n\nimport React, { type ComponentProps, createRef, type JSX, type ReactNode } from \"react\";\nimport { ClientRendezvousFailureReason, MSC4108FailureReason, RendezvousIntent } from \"matrix-js-sdk/src/rendezvous\";\nimport ChevronLeftIcon from \"@vector-im/compound-design-tokens/assets/web/icons/chevron-left\";\nimport CheckCircleSolidIcon from \"@vector-im/compound-design-tokens/assets/web/icons/check-circle-solid\";\nimport ErrorIcon from \"@vector-im/compound-design-tokens/assets/web/icons/error-solid\";\nimport { BigIcon, Button, Heading, MFAInput, Text } from \"@vector-im/compound-web\";\nimport classNames from \"classnames\";\nimport { LockSolidIcon, MobileIcon, QrCodeIcon } from \"@vector-im/compound-design-tokens/assets/web/icons\";\n\nimport { _t } from \"../../../languageHandler\";\nimport AccessibleButton from \"../elements/AccessibleButton\";\nimport QRCode from \"../elements/QRCode\";\nimport Spinner from \"../elements/Spinner\";\nimport { Click, Phase } from \"./LoginWithQR-types\";\nimport SdkConfig from \"../../../SdkConfig\";\nimport { type FailureReason, LoginWithQRFailureReason } from \"./LoginWithQR\";\nimport { ErrorMessage } from \"../../structures/ErrorMessage\";\n\ninterface Props {\n /**\n * The phase the flow is to be rendered in\n */\n phase: Phase;\n /**\n * The QR code data to render in Phase.ShowingQR\n */\n code?: Uint8Array;\n /**\n * The intent mode of the flow (login or reciprocate).\n */\n intent: RendezvousIntent;\n /**\n * State transition handler\n * @param type the type of transition to take\n * @param checkCodeEntered the check code entered, only present for Click.Approve\n */\n onClick(type: Click, checkCodeEntered?: string): Promise<void>;\n /**\n * The failure reason to render in Phase.Error\n */\n failureReason?: FailureReason;\n /**\n * The 6 digit user code to render in Phase.WaitingForDevice\n */\n userCode?: string;\n}\n\n/**\n * A component that implements the UI for sign in and E2EE set up by rendering a QR code in both login & reciprocate directions.\n *\n * Implements the v2024 version of MSC4108: https://github.com/matrix-org/matrix-spec-proposals/pull/4108\n */\nexport default class LoginWithQRFlow extends React.Component<Props> {\n private checkCodeInput = createRef<HTMLInputElement>();\n\n private handleClick = (type: Click): ((e: React.FormEvent) => Promise<void>) => {\n return async (e: React.FormEvent): Promise<void> => {\n e.preventDefault();\n await this.props.onClick(type, type === Click.Approve ? this.checkCodeInput.current?.value : undefined);\n };\n };\n\n private cancelButton = (): JSX.Element => (\n <Button data-testid=\"cancel-button\" kind=\"primary\" size=\"lg\" onClick={this.handleClick(Click.Cancel)}>\n {_t(\"action|cancel\")}\n </Button>\n );\n\n private simpleSpinner = (description?: string): JSX.Element => {\n return (\n <div className=\"mx_LoginWithQR_spinner\">\n <div>\n <Spinner />\n {description && <p>{description}</p>}\n </div>\n </div>\n );\n };\n\n public render(): React.ReactNode {\n let main: JSX.Element | undefined;\n let buttons: JSX.Element | undefined;\n let backButton = true;\n let className = \"\";\n\n switch (this.props.phase) {\n case Phase.Error: {\n backButton = false;\n buttons = (\n <Button kind=\"primary\" size=\"lg\" onClick={this.handleClick(Click.ShowQr)}>\n {this.props.intent === RendezvousIntent.LOGIN_ON_NEW_DEVICE\n ? _t(\"auth|qr_code_login|start_over\")\n : _t(\"action|try_again\")}\n </Button>\n );\n\n let Icon = ErrorIcon;\n let iconKind: ComponentProps<typeof BigIcon>[\"kind\"] = \"critical\";\n let title: string | undefined;\n let message: ReactNode | undefined;\n\n switch (this.props.failureReason) {\n case MSC4108FailureReason.UnsupportedProtocol:\n title = _t(\"auth|qr_code_login|error_unsupported_protocol_title\");\n message = _t(\"auth|qr_code_login|error_unsupported_protocol\");\n break;\n\n case MSC4108FailureReason.UserCancelled:\n title = _t(\"auth|qr_code_login|error_user_cancelled_title\");\n message = _t(\"auth|qr_code_login|error_user_cancelled\");\n if (this.props.intent === RendezvousIntent.LOGIN_ON_NEW_DEVICE) {\n buttons = this.cancelButton();\n }\n break;\n\n case MSC4108FailureReason.AuthorizationExpired:\n case ClientRendezvousFailureReason.Expired:\n title = _t(\"auth|qr_code_login|error_expired_title\");\n message = _t(\"auth|qr_code_login|error_expired\");\n break;\n\n case ClientRendezvousFailureReason.InsecureChannelDetected:\n title = _t(\"auth|qr_code_login|error_insecure_channel_detected_title\");\n message = (\n <>\n {_t(\"auth|qr_code_login|error_insecure_channel_detected\")}\n\n <Text as=\"h2\" size=\"lg\" weight=\"semibold\" data-testid=\"cancellation-message\">\n {_t(\"auth|qr_code_login|error_insecure_channel_detected_instructions\")}\n </Text>\n <ol>\n <li>{_t(\"auth|qr_code_login|error_insecure_channel_detected_instructions_1\")}</li>\n <li>{_t(\"auth|qr_code_login|error_insecure_channel_detected_instructions_2\")}</li>\n <li>{_t(\"auth|qr_code_login|error_insecure_channel_detected_instructions_3\")}</li>\n </ol>\n </>\n );\n break;\n\n case ClientRendezvousFailureReason.OtherDeviceAlreadySignedIn:\n iconKind = \"success\";\n Icon = CheckCircleSolidIcon;\n title = _t(\"auth|qr_code_login|error_other_device_already_signed_in_title\");\n message = _t(\"auth|qr_code_login|error_other_device_already_signed_in\");\n break;\n\n case ClientRendezvousFailureReason.UserDeclined:\n title = _t(\"auth|qr_code_login|error_user_declined_title\");\n message = _t(\"auth|qr_code_login|error_user_declined\");\n if (this.props.intent === RendezvousIntent.LOGIN_ON_NEW_DEVICE) {\n buttons = this.cancelButton();\n }\n break;\n\n case LoginWithQRFailureReason.RateLimited:\n title = _t(\"error|something_went_wrong\");\n message = _t(\"auth|qr_code_login|error_rate_limited\");\n break;\n\n case ClientRendezvousFailureReason.ETagMissing:\n title = _t(\"error|something_went_wrong\");\n message = _t(\"auth|qr_code_login|error_etag_missing\");\n break;\n\n case ClientRendezvousFailureReason.HomeserverLacksSupport:\n Icon = QrCodeIcon;\n backButton = true;\n title = _t(\"auth|qr_code_login|unsupported_heading\");\n message = _t(\"auth|qr_code_login|unsupported_explainer\");\n if (this.props.intent === RendezvousIntent.LOGIN_ON_NEW_DEVICE) {\n buttons = this.cancelButton();\n }\n break;\n\n case MSC4108FailureReason.DeviceAlreadyExists:\n case MSC4108FailureReason.DeviceNotFound:\n case MSC4108FailureReason.UnexpectedMessageReceived:\n case ClientRendezvousFailureReason.OtherDeviceNotSignedIn:\n case ClientRendezvousFailureReason.Unknown:\n default:\n title = _t(\"error|something_went_wrong\");\n message = _t(\"auth|qr_code_login|error_unexpected\");\n break;\n }\n className = \"mx_LoginWithQR_error\";\n main = (\n <>\n <BigIcon kind={iconKind}>\n <Icon />\n </BigIcon>\n <Heading as=\"h1\" size=\"sm\" weight=\"semibold\">\n {title}\n </Heading>\n {typeof message === \"object\" ? message : <p data-testid=\"cancellation-message\">{message}</p>}\n </>\n );\n break;\n }\n case Phase.OutOfBandConfirmation:\n backButton = false;\n main = (\n <>\n {this.props.intent === RendezvousIntent.LOGIN_ON_NEW_DEVICE && (\n <BigIcon>\n <MobileIcon />\n </BigIcon>\n )}\n <Heading as=\"h1\" size=\"sm\" weight=\"semibold\">\n {_t(\"auth|qr_code_login|check_code_heading\")}\n </Heading>\n <Text size=\"md\">{_t(\"auth|qr_code_login|check_code_explainer\")}</Text>\n <label htmlFor=\"mx_LoginWithQR_checkCode\">\n {_t(\"auth|qr_code_login|check_code_input_label\")}\n </label>\n <MFAInput\n className=\"mx_LoginWithQR_checkCode_input mx_no_textinput\"\n ref={this.checkCodeInput}\n length={2}\n autoFocus\n id=\"mx_LoginWithQR_checkCode\"\n data-invalid={\n this.props.failureReason === LoginWithQRFailureReason.CheckCodeMismatch\n ? true\n : undefined\n }\n />\n <ErrorMessage\n message={\n this.props.failureReason === LoginWithQRFailureReason.CheckCodeMismatch\n ? _t(\"auth|qr_code_login|check_code_mismatch\")\n : null\n }\n />\n </>\n );\n\n buttons = (\n <>\n <Button\n data-testid=\"approve-login-button\"\n kind=\"primary\"\n size=\"lg\"\n onClick={this.handleClick(Click.Approve)}\n >\n {_t(\"action|continue\")}\n </Button>\n <Button\n data-testid=\"decline-login-button\"\n kind=\"tertiary\"\n size=\"lg\"\n onClick={this.handleClick(Click.Decline)}\n >\n {_t(\"action|cancel\")}\n </Button>\n </>\n );\n break;\n case Phase.ShowingQR: {\n let steps: ReactNode[];\n if (this.props.intent === RendezvousIntent.LOGIN_ON_NEW_DEVICE) {\n steps = [\n _t(\"auth|qr_code_login|open_element_mobile_device\", {\n brand: SdkConfig.get().brand,\n }),\n _t(\"auth|qr_code_login|tap_avatar_link_new_device\", {\n linkNewDevice: <strong>{_t(\"settings|sessions|sign_in_with_qr\")}</strong>,\n }),\n _t(\"auth|qr_code_login|choose_desktop_computer\", {\n desktopComputer: <strong>{_t(\"auth|qr_code_login|desktop_computer\")}</strong>,\n }),\n _t(\"auth|qr_code_login|select_ready_to_scan\", {\n readyToScan: <strong>{_t(\"auth|qr_code_login|ready_to_scan\")}</strong>,\n }),\n _t(\"auth|qr_code_login|follow_remaining_instructions\"),\n ];\n } else {\n steps = [\n _t(\"auth|qr_code_login|open_element_other_device\", {\n brand: SdkConfig.get().brand,\n }),\n _t(\"auth|qr_code_login|select_qr_code\", {\n scanQRCode: <strong>{_t(\"auth|qr_code_login|scan_qr_code\")}</strong>,\n }),\n _t(\"auth|qr_code_login|point_the_camera\"),\n _t(\"auth|qr_code_login|follow_remaining_instructions\"),\n ];\n }\n\n main = (\n <>\n <Heading as=\"h1\" size=\"sm\" weight=\"semibold\">\n {this.props.intent === RendezvousIntent.LOGIN_ON_NEW_DEVICE\n ? _t(\"auth|qr_code_login|scan_code_instruction\")\n : _t(\"auth|qr_code_login|scan_code_instruction_reciprocate\")}\n </Heading>\n <div className=\"mx_LoginWithQR_qrWrapper\">\n {this.props.code ? (\n <QRCode data={[{ data: this.props.code, mode: \"byte\" }]} width={200} />\n ) : (\n <Spinner />\n )}\n </div>\n <ol>\n {steps.map((step, i) => (\n <li key={this.props.intent + i}>{step}</li>\n ))}\n </ol>\n </>\n );\n break;\n }\n case Phase.Loading:\n main = this.simpleSpinner();\n break;\n case Phase.WaitingForDevice:\n main =\n this.props.intent === RendezvousIntent.LOGIN_ON_NEW_DEVICE ? (\n <>\n <BigIcon>\n <LockSolidIcon />\n </BigIcon>\n <Heading as=\"h1\" size=\"sm\" weight=\"semibold\">\n {_t(\"auth|qr_code_login|security_code_title\")}\n </Heading>\n <Text size=\"md\">{_t(\"auth|qr_code_login|security_code_prompt\")}</Text>\n <MFAInput\n className=\"mx_LoginWithQR_checkCode_input mx_no_textinput\"\n length={6}\n value={this.props.userCode}\n disabled\n />\n {this.simpleSpinner(_t(\"auth|qr_code_login|waiting_for_device\"))}\n </>\n ) : (\n this.simpleSpinner(_t(\"auth|qr_code_login|waiting_for_device\"))\n );\n buttons = this.cancelButton();\n break;\n case Phase.Verifying:\n main = this.simpleSpinner(_t(\"auth|qr_code_login|completing_setup\"));\n break;\n }\n\n return (\n <div data-testid=\"login-with-qr\" className={classNames(\"mx_LoginWithQR\", className)}>\n {this.props.intent === RendezvousIntent.RECIPROCATE_LOGIN_ON_EXISTING_DEVICE && backButton ? (\n <div className=\"mx_LoginWithQR_heading\">\n <AccessibleButton\n data-testid=\"back-button\"\n className=\"mx_LoginWithQR_BackButton\"\n onClick={this.handleClick(Click.Cancel)}\n title={_t(\"action|back\")}\n >\n <ChevronLeftIcon />\n </AccessibleButton>\n <div className=\"mx_LoginWithQR_breadcrumbs\">\n {_t(\"settings|sessions|title\")} / {_t(\"settings|sessions|sign_in_with_qr\")}\n </div>\n </div>\n ) : null}\n <div className=\"mx_LoginWithQR_main\">{main}</div>\n <div className=\"mx_LoginWithQR_buttons\">{buttons}</div>\n </div>\n );\n }\n}\n","/*\nCopyright 2024 New Vector Ltd.\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nSPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial\nPlease see LICENSE files in the repository root for full details.\n*/\n\nimport React from \"react\";\nimport {\n ClientRendezvousFailureReason,\n linkNewDeviceByGeneratingQR,\n MSC4108FailureReason,\n MSC4108SignInWithQR,\n RendezvousError,\n type RendezvousFailureReason,\n RendezvousIntent,\n signInByGeneratingQR,\n} from \"matrix-js-sdk/src/rendezvous\";\nimport { logger } from \"matrix-js-sdk/src/logger\";\nimport {\n AutoDiscovery,\n MatrixClient,\n OAuthGrantType,\n type ValidatedAuthMetadata,\n type XOR,\n} from \"matrix-js-sdk/src/matrix\";\nimport { sleep } from \"matrix-js-sdk/src/utils\";\nimport { secureRandomString } from \"matrix-js-sdk/src/randomstring\";\n\nimport { Click, Mode, Phase } from \"./LoginWithQR-types\";\nimport LoginWithQRFlow from \"./LoginWithQRFlow\";\nimport { type CompleteOAuthLoginResponse } from \"../../../utils/oauth/authorize\";\nimport { getOAuthClientId } from \"../../../utils/oauth/registerClient.ts\";\nimport SdkConfig from \"../../../SdkConfig.ts\";\nimport { type Context } from \"../../../utils/oauth/persistOAuthSettings.ts\";\n\nexport type QrLoginCredentials = CompleteOAuthLoginResponse &\n Awaited<ReturnType<MSC4108SignInWithQR[\"shareSecrets\"]>> & {\n deviceId: string;\n };\n\ntype BaseProps = {\n /**\n * The MatrixClient to use for the rendezvous communication with the other device.\n */\n client: MatrixClient;\n /**\n * Whether to show a QR code or facilitate scanning one. Only Mode.Show is currently supported.\n */\n mode: Mode;\n /**\n * Callback when the internal phase state has changed\n * @param phase - the new phase which is being entered\n */\n onPhaseChange?(phase: Phase): void;\n /**\n * Callback when the flow is concluded\n * @param success - whether it was successful\n */\n onFinished(this: void, success?: boolean): void;\n};\n\ntype Props = XOR<\n {\n /**\n * Intent to facilitate logging into this device from an existing device\n */\n intent: RendezvousIntent.LOGIN_ON_NEW_DEVICE;\n /**\n * Callback for successful login\n * @param credentials - the credentials to authenticate with\n */\n onLoggedIn(credentials: QrLoginCredentials): Promise<void>;\n },\n {\n /**\n * Intent to facilitate logging into another device from this existing device\n */\n intent: RendezvousIntent.RECIPROCATE_LOGIN_ON_EXISTING_DEVICE;\n }\n> &\n BaseProps;\n\ninterface IState {\n /**\n * The current phase of the flow\n */\n phase: Phase;\n /**\n * The rendezvous channel in use\n */\n rendezvous?: MSC4108SignInWithQR;\n /**\n * TODO\n */\n verificationUri?: string;\n /**\n * TODO\n */\n userCode?: string;\n /**\n * TODO\n */\n checkCode?: string;\n /**\n * TODO\n */\n failureReason?: FailureReason;\n /**\n * Details of the server we are logging into, set after initial protocol negotiation.\n */\n loginServerDetails?: Pick<Context, \"homeserverUrl\" | \"identityServerUrl\" | \"metadata\"> &\n Pick<Context[\"authContext\"], \"clientId\">;\n}\n\nexport enum LoginWithQRFailureReason {\n RateLimited = \"rate_limited\",\n CheckCodeMismatch = \"check_code_mismatch\",\n}\n\nexport type FailureReason = RendezvousFailureReason | LoginWithQRFailureReason;\n\n/**\n * Resolve a server name or baseURL to the homeserver & identity server URLs.\n * @param serverNameOrBaseUrl the name or URL to resolve\n * Whilst the 2024 version of MSC4108 says that we always get a server name, in practise the\n * rust-sdk is currently misbehaving and we may receive a base URL instead. Additionally, the 2025\n * version of MSC4108 will always give the base URL.\n * As such, we should be resilient and support both formats until the spec and implementations have\n * stabilised.\n */\nasync function resolveServerURLs(\n serverNameOrBaseUrl: string,\n): Promise<Pick<Partial<Context>, \"homeserverUrl\" | \"identityServerUrl\">> {\n if (serverNameOrBaseUrl.startsWith(\"http://\") || serverNameOrBaseUrl.startsWith(\"https://\")) {\n // treat as base URL and skip discovery\n return {\n homeserverUrl: serverNameOrBaseUrl,\n };\n }\n\n // treat as server name and do discovery\n const clientConfig = await AutoDiscovery.findClientConfig(serverNameOrBaseUrl);\n const homeserverUrl = clientConfig?.[\"m.homeserver\"]?.base_url ?? undefined;\n\n const identityServerUrl = clientConfig?.[\"m.identity_server\"]?.base_url ?? undefined;\n\n return {\n homeserverUrl,\n identityServerUrl,\n };\n}\n\n/**\n * A component that allows sign in and E2EE set up with a QR code.\n *\n * It implements `login.reciprocate` & `login.start` capabilities and showing QR codes.\n * It does not implement any flows requiring the scanning of QR codes.\n *\n * Implements the v2024 version of MSC4108: https://github.com/matrix-org/matrix-spec-proposals/pull/4108\n */\nexport default class LoginWithQR extends React.Component<Props, IState> {\n private finished = false;\n private abortController?: AbortController;\n\n public constructor(props: Props) {\n super(props);\n\n this.state = {\n phase: Phase.Loading,\n };\n this.props.onPhaseChange?.(this.state.phase);\n }\n\n public componentDidMount(): void {\n void this.updateMode(this.props.mode);\n }\n\n public componentDidUpdate(prevProps: Readonly<Props>, prevState: Readonly<IState>): void {\n if (prevState.phase !== this.state.phase) {\n this.props.onPhaseChange?.(this.state.phase);\n }\n\n if (prevProps.mode !== this.props.mode) {\n void this.updateMode(this.props.mode);\n }\n }\n\n private async updateMode(mode: Mode, showLoading = true): Promise<void> {\n this.abortController?.abort();\n this.abortController = new AbortController();\n this.setState({ rendezvous: undefined });\n if (showLoading) {\n this.setState({ phase: Phase.Loading });\n }\n\n if (mode === Mode.Show) {\n await this.generateAndShowCode(this.abortController);\n }\n }\n\n public componentWillUnmount(): void {\n if (!this.finished) {\n this.abortController?.abort();\n }\n }\n\n private onFinished(success: boolean): void {\n this.finished = true;\n if (!success) {\n this.abortController?.abort();\n }\n this.props.onFinished(success);\n }\n\n private generateAndShowCode = async (abortController: AbortController): Promise<void> => {\n let rendezvous: MSC4108SignInWithQR;\n try {\n rendezvous =\n this.props.intent === RendezvousIntent.LOGIN_ON_NEW_DEVICE\n ? await signInByGeneratingQR(this.props.client, this.onFailure, abortController.signal)\n : await linkNewDeviceByGeneratingQR(this.props.client, this.onFailure, abortController.signal);\n if (abortController.signal.aborted) return;\n this.setState({\n phase: Phase.ShowingQR,\n rendezvous,\n failureReason: undefined,\n });\n } catch (e) {\n if (abortController.signal.aborted) return;\n logger.error(\"Error whilst generating QR code\", e);\n this.setState({ phase: Phase.Error, failureReason: ClientRendezvousFailureReason.HomeserverLacksSupport });\n return;\n }\n\n try {\n if (this.props.intent === RendezvousIntent.RECIPROCATE_LOGIN_ON_EXISTING_DEVICE) {\n // MSC4108-Flow: NewScanned\n await rendezvous.negotiateProtocols();\n const { verificationUri } = await rendezvous.deviceAuthorizationGrant();\n this.setState({\n phase: Phase.OutOfBandConfirmation,\n verificationUri,\n });\n } else {\n const { serverName } = await rendezvous.negotiateProtocols();\n const { homeserverUrl, identityServerUrl } = await resolveServerURLs(serverName!);\n\n if (!homeserverUrl) {\n this.setState({ phase: Phase.Error, failureReason: ClientRendezvousFailureReason.Unknown });\n logger.error(\"Failed to discover homeserver URL\");\n throw new Error(\"Failed to discover homeserver URL\");\n }\n\n let metadata: ValidatedAuthMetadata;\n let clientId: string;\n try {\n // Create a new client as the homeserver URL may not be the same as we used for the secure channel\n metadata = await new MatrixClient({ baseUrl: homeserverUrl }).getAuthMetadata();\n if (!metadata.grant_types_supported.includes(OAuthGrantType.DeviceAuthorization)) {\n throw new Error(\"Server does not support Device Authorization Grant\");\n }\n clientId = await getOAuthClientId(metadata, SdkConfig.get().oidc_static_clients);\n } catch (e) {\n this.setState({\n phase: Phase.Error,\n failureReason: ClientRendezvousFailureReason.HomeserverLacksSupport,\n });\n logger.error(\"Failed to register OIDC Client ID\", e);\n throw new Error(\"Failed to register OIDC Client ID\", { cause: e });\n }\n\n this.setState({\n phase: Phase.OutOfBandConfirmation,\n loginServerDetails: {\n homeserverUrl,\n identityServerUrl,\n metadata,\n clientId,\n },\n });\n }\n\n // we ask the user to confirm that the channel is secure\n } catch (e: RendezvousError | unknown) {\n if (abortController.signal.aborted) return;\n logger.error(\"Error whilst approving login\", e);\n await rendezvous.cancel(\n e instanceof RendezvousError ? (e.code as MSC4108FailureReason) : ClientRendezvousFailureReason.Unknown,\n );\n }\n };\n\n private approveLogin = async (checkCode: string | undefined): Promise<void> => {\n if (!(this.state.rendezvous instanceof MSC4108SignInWithQR)) {\n this.setState({ phase: Phase.Error, failureReason: ClientRendezvousFailureReason.Unknown });\n throw new Error(\"Rendezvous not found\");\n }\n\n if (this.state.rendezvous?.checkCode !== checkCode) {\n this.setState({ failureReason: LoginWithQRFailureReason.CheckCodeMismatch });\n return;\n }\n\n try {\n if (this.props.intent === RendezvousIntent.RECIPROCATE_LOGIN_ON_EXISTING_DEVICE) {\n // MSC4108-Flow: NewScanned\n this.setState({ phase: Phase.Loading });\n\n if (this.state.verificationUri) {\n window.open(this.state.verificationUri, \"_blank\");\n }\n\n this.setState({ phase: Phase.WaitingForDevice });\n\n // send secrets\n await this.state.rendezvous.shareSecrets();\n\n // done\n this.onFinished(true);\n } else {\n if (!this.state.loginServerDetails) {\n this.setState({ phase: Phase.Error, failureReason: ClientRendezvousFailureReason.Unknown });\n throw new Error(\"Server details not found in state\");\n }\n\n const { homeserverUrl, identityServerUrl, clientId, metadata } = this.state.loginServerDetails;\n\n // Generate our new device ID\n const deviceId = secureRandomString(10);\n const { userCode } = await this.state.rendezvous.deviceAuthorizationGrant({\n metadata,\n clientId,\n deviceId,\n });\n this.setState({ phase: Phase.WaitingForDevice, userCode });\n\n const tokenResponse = await this.state.rendezvous.completeLoginOnNewDevice({ clientId });\n\n if (tokenResponse) {\n const { secrets } = await this.state.rendezvous.shareSecrets();\n\n await this.props.onLoggedIn({\n accessToken: tokenResponse.access_token,\n refreshToken: tokenResponse.refresh_token,\n homeserverUrl,\n clientId,\n identityServerUrl,\n secrets,\n deviceId,\n });\n\n this.onFinished(true);\n }\n }\n } catch (e: RendezvousError | unknown) {\n logger.error(\"Error whilst approving sign in\", e);\n this.setState({\n phase: Phase.Error,\n failureReason: e instanceof RendezvousError ? e.code : ClientRendezvousFailureReason.Unknown,\n });\n }\n };\n\n private onFailure = async (reason: RendezvousFailureReason): Promise<void> => {\n if (this.state.phase === Phase.Error) return; // Already in failed state\n logger.warn(`Rendezvous failed: ${reason}`);\n\n // Generate a new rendezvous channel & qr code if we hit expiry whilst still showing the QR code\n if (reason === ClientRendezvousFailureReason.Expired && this.state.phase === Phase.ShowingQR) {\n try {\n this.reset();\n // Add a sleep to make the UX looks less flickery and more intentional\n await sleep(1000);\n await this.updateMode(Mode.Show, false);\n return;\n } catch (e) {\n logger.warn(\"Failed to re-roll qr code on expiry\", e);\n }\n }\n this.setState({ phase: Phase.Error, failureReason: reason });\n };\n\n public reset(): void {\n this.abortController?.abort();\n this.setState({\n rendezvous: undefined,\n verificationUri: undefined,\n failureReason: undefined,\n userCode: undefined,\n });\n }\n\n private onClick = async (type: Click, checkCode?: string): Promise<void> => {\n switch (type) {\n case Click.Cancel:\n await this.state.rendezvous?.cancel(MSC4108FailureReason.UserCancelled);\n this.onFinished(false);\n break;\n case Click.Approve:\n await this.approveLogin(checkCode);\n break;\n case Click.Decline:\n if (this.props.intent === RendezvousIntent.LOGIN_ON_NEW_DEVICE) {\n await this.state.rendezvous?.cancel(MSC4108FailureReason.UserCancelled);\n } else {\n await this.state.rendezvous?.declineLoginOnExistingDevice();\n }\n this.onFinished(false);\n break;\n case Click.ShowQr:\n await this.updateMode(Mode.Show);\n break;\n }\n };\n\n public render(): React.ReactNode {\n return (\n <LoginWithQRFlow\n onClick={this.onClick}\n phase={this.state.phase}\n code={this.state.phase === Phase.ShowingQR ? this.state.rendezvous?.code : undefined}\n failureReason={this.state.failureReason}\n userCode={this.state.userCode}\n intent={this.props.intent}\n />\n );\n }\n}\n"],"names":["LoginWithQRFlow","React","constructor","args","super","_defineProperty","this","createRef","type","async","_this$checkCodeInput$","e","preventDefault","props","onClick","Click","Approve","checkCodeInput","current","value","undefined","Button","kind","size","handleClick","Cancel","_t","description","className","Spinner","render","main","buttons","backButton","phase","Phase","Error","ShowQr","intent","RendezvousIntent","LOGIN_ON_NEW_DEVICE","title","message","Icon","ErrorIcon","iconKind","failureReason","MSC4108FailureReason","UnsupportedProtocol","UserCancelled","cancelButton","AuthorizationExpired","ClientRendezvousFailureReason","Expired","InsecureChannelDetected","Text","as","weight","OtherDeviceAlreadySignedIn","CheckCircleSolidIcon","UserDeclined","LoginWithQRFailureReason","RateLimited","ETagMissing","HomeserverLacksSupport","QrCodeIcon","DeviceAlreadyExists","DeviceNotFound","UnexpectedMessageReceived","OtherDeviceNotSignedIn","Unknown","BigIcon","Heading","OutOfBandConfirmation","MobileIcon","htmlFor","MFAInput","ref","length","autoFocus","id","CheckCodeMismatch","ErrorMessage","Decline","ShowingQR","steps","brand","SdkConfig","get","linkNewDevice","desktopComputer","readyToScan","scanQRCode","code","QRCode","data","mode","width","map","step","i","key","Loading","simpleSpinner","WaitingForDevice","LockSolidIcon","userCode","disabled","Verifying","classNames","RECIPROCATE_LOGIN_ON_EXISTING_DEVICE","AccessibleButton","ChevronLeftIcon","LoginWithQR","_this$props$onPhaseCh","_this$props","rendezvous","signInByGeneratingQR","client","onFailure","abortController","signal","linkNewDeviceByGeneratingQR","aborted","setState","logger","error","negotiateProtocols","verificationUri","deviceAuthorizationGrant","serverName","homeserverUrl","identityServerUrl","serverNameOrBaseUrl","_clientConfig$mHomes","_clientConfig$mHomes2","_clientConfig$mIdent","_clientConfig$mIdent2","startsWith","clientConfig","AutoDiscovery","findClientConfig","base_url","resolveServerURLs","metadata","clientId","MatrixClient","baseUrl","getAuthMetadata","grant_types_supported","includes","OAuthGrantType","DeviceAuthorization","getOAuthClientId","oidc_static_clients","cause","loginServerDetails","cancel","RendezvousError","_this$state$rendezvou","state","MSC4108SignInWithQR","checkCode","window","open","shareSecrets","onFinished","deviceId","secureRandomString","tokenResponse","completeLoginOnNewDevice","secrets","onLoggedIn","accessToken","access_token","refreshToken","refresh_token","warn","reason","reset","sleep","updateMode","Mode","Show","_this$state$rendezvou2","approveLogin","_this$state$rendezvou3","_this$state$rendezvou4","declineLoginOnExistingDevice","onPhaseChange","call","componentDidMount","componentDidUpdate","prevProps","prevState","_this$props$onPhaseCh2","_this$props2","showLoading","_this$abortController","abort","AbortController","generateAndShowCode","componentWillUnmount","_this$abortController2","finished","success","_this$abortController3","_this$abortController4","_this$state$rendezvou5"],"sourceRoot":""}