From 647650376fe7ad669f2dd9ab0b4a26bcaf53bcd1 Mon Sep 17 00:00:00 2001 From: Maarten Zuidhoorn Date: Thu, 23 Jul 2026 11:17:37 +0200 Subject: [PATCH] refactor: add .js import extensions to phishing-controller --- eslint.config.mjs | 1 + packages/phishing-controller/package.json | 4 ++-- .../src/BulkTokenScan.test.ts | 8 +++---- .../src/CacheManager.test.ts | 4 ++-- .../phishing-controller/src/CacheManager.ts | 2 +- .../phishing-controller/src/PathTrie.test.ts | 4 ++-- packages/phishing-controller/src/PathTrie.ts | 2 +- .../PhishingController-method-action-types.ts | 2 +- .../src/PhishingController.test.ts | 15 +++++++----- .../src/PhishingController.ts | 24 +++++++++++-------- .../src/PhishingDetector.test.ts | 10 ++++---- .../src/PhishingDetector.ts | 10 ++++---- .../src/address-poisoning.test.ts | 2 +- .../src/address-poisoning.ts | 2 +- packages/phishing-controller/src/index.ts | 22 ++++++++--------- .../phishing-controller/src/utils.test.ts | 8 +++---- packages/phishing-controller/src/utils.ts | 12 +++++----- 17 files changed, 70 insertions(+), 62 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index c43565dbfcb..34bbb2626a0 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -432,6 +432,7 @@ const config = createConfig([ 'packages/permission-controller/**', 'packages/permission-log-controller/**', 'packages/perps-controller/**', + 'packages/phishing-controller/**', 'packages/platform-api-docs/**', 'packages/polling-controller/**', 'packages/preferences-controller/**', diff --git a/packages/phishing-controller/package.json b/packages/phishing-controller/package.json index a5efa864a9c..338ff318436 100644 --- a/packages/phishing-controller/package.json +++ b/packages/phishing-controller/package.json @@ -46,8 +46,8 @@ "changelog:validate": "../../scripts/validate-changelog.sh @metamask/phishing-controller", "lint:tsconfigs": "tsx ../../scripts/lint-tsconfigs/lint-tsconfigs.mts", "lint:tsconfigs:fix": "tsx ../../scripts/lint-tsconfigs/lint-tsconfigs.mts --fix", - "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --formatter oxfmt --check", - "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --formatter oxfmt --generate", + "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --formatter oxfmt --esm --check", + "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --formatter oxfmt --esm --generate", "since-latest-release": "../../scripts/since-latest-release.sh", "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter", "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache", diff --git a/packages/phishing-controller/src/BulkTokenScan.test.ts b/packages/phishing-controller/src/BulkTokenScan.test.ts index 22cc11cd3cc..7f2ab12fc82 100644 --- a/packages/phishing-controller/src/BulkTokenScan.test.ts +++ b/packages/phishing-controller/src/BulkTokenScan.test.ts @@ -11,13 +11,13 @@ import { PhishingController, SECURITY_ALERTS_BASE_URL, TOKEN_BULK_SCANNING_ENDPOINT, -} from './PhishingController'; +} from './PhishingController.js'; import type { PhishingControllerMessenger, PhishingControllerOptions, -} from './PhishingController'; -import { TokenScanResultType } from './types'; -import type { BulkTokenScanRequest, TokenScanApiResponse } from './types'; +} from './PhishingController.js'; +import { TokenScanResultType } from './types.js'; +import type { BulkTokenScanRequest, TokenScanApiResponse } from './types.js'; jest.mock('@metamask/controller-utils', () => ({ ...jest.requireActual('@metamask/controller-utils'), diff --git a/packages/phishing-controller/src/CacheManager.test.ts b/packages/phishing-controller/src/CacheManager.test.ts index 3f0d3fe42e4..5bbf8c92cb5 100644 --- a/packages/phishing-controller/src/CacheManager.test.ts +++ b/packages/phishing-controller/src/CacheManager.test.ts @@ -1,5 +1,5 @@ -import { CacheManager } from './CacheManager'; -import * as utils from './utils'; +import { CacheManager } from './CacheManager.js'; +import * as utils from './utils.js'; describe('CacheManager', () => { let updateStateSpy: jest.Mock; diff --git a/packages/phishing-controller/src/CacheManager.ts b/packages/phishing-controller/src/CacheManager.ts index bf40dd1e2df..9dd4b256353 100644 --- a/packages/phishing-controller/src/CacheManager.ts +++ b/packages/phishing-controller/src/CacheManager.ts @@ -1,4 +1,4 @@ -import { fetchTimeNow } from './utils'; +import { fetchTimeNow } from './utils.js'; /** * Generic cache entry type that wraps the data with a timestamp diff --git a/packages/phishing-controller/src/PathTrie.test.ts b/packages/phishing-controller/src/PathTrie.test.ts index 3169a7f1cfa..55d3f6567a8 100644 --- a/packages/phishing-controller/src/PathTrie.test.ts +++ b/packages/phishing-controller/src/PathTrie.test.ts @@ -5,8 +5,8 @@ import { insertToTrie, isTerminal, matchedPathPrefix, -} from './PathTrie'; -import type { PathTrie } from './PathTrie'; +} from './PathTrie.js'; +import type { PathTrie } from './PathTrie.js'; const emptyPathTrie: PathTrie = {}; diff --git a/packages/phishing-controller/src/PathTrie.ts b/packages/phishing-controller/src/PathTrie.ts index a500de3a8f2..8d435206c68 100644 --- a/packages/phishing-controller/src/PathTrie.ts +++ b/packages/phishing-controller/src/PathTrie.ts @@ -1,4 +1,4 @@ -import { getHostnameAndPathComponents } from './utils'; +import { getHostnameAndPathComponents } from './utils.js'; export type PathNode = { [key: string]: PathNode; diff --git a/packages/phishing-controller/src/PhishingController-method-action-types.ts b/packages/phishing-controller/src/PhishingController-method-action-types.ts index 59e7070b312..cfd36b561ed 100644 --- a/packages/phishing-controller/src/PhishingController-method-action-types.ts +++ b/packages/phishing-controller/src/PhishingController-method-action-types.ts @@ -3,7 +3,7 @@ * Do not edit manually. */ -import type { PhishingController } from './PhishingController'; +import type { PhishingController } from './PhishingController.js'; /** * Finds known recipient addresses that look like an address poisoning match. diff --git a/packages/phishing-controller/src/PhishingController.test.ts b/packages/phishing-controller/src/PhishingController.test.ts index fac3cbc3703..eeacb996d9a 100644 --- a/packages/phishing-controller/src/PhishingController.test.ts +++ b/packages/phishing-controller/src/PhishingController.test.ts @@ -25,27 +25,30 @@ import { SECURITY_ALERTS_BASE_URL, ADDRESS_SCAN_ENDPOINT, APPROVALS_ENDPOINT, -} from './PhishingController'; +} from './PhishingController.js'; import type { PhishingControllerOptions, BulkPhishingDetectionScanResponse, PhishingControllerMessenger, -} from './PhishingController'; +} from './PhishingController.js'; import { createMockStateChangePayload, createMockTransaction, formatHostnameToUrl, TEST_ADDRESSES, -} from './tests/utils'; -import type { PhishingDetectionScanResult, AddressScanResult } from './types'; +} from './tests/utils.js'; +import type { + PhishingDetectionScanResult, + AddressScanResult, +} from './types.js'; import { PhishingDetectorResultType, RecommendedAction, AddressScanResultType, ApprovalResultType, ApprovalFeatureType, -} from './types'; -import { getHostnameFromUrl } from './utils'; +} from './types.js'; +import { getHostnameFromUrl } from './utils.js'; const controllerName = 'PhishingController'; diff --git a/packages/phishing-controller/src/PhishingController.ts b/packages/phishing-controller/src/PhishingController.ts index ee48f86c228..02da6b89e2f 100644 --- a/packages/phishing-controller/src/PhishingController.ts +++ b/packages/phishing-controller/src/PhishingController.ts @@ -25,22 +25,26 @@ import { TransactionStatus } from '@metamask/transaction-controller'; import type { Patch } from 'immer'; import { toASCII } from 'punycode/punycode.js'; -import { findSimilarAddresses } from './address-poisoning'; -import { CacheManager } from './CacheManager'; -import type { CacheEntry } from './CacheManager'; -import { convertListToTrie, insertToTrie, matchedPathPrefix } from './PathTrie'; -import type { PathTrie } from './PathTrie'; +import { findSimilarAddresses } from './address-poisoning.js'; +import { CacheManager } from './CacheManager.js'; +import type { CacheEntry } from './CacheManager.js'; +import { + convertListToTrie, + insertToTrie, + matchedPathPrefix, +} from './PathTrie.js'; +import type { PathTrie } from './PathTrie.js'; import type { PhishingControllerMaybeUpdateStateAction, PhishingControllerMethodActions, PhishingControllerTestOriginAction, -} from './PhishingController-method-action-types'; -import { PhishingDetector } from './PhishingDetector'; +} from './PhishingController-method-action-types.js'; +import { PhishingDetector } from './PhishingDetector.js'; import { PhishingDetectorResultType, RecommendedAction, AddressScanResultType, -} from './types'; +} from './types.js'; import type { PhishingDetectorResult, PhishingDetectionScanResult, @@ -52,7 +56,7 @@ import type { AddressScanResult, SimilarAddressMatch, ApprovalsResponse, -} from './types'; +} from './types.js'; import { applyDiffs, fetchTimeNow, @@ -67,7 +71,7 @@ import { isAddressScanSupportedChain, isApprovalSupportedChain, isTokenScanSupportedChain, -} from './utils'; +} from './utils.js'; export const PHISHING_CONFIG_BASE_URL = 'https://phishing-detection.api.cx.metamask.io'; diff --git a/packages/phishing-controller/src/PhishingDetector.test.ts b/packages/phishing-controller/src/PhishingDetector.test.ts index 51edd5ed482..8736b47c8fe 100644 --- a/packages/phishing-controller/src/PhishingDetector.test.ts +++ b/packages/phishing-controller/src/PhishingDetector.test.ts @@ -1,8 +1,8 @@ -import { PhishingDetector } from './PhishingDetector'; -import type { PhishingDetectorOptions } from './PhishingDetector'; -import { formatHostnameToUrl } from './tests/utils'; -import { PhishingDetectorResultType } from './types'; -import { sha256Hash } from './utils'; +import { PhishingDetector } from './PhishingDetector.js'; +import type { PhishingDetectorOptions } from './PhishingDetector.js'; +import { formatHostnameToUrl } from './tests/utils.js'; +import { PhishingDetectorResultType } from './types.js'; +import { sha256Hash } from './utils.js'; describe('PhishingDetector', () => { describe('constructor', () => { diff --git a/packages/phishing-controller/src/PhishingDetector.ts b/packages/phishing-controller/src/PhishingDetector.ts index d94e1044b8b..b6064b7d3da 100644 --- a/packages/phishing-controller/src/PhishingDetector.ts +++ b/packages/phishing-controller/src/PhishingDetector.ts @@ -1,9 +1,9 @@ import { distance } from 'fastest-levenshtein'; -import { matchedPathPrefix } from './PathTrie'; -import type { PathTrie } from './PathTrie'; -import { PhishingDetectorResultType } from './types'; -import type { PhishingDetectorResult } from './types'; +import { matchedPathPrefix } from './PathTrie.js'; +import type { PathTrie } from './PathTrie.js'; +import { PhishingDetectorResultType } from './types.js'; +import type { PhishingDetectorResult } from './types.js'; import { domainPartsToDomain, domainPartsToFuzzyForm, @@ -14,7 +14,7 @@ import { matchPartsAgainstList, processConfigs, sha256Hash, -} from './utils'; +} from './utils.js'; export type LegacyPhishingDetectorList = { whitelist?: string[]; diff --git a/packages/phishing-controller/src/address-poisoning.test.ts b/packages/phishing-controller/src/address-poisoning.test.ts index cbf08b3ef62..cd89b4b2b40 100644 --- a/packages/phishing-controller/src/address-poisoning.test.ts +++ b/packages/phishing-controller/src/address-poisoning.test.ts @@ -1,4 +1,4 @@ -import { findSimilarAddresses } from './address-poisoning'; +import { findSimilarAddresses } from './address-poisoning.js'; function getNumberRange(start: number, end: number): number[] { return Array.from({ length: end - start + 1 }, (_, index) => start + index); diff --git a/packages/phishing-controller/src/address-poisoning.ts b/packages/phishing-controller/src/address-poisoning.ts index 89adf2953c2..63bbdbef205 100644 --- a/packages/phishing-controller/src/address-poisoning.ts +++ b/packages/phishing-controller/src/address-poisoning.ts @@ -1,6 +1,6 @@ import { isValidHexAddress } from '@metamask/controller-utils'; -import type { SimilarAddressMatch, SimilarityOptions } from './types'; +import type { SimilarAddressMatch, SimilarityOptions } from './types.js'; const DEFAULT_PREFIX_LEN = 4; const DEFAULT_SUFFIX_LEN = 4; diff --git a/packages/phishing-controller/src/index.ts b/packages/phishing-controller/src/index.ts index bb08ca9bf5b..0f963ea60c4 100644 --- a/packages/phishing-controller/src/index.ts +++ b/packages/phishing-controller/src/index.ts @@ -1,13 +1,13 @@ -export * from './PhishingController'; -export { findSimilarAddresses } from './address-poisoning'; +export * from './PhishingController.js'; +export { findSimilarAddresses } from './address-poisoning.js'; export type { LegacyPhishingDetectorList, PhishingDetectorList, FuzzyTolerance, PhishingDetectorOptions, PhishingDetectorConfiguration, -} from './PhishingDetector'; -export { PhishingDetector } from './PhishingDetector'; +} from './PhishingDetector.js'; +export { PhishingDetector } from './PhishingDetector.js'; export type { PhishingDetectionScanResult, AddressScanResult, @@ -21,22 +21,22 @@ export type { Exposure, Spender, ApprovalFeature, -} from './types'; -export type { TokenScanCacheData } from './types'; -export { TokenScanResultType } from './types'; +} from './types.js'; +export type { TokenScanCacheData } from './types.js'; +export { TokenScanResultType } from './types.js'; export { PhishingDetectorResultType, RecommendedAction, AddressScanResultType, ApprovalResultType, ApprovalFeatureType, -} from './types'; -export type { CacheEntry } from './CacheManager'; +} from './types.js'; +export type { CacheEntry } from './CacheManager.js'; export { PHISHING_DETECTION_PATH_BASED_ROOT_DOMAINS, getPhishingDetectionScanUrlParam, isPhishingDetectionPathBasedHostname, -} from './utils'; +} from './utils.js'; export type { PhishingControllerMaybeUpdateStateAction, @@ -49,4 +49,4 @@ export type { PhishingControllerScanAddressAction, PhishingControllerGetApprovalsAction, PhishingControllerCheckAddressPoisoningAction, -} from './PhishingController-method-action-types'; +} from './PhishingController-method-action-types.js'; diff --git a/packages/phishing-controller/src/utils.test.ts b/packages/phishing-controller/src/utils.test.ts index ca66a68d30b..14330fbdf1e 100644 --- a/packages/phishing-controller/src/utils.test.ts +++ b/packages/phishing-controller/src/utils.test.ts @@ -1,6 +1,6 @@ -import { ListKeys, ListNames } from './PhishingController'; -import type { PhishingListState } from './PhishingController'; -import type { TokenScanResultType } from './types'; +import { ListKeys, ListNames } from './PhishingController.js'; +import type { PhishingListState } from './PhishingController.js'; +import type { TokenScanResultType } from './types.js'; import { applyDiffs, buildCacheKey, @@ -22,7 +22,7 @@ import { sha256Hash, splitCacheHits, validateConfig, -} from './utils'; +} from './utils.js'; const exampleBlockedUrl = 'https://example-blocked-website.com'; const exampleBlockedUrlOne = 'https://another-example-blocked-website.com'; diff --git a/packages/phishing-controller/src/utils.ts b/packages/phishing-controller/src/utils.ts index a654718887b..57dd71ab5b1 100644 --- a/packages/phishing-controller/src/utils.ts +++ b/packages/phishing-controller/src/utils.ts @@ -1,26 +1,26 @@ import { bytesToHex } from '@noble/hashes/utils'; import { sha256 } from 'ethereum-cryptography/sha256'; -import { deleteFromTrie, insertToTrie, deepCopyPathTrie } from './PathTrie'; -import type { Hotlist, PhishingListState } from './PhishingController'; -import { ListKeys, phishingListKeyNameMap } from './PhishingController'; +import { deleteFromTrie, insertToTrie, deepCopyPathTrie } from './PathTrie.js'; +import type { Hotlist, PhishingListState } from './PhishingController.js'; +import { ListKeys, phishingListKeyNameMap } from './PhishingController.js'; import type { PhishingDetectorList, PhishingDetectorConfiguration, -} from './PhishingDetector'; +} from './PhishingDetector.js'; import { ADDRESS_SCAN_SUPPORTED_CHAINS, APPROVAL_SUPPORTED_CHAINS, DEFAULT_CHAIN_ID_TO_NAME, TOKEN_SCAN_SUPPORTED_CHAINS, -} from './types'; +} from './types.js'; import type { AddressScanSupportedChain, ApprovalSupportedChain, TokenScanCacheData, TokenScanResult, TokenScanSupportedChain, -} from './types'; +} from './types.js'; const DEFAULT_TOLERANCE = 3;