-
-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Expand file tree
/
Copy pathtoken-detection-controller-init.ts
More file actions
79 lines (74 loc) · 2.61 KB
/
token-detection-controller-init.ts
File metadata and controls
79 lines (74 loc) · 2.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import { MessengerClientInitFunction } from '../types';
import {
TokenDetectionController,
type TokenDetectionControllerMessenger,
type AssetsContractControllerGetBalancesInSingleCallAction,
} from '@metamask/assets-controllers';
import { TokenDetectionControllerInitMessenger } from '../messengers/token-detection-controller-messenger';
import { MetaMetricsEvents } from '../../Analytics';
import { AnalyticsEventBuilder } from '../../../util/analytics/AnalyticsEventBuilder';
import { getDecimalChainId } from '../../../util/networks';
import { getGlobalChainId } from '../../../util/networks/global-network';
import { selectUseTokenDetection } from '../../../selectors/preferencesController';
import { selectBasicFunctionalityEnabled } from '../../../selectors/settings';
/**
* Initialize the tokenDetection controller.
*
* @param request - The request object.
* @param request.controllerMessenger - The messenger to use for the controller.
* @returns The initialized controller.
*/
export const tokenDetectionControllerInit: MessengerClientInitFunction<
TokenDetectionController,
TokenDetectionControllerMessenger,
TokenDetectionControllerInitMessenger
> = ({
controllerMessenger,
initMessenger,
getMessengerClient,
getState,
tokenListService,
}) => {
const networkController = getMessengerClient('NetworkController');
const getBalancesInSingleCall = (
selectedAddress: string,
tokensToDetect: string[],
networkClientId?: string,
) =>
initMessenger.call(
'AssetsContractController:getBalancesInSingleCall',
selectedAddress,
tokensToDetect,
networkClientId,
) as ReturnType<
AssetsContractControllerGetBalancesInSingleCallAction['handler']
>;
const controller = new TokenDetectionController({
messenger: controllerMessenger,
disabled: false,
getBalancesInSingleCall,
tokenListService,
useTokenDetection: () => selectUseTokenDetection(getState()),
useExternalServices: () => selectBasicFunctionalityEnabled(getState()),
trackMetaMetricsEvent: () => {
try {
const event = AnalyticsEventBuilder.createEventBuilder(
MetaMetricsEvents.TOKEN_DETECTED,
)
.addProperties({
token_standard: 'ERC20',
asset_type: 'token',
chain_id: getDecimalChainId(getGlobalChainId(networkController)),
})
.build();
initMessenger.call('AnalyticsController:trackEvent', event);
} catch (error) {
// Analytics tracking failures should not break token detection
// Error is logged but not thrown
}
},
});
return {
controller,
};
};