@metamask-previews/phishing-controller 15.0.1-preview-fa19a4d3 → 15.0.1-preview-120dfc46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +0 -8
- package/dist/PhishingController.cjs +4 -101
- package/dist/PhishingController.cjs.map +1 -1
- package/dist/PhishingController.d.cts +4 -28
- package/dist/PhishingController.d.cts.map +1 -1
- package/dist/PhishingController.d.mts +4 -28
- package/dist/PhishingController.d.mts.map +1 -1
- package/dist/PhishingController.mjs +4 -101
- package/dist/PhishingController.mjs.map +1 -1
- package/dist/index.cjs +1 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/types.cjs +1 -37
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +0 -55
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +0 -55
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs +0 -36
- package/dist/types.mjs.map +1 -1
- package/dist/utils.d.cts +0 -14
- package/dist/utils.d.cts.map +1 -1
- package/dist/utils.d.mts +0 -14
- package/dist/utils.d.mts.map +1 -1
- package/package.json +1 -1
|
@@ -3,7 +3,7 @@ import { type Messenger } from "@metamask/messenger";
|
|
|
3
3
|
import type { TransactionControllerStateChangeEvent } from "@metamask/transaction-controller";
|
|
4
4
|
import { type CacheEntry } from "./CacheManager.cjs";
|
|
5
5
|
import { type PathTrie } from "./PathTrie.cjs";
|
|
6
|
-
import { type PhishingDetectorResult, type PhishingDetectionScanResult, type TokenScanCacheData, type BulkTokenScanResponse, type BulkTokenScanRequest
|
|
6
|
+
import { type PhishingDetectorResult, type PhishingDetectionScanResult, type TokenScanCacheData, type BulkTokenScanResponse, type BulkTokenScanRequest } from "./types.cjs";
|
|
7
7
|
export declare const PHISHING_CONFIG_BASE_URL = "https://phishing-detection.api.cx.metamask.io";
|
|
8
8
|
export declare const METAMASK_STALELIST_FILE = "/v1/stalelist";
|
|
9
9
|
export declare const METAMASK_HOTLIST_DIFF_FILE = "/v2/diffsSince";
|
|
@@ -14,13 +14,10 @@ export declare const PHISHING_DETECTION_SCAN_ENDPOINT = "v2/scan";
|
|
|
14
14
|
export declare const PHISHING_DETECTION_BULK_SCAN_ENDPOINT = "bulk-scan";
|
|
15
15
|
export declare const SECURITY_ALERTS_BASE_URL = "https://security-alerts.api.cx.metamask.io";
|
|
16
16
|
export declare const TOKEN_BULK_SCANNING_ENDPOINT = "/token/scan-bulk";
|
|
17
|
-
export declare const ADDRESS_SCAN_ENDPOINT = "/address/evm/scan";
|
|
18
17
|
export declare const DEFAULT_URL_SCAN_CACHE_TTL: number;
|
|
19
18
|
export declare const DEFAULT_URL_SCAN_CACHE_MAX_SIZE = 250;
|
|
20
19
|
export declare const DEFAULT_TOKEN_SCAN_CACHE_TTL: number;
|
|
21
20
|
export declare const DEFAULT_TOKEN_SCAN_CACHE_MAX_SIZE = 1000;
|
|
22
|
-
export declare const DEFAULT_ADDRESS_SCAN_CACHE_TTL: number;
|
|
23
|
-
export declare const DEFAULT_ADDRESS_SCAN_CACHE_MAX_SIZE = 1000;
|
|
24
21
|
export declare const C2_DOMAIN_BLOCKLIST_REFRESH_INTERVAL: number;
|
|
25
22
|
export declare const HOTLIST_REFRESH_INTERVAL: number;
|
|
26
23
|
export declare const STALELIST_REFRESH_INTERVAL: number;
|
|
@@ -173,9 +170,7 @@ declare const controllerName = "PhishingController";
|
|
|
173
170
|
* hotlistLastFetched - timestamp of the last hotlist fetch
|
|
174
171
|
* stalelistLastFetched - timestamp of the last stalelist fetch
|
|
175
172
|
* c2DomainBlocklistLastFetched - timestamp of the last c2 domain blocklist fetch
|
|
176
|
-
* urlScanCache - cache of
|
|
177
|
-
* tokenScanCache - cache of token scan results
|
|
178
|
-
* addressScanCache - cache of address scan results
|
|
173
|
+
* urlScanCache - cache of scan results
|
|
179
174
|
*/
|
|
180
175
|
export type PhishingControllerState = {
|
|
181
176
|
phishingLists: PhishingListState[];
|
|
@@ -186,7 +181,6 @@ export type PhishingControllerState = {
|
|
|
186
181
|
c2DomainBlocklistLastFetched: number;
|
|
187
182
|
urlScanCache: Record<string, CacheEntry<PhishingDetectionScanResult>>;
|
|
188
183
|
tokenScanCache: Record<string, CacheEntry<TokenScanCacheData>>;
|
|
189
|
-
addressScanCache: Record<string, CacheEntry<AddressScanCacheData>>;
|
|
190
184
|
};
|
|
191
185
|
/**
|
|
192
186
|
* PhishingControllerOptions
|
|
@@ -199,8 +193,6 @@ export type PhishingControllerState = {
|
|
|
199
193
|
* urlScanCacheMaxSize - Maximum number of entries in the scan cache.
|
|
200
194
|
* tokenScanCacheTTL - Time to live in seconds for cached token scan results.
|
|
201
195
|
* tokenScanCacheMaxSize - Maximum number of entries in the token scan cache.
|
|
202
|
-
* addressScanCacheTTL - Time to live in seconds for cached address scan results.
|
|
203
|
-
* addressScanCacheMaxSize - Maximum number of entries in the address scan cache.
|
|
204
196
|
*/
|
|
205
197
|
export type PhishingControllerOptions = {
|
|
206
198
|
stalelistRefreshInterval?: number;
|
|
@@ -210,8 +202,6 @@ export type PhishingControllerOptions = {
|
|
|
210
202
|
urlScanCacheMaxSize?: number;
|
|
211
203
|
tokenScanCacheTTL?: number;
|
|
212
204
|
tokenScanCacheMaxSize?: number;
|
|
213
|
-
addressScanCacheTTL?: number;
|
|
214
|
-
addressScanCacheMaxSize?: number;
|
|
215
205
|
messenger: PhishingControllerMessenger;
|
|
216
206
|
state?: Partial<PhishingControllerState>;
|
|
217
207
|
};
|
|
@@ -231,12 +221,8 @@ export type PhishingControllerBulkScanTokensAction = {
|
|
|
231
221
|
type: `${typeof controllerName}:bulkScanTokens`;
|
|
232
222
|
handler: PhishingController['bulkScanTokens'];
|
|
233
223
|
};
|
|
234
|
-
export type PhishingControllerScanAddressAction = {
|
|
235
|
-
type: `${typeof controllerName}:scanAddress`;
|
|
236
|
-
handler: PhishingController['scanAddress'];
|
|
237
|
-
};
|
|
238
224
|
export type PhishingControllerGetStateAction = ControllerGetStateAction<typeof controllerName, PhishingControllerState>;
|
|
239
|
-
export type PhishingControllerActions = PhishingControllerGetStateAction | MaybeUpdateState | TestOrigin | PhishingControllerBulkScanUrlsAction | PhishingControllerBulkScanTokensAction
|
|
225
|
+
export type PhishingControllerActions = PhishingControllerGetStateAction | MaybeUpdateState | TestOrigin | PhishingControllerBulkScanUrlsAction | PhishingControllerBulkScanTokensAction;
|
|
240
226
|
export type PhishingControllerStateChangeEvent = ControllerStateChangeEvent<typeof controllerName, PhishingControllerState>;
|
|
241
227
|
export type PhishingControllerEvents = PhishingControllerStateChangeEvent;
|
|
242
228
|
/**
|
|
@@ -276,12 +262,10 @@ export declare class PhishingController extends BaseController<typeof controller
|
|
|
276
262
|
* @param config.urlScanCacheMaxSize - Maximum number of entries in the scan cache.
|
|
277
263
|
* @param config.tokenScanCacheTTL - Time to live in seconds for cached token scan results.
|
|
278
264
|
* @param config.tokenScanCacheMaxSize - Maximum number of entries in the token scan cache.
|
|
279
|
-
* @param config.addressScanCacheTTL - Time to live in seconds for cached address scan results.
|
|
280
|
-
* @param config.addressScanCacheMaxSize - Maximum number of entries in the address scan cache.
|
|
281
265
|
* @param config.messenger - The controller restricted messenger.
|
|
282
266
|
* @param config.state - Initial state to set on this controller.
|
|
283
267
|
*/
|
|
284
|
-
constructor({ stalelistRefreshInterval, hotlistRefreshInterval, c2DomainBlocklistRefreshInterval, urlScanCacheTTL, urlScanCacheMaxSize, tokenScanCacheTTL, tokenScanCacheMaxSize,
|
|
268
|
+
constructor({ stalelistRefreshInterval, hotlistRefreshInterval, c2DomainBlocklistRefreshInterval, urlScanCacheTTL, urlScanCacheMaxSize, tokenScanCacheTTL, tokenScanCacheMaxSize, messenger, state, }: PhishingControllerOptions);
|
|
285
269
|
/**
|
|
286
270
|
* Updates this.detector with an instance of PhishingDetector using the current state.
|
|
287
271
|
*/
|
|
@@ -418,14 +402,6 @@ export declare class PhishingController extends BaseController<typeof controller
|
|
|
418
402
|
* @returns A mapping of URLs to their phishing detection scan results and errors.
|
|
419
403
|
*/
|
|
420
404
|
bulkScanUrls: (urls: string[]) => Promise<BulkPhishingDetectionScanResponse>;
|
|
421
|
-
/**
|
|
422
|
-
* Scan an address for security alerts.
|
|
423
|
-
*
|
|
424
|
-
* @param chainId - The chain ID in hex format (e.g., '0x1' for Ethereum).
|
|
425
|
-
* @param address - The address to scan.
|
|
426
|
-
* @returns The address scan result.
|
|
427
|
-
*/
|
|
428
|
-
scanAddress: (chainId: string, address: string) => Promise<AddressScanResult>;
|
|
429
405
|
/**
|
|
430
406
|
* Scan multiple tokens for malicious activity in bulk.
|
|
431
407
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PhishingController.d.cts","sourceRoot":"","sources":["../src/PhishingController.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EAEd,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAChC,kCAAkC;AAKnC,OAAO,EAAE,KAAK,SAAS,EAAE,4BAA4B;AACrD,OAAO,KAAK,EACV,qCAAqC,EAEtC,yCAAyC;AAI1C,OAAO,EAAgB,KAAK,UAAU,EAAE,2BAAuB;AAC/D,OAAO,EACL,KAAK,QAAQ,EAId,uBAAmB;AAEpB,OAAO,EAEL,KAAK,sBAAsB,EAC3B,KAAK,2BAA2B,EAEhC,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,
|
|
1
|
+
{"version":3,"file":"PhishingController.d.cts","sourceRoot":"","sources":["../src/PhishingController.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { type Messenger } from "@metamask/messenger";
|
|
|
3
3
|
import type { TransactionControllerStateChangeEvent } from "@metamask/transaction-controller";
|
|
4
4
|
import { type CacheEntry } from "./CacheManager.mjs";
|
|
5
5
|
import { type PathTrie } from "./PathTrie.mjs";
|
|
6
|
-
import { type PhishingDetectorResult, type PhishingDetectionScanResult, type TokenScanCacheData, type BulkTokenScanResponse, type BulkTokenScanRequest
|
|
6
|
+
import { type PhishingDetectorResult, type PhishingDetectionScanResult, type TokenScanCacheData, type BulkTokenScanResponse, type BulkTokenScanRequest } from "./types.mjs";
|
|
7
7
|
export declare const PHISHING_CONFIG_BASE_URL = "https://phishing-detection.api.cx.metamask.io";
|
|
8
8
|
export declare const METAMASK_STALELIST_FILE = "/v1/stalelist";
|
|
9
9
|
export declare const METAMASK_HOTLIST_DIFF_FILE = "/v2/diffsSince";
|
|
@@ -14,13 +14,10 @@ export declare const PHISHING_DETECTION_SCAN_ENDPOINT = "v2/scan";
|
|
|
14
14
|
export declare const PHISHING_DETECTION_BULK_SCAN_ENDPOINT = "bulk-scan";
|
|
15
15
|
export declare const SECURITY_ALERTS_BASE_URL = "https://security-alerts.api.cx.metamask.io";
|
|
16
16
|
export declare const TOKEN_BULK_SCANNING_ENDPOINT = "/token/scan-bulk";
|
|
17
|
-
export declare const ADDRESS_SCAN_ENDPOINT = "/address/evm/scan";
|
|
18
17
|
export declare const DEFAULT_URL_SCAN_CACHE_TTL: number;
|
|
19
18
|
export declare const DEFAULT_URL_SCAN_CACHE_MAX_SIZE = 250;
|
|
20
19
|
export declare const DEFAULT_TOKEN_SCAN_CACHE_TTL: number;
|
|
21
20
|
export declare const DEFAULT_TOKEN_SCAN_CACHE_MAX_SIZE = 1000;
|
|
22
|
-
export declare const DEFAULT_ADDRESS_SCAN_CACHE_TTL: number;
|
|
23
|
-
export declare const DEFAULT_ADDRESS_SCAN_CACHE_MAX_SIZE = 1000;
|
|
24
21
|
export declare const C2_DOMAIN_BLOCKLIST_REFRESH_INTERVAL: number;
|
|
25
22
|
export declare const HOTLIST_REFRESH_INTERVAL: number;
|
|
26
23
|
export declare const STALELIST_REFRESH_INTERVAL: number;
|
|
@@ -173,9 +170,7 @@ declare const controllerName = "PhishingController";
|
|
|
173
170
|
* hotlistLastFetched - timestamp of the last hotlist fetch
|
|
174
171
|
* stalelistLastFetched - timestamp of the last stalelist fetch
|
|
175
172
|
* c2DomainBlocklistLastFetched - timestamp of the last c2 domain blocklist fetch
|
|
176
|
-
* urlScanCache - cache of
|
|
177
|
-
* tokenScanCache - cache of token scan results
|
|
178
|
-
* addressScanCache - cache of address scan results
|
|
173
|
+
* urlScanCache - cache of scan results
|
|
179
174
|
*/
|
|
180
175
|
export type PhishingControllerState = {
|
|
181
176
|
phishingLists: PhishingListState[];
|
|
@@ -186,7 +181,6 @@ export type PhishingControllerState = {
|
|
|
186
181
|
c2DomainBlocklistLastFetched: number;
|
|
187
182
|
urlScanCache: Record<string, CacheEntry<PhishingDetectionScanResult>>;
|
|
188
183
|
tokenScanCache: Record<string, CacheEntry<TokenScanCacheData>>;
|
|
189
|
-
addressScanCache: Record<string, CacheEntry<AddressScanCacheData>>;
|
|
190
184
|
};
|
|
191
185
|
/**
|
|
192
186
|
* PhishingControllerOptions
|
|
@@ -199,8 +193,6 @@ export type PhishingControllerState = {
|
|
|
199
193
|
* urlScanCacheMaxSize - Maximum number of entries in the scan cache.
|
|
200
194
|
* tokenScanCacheTTL - Time to live in seconds for cached token scan results.
|
|
201
195
|
* tokenScanCacheMaxSize - Maximum number of entries in the token scan cache.
|
|
202
|
-
* addressScanCacheTTL - Time to live in seconds for cached address scan results.
|
|
203
|
-
* addressScanCacheMaxSize - Maximum number of entries in the address scan cache.
|
|
204
196
|
*/
|
|
205
197
|
export type PhishingControllerOptions = {
|
|
206
198
|
stalelistRefreshInterval?: number;
|
|
@@ -210,8 +202,6 @@ export type PhishingControllerOptions = {
|
|
|
210
202
|
urlScanCacheMaxSize?: number;
|
|
211
203
|
tokenScanCacheTTL?: number;
|
|
212
204
|
tokenScanCacheMaxSize?: number;
|
|
213
|
-
addressScanCacheTTL?: number;
|
|
214
|
-
addressScanCacheMaxSize?: number;
|
|
215
205
|
messenger: PhishingControllerMessenger;
|
|
216
206
|
state?: Partial<PhishingControllerState>;
|
|
217
207
|
};
|
|
@@ -231,12 +221,8 @@ export type PhishingControllerBulkScanTokensAction = {
|
|
|
231
221
|
type: `${typeof controllerName}:bulkScanTokens`;
|
|
232
222
|
handler: PhishingController['bulkScanTokens'];
|
|
233
223
|
};
|
|
234
|
-
export type PhishingControllerScanAddressAction = {
|
|
235
|
-
type: `${typeof controllerName}:scanAddress`;
|
|
236
|
-
handler: PhishingController['scanAddress'];
|
|
237
|
-
};
|
|
238
224
|
export type PhishingControllerGetStateAction = ControllerGetStateAction<typeof controllerName, PhishingControllerState>;
|
|
239
|
-
export type PhishingControllerActions = PhishingControllerGetStateAction | MaybeUpdateState | TestOrigin | PhishingControllerBulkScanUrlsAction | PhishingControllerBulkScanTokensAction
|
|
225
|
+
export type PhishingControllerActions = PhishingControllerGetStateAction | MaybeUpdateState | TestOrigin | PhishingControllerBulkScanUrlsAction | PhishingControllerBulkScanTokensAction;
|
|
240
226
|
export type PhishingControllerStateChangeEvent = ControllerStateChangeEvent<typeof controllerName, PhishingControllerState>;
|
|
241
227
|
export type PhishingControllerEvents = PhishingControllerStateChangeEvent;
|
|
242
228
|
/**
|
|
@@ -276,12 +262,10 @@ export declare class PhishingController extends BaseController<typeof controller
|
|
|
276
262
|
* @param config.urlScanCacheMaxSize - Maximum number of entries in the scan cache.
|
|
277
263
|
* @param config.tokenScanCacheTTL - Time to live in seconds for cached token scan results.
|
|
278
264
|
* @param config.tokenScanCacheMaxSize - Maximum number of entries in the token scan cache.
|
|
279
|
-
* @param config.addressScanCacheTTL - Time to live in seconds for cached address scan results.
|
|
280
|
-
* @param config.addressScanCacheMaxSize - Maximum number of entries in the address scan cache.
|
|
281
265
|
* @param config.messenger - The controller restricted messenger.
|
|
282
266
|
* @param config.state - Initial state to set on this controller.
|
|
283
267
|
*/
|
|
284
|
-
constructor({ stalelistRefreshInterval, hotlistRefreshInterval, c2DomainBlocklistRefreshInterval, urlScanCacheTTL, urlScanCacheMaxSize, tokenScanCacheTTL, tokenScanCacheMaxSize,
|
|
268
|
+
constructor({ stalelistRefreshInterval, hotlistRefreshInterval, c2DomainBlocklistRefreshInterval, urlScanCacheTTL, urlScanCacheMaxSize, tokenScanCacheTTL, tokenScanCacheMaxSize, messenger, state, }: PhishingControllerOptions);
|
|
285
269
|
/**
|
|
286
270
|
* Updates this.detector with an instance of PhishingDetector using the current state.
|
|
287
271
|
*/
|
|
@@ -418,14 +402,6 @@ export declare class PhishingController extends BaseController<typeof controller
|
|
|
418
402
|
* @returns A mapping of URLs to their phishing detection scan results and errors.
|
|
419
403
|
*/
|
|
420
404
|
bulkScanUrls: (urls: string[]) => Promise<BulkPhishingDetectionScanResponse>;
|
|
421
|
-
/**
|
|
422
|
-
* Scan an address for security alerts.
|
|
423
|
-
*
|
|
424
|
-
* @param chainId - The chain ID in hex format (e.g., '0x1' for Ethereum).
|
|
425
|
-
* @param address - The address to scan.
|
|
426
|
-
* @returns The address scan result.
|
|
427
|
-
*/
|
|
428
|
-
scanAddress: (chainId: string, address: string) => Promise<AddressScanResult>;
|
|
429
405
|
/**
|
|
430
406
|
* Scan multiple tokens for malicious activity in bulk.
|
|
431
407
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PhishingController.d.mts","sourceRoot":"","sources":["../src/PhishingController.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EAEd,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAChC,kCAAkC;AAKnC,OAAO,EAAE,KAAK,SAAS,EAAE,4BAA4B;AACrD,OAAO,KAAK,EACV,qCAAqC,EAEtC,yCAAyC;AAI1C,OAAO,EAAgB,KAAK,UAAU,EAAE,2BAAuB;AAC/D,OAAO,EACL,KAAK,QAAQ,EAId,uBAAmB;AAEpB,OAAO,EAEL,KAAK,sBAAsB,EAC3B,KAAK,2BAA2B,EAEhC,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,
|
|
1
|
+
{"version":3,"file":"PhishingController.d.mts","sourceRoot":"","sources":["../src/PhishingController.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
9
9
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
10
10
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
11
|
};
|
|
12
|
-
var _PhishingController_instances, _PhishingController_detector, _PhishingController_stalelistRefreshInterval, _PhishingController_hotlistRefreshInterval, _PhishingController_c2DomainBlocklistRefreshInterval, _PhishingController_urlScanCache, _PhishingController_tokenScanCache,
|
|
12
|
+
var _PhishingController_instances, _PhishingController_detector, _PhishingController_stalelistRefreshInterval, _PhishingController_hotlistRefreshInterval, _PhishingController_c2DomainBlocklistRefreshInterval, _PhishingController_urlScanCache, _PhishingController_tokenScanCache, _PhishingController_inProgressHotlistUpdate, _PhishingController_inProgressStalelistUpdate, _PhishingController_isProgressC2DomainBlocklistUpdate, _PhishingController_transactionControllerStateChangeHandler, _PhishingController_subscribeToTransactionControllerStateChange, _PhishingController_registerMessageHandlers, _PhishingController_isTransactionPatch, _PhishingController_isSimulationDataPatch, _PhishingController_onTransactionControllerStateChange, _PhishingController_getTokensFromTransaction, _PhishingController_scanTokensByChain, _PhishingController_fetchTokenScanBulkResults, _PhishingController_processBatch, _PhishingController_updateStalelist, _PhishingController_updateHotlist, _PhishingController_updateC2DomainBlocklist, _PhishingController_queryConfig;
|
|
13
13
|
import { BaseController } from "@metamask/base-controller";
|
|
14
14
|
import { safelyExecute, safelyExecuteWithTimeout } from "@metamask/controller-utils";
|
|
15
15
|
import $punycodepunycodejs from "punycode/punycode.js";
|
|
@@ -17,7 +17,7 @@ const { toASCII } = $punycodepunycodejs;
|
|
|
17
17
|
import { CacheManager } from "./CacheManager.mjs";
|
|
18
18
|
import { convertListToTrie, insertToTrie, matchedPathPrefix } from "./PathTrie.mjs";
|
|
19
19
|
import { PhishingDetector } from "./PhishingDetector.mjs";
|
|
20
|
-
import { PhishingDetectorResultType, RecommendedAction
|
|
20
|
+
import { PhishingDetectorResultType, RecommendedAction } from "./types.mjs";
|
|
21
21
|
import { applyDiffs, fetchTimeNow, getHostnameFromUrl, roundToNearestMinute, getHostnameFromWebUrl, buildCacheKey, splitCacheHits, resolveChainName, getPathnameFromUrl } from "./utils.mjs";
|
|
22
22
|
export const PHISHING_CONFIG_BASE_URL = 'https://phishing-detection.api.cx.metamask.io';
|
|
23
23
|
export const METAMASK_STALELIST_FILE = '/v1/stalelist';
|
|
@@ -29,14 +29,11 @@ export const PHISHING_DETECTION_SCAN_ENDPOINT = 'v2/scan';
|
|
|
29
29
|
export const PHISHING_DETECTION_BULK_SCAN_ENDPOINT = 'bulk-scan';
|
|
30
30
|
export const SECURITY_ALERTS_BASE_URL = 'https://security-alerts.api.cx.metamask.io';
|
|
31
31
|
export const TOKEN_BULK_SCANNING_ENDPOINT = '/token/scan-bulk';
|
|
32
|
-
export const ADDRESS_SCAN_ENDPOINT = '/address/evm/scan';
|
|
33
32
|
// Cache configuration defaults
|
|
34
33
|
export const DEFAULT_URL_SCAN_CACHE_TTL = 15 * 60; // 15 minutes in seconds
|
|
35
34
|
export const DEFAULT_URL_SCAN_CACHE_MAX_SIZE = 250;
|
|
36
35
|
export const DEFAULT_TOKEN_SCAN_CACHE_TTL = 15 * 60; // 15 minutes in seconds
|
|
37
36
|
export const DEFAULT_TOKEN_SCAN_CACHE_MAX_SIZE = 1000;
|
|
38
|
-
export const DEFAULT_ADDRESS_SCAN_CACHE_TTL = 15 * 60; // 15 minutes in seconds
|
|
39
|
-
export const DEFAULT_ADDRESS_SCAN_CACHE_MAX_SIZE = 1000;
|
|
40
37
|
export const C2_DOMAIN_BLOCKLIST_REFRESH_INTERVAL = 5 * 60; // 5 mins in seconds
|
|
41
38
|
export const HOTLIST_REFRESH_INTERVAL = 5 * 60; // 5 mins in seconds
|
|
42
39
|
export const STALELIST_REFRESH_INTERVAL = 30 * 24 * 60 * 60; // 30 days in seconds
|
|
@@ -122,12 +119,6 @@ const metadata = {
|
|
|
122
119
|
includeInDebugSnapshot: false,
|
|
123
120
|
usedInUi: true,
|
|
124
121
|
},
|
|
125
|
-
addressScanCache: {
|
|
126
|
-
includeInStateLogs: false,
|
|
127
|
-
persist: true,
|
|
128
|
-
includeInDebugSnapshot: false,
|
|
129
|
-
usedInUi: true,
|
|
130
|
-
},
|
|
131
122
|
};
|
|
132
123
|
/**
|
|
133
124
|
* Get a default empty state for the controller.
|
|
@@ -144,7 +135,6 @@ const getDefaultState = () => {
|
|
|
144
135
|
c2DomainBlocklistLastFetched: 0,
|
|
145
136
|
urlScanCache: {},
|
|
146
137
|
tokenScanCache: {},
|
|
147
|
-
addressScanCache: {},
|
|
148
138
|
};
|
|
149
139
|
};
|
|
150
140
|
/**
|
|
@@ -162,12 +152,10 @@ export class PhishingController extends BaseController {
|
|
|
162
152
|
* @param config.urlScanCacheMaxSize - Maximum number of entries in the scan cache.
|
|
163
153
|
* @param config.tokenScanCacheTTL - Time to live in seconds for cached token scan results.
|
|
164
154
|
* @param config.tokenScanCacheMaxSize - Maximum number of entries in the token scan cache.
|
|
165
|
-
* @param config.addressScanCacheTTL - Time to live in seconds for cached address scan results.
|
|
166
|
-
* @param config.addressScanCacheMaxSize - Maximum number of entries in the address scan cache.
|
|
167
155
|
* @param config.messenger - The controller restricted messenger.
|
|
168
156
|
* @param config.state - Initial state to set on this controller.
|
|
169
157
|
*/
|
|
170
|
-
constructor({ stalelistRefreshInterval = STALELIST_REFRESH_INTERVAL, hotlistRefreshInterval = HOTLIST_REFRESH_INTERVAL, c2DomainBlocklistRefreshInterval = C2_DOMAIN_BLOCKLIST_REFRESH_INTERVAL, urlScanCacheTTL = DEFAULT_URL_SCAN_CACHE_TTL, urlScanCacheMaxSize = DEFAULT_URL_SCAN_CACHE_MAX_SIZE, tokenScanCacheTTL = DEFAULT_TOKEN_SCAN_CACHE_TTL, tokenScanCacheMaxSize = DEFAULT_TOKEN_SCAN_CACHE_MAX_SIZE,
|
|
158
|
+
constructor({ stalelistRefreshInterval = STALELIST_REFRESH_INTERVAL, hotlistRefreshInterval = HOTLIST_REFRESH_INTERVAL, c2DomainBlocklistRefreshInterval = C2_DOMAIN_BLOCKLIST_REFRESH_INTERVAL, urlScanCacheTTL = DEFAULT_URL_SCAN_CACHE_TTL, urlScanCacheMaxSize = DEFAULT_URL_SCAN_CACHE_MAX_SIZE, tokenScanCacheTTL = DEFAULT_TOKEN_SCAN_CACHE_TTL, tokenScanCacheMaxSize = DEFAULT_TOKEN_SCAN_CACHE_MAX_SIZE, messenger, state = {}, }) {
|
|
171
159
|
super({
|
|
172
160
|
name: controllerName,
|
|
173
161
|
metadata,
|
|
@@ -186,7 +174,6 @@ export class PhishingController extends BaseController {
|
|
|
186
174
|
_PhishingController_c2DomainBlocklistRefreshInterval.set(this, void 0);
|
|
187
175
|
_PhishingController_urlScanCache.set(this, void 0);
|
|
188
176
|
_PhishingController_tokenScanCache.set(this, void 0);
|
|
189
|
-
_PhishingController_addressScanCache.set(this, void 0);
|
|
190
177
|
_PhishingController_inProgressHotlistUpdate.set(this, void 0);
|
|
191
178
|
_PhishingController_inProgressStalelistUpdate.set(this, void 0);
|
|
192
179
|
_PhishingController_isProgressC2DomainBlocklistUpdate.set(this, void 0);
|
|
@@ -380,79 +367,6 @@ export class PhishingController extends BaseController {
|
|
|
380
367
|
}
|
|
381
368
|
return apiResponse;
|
|
382
369
|
});
|
|
383
|
-
/**
|
|
384
|
-
* Scan an address for security alerts.
|
|
385
|
-
*
|
|
386
|
-
* @param chainId - The chain ID in hex format (e.g., '0x1' for Ethereum).
|
|
387
|
-
* @param address - The address to scan.
|
|
388
|
-
* @returns The address scan result.
|
|
389
|
-
*/
|
|
390
|
-
this.scanAddress = async (chainId, address) => {
|
|
391
|
-
if (!address || !chainId) {
|
|
392
|
-
return {
|
|
393
|
-
result_type: AddressScanResultType.ErrorResult,
|
|
394
|
-
label: '',
|
|
395
|
-
};
|
|
396
|
-
}
|
|
397
|
-
const normalizedChainId = chainId.toLowerCase();
|
|
398
|
-
const normalizedAddress = address.toLowerCase();
|
|
399
|
-
const chain = resolveChainName(normalizedChainId);
|
|
400
|
-
if (!chain) {
|
|
401
|
-
return {
|
|
402
|
-
result_type: AddressScanResultType.ErrorResult,
|
|
403
|
-
label: '',
|
|
404
|
-
};
|
|
405
|
-
}
|
|
406
|
-
const cacheKey = buildCacheKey(normalizedChainId, normalizedAddress);
|
|
407
|
-
const cachedResult = __classPrivateFieldGet(this, _PhishingController_addressScanCache, "f").get(cacheKey);
|
|
408
|
-
if (cachedResult) {
|
|
409
|
-
return {
|
|
410
|
-
result_type: cachedResult.result_type,
|
|
411
|
-
label: cachedResult.label,
|
|
412
|
-
};
|
|
413
|
-
}
|
|
414
|
-
const apiResponse = await safelyExecuteWithTimeout(async () => {
|
|
415
|
-
const res = await fetch(`${SECURITY_ALERTS_BASE_URL}${ADDRESS_SCAN_ENDPOINT}`, {
|
|
416
|
-
method: 'POST',
|
|
417
|
-
headers: {
|
|
418
|
-
Accept: 'application/json',
|
|
419
|
-
'Content-Type': 'application/json',
|
|
420
|
-
},
|
|
421
|
-
body: JSON.stringify({
|
|
422
|
-
chain,
|
|
423
|
-
address: normalizedAddress,
|
|
424
|
-
}),
|
|
425
|
-
});
|
|
426
|
-
if (!res.ok) {
|
|
427
|
-
return {
|
|
428
|
-
error: `${res.status} ${res.statusText}`,
|
|
429
|
-
};
|
|
430
|
-
}
|
|
431
|
-
const data = await res.json();
|
|
432
|
-
return data;
|
|
433
|
-
}, true, 5000);
|
|
434
|
-
if (!apiResponse) {
|
|
435
|
-
return {
|
|
436
|
-
result_type: AddressScanResultType.ErrorResult,
|
|
437
|
-
label: '',
|
|
438
|
-
};
|
|
439
|
-
}
|
|
440
|
-
else if ('error' in apiResponse) {
|
|
441
|
-
return {
|
|
442
|
-
result_type: AddressScanResultType.ErrorResult,
|
|
443
|
-
label: '',
|
|
444
|
-
};
|
|
445
|
-
}
|
|
446
|
-
const result = {
|
|
447
|
-
result_type: apiResponse.result_type,
|
|
448
|
-
label: apiResponse.label,
|
|
449
|
-
};
|
|
450
|
-
__classPrivateFieldGet(this, _PhishingController_addressScanCache, "f").set(cacheKey, result);
|
|
451
|
-
return {
|
|
452
|
-
result_type: apiResponse.result_type,
|
|
453
|
-
label: apiResponse.label,
|
|
454
|
-
};
|
|
455
|
-
};
|
|
456
370
|
/**
|
|
457
371
|
* Scan multiple tokens for malicious activity in bulk.
|
|
458
372
|
*
|
|
@@ -578,16 +492,6 @@ export class PhishingController extends BaseController {
|
|
|
578
492
|
});
|
|
579
493
|
},
|
|
580
494
|
}), "f");
|
|
581
|
-
__classPrivateFieldSet(this, _PhishingController_addressScanCache, new CacheManager({
|
|
582
|
-
cacheTTL: addressScanCacheTTL,
|
|
583
|
-
maxCacheSize: addressScanCacheMaxSize,
|
|
584
|
-
initialCache: this.state.addressScanCache,
|
|
585
|
-
updateState: (cache) => {
|
|
586
|
-
this.update((draftState) => {
|
|
587
|
-
draftState.addressScanCache = cache;
|
|
588
|
-
});
|
|
589
|
-
},
|
|
590
|
-
}), "f");
|
|
591
495
|
__classPrivateFieldGet(this, _PhishingController_instances, "m", _PhishingController_registerMessageHandlers).call(this);
|
|
592
496
|
this.updatePhishingDetector();
|
|
593
497
|
__classPrivateFieldGet(this, _PhishingController_instances, "m", _PhishingController_subscribeToTransactionControllerStateChange).call(this);
|
|
@@ -825,14 +729,13 @@ export class PhishingController extends BaseController {
|
|
|
825
729
|
}
|
|
826
730
|
}
|
|
827
731
|
}
|
|
828
|
-
_PhishingController_detector = new WeakMap(), _PhishingController_stalelistRefreshInterval = new WeakMap(), _PhishingController_hotlistRefreshInterval = new WeakMap(), _PhishingController_c2DomainBlocklistRefreshInterval = new WeakMap(), _PhishingController_urlScanCache = new WeakMap(), _PhishingController_tokenScanCache = new WeakMap(),
|
|
732
|
+
_PhishingController_detector = new WeakMap(), _PhishingController_stalelistRefreshInterval = new WeakMap(), _PhishingController_hotlistRefreshInterval = new WeakMap(), _PhishingController_c2DomainBlocklistRefreshInterval = new WeakMap(), _PhishingController_urlScanCache = new WeakMap(), _PhishingController_tokenScanCache = new WeakMap(), _PhishingController_inProgressHotlistUpdate = new WeakMap(), _PhishingController_inProgressStalelistUpdate = new WeakMap(), _PhishingController_isProgressC2DomainBlocklistUpdate = new WeakMap(), _PhishingController_transactionControllerStateChangeHandler = new WeakMap(), _PhishingController_fetchTokenScanBulkResults = new WeakMap(), _PhishingController_processBatch = new WeakMap(), _PhishingController_instances = new WeakSet(), _PhishingController_subscribeToTransactionControllerStateChange = function _PhishingController_subscribeToTransactionControllerStateChange() {
|
|
829
733
|
this.messenger.subscribe('TransactionController:stateChange', __classPrivateFieldGet(this, _PhishingController_transactionControllerStateChangeHandler, "f"));
|
|
830
734
|
}, _PhishingController_registerMessageHandlers = function _PhishingController_registerMessageHandlers() {
|
|
831
735
|
this.messenger.registerActionHandler(`${controllerName}:maybeUpdateState`, this.maybeUpdateState.bind(this));
|
|
832
736
|
this.messenger.registerActionHandler(`${controllerName}:testOrigin`, this.test.bind(this));
|
|
833
737
|
this.messenger.registerActionHandler(`${controllerName}:bulkScanUrls`, this.bulkScanUrls.bind(this));
|
|
834
738
|
this.messenger.registerActionHandler(`${controllerName}:bulkScanTokens`, this.bulkScanTokens.bind(this));
|
|
835
|
-
this.messenger.registerActionHandler(`${controllerName}:scanAddress`, this.scanAddress.bind(this));
|
|
836
739
|
}, _PhishingController_isTransactionPatch = function _PhishingController_isTransactionPatch(patch) {
|
|
837
740
|
const { path } = patch;
|
|
838
741
|
return (path.length === 2 &&
|