Refactor WebSocket message interfaces
Changes:
- Replace AccountTextMessage with an extendable ContactMessage interface
- Add accountId parameter to server-side WebSocket callbacks
- Set the accountId for WebRTC messages on server-side for security
- Rename all WebRTC and SDP variables to proper camelCase or PascalCase
GitLab: #147
Change-Id: I125b5431821b03ef4d46b751eb1c13830017ccff
diff --git a/client/src/contexts/WebSocketProvider.tsx b/client/src/contexts/WebSocketProvider.tsx
index 917dc22..8c530c6 100644
--- a/client/src/contexts/WebSocketProvider.tsx
+++ b/client/src/contexts/WebSocketProvider.tsx
@@ -15,19 +15,27 @@
* License along with this program. If not, see
* <https://www.gnu.org/licenses/>.
*/
-import {
- buildWebSocketCallbacks,
- WebSocketCallbacks,
- WebSocketMessage,
- WebSocketMessageTable,
- WebSocketMessageType,
-} from 'jami-web-common';
+import { WebSocketMessage, WebSocketMessageTable, WebSocketMessageType } from 'jami-web-common';
import { createContext, useCallback, useEffect, useRef, useState } from 'react';
import { apiUrl } from '../utils/constants';
import { WithChildren } from '../utils/utils';
import { useAuthContext } from './AuthProvider';
+type WebSocketCallback<T extends WebSocketMessageType> = (data: WebSocketMessageTable[T]) => void;
+
+type WebSocketCallbacks = {
+ [key in WebSocketMessageType]: Set<WebSocketCallback<key>>;
+};
+
+const buildWebSocketCallbacks = (): WebSocketCallbacks => {
+ const webSocketCallback = {} as WebSocketCallbacks;
+ for (const messageType of Object.values(WebSocketMessageType)) {
+ webSocketCallback[messageType] = new Set<WebSocketCallback<typeof messageType>>();
+ }
+ return webSocketCallback;
+};
+
type BindFunction = <T extends WebSocketMessageType>(
type: T,
callback: (data: WebSocketMessageTable[T]) => void