Skip to content

Commit bcf5b87

Browse files
committed
chore: adds snap_trackEvent and origin param
1 parent c10dcac commit bcf5b87

10 files changed

Lines changed: 124 additions & 12 deletions

File tree

packages/snap/src/core/handlers/onClientRequest/ClientRequestHandler.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ export class ClientRequestHandler {
8181
account,
8282
base64EncodedTransaction,
8383
scope,
84+
undefined,
8485
options,
8586
);
8687
}

packages/snap/src/core/handlers/onCronjob/backgroundEvents/onTransactionAdded.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export const OnTransactionAddedRequestStruct = object({
1919
/** The base64 encoded transaction or transaction message. */
2020
base64EncodedTransaction: Base64Struct,
2121
scope: NetworkStruct,
22+
origin: string(),
2223
}),
2324
});
2425

@@ -35,14 +36,15 @@ export const onTransactionAdded: OnCronjobHandler = async ({ request }) => {
3536

3637
assert(request, OnTransactionAddedRequestStruct);
3738

38-
const { accountId, base64EncodedTransaction, scope } = request.params;
39+
const { accountId, base64EncodedTransaction, scope, origin } = request.params;
3940

4041
const account = await keyring.getAccountOrThrow(accountId);
4142

4243
await analyticsService.trackEventTransactionAdded(
4344
account,
4445
base64EncodedTransaction,
4546
scope,
47+
origin,
4648
);
4749
} catch (error) {
4850
logger.error(error);

packages/snap/src/core/handlers/onCronjob/backgroundEvents/onTransactionApproved.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export const OnTransactionApprovedRequestStruct = object({
1919
/** The base64 encoded transaction or transaction message. */
2020
base64EncodedTransaction: Base64Struct,
2121
scope: NetworkStruct,
22+
origin: string(),
2223
}),
2324
});
2425

@@ -35,14 +36,15 @@ export const onTransactionApproved: OnCronjobHandler = async ({ request }) => {
3536

3637
assert(request, OnTransactionApprovedRequestStruct);
3738

38-
const { accountId, base64EncodedTransaction, scope } = request.params;
39+
const { accountId, base64EncodedTransaction, scope, origin } = request.params;
3940

4041
const account = await keyring.getAccountOrThrow(accountId);
4142

4243
await analyticsService.trackEventTransactionApproved(
4344
account,
4445
base64EncodedTransaction,
4546
scope,
47+
origin,
4648
);
4749
} catch (error) {
4850
logger.error(error);

packages/snap/src/core/handlers/onCronjob/backgroundEvents/onTransactionFinalized.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {
99
transactionsService,
1010
} from '../../../../snapContext';
1111
import logger from '../../../utils/logger';
12-
import { UuidStruct } from '../../../validation/structs';
12+
import { NetworkStruct, UuidStruct } from '../../../validation/structs';
1313
import { ScheduleBackgroundEventMethod } from './ScheduleBackgroundEventMethod';
1414

1515
export const OnTransactionFinalizedRequestStruct = object({
@@ -19,6 +19,7 @@ export const OnTransactionFinalizedRequestStruct = object({
1919
params: object({
2020
accountId: UuidStruct,
2121
transaction: TransactionStruct,
22+
origin: string(),
2223
}),
2324
});
2425

@@ -36,7 +37,7 @@ export const onTransactionFinalized: OnCronjobHandler = async ({ request }) => {
3637

3738
assert(request, OnTransactionFinalizedRequestStruct);
3839

39-
const { accountId, transaction } = request.params;
40+
const { accountId, transaction, origin } = request.params;
4041

4142
const account = await keyring.getAccountOrThrow(accountId);
4243

@@ -64,6 +65,7 @@ export const onTransactionFinalized: OnCronjobHandler = async ({ request }) => {
6465
const trackEventPromise = analyticsService.trackEventTransactionFinalized(
6566
account,
6667
transaction,
68+
origin,
6769
);
6870

6971
await Promise.all([

packages/snap/src/core/handlers/onCronjob/backgroundEvents/onTransactionRejected.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export const OnTransactionRejectedRequestStruct = object({
1919
/** The base64 encoded transaction or transaction message. */
2020
base64EncodedTransaction: Base64Struct,
2121
scope: NetworkStruct,
22+
origin: string(),
2223
}),
2324
});
2425

@@ -35,14 +36,15 @@ export const onTransactionRejected: OnCronjobHandler = async ({ request }) => {
3536

3637
assert(request, OnTransactionRejectedRequestStruct);
3738

38-
const { accountId, base64EncodedTransaction, scope } = request.params;
39+
const { accountId, base64EncodedTransaction, scope, origin } = request.params;
3940

4041
const account = await keyring.getAccountOrThrow(accountId);
4142

4243
await analyticsService.trackEventTransactionRejected(
4344
account,
4445
base64EncodedTransaction,
4546
scope,
47+
origin,
4648
);
4749
} catch (error) {
4850
logger.error(error);

packages/snap/src/core/handlers/onCronjob/backgroundEvents/onTransactionSubmitted.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ export const OnTransactionSubmittedRequestStruct = object({
2020
transactionMessageBase64Encoded: Base64Struct,
2121
signature: string(),
2222
scope: NetworkStruct,
23+
origin: string(),
2324
}),
2425
});
2526

@@ -36,8 +37,13 @@ export const onTransactionSubmitted: OnCronjobHandler = async ({ request }) => {
3637

3738
assert(request, OnTransactionSubmittedRequestStruct);
3839

39-
const { accountId, transactionMessageBase64Encoded, signature, scope } =
40-
request.params;
40+
const {
41+
accountId,
42+
transactionMessageBase64Encoded,
43+
signature,
44+
scope,
45+
origin,
46+
} = request.params;
4147

4248
const account = await keyring.getAccountOrThrow(accountId);
4349

@@ -46,6 +52,7 @@ export const onTransactionSubmitted: OnCronjobHandler = async ({ request }) => {
4652
transactionMessageBase64Encoded,
4753
signature,
4854
scope,
55+
origin,
4956
);
5057
} catch (error) {
5158
logger.error(error);

packages/snap/src/core/handlers/onKeyringRequest/Keyring.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -407,6 +407,7 @@ export class SolanaKeyring implements Keyring {
407407
request: { method, params },
408408
scope,
409409
account: accountId,
410+
origin,
410411
} = request;
411412

412413
const account = await this.getAccountOrThrow(accountId);
@@ -441,6 +442,7 @@ export class SolanaKeyring implements Keyring {
441442
account,
442443
base64EncodedTransaction,
443444
scope,
445+
origin,
444446
options,
445447
);
446448
}

packages/snap/src/core/services/analytics/AnalyticsService.ts

Lines changed: 92 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,60 +20,147 @@ export class AnalyticsService {
2020
account: SolanaKeyringAccount,
2121
base64EncodedTransaction: string,
2222
scope: Network,
23+
origin?: string,
2324
): Promise<void> {
2425
this.#logger.log(`[📣 AnalyticsService] Tracking event transaction added`);
2526

2627
assert(base64EncodedTransaction, Base64Struct);
27-
// TODO: Implement
28+
29+
await snap.request({
30+
method: 'snap_trackEvent',
31+
params: {
32+
event: {
33+
event: 'Transaction Added',
34+
properties: {
35+
message: 'Snap transaction added',
36+
origin: origin || null,
37+
account_id: account.id,
38+
account_address: account.address,
39+
account_type: account.type,
40+
chain_id: scope,
41+
},
42+
},
43+
},
44+
});
2845
}
2946

3047
async trackEventTransactionApproved(
3148
account: SolanaKeyringAccount,
3249
base64EncodedTransaction: string,
3350
scope: Network,
51+
origin?: string,
3452
): Promise<void> {
3553
this.#logger.log(
3654
`[📣 AnalyticsService] Tracking event transaction approved`,
3755
);
3856

3957
assert(base64EncodedTransaction, Base64Struct);
40-
// TODO: Implement
58+
59+
await snap.request({
60+
method: 'snap_trackEvent',
61+
params: {
62+
event: {
63+
event: 'Transaction Approved',
64+
properties: {
65+
message: 'Snap transaction approved',
66+
origin: origin || null,
67+
account_id: account.id,
68+
account_address: account.address,
69+
account_type: account.type,
70+
chain_id: scope,
71+
},
72+
},
73+
},
74+
});
4175
}
4276

4377
async trackEventTransactionSubmitted(
4478
account: SolanaKeyringAccount,
4579
transactionMessageBase64Encoded: string,
4680
signature: string,
4781
scope: Network,
82+
origin?: string,
4883
): Promise<void> {
4984
this.#logger.log(
5085
`[📣 AnalyticsService] Tracking event transaction submitted`,
5186
);
5287

5388
assert(transactionMessageBase64Encoded, Base64Struct);
54-
// TODO: Implement
89+
90+
await snap.request({
91+
method: 'snap_trackEvent',
92+
params: {
93+
event: {
94+
event: 'Transaction Submitted',
95+
properties: {
96+
message: 'Snap transaction submitted',
97+
origin: origin || null,
98+
account_id: account.id,
99+
account_address: account.address,
100+
account_type: account.type,
101+
chain_id: scope,
102+
},
103+
},
104+
},
105+
});
55106
}
56107

57108
async trackEventTransactionFinalized(
58109
account: SolanaKeyringAccount,
59110
transaction: Transaction,
111+
origin?: string,
60112
): Promise<void> {
61113
this.#logger.log(
62114
`[📣 AnalyticsService] Tracking event transaction finalized`,
63115
);
64-
// TODO: Implement
116+
117+
await snap.request({
118+
method: 'snap_trackEvent',
119+
params: {
120+
event: {
121+
event: 'Transaction Finalized',
122+
properties: {
123+
message: 'Snap transaction finalized',
124+
origin: origin || null,
125+
account_id: account.id,
126+
account_address: account.address,
127+
account_type: account.type,
128+
chain_id: transaction.chain,
129+
transaction_status: transaction.status,
130+
transaction_type: transaction.type,
131+
},
132+
},
133+
},
134+
});
65135
}
66136

67137
async trackEventTransactionRejected(
68138
account: SolanaKeyringAccount,
69139
base64EncodedTransaction: string,
70140
scope: Network,
141+
origin?: string,
71142
): Promise<void> {
72143
this.#logger.log(
73144
`[📣 AnalyticsService] Tracking event transaction rejected`,
74145
);
75146

76147
assert(base64EncodedTransaction, Base64Struct);
77-
// TODO: Implement
148+
149+
await snap.request({
150+
method: 'snap_trackEvent',
151+
params: {
152+
event: {
153+
event: 'Transaction Rejected',
154+
properties: {
155+
message: 'Snap transaction rejected',
156+
origin: origin || null,
157+
account_id: account.id,
158+
account_address: account.address,
159+
account_type: account.type,
160+
chain_id: scope,
161+
},
162+
},
163+
},
164+
});
78165
}
79166
}

packages/snap/src/core/services/confirmation/ConfirmationHandler.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ export class ConfirmationHandler {
7979
},
8080
scope,
8181
account: accountId,
82+
origin,
8283
} = request;
8384

8485
// Trigger the side effects that need to happen when the transaction is shown in confirmation UI
@@ -92,6 +93,7 @@ export class ConfirmationHandler {
9293
accountId,
9394
base64EncodedTransaction,
9495
scope,
96+
origin,
9597
},
9698
},
9799
},
@@ -118,6 +120,7 @@ export class ConfirmationHandler {
118120
accountId,
119121
base64EncodedTransaction,
120122
scope,
123+
origin,
121124
},
122125
},
123126
},
@@ -137,6 +140,7 @@ export class ConfirmationHandler {
137140
accountId,
138141
base64EncodedTransaction,
139142
scope,
143+
origin,
140144
},
141145
},
142146
},

packages/snap/src/core/services/wallet/WalletService.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,7 @@ export class WalletService {
220220
account: SolanaKeyringAccount,
221221
transactionMessageBase64Encoded: string,
222222
scope: Network,
223+
origin?: string,
223224
options?: SolanaSignAndSendTransactionOptions,
224225
): Promise<SolanaSignAndSendTransactionResponse> {
225226
const signConfig: DecompileTransactionMessageFetchingLookupTablesConfig =
@@ -285,6 +286,7 @@ export class WalletService {
285286
transactionMessageBase64Encoded,
286287
signature,
287288
scope,
289+
origin: origin || null,
288290
},
289291
},
290292
},
@@ -340,6 +342,7 @@ export class WalletService {
340342
params: {
341343
accountId: account.id,
342344
transaction: mappedTransactionWithAccountId,
345+
origin: origin || null,
343346
},
344347
},
345348
},

0 commit comments

Comments
 (0)