Skip to content

Commit 3fd4e31

Browse files
committed
feat(analytics): setup analytics client + add some trackEvents
1 parent d9f787a commit 3fd4e31

File tree

9 files changed

+74
-9
lines changed

9 files changed

+74
-9
lines changed

packages/analytics-client/src/v2/client.ts

-2
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,6 @@ export type BaseAnalyticsProps = {
8484
id: string;
8585
originatorInfo?: OriginatorInfo; // Now uses local type
8686
sdkVersion?: string;
87-
commLayerVersion?: string;
88-
walletVersion?: string;
8987
// TODO What is this?
9088
anonId: string;
9189
};

packages/sdk-communication-layer/src/services/RemoteCommunication/ConnectionManager/rejectChannel.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// packages/sdk-communication-layer/src/services/RemoteCommunication/ConnectionManager/connectToChannel.ts
22
import { validate } from 'uuid';
3-
import { SendAnalytics } from '@metamask/analytics-client';
3+
import { SendAnalytics, trackEvent } from '@metamask/analytics-client';
44
import { TrackingEvents } from '@metamask/sdk-types';
55
import { RemoteCommunicationState } from '../../../RemoteCommunication';
66
import { EventType } from '../../../types/EventType';
@@ -47,6 +47,11 @@ export async function rejectChannel({
4747
}
4848

4949
// Send analytics event
50+
trackEvent({
51+
name: 'sdk_connection_rejected',
52+
transport_type: 'websocket',
53+
});
54+
5055
SendAnalytics(
5156
{
5257
id: channelId,

packages/sdk-communication-layer/src/services/RemoteCommunication/EventListeners/handleClientsConnectedEvent.ts

+14-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { SendAnalytics } from '@metamask/analytics-client';
1+
import { SendAnalytics, trackEvent } from '@metamask/analytics-client';
22
import { TrackingEvents } from '@metamask/sdk-types';
33
import packageJson from '../../../../package.json';
44
import { RemoteCommunication } from '../../../RemoteCommunication';
@@ -28,6 +28,19 @@ export function handleClientsConnectedEvent(instance: RemoteCommunication) {
2828
);
2929

3030
if (state.analytics && state.channelId) {
31+
32+
if (!state.isOriginator) {
33+
trackEvent({
34+
name: 'sdk_connection_established',
35+
transport_type: 'websocket',
36+
})
37+
} else {
38+
trackEvent({
39+
name: 'wallet_connection_request_received',
40+
platform: 'mobile',
41+
})
42+
}
43+
3144
SendAnalytics(
3245
{
3346
id: state.channelId,

packages/sdk-communication-layer/src/services/RemoteCommunication/EventListeners/handleKeysExchangedEvent.ts

+13-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { SendAnalytics } from '@metamask/analytics-client';
1+
import { SendAnalytics, trackEvent } from '@metamask/analytics-client';
22
import { type OriginatorInfo, TrackingEvents } from '@metamask/sdk-types';
33
import packageJson from '../../../../package.json';
44
import { DEFAULT_SESSION_TIMEOUT_MS } from '../../../config';
@@ -63,6 +63,18 @@ export function handleKeysExchangedEvent(instance: RemoteCommunication) {
6363
setLastActiveDate(instance, new Date());
6464

6565
if (state.analytics && state.channelId) {
66+
if (state.isOriginator) {
67+
trackEvent({
68+
name: 'wallet_connection_user_approved',
69+
platform: 'mobile',
70+
})
71+
} else {
72+
trackEvent({
73+
name: 'sdk_connection_established',
74+
transport_type: 'websocket',
75+
})
76+
}
77+
6678
SendAnalytics(
6779
{
6880
id: state.channelId,

packages/sdk-communication-layer/src/services/SocketService/ConnectionManager/handleJoinChannelResult.ts

+13-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { SendAnalytics } from '@metamask/analytics-client';
1+
import { SendAnalytics, trackEvent } from '@metamask/analytics-client';
22
import { TrackingEvents } from '@metamask/sdk-types';
33
import { SocketService } from '../../../SocketService';
44
import { EventType } from '../../../types/EventType';
@@ -102,6 +102,18 @@ export const handleJoinChannelResults = async (
102102
remote.state.authorized = true;
103103
remote.emit(EventType.AUTHORIZED);
104104

105+
if (isOriginator) {
106+
trackEvent({
107+
name: 'wallet_connection_user_approved',
108+
platform: 'mobile',
109+
})
110+
} else {
111+
trackEvent({
112+
name: 'sdk_connection_established',
113+
transport_type: 'websocket',
114+
})
115+
}
116+
105117
SendAnalytics(
106118
{
107119
id: channelId ?? '',

packages/sdk-communication-layer/src/services/SocketService/EventListeners/handleChannelRejected.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { SendAnalytics } from '@metamask/analytics-client';
1+
import { SendAnalytics, trackEvent } from '@metamask/analytics-client';
22
import { TrackingEvents } from '@metamask/sdk-types';
33
import { SocketService } from '../../../SocketService';
44
import { ConnectionStatus } from '../../../types/ConnectionStatus';
@@ -32,6 +32,11 @@ export function handleChannelRejected(
3232
instance.remote.state.originatorInfo,
3333
);
3434

35+
trackEvent({
36+
name: 'wallet_connection_user_rejected',
37+
platform: 'mobile',
38+
})
39+
3540
// Emit analytics event
3641
SendAnalytics(
3742
{

packages/sdk-communication-layer/src/services/SocketService/EventListeners/handleMessage.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { SendAnalytics } from '@metamask/analytics-client';
1+
import { SendAnalytics, trackEvent } from '@metamask/analytics-client';
22
import { TrackingEvents } from '@metamask/sdk-types';
33
import packageJson from '../../../../package.json';
44
import { SocketService } from '../../../SocketService';
@@ -212,6 +212,11 @@ export function handleMessage(instance: SocketService, channelId: string) {
212212
instance.remote.state.analytics &&
213213
lcLogguedRPCs.includes(initialRPCMethod.method.toLowerCase())
214214
) {
215+
trackEvent({
216+
name: 'sdk_action_succeeded',
217+
action: initialRPCMethod.method,
218+
})
219+
215220
SendAnalytics(
216221
{
217222
id: instance.remote.state.channelId ?? '',

packages/sdk-communication-layer/src/services/SocketService/MessageHandlers/handleSendMessage.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { TrackingEvents } from '@metamask/sdk-types';
2-
import { SendAnalytics } from '@metamask/analytics-client';
2+
import { SendAnalytics, trackEvent } from '@metamask/analytics-client';
33
import { SocketService } from '../../../SocketService';
44
import { CommunicationLayerMessage } from '../../../types/CommunicationLayerMessage';
55
import { logger } from '../../../utils/logger';
@@ -74,6 +74,10 @@ export async function handleSendMessage(
7474
message.method &&
7575
lcLogguedRPCs.includes(message.method.toLowerCase())
7676
) {
77+
trackEvent({
78+
name: 'sdk_action_requested',
79+
action: message.method,
80+
})
7781
SendAnalytics(
7882
{
7983
id: instance.remote.state.channelId ?? '',

packages/sdk/src/services/MetaMaskSDK/InitializerManager/setupAnalytics.ts

+11
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { DEFAULT_SERVER_URL } from '@metamask/sdk-communication-layer';
22
import { type OriginatorInfo } from '@metamask/sdk-types';
33
import { Analytics } from '../../Analytics';
44
import { MetaMaskSDK } from '../../../sdk';
5+
import { initAnalyticsClient } from '@metamask/analytics-client';
56

67
/**
78
* Sets up the analytics instance for the MetaMask SDK.
@@ -34,4 +35,14 @@ export async function setupAnalytics(instance: MetaMaskSDK) {
3435
enabled: options.enableAnalytics,
3536
originatorInfo: originator,
3637
});
38+
39+
initAnalyticsClient({
40+
originatorInfo: originator,
41+
sdkVersion: instance.getVersion(),
42+
// TODO Set ID and anonId
43+
id: 'TODO: SET ID',
44+
anonId: 'TODO: SET ANON ID',
45+
pushInterval: 1000,
46+
analyticsUrl: options.communicationServerUrl ?? DEFAULT_SERVER_URL,
47+
});
3748
}

0 commit comments

Comments
 (0)