From a02a7e3ec0b8072fab667999f243bc3b03bfd616 Mon Sep 17 00:00:00 2001 From: chandyego Date: Sun, 21 Sep 2025 20:27:00 -0700 Subject: [PATCH 1/6] Fixing errors --- src/app/content/call-screen-view.tsx | 16 +++++++--------- src/lib/constants.ts | 2 +- src/lib/logos/11labs.tsx | 8 ++++---- src/lib/logos/perplexity.tsx | 12 ++++++------ src/lib/logos/xai.tsx | 16 ++++++++-------- 5 files changed, 26 insertions(+), 28 deletions(-) diff --git a/src/app/content/call-screen-view.tsx b/src/app/content/call-screen-view.tsx index ac93c6d..0847992 100644 --- a/src/app/content/call-screen-view.tsx +++ b/src/app/content/call-screen-view.tsx @@ -26,17 +26,15 @@ async function createScreenshot(): Promise { | undefined; if (!track) return null; - // @ts-expect-error – ImageCapture is not (yet) typed in lib.dom.d.ts - const imageCapture = new ImageCapture(track); - const bitmap = await imageCapture.grabFrame(); - const canvas = document.createElement("canvas"); - canvas.width = bitmap.width; - canvas.height = bitmap.height; + canvas.width = video.videoWidth; + canvas.height = video.videoHeight; const ctx = canvas.getContext("2d"); - ctx?.drawImage(bitmap, 0, 0); - - return canvas.toDataURL("image/png"); + if (ctx) { + ctx.drawImage(video, 0, 0, canvas.width, canvas.height); + return canvas.toDataURL("image/png"); + } + return null; } function downloadDataUrl(dataUrl: string, filename = "screenshot.png") { diff --git a/src/lib/constants.ts b/src/lib/constants.ts index 6ce998a..519d6d0 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -68,7 +68,7 @@ export const providerInformation = { }; export const MESSENGER_CALL_URL = "groupcall/ROOM"; -export const MESSENGER_CONVERSATION_URL = "messages/t/"; +export const MESSENGER_CONVERSATION_URL = "messages/e2ee/t"; export const aiChatProviders = [ "openai", diff --git a/src/lib/logos/11labs.tsx b/src/lib/logos/11labs.tsx index 5998a19..05408cb 100644 --- a/src/lib/logos/11labs.tsx +++ b/src/lib/logos/11labs.tsx @@ -17,8 +17,8 @@ export const ElevenLabsLogo = () => { y2="24" gradientUnits="userSpaceOnUse" > - - + + { y2="24" gradientUnits="userSpaceOnUse" > - - + + { y2="44.121" gradientUnits="userSpaceOnUse" > - - - - + + + + ); diff --git a/src/lib/logos/xai.tsx b/src/lib/logos/xai.tsx index 8d0ac93..a58dc16 100644 --- a/src/lib/logos/xai.tsx +++ b/src/lib/logos/xai.tsx @@ -11,27 +11,27 @@ export const XAILogo = () => { > ); From 5751cbec17e157a6ccfb57def0d96f36f593d3e1 Mon Sep 17 00:00:00 2001 From: chandyego Date: Sun, 21 Sep 2025 23:58:57 -0700 Subject: [PATCH 2/6] Using original frame screenshot code but with ts-expect-error --- src/app/content/call-screen-view.tsx | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/src/app/content/call-screen-view.tsx b/src/app/content/call-screen-view.tsx index 0847992..f4af0ff 100644 --- a/src/app/content/call-screen-view.tsx +++ b/src/app/content/call-screen-view.tsx @@ -18,24 +18,18 @@ async function createScreenshot(): Promise { ) as HTMLVideoElement | null; if (!video) return null; - // Non-standard APIs are still the most concise way to capture a single frame. - // We fall back gracefully if the browser does not support them. - // @ts-expect-error – captureStream is not (yet) typed in lib.dom.d.ts - const track = video.captureStream?.().getVideoTracks?.()[0] as - | MediaStreamTrack - | undefined; - if (!track) return null; + // @ts-expect-error – ImageCapture is not (yet) typed in lib.dom.d.ts + const imageCapture = new ImageCapture(track); + // @ts-expect-error grabFrame missing in TS typings + const bitmap = await imageCapture.grabFrame(); const canvas = document.createElement("canvas"); - canvas.width = video.videoWidth; - canvas.height = video.videoHeight; + canvas.width = bitmap.width; + canvas.height = bitmap.height; const ctx = canvas.getContext("2d"); - if (ctx) { - ctx.drawImage(video, 0, 0, canvas.width, canvas.height); - return canvas.toDataURL("image/png"); - } - return null; -} + ctx?.drawImage(bitmap, 0, 0); + + return canvas.toDataURL("image/png");} function downloadDataUrl(dataUrl: string, filename = "screenshot.png") { const a = document.createElement("a"); From ab1c5491df962de3877786156494178cb08b5db8 Mon Sep 17 00:00:00 2001 From: chandyego Date: Mon, 22 Sep 2025 00:09:41 -0700 Subject: [PATCH 3/6] messenger conversation url may be slightly different; made url.includes() more robust --- src/app/content/call-screen-view.tsx | 3 ++- src/app/content/index.tsx | 10 +++++----- src/lib/constants.ts | 2 +- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/app/content/call-screen-view.tsx b/src/app/content/call-screen-view.tsx index f4af0ff..ea9c4cc 100644 --- a/src/app/content/call-screen-view.tsx +++ b/src/app/content/call-screen-view.tsx @@ -29,7 +29,8 @@ async function createScreenshot(): Promise { const ctx = canvas.getContext("2d"); ctx?.drawImage(bitmap, 0, 0); - return canvas.toDataURL("image/png");} + return canvas.toDataURL("image/png"); +} function downloadDataUrl(dataUrl: string, filename = "screenshot.png") { const a = document.createElement("a"); diff --git a/src/app/content/index.tsx b/src/app/content/index.tsx index ebb55d8..3dd4666 100644 --- a/src/app/content/index.tsx +++ b/src/app/content/index.tsx @@ -10,11 +10,11 @@ import { CallScreenView } from "./call-screen-view"; import { ConversionScreenView } from "./conversion-screen-view"; const ContentScriptUI = () => { - const onTheCallScreen = document.location.href.includes(MESSENGER_CALL_URL); - const onTheConversationScreen = document.location.href.includes( - MESSENGER_CONVERSATION_URL - ); - + const currentUrl = document.location.href; + const onTheCallScreen = currentUrl.includes(MESSENGER_CALL_URL); + const onTheConversationScreen = currentUrl.includes(MESSENGER_CONVERSATION_URL) + && currentUrl.includes('/t'); + return (
{onTheConversationScreen && } diff --git a/src/lib/constants.ts b/src/lib/constants.ts index 519d6d0..5219b58 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -68,7 +68,7 @@ export const providerInformation = { }; export const MESSENGER_CALL_URL = "groupcall/ROOM"; -export const MESSENGER_CONVERSATION_URL = "messages/e2ee/t"; +export const MESSENGER_CONVERSATION_URL = "messages"; export const aiChatProviders = [ "openai", From c2dc8355a164d2d47a4626d24a8392eaed4dc13f Mon Sep 17 00:00:00 2001 From: Chandler Juego Date: Thu, 25 Sep 2025 15:54:56 -0700 Subject: [PATCH 4/6] Only ignore new message line if it is not from user --- src/app/content/conversion-screen-view.tsx | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/app/content/conversion-screen-view.tsx b/src/app/content/conversion-screen-view.tsx index dc4de5e..6f25dd8 100644 --- a/src/app/content/conversion-screen-view.tsx +++ b/src/app/content/conversion-screen-view.tsx @@ -84,9 +84,11 @@ export function ConversionScreenView() { const messageLine = parent.childNodes[1] as HTMLDivElement | undefined; if (!messageLine || (messageLine as any).dataset?.processed) return; if (messageLine.childNodes.length <= 1) return; + + // message is not from client/user if ( messageLine.previousSibling && - messageLine.previousSibling.textContent === "You sent" + messageLine.previousSibling.textContent != "You sent" ) return; @@ -376,9 +378,6 @@ export function ConversionScreenView() { if (userScrolling) { stopChatMonitoring(); userScrolling = false; - } else { - // Programmatic scroll - console.log("programmatic scroll"); } }); return () => { From d9580024ac5339b396f0f796db0af07fefcd0233 Mon Sep 17 00:00:00 2001 From: chandyego Date: Thu, 25 Sep 2025 22:21:26 -0700 Subject: [PATCH 5/6] Adding more logging messages in getNewMessageLine --- src/app/content/conversion-screen-view.tsx | 51 ++++++++++++++++++---- 1 file changed, 42 insertions(+), 9 deletions(-) diff --git a/src/app/content/conversion-screen-view.tsx b/src/app/content/conversion-screen-view.tsx index dc4de5e..b388ef7 100644 --- a/src/app/content/conversion-screen-view.tsx +++ b/src/app/content/conversion-screen-view.tsx @@ -66,30 +66,63 @@ export function ConversionScreenView() { } function getNewMessageLine(mutation: MutationRecord) { - if (!mutation.addedNodes || mutation.addedNodes.length === 0) return; + if (!mutation.addedNodes || mutation.addedNodes.length === 0) { + logMessage("No added nodes found in mutation"); + return; + } const div = mutation.addedNodes[0]; - if (!(div instanceof HTMLDivElement)) return; + if (!div) { + return; + } + if (!(div instanceof HTMLDivElement)) { + return; + } + const divParent = div.parentElement; if (!divParent) return; + const children = Array.from(divParent.childNodes); if (children[children.length - 1] !== div) return; + // Look for the message container which has class 'html-div' + // This is the div that Facebook uses to display message content const messageContainer = div.querySelector( "div.html-div" ) as HTMLDivElement | null; - if (!messageContainer) return; + if (!messageContainer) { + return; + } + const parent = messageContainer.parentElement; - if (!parent) return; + if (!parent) { + logMessage("Message container has no parent element"); + return; + } - const messageLine = parent.childNodes[1] as HTMLDivElement | undefined; - if (!messageLine || (messageLine as any).dataset?.processed) return; - if (messageLine.childNodes.length <= 1) return; + // Get the actual message line (second child of parent) + const messageLine = parent.childNodes[1] as HTMLDivElement | undefined; + if (!messageLine) { + logMessage("Message line not found (no second child node)"); + return; + } + + if ((messageLine as any).dataset?.processed) { + logMessage("Message already processed (found processed flag)"); + return; + } + + if (messageLine.childNodes.length <= 1) { + logMessage("Message line has no content (empty message)"); + return; + } + if ( messageLine.previousSibling && messageLine.previousSibling.textContent === "You sent" - ) + ) { return; - + } + return messageLine; } From bb1101f21a327fca7381b4e09ac4745ddc47072b Mon Sep 17 00:00:00 2001 From: chandyego Date: Thu, 25 Sep 2025 22:23:20 -0700 Subject: [PATCH 6/6] removed extra curly brace --- src/app/content/conversion-screen-view.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/app/content/conversion-screen-view.tsx b/src/app/content/conversion-screen-view.tsx index f0c1a01..a2f95bf 100644 --- a/src/app/content/conversion-screen-view.tsx +++ b/src/app/content/conversion-screen-view.tsx @@ -121,7 +121,6 @@ export function ConversionScreenView() { messageLine.previousSibling.textContent != "You sent" ) return; - } return messageLine; }