From d3f8e740deee7fba4d07910bbb076156cae3f588 Mon Sep 17 00:00:00 2001 From: DS Boyce <260543580+ds-boyce@users.noreply.github.com> Date: Wed, 10 Jun 2026 14:44:36 -0700 Subject: [PATCH] Log when a chat invite is posted or messaged (#10858) --- src/analytics/metrics/types.ts | 4 ++++ src/screens/Messages/components/MessagesList.tsx | 10 ++++++++++ src/view/com/composer/Composer.tsx | 14 ++++++++++++++ 3 files changed, 28 insertions(+) diff --git a/src/analytics/metrics/types.ts b/src/analytics/metrics/types.ts index 6f043189d2..eec5c3c207 100644 --- a/src/analytics/metrics/types.ts +++ b/src/analytics/metrics/types.ts @@ -619,6 +619,10 @@ export type Events = { convoId: string method: 'post' | 'copy' | 'native' } + 'groupchat:inviteLink:shared': { + convoId: string + method: 'post' | 'dm' + } // Group chat owner actions 'groupchat:owner:editName': { diff --git a/src/screens/Messages/components/MessagesList.tsx b/src/screens/Messages/components/MessagesList.tsx index 7017e5ac76..f0b1389b86 100644 --- a/src/screens/Messages/components/MessagesList.tsx +++ b/src/screens/Messages/components/MessagesList.tsx @@ -30,6 +30,7 @@ import { AppBskyRichtextFacet, ChatBskyConvoDefs, type ChatBskyEmbedJoinLink, + ChatBskyGroupDefs, RichText, } from '@atproto/api' import {useScrollEdgeEffectRef} from '@bsky.app/expo-scroll-edge-effect' @@ -478,6 +479,15 @@ export function MessagesList({ isOwner: convoState.convo.primaryMember?.did === currentAccount?.did, }) } + if ( + embedView?.$type === 'chat.bsky.embed.joinLink#view' && + ChatBskyGroupDefs.isJoinLinkPreviewView(embedView.joinLinkPreview) + ) { + ax.metric('groupchat:inviteLink:shared', { + convoId: embedView.joinLinkPreview.convoId, + method: 'dm', + }) + } }, [ agent, diff --git a/src/view/com/composer/Composer.tsx b/src/view/com/composer/Composer.tsx index cce7c9905c..39c4292892 100644 --- a/src/view/com/composer/Composer.tsx +++ b/src/view/com/composer/Composer.tsx @@ -1071,6 +1071,20 @@ export const ComposePost = ({ isReply: !!replyTo, }) } + if (postUri) { + for (const q of linkQueries) { + const resolved = q.data + if ( + resolved?.type === 'chat-invite' && + ChatBskyGroupDefs.isJoinLinkPreviewView(resolved.view) + ) { + ax.metric('groupchat:inviteLink:shared', { + convoId: resolved.view.convoId, + method: 'post', + }) + } + } + } } if (postUri && !replyTo) { emitPostCreated()