diff --git a/package.json b/package.json
index 247368c01b26..2ab74e6d0b05 100644
--- a/package.json
+++ b/package.json
@@ -67,7 +67,6 @@
"clsx": "1.1.1",
"crypto": "npm:crypto-browserify",
"crypto-browserify": "^3.12.0",
- "crypto-js": "4.1.1",
"dayjs": "1.11.13",
"dompurify": "3.2.6",
"dotenv": "^16.4.5",
@@ -87,7 +86,7 @@
"js-md5": "0.6.1",
"js-sha512": "0.8.0",
"jwt-decode": "2.2.0",
- "lib-jitsi-meet": "https://github.com/internxt/lib-jitsi-meet/releases/download/v.0.0.13/lib-jitsi-meet-0.0.13.tgz",
+ "lib-jitsi-meet": "https://github.com/internxt/lib-jitsi-meet/releases/download/v.0.0.16/lib-jitsi-meet-0.0.16.tgz",
"lodash-es": "4.17.21",
"moment": "2.29.4",
"moment-duration-format": "2.2.2",
diff --git a/react/features/base/conference/functions.ts b/react/features/base/conference/functions.ts
index fef9fe745fe2..2fe66f14ffcb 100644
--- a/react/features/base/conference/functions.ts
+++ b/react/features/base/conference/functions.ts
@@ -246,6 +246,8 @@ export function getConferenceOptions(stateful: IStateful) {
delete config.analytics?.amplitudeAPPKey;
}
+ options.isChatEncrypted = true; // Encrypted by default
+
return options;
}
diff --git a/react/features/base/meet/views/Conference/components/VideoParticipant.tsx b/react/features/base/meet/views/Conference/components/VideoParticipant.tsx
index f66794c611ca..207c79325663 100644
--- a/react/features/base/meet/views/Conference/components/VideoParticipant.tsx
+++ b/react/features/base/meet/views/Conference/components/VideoParticipant.tsx
@@ -49,7 +49,7 @@ const VideoParticipant = ({
)}
key={`video-${id}`}
// Set to false due to decoding issues and video lag
- encodeVideo={false}
+ encodeVideo={true}
/>
) : (
diff --git a/react/features/base/meet/views/Conference/containers/ConferenceControlsWrapper.tsx b/react/features/base/meet/views/Conference/containers/ConferenceControlsWrapper.tsx
index 97b0d6e87dba..36b2f7795a61 100644
--- a/react/features/base/meet/views/Conference/containers/ConferenceControlsWrapper.tsx
+++ b/react/features/base/meet/views/Conference/containers/ConferenceControlsWrapper.tsx
@@ -28,6 +28,7 @@ interface ConferenceControlsProps extends WithTranslation {
_screensharing: boolean;
_screenShareActive: boolean;
_chatOpen: boolean;
+ _chatKeysArrived: boolean;
}
const ConferenceControls = ({
@@ -40,6 +41,7 @@ const ConferenceControls = ({
_screensharing,
_screenShareActive,
_chatOpen,
+ _chatKeysArrived
}: ConferenceControlsProps) => {
const [isOpenInviteUser, setIsOpenInviteUser] = useState(false);
@@ -59,7 +61,13 @@ const ConferenceControls = ({
};
const handleToggleChat = () => {
- dispatch(toggleChat());
+ if(_chatKeysArrived) {
+ console.log("Toggling chat.");
+ dispatch(toggleChat());
+ }
+ else {
+ console.log("Chat keys have not arrived yet.");
+ }
};
return (
@@ -120,6 +128,7 @@ function mapStateToProps(state: IReduxState) {
_screensharing: isScreenVideoShared(state),
_screenShareActive: screenShareParticipants.length > 0,
_chatOpen: state["features/chat"].isOpen,
+ _chatKeysArrived: state["features/chat"].isKeysArrived,
};
}
diff --git a/react/features/chat/actionTypes.ts b/react/features/chat/actionTypes.ts
index 7db6605b6541..363c6ed428db 100644
--- a/react/features/chat/actionTypes.ts
+++ b/react/features/chat/actionTypes.ts
@@ -172,3 +172,12 @@ export const SET_CHAT_IS_RESIZING = 'SET_CHAT_IS_RESIZING';
* }
*/
export const NOTIFY_PRIVATE_RECIPIENTS_CHANGED = 'NOTIFY_PRIVATE_RECIPIENTS_CHANGED';
+
+ /**
+ * The type of action makes the chat visiable.
+ *
+ * {
+ * type: CHAT_KEYS_ARRIVED
+ * }
+ */
+ export const CHAT_KEYS_ARRIVED = 'CHAT_KEYS_ARRIVED';
\ No newline at end of file
diff --git a/react/features/chat/middleware.ts b/react/features/chat/middleware.ts
index deedbdd47d33..109faeeddc66 100644
--- a/react/features/chat/middleware.ts
+++ b/react/features/chat/middleware.ts
@@ -405,6 +405,14 @@ function _addChatMsgListener(conference: IJitsiConference, store: IStore) {
}
);
+ conference.on(
+ JitsiConferenceEvents.E2EE_CHAT_KEY_RECEIVED,
+ () => {
+ _onKeyReceived(store);
+ }
+ );
+
+
conference.on(
JitsiConferenceEvents.PRIVATE_MESSAGE_RECEIVED,
(participantId: string, message: string, timestamp: number, messageId: string, displayName?: string, isFromVisitor?: boolean) => {
@@ -481,6 +489,12 @@ function _onReactionReceived(store: IStore, { participantId, reactionList, messa
store.dispatch(addMessageReaction(reactionPayload));
}
+function _onKeyReceived(store: IStore) {
+ store.dispatch({
+ type: 'CHAT_KEYS_ARRIVED'
+ });
+}
+
/**
* Handles a received gif message.
*
diff --git a/react/features/chat/reducer.ts b/react/features/chat/reducer.ts
index 1380d6b5130e..98bb1df8dfcf 100644
--- a/react/features/chat/reducer.ts
+++ b/react/features/chat/reducer.ts
@@ -7,6 +7,7 @@ import { IVisitorChatParticipant } from '../visitors/types';
import {
ADD_MESSAGE,
ADD_MESSAGE_REACTION,
+ CHAT_KEYS_ARRIVED,
CLEAR_MESSAGES,
CLOSE_CHAT,
EDIT_MESSAGE,
@@ -40,7 +41,8 @@ const DEFAULT_STATE = {
width: {
current: CHAT_SIZE,
userSet: null
- }
+ },
+ isKeysArrived: false
};
export interface IChatState {
@@ -48,6 +50,7 @@ export interface IChatState {
groupChatWithPermissions: boolean;
isLobbyChatActive: boolean;
isOpen: boolean;
+ isKeysArrived: boolean;
isResizing: boolean;
lastReadMessage?: IMessage;
lobbyMessageRecipient?: {
@@ -184,6 +187,13 @@ ReducerRegistry.register('features/chat', (state = DEFAULT_STATE, ac
privateMessageRecipient: action.participant
};
+ case CHAT_KEYS_ARRIVED:
+ return {
+ ...state,
+ isKeysArrived: true,
+ privateMessageRecipient: action.participant
+ };
+
case CLOSE_CHAT:
return {
...state,
diff --git a/yarn.lock b/yarn.lock
index c86c2cda058b..4989ef7bf266 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -7494,11 +7494,6 @@ crypto-browserify@^3.12.0:
randombytes "^2.1.0"
randomfill "^1.0.4"
-crypto-js@4.1.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.1.1.tgz#9e485bcf03521041bd85844786b83fb7619736cf"
- integrity sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==
-
"crypto@npm:crypto-browserify":
version "3.12.1"
resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.1.tgz#bb8921bec9acc81633379aa8f52d69b0b69e0dac"
@@ -11122,9 +11117,9 @@ levn@^0.4.1:
prelude-ls "^1.2.1"
type-check "~0.4.0"
-"lib-jitsi-meet@https://github.com/internxt/lib-jitsi-meet/releases/download/v.0.0.13/lib-jitsi-meet-0.0.13.tgz":
- version "0.0.13"
- resolved "https://github.com/internxt/lib-jitsi-meet/releases/download/v.0.0.13/lib-jitsi-meet-0.0.13.tgz#8ec080d2c7f70fd78b769c49cce7515ec22a75c9"
+"lib-jitsi-meet@https://github.com/internxt/lib-jitsi-meet/releases/download/v.0.0.16/lib-jitsi-meet-0.0.16.tgz":
+ version "0.0.16"
+ resolved "https://github.com/internxt/lib-jitsi-meet/releases/download/v.0.0.16/lib-jitsi-meet-0.0.16.tgz#2951a8f7e224dd8ac17bab27906bd6123c1c4b77"
dependencies:
"@hexagon/base64" "^2.0.4"
"@jitsi/js-utils" "^2.6.7"
@@ -13219,9 +13214,9 @@ punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1:
integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
qs@^6.9.4, qs@~6.14.0:
- version "6.14.0"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930"
- integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==
+ version "6.14.1"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.1.tgz#a41d85b9d3902f31d27861790506294881871159"
+ integrity sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==
dependencies:
side-channel "^1.1.0"