Skip to content

Commit 50877de

Browse files
authored
chore: adds snap_trackEvent and origin param (#418)
We are adding the snap_trackEvent to the AnalyticsService and passing the `origin` param to each tracked event.
1 parent 325b02a commit 50877de

18 files changed

Lines changed: 534 additions & 39 deletions

File tree

packages/snap/snap.manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"url": "https://github.com/MetaMask/snap-solana-wallet.git"
88
},
99
"source": {
10-
"shasum": "rx+CMYlfj25LOq11FMftpUP3nc+J+mO7C64XS2cmrGw=",
10+
"shasum": "X1gc72IbqI/j7C0NA0rxAJHeJXlcsFYXVqNrfllJ4n4=",
1111
"location": {
1212
"npm": {
1313
"filePath": "dist/bundle.js",

packages/snap/src/core/constants/solana.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ export const SOL_IMAGE_URL =
77
export const MICRO_LAMPORTS_PER_LAMPORTS = 1_000_000n;
88
export const LAMPORTS_PER_SOL = 1_000_000_000;
99
export const DEFAULT_NETWORK_BLOCK_EXPLORER_URL = 'https://solscan.io';
10+
export const METAMASK_ORIGIN = 'metamask';
1011

1112
/**
1213
* Solana CAIP-2 Networks
@@ -51,6 +52,11 @@ export type TokenInfo = {
5152
decimals: number;
5253
};
5354

55+
export type TransactionMetadata = {
56+
scope: Network;
57+
origin: string;
58+
};
59+
5460
export const TokenMetadata = {
5561
[KnownCaip19Id.SolMainnet]: {
5662
symbol: 'SOL',

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ describe('ClientRequestHandler', () => {
101101
MOCK_SOLANA_KEYRING_ACCOUNT_0,
102102
mockTransaction,
103103
Network.Testnet,
104+
'metamask',
104105
{
105106
commitment: 'confirmed',
106107
skipPreflight: false,

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
} from '@metamask/snaps-sdk';
77
import { assert } from '@metamask/superstruct';
88

9+
import { METAMASK_ORIGIN } from '../../constants/solana';
910
import type { WalletService } from '../../services/wallet/WalletService';
1011
import type { ILogger } from '../../utils/logger';
1112
import type { SolanaKeyring } from '../onKeyringRequest/Keyring';
@@ -81,6 +82,7 @@ export class ClientRequestHandler {
8182
account,
8283
base64EncodedTransaction,
8384
scope,
85+
METAMASK_ORIGIN,
8486
options,
8587
);
8688
}

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

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
import { InternalError, type OnCronjobHandler } from '@metamask/snaps-sdk';
2-
import { assert, literal, object, string } from '@metamask/superstruct';
2+
import {
3+
assert,
4+
literal,
5+
nullable,
6+
object,
7+
string,
8+
} from '@metamask/superstruct';
39

410
import { analyticsService, keyring } from '../../../../snapContext';
511
import logger from '../../../utils/logger';
@@ -18,7 +24,10 @@ export const OnTransactionAddedRequestStruct = object({
1824
accountId: UuidStruct,
1925
/** The base64 encoded transaction or transaction message. */
2026
base64EncodedTransaction: Base64Struct,
21-
scope: NetworkStruct,
27+
metadata: object({
28+
scope: NetworkStruct,
29+
origin: string(),
30+
}),
2231
}),
2332
});
2433

@@ -35,14 +44,14 @@ export const onTransactionAdded: OnCronjobHandler = async ({ request }) => {
3544

3645
assert(request, OnTransactionAddedRequestStruct);
3746

38-
const { accountId, base64EncodedTransaction, scope } = request.params;
47+
const { accountId, base64EncodedTransaction, metadata } = request.params;
3948

4049
const account = await keyring.getAccountOrThrow(accountId);
4150

4251
await analyticsService.trackEventTransactionAdded(
4352
account,
4453
base64EncodedTransaction,
45-
scope,
54+
metadata,
4655
);
4756
} catch (error) {
4857
logger.error(error);

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

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
import { InternalError, type OnCronjobHandler } from '@metamask/snaps-sdk';
2-
import { assert, literal, object, string } from '@metamask/superstruct';
2+
import {
3+
assert,
4+
literal,
5+
nullable,
6+
object,
7+
string,
8+
} from '@metamask/superstruct';
39

410
import { analyticsService, keyring } from '../../../../snapContext';
511
import logger from '../../../utils/logger';
@@ -18,7 +24,10 @@ export const OnTransactionApprovedRequestStruct = object({
1824
accountId: UuidStruct,
1925
/** The base64 encoded transaction or transaction message. */
2026
base64EncodedTransaction: Base64Struct,
21-
scope: NetworkStruct,
27+
metadata: object({
28+
scope: NetworkStruct,
29+
origin: string(),
30+
}),
2231
}),
2332
});
2433

@@ -35,14 +44,14 @@ export const onTransactionApproved: OnCronjobHandler = async ({ request }) => {
3544

3645
assert(request, OnTransactionApprovedRequestStruct);
3746

38-
const { accountId, base64EncodedTransaction, scope } = request.params;
47+
const { accountId, base64EncodedTransaction, metadata } = request.params;
3948

4049
const account = await keyring.getAccountOrThrow(accountId);
4150

4251
await analyticsService.trackEventTransactionApproved(
4352
account,
4453
base64EncodedTransaction,
45-
scope,
54+
metadata,
4655
);
4756
} catch (error) {
4857
logger.error(error);

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ describe('onTransactionFinalized', () => {
4747

4848
it('refreshes assets, balances and transactions for all accounts that are involved in the transaction', async () => {
4949
const mockAccountId = MOCK_SOLANA_KEYRING_ACCOUNT_0.id;
50+
const mockOrigin = 'https://metamask.io';
5051

5152
// A special transaction with multiple senders and recipients that are all owned by the keyring
5253
const mockTransaction: Transaction = {
@@ -117,6 +118,10 @@ describe('onTransactionFinalized', () => {
117118
params: {
118119
accountId: mockAccountId,
119120
transaction: mockTransaction,
121+
metadata: {
122+
scope: Network.Testnet,
123+
origin: mockOrigin,
124+
},
120125
},
121126
},
122127
});
@@ -144,6 +149,7 @@ describe('onTransactionFinalized', () => {
144149

145150
it('refreshes balances and transactions for the sender only if it is the only account involved in the transaction', async () => {
146151
const mockAccountId = MOCK_SOLANA_KEYRING_ACCOUNT_0.id;
152+
const mockOrigin = 'https://metamask.io';
147153

148154
// Transaction with only one owned sender, and one non-owned recipient
149155
const mockTransaction: Transaction = {
@@ -187,6 +193,10 @@ describe('onTransactionFinalized', () => {
187193
params: {
188194
accountId: mockAccountId,
189195
transaction: mockTransaction,
196+
metadata: {
197+
scope: Network.Testnet,
198+
origin: mockOrigin,
199+
},
190200
},
191201
},
192202
});

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

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
import { TransactionStruct } from '@metamask/keyring-api';
22
import { InternalError, type OnCronjobHandler } from '@metamask/snaps-sdk';
3-
import { assert, literal, object, string } from '@metamask/superstruct';
3+
import {
4+
assert,
5+
literal,
6+
nullable,
7+
object,
8+
string,
9+
} from '@metamask/superstruct';
410

511
import {
612
analyticsService,
@@ -9,7 +15,7 @@ import {
915
transactionsService,
1016
} from '../../../../snapContext';
1117
import logger from '../../../utils/logger';
12-
import { UuidStruct } from '../../../validation/structs';
18+
import { NetworkStruct, UuidStruct } from '../../../validation/structs';
1319
import { ScheduleBackgroundEventMethod } from './ScheduleBackgroundEventMethod';
1420

1521
export const OnTransactionFinalizedRequestStruct = object({
@@ -19,6 +25,10 @@ export const OnTransactionFinalizedRequestStruct = object({
1925
params: object({
2026
accountId: UuidStruct,
2127
transaction: TransactionStruct,
28+
metadata: object({
29+
scope: NetworkStruct,
30+
origin: string(),
31+
}),
2232
}),
2333
});
2434

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

3747
assert(request, OnTransactionFinalizedRequestStruct);
3848

39-
const { accountId, transaction } = request.params;
49+
const { accountId, transaction, metadata } = request.params;
4050

4151
const account = await keyring.getAccountOrThrow(accountId);
4252

@@ -64,6 +74,7 @@ export const onTransactionFinalized: OnCronjobHandler = async ({ request }) => {
6474
const trackEventPromise = analyticsService.trackEventTransactionFinalized(
6575
account,
6676
transaction,
77+
metadata,
6778
);
6879

6980
await Promise.all([

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

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
import { InternalError, type OnCronjobHandler } from '@metamask/snaps-sdk';
2-
import { assert, literal, object, string } from '@metamask/superstruct';
2+
import {
3+
assert,
4+
literal,
5+
nullable,
6+
object,
7+
string,
8+
} from '@metamask/superstruct';
39

410
import { analyticsService, keyring } from '../../../../snapContext';
511
import logger from '../../../utils/logger';
@@ -18,7 +24,10 @@ export const OnTransactionRejectedRequestStruct = object({
1824
accountId: UuidStruct,
1925
/** The base64 encoded transaction or transaction message. */
2026
base64EncodedTransaction: Base64Struct,
21-
scope: NetworkStruct,
27+
metadata: object({
28+
scope: NetworkStruct,
29+
origin: string(),
30+
}),
2231
}),
2332
});
2433

@@ -35,14 +44,14 @@ export const onTransactionRejected: OnCronjobHandler = async ({ request }) => {
3544

3645
assert(request, OnTransactionRejectedRequestStruct);
3746

38-
const { accountId, base64EncodedTransaction, scope } = request.params;
47+
const { accountId, base64EncodedTransaction, metadata } = request.params;
3948

4049
const account = await keyring.getAccountOrThrow(accountId);
4150

4251
await analyticsService.trackEventTransactionRejected(
4352
account,
4453
base64EncodedTransaction,
45-
scope,
54+
metadata,
4655
);
4756
} catch (error) {
4857
logger.error(error);

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

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
import { InternalError, type OnCronjobHandler } from '@metamask/snaps-sdk';
2-
import { assert, literal, object, string } from '@metamask/superstruct';
2+
import {
3+
assert,
4+
literal,
5+
nullable,
6+
object,
7+
string,
8+
} from '@metamask/superstruct';
39

410
import { analyticsService, keyring } from '../../../../snapContext';
511
import logger from '../../../utils/logger';
@@ -19,7 +25,10 @@ export const OnTransactionSubmittedRequestStruct = object({
1925
/** The base64 encoded transaction message. */
2026
transactionMessageBase64Encoded: Base64Struct,
2127
signature: string(),
22-
scope: NetworkStruct,
28+
metadata: object({
29+
scope: NetworkStruct,
30+
origin: string(),
31+
}),
2332
}),
2433
});
2534

@@ -36,7 +45,7 @@ export const onTransactionSubmitted: OnCronjobHandler = async ({ request }) => {
3645

3746
assert(request, OnTransactionSubmittedRequestStruct);
3847

39-
const { accountId, transactionMessageBase64Encoded, signature, scope } =
48+
const { accountId, transactionMessageBase64Encoded, signature, metadata } =
4049
request.params;
4150

4251
const account = await keyring.getAccountOrThrow(accountId);
@@ -45,7 +54,7 @@ export const onTransactionSubmitted: OnCronjobHandler = async ({ request }) => {
4554
account,
4655
transactionMessageBase64Encoded,
4756
signature,
48-
scope,
57+
metadata,
4958
);
5059
} catch (error) {
5160
logger.error(error);

0 commit comments

Comments
 (0)