From abd909c03ab88428d297091fc2667e6fb40befc1 Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 13 Jan 2023 18:27:22 +0000 Subject: [PATCH 1/3] Log undecryptable to-device events Listen for the new undecryptable to-device event event and log events for it in Posthog & Sentry, and make it visible in the call flow diagram. --- src/PosthogAnalytics.ts | 2 ++ src/PosthogEvents.ts | 14 ++++++++++ src/room/GroupCallInspector.tsx | 46 ++++++++++++++++++++++----------- 3 files changed, 47 insertions(+), 15 deletions(-) diff --git a/src/PosthogAnalytics.ts b/src/PosthogAnalytics.ts index 4ddc4b0..28f50d2 100644 --- a/src/PosthogAnalytics.ts +++ b/src/PosthogAnalytics.ts @@ -28,6 +28,7 @@ import { SignupTracker, MuteCameraTracker, MuteMicrophoneTracker, + UndecryptableToDeviceEventTracker, } from "./PosthogEvents"; import { Config } from "./config/Config"; import { getUrlParams } from "./UrlParams"; @@ -415,4 +416,5 @@ export class PosthogAnalytics { public eventLogin = new LoginTracker(); public eventMuteMicrophone = new MuteMicrophoneTracker(); public eventMuteCamera = new MuteCameraTracker(); + public eventUndecryptableToDevice = new UndecryptableToDeviceEventTracker(); } diff --git a/src/PosthogEvents.ts b/src/PosthogEvents.ts index f1b4bae..aa8aa32 100644 --- a/src/PosthogEvents.ts +++ b/src/PosthogEvents.ts @@ -149,3 +149,17 @@ export class MuteCameraTracker { }); } } + +interface UndecryptableToDeviceEvent { + eventName: "UndecryptableToDeviceEvent"; + callId: string; +} + +export class UndecryptableToDeviceEventTracker { + track(callId: string) { + PosthogAnalytics.instance.trackEvent({ + eventName: "UndecryptableToDeviceEvent", + callId, + }); + } +} diff --git a/src/room/GroupCallInspector.tsx b/src/room/GroupCallInspector.tsx index 3257928..73b2a00 100644 --- a/src/room/GroupCallInspector.tsx +++ b/src/room/GroupCallInspector.tsx @@ -14,6 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +import * as Sentry from "@sentry/react"; import { Resizable } from "re-resizable"; import React, { useEffect, @@ -34,6 +35,7 @@ import { CallEvent } from "matrix-js-sdk/src/webrtc/call"; import styles from "./GroupCallInspector.module.css"; import { SelectInput } from "../input/SelectInput"; +import { PosthogAnalytics } from "../PosthogAnalytics"; interface InspectorContextState { eventsByUserId?: { [userId: string]: SequenceDiagramMatrixEvent[] }; @@ -108,6 +110,19 @@ function formatTimestamp(timestamp: number | Date) { return dateFormatter.format(timestamp); } +function formatType(event: SequenceDiagramMatrixEvent): string { + if (event.content.msgtype === "m.bad.encrypted") return "Undecryptable"; + return event.type; +} + +function lineForEvent(event: SequenceDiagramMatrixEvent): string { + return `${getUserName(event.from)} ${ + event.ignored ? "-x" : "->>" + } ${getUserName(event.to)}: ${formatTimestamp(event.timestamp)} ${formatType( + event + )} ${formatContent(event.type, event.content)}`; +} + export const InspectorContext = createContext< [ @@ -187,21 +202,7 @@ export function SequenceDiagramViewer({ participant ${getUserName(localUserId)} participant Room participant ${selectedUserId ? getUserName(selectedUserId) : "unknown"} - ${ - events - ? events - .map( - ({ to, from, timestamp, type, content, ignored }) => - `${getUserName(from)} ${ignored ? "-x" : "->>"} ${getUserName( - to - )}: ${formatTimestamp(timestamp)} ${type} ${formatContent( - type, - content - )}` - ) - .join("\n ") - : "" - } + ${events ? events.map(lineForEvent).join("\n ") : ""} `; mermaid.mermaidAPI.render("mermaid", graphDefinition, (svgCode: string) => { @@ -389,12 +390,23 @@ function useGroupCallState( function onSendVoipEvent(event: Record) { dispatch({ type: CallEvent.SendVoipEvent, rawEvent: event }); } + + function onUndecryptableToDevice(event: MatrixEvent) { + dispatch({ type: ClientEvent.ReceivedVoipEvent, event }); + + Sentry.captureMessage("Undecryptable to-device Event"); + PosthogAnalytics.instance.eventUndecryptableToDevice.track( + groupCall.groupCallId + ); + } + client.on(RoomStateEvent.Events, onUpdateRoomState); //groupCall.on("calls_changed", onCallsChanged); groupCall.on(CallEvent.SendVoipEvent, onSendVoipEvent); //client.on("state", onCallsChanged); //client.on("hangup", onCallHangup); client.on(ClientEvent.ReceivedVoipEvent, onReceivedVoipEvent); + client.on(ClientEvent.UndecryptableToDeviceEvent, onUndecryptableToDevice); onUpdateRoomState(); @@ -405,6 +417,10 @@ function useGroupCallState( //client.removeListener("state", onCallsChanged); //client.removeListener("hangup", onCallHangup); client.removeListener(ClientEvent.ReceivedVoipEvent, onReceivedVoipEvent); + client.removeListener( + ClientEvent.UndecryptableToDeviceEvent, + onUndecryptableToDevice + ); }; }, [client, groupCall]); From a2a1a9032ac414ee3a00ad1b12f2c6f2de87d3c2 Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 13 Jan 2023 18:33:58 +0000 Subject: [PATCH 2/3] Use js-sdk from branch --- package.json | 2 +- yarn.lock | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index b271f5d..b3257d5 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "i18next": "^21.10.0", "i18next-browser-languagedetector": "^6.1.8", "i18next-http-backend": "^1.4.4", - "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#c3d422f5fb1efac400da4c4ade592db3831445f9", + "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#79faee7a67f2cefa2a605aad1fad785b75e459c5", "matrix-widget-api": "^1.0.0", "mermaid": "^8.13.8", "normalize.css": "^8.0.1", diff --git a/yarn.lock b/yarn.lock index bd5b2ce..51ced13 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10362,9 +10362,9 @@ matrix-events-sdk@0.0.1: resolved "https://registry.yarnpkg.com/matrix-events-sdk/-/matrix-events-sdk-0.0.1.tgz#c8c38911e2cb29023b0bbac8d6f32e0de2c957dd" integrity sha512-1QEOsXO+bhyCroIe2/A5OwaxHvBm7EsSQ46DEDn8RBIfQwN5HWBpFvyWWR4QY0KHPPnnJdI99wgRiAl7Ad5qaA== -"matrix-js-sdk@github:matrix-org/matrix-js-sdk#c3d422f5fb1efac400da4c4ade592db3831445f9": +"matrix-js-sdk@github:matrix-org/matrix-js-sdk#79faee7a67f2cefa2a605aad1fad785b75e459c5": version "23.0.0" - resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/c3d422f5fb1efac400da4c4ade592db3831445f9" + resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/79faee7a67f2cefa2a605aad1fad785b75e459c5" dependencies: "@babel/runtime" "^7.12.5" "@matrix-org/matrix-sdk-crypto-js" "^0.1.0-alpha.2" @@ -10375,7 +10375,6 @@ matrix-events-sdk@0.0.1: matrix-events-sdk "0.0.1" matrix-widget-api "^1.0.0" p-retry "4" - qs "^6.9.6" sdp-transform "^2.14.1" unhomoglyph "^1.0.6" uuid "9" From 6168109894db251261d1bef21704bad98e574086 Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 13 Jan 2023 21:41:21 +0000 Subject: [PATCH 3/3] Use merged js-sdk commit --- package.json | 2 +- yarn.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index b3257d5..f7bbbb0 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "i18next": "^21.10.0", "i18next-browser-languagedetector": "^6.1.8", "i18next-http-backend": "^1.4.4", - "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#79faee7a67f2cefa2a605aad1fad785b75e459c5", + "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#7b10fa367df357b51c2e78e220d39e5e7967f9e3", "matrix-widget-api": "^1.0.0", "mermaid": "^8.13.8", "normalize.css": "^8.0.1", diff --git a/yarn.lock b/yarn.lock index 51ced13..cd7b188 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10362,9 +10362,9 @@ matrix-events-sdk@0.0.1: resolved "https://registry.yarnpkg.com/matrix-events-sdk/-/matrix-events-sdk-0.0.1.tgz#c8c38911e2cb29023b0bbac8d6f32e0de2c957dd" integrity sha512-1QEOsXO+bhyCroIe2/A5OwaxHvBm7EsSQ46DEDn8RBIfQwN5HWBpFvyWWR4QY0KHPPnnJdI99wgRiAl7Ad5qaA== -"matrix-js-sdk@github:matrix-org/matrix-js-sdk#79faee7a67f2cefa2a605aad1fad785b75e459c5": +"matrix-js-sdk@github:matrix-org/matrix-js-sdk#7b10fa367df357b51c2e78e220d39e5e7967f9e3": version "23.0.0" - resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/79faee7a67f2cefa2a605aad1fad785b75e459c5" + resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/7b10fa367df357b51c2e78e220d39e5e7967f9e3" dependencies: "@babel/runtime" "^7.12.5" "@matrix-org/matrix-sdk-crypto-js" "^0.1.0-alpha.2"