element-web-synapse01pim.gr.jp

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

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":""}