diff --git a/src/ClientContext.tsx b/src/ClientContext.tsx index 08eb91e..7000792 100644 --- a/src/ClientContext.tsx +++ b/src/ClientContext.tsx @@ -33,6 +33,7 @@ import { initClient, initMatroskaClient, defaultHomeserver, + CryptoStoreIntegrityError, } from "./matrix-utils"; declare global { @@ -115,28 +116,51 @@ export const ClientProvider: FC = ({ children }) => { // We're running as a standalone application try { const session = loadSession(); + if (!session) return { client: undefined, isPasswordlessUser: false }; - if (session) { - /* eslint-disable camelcase */ - const { user_id, device_id, access_token, passwordlessUser } = - session; + logger.log("Using a standalone client"); - logger.log("Using a standalone client"); - const client = await initClient( - { - baseUrl: defaultHomeserver, - accessToken: access_token, - userId: user_id, - deviceId: device_id, - }, - true - ); - /* eslint-enable camelcase */ + /* eslint-disable camelcase */ + const { user_id, device_id, access_token, passwordlessUser } = + session; - return { client, isPasswordlessUser: passwordlessUser }; + try { + return { + client: await initClient( + { + baseUrl: defaultHomeserver, + accessToken: access_token, + userId: user_id, + deviceId: device_id, + }, + true + ), + isPasswordlessUser: passwordlessUser, + }; + } catch (err) { + if (err instanceof CryptoStoreIntegrityError) { + // We can't use this session anymore, so let's log it out + try { + const client = await initClient( + { + baseUrl: defaultHomeserver, + accessToken: access_token, + userId: user_id, + deviceId: device_id, + }, + false // Don't need the crypto store just to log out + ); + await client.logout(undefined, true); + } catch (err_) { + logger.warn( + "The previous session was lost, and we couldn't log it out, " + + "either" + ); + } + } + throw err; } - - return { client: undefined, isPasswordlessUser: false }; + /* eslint-enable camelcase */ } catch (err) { clearSession(); throw err; diff --git a/src/Facepile.tsx b/src/Facepile.tsx index 2469892..bd3c9c6 100644 --- a/src/Facepile.tsx +++ b/src/Facepile.tsx @@ -16,7 +16,8 @@ limitations under the License. import React, { HTMLAttributes } from "react"; import classNames from "classnames"; -import { MatrixClient, RoomMember } from "matrix-js-sdk"; +import { MatrixClient } from "matrix-js-sdk/src/client"; +import { RoomMember } from "matrix-js-sdk/src/models/room-member"; import styles from "./Facepile.module.css"; import { Avatar, Size, sizes } from "./Avatar"; diff --git a/src/Header.tsx b/src/Header.tsx index 0471526..4c796bf 100644 --- a/src/Header.tsx +++ b/src/Header.tsx @@ -3,7 +3,7 @@ import React, { HTMLAttributes, ReactNode, useCallback, useRef } from "react"; import { Link } from "react-router-dom"; import { useButton } from "@react-aria/button"; import { AriaButtonProps } from "@react-types/button"; -import { Room } from "matrix-js-sdk"; +import { Room } from "matrix-js-sdk/src/models/room"; import styles from "./Header.module.css"; import { useModalTriggerState } from "./Modal"; diff --git a/src/IncompatibleVersionModal.tsx b/src/IncompatibleVersionModal.tsx index 6cc5615..637859e 100644 --- a/src/IncompatibleVersionModal.tsx +++ b/src/IncompatibleVersionModal.tsx @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { Room } from "matrix-js-sdk"; +import { Room } from "matrix-js-sdk/src/models/room"; import React from "react"; import { Modal, ModalContent } from "./Modal"; diff --git a/src/home/CallList.tsx b/src/home/CallList.tsx index 8b25723..ddf6382 100644 --- a/src/home/CallList.tsx +++ b/src/home/CallList.tsx @@ -16,7 +16,8 @@ limitations under the License. import React from "react"; import { Link } from "react-router-dom"; -import { MatrixClient, RoomMember } from "matrix-js-sdk"; +import { MatrixClient } from "matrix-js-sdk/src/client"; +import { RoomMember } from "matrix-js-sdk/src/models/room-member"; import { CopyButton } from "../button"; import { Facepile } from "../Facepile"; diff --git a/src/home/RegisteredView.tsx b/src/home/RegisteredView.tsx index 4d190dd..ea6aac2 100644 --- a/src/home/RegisteredView.tsx +++ b/src/home/RegisteredView.tsx @@ -21,7 +21,7 @@ import React, { FormEventHandler, } from "react"; import { useHistory } from "react-router-dom"; -import { MatrixClient } from "matrix-js-sdk"; +import { MatrixClient } from "matrix-js-sdk/src/client"; import { createRoom, roomAliasLocalpartFromRoomName } from "../matrix-utils"; import { useGroupCallRooms } from "./useGroupCallRooms"; diff --git a/src/home/useGroupCallRooms.ts b/src/home/useGroupCallRooms.ts index cf15a26..b4011e5 100644 --- a/src/home/useGroupCallRooms.ts +++ b/src/home/useGroupCallRooms.ts @@ -14,7 +14,10 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { GroupCall, MatrixClient, Room, RoomMember } from "matrix-js-sdk"; +import { MatrixClient } from "matrix-js-sdk/src/client"; +import { GroupCall } from "matrix-js-sdk/src/webrtc/groupCall"; +import { Room } from "matrix-js-sdk/src/models/room"; +import { RoomMember } from "matrix-js-sdk/src/models/room-member"; import { GroupCallEventHandlerEvent } from "matrix-js-sdk/src/webrtc/groupCallEventHandler"; import { useState, useEffect } from "react"; diff --git a/src/profile/ProfileModal.tsx b/src/profile/ProfileModal.tsx index 4f006c1..89f967b 100644 --- a/src/profile/ProfileModal.tsx +++ b/src/profile/ProfileModal.tsx @@ -15,7 +15,7 @@ limitations under the License. */ import React, { ChangeEvent, useCallback, useEffect, useState } from "react"; -import { MatrixClient } from "matrix-js-sdk"; +import { MatrixClient } from "matrix-js-sdk/src/client"; import { Button } from "../button"; import { useProfile } from "./useProfile"; diff --git a/src/room/CallEndedView.tsx b/src/room/CallEndedView.tsx index 7cb7cc2..c7371d6 100644 --- a/src/room/CallEndedView.tsx +++ b/src/room/CallEndedView.tsx @@ -15,7 +15,7 @@ limitations under the License. */ import React from "react"; -import { MatrixClient } from "matrix-js-sdk"; +import { MatrixClient } from "matrix-js-sdk/src/client"; import styles from "./CallEndedView.module.css"; import { LinkButton } from "../button"; diff --git a/src/room/GroupCallInspector.tsx b/src/room/GroupCallInspector.tsx index bffaadf..48d3d35 100644 --- a/src/room/GroupCallInspector.tsx +++ b/src/room/GroupCallInspector.tsx @@ -26,7 +26,8 @@ import React, { import ReactJson, { CollapsedFieldProps } from "react-json-view"; import mermaid from "mermaid"; import { Item } from "@react-stately/collections"; -import { MatrixEvent, GroupCall, IContent } from "matrix-js-sdk"; +import { MatrixEvent, IContent } from "matrix-js-sdk/src/models/event"; +import { GroupCall } from "matrix-js-sdk/src/webrtc/groupCall"; import { ClientEvent, MatrixClient } from "matrix-js-sdk/src/client"; import { RoomStateEvent } from "matrix-js-sdk/src/models/room-state"; import { CallEvent } from "matrix-js-sdk/src/webrtc/call"; diff --git a/src/room/GroupCallLoader.tsx b/src/room/GroupCallLoader.tsx index dcfbf48..8c13626 100644 --- a/src/room/GroupCallLoader.tsx +++ b/src/room/GroupCallLoader.tsx @@ -15,7 +15,8 @@ limitations under the License. */ import React, { ReactNode } from "react"; -import { GroupCall, MatrixClient } from "matrix-js-sdk"; +import { MatrixClient } from "matrix-js-sdk/src/client"; +import { GroupCall } from "matrix-js-sdk/src/webrtc/groupCall"; import { useLoadGroupCall } from "./useLoadGroupCall"; import { ErrorView, FullScreenView } from "../FullScreenView"; diff --git a/src/room/GroupCallView.tsx b/src/room/GroupCallView.tsx index 2d5ee92..78e3c74 100644 --- a/src/room/GroupCallView.tsx +++ b/src/room/GroupCallView.tsx @@ -17,7 +17,7 @@ limitations under the License. import React, { useCallback, useEffect, useState } from "react"; import { useHistory } from "react-router-dom"; import { GroupCall, GroupCallState } from "matrix-js-sdk/src/webrtc/groupCall"; -import { MatrixClient } from "matrix-js-sdk"; +import { MatrixClient } from "matrix-js-sdk/src/client"; import { useGroupCall } from "./useGroupCall"; import { ErrorView, FullScreenView } from "../FullScreenView"; diff --git a/src/room/InCallView.tsx b/src/room/InCallView.tsx index 84c00d2..1ffd9be 100644 --- a/src/room/InCallView.tsx +++ b/src/room/InCallView.tsx @@ -16,7 +16,9 @@ limitations under the License. import React, { useCallback, useMemo, useRef } from "react"; import { usePreventScroll } from "@react-aria/overlays"; -import { GroupCall, MatrixClient, RoomMember } from "matrix-js-sdk"; +import { MatrixClient } from "matrix-js-sdk/src/client"; +import { RoomMember } from "matrix-js-sdk/src/models/room-member"; +import { GroupCall } from "matrix-js-sdk/src/webrtc/groupCall"; import { CallFeed } from "matrix-js-sdk/src/webrtc/callFeed"; import classNames from "classnames"; diff --git a/src/room/PTTCallView.tsx b/src/room/PTTCallView.tsx index dbdf90d..5f669b1 100644 --- a/src/room/PTTCallView.tsx +++ b/src/room/PTTCallView.tsx @@ -17,7 +17,9 @@ limitations under the License. import React, { useEffect } from "react"; import useMeasure from "react-use-measure"; import { ResizeObserver } from "@juggle/resize-observer"; -import { GroupCall, MatrixClient, RoomMember } from "matrix-js-sdk"; +import { MatrixClient } from "matrix-js-sdk/src/client"; +import { RoomMember } from "matrix-js-sdk/src/models/room-member"; +import { GroupCall } from "matrix-js-sdk/src/webrtc/groupCall"; import { CallFeed } from "matrix-js-sdk/src/webrtc/callFeed"; import { useDelayedState } from "../useDelayedState"; diff --git a/src/settings/submit-rageshake.ts b/src/settings/submit-rageshake.ts index 8d3ce6d..26a0b60 100644 --- a/src/settings/submit-rageshake.ts +++ b/src/settings/submit-rageshake.ts @@ -16,7 +16,7 @@ limitations under the License. import { useCallback, useContext, useEffect, useState } from "react"; import pako from "pako"; -import { MatrixEvent } from "matrix-js-sdk"; +import { MatrixEvent } from "matrix-js-sdk/src/models/event"; import { OverlayTriggerState } from "@react-stately/overlays"; import { MatrixClient, ClientEvent } from "matrix-js-sdk/src/client"; diff --git a/src/settings/useMediaHandler.tsx b/src/settings/useMediaHandler.tsx index 05e8795..cf359f5 100644 --- a/src/settings/useMediaHandler.tsx +++ b/src/settings/useMediaHandler.tsx @@ -15,7 +15,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { MatrixClient } from "matrix-js-sdk"; +import { MatrixClient } from "matrix-js-sdk/src/client"; import { MediaHandlerEvent } from "matrix-js-sdk/src/webrtc/mediaHandler"; import React, { useState, diff --git a/src/video-grid/VideoTileContainer.tsx b/src/video-grid/VideoTileContainer.tsx index 55f15a4..25bd94a 100644 --- a/src/video-grid/VideoTileContainer.tsx +++ b/src/video-grid/VideoTileContainer.tsx @@ -17,7 +17,7 @@ limitations under the License. import { SDPStreamMetadataPurpose } from "matrix-js-sdk/src/webrtc/callEventTypes"; import React from "react"; import { useCallback } from "react"; -import { RoomMember } from "matrix-js-sdk"; +import { RoomMember } from "matrix-js-sdk/src/models/room-member"; import { useCallFeed } from "./useCallFeed"; import { useSpatialMediaStream } from "./useMediaStream"; diff --git a/src/video-grid/useCallFeed.ts b/src/video-grid/useCallFeed.ts index c006740..1781dbf 100644 --- a/src/video-grid/useCallFeed.ts +++ b/src/video-grid/useCallFeed.ts @@ -16,7 +16,7 @@ limitations under the License. import { useState, useEffect } from "react"; import { CallFeed, CallFeedEvent } from "matrix-js-sdk/src/webrtc/callFeed"; -import { RoomMember } from "matrix-js-sdk"; +import { RoomMember } from "matrix-js-sdk/src/models/room-member"; import { SDPStreamMetadataPurpose } from "matrix-js-sdk/src/webrtc/callEventTypes"; interface CallFeedState { diff --git a/src/video-grid/useRoomMemberName.ts b/src/video-grid/useRoomMemberName.ts index f91363a..5824f4f 100644 --- a/src/video-grid/useRoomMemberName.ts +++ b/src/video-grid/useRoomMemberName.ts @@ -14,7 +14,10 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { RoomMember, RoomMemberEvent } from "matrix-js-sdk"; +import { + RoomMember, + RoomMemberEvent, +} from "matrix-js-sdk/src/models/room-member"; import { useState, useEffect } from "react"; interface RoomMemberName {