diff --git a/.yarn/patches/@metamask-safe-event-emitter-npm-3.1.1-a7872b1f5a.patch b/.yarn/patches/@metamask-safe-event-emitter-npm-3.1.1-a7872b1f5a.patch
new file mode 100644
index 00000000000..a5ef80d01f5
--- /dev/null
+++ b/.yarn/patches/@metamask-safe-event-emitter-npm-3.1.1-a7872b1f5a.patch
@@ -0,0 +1,24 @@
+diff --git a/dist/esm/index.d.mts b/dist/esm/index.d.mts
+new file mode 100644
+index 0000000000000000000000000000000000000000..d48ab7ade4e48f566f3ca48c60636368919b1044
+--- /dev/null
++++ b/dist/esm/index.d.mts
+@@ -0,0 +1,5 @@
++///
++import { EventEmitter } from 'events';
++export default class SafeEventEmitter extends EventEmitter {
++ emit(type: string, ...args: any[]): boolean;
++}
+diff --git a/package.json b/package.json
+index 87ca2f6363c43d2f9d45be268e8ba03c1669c02c..72211f17fe3976ef8dac7d8512d60a6de1275fbd 100644
+--- a/package.json
++++ b/package.json
+@@ -8,7 +8,7 @@
+ "exports": {
+ ".": {
+ "import": {
+- "types": "./dist/esm/index.d.ts",
++ "types": "./dist/esm/index.d.mts",
+ "default": "./dist/esm/index.mjs"
+ },
+ "require": {
diff --git a/.yarnrc.yml b/.yarnrc.yml
index 03ae3081348..4c0e4f39a5a 100644
--- a/.yarnrc.yml
+++ b/.yarnrc.yml
@@ -27,7 +27,6 @@ npmPreapprovedPackages:
- "@metamask/*"
- "@metamask-previews/*"
- "@lavamoat/*"
- - "@ts-bridge/*"
plugins:
- path: .yarn/plugins/@yarnpkg/plugin-allow-scripts.cjs
diff --git a/docs/processes/building.md b/docs/processes/building.md
index a4f1629331d..6618b6fe18f 100644
--- a/docs/processes/building.md
+++ b/docs/processes/building.md
@@ -1,7 +1,5 @@
# Building packages
-[`ts-bridge`](https://github.com/ts-bridge/ts-bridge) is used to build packages in both CommonJS- and ESM-compatible formats.
-
Built files show up in the `dist/` directory in each package. These are the files which will ultimately be published to NPM.
- Run `yarn build` to build all packages in the monorepo.
diff --git a/eslint-suppressions.json b/eslint-suppressions.json
index 79caefd17d3..483411966b1 100644
--- a/eslint-suppressions.json
+++ b/eslint-suppressions.json
@@ -14,9 +14,6 @@
"@typescript-eslint/explicit-function-return-type": {
"count": 7
},
- "@typescript-eslint/prefer-nullish-coalescing": {
- "count": 1
- },
"no-negated-condition": {
"count": 3
},
@@ -251,9 +248,6 @@
"packages/assets-controllers/src/DeFiPositionsController/DeFiPositionsController.ts": {
"@typescript-eslint/explicit-function-return-type": {
"count": 2
- },
- "@typescript-eslint/no-misused-promises": {
- "count": 2
}
},
"packages/assets-controllers/src/DeFiPositionsController/group-defi-positions.ts": {
@@ -289,9 +283,6 @@
}
},
"packages/assets-controllers/src/MultichainBalancesController/MultichainBalancesController.ts": {
- "@typescript-eslint/no-misused-promises": {
- "count": 1
- },
"no-restricted-syntax": {
"count": 2
}
@@ -311,12 +302,6 @@
"@typescript-eslint/naming-convention": {
"count": 5
},
- "@typescript-eslint/no-misused-promises": {
- "count": 2
- },
- "@typescript-eslint/prefer-nullish-coalescing": {
- "count": 6
- },
"@typescript-eslint/prefer-optional-chain": {
"count": 1
},
@@ -475,9 +460,6 @@
"@typescript-eslint/no-unused-vars": {
"count": 1
},
- "@typescript-eslint/prefer-optional-chain": {
- "count": 3
- },
"id-length": {
"count": 1
},
@@ -601,9 +583,6 @@
"@typescript-eslint/explicit-function-return-type": {
"count": 25
},
- "@typescript-eslint/prefer-nullish-coalescing": {
- "count": 1
- },
"no-negated-condition": {
"count": 1
}
@@ -1288,9 +1267,6 @@
"@typescript-eslint/explicit-function-return-type": {
"count": 1
},
- "@typescript-eslint/prefer-nullish-coalescing": {
- "count": 2
- },
"id-denylist": {
"count": 1
}
@@ -1377,9 +1353,6 @@
"@typescript-eslint/explicit-function-return-type": {
"count": 4
},
- "@typescript-eslint/no-misused-promises": {
- "count": 2
- },
"no-restricted-syntax": {
"count": 1
}
@@ -1739,9 +1712,6 @@
"@typescript-eslint/explicit-function-return-type": {
"count": 4
},
- "@typescript-eslint/prefer-nullish-coalescing": {
- "count": 4
- },
"id-length": {
"count": 2
},
@@ -2105,9 +2075,6 @@
"@typescript-eslint/explicit-function-return-type": {
"count": 7
},
- "@typescript-eslint/no-base-to-string": {
- "count": 1
- },
"@typescript-eslint/no-unused-vars": {
"count": 2
},
@@ -2131,7 +2098,7 @@
"count": 10
},
"@typescript-eslint/no-floating-promises": {
- "count": 4
+ "count": 3
},
"no-restricted-syntax": {
"count": 4
@@ -2240,11 +2207,6 @@
"count": 2
}
},
- "packages/transaction-pay-controller/src/strategy/bridge/bridge-submit.ts": {
- "no-restricted-syntax": {
- "count": 1
- }
- },
"packages/transaction-pay-controller/src/strategy/relay/hyperliquid-withdraw.ts": {
"no-restricted-syntax": {
"count": 1
diff --git a/eslint.config.mjs b/eslint.config.mjs
index 9aa11e168a2..66675679713 100644
--- a/eslint.config.mjs
+++ b/eslint.config.mjs
@@ -2,6 +2,7 @@ import base, { createConfig } from '@metamask/eslint-config';
import jest from '@metamask/eslint-config-jest';
import nodejs from '@metamask/eslint-config-nodejs';
import typescript from '@metamask/eslint-config-typescript';
+import node from 'eslint-plugin-n';
const NODE_LTS_VERSION = 22;
@@ -94,6 +95,9 @@ const config = createConfig([
// Handled by Oxfmt.
'prettier/prettier': 'off',
'import-x/order': 'off',
+ // Allow `void somePromise()` to explicitly mark ignored promises
+ // (required by `no-floating-promises`).
+ 'no-void': ['error', { allowAsStatement: true }],
},
},
{
@@ -125,7 +129,7 @@ const config = createConfig([
{
files: ['**/*.{js,cjs}'],
languageOptions: {
- sourceType: 'script',
+ sourceType: 'module',
ecmaVersion: 2020,
},
},
@@ -179,6 +183,10 @@ const config = createConfig([
'jest/no-alias-methods': 'error',
'jest/no-commented-out-tests': 'error',
'jest/no-disabled-tests': 'error',
+
+ // `import { jest } from '@jest/globals'` is required in ESM test files
+ // and intentionally shadows the Jest-injected global.
+ '@typescript-eslint/no-shadow': ['error', { allow: ['jest'] }],
},
settings: {
node: {
@@ -218,6 +226,19 @@ const config = createConfig([
'n/hashbang': 'off',
},
},
+ {
+ files: [
+ '**/*.cjs',
+ '**/.prettierrc.js',
+ '**/.eslintrc.js',
+ '**/jest.config*.js',
+ '**/jest.environment.js',
+ ],
+ rules: {
+ // CJS config files have no import/export statements.
+ 'import-x/unambiguous': 'off',
+ },
+ },
{
files: ['**/jest.environment.js'],
rules: {
@@ -373,6 +394,33 @@ const config = createConfig([
'n/no-process-env': 'off',
},
},
+
+ // ESM-specific configuration. We should port this to
+ // `@metamask/eslint-config` at some point.
+ {
+ plugins: { n: node },
+ rules: {
+ // `import-x/extensions` doesn't support using ".js" for TypeScript
+ // files(?), so we load the `n` plugin and use
+ // `n/file-extension-in-import` instead.
+ 'n/file-extension-in-import': ['error', 'always'],
+ 'import-x/extensions': [
+ 'error',
+ {
+ js: 'ignorePackages',
+ ts: 'never',
+ tsx: 'never',
+ json: 'always',
+ },
+ ],
+ 'import-x/no-useless-path-segments': [
+ 'error',
+ {
+ noUselessIndex: false,
+ },
+ ],
+ },
+ },
]);
export default config;
diff --git a/jest.config.packages.js b/jest.config.packages.js
index 07d249241ce..0c117ba67c0 100644
--- a/jest.config.packages.js
+++ b/jest.config.packages.js
@@ -3,7 +3,16 @@
* https://jestjs.io/docs/configuration
*/
-module.exports = {
+import { fileURLToPath } from 'node:url';
+import { createDefaultEsmPreset } from 'ts-jest';
+
+const presetConfig = createDefaultEsmPreset({
+ tsconfig: '/tsconfig.json',
+});
+
+const config = {
+ ...presetConfig,
+
// All imported modules in your tests should be mocked automatically
// automock: false,
@@ -77,20 +86,17 @@ module.exports = {
// ],
// A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module
- // Here we ensure that Jest resolves `@metamask/*` imports to the uncompiled source code for packages that live in this repo.
- // NOTE: This must be synchronized with the `paths` option in `tsconfig.base.json`.
+ // NOTE: Monorepo `@metamask/*` packages are resolved to TypeScript source by `jest.resolver.cjs`.
+ // External `@metamask/*` packages are resolved by Jest's default resolver, which honours `exports` fields.
+ // NOTE: The `'^(\\..+)\\.js$'` entry must be synchronized with the `paths` option in `tsconfig.base.json`.
moduleNameMapper: {
+ '^(\\..+)\\.js$': '$1',
'^@metamask/json-rpc-engine/v2$': [
'/../json-rpc-engine/src/v2/index.ts',
],
- '^@metamask/utils/node$': require.resolve('@metamask/utils/node'),
- '^@metamask/(.+)$': [
- '/../$1/src',
- // Some @metamask/* packages we are referencing aren't in this monorepo,
- // so in that case use their published versions
- '/../../node_modules/@metamask/$1',
- ],
- '^uuid$': require.resolve('uuid'),
+ '^@metamask/utils/node$': fileURLToPath(
+ import.meta.resolve('@metamask/utils/node'),
+ ),
},
// An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader
@@ -103,11 +109,11 @@ module.exports = {
// notifyMode: "failure-change",
// A preset that is used as a base for Jest's configuration
- preset: 'ts-jest',
+ // preset: 'ts-jest',
// The path to the Prettier executable used to format snapshots
// Jest doesn't support Prettier 3 yet, so we use Prettier 2
- prettierPath: require.resolve('prettier-2'),
+ prettierPath: fileURLToPath(import.meta.resolve('prettier-2')),
// Run tests from one or more projects
// projects: undefined
@@ -123,7 +129,7 @@ module.exports = {
// resetModules: false,
// A path to a custom resolver
- // resolver: undefined,
+ resolver: '../../jest.resolver.cjs',
// "restoreMocks" restores all mocks created using jest.spyOn to their
// original implementations, between each test. It does not affect mocked
@@ -208,3 +214,5 @@ module.exports = {
// Whether to use watchman for file crawling
// watchman: true,
};
+
+export default config;
diff --git a/jest.resolver.cjs b/jest.resolver.cjs
new file mode 100644
index 00000000000..78ff40d6354
--- /dev/null
+++ b/jest.resolver.cjs
@@ -0,0 +1,43 @@
+'use strict';
+
+const { join, resolve } = require('path');
+const { existsSync, statSync } = require('fs');
+
+const REPO_ROOT = resolve(__dirname);
+const PACKAGES_DIR = join(REPO_ROOT, 'packages');
+
+/**
+ * Custom Jest resolver that redirects `@metamask/*` imports to monorepo source
+ * when the package exists locally, and falls back to default resolution (which
+ * honours the package `exports` field) for external packages.
+ *
+ * Without this, the `moduleNameMapper` fallback returns a directory path for
+ * external `@metamask/*` packages. Jest then uses `main` (CJS) rather than
+ * `exports.import` (ESM), causing class-inheritance failures at runtime.
+ *
+ * @param {string} moduleName - The module name to resolve.
+ * @param {object} options - Jest resolver options including `defaultResolver`.
+ * @returns {string} The resolved module path.
+ */
+module.exports = function resolver(moduleName, options) {
+ const { defaultResolver } = options;
+
+ const match = /^@metamask\/([^/]+)(\/.*)?$/u.exec(moduleName);
+ if (match) {
+ const [, pkgName, subPath = ''] = match;
+ const srcDir = join(PACKAGES_DIR, pkgName, 'src');
+ // eslint-disable-next-line n/no-sync
+ if (existsSync(srcDir)) {
+ let target = subPath ? join(srcDir, subPath) : join(srcDir, 'index.ts');
+ // If the resolved target is a directory, look for its index file.
+ // eslint-disable-next-line n/no-sync
+ if (existsSync(target) && statSync(target).isDirectory()) {
+ target = join(target, 'index.ts');
+ }
+ return defaultResolver(target, options);
+ }
+ }
+
+ // External package — use default resolver, which honours `exports` fields.
+ return defaultResolver(moduleName, options);
+};
diff --git a/package.json b/package.json
index c10e77ec718..35dd8de9240 100644
--- a/package.json
+++ b/package.json
@@ -12,8 +12,9 @@
"packages/*"
],
"files": [],
+ "type": "module",
"scripts": {
- "build": "yarn ts-bridge --project tsconfig.build.json --verbose",
+ "build": "yarn tsc --build tsconfig.build.json --verbose",
"build:clean": "yarn build:only-clean && yarn build",
"build:docs": "yarn workspaces foreach --all --no-private --parallel --interlaced --verbose run build:docs",
"build:only-clean": "rimraf -g 'packages/*/dist'",
@@ -55,6 +56,7 @@
"workspaces:list-versions": "./scripts/list-workspace-versions.sh"
},
"devDependencies": {
+ "@jest/globals": "^30.4.1",
"@lavamoat/allow-scripts": "^3.0.4",
"@lavamoat/preinstall-always-fail": "^2.1.0",
"@metamask/create-release-branch": "^4.2.1",
@@ -68,7 +70,6 @@
"@metamask/network-controller": "^34.0.0",
"@metamask/skills": "^0.1.0",
"@metamask/utils": "^11.11.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"@types/lodash": "^4.14.191",
"@types/node": "^16.18.54",
@@ -99,6 +100,7 @@
"rimraf": "^5.0.5",
"semver": "^7.6.3",
"simple-git-hooks": "^2.8.0",
+ "ts-jest": "^29.2.5",
"tsx": "^4.20.5",
"typescript": "~5.3.3",
"typescript-eslint": "^8.48.0",
@@ -109,7 +111,9 @@
"@nktkas/hyperliquid@npm:^0.33.1": "patch:@nktkas/hyperliquid@npm%3A0.33.1#~/.yarn/patches/@nktkas-hyperliquid-npm-0.33.1-6a541fdd1d.patch",
"elliptic@6.5.4": "^6.5.7",
"fast-xml-parser@^4.3.4": "^4.4.1",
- "ws@7.4.6": "^7.5.10"
+ "ws@7.4.6": "^7.5.10",
+ "@metamask/safe-event-emitter@npm:^3.0.0": "patch:@metamask/safe-event-emitter@npm%3A3.1.1#~/.yarn/patches/@metamask-safe-event-emitter-npm-3.1.1-a7872b1f5a.patch",
+ "@metamask/safe-event-emitter@npm:^3.1.1": "patch:@metamask/safe-event-emitter@npm%3A3.1.1#~/.yarn/patches/@metamask-safe-event-emitter-npm-3.1.1-a7872b1f5a.patch"
},
"simple-git-hooks": {
"pre-push": "yarn lint"
diff --git a/packages/account-tree-controller/jest.config.js b/packages/account-tree-controller/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/account-tree-controller/jest.config.js
+++ b/packages/account-tree-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/account-tree-controller/package.json b/packages/account-tree-controller/package.json
index 1bbaadd0af9..bb3ce4e7fbb 100644
--- a/packages/account-tree-controller/package.json
+++ b/packages/account-tree-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/account-tree-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/account-tree-controller",
@@ -71,10 +64,10 @@
"lodash": "^4.17.21"
},
"devDependencies": {
+ "@jest/globals": "^30.4.1",
"@metamask/account-api": "^1.0.4",
"@metamask/auto-changelog": "^6.1.0",
"@metamask/providers": "^22.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/account-tree-controller/src/AccountTreeController-method-action-types.ts b/packages/account-tree-controller/src/AccountTreeController-method-action-types.ts
index abc6ca61e9d..25c3849dba5 100644
--- a/packages/account-tree-controller/src/AccountTreeController-method-action-types.ts
+++ b/packages/account-tree-controller/src/AccountTreeController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { AccountTreeController } from './AccountTreeController';
+import type { AccountTreeController } from './AccountTreeController.js';
/**
* Initialize the controller's state.
diff --git a/packages/account-tree-controller/src/AccountTreeController.test.ts b/packages/account-tree-controller/src/AccountTreeController.test.ts
index dfdf7bfa5e8..854c989e622 100644
--- a/packages/account-tree-controller/src/AccountTreeController.test.ts
+++ b/packages/account-tree-controller/src/AccountTreeController.test.ts
@@ -1,3 +1,4 @@
+import { jest } from '@jest/globals';
import type {
AccountGroupId,
AccountWalletId,
@@ -34,16 +35,16 @@ import type { GetSnap as SnapControllerGetSnap } from '@metamask/snaps-controlle
import {
getAccountTreeControllerMessenger,
getRootMessenger,
-} from '../tests/mockMessenger';
+} from '../tests/mockMessenger.js';
import {
AccountTreeController,
getDefaultAccountTreeControllerState,
-} from './AccountTreeController';
-import type { BackupAndSyncAnalyticsEventPayload } from './backup-and-sync/analytics';
-import { BackupAndSyncService } from './backup-and-sync/service';
-import { isAccountGroupNameUnique } from './group';
-import { getAccountWalletNameFromKeyringType } from './rules/keyring';
-import type { AccountTreeControllerState } from './types';
+} from './AccountTreeController.js';
+import type { BackupAndSyncAnalyticsEventPayload } from './backup-and-sync/analytics.js';
+import { BackupAndSyncService } from './backup-and-sync/service.js';
+import { isAccountGroupNameUnique } from './group.js';
+import { getAccountWalletNameFromKeyringType } from './rules/keyring.js';
+import type { AccountTreeControllerState } from './types.js';
// Local mock of EMPTY_ACCOUNT to avoid circular dependency
const EMPTY_ACCOUNT_MOCK: InternalAccount = {
diff --git a/packages/account-tree-controller/src/AccountTreeController.ts b/packages/account-tree-controller/src/AccountTreeController.ts
index e37b2dc1524..ec351576665 100644
--- a/packages/account-tree-controller/src/AccountTreeController.ts
+++ b/packages/account-tree-controller/src/AccountTreeController.ts
@@ -15,33 +15,33 @@ import { isEvmAccountType } from '@metamask/keyring-api';
import type { InternalAccount } from '@metamask/keyring-internal-api';
import { assert } from '@metamask/utils';
-import type { BackupAndSyncEmitAnalyticsEventParams } from './backup-and-sync/analytics';
+import type { BackupAndSyncEmitAnalyticsEventParams } from './backup-and-sync/analytics.js';
import {
formatAnalyticsEvent,
traceFallback,
-} from './backup-and-sync/analytics';
-import { BackupAndSyncService } from './backup-and-sync/service';
-import type { BackupAndSyncContext } from './backup-and-sync/types';
-import { createSyncMutationTracker } from './backup-and-sync/utils';
-import type { AccountGroupObject, AccountTypeOrderKey } from './group';
+} from './backup-and-sync/analytics.js';
+import { BackupAndSyncService } from './backup-and-sync/service.js';
+import type { BackupAndSyncContext } from './backup-and-sync/types.js';
+import { createSyncMutationTracker } from './backup-and-sync/utils.js';
+import type { AccountGroupObject, AccountTypeOrderKey } from './group.js';
import {
ACCOUNT_TYPE_TO_SORT_ORDER,
isAccountGroupNameUnique,
isAccountGroupNameUniqueFromWallet,
MAX_SORT_ORDER,
-} from './group';
-import { projectLogger as log } from './logger';
-import type { Rule } from './rule';
-import { EntropyRule } from './rules/entropy';
-import { KeyringRule } from './rules/keyring';
-import { SnapRule } from './rules/snap';
+} from './group.js';
+import { projectLogger as log } from './logger.js';
+import type { Rule } from './rule.js';
+import { EntropyRule } from './rules/entropy.js';
+import { KeyringRule } from './rules/keyring.js';
+import { SnapRule } from './rules/snap.js';
import type {
AccountTreeControllerConfig,
AccountTreeControllerInternalBackupAndSyncConfig,
AccountTreeControllerMessenger,
AccountTreeControllerState,
-} from './types';
-import type { AccountWalletObject, AccountWalletObjectOf } from './wallet';
+} from './types.js';
+import type { AccountWalletObject, AccountWalletObjectOf } from './wallet.js';
export const controllerName = 'AccountTreeController';
@@ -606,9 +606,7 @@ export class AccountTreeController extends BaseController<
// Parse the highest account index being used (similar to accounts-controller)
let highestNameIndex = 0;
- for (const { id: otherGroupId } of Object.values(
- wallet.groups,
- ) as AccountGroupObject[]) {
+ for (const { id: otherGroupId } of Object.values(wallet.groups)) {
// Skip the current group being processed
if (otherGroupId === group.id) {
continue;
@@ -1317,9 +1315,7 @@ export class AccountTreeController extends BaseController<
const now = Date.now();
/* istanbul ignore next */
- if (!state.accountGroupsMetadata[groupId]) {
- state.accountGroupsMetadata[groupId] = {};
- }
+ state.accountGroupsMetadata[groupId] ??= {};
state.accountGroupsMetadata[groupId].lastSelected = now;
const walletId = this.#groupIdToWalletId.get(groupId);
@@ -1457,9 +1453,7 @@ export class AccountTreeController extends BaseController<
id,
);
- if (!candidate) {
- candidate = id;
- }
+ candidate ??= id;
if (account && isEvmAccountType(account.type)) {
// EVM accounts have a higher priority, so if we find any, we just
// use that account!
@@ -1594,9 +1588,7 @@ export class AccountTreeController extends BaseController<
this.update((state) => {
/* istanbul ignore next */
- if (!state.accountGroupsMetadata[groupId]) {
- state.accountGroupsMetadata[groupId] = {};
- }
+ state.accountGroupsMetadata[groupId] ??= {};
// Update persistent metadata
state.accountGroupsMetadata[groupId].name = {
@@ -1664,9 +1656,7 @@ export class AccountTreeController extends BaseController<
this.update((state) => {
/* istanbul ignore next */
- if (!state.accountGroupsMetadata[groupId]) {
- state.accountGroupsMetadata[groupId] = {};
- }
+ state.accountGroupsMetadata[groupId] ??= {};
// Update persistent metadata
state.accountGroupsMetadata[groupId].pinned = {
@@ -1710,9 +1700,7 @@ export class AccountTreeController extends BaseController<
this.update((state) => {
/* istanbul ignore next */
- if (!state.accountGroupsMetadata[groupId]) {
- state.accountGroupsMetadata[groupId] = {};
- }
+ state.accountGroupsMetadata[groupId] ??= {};
// Update persistent metadata
state.accountGroupsMetadata[groupId].hidden = {
diff --git a/packages/account-tree-controller/src/backup-and-sync/analytics/index.ts b/packages/account-tree-controller/src/backup-and-sync/analytics/index.ts
index 33fa061b779..7143f49ae38 100644
--- a/packages/account-tree-controller/src/backup-and-sync/analytics/index.ts
+++ b/packages/account-tree-controller/src/backup-and-sync/analytics/index.ts
@@ -1,2 +1,2 @@
-export * from './segment';
-export * from './traces';
+export * from './segment.js';
+export * from './traces.js';
diff --git a/packages/account-tree-controller/src/backup-and-sync/analytics/segment.test.ts b/packages/account-tree-controller/src/backup-and-sync/analytics/segment.test.ts
index f7051247a63..990213cbd6e 100644
--- a/packages/account-tree-controller/src/backup-and-sync/analytics/segment.test.ts
+++ b/packages/account-tree-controller/src/backup-and-sync/analytics/segment.test.ts
@@ -1,9 +1,12 @@
-import { BackupAndSyncAnalyticsEvent, formatAnalyticsEvent } from './segment';
+import {
+ BackupAndSyncAnalyticsEvent,
+ formatAnalyticsEvent,
+} from './segment.js';
import type {
BackupAndSyncAnalyticsAction,
BackupAndSyncEmitAnalyticsEventParams,
BackupAndSyncAnalyticsEventPayload,
-} from './segment';
+} from './segment.js';
describe('BackupAndSyncAnalytics - Segment', () => {
describe('BackupAndSyncAnalyticsEvents', () => {
diff --git a/packages/account-tree-controller/src/backup-and-sync/analytics/segment.ts b/packages/account-tree-controller/src/backup-and-sync/analytics/segment.ts
index 4f1e7502fcd..01e25340c18 100644
--- a/packages/account-tree-controller/src/backup-and-sync/analytics/segment.ts
+++ b/packages/account-tree-controller/src/backup-and-sync/analytics/segment.ts
@@ -1,4 +1,4 @@
-import type { ProfileId } from '../authentication';
+import type { ProfileId } from '../authentication.js';
export const BackupAndSyncAnalyticsEvent = {
WalletRenamed: 'wallet_renamed',
diff --git a/packages/account-tree-controller/src/backup-and-sync/analytics/traces.test.ts b/packages/account-tree-controller/src/backup-and-sync/analytics/traces.test.ts
index 791ccdd563d..7e9d05e78dd 100644
--- a/packages/account-tree-controller/src/backup-and-sync/analytics/traces.test.ts
+++ b/packages/account-tree-controller/src/backup-and-sync/analytics/traces.test.ts
@@ -1,6 +1,7 @@
+import { jest } from '@jest/globals';
import type { TraceRequest } from '@metamask/controller-utils';
-import { TraceName, traceFallback } from './traces';
+import { TraceName, traceFallback } from './traces.js';
describe('BackupAndSyncAnalytics - Traces', () => {
describe('TraceName', () => {
diff --git a/packages/account-tree-controller/src/backup-and-sync/authentication/index.ts b/packages/account-tree-controller/src/backup-and-sync/authentication/index.ts
index 04bca77e0de..9be8099fb95 100644
--- a/packages/account-tree-controller/src/backup-and-sync/authentication/index.ts
+++ b/packages/account-tree-controller/src/backup-and-sync/authentication/index.ts
@@ -1 +1 @@
-export * from './utils';
+export * from './utils.js';
diff --git a/packages/account-tree-controller/src/backup-and-sync/authentication/utils.test.ts b/packages/account-tree-controller/src/backup-and-sync/authentication/utils.test.ts
index 3fc12e3fe95..0cf8505ad72 100644
--- a/packages/account-tree-controller/src/backup-and-sync/authentication/utils.test.ts
+++ b/packages/account-tree-controller/src/backup-and-sync/authentication/utils.test.ts
@@ -1,6 +1,8 @@
-import type { AccountTreeController } from '../../AccountTreeController';
-import type { BackupAndSyncContext } from '../types';
-import { getProfileId } from './utils';
+import { jest } from '@jest/globals';
+
+import type { AccountTreeController } from '../../AccountTreeController.js';
+import type { BackupAndSyncContext } from '../types.js';
+import { getProfileId } from './utils.js';
describe('BackupAndSyncAuthentication - Utils', () => {
describe('getProfileId', () => {
diff --git a/packages/account-tree-controller/src/backup-and-sync/authentication/utils.ts b/packages/account-tree-controller/src/backup-and-sync/authentication/utils.ts
index c380db605db..92448dd4979 100644
--- a/packages/account-tree-controller/src/backup-and-sync/authentication/utils.ts
+++ b/packages/account-tree-controller/src/backup-and-sync/authentication/utils.ts
@@ -1,7 +1,7 @@
import type { SDK } from '@metamask/profile-sync-controller';
-import { backupAndSyncLogger } from '../../logger';
-import type { BackupAndSyncContext } from '../types';
+import { backupAndSyncLogger } from '../../logger.js';
+import type { BackupAndSyncContext } from '../types.js';
export type ProfileId = SDK.UserProfile['profileId'] | undefined;
diff --git a/packages/account-tree-controller/src/backup-and-sync/service/atomic-sync-queue.test.ts b/packages/account-tree-controller/src/backup-and-sync/service/atomic-sync-queue.test.ts
index 76fc325ab0d..2b9489d7970 100644
--- a/packages/account-tree-controller/src/backup-and-sync/service/atomic-sync-queue.test.ts
+++ b/packages/account-tree-controller/src/backup-and-sync/service/atomic-sync-queue.test.ts
@@ -1,6 +1,7 @@
-/* eslint-disable no-void */
-import { backupAndSyncLogger } from '../../logger';
-import { AtomicSyncQueue } from './atomic-sync-queue';
+import { jest } from '@jest/globals';
+
+import { backupAndSyncLogger } from '../../logger.js';
+import { AtomicSyncQueue } from './atomic-sync-queue.js';
jest.mock('../../logger', () => ({
backupAndSyncLogger: jest.fn(),
diff --git a/packages/account-tree-controller/src/backup-and-sync/service/atomic-sync-queue.ts b/packages/account-tree-controller/src/backup-and-sync/service/atomic-sync-queue.ts
index 64b4147b2ea..bb91bee6143 100644
--- a/packages/account-tree-controller/src/backup-and-sync/service/atomic-sync-queue.ts
+++ b/packages/account-tree-controller/src/backup-and-sync/service/atomic-sync-queue.ts
@@ -1,7 +1,7 @@
import { createDeferredPromise } from '@metamask/utils';
-import { backupAndSyncLogger } from '../../logger';
-import type { AtomicSyncEvent } from '../types';
+import { backupAndSyncLogger } from '../../logger.js';
+import type { AtomicSyncEvent } from '../types.js';
/**
* Manages atomic sync operations in a queue to prevent concurrent execution
diff --git a/packages/account-tree-controller/src/backup-and-sync/service/index.test.ts b/packages/account-tree-controller/src/backup-and-sync/service/index.test.ts
index f93f254fb2a..a16413a131d 100644
--- a/packages/account-tree-controller/src/backup-and-sync/service/index.test.ts
+++ b/packages/account-tree-controller/src/backup-and-sync/service/index.test.ts
@@ -1,16 +1,17 @@
+import { jest } from '@jest/globals';
import { AccountWalletType } from '@metamask/account-api';
-import { BackupAndSyncService } from '.';
-import type { AccountGroupObject } from '../../group';
-import type { AccountTreeControllerState } from '../../types';
-import type { AccountWalletEntropyObject } from '../../wallet';
-import { TraceName } from '../analytics';
-import { getProfileId } from '../authentication';
-import { performLegacyAccountSyncing, syncWalletMetadata } from '../syncing';
-import type { BackupAndSyncContext } from '../types';
-import { getAllGroupsFromUserStorage } from '../user-storage';
+import type { AccountGroupObject } from '../../group.js';
+import type { AccountTreeControllerState } from '../../types.js';
+import type { AccountWalletEntropyObject } from '../../wallet.js';
+import { TraceName } from '../analytics.js';
+import { getProfileId } from '../authentication.js';
+import { performLegacyAccountSyncing, syncWalletMetadata } from '../syncing.js';
+import type { BackupAndSyncContext } from '../types.js';
+import { getAllGroupsFromUserStorage } from '../user-storage.js';
// We only need to import the functions we actually spy on
-import { createStateSnapshot, getLocalEntropyWallets } from '../utils';
+import { createStateSnapshot, getLocalEntropyWallets } from '../utils.js';
+import { BackupAndSyncService } from './..js';
// Mock the sync functions and all external dependencies
jest.mock('../syncing');
diff --git a/packages/account-tree-controller/src/backup-and-sync/service/index.ts b/packages/account-tree-controller/src/backup-and-sync/service/index.ts
index 749a113c38e..aa0a2435cb2 100644
--- a/packages/account-tree-controller/src/backup-and-sync/service/index.ts
+++ b/packages/account-tree-controller/src/backup-and-sync/service/index.ts
@@ -2,39 +2,39 @@ import type { AccountGroupId, AccountWalletId } from '@metamask/account-api';
import { AccountWalletType } from '@metamask/account-api';
import type { UserStorageController } from '@metamask/profile-sync-controller';
-import { backupAndSyncLogger } from '../../logger';
-import type { AccountTreeControllerState } from '../../types';
-import type { AccountWalletEntropyObject } from '../../wallet';
-import { TraceName } from '../analytics';
-import type { ProfileId } from '../authentication';
-import { getProfileId } from '../authentication';
+import { backupAndSyncLogger } from '../../logger.js';
+import type { AccountTreeControllerState } from '../../types.js';
+import type { AccountWalletEntropyObject } from '../../wallet.js';
+import { TraceName } from '../analytics.js';
+import type { ProfileId } from '../authentication.js';
+import { getProfileId } from '../authentication.js';
import {
createLocalGroupsFromUserStorage,
performLegacyAccountSyncing,
syncGroupsMetadata,
syncGroupMetadata,
syncWalletMetadata,
-} from '../syncing';
+} from '../syncing.js';
import type {
BackupAndSyncContext,
UserStorageSyncedWallet,
UserStorageSyncedWalletGroup,
-} from '../types';
+} from '../types.js';
import {
getAllGroupsFromUserStorage,
getGroupFromUserStorage,
getWalletFromUserStorage,
pushGroupToUserStorageBatch,
-} from '../user-storage';
+} from '../user-storage.js';
import {
createStateSnapshot,
restoreStateFromSnapshot,
getLocalEntropyWallets,
getLocalGroupsForEntropyWallet,
toErrorMessage,
-} from '../utils';
-import type { StateSnapshot } from '../utils';
-import { AtomicSyncQueue } from './atomic-sync-queue';
+} from '../utils.js';
+import type { StateSnapshot } from '../utils.js';
+import { AtomicSyncQueue } from './atomic-sync-queue.js';
/**
* Service responsible for managing all backup and sync operations.
@@ -172,7 +172,6 @@ export class BackupAndSyncService {
return;
}
- // eslint-disable-next-line no-void
void this.#atomicSyncQueue.enqueue(() =>
this.#performSingleWalletSyncInner(walletId),
);
@@ -198,7 +197,6 @@ export class BackupAndSyncService {
return;
}
- // eslint-disable-next-line no-void
void this.#atomicSyncQueue.enqueue(() =>
this.#performSingleGroupSyncInner(groupId),
);
@@ -258,7 +256,7 @@ export class BackupAndSyncService {
this.#firstOngoingFullSyncPromise = this.#atomicSyncQueue.clearAndEnqueue(
() => this.#performFullSyncInner(),
);
- // eslint-disable-next-line no-void
+
void this.#setupOngoingPromiseCleanup(this.#firstOngoingFullSyncPromise);
}
@@ -332,10 +330,7 @@ export class BackupAndSyncService {
]);
// 2.1 Decide if we need to perform legacy account syncing
- if (
- !walletFromUserStorage ||
- !walletFromUserStorage.isLegacyAccountSyncingDisabled
- ) {
+ if (!walletFromUserStorage?.isLegacyAccountSyncingDisabled) {
// 2.2 Perform legacy account syncing
// This will migrate legacy account data to the new structure.
// This operation will only be performed once.
diff --git a/packages/account-tree-controller/src/backup-and-sync/syncing/group.test.ts b/packages/account-tree-controller/src/backup-and-sync/syncing/group.test.ts
index 2e546f2d5bc..125275d78d7 100644
--- a/packages/account-tree-controller/src/backup-and-sync/syncing/group.test.ts
+++ b/packages/account-tree-controller/src/backup-and-sync/syncing/group.test.ts
@@ -1,21 +1,23 @@
-import type { AccountGroupMultichainAccountObject } from '../../group';
-import type { AccountWalletEntropyObject } from '../../wallet';
-import { BackupAndSyncAnalyticsEvent } from '../analytics';
+import { jest } from '@jest/globals';
+
+import type { AccountGroupMultichainAccountObject } from '../../group.js';
+import type { AccountWalletEntropyObject } from '../../wallet.js';
+import { BackupAndSyncAnalyticsEvent } from '../analytics.js';
import type {
BackupAndSyncContext,
UserStorageSyncedWalletGroup,
-} from '../types';
+} from '../types.js';
import {
pushGroupToUserStorage,
pushGroupToUserStorageBatch,
-} from '../user-storage/network-operations';
-import { getLocalGroupsForEntropyWallet } from '../utils';
+} from '../user-storage/network-operations.js';
+import { getLocalGroupsForEntropyWallet } from '../utils.js';
import {
createLocalGroupsFromUserStorage,
syncGroupMetadata,
syncGroupsMetadata,
-} from './group';
-import * as metadataExports from './metadata';
+} from './group.js';
+import * as metadataExports from './metadata.js';
jest.mock('./metadata');
jest.mock('../user-storage/network-operations');
diff --git a/packages/account-tree-controller/src/backup-and-sync/syncing/group.ts b/packages/account-tree-controller/src/backup-and-sync/syncing/group.ts
index 273625027dc..7a814d863ad 100644
--- a/packages/account-tree-controller/src/backup-and-sync/syncing/group.ts
+++ b/packages/account-tree-controller/src/backup-and-sync/syncing/group.ts
@@ -1,23 +1,23 @@
import { toMultichainAccountWalletId } from '@metamask/account-api';
-import type { AccountGroupMultichainAccountObject } from '../../group';
-import { backupAndSyncLogger } from '../../logger';
-import type { AccountWalletEntropyObject } from '../../wallet';
-import type { BackupAndSyncAnalyticsAction } from '../analytics';
-import { BackupAndSyncAnalyticsEvent } from '../analytics';
-import type { ProfileId } from '../authentication';
-import { UserStorageSyncedWalletGroupSchema } from '../types';
+import type { AccountGroupMultichainAccountObject } from '../../group.js';
+import { backupAndSyncLogger } from '../../logger.js';
+import type { AccountWalletEntropyObject } from '../../wallet.js';
+import type { BackupAndSyncAnalyticsAction } from '../analytics.js';
+import { BackupAndSyncAnalyticsEvent } from '../analytics.js';
+import type { ProfileId } from '../authentication.js';
+import { UserStorageSyncedWalletGroupSchema } from '../types.js';
import type {
BackupAndSyncContext,
UserStorageSyncedWalletGroup,
-} from '../types';
+} from '../types.js';
import {
pushGroupToUserStorage,
pushGroupToUserStorageBatch,
-} from '../user-storage/network-operations';
-import { getLocalGroupsForEntropyWallet } from '../utils';
-import { toErrorMessage } from '../utils/errors';
-import { compareAndSyncMetadata } from './metadata';
+} from '../user-storage/network-operations.js';
+import { getLocalGroupsForEntropyWallet } from '../utils.js';
+import { toErrorMessage } from '../utils/errors.js';
+import { compareAndSyncMetadata } from './metadata.js';
/**
* Creates multiple multichain account groups in batch (from 0 to maxGroupIndex).
diff --git a/packages/account-tree-controller/src/backup-and-sync/syncing/index.ts b/packages/account-tree-controller/src/backup-and-sync/syncing/index.ts
index 2a76d6d32da..b38f5f6c35b 100644
--- a/packages/account-tree-controller/src/backup-and-sync/syncing/index.ts
+++ b/packages/account-tree-controller/src/backup-and-sync/syncing/index.ts
@@ -1,4 +1,4 @@
-export * from './group';
-export * from './legacy';
-export * from './wallet';
-export * from './metadata';
+export * from './group.js';
+export * from './legacy.js';
+export * from './wallet.js';
+export * from './metadata.js';
diff --git a/packages/account-tree-controller/src/backup-and-sync/syncing/legacy.test.ts b/packages/account-tree-controller/src/backup-and-sync/syncing/legacy.test.ts
index 00ee21d0296..921807d23cf 100644
--- a/packages/account-tree-controller/src/backup-and-sync/syncing/legacy.test.ts
+++ b/packages/account-tree-controller/src/backup-and-sync/syncing/legacy.test.ts
@@ -1,13 +1,14 @@
+import { jest } from '@jest/globals';
import { AccountGroupType } from '@metamask/account-api';
import { getUUIDFromAddressOfNormalAccount } from '@metamask/accounts-controller';
-import type { AccountGroupMultichainAccountObject } from '../../group';
-import { BackupAndSyncAnalyticsEvent } from '../analytics';
-import type { BackupAndSyncContext } from '../types';
-import { getAllLegacyUserStorageAccounts } from '../user-storage';
-import { getLocalGroupsForEntropyWallet } from '../utils';
-import { createMultichainAccountGroupsBatch } from './group';
-import { performLegacyAccountSyncing } from './legacy';
+import type { AccountGroupMultichainAccountObject } from '../../group.js';
+import { BackupAndSyncAnalyticsEvent } from '../analytics.js';
+import type { BackupAndSyncContext } from '../types.js';
+import { getAllLegacyUserStorageAccounts } from '../user-storage.js';
+import { getLocalGroupsForEntropyWallet } from '../utils.js';
+import { createMultichainAccountGroupsBatch } from './group.js';
+import { performLegacyAccountSyncing } from './legacy.js';
jest.mock('@metamask/accounts-controller');
jest.mock('../user-storage');
diff --git a/packages/account-tree-controller/src/backup-and-sync/syncing/legacy.ts b/packages/account-tree-controller/src/backup-and-sync/syncing/legacy.ts
index b0749889d1e..a44b906ce9f 100644
--- a/packages/account-tree-controller/src/backup-and-sync/syncing/legacy.ts
+++ b/packages/account-tree-controller/src/backup-and-sync/syncing/legacy.ts
@@ -1,13 +1,13 @@
import { toMultichainAccountWalletId } from '@metamask/account-api';
import { getUUIDFromAddressOfNormalAccount } from '@metamask/accounts-controller';
-import { backupAndSyncLogger } from '../../logger';
-import { BackupAndSyncAnalyticsEvent } from '../analytics';
-import type { ProfileId } from '../authentication';
-import type { BackupAndSyncContext } from '../types';
-import { getAllLegacyUserStorageAccounts } from '../user-storage';
-import { getLocalGroupsForEntropyWallet } from '../utils';
-import { createMultichainAccountGroupsBatch } from './group';
+import { backupAndSyncLogger } from '../../logger.js';
+import { BackupAndSyncAnalyticsEvent } from '../analytics.js';
+import type { ProfileId } from '../authentication.js';
+import type { BackupAndSyncContext } from '../types.js';
+import { getAllLegacyUserStorageAccounts } from '../user-storage.js';
+import { getLocalGroupsForEntropyWallet } from '../utils.js';
+import { createMultichainAccountGroupsBatch } from './group.js';
/**
* Performs a stripped down version of legacy account syncing, replacing the current
diff --git a/packages/account-tree-controller/src/backup-and-sync/syncing/metadata.test.ts b/packages/account-tree-controller/src/backup-and-sync/syncing/metadata.test.ts
index 072ceefdedf..e5f8ce35085 100644
--- a/packages/account-tree-controller/src/backup-and-sync/syncing/metadata.test.ts
+++ b/packages/account-tree-controller/src/backup-and-sync/syncing/metadata.test.ts
@@ -1,6 +1,8 @@
-import { BackupAndSyncAnalyticsEvent } from '../analytics';
-import type { BackupAndSyncContext } from '../types';
-import { compareAndSyncMetadata } from './metadata';
+import { jest } from '@jest/globals';
+
+import { BackupAndSyncAnalyticsEvent } from '../analytics.js';
+import type { BackupAndSyncContext } from '../types.js';
+import { compareAndSyncMetadata } from './metadata.js';
describe('BackupAndSync - Syncing - Metadata', () => {
let mockContext: BackupAndSyncContext;
diff --git a/packages/account-tree-controller/src/backup-and-sync/syncing/metadata.ts b/packages/account-tree-controller/src/backup-and-sync/syncing/metadata.ts
index c3d5787666d..d95619120ff 100644
--- a/packages/account-tree-controller/src/backup-and-sync/syncing/metadata.ts
+++ b/packages/account-tree-controller/src/backup-and-sync/syncing/metadata.ts
@@ -1,8 +1,8 @@
import deepEqual from 'fast-deep-equal';
-import type { BackupAndSyncAnalyticsAction } from '../analytics';
-import type { ProfileId } from '../authentication';
-import type { BackupAndSyncContext } from '../types';
+import type { BackupAndSyncAnalyticsAction } from '../analytics.js';
+import type { ProfileId } from '../authentication.js';
+import type { BackupAndSyncContext } from '../types.js';
/**
* Compares metadata between local and user storage, applying the most recent version.
diff --git a/packages/account-tree-controller/src/backup-and-sync/syncing/wallet.test.ts b/packages/account-tree-controller/src/backup-and-sync/syncing/wallet.test.ts
index fe8021ac2f1..8b909a08a22 100644
--- a/packages/account-tree-controller/src/backup-and-sync/syncing/wallet.test.ts
+++ b/packages/account-tree-controller/src/backup-and-sync/syncing/wallet.test.ts
@@ -1,12 +1,17 @@
-import type { AccountWalletEntropyObject } from '../../wallet';
-import { BackupAndSyncAnalyticsEvent } from '../analytics';
-import type { BackupAndSyncContext, UserStorageSyncedWallet } from '../types';
-import { pushWalletToUserStorage } from '../user-storage/network-operations';
-import { compareAndSyncMetadata } from './metadata';
+import { jest } from '@jest/globals';
+
+import type { AccountWalletEntropyObject } from '../../wallet.js';
+import { BackupAndSyncAnalyticsEvent } from '../analytics.js';
+import type {
+ BackupAndSyncContext,
+ UserStorageSyncedWallet,
+} from '../types.js';
+import { pushWalletToUserStorage } from '../user-storage/network-operations.js';
+import { compareAndSyncMetadata } from './metadata.js';
import {
syncWalletMetadataAndCheckIfPushNeeded,
syncWalletMetadata,
-} from './wallet';
+} from './wallet.js';
jest.mock('./metadata');
jest.mock('../user-storage/network-operations');
diff --git a/packages/account-tree-controller/src/backup-and-sync/syncing/wallet.ts b/packages/account-tree-controller/src/backup-and-sync/syncing/wallet.ts
index 8d180bcc45a..ebf11155499 100644
--- a/packages/account-tree-controller/src/backup-and-sync/syncing/wallet.ts
+++ b/packages/account-tree-controller/src/backup-and-sync/syncing/wallet.ts
@@ -1,11 +1,14 @@
-import { backupAndSyncLogger } from '../../logger';
-import type { AccountWalletEntropyObject } from '../../wallet';
-import { BackupAndSyncAnalyticsEvent } from '../analytics';
-import type { ProfileId } from '../authentication';
-import { UserStorageSyncedWalletSchema } from '../types';
-import type { BackupAndSyncContext, UserStorageSyncedWallet } from '../types';
-import { pushWalletToUserStorage } from '../user-storage/network-operations';
-import { compareAndSyncMetadata } from './metadata';
+import { backupAndSyncLogger } from '../../logger.js';
+import type { AccountWalletEntropyObject } from '../../wallet.js';
+import { BackupAndSyncAnalyticsEvent } from '../analytics.js';
+import type { ProfileId } from '../authentication.js';
+import { UserStorageSyncedWalletSchema } from '../types.js';
+import type {
+ BackupAndSyncContext,
+ UserStorageSyncedWallet,
+} from '../types.js';
+import { pushWalletToUserStorage } from '../user-storage/network-operations.js';
+import { compareAndSyncMetadata } from './metadata.js';
/**
* Syncs wallet metadata fields and determines if the wallet needs to be pushed to user storage.
diff --git a/packages/account-tree-controller/src/backup-and-sync/types.ts b/packages/account-tree-controller/src/backup-and-sync/types.ts
index 7f6449c0632..62c9fb6ffe2 100644
--- a/packages/account-tree-controller/src/backup-and-sync/types.ts
+++ b/packages/account-tree-controller/src/backup-and-sync/types.ts
@@ -15,15 +15,15 @@ import {
} from '@metamask/superstruct';
import type { Infer, Struct } from '@metamask/superstruct';
-import type { AccountTreeController } from '../AccountTreeController';
+import type { AccountTreeController } from '../AccountTreeController.js';
import type {
AccountGroupMultichainAccountObject,
AccountTreeGroupPersistedMetadata,
-} from '../group';
-import type { RuleResult } from '../rule';
-import type { AccountTreeControllerMessenger } from '../types';
-import type { AccountTreeWalletPersistedMetadata } from '../wallet';
-import type { BackupAndSyncEmitAnalyticsEventParams } from './analytics';
+} from '../group.js';
+import type { RuleResult } from '../rule.js';
+import type { AccountTreeControllerMessenger } from '../types.js';
+import type { AccountTreeWalletPersistedMetadata } from '../wallet.js';
+import type { BackupAndSyncEmitAnalyticsEventParams } from './analytics.js';
/**
* Schema for an updatable field with value and timestamp.
diff --git a/packages/account-tree-controller/src/backup-and-sync/user-storage/format-utils.test.ts b/packages/account-tree-controller/src/backup-and-sync/user-storage/format-utils.test.ts
index b289895b517..985709bfd71 100644
--- a/packages/account-tree-controller/src/backup-and-sync/user-storage/format-utils.test.ts
+++ b/packages/account-tree-controller/src/backup-and-sync/user-storage/format-utils.test.ts
@@ -1,19 +1,24 @@
-import type { AccountGroupMultichainAccountObject } from '../../group';
-import { backupAndSyncLogger } from '../../logger';
-import type { AccountWalletEntropyObject } from '../../wallet';
-import type { BackupAndSyncContext, UserStorageSyncedWallet } from '../types';
+import { jest } from '@jest/globals';
+
+import type { AccountGroupMultichainAccountObject } from '../../group.js';
+import { backupAndSyncLogger } from '../../logger.js';
+import type { AccountWalletEntropyObject } from '../../wallet.js';
+import type {
+ BackupAndSyncContext,
+ UserStorageSyncedWallet,
+} from '../types.js';
import {
formatWalletForUserStorageUsage,
formatGroupForUserStorageUsage,
parseWalletFromUserStorageResponse,
parseGroupFromUserStorageResponse,
parseLegacyAccountFromUserStorageResponse,
-} from './format-utils';
+} from './format-utils.js';
import {
assertValidUserStorageWallet,
assertValidUserStorageGroup,
assertValidLegacyUserStorageAccount,
-} from './validation';
+} from './validation.js';
jest.mock('./validation');
jest.mock('../../logger');
diff --git a/packages/account-tree-controller/src/backup-and-sync/user-storage/format-utils.ts b/packages/account-tree-controller/src/backup-and-sync/user-storage/format-utils.ts
index 6c50e9e095e..efb85e3b417 100644
--- a/packages/account-tree-controller/src/backup-and-sync/user-storage/format-utils.ts
+++ b/packages/account-tree-controller/src/backup-and-sync/user-storage/format-utils.ts
@@ -1,21 +1,21 @@
import { mask } from '@metamask/superstruct';
-import type { AccountGroupMultichainAccountObject } from '../../group';
-import { backupAndSyncLogger } from '../../logger';
-import type { AccountWalletEntropyObject } from '../../wallet';
+import type { AccountGroupMultichainAccountObject } from '../../group.js';
+import { backupAndSyncLogger } from '../../logger.js';
+import type { AccountWalletEntropyObject } from '../../wallet.js';
import type {
BackupAndSyncContext,
LegacyUserStorageSyncedAccount,
UserStorageSyncedWallet,
UserStorageSyncedWalletGroup,
-} from '../types';
-import { UserStorageSyncedWalletGroupSchema } from '../types';
-import { toErrorMessage } from '../utils/errors';
+} from '../types.js';
+import { UserStorageSyncedWalletGroupSchema } from '../types.js';
+import { toErrorMessage } from '../utils/errors.js';
import {
assertValidUserStorageWallet,
assertValidUserStorageGroup,
assertValidLegacyUserStorageAccount,
-} from './validation';
+} from './validation.js';
/**
* Formats the wallet for user storage usage.
diff --git a/packages/account-tree-controller/src/backup-and-sync/user-storage/index.ts b/packages/account-tree-controller/src/backup-and-sync/user-storage/index.ts
index 75b762c215e..de4f750c354 100644
--- a/packages/account-tree-controller/src/backup-and-sync/user-storage/index.ts
+++ b/packages/account-tree-controller/src/backup-and-sync/user-storage/index.ts
@@ -1,4 +1,4 @@
-export * from './format-utils';
-export * from './network-utils';
-export * from './network-operations';
-export * from './validation';
+export * from './format-utils.js';
+export * from './network-utils.js';
+export * from './network-operations.js';
+export * from './validation.js';
diff --git a/packages/account-tree-controller/src/backup-and-sync/user-storage/network-operations.test.ts b/packages/account-tree-controller/src/backup-and-sync/user-storage/network-operations.test.ts
index deaab840145..d2f1b95a27e 100644
--- a/packages/account-tree-controller/src/backup-and-sync/user-storage/network-operations.test.ts
+++ b/packages/account-tree-controller/src/backup-and-sync/user-storage/network-operations.test.ts
@@ -1,24 +1,25 @@
+import { jest } from '@jest/globals';
import { SDK } from '@metamask/profile-sync-controller';
-import type { AccountGroupMultichainAccountObject } from '../../group';
-import type { AccountWalletEntropyObject } from '../../wallet';
+import type { AccountGroupMultichainAccountObject } from '../../group.js';
+import type { AccountWalletEntropyObject } from '../../wallet.js';
import type {
BackupAndSyncContext,
UserStorageSyncedWallet,
UserStorageSyncedWalletGroup,
-} from '../types';
+} from '../types.js';
import {
USER_STORAGE_WALLETS_FEATURE_KEY,
USER_STORAGE_WALLETS_FEATURE_ENTRY_KEY,
USER_STORAGE_GROUPS_FEATURE_KEY,
-} from './constants';
+} from './constants.js';
import {
formatWalletForUserStorageUsage,
formatGroupForUserStorageUsage,
parseWalletFromUserStorageResponse,
parseGroupFromUserStorageResponse,
parseLegacyAccountFromUserStorageResponse,
-} from './format-utils';
+} from './format-utils.js';
import {
getWalletFromUserStorage,
pushWalletToUserStorage,
@@ -27,8 +28,8 @@ import {
pushGroupToUserStorage,
pushGroupToUserStorageBatch,
getAllLegacyUserStorageAccounts,
-} from './network-operations';
-import { executeWithRetry } from './network-utils';
+} from './network-operations.js';
+import { executeWithRetry } from './network-utils.js';
jest.mock('./format-utils');
jest.mock('./network-utils');
diff --git a/packages/account-tree-controller/src/backup-and-sync/user-storage/network-operations.ts b/packages/account-tree-controller/src/backup-and-sync/user-storage/network-operations.ts
index 52cd55e9e3d..48a4e0d4e79 100644
--- a/packages/account-tree-controller/src/backup-and-sync/user-storage/network-operations.ts
+++ b/packages/account-tree-controller/src/backup-and-sync/user-storage/network-operations.ts
@@ -1,28 +1,28 @@
import { SDK } from '@metamask/profile-sync-controller';
-import type { AccountGroupMultichainAccountObject } from '../../group';
-import { backupAndSyncLogger } from '../../logger';
-import type { AccountWalletEntropyObject } from '../../wallet';
+import type { AccountGroupMultichainAccountObject } from '../../group.js';
+import { backupAndSyncLogger } from '../../logger.js';
+import type { AccountWalletEntropyObject } from '../../wallet.js';
import type {
BackupAndSyncContext,
LegacyUserStorageSyncedAccount,
UserStorageSyncedWallet,
UserStorageSyncedWalletGroup,
-} from '../types';
-import { toErrorMessage } from '../utils/errors';
+} from '../types.js';
+import { toErrorMessage } from '../utils/errors.js';
import {
USER_STORAGE_GROUPS_FEATURE_KEY,
USER_STORAGE_WALLETS_FEATURE_ENTRY_KEY,
USER_STORAGE_WALLETS_FEATURE_KEY,
-} from './constants';
+} from './constants.js';
import {
formatWalletForUserStorageUsage,
formatGroupForUserStorageUsage,
parseWalletFromUserStorageResponse,
parseGroupFromUserStorageResponse,
parseLegacyAccountFromUserStorageResponse,
-} from './format-utils';
-import { executeWithRetry } from './network-utils';
+} from './format-utils.js';
+import { executeWithRetry } from './network-utils.js';
/**
* Retrieves the wallet from user storage.
diff --git a/packages/account-tree-controller/src/backup-and-sync/user-storage/network-utils.test.ts b/packages/account-tree-controller/src/backup-and-sync/user-storage/network-utils.test.ts
index eee876f3f97..08e8d1ac3f3 100644
--- a/packages/account-tree-controller/src/backup-and-sync/user-storage/network-utils.test.ts
+++ b/packages/account-tree-controller/src/backup-and-sync/user-storage/network-utils.test.ts
@@ -1,4 +1,6 @@
-import { executeWithRetry } from './network-utils';
+import { jest } from '@jest/globals';
+
+import { executeWithRetry } from './network-utils.js';
describe('BackupAndSync - UserStorage - NetworkUtils', () => {
beforeEach(() => {
diff --git a/packages/account-tree-controller/src/backup-and-sync/user-storage/validation.test.ts b/packages/account-tree-controller/src/backup-and-sync/user-storage/validation.test.ts
index c404ab3731d..5252d59b7e3 100644
--- a/packages/account-tree-controller/src/backup-and-sync/user-storage/validation.test.ts
+++ b/packages/account-tree-controller/src/backup-and-sync/user-storage/validation.test.ts
@@ -2,7 +2,7 @@ import {
assertValidUserStorageWallet,
assertValidUserStorageGroup,
assertValidLegacyUserStorageAccount,
-} from './validation';
+} from './validation.js';
describe('BackupAndSync - UserStorage - Validation', () => {
describe('assertValidUserStorageWallet', () => {
diff --git a/packages/account-tree-controller/src/backup-and-sync/user-storage/validation.ts b/packages/account-tree-controller/src/backup-and-sync/user-storage/validation.ts
index d31bf2bae78..325aa7e5c2c 100644
--- a/packages/account-tree-controller/src/backup-and-sync/user-storage/validation.ts
+++ b/packages/account-tree-controller/src/backup-and-sync/user-storage/validation.ts
@@ -4,12 +4,12 @@ import type {
LegacyUserStorageSyncedAccount,
UserStorageSyncedWallet,
UserStorageSyncedWalletGroup,
-} from '../types';
+} from '../types.js';
import {
UserStorageSyncedWalletSchema,
UserStorageSyncedWalletGroupSchema,
LegacyUserStorageSyncedAccountSchema,
-} from '../types';
+} from '../types.js';
/**
* Formats validation error messages for user storage data.
diff --git a/packages/account-tree-controller/src/backup-and-sync/utils/controller.test.ts b/packages/account-tree-controller/src/backup-and-sync/utils/controller.test.ts
index 3437931e887..b2627b816c9 100644
--- a/packages/account-tree-controller/src/backup-and-sync/utils/controller.test.ts
+++ b/packages/account-tree-controller/src/backup-and-sync/utils/controller.test.ts
@@ -1,19 +1,20 @@
+import { jest } from '@jest/globals';
import { AccountWalletType, AccountGroupType } from '@metamask/account-api';
-import type { AccountTreeController } from '../../AccountTreeController';
+import type { AccountTreeController } from '../../AccountTreeController.js';
import type {
AccountWalletEntropyObject,
AccountWalletKeyringObject,
-} from '../../wallet';
-import type { BackupAndSyncContext } from '../types';
+} from '../../wallet.js';
+import type { BackupAndSyncContext } from '../types.js';
import {
getLocalEntropyWallets,
getLocalGroupsForEntropyWallet,
createStateSnapshot,
restoreStateFromSnapshot,
getLocalGroupForEntropyWallet,
-} from './controller';
-import type { StateSnapshot } from './controller';
+} from './controller.js';
+import type { StateSnapshot } from './controller.js';
describe('BackupAndSyncUtils - Controller', () => {
let mockContext: BackupAndSyncContext;
diff --git a/packages/account-tree-controller/src/backup-and-sync/utils/controller.ts b/packages/account-tree-controller/src/backup-and-sync/utils/controller.ts
index 4a0e368ca8e..b7cf1582207 100644
--- a/packages/account-tree-controller/src/backup-and-sync/utils/controller.ts
+++ b/packages/account-tree-controller/src/backup-and-sync/utils/controller.ts
@@ -5,11 +5,11 @@ import {
} from '@metamask/account-api';
import type { AccountWalletId } from '@metamask/account-api';
-import type { AccountGroupMultichainAccountObject } from '../../group';
-import { backupAndSyncLogger } from '../../logger';
-import type { AccountTreeControllerState } from '../../types';
-import type { AccountWalletEntropyObject } from '../../wallet';
-import type { BackupAndSyncContext } from '../types';
+import type { AccountGroupMultichainAccountObject } from '../../group.js';
+import { backupAndSyncLogger } from '../../logger.js';
+import type { AccountTreeControllerState } from '../../types.js';
+import type { AccountWalletEntropyObject } from '../../wallet.js';
+import type { BackupAndSyncContext } from '../types.js';
/**
* Gets all local entropy wallets that can be synced.
diff --git a/packages/account-tree-controller/src/backup-and-sync/utils/errors.test.ts b/packages/account-tree-controller/src/backup-and-sync/utils/errors.test.ts
index 2879bf4ad8c..9e963d5e751 100644
--- a/packages/account-tree-controller/src/backup-and-sync/utils/errors.test.ts
+++ b/packages/account-tree-controller/src/backup-and-sync/utils/errors.test.ts
@@ -1,4 +1,4 @@
-import { toErrorMessage } from './errors';
+import { toErrorMessage } from './errors.js';
describe('toErrorMessage', () => {
it('returns the message property for Error instances', () => {
diff --git a/packages/account-tree-controller/src/backup-and-sync/utils/index.ts b/packages/account-tree-controller/src/backup-and-sync/utils/index.ts
index f84fb0dafde..4680c6258d7 100644
--- a/packages/account-tree-controller/src/backup-and-sync/utils/index.ts
+++ b/packages/account-tree-controller/src/backup-and-sync/utils/index.ts
@@ -1,3 +1,3 @@
-export * from './controller';
-export { toErrorMessage } from './errors';
-export { createSyncMutationTracker } from './mutation-tracker';
+export * from './controller.js';
+export { toErrorMessage } from './errors.js';
+export { createSyncMutationTracker } from './mutation-tracker.js';
diff --git a/packages/account-tree-controller/src/backup-and-sync/utils/mutation-tracker.test.ts b/packages/account-tree-controller/src/backup-and-sync/utils/mutation-tracker.test.ts
index 43444baffe5..02c589130f6 100644
--- a/packages/account-tree-controller/src/backup-and-sync/utils/mutation-tracker.test.ts
+++ b/packages/account-tree-controller/src/backup-and-sync/utils/mutation-tracker.test.ts
@@ -1,4 +1,4 @@
-import { createSyncMutationTracker } from './mutation-tracker';
+import { createSyncMutationTracker } from './mutation-tracker.js';
describe('BackupAndSync - Utils - createSyncMutationTracker', () => {
it('starts with no recorded writes', () => {
diff --git a/packages/account-tree-controller/src/backup-and-sync/utils/mutation-tracker.ts b/packages/account-tree-controller/src/backup-and-sync/utils/mutation-tracker.ts
index aa0d3e74beb..690f11cf443 100644
--- a/packages/account-tree-controller/src/backup-and-sync/utils/mutation-tracker.ts
+++ b/packages/account-tree-controller/src/backup-and-sync/utils/mutation-tracker.ts
@@ -1,4 +1,4 @@
-import type { SyncMutationTracker } from '../types';
+import type { SyncMutationTracker } from '../types.js';
/**
* Creates a tracker that records whether the current full sync run performed a
diff --git a/packages/account-tree-controller/src/group.ts b/packages/account-tree-controller/src/group.ts
index 5e53cbc5a08..11ed0557d15 100644
--- a/packages/account-tree-controller/src/group.ts
+++ b/packages/account-tree-controller/src/group.ts
@@ -14,9 +14,9 @@ import {
} from '@metamask/keyring-api';
import type { KeyringAccountType } from '@metamask/keyring-api';
-import type { UpdatableField, ExtractFieldValues } from './type-utils';
-import type { AccountTreeControllerState } from './types';
-import type { AccountWalletObject } from './wallet';
+import type { UpdatableField, ExtractFieldValues } from './type-utils.js';
+import type { AccountTreeControllerState } from './types.js';
+import type { AccountWalletObject } from './wallet.js';
/**
* Persisted metadata for account groups (stored in controller state for persistence/sync).
diff --git a/packages/account-tree-controller/src/index.ts b/packages/account-tree-controller/src/index.ts
index 28b2f17f645..854ca0a392b 100644
--- a/packages/account-tree-controller/src/index.ts
+++ b/packages/account-tree-controller/src/index.ts
@@ -1,11 +1,11 @@
-export type { AccountWalletObject } from './wallet';
-export type { AccountGroupObject } from './group';
-export { isAccountGroupNameUnique } from './group';
+export type { AccountWalletObject } from './wallet.js';
+export type { AccountGroupObject } from './group.js';
+export { isAccountGroupNameUnique } from './group.js';
export {
USER_STORAGE_GROUPS_FEATURE_KEY,
USER_STORAGE_WALLETS_FEATURE_KEY,
-} from './backup-and-sync/user-storage/constants';
+} from './backup-and-sync/user-storage/constants.js';
export type {
AccountTreeControllerState,
@@ -19,7 +19,7 @@ export type {
AccountTreeControllerAccountGroupRemovedEvent,
AccountTreeControllerEvents,
AccountTreeControllerMessenger,
-} from './types';
+} from './types.js';
export type {
AccountTreeControllerGetAccountWalletObjectAction,
@@ -38,11 +38,11 @@ export type {
AccountTreeControllerSyncWithUserStorageAtLeastOnceAction,
AccountTreeControllerInitAction,
AccountTreeControllerReinitAction,
-} from './AccountTreeController-method-action-types';
+} from './AccountTreeController-method-action-types.js';
-export type { AccountContext } from './AccountTreeController';
+export type { AccountContext } from './AccountTreeController.js';
export {
AccountTreeController,
getDefaultAccountTreeControllerState,
-} from './AccountTreeController';
+} from './AccountTreeController.js';
diff --git a/packages/account-tree-controller/src/rule.test.ts b/packages/account-tree-controller/src/rule.test.ts
index f98661db909..17732034583 100644
--- a/packages/account-tree-controller/src/rule.test.ts
+++ b/packages/account-tree-controller/src/rule.test.ts
@@ -16,10 +16,10 @@ import type { InternalAccount } from '@metamask/keyring-internal-api';
import {
getAccountTreeControllerMessenger,
getRootMessenger,
-} from '../tests/mockMessenger';
-import type { AccountGroupObject } from './group';
-import { BaseRule } from './rule';
-import type { AccountWalletObject } from './wallet';
+} from '../tests/mockMessenger.js';
+import type { AccountGroupObject } from './group.js';
+import { BaseRule } from './rule.js';
+import type { AccountWalletObject } from './wallet.js';
const ETH_EOA_METHODS = [
EthMethod.PersonalSign,
diff --git a/packages/account-tree-controller/src/rule.ts b/packages/account-tree-controller/src/rule.ts
index f016687edb3..31e1d65b16f 100644
--- a/packages/account-tree-controller/src/rule.ts
+++ b/packages/account-tree-controller/src/rule.ts
@@ -8,9 +8,9 @@ import type {
} from '@metamask/account-api';
import type { InternalAccount } from '@metamask/keyring-internal-api';
-import type { AccountGroupObject, AccountGroupObjectOf } from './group';
-import type { AccountTreeControllerMessenger } from './types';
-import type { AccountWalletObject, AccountWalletObjectOf } from './wallet';
+import type { AccountGroupObject, AccountGroupObjectOf } from './group.js';
+import type { AccountTreeControllerMessenger } from './types.js';
+import type { AccountWalletObject, AccountWalletObjectOf } from './wallet.js';
export type RuleResult<
WalletType extends AccountWalletType,
diff --git a/packages/account-tree-controller/src/rules/entropy.test.ts b/packages/account-tree-controller/src/rules/entropy.test.ts
index b05f833213e..60a0ee209c7 100644
--- a/packages/account-tree-controller/src/rules/entropy.test.ts
+++ b/packages/account-tree-controller/src/rules/entropy.test.ts
@@ -18,9 +18,9 @@ import type { AccountWalletEntropyObject } from 'src/wallet';
import {
getAccountTreeControllerMessenger,
getRootMessenger,
-} from '../../tests/mockMessenger';
-import type { AccountGroupObjectOf } from '../group';
-import { EntropyRule } from './entropy';
+} from '../../tests/mockMessenger.js';
+import type { AccountGroupObjectOf } from '../group.js';
+import { EntropyRule } from './entropy.js';
const ETH_EOA_METHODS = [
EthMethod.PersonalSign,
diff --git a/packages/account-tree-controller/src/rules/entropy.ts b/packages/account-tree-controller/src/rules/entropy.ts
index e9ddc1bf8b6..03fb50953fc 100644
--- a/packages/account-tree-controller/src/rules/entropy.ts
+++ b/packages/account-tree-controller/src/rules/entropy.ts
@@ -9,10 +9,10 @@ import { isEvmAccountType } from '@metamask/keyring-api';
import { KeyringTypes } from '@metamask/keyring-controller';
import type { InternalAccount } from '@metamask/keyring-internal-api';
-import type { AccountGroupObjectOf } from '../group';
-import { BaseRule } from '../rule';
-import type { Rule, RuleResult } from '../rule';
-import type { AccountWalletObjectOf } from '../wallet';
+import type { AccountGroupObjectOf } from '../group.js';
+import { BaseRule } from '../rule.js';
+import type { Rule, RuleResult } from '../rule.js';
+import type { AccountWalletObjectOf } from '../wallet.js';
export class EntropyRule
extends BaseRule
diff --git a/packages/account-tree-controller/src/rules/keyring.test.ts b/packages/account-tree-controller/src/rules/keyring.test.ts
index 02f5bd947de..b2a6ebf4758 100644
--- a/packages/account-tree-controller/src/rules/keyring.test.ts
+++ b/packages/account-tree-controller/src/rules/keyring.test.ts
@@ -12,13 +12,13 @@ import type { InternalAccount } from '@metamask/keyring-internal-api';
import {
getAccountTreeControllerMessenger,
getRootMessenger,
-} from '../../tests/mockMessenger';
-import type { AccountGroupObjectOf } from '../group';
+} from '../../tests/mockMessenger.js';
+import type { AccountGroupObjectOf } from '../group.js';
import type {
AccountWalletKeyringObject,
AccountWalletObjectOf,
-} from '../wallet';
-import { KeyringRule, getAccountWalletNameFromKeyringType } from './keyring';
+} from '../wallet.js';
+import { KeyringRule, getAccountWalletNameFromKeyringType } from './keyring.js';
describe('keyring', () => {
describe('getAccountWalletNameFromKeyringType', () => {
diff --git a/packages/account-tree-controller/src/rules/keyring.ts b/packages/account-tree-controller/src/rules/keyring.ts
index 9873988c95c..91c9305750c 100644
--- a/packages/account-tree-controller/src/rules/keyring.ts
+++ b/packages/account-tree-controller/src/rules/keyring.ts
@@ -5,10 +5,10 @@ import { KeyringType } from '@metamask/keyring-api/v2';
import { KeyringTypes } from '@metamask/keyring-controller';
import type { InternalAccount } from '@metamask/keyring-internal-api';
-import type { AccountGroupObjectOf } from '../group';
-import { BaseRule } from '../rule';
-import type { Rule, RuleResult } from '../rule';
-import type { AccountWalletObjectOf } from '../wallet';
+import type { AccountGroupObjectOf } from '../group.js';
+import { BaseRule } from '../rule.js';
+import type { Rule, RuleResult } from '../rule.js';
+import type { AccountWalletObjectOf } from '../wallet.js';
/**
* Get wallet name from a keyring type.
diff --git a/packages/account-tree-controller/src/rules/snap.test.ts b/packages/account-tree-controller/src/rules/snap.test.ts
index 1309b23ef75..0426aa13e82 100644
--- a/packages/account-tree-controller/src/rules/snap.test.ts
+++ b/packages/account-tree-controller/src/rules/snap.test.ts
@@ -14,10 +14,13 @@ import type { Snap } from '@metamask/snaps-utils';
import {
getAccountTreeControllerMessenger,
getRootMessenger,
-} from '../../tests/mockMessenger';
-import type { AccountGroupObjectOf } from '../group';
-import type { AccountWalletObjectOf, AccountWalletSnapObject } from '../wallet';
-import { SnapRule } from './snap';
+} from '../../tests/mockMessenger.js';
+import type { AccountGroupObjectOf } from '../group.js';
+import type {
+ AccountWalletObjectOf,
+ AccountWalletSnapObject,
+} from '../wallet.js';
+import { SnapRule } from './snap.js';
const ETH_EOA_METHODS = [
EthMethod.PersonalSign,
diff --git a/packages/account-tree-controller/src/rules/snap.ts b/packages/account-tree-controller/src/rules/snap.ts
index 085242db781..04327e6d456 100644
--- a/packages/account-tree-controller/src/rules/snap.ts
+++ b/packages/account-tree-controller/src/rules/snap.ts
@@ -6,10 +6,10 @@ import type { InternalAccount } from '@metamask/keyring-internal-api';
import type { SnapId } from '@metamask/snaps-sdk';
import { stripSnapPrefix } from '@metamask/snaps-utils';
-import { BaseRule } from '../rule';
-import type { Rule, RuleResult } from '../rule';
-import type { AccountWalletObjectOf } from '../wallet';
-import { getAccountGroupPrefixFromKeyringType } from './keyring';
+import { BaseRule } from '../rule.js';
+import type { Rule, RuleResult } from '../rule.js';
+import type { AccountWalletObjectOf } from '../wallet.js';
+import { getAccountGroupPrefixFromKeyringType } from './keyring.js';
/**
* Snap account type.
diff --git a/packages/account-tree-controller/src/types.ts b/packages/account-tree-controller/src/types.ts
index e7a66571399..a385708fa69 100644
--- a/packages/account-tree-controller/src/types.ts
+++ b/packages/account-tree-controller/src/types.ts
@@ -27,20 +27,20 @@ import type {
} from '@metamask/profile-sync-controller';
import type { SnapControllerGetSnapAction } from '@metamask/snaps-controllers';
-import type { controllerName } from './AccountTreeController';
-import type { AccountTreeControllerMethodActions } from './AccountTreeController-method-action-types';
+import type { AccountTreeControllerMethodActions } from './AccountTreeController-method-action-types.js';
+import type { controllerName } from './AccountTreeController.js';
import type {
BackupAndSyncAnalyticsEventPayload,
BackupAndSyncEmitAnalyticsEventParams,
-} from './backup-and-sync/analytics';
+} from './backup-and-sync/analytics.js';
import type {
AccountGroupObject,
AccountTreeGroupPersistedMetadata,
-} from './group';
+} from './group.js';
import type {
AccountWalletObject,
AccountTreeWalletPersistedMetadata,
-} from './wallet';
+} from './wallet.js';
// Backward compatibility aliases using indexed access types
/**
diff --git a/packages/account-tree-controller/src/wallet.ts b/packages/account-tree-controller/src/wallet.ts
index fdfc46270f5..cf3cd695514 100644
--- a/packages/account-tree-controller/src/wallet.ts
+++ b/packages/account-tree-controller/src/wallet.ts
@@ -14,7 +14,7 @@ import type {
AccountGroupMultichainAccountObject,
AccountGroupObject,
AccountGroupSingleAccountObject,
-} from './group';
+} from './group.js';
import type { UpdatableField, ExtractFieldValues } from './type-utils.js';
/**
diff --git a/packages/account-tree-controller/tests/mockMessenger.ts b/packages/account-tree-controller/tests/mockMessenger.ts
index a96594dbf76..3516c81a177 100644
--- a/packages/account-tree-controller/tests/mockMessenger.ts
+++ b/packages/account-tree-controller/tests/mockMessenger.ts
@@ -5,7 +5,7 @@ import type {
MessengerEvents,
} from '@metamask/messenger';
-import type { AccountTreeControllerMessenger } from '../src/types';
+import type { AccountTreeControllerMessenger } from '../src/types.js';
type AllAccountTreeControllerActions =
MessengerActions;
diff --git a/packages/accounts-controller/jest.config.js b/packages/accounts-controller/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/accounts-controller/jest.config.js
+++ b/packages/accounts-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/accounts-controller/package.json b/packages/accounts-controller/package.json
index 07642c438f2..1ccf767505e 100644
--- a/packages/accounts-controller/package.json
+++ b/packages/accounts-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/accounts-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/accounts-controller",
@@ -70,14 +63,13 @@
"deepmerge": "^4.2.2",
"ethereum-cryptography": "^2.1.2",
"immer": "^9.0.6",
- "lodash": "^4.17.21",
+ "lodash-es": "^4.17.21",
"uuid": "^8.3.2"
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
"@metamask/controller-utils": "^12.3.0",
"@metamask/providers": "^22.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"@types/readable-stream": "^2.3.0",
"jest": "^29.7.0",
diff --git a/packages/accounts-controller/src/AccountsController-method-action-types.ts b/packages/accounts-controller/src/AccountsController-method-action-types.ts
index 34494943a28..12a69da6c60 100644
--- a/packages/accounts-controller/src/AccountsController-method-action-types.ts
+++ b/packages/accounts-controller/src/AccountsController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { AccountsController } from './AccountsController';
+import type { AccountsController } from './AccountsController.js';
/**
* Returns the internal account object for the given account ID, if it exists.
diff --git a/packages/accounts-controller/src/AccountsController.test.ts b/packages/accounts-controller/src/AccountsController.test.ts
index 1df8dfbf468..5dce84db319 100644
--- a/packages/accounts-controller/src/AccountsController.test.ts
+++ b/packages/accounts-controller/src/AccountsController.test.ts
@@ -40,16 +40,16 @@ import {
createMockInternalAccount,
createMockInternalAccountOptions,
ETH_EOA_METHODS,
-} from '../tests/mocks';
+} from '../tests/mocks.js';
import type {
AccountsControllerMessenger,
AccountsControllerState,
-} from './AccountsController';
-import { AccountsController, EMPTY_ACCOUNT } from './AccountsController';
+} from './AccountsController.js';
+import { AccountsController, EMPTY_ACCOUNT } from './AccountsController.js';
import {
getUUIDOptionsFromAddressOfNormalAccount,
keyringTypeToName,
-} from './utils';
+} from './utils.js';
type AllAccountsControllerActions =
MessengerActions;
diff --git a/packages/accounts-controller/src/AccountsController.ts b/packages/accounts-controller/src/AccountsController.ts
index abfd0c7113f..16f1544bde4 100644
--- a/packages/accounts-controller/src/AccountsController.ts
+++ b/packages/accounts-controller/src/AccountsController.ts
@@ -34,18 +34,18 @@ import type { NetworkClientId } from '@metamask/network-controller';
import { isCaipChainId } from '@metamask/utils';
import type { CaipChainId } from '@metamask/utils';
import type { WritableDraft } from 'immer/dist/internal.js';
-import { cloneDeep } from 'lodash';
+import { cloneDeep } from 'lodash-es';
-import { AccountsControllerMethodActions } from './AccountsController-method-action-types';
-import { projectLogger as log } from './logger';
+import { AccountsControllerMethodActions } from './AccountsController-method-action-types.js';
+import { projectLogger as log } from './logger.js';
import type {
MultichainNetworkControllerNetworkDidChangeEvent,
SnapAccountServiceAccountAssetListUpdatedEvent,
SnapAccountServiceAccountBalancesUpdatedEvent,
SnapAccountServiceAccountTransactionsUpdatedEvent,
-} from './types';
-import type { AccountsControllerStrictState } from './typing';
-import type { HdSnapKeyringAccount } from './utils';
+} from './types.js';
+import type { AccountsControllerStrictState } from './typing.js';
+import type { HdSnapKeyringAccount } from './utils.js';
import {
constructAccountIdByAddress,
getEvmDerivationPathForIndex,
@@ -57,7 +57,7 @@ import {
isSnapKeyringType,
isSnapKeyringV2Type,
keyringTypeToName,
-} from './utils';
+} from './utils.js';
const controllerName = 'AccountsController';
@@ -1035,9 +1035,7 @@ export class AccountsController extends BaseController<
);
if (account) {
- const accounts = Object.values(
- internalAccounts.accounts,
- ) as InternalAccount[];
+ const accounts = Object.values(internalAccounts.accounts);
// If it's the first account, we need to select it.
const lastSelected =
@@ -1112,9 +1110,7 @@ export class AccountsController extends BaseController<
// If the account no longer exists (or none is selected), we need to re-select another one.
const { internalAccounts } = state;
if (!internalAccounts.accounts[previouslySelectedAccount]) {
- const accounts = Object.values(
- internalAccounts.accounts,
- ) as InternalAccount[];
+ const accounts = Object.values(internalAccounts.accounts);
// Get the lastly selected account (according to the current accounts).
const lastSelectedAccount = this.#getLastSelectedAccount(accounts);
diff --git a/packages/accounts-controller/src/index.ts b/packages/accounts-controller/src/index.ts
index bfaf0be8e56..a19927804e4 100644
--- a/packages/accounts-controller/src/index.ts
+++ b/packages/accounts-controller/src/index.ts
@@ -18,7 +18,7 @@ export type {
AllowedEvents,
AccountsControllerEvents,
AccountsControllerMessenger,
-} from './AccountsController';
+} from './AccountsController.js';
export type {
AccountsControllerGetAccountAction,
AccountsControllerGetAccountsAction,
@@ -33,11 +33,11 @@ export type {
AccountsControllerUpdateAccountMetadataAction,
AccountsControllerUpdateAccountsAction,
AccountsControllerLoadBackupAction,
-} from './AccountsController-method-action-types';
-export { EMPTY_ACCOUNT, AccountsController } from './AccountsController';
+} from './AccountsController-method-action-types.js';
+export { EMPTY_ACCOUNT, AccountsController } from './AccountsController.js';
export {
keyringTypeToName,
getUUIDOptionsFromAddressOfNormalAccount,
getUUIDFromAddressOfNormalAccount,
isNormalKeyringType,
-} from './utils';
+} from './utils.js';
diff --git a/packages/accounts-controller/src/typing.ts b/packages/accounts-controller/src/typing.ts
index 81d038ac998..bca520d9037 100644
--- a/packages/accounts-controller/src/typing.ts
+++ b/packages/accounts-controller/src/typing.ts
@@ -1,7 +1,7 @@
import type { KeyringAccountEntropyOptions } from '@metamask/keyring-api';
import type { InternalAccount } from '@metamask/keyring-internal-api';
-import type { AccountsControllerState } from './AccountsController';
+import type { AccountsControllerState } from './AccountsController.js';
/**
* Type constraint to ensure a type is compatible with {@link AccountsControllerState}.
diff --git a/packages/accounts-controller/src/utils.test.ts b/packages/accounts-controller/src/utils.test.ts
index 66d22cd4621..6a03efe7c03 100644
--- a/packages/accounts-controller/src/utils.test.ts
+++ b/packages/accounts-controller/src/utils.test.ts
@@ -3,7 +3,7 @@ import { KeyringType } from '@metamask/keyring-api/v2';
import type { KeyringObject } from '@metamask/keyring-controller';
import { KeyringTypes } from '@metamask/keyring-controller';
-import { createMockInternalAccount } from '../tests/mocks';
+import { createMockInternalAccount } from '../tests/mocks.js';
import {
constructAccountIdByAddress,
getEvmGroupIndexFromAddressIndex,
@@ -12,7 +12,7 @@ import {
isSimpleKeyringType,
isSnapKeyringV2Type,
keyringTypeToName,
-} from './utils';
+} from './utils.js';
describe('utils', () => {
describe('keyringTypeToName', () => {
diff --git a/packages/accounts-controller/src/utils.ts b/packages/accounts-controller/src/utils.ts
index d10ec9538c0..64090871669 100644
--- a/packages/accounts-controller/src/utils.ts
+++ b/packages/accounts-controller/src/utils.ts
@@ -9,7 +9,7 @@ import { sha256 } from 'ethereum-cryptography/sha256';
import type { V4Options } from 'uuid';
import { v4 as uuid } from 'uuid';
-import type { AccountId } from './AccountsController';
+import type { AccountId } from './AccountsController.js';
/**
* Returns the name of the keyring type.
diff --git a/packages/address-book-controller/jest.config.js b/packages/address-book-controller/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/address-book-controller/jest.config.js
+++ b/packages/address-book-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/address-book-controller/package.json b/packages/address-book-controller/package.json
index 1e60d53476f..5288b57bab4 100644
--- a/packages/address-book-controller/package.json
+++ b/packages/address-book-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/address-book-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/address-book-controller",
@@ -61,8 +54,8 @@
"@metamask/utils": "^11.11.0"
},
"devDependencies": {
+ "@jest/globals": "^30.4.1",
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/address-book-controller/src/AddressBookController-method-action-types.ts b/packages/address-book-controller/src/AddressBookController-method-action-types.ts
index 5dcfc6b1b22..0c62c5e1f44 100644
--- a/packages/address-book-controller/src/AddressBookController-method-action-types.ts
+++ b/packages/address-book-controller/src/AddressBookController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { AddressBookController } from './AddressBookController';
+import type { AddressBookController } from './AddressBookController.js';
/**
* Returns all address book entries as an array.
diff --git a/packages/address-book-controller/src/AddressBookController.test.ts b/packages/address-book-controller/src/AddressBookController.test.ts
index f3064c83750..af619c011d5 100644
--- a/packages/address-book-controller/src/AddressBookController.test.ts
+++ b/packages/address-book-controller/src/AddressBookController.test.ts
@@ -1,3 +1,4 @@
+import { jest } from '@jest/globals';
import { deriveStateFromMetadata } from '@metamask/base-controller';
import { toHex } from '@metamask/controller-utils';
import { Messenger, MOCK_ANY_NAMESPACE } from '@metamask/messenger';
@@ -11,12 +12,12 @@ import type { Hex } from '@metamask/utils';
import type {
AddressBookControllerContactDeletedEvent,
AddressBookControllerMessenger,
-} from './AddressBookController';
+} from './AddressBookController.js';
import {
AddressBookController,
AddressType,
controllerName,
-} from './AddressBookController';
+} from './AddressBookController.js';
type AllActions = MessengerActions;
diff --git a/packages/address-book-controller/src/AddressBookController.ts b/packages/address-book-controller/src/AddressBookController.ts
index 62ad4e66824..08e51b829a6 100644
--- a/packages/address-book-controller/src/AddressBookController.ts
+++ b/packages/address-book-controller/src/AddressBookController.ts
@@ -13,7 +13,7 @@ import {
import type { Messenger } from '@metamask/messenger';
import type { Hex } from '@metamask/utils';
-import type { AddressBookControllerMethodActions } from './AddressBookController-method-action-types';
+import type { AddressBookControllerMethodActions } from './AddressBookController-method-action-types.js';
/**
* ContactEntry representation
diff --git a/packages/address-book-controller/src/index.ts b/packages/address-book-controller/src/index.ts
index 3cf41024037..de2ef0e79ae 100644
--- a/packages/address-book-controller/src/index.ts
+++ b/packages/address-book-controller/src/index.ts
@@ -10,15 +10,15 @@ export type {
AddressBookControllerEvents,
AddressBookControllerMessenger,
ContactEntry,
-} from './AddressBookController';
+} from './AddressBookController.js';
export {
getDefaultAddressBookControllerState,
AddressBookController,
-} from './AddressBookController';
+} from './AddressBookController.js';
export type {
AddressBookControllerListAction,
AddressBookControllerSetAction,
AddressBookControllerDeleteAction,
AddressBookControllerClearAction,
-} from './AddressBookController-method-action-types';
+} from './AddressBookController-method-action-types.js';
diff --git a/packages/ai-controllers/jest.config.js b/packages/ai-controllers/jest.config.js
index 55df7971f9f..39fb20f6bb1 100644
--- a/packages/ai-controllers/jest.config.js
+++ b/packages/ai-controllers/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/ai-controllers/package.json b/packages/ai-controllers/package.json
index cb55d5708fa..25b304d6ff4 100644
--- a/packages/ai-controllers/package.json
+++ b/packages/ai-controllers/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/ai-controllers",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/ai-controllers",
@@ -61,8 +54,8 @@
"@metamask/utils": "^11.11.0"
},
"devDependencies": {
+ "@jest/globals": "^30.4.1",
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/ai-controllers/src/AiDigestController-method-action-types.ts b/packages/ai-controllers/src/AiDigestController-method-action-types.ts
index 3cf0d1e8464..f70cc3f654e 100644
--- a/packages/ai-controllers/src/AiDigestController-method-action-types.ts
+++ b/packages/ai-controllers/src/AiDigestController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { AiDigestController } from './AiDigestController';
+import type { AiDigestController } from './AiDigestController.js';
/**
* Fetches market insights for a given asset identifier.
diff --git a/packages/ai-controllers/src/AiDigestController.test.ts b/packages/ai-controllers/src/AiDigestController.test.ts
index 998e50b23b2..64b24706cca 100644
--- a/packages/ai-controllers/src/AiDigestController.test.ts
+++ b/packages/ai-controllers/src/AiDigestController.test.ts
@@ -1,3 +1,4 @@
+import { jest } from '@jest/globals';
import { Messenger } from '@metamask/messenger';
import {
@@ -6,14 +7,14 @@ import {
AiDigestControllerErrorMessage,
CACHE_DURATION_MS,
MAX_CACHE_ENTRIES,
-} from '.';
+} from './..js';
import type {
AiDigestControllerMessenger,
DigestService,
MarketInsightsReport,
MarketOverview,
MarketOverviewFrontPage,
-} from '.';
+} from './..js';
const mockReport: MarketInsightsReport = {
version: '1.0',
diff --git a/packages/ai-controllers/src/AiDigestController.ts b/packages/ai-controllers/src/AiDigestController.ts
index 3ad3eb86c3d..50223e4f094 100644
--- a/packages/ai-controllers/src/AiDigestController.ts
+++ b/packages/ai-controllers/src/AiDigestController.ts
@@ -11,7 +11,7 @@ import {
controllerName,
CACHE_DURATION_MS,
MAX_CACHE_ENTRIES,
-} from './ai-digest-constants';
+} from './ai-digest-constants.js';
import type {
AiDigestControllerState,
DigestService,
@@ -20,8 +20,8 @@ import type {
MarketOverview,
MarketOverviewEntry,
MarketOverviewFrontPage,
-} from './ai-digest-types';
-import type { AiDigestControllerMethodActions } from './AiDigestController-method-action-types';
+} from './ai-digest-types.js';
+import type { AiDigestControllerMethodActions } from './AiDigestController-method-action-types.js';
export type AiDigestControllerGetStateAction = ControllerGetStateAction<
typeof controllerName,
diff --git a/packages/ai-controllers/src/AiDigestService.test.ts b/packages/ai-controllers/src/AiDigestService.test.ts
index e5a83e0b866..4f443a786ca 100644
--- a/packages/ai-controllers/src/AiDigestService.test.ts
+++ b/packages/ai-controllers/src/AiDigestService.test.ts
@@ -1,5 +1,7 @@
-import { AiDigestService } from '.';
-import { AiDigestControllerErrorMessage } from './ai-digest-constants';
+import { jest } from '@jest/globals';
+
+import { AiDigestService } from './..js';
+import { AiDigestControllerErrorMessage } from './ai-digest-constants.js';
describe('AiDigestService', () => {
const mockFetch = jest.fn();
diff --git a/packages/ai-controllers/src/AiDigestService.ts b/packages/ai-controllers/src/AiDigestService.ts
index cacc04da390..cc46185f68a 100644
--- a/packages/ai-controllers/src/AiDigestService.ts
+++ b/packages/ai-controllers/src/AiDigestService.ts
@@ -7,14 +7,14 @@ import {
type as structType,
} from '@metamask/superstruct';
-import { AiDigestControllerErrorMessage } from './ai-digest-constants';
+import { AiDigestControllerErrorMessage } from './ai-digest-constants.js';
import type {
DigestService,
MarketInsightsReport,
MarketOverview,
MarketOverviewFrontPage,
MarketOverviewTrend,
-} from './ai-digest-types';
+} from './ai-digest-types.js';
export type AiDigestServiceConfig = {
baseUrl: string;
diff --git a/packages/ai-controllers/src/index.ts b/packages/ai-controllers/src/index.ts
index 176b69db306..c59aa890131 100644
--- a/packages/ai-controllers/src/index.ts
+++ b/packages/ai-controllers/src/index.ts
@@ -5,19 +5,19 @@ export type {
AiDigestControllerMessenger,
AiDigestControllerOptions,
AiDigestControllerStateChangeEvent,
-} from './AiDigestController';
+} from './AiDigestController.js';
export {
AiDigestController,
getDefaultAiDigestControllerState,
-} from './AiDigestController';
+} from './AiDigestController.js';
export type {
AiDigestControllerFetchMarketInsightsAction,
AiDigestControllerFetchMarketOverviewAction,
AiDigestControllerFetchFrontPageItemAction,
-} from './AiDigestController-method-action-types';
+} from './AiDigestController-method-action-types.js';
-export type { AiDigestServiceConfig } from './AiDigestService';
-export { AiDigestService } from './AiDigestService';
+export type { AiDigestServiceConfig } from './AiDigestService.js';
+export { AiDigestService } from './AiDigestService.js';
export type {
AiDigestControllerState,
@@ -38,11 +38,11 @@ export type {
RelatedAsset,
Source,
Tweet,
-} from './ai-digest-types';
+} from './ai-digest-types.js';
export {
controllerName as aiDigestControllerName,
CACHE_DURATION_MS,
MAX_CACHE_ENTRIES,
AiDigestControllerErrorMessage,
-} from './ai-digest-constants';
+} from './ai-digest-constants.js';
diff --git a/packages/analytics-controller/jest.config.js b/packages/analytics-controller/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/analytics-controller/jest.config.js
+++ b/packages/analytics-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/analytics-controller/package.json b/packages/analytics-controller/package.json
index 0c8a5790f23..66aafe70744 100644
--- a/packages/analytics-controller/package.json
+++ b/packages/analytics-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/analytics-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/analytics-controller",
@@ -58,12 +51,12 @@
"@metamask/base-controller": "^9.1.0",
"@metamask/messenger": "^2.0.0",
"@metamask/utils": "^11.11.0",
- "lodash": "^4.17.21",
+ "lodash-es": "^4.17.21",
"uuid": "^8.3.2"
},
"devDependencies": {
+ "@jest/globals": "^30.4.1",
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"@types/uuid": "^8.3.0",
"deepmerge": "^4.2.2",
diff --git a/packages/analytics-controller/src/AnalyticsController-method-action-types.ts b/packages/analytics-controller/src/AnalyticsController-method-action-types.ts
index db027725a3f..d3756af5180 100644
--- a/packages/analytics-controller/src/AnalyticsController-method-action-types.ts
+++ b/packages/analytics-controller/src/AnalyticsController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { AnalyticsController } from './AnalyticsController';
+import type { AnalyticsController } from './AnalyticsController.js';
/**
* Track an analytics event.
diff --git a/packages/analytics-controller/src/AnalyticsController.test.ts b/packages/analytics-controller/src/AnalyticsController.test.ts
index 68a7aee0cce..0bc4a86f15d 100644
--- a/packages/analytics-controller/src/AnalyticsController.test.ts
+++ b/packages/analytics-controller/src/AnalyticsController.test.ts
@@ -1,3 +1,4 @@
+import { jest } from '@jest/globals';
import { deriveStateFromMetadata } from '@metamask/base-controller';
import { Messenger, MOCK_ANY_NAMESPACE } from '@metamask/messenger';
import type { MockAnyNamespace } from '@metamask/messenger';
@@ -8,7 +9,7 @@ import {
AnalyticsPlatformAdapterSetupError,
getDefaultAnalyticsControllerState,
analyticsControllerSelectors,
-} from '.';
+} from './..js';
import type {
AnalyticsControllerMessenger,
AnalyticsControllerActions,
@@ -18,8 +19,8 @@ import type {
AnalyticsTrackingEvent,
AnalyticsControllerState,
AnalyticsContext,
-} from '.';
-import { isValidUUIDv4 } from './analyticsControllerStateValidator';
+} from './..js';
+import { isValidUUIDv4 } from './analyticsControllerStateValidator.js';
type SetupControllerOptions = {
state: AnalyticsControllerState;
diff --git a/packages/analytics-controller/src/AnalyticsController.ts b/packages/analytics-controller/src/AnalyticsController.ts
index 1c8e8170216..54d199ac1db 100644
--- a/packages/analytics-controller/src/AnalyticsController.ts
+++ b/packages/analytics-controller/src/AnalyticsController.ts
@@ -6,12 +6,12 @@ import type {
import { BaseController } from '@metamask/base-controller';
import type { Messenger } from '@metamask/messenger';
import type { Json } from '@metamask/utils';
-import { cloneDeep } from 'lodash';
+import { cloneDeep } from 'lodash-es';
import { v4 as uuid } from 'uuid';
-import type { AnalyticsControllerMethodActions } from './AnalyticsController-method-action-types';
-import { validateAnalyticsControllerState } from './analyticsControllerStateValidator';
-import { projectLogger as log } from './AnalyticsLogger';
+import type { AnalyticsControllerMethodActions } from './AnalyticsController-method-action-types.js';
+import { validateAnalyticsControllerState } from './analyticsControllerStateValidator.js';
+import { projectLogger as log } from './AnalyticsLogger.js';
import type {
AnalyticsPlatformAdapter,
AnalyticsDeliveryOptions,
@@ -19,8 +19,8 @@ import type {
AnalyticsEventProperties,
AnalyticsUserTraits,
AnalyticsTrackingEvent,
-} from './AnalyticsPlatformAdapter.types';
-import { analyticsControllerSelectors } from './selectors';
+} from './AnalyticsPlatformAdapter.types.js';
+import { analyticsControllerSelectors } from './selectors.js';
// === GENERAL ===
diff --git a/packages/analytics-controller/src/analyticsControllerStateValidator.test.ts b/packages/analytics-controller/src/analyticsControllerStateValidator.test.ts
index 2e1dea9c964..e7782413e70 100644
--- a/packages/analytics-controller/src/analyticsControllerStateValidator.test.ts
+++ b/packages/analytics-controller/src/analyticsControllerStateValidator.test.ts
@@ -1,5 +1,5 @@
-import type { AnalyticsControllerState } from './AnalyticsController';
-import { validateAnalyticsControllerState } from './analyticsControllerStateValidator';
+import type { AnalyticsControllerState } from './AnalyticsController.js';
+import { validateAnalyticsControllerState } from './analyticsControllerStateValidator.js';
describe('analyticsControllerStateValidator', () => {
describe('validateAnalyticsControllerState', () => {
diff --git a/packages/analytics-controller/src/analyticsControllerStateValidator.ts b/packages/analytics-controller/src/analyticsControllerStateValidator.ts
index f40773994d2..2053d8c58b0 100644
--- a/packages/analytics-controller/src/analyticsControllerStateValidator.ts
+++ b/packages/analytics-controller/src/analyticsControllerStateValidator.ts
@@ -1,4 +1,4 @@
-import type { AnalyticsControllerState } from './AnalyticsController';
+import type { AnalyticsControllerState } from './AnalyticsController.js';
/**
* UUIDv4 format regex pattern.
diff --git a/packages/analytics-controller/src/index.ts b/packages/analytics-controller/src/index.ts
index 6a7a61d17a3..14fcc0ae020 100644
--- a/packages/analytics-controller/src/index.ts
+++ b/packages/analytics-controller/src/index.ts
@@ -2,11 +2,11 @@
export {
AnalyticsController,
getDefaultAnalyticsControllerState,
-} from './AnalyticsController';
-export type { AnalyticsControllerOptions } from './AnalyticsController';
+} from './AnalyticsController.js';
+export type { AnalyticsControllerOptions } from './AnalyticsController.js';
// Export errors
-export { AnalyticsPlatformAdapterSetupError } from './AnalyticsPlatformAdapterSetupError';
+export { AnalyticsPlatformAdapterSetupError } from './AnalyticsPlatformAdapterSetupError.js';
// Export types
export type {
@@ -17,7 +17,7 @@ export type {
AnalyticsUserTraits,
AnalyticsPlatformAdapter,
AnalyticsTrackingEvent,
-} from './AnalyticsPlatformAdapter.types';
+} from './AnalyticsPlatformAdapter.types.js';
// Export state types
export type {
@@ -28,13 +28,13 @@ export type {
AnalyticsQueuedTrackEvent,
AnalyticsQueuedIdentifyEvent,
AnalyticsQueuedViewEvent,
-} from './AnalyticsController';
+} from './AnalyticsController.js';
// Export selectors
-export { analyticsControllerSelectors } from './selectors';
+export { analyticsControllerSelectors } from './selectors.js';
// Export messenger types
-export type { AnalyticsControllerMessenger } from './AnalyticsController';
+export type { AnalyticsControllerMessenger } from './AnalyticsController.js';
// Export action and event types
export type {
@@ -42,7 +42,7 @@ export type {
AnalyticsControllerEvents,
AnalyticsControllerGetStateAction,
AnalyticsControllerStateChangeEvent,
-} from './AnalyticsController';
+} from './AnalyticsController.js';
export type {
AnalyticsControllerTrackEventAction,
AnalyticsControllerIdentifyAction,
@@ -51,4 +51,4 @@ export type {
AnalyticsControllerOptOutAction,
AnalyticsControllerResetConsentDecisionAction,
AnalyticsControllerMethodActions,
-} from './AnalyticsController-method-action-types';
+} from './AnalyticsController-method-action-types.js';
diff --git a/packages/analytics-controller/src/selectors.test.ts b/packages/analytics-controller/src/selectors.test.ts
index 0a65cbbc206..3833250aa29 100644
--- a/packages/analytics-controller/src/selectors.test.ts
+++ b/packages/analytics-controller/src/selectors.test.ts
@@ -1,5 +1,5 @@
-import type { AnalyticsControllerState } from './AnalyticsController';
-import { analyticsControllerSelectors } from './selectors';
+import type { AnalyticsControllerState } from './AnalyticsController.js';
+import { analyticsControllerSelectors } from './selectors.js';
describe('analyticsControllerSelectors', () => {
const defaultAnalyticsId = '550e8400-e29b-41d4-a716-446655440000';
diff --git a/packages/analytics-controller/src/selectors.ts b/packages/analytics-controller/src/selectors.ts
index 9386e915462..b5509571989 100644
--- a/packages/analytics-controller/src/selectors.ts
+++ b/packages/analytics-controller/src/selectors.ts
@@ -1,4 +1,4 @@
-import type { AnalyticsControllerState } from './AnalyticsController';
+import type { AnalyticsControllerState } from './AnalyticsController.js';
/**
* Selects the analytics ID from the controller state.
diff --git a/packages/analytics-data-regulation-controller/jest.config.js b/packages/analytics-data-regulation-controller/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/analytics-data-regulation-controller/jest.config.js
+++ b/packages/analytics-data-regulation-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/analytics-data-regulation-controller/package.json b/packages/analytics-data-regulation-controller/package.json
index c76d5751f40..690744e8d6f 100644
--- a/packages/analytics-data-regulation-controller/package.json
+++ b/packages/analytics-data-regulation-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/analytics-data-regulation-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/analytics-data-regulation-controller",
@@ -61,8 +54,8 @@
"@metamask/utils": "^11.11.0"
},
"devDependencies": {
+ "@jest/globals": "^30.4.1",
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/analytics-data-regulation-controller/src/AnalyticsDataRegulationController-method-action-types.ts b/packages/analytics-data-regulation-controller/src/AnalyticsDataRegulationController-method-action-types.ts
index 7706a11039d..344d0164e75 100644
--- a/packages/analytics-data-regulation-controller/src/AnalyticsDataRegulationController-method-action-types.ts
+++ b/packages/analytics-data-regulation-controller/src/AnalyticsDataRegulationController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { AnalyticsDataRegulationController } from './AnalyticsDataRegulationController';
+import type { AnalyticsDataRegulationController } from './AnalyticsDataRegulationController.js';
/**
* Creates a new delete regulation for the user.
diff --git a/packages/analytics-data-regulation-controller/src/AnalyticsDataRegulationController.test.ts b/packages/analytics-data-regulation-controller/src/AnalyticsDataRegulationController.test.ts
index 88b44c3e599..56ba21dfe05 100644
--- a/packages/analytics-data-regulation-controller/src/AnalyticsDataRegulationController.test.ts
+++ b/packages/analytics-data-regulation-controller/src/AnalyticsDataRegulationController.test.ts
@@ -1,18 +1,22 @@
+import { jest } from '@jest/globals';
import { Messenger, MOCK_ANY_NAMESPACE } from '@metamask/messenger';
import type { MockAnyNamespace } from '@metamask/messenger';
import {
AnalyticsDataRegulationController,
getDefaultAnalyticsDataRegulationControllerState,
-} from '.';
+} from './..js';
import type {
AnalyticsDataRegulationControllerMessenger,
AnalyticsDataRegulationControllerActions,
AnalyticsDataRegulationControllerEvents,
AnalyticsDataRegulationControllerState,
-} from '.';
-import type { AnalyticsDataRegulationServiceActions } from './AnalyticsDataRegulationService';
-import { DATA_DELETE_RESPONSE_STATUSES, DATA_DELETE_STATUSES } from './types';
+} from './..js';
+import type { AnalyticsDataRegulationServiceActions } from './AnalyticsDataRegulationService.js';
+import {
+ DATA_DELETE_RESPONSE_STATUSES,
+ DATA_DELETE_STATUSES,
+} from './types.js';
type SetupControllerOptions = {
state?: Partial;
diff --git a/packages/analytics-data-regulation-controller/src/AnalyticsDataRegulationController.ts b/packages/analytics-data-regulation-controller/src/AnalyticsDataRegulationController.ts
index 9a52143c36f..0620a9d1dbc 100644
--- a/packages/analytics-data-regulation-controller/src/AnalyticsDataRegulationController.ts
+++ b/packages/analytics-data-regulation-controller/src/AnalyticsDataRegulationController.ts
@@ -6,11 +6,17 @@ import type {
import { BaseController } from '@metamask/base-controller';
import type { Messenger } from '@metamask/messenger';
-import type { AnalyticsDataRegulationControllerMethodActions } from './AnalyticsDataRegulationController-method-action-types';
-import type { AnalyticsDataRegulationServiceActions } from './AnalyticsDataRegulationService';
-import { projectLogger as log } from './logger';
-import { DATA_DELETE_RESPONSE_STATUSES, DATA_DELETE_STATUSES } from './types';
-import type { DeleteRegulationResponse, DeleteRegulationStatus } from './types';
+import type { AnalyticsDataRegulationControllerMethodActions } from './AnalyticsDataRegulationController-method-action-types.js';
+import type { AnalyticsDataRegulationServiceActions } from './AnalyticsDataRegulationService.js';
+import { projectLogger as log } from './logger.js';
+import {
+ DATA_DELETE_RESPONSE_STATUSES,
+ DATA_DELETE_STATUSES,
+} from './types.js';
+import type {
+ DeleteRegulationResponse,
+ DeleteRegulationStatus,
+} from './types.js';
// === GENERAL ===
diff --git a/packages/analytics-data-regulation-controller/src/AnalyticsDataRegulationService-method-action-types.ts b/packages/analytics-data-regulation-controller/src/AnalyticsDataRegulationService-method-action-types.ts
index 413629a9c79..7d650976473 100644
--- a/packages/analytics-data-regulation-controller/src/AnalyticsDataRegulationService-method-action-types.ts
+++ b/packages/analytics-data-regulation-controller/src/AnalyticsDataRegulationService-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { AnalyticsDataRegulationService } from './AnalyticsDataRegulationService';
+import type { AnalyticsDataRegulationService } from './AnalyticsDataRegulationService.js';
/**
* Creates a DELETE_ONLY regulation for the given analyticsId.
diff --git a/packages/analytics-data-regulation-controller/src/AnalyticsDataRegulationService.test.ts b/packages/analytics-data-regulation-controller/src/AnalyticsDataRegulationService.test.ts
index b528f086391..501932597be 100644
--- a/packages/analytics-data-regulation-controller/src/AnalyticsDataRegulationService.test.ts
+++ b/packages/analytics-data-regulation-controller/src/AnalyticsDataRegulationService.test.ts
@@ -1,3 +1,4 @@
+import { jest } from '@jest/globals';
import { Messenger, MOCK_ANY_NAMESPACE } from '@metamask/messenger';
import type {
MockAnyNamespace,
@@ -6,9 +7,12 @@ import type {
} from '@metamask/messenger';
import nock, { cleanAll, disableNetConnect, enableNetConnect } from 'nock';
-import type { AnalyticsDataRegulationServiceMessenger } from './AnalyticsDataRegulationService';
-import { AnalyticsDataRegulationService } from './AnalyticsDataRegulationService';
-import { DATA_DELETE_RESPONSE_STATUSES, DATA_DELETE_STATUSES } from './types';
+import type { AnalyticsDataRegulationServiceMessenger } from './AnalyticsDataRegulationService.js';
+import { AnalyticsDataRegulationService } from './AnalyticsDataRegulationService.js';
+import {
+ DATA_DELETE_RESPONSE_STATUSES,
+ DATA_DELETE_STATUSES,
+} from './types.js';
describe('AnalyticsDataRegulationService', () => {
const segmentSourceId = 'test-source-id';
diff --git a/packages/analytics-data-regulation-controller/src/AnalyticsDataRegulationService.ts b/packages/analytics-data-regulation-controller/src/AnalyticsDataRegulationService.ts
index 1a916888c16..8e7ae1ed8a6 100644
--- a/packages/analytics-data-regulation-controller/src/AnalyticsDataRegulationService.ts
+++ b/packages/analytics-data-regulation-controller/src/AnalyticsDataRegulationService.ts
@@ -6,9 +6,12 @@ import { createServicePolicy, HttpError } from '@metamask/controller-utils';
import type { Messenger } from '@metamask/messenger';
import type { IDisposable } from 'cockatiel';
-import type { AnalyticsDataRegulationServiceMethodActions } from './AnalyticsDataRegulationService-method-action-types';
-import { DATA_DELETE_RESPONSE_STATUSES, DATA_DELETE_STATUSES } from './types';
-import type { DataDeleteStatus } from './types';
+import type { AnalyticsDataRegulationServiceMethodActions } from './AnalyticsDataRegulationService-method-action-types.js';
+import {
+ DATA_DELETE_RESPONSE_STATUSES,
+ DATA_DELETE_STATUSES,
+} from './types.js';
+import type { DataDeleteStatus } from './types.js';
/**
* Segment API regulation type for DELETE_ONLY operations.
diff --git a/packages/analytics-data-regulation-controller/src/index.ts b/packages/analytics-data-regulation-controller/src/index.ts
index 31ea1eb281b..b0b59ec77f9 100644
--- a/packages/analytics-data-regulation-controller/src/index.ts
+++ b/packages/analytics-data-regulation-controller/src/index.ts
@@ -1,30 +1,33 @@
export {
AnalyticsDataRegulationController,
getDefaultAnalyticsDataRegulationControllerState,
-} from './AnalyticsDataRegulationController';
-export type { AnalyticsDataRegulationControllerOptions } from './AnalyticsDataRegulationController';
+} from './AnalyticsDataRegulationController.js';
+export type { AnalyticsDataRegulationControllerOptions } from './AnalyticsDataRegulationController.js';
-export { AnalyticsDataRegulationService } from './AnalyticsDataRegulationService';
+export { AnalyticsDataRegulationService } from './AnalyticsDataRegulationService.js';
export type {
AnalyticsDataRegulationServiceActions,
AnalyticsDataRegulationServiceEvents,
AnalyticsDataRegulationServiceMessenger,
AnalyticsDataRegulationServiceOptions,
-} from './AnalyticsDataRegulationService';
+} from './AnalyticsDataRegulationService.js';
export {
DATA_DELETE_STATUSES,
DATA_DELETE_RESPONSE_STATUSES,
type DataDeleteStatus,
type DataDeleteResponseStatus,
-} from './types';
-export type { DeleteRegulationResponse, DeleteRegulationStatus } from './types';
+} from './types.js';
+export type {
+ DeleteRegulationResponse,
+ DeleteRegulationStatus,
+} from './types.js';
-export type { AnalyticsDataRegulationControllerState } from './AnalyticsDataRegulationController';
+export type { AnalyticsDataRegulationControllerState } from './AnalyticsDataRegulationController.js';
-export { analyticsDataRegulationControllerSelectors } from './selectors';
+export { analyticsDataRegulationControllerSelectors } from './selectors.js';
-export type { AnalyticsDataRegulationControllerMessenger } from './AnalyticsDataRegulationController';
+export type { AnalyticsDataRegulationControllerMessenger } from './AnalyticsDataRegulationController.js';
export type {
AnalyticsDataRegulationControllerActions,
@@ -33,4 +36,4 @@ export type {
AnalyticsDataRegulationControllerStateChangeEvent,
DataDeletionTaskCreatedEvent,
DataRecordingFlagUpdatedEvent,
-} from './AnalyticsDataRegulationController';
+} from './AnalyticsDataRegulationController.js';
diff --git a/packages/analytics-data-regulation-controller/src/selectors.test.ts b/packages/analytics-data-regulation-controller/src/selectors.test.ts
index 644130b8513..b8d4af8ec7c 100644
--- a/packages/analytics-data-regulation-controller/src/selectors.test.ts
+++ b/packages/analytics-data-regulation-controller/src/selectors.test.ts
@@ -1,8 +1,8 @@
import {
analyticsDataRegulationControllerSelectors,
getDefaultAnalyticsDataRegulationControllerState,
-} from '.';
-import type { AnalyticsDataRegulationControllerState } from './AnalyticsDataRegulationController';
+} from './..js';
+import type { AnalyticsDataRegulationControllerState } from './AnalyticsDataRegulationController.js';
describe('analyticsDataRegulationControllerSelectors', () => {
describe('selectHasCollectedDataSinceDeletionRequest', () => {
diff --git a/packages/analytics-data-regulation-controller/src/selectors.ts b/packages/analytics-data-regulation-controller/src/selectors.ts
index 1b98c59dd2d..583e2374b5a 100644
--- a/packages/analytics-data-regulation-controller/src/selectors.ts
+++ b/packages/analytics-data-regulation-controller/src/selectors.ts
@@ -1,4 +1,4 @@
-import type { AnalyticsDataRegulationControllerState } from './AnalyticsDataRegulationController';
+import type { AnalyticsDataRegulationControllerState } from './AnalyticsDataRegulationController.js';
/**
* Selects the data recorded flag from the controller state.
diff --git a/packages/announcement-controller/jest.config.js b/packages/announcement-controller/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/announcement-controller/jest.config.js
+++ b/packages/announcement-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/announcement-controller/package.json b/packages/announcement-controller/package.json
index 624f180e164..2f85814fcb4 100644
--- a/packages/announcement-controller/package.json
+++ b/packages/announcement-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/announcement-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/announcement-controller",
@@ -60,7 +53,6 @@
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/announcement-controller/src/AnnouncementController-method-action-types.ts b/packages/announcement-controller/src/AnnouncementController-method-action-types.ts
index 41b20203922..06e7774f15e 100644
--- a/packages/announcement-controller/src/AnnouncementController-method-action-types.ts
+++ b/packages/announcement-controller/src/AnnouncementController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { AnnouncementController } from './AnnouncementController';
+import type { AnnouncementController } from './AnnouncementController.js';
/**
* Resets the isShown status for all announcements
diff --git a/packages/announcement-controller/src/AnnouncementController.test.ts b/packages/announcement-controller/src/AnnouncementController.test.ts
index 61411131799..0bcc2587e82 100644
--- a/packages/announcement-controller/src/AnnouncementController.test.ts
+++ b/packages/announcement-controller/src/AnnouncementController.test.ts
@@ -9,8 +9,8 @@ import type {
AnnouncementControllerEvents,
AnnouncementControllerMessenger,
AnnouncementMap,
-} from './AnnouncementController';
-import { AnnouncementController } from './AnnouncementController';
+} from './AnnouncementController.js';
+import { AnnouncementController } from './AnnouncementController.js';
const name = 'AnnouncementController';
diff --git a/packages/announcement-controller/src/AnnouncementController.ts b/packages/announcement-controller/src/AnnouncementController.ts
index ed194a9025c..99d7ec7564a 100644
--- a/packages/announcement-controller/src/AnnouncementController.ts
+++ b/packages/announcement-controller/src/AnnouncementController.ts
@@ -6,7 +6,7 @@ import type {
import { BaseController } from '@metamask/base-controller';
import type { Messenger } from '@metamask/messenger';
-import type { AnnouncementControllerMethodActions } from './AnnouncementController-method-action-types';
+import type { AnnouncementControllerMethodActions } from './AnnouncementController-method-action-types.js';
type ViewedAnnouncement = {
[id: number]: boolean;
diff --git a/packages/announcement-controller/src/index.ts b/packages/announcement-controller/src/index.ts
index aa6e47ce381..84583167654 100644
--- a/packages/announcement-controller/src/index.ts
+++ b/packages/announcement-controller/src/index.ts
@@ -1,7 +1,7 @@
export type {
AnnouncementControllerResetViewedAction,
AnnouncementControllerUpdateViewedAction,
-} from './AnnouncementController-method-action-types';
+} from './AnnouncementController-method-action-types.js';
export type {
AnnouncementMap,
StateAnnouncementMap,
@@ -11,5 +11,5 @@ export type {
AnnouncementControllerGetStateAction,
AnnouncementControllerStateChangeEvent,
AnnouncementControllerMessenger,
-} from './AnnouncementController';
-export { AnnouncementController } from './AnnouncementController';
+} from './AnnouncementController.js';
+export { AnnouncementController } from './AnnouncementController.js';
diff --git a/packages/app-metadata-controller/jest.config.js b/packages/app-metadata-controller/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/app-metadata-controller/jest.config.js
+++ b/packages/app-metadata-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/app-metadata-controller/package.json b/packages/app-metadata-controller/package.json
index 95e6f122334..3729fb01568 100644
--- a/packages/app-metadata-controller/package.json
+++ b/packages/app-metadata-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/app-metadata-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/app-metadata-controller",
@@ -58,7 +51,6 @@
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/app-metadata-controller/src/AppMetadataController.test.ts b/packages/app-metadata-controller/src/AppMetadataController.test.ts
index b05944df221..5a16e18627d 100644
--- a/packages/app-metadata-controller/src/AppMetadataController.test.ts
+++ b/packages/app-metadata-controller/src/AppMetadataController.test.ts
@@ -5,12 +5,12 @@ import type { MockAnyNamespace } from '@metamask/messenger';
import {
AppMetadataController,
getDefaultAppMetadataControllerState,
-} from './AppMetadataController';
+} from './AppMetadataController.js';
import type {
AppMetadataControllerOptions,
AppMetadataControllerActions,
AppMetadataControllerEvents,
-} from './AppMetadataController';
+} from './AppMetadataController.js';
describe('AppMetadataController', () => {
describe('constructor', () => {
diff --git a/packages/app-metadata-controller/src/index.ts b/packages/app-metadata-controller/src/index.ts
index 67ce2803824..c116376df36 100644
--- a/packages/app-metadata-controller/src/index.ts
+++ b/packages/app-metadata-controller/src/index.ts
@@ -5,8 +5,8 @@ export type {
AppMetadataControllerMessenger,
AppMetadataControllerState,
AppMetadataControllerStateChangeEvent,
-} from './AppMetadataController';
+} from './AppMetadataController.js';
export {
getDefaultAppMetadataControllerState,
AppMetadataController,
-} from './AppMetadataController';
+} from './AppMetadataController.js';
diff --git a/packages/approval-controller/jest.config.js b/packages/approval-controller/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/approval-controller/jest.config.js
+++ b/packages/approval-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/approval-controller/package.json b/packages/approval-controller/package.json
index ad90795c789..cabab4d3af1 100644
--- a/packages/approval-controller/package.json
+++ b/packages/approval-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/approval-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/approval-controller",
@@ -62,8 +55,8 @@
"nanoid": "^3.3.8"
},
"devDependencies": {
+ "@jest/globals": "^30.4.1",
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/approval-controller/src/ApprovalController-method-action-types.ts b/packages/approval-controller/src/ApprovalController-method-action-types.ts
index eff304674ba..b95a2587231 100644
--- a/packages/approval-controller/src/ApprovalController-method-action-types.ts
+++ b/packages/approval-controller/src/ApprovalController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { ApprovalController } from './ApprovalController';
+import type { ApprovalController } from './ApprovalController.js';
/**
* Adds an approval request per the given arguments, optionally showing
diff --git a/packages/approval-controller/src/ApprovalController.test.ts b/packages/approval-controller/src/ApprovalController.test.ts
index 1853f6e7172..87fab488065 100644
--- a/packages/approval-controller/src/ApprovalController.test.ts
+++ b/packages/approval-controller/src/ApprovalController.test.ts
@@ -1,5 +1,6 @@
/* eslint-disable jest/expect-expect */
+import { jest } from '@jest/globals';
import { deriveStateFromMetadata } from '@metamask/base-controller';
import { MOCK_ANY_NAMESPACE, Messenger } from '@metamask/messenger';
import type {
@@ -10,7 +11,7 @@ import type {
import { errorCodes, JsonRpcError } from '@metamask/rpc-errors';
import { nanoid } from 'nanoid';
-import { flushPromises } from '../../../tests/helpers';
+import { flushPromises } from '../../../tests/helpers.js';
import type {
AddApprovalOptions,
ApprovalControllerActions,
@@ -19,19 +20,19 @@ import type {
ErrorOptions,
StartFlowOptions,
SuccessOptions,
-} from './ApprovalController';
+} from './ApprovalController.js';
import {
APPROVAL_TYPE_RESULT_ERROR,
APPROVAL_TYPE_RESULT_SUCCESS,
ApprovalController,
ORIGIN_METAMASK,
-} from './ApprovalController';
+} from './ApprovalController.js';
import {
ApprovalRequestNoResultSupportError,
EndInvalidFlowError,
MissingApprovalFlowError,
NoApprovalFlowsError,
-} from './errors';
+} from './errors.js';
jest.mock('nanoid');
@@ -761,7 +762,7 @@ describe('approval controller', () => {
});
it('returns true for existing entry by origin', () => {
- // TODO: Either fix this lint violation or explain why it's necessary to ignore.
+ // We only want to check the stored entity exists in the state hence disabling floating promises here.
// eslint-disable-next-line @typescript-eslint/no-floating-promises
approvalController.add({ id: 'foo', origin: 'bar.baz', type: TYPE });
@@ -769,7 +770,6 @@ describe('approval controller', () => {
});
it('returns true for existing entry by origin and type', () => {
- // TODO: Either fix this lint violation or explain why it's necessary to ignore.
// eslint-disable-next-line @typescript-eslint/no-floating-promises
approvalController.add({ id: 'foo', origin: 'bar.baz', type: 'myType' });
@@ -779,7 +779,6 @@ describe('approval controller', () => {
});
it('returns true for existing type', () => {
- // TODO: Either fix this lint violation or explain why it's necessary to ignore.
// eslint-disable-next-line @typescript-eslint/no-floating-promises
approvalController.add({ id: 'foo', origin: 'bar.baz', type: 'myType' });
@@ -787,7 +786,6 @@ describe('approval controller', () => {
});
it('returns false for non-existing entry by id', () => {
- // TODO: Either fix this lint violation or explain why it's necessary to ignore.
// eslint-disable-next-line @typescript-eslint/no-floating-promises
approvalController.add({ id: 'foo', origin: 'bar.baz', type: TYPE });
@@ -795,7 +793,6 @@ describe('approval controller', () => {
});
it('returns false for non-existing entry by origin', () => {
- // TODO: Either fix this lint violation or explain why it's necessary to ignore.
// eslint-disable-next-line @typescript-eslint/no-floating-promises
approvalController.add({ id: 'foo', origin: 'bar.baz', type: TYPE });
@@ -805,7 +802,6 @@ describe('approval controller', () => {
});
it('returns false for non-existing entry by existing origin and non-existing type', () => {
- // TODO: Either fix this lint violation or explain why it's necessary to ignore.
// eslint-disable-next-line @typescript-eslint/no-floating-promises
approvalController.add({ id: 'foo', origin: 'bar.baz', type: TYPE });
@@ -815,7 +811,6 @@ describe('approval controller', () => {
});
it('returns false for non-existing entry by non-existing origin and existing type', () => {
- // TODO: Either fix this lint violation or explain why it's necessary to ignore.
// eslint-disable-next-line @typescript-eslint/no-floating-promises
approvalController.add({ id: 'foo', origin: 'bar.baz', type: 'myType' });
@@ -825,7 +820,6 @@ describe('approval controller', () => {
});
it('returns false for non-existing entry by type', () => {
- // TODO: Either fix this lint violation or explain why it's necessary to ignore.
// eslint-disable-next-line @typescript-eslint/no-floating-promises
approvalController.add({ id: 'foo', origin: 'bar.baz', type: 'myType1' });
@@ -840,7 +834,6 @@ describe('approval controller', () => {
origin: 'bar.baz',
type: 'myType',
});
- // TODO: Either fix this lint violation or explain why it's necessary to ignore.
// eslint-disable-next-line @typescript-eslint/no-floating-promises
approvalController.acceptRequest('foo', 'success');
@@ -860,14 +853,12 @@ describe('approval controller', () => {
type: 'myType2',
});
- // TODO: Either fix this lint violation or explain why it's necessary to ignore.
// eslint-disable-next-line @typescript-eslint/no-floating-promises
approvalController.acceptRequest('foo2', 'success2');
let result = await approvalPromise2;
expect(result).toBe('success2');
- // TODO: Either fix this lint violation or explain why it's necessary to ignore.
// eslint-disable-next-line @typescript-eslint/no-floating-promises
approvalController.acceptRequest('foo1', 'success1');
@@ -939,7 +930,6 @@ describe('approval controller', () => {
expectsResult: true,
});
- // TODO: Either fix this lint violation or explain why it's necessary to ignore.
// eslint-disable-next-line @typescript-eslint/no-floating-promises
approvalController.acceptRequest(ID_MOCK, VALUE_MOCK);
@@ -950,7 +940,6 @@ describe('approval controller', () => {
});
it('throws if accept wants to wait but request does not expect result', async () => {
- // TODO: Either fix this lint violation or explain why it's necessary to ignore.
// eslint-disable-next-line @typescript-eslint/no-floating-promises
approvalController.add({
id: ID_MOCK,
@@ -966,11 +955,9 @@ describe('approval controller', () => {
});
it('deletes entry', () => {
- // TODO: Either fix this lint violation or explain why it's necessary to ignore.
// eslint-disable-next-line @typescript-eslint/no-floating-promises
approvalController.add({ id: 'foo', origin: 'bar.baz', type: 'type' });
- // TODO: Either fix this lint violation or explain why it's necessary to ignore.
// eslint-disable-next-line @typescript-eslint/no-floating-promises
approvalController.acceptRequest('foo');
@@ -983,14 +970,11 @@ describe('approval controller', () => {
});
it('deletes one entry out of many without side-effects', () => {
- // TODO: Either fix this lint violation or explain why it's necessary to ignore.
// eslint-disable-next-line @typescript-eslint/no-floating-promises
approvalController.add({ id: 'foo', origin: 'bar.baz', type: 'type1' });
- // TODO: Either fix this lint violation or explain why it's necessary to ignore.
// eslint-disable-next-line @typescript-eslint/no-floating-promises
approvalController.add({ id: 'fizz', origin: 'bar.baz', type: 'type2' });
- // TODO: Either fix this lint violation or explain why it's necessary to ignore.
// eslint-disable-next-line @typescript-eslint/no-floating-promises
approvalController.acceptRequest('fizz');
@@ -1200,7 +1184,6 @@ describe('approval controller', () => {
type: 'myType4',
});
- // TODO: Either fix this lint violation or explain why it's necessary to ignore.
// eslint-disable-next-line @typescript-eslint/no-floating-promises
approvalController.acceptRequest('foo2', 'success2');
@@ -1218,7 +1201,6 @@ describe('approval controller', () => {
);
expect(approvalController.hasRequest({ origin: 'bar.baz' })).toBe(true);
- // TODO: Either fix this lint violation or explain why it's necessary to ignore.
// eslint-disable-next-line @typescript-eslint/no-floating-promises
approvalController.acceptRequest('foo1', 'success1');
@@ -1319,8 +1301,6 @@ describe('approval controller', () => {
showApprovalRequest,
});
- // TODO: Either fix this lint violation or explain why it's necessary to ignore.
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
rootMessenger.call(
'ApprovalController:addRequest',
{ id: 'foo', origin: 'bar.baz', type: TYPE },
@@ -1338,8 +1318,6 @@ describe('approval controller', () => {
showApprovalRequest,
});
- // TODO: Either fix this lint violation or explain why it's necessary to ignore.
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
rootMessenger.call(
'ApprovalController:addRequest',
{ id: 'foo', origin: 'bar.baz', type: TYPE },
@@ -1357,7 +1335,6 @@ describe('approval controller', () => {
showApprovalRequest,
});
- // TODO: Either fix this lint violation or explain why it's necessary to ignore.
// eslint-disable-next-line @typescript-eslint/no-floating-promises
approvalController.add({
id: 'foo',
@@ -1537,7 +1514,6 @@ describe('approval controller', () => {
approvalController.state[PENDING_APPROVALS_STORE_KEY],
)[0].id;
- // TODO: Either fix this lint violation or explain why it's necessary to ignore.
// eslint-disable-next-line @typescript-eslint/no-floating-promises
approvalController.acceptRequest(resultRequestId);
await promise;
@@ -1587,7 +1563,6 @@ describe('approval controller', () => {
approvalController.state[PENDING_APPROVALS_STORE_KEY],
)[0].id;
- // TODO: Either fix this lint violation or explain why it's necessary to ignore.
// eslint-disable-next-line @typescript-eslint/no-floating-promises
approvalController.acceptRequest(resultRequestId);
await promise;
@@ -1602,6 +1577,7 @@ describe('approval controller', () => {
describe('success', () => {
it('adds request with result success approval type', async () => {
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
approvalController.showSuccess(SUCCESS_OPTIONS_MOCK);
expectRequestAdded(APPROVAL_TYPE_RESULT_SUCCESS, SUCCESS_OPTIONS_MOCK);
@@ -1609,6 +1585,7 @@ describe('approval controller', () => {
it('adds request with no options', async () => {
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
approvalController.showSuccess();
@@ -1622,6 +1599,7 @@ describe('approval controller', () => {
it('only includes relevant options in request data', async () => {
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
approvalController.showSuccess({
...SUCCESS_OPTIONS_MOCK,
@@ -1637,6 +1615,7 @@ describe('approval controller', () => {
it('shows approval request', async () => {
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
approvalController.showSuccess(SUCCESS_OPTIONS_MOCK);
expect(showApprovalRequest).toHaveBeenCalledTimes(1);
@@ -1672,6 +1651,7 @@ describe('approval controller', () => {
describe('error', () => {
it('adds request with result error approval type', async () => {
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
approvalController.showError(ERROR_OPTIONS_MOCK);
expectRequestAdded(APPROVAL_TYPE_RESULT_ERROR, ERROR_OPTIONS_MOCK);
@@ -1679,6 +1659,7 @@ describe('approval controller', () => {
it('adds request with no options', async () => {
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
approvalController.showError();
@@ -1692,6 +1673,7 @@ describe('approval controller', () => {
it('only includes relevant options in request data', async () => {
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
approvalController.showError({
...ERROR_OPTIONS_MOCK,
@@ -1707,6 +1689,7 @@ describe('approval controller', () => {
it('shows approval request', async () => {
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
approvalController.showError(ERROR_OPTIONS_MOCK);
expect(showApprovalRequest).toHaveBeenCalledTimes(1);
diff --git a/packages/approval-controller/src/ApprovalController.ts b/packages/approval-controller/src/ApprovalController.ts
index 0457c0aec89..73cf15154be 100644
--- a/packages/approval-controller/src/ApprovalController.ts
+++ b/packages/approval-controller/src/ApprovalController.ts
@@ -10,14 +10,14 @@ import { rpcErrors } from '@metamask/rpc-errors';
import type { Json, OptionalField } from '@metamask/utils';
import { nanoid } from 'nanoid';
-import type { ApprovalControllerMethodActions } from './ApprovalController-method-action-types';
+import type { ApprovalControllerMethodActions } from './ApprovalController-method-action-types.js';
import {
ApprovalRequestNotFoundError,
ApprovalRequestNoResultSupportError,
EndInvalidFlowError,
NoApprovalFlowsError,
MissingApprovalFlowError,
-} from './errors';
+} from './errors.js';
// Constants
diff --git a/packages/approval-controller/src/index.ts b/packages/approval-controller/src/index.ts
index 5a8f6173ff2..740667561c8 100644
--- a/packages/approval-controller/src/index.ts
+++ b/packages/approval-controller/src/index.ts
@@ -1,4 +1,4 @@
-export * from './ApprovalController';
+export * from './ApprovalController.js';
export type {
ApprovalControllerAddRequestAction,
ApprovalControllerAddAndShowApprovalRequestAction,
@@ -16,5 +16,5 @@ export type {
ApprovalControllerSetFlowLoadingTextAction,
ApprovalControllerShowSuccessAction,
ApprovalControllerShowErrorAction,
-} from './ApprovalController-method-action-types';
-export * from './errors';
+} from './ApprovalController-method-action-types.js';
+export * from './errors.js';
diff --git a/packages/assets-controller/jest.config.js b/packages/assets-controller/jest.config.js
index 2f47d1dcaa3..cac4c4e687a 100644
--- a/packages/assets-controller/jest.config.js
+++ b/packages/assets-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/assets-controller/package.json b/packages/assets-controller/package.json
index 5bedcd3d328..4d5a52c46f2 100644
--- a/packages/assets-controller/package.json
+++ b/packages/assets-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/assets-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/assets-controller",
@@ -83,12 +76,11 @@
"@metamask/utils": "^11.11.0",
"async-mutex": "^0.5.0",
"bignumber.js": "^9.1.2",
- "lodash": "^4.17.21",
+ "lodash-es": "^4.17.21",
"p-limit": "^3.1.0"
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"@types/lodash": "^4.14.191",
"deepmerge": "^4.2.2",
diff --git a/packages/assets-controller/src/AssetsController-method-action-types.ts b/packages/assets-controller/src/AssetsController-method-action-types.ts
index f886b37b4d4..53d4c5a1074 100644
--- a/packages/assets-controller/src/AssetsController-method-action-types.ts
+++ b/packages/assets-controller/src/AssetsController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { AssetsController } from './AssetsController';
+import type { AssetsController } from './AssetsController.js';
export type AssetsControllerGetAssetsAction = {
type: `AssetsController:getAssets`;
diff --git a/packages/assets-controller/src/AssetsController.test.ts b/packages/assets-controller/src/AssetsController.test.ts
index 6916fd97a9b..24a7d1564ed 100644
--- a/packages/assets-controller/src/AssetsController.test.ts
+++ b/packages/assets-controller/src/AssetsController.test.ts
@@ -13,25 +13,25 @@ import type { NetworkState } from '@metamask/network-controller';
import {
AssetsController,
getDefaultAssetsControllerState,
-} from './AssetsController';
+} from './AssetsController.js';
import type {
AssetsControllerMessenger,
AssetsControllerState,
-} from './AssetsController';
-import type { AccountsApiDataSourceConfig } from './data-sources/AccountsApiDataSource';
-import type { PriceDataSourceConfig } from './data-sources/PriceDataSource';
-import { PriceDataSource } from './data-sources/PriceDataSource';
-import { TokenDataSource } from './data-sources/TokenDataSource';
-import { buildDefaultAssetsInfo } from './defaults';
-import type { Assets3346MigrationState } from './migrations/healAssetsInfoMetadata';
+} from './AssetsController.js';
+import type { AccountsApiDataSourceConfig } from './data-sources/AccountsApiDataSource.js';
+import type { PriceDataSourceConfig } from './data-sources/PriceDataSource.js';
+import { PriceDataSource } from './data-sources/PriceDataSource.js';
+import { TokenDataSource } from './data-sources/TokenDataSource.js';
+import { buildDefaultAssetsInfo } from './defaults.js';
+import type { Assets3346MigrationState } from './migrations/healAssetsInfoMetadata.js';
import type {
Caip19AssetId,
AccountId,
DataRequest,
DataResponse,
FungibleAssetMetadata,
-} from './types';
-import { formatExchangeRatesForBridge, normalizeAssetId } from './utils';
+} from './types.js';
+import { formatExchangeRatesForBridge, normalizeAssetId } from './utils.js';
jest.mock('./utils', () => {
const actual = jest.requireActual('./utils');
diff --git a/packages/assets-controller/src/AssetsController.ts b/packages/assets-controller/src/AssetsController.ts
index 0ed051dcce9..bf314aa0a9e 100644
--- a/packages/assets-controller/src/AssetsController.ts
+++ b/packages/assets-controller/src/AssetsController.ts
@@ -68,47 +68,47 @@ import {
} from '@metamask/utils';
import { Mutex } from 'async-mutex';
import BigNumberJS from 'bignumber.js';
-import { isEqual } from 'lodash';
+import { isEqual } from 'lodash-es';
-import type { AssetsControllerMethodActions } from './AssetsController-method-action-types';
+import type { AssetsControllerMethodActions } from './AssetsController-method-action-types.js';
import type {
AbstractDataSource,
DataSourceState,
SubscriptionRequest,
-} from './data-sources/AbstractDataSource';
-import type { AccountsApiDataSourceConfig } from './data-sources/AccountsApiDataSource';
-import { AccountsApiDataSource } from './data-sources/AccountsApiDataSource';
-import { BackendWebsocketDataSource } from './data-sources/BackendWebsocketDataSource';
-import { shouldSkipNativeForCaipChainId } from './data-sources/evm-rpc-services/utils/assets';
-import type { PriceDataSourceConfig } from './data-sources/PriceDataSource';
-import { PriceDataSource } from './data-sources/PriceDataSource';
-import type { RpcDataSourceConfig } from './data-sources/RpcDataSource';
-import { RpcDataSource } from './data-sources/RpcDataSource';
-import type { AccountsControllerAccountBalancesUpdatedEvent } from './data-sources/SnapDataSource';
-import { SnapDataSource } from './data-sources/SnapDataSource';
-import type { StakedBalanceDataSourceConfig } from './data-sources/StakedBalanceDataSource';
-import { StakedBalanceDataSource } from './data-sources/StakedBalanceDataSource';
+} from './data-sources/AbstractDataSource.js';
+import type { AccountsApiDataSourceConfig } from './data-sources/AccountsApiDataSource.js';
+import { AccountsApiDataSource } from './data-sources/AccountsApiDataSource.js';
+import { BackendWebsocketDataSource } from './data-sources/BackendWebsocketDataSource.js';
+import { shouldSkipNativeForCaipChainId } from './data-sources/evm-rpc-services/utils/assets.js';
+import type { PriceDataSourceConfig } from './data-sources/PriceDataSource.js';
+import { PriceDataSource } from './data-sources/PriceDataSource.js';
+import type { RpcDataSourceConfig } from './data-sources/RpcDataSource.js';
+import { RpcDataSource } from './data-sources/RpcDataSource.js';
+import type { AccountsControllerAccountBalancesUpdatedEvent } from './data-sources/SnapDataSource.js';
+import { SnapDataSource } from './data-sources/SnapDataSource.js';
+import type { StakedBalanceDataSourceConfig } from './data-sources/StakedBalanceDataSource.js';
+import { StakedBalanceDataSource } from './data-sources/StakedBalanceDataSource.js';
import {
CaipAssetNamespace,
TokenDataSource,
-} from './data-sources/TokenDataSource';
+} from './data-sources/TokenDataSource.js';
import {
CHAINS_WITH_DEFAULT_TRACKED_ASSETS,
DEFAULT_TRACKED_ASSETS_BY_CHAIN,
buildDefaultAssetsInfo,
getDefaultAssetMetadata,
-} from './defaults';
-import { AssetsDataSourceError } from './errors';
-import { projectLogger, createModuleLogger } from './logger';
-import { CustomAssetGraduationMiddleware } from './middlewares/CustomAssetGraduationMiddleware';
-import { DetectionMiddleware } from './middlewares/DetectionMiddleware';
+} from './defaults.js';
+import { AssetsDataSourceError } from './errors.js';
+import { projectLogger, createModuleLogger } from './logger.js';
+import { CustomAssetGraduationMiddleware } from './middlewares/CustomAssetGraduationMiddleware.js';
+import { DetectionMiddleware } from './middlewares/DetectionMiddleware.js';
import {
createParallelBalanceMiddleware,
createParallelMiddleware,
-} from './middlewares/ParallelMiddleware';
-import { RpcFallbackMiddleware } from './middlewares/RpcFallbackMiddleware';
-import type { Assets3346MigrationState } from './migrations/healAssetsInfoMetadata';
-import { tempHealAssetsInfoMetadata } from './migrations/healAssetsInfoMetadata';
+} from './middlewares/ParallelMiddleware.js';
+import { RpcFallbackMiddleware } from './middlewares/RpcFallbackMiddleware.js';
+import type { Assets3346MigrationState } from './migrations/healAssetsInfoMetadata.js';
+import { tempHealAssetsInfoMetadata } from './migrations/healAssetsInfoMetadata.js';
import type {
AccountId,
AssetPreferences,
@@ -132,7 +132,7 @@ import type {
Middleware,
SubscriptionResponse,
Asset,
-} from './types';
+} from './types.js';
import {
normalizeAmountString,
normalizeAssetId,
@@ -140,14 +140,14 @@ import {
formatStateForTransactionPay,
buildNativeAssetsFromConstant,
buildNativeAssetsFromApi,
-} from './utils';
+} from './utils.js';
import type {
BridgeExchangeRatesFormat,
TransactionPayLegacyFormat,
-} from './utils';
-import { ZERO_ADDRESS } from './utils/constants';
-import { pickRpcCustomAssetsSupplement } from './utils/customAssetsRpcSupplement';
-import { processAccountActivityBalanceUpdates } from './utils/processAccountActivityBalanceUpdates';
+} from './utils.js';
+import { ZERO_ADDRESS } from './utils/constants.js';
+import { pickRpcCustomAssetsSupplement } from './utils/customAssetsRpcSupplement.js';
+import { processAccountActivityBalanceUpdates } from './utils/processAccountActivityBalanceUpdates.js';
const NATIVE_ASSETS_QUERY_KEY = ['nativeAssets'];
@@ -2051,9 +2051,7 @@ export class AssetsController extends BaseController<
log('Hiding asset', { assetId: normalizedAssetId });
this.update((state) => {
- if (!state.assetPreferences[normalizedAssetId]) {
- state.assetPreferences[normalizedAssetId] = {};
- }
+ state.assetPreferences[normalizedAssetId] ??= {};
state.assetPreferences[normalizedAssetId].hidden = true;
});
}
@@ -2845,7 +2843,7 @@ export class AssetsController extends BaseController<
// Compute fiat value using BigNumber for precision
// Note: balance.amount is already in human-readable format (e.g., "1" for 1 ETH)
// so we do NOT divide by 10^decimals here
- const balanceAmount = new BigNumberJS(balance.amount || '0');
+ const balanceAmount = new BigNumberJS(balance.amount ?? '0');
const fiatValue = balanceAmount.multipliedBy(price.price || 0).toNumber();
return {
diff --git a/packages/assets-controller/src/__fixtures__/MockAssetControllerMessenger.ts b/packages/assets-controller/src/__fixtures__/MockAssetControllerMessenger.ts
index 2652534783a..4866eb25d5f 100644
--- a/packages/assets-controller/src/__fixtures__/MockAssetControllerMessenger.ts
+++ b/packages/assets-controller/src/__fixtures__/MockAssetControllerMessenger.ts
@@ -17,8 +17,8 @@ import {
import {
AssetsControllerMessenger,
getDefaultAssetsControllerState,
-} from '../AssetsController';
-import { STAKING_INTERFACE } from '../data-sources/evm-rpc-services/services/StakedBalanceFetcher';
+} from '../AssetsController.js';
+import { STAKING_INTERFACE } from '../data-sources/evm-rpc-services/services/StakedBalanceFetcher.js';
// Test escape hatch for mocking areas that do not need explicit types
// eslint-disable-next-line @typescript-eslint/no-explicit-any
diff --git a/packages/assets-controller/src/data-sources/AbstractDataSource.test.ts b/packages/assets-controller/src/data-sources/AbstractDataSource.test.ts
index a1d5ca677f3..98c5262e8e6 100644
--- a/packages/assets-controller/src/data-sources/AbstractDataSource.test.ts
+++ b/packages/assets-controller/src/data-sources/AbstractDataSource.test.ts
@@ -1,10 +1,10 @@
-import type { ChainId } from '../types';
+import type { ChainId } from '../types.js';
import type {
ActiveSubscription,
DataSourceState,
SubscriptionRequest,
-} from './AbstractDataSource';
-import { AbstractDataSource } from './AbstractDataSource';
+} from './AbstractDataSource.js';
+import { AbstractDataSource } from './AbstractDataSource.js';
const CHAIN_MAINNET = 'eip155:1' as ChainId;
const CHAIN_POLYGON = 'eip155:137' as ChainId;
diff --git a/packages/assets-controller/src/data-sources/AbstractDataSource.ts b/packages/assets-controller/src/data-sources/AbstractDataSource.ts
index a1d29de5ce7..a669700e101 100644
--- a/packages/assets-controller/src/data-sources/AbstractDataSource.ts
+++ b/packages/assets-controller/src/data-sources/AbstractDataSource.ts
@@ -3,7 +3,7 @@ import type {
DataRequest,
DataResponse,
AssetsControllerStateInternal,
-} from '../types';
+} from '../types.js';
// ============================================================================
// DATA SOURCE BASE TYPES
diff --git a/packages/assets-controller/src/data-sources/AccountsApiDataSource.test.ts b/packages/assets-controller/src/data-sources/AccountsApiDataSource.test.ts
index f01829bf159..fc833a402db 100644
--- a/packages/assets-controller/src/data-sources/AccountsApiDataSource.test.ts
+++ b/packages/assets-controller/src/data-sources/AccountsApiDataSource.test.ts
@@ -14,15 +14,15 @@ import type {
DataRequest,
Context,
AssetsControllerStateInternal,
-} from '../types';
+} from '../types.js';
import type {
AccountsApiDataSourceOptions,
AccountsApiDataSourceAllowedActions,
-} from './AccountsApiDataSource';
+} from './AccountsApiDataSource.js';
import {
AccountsApiDataSource,
filterResponseToKnownAssets,
-} from './AccountsApiDataSource';
+} from './AccountsApiDataSource.js';
type AllActions = AccountsApiDataSourceAllowedActions;
type AllEvents = never;
diff --git a/packages/assets-controller/src/data-sources/AccountsApiDataSource.ts b/packages/assets-controller/src/data-sources/AccountsApiDataSource.ts
index 6ac6167b0e4..d15827d51e2 100644
--- a/packages/assets-controller/src/data-sources/AccountsApiDataSource.ts
+++ b/packages/assets-controller/src/data-sources/AccountsApiDataSource.ts
@@ -10,8 +10,8 @@ import {
toCaipChainId,
} from '@metamask/utils';
-import type { AssetsControllerMessenger } from '../AssetsController';
-import { projectLogger, createModuleLogger } from '../logger';
+import type { AssetsControllerMessenger } from '../AssetsController.js';
+import { projectLogger, createModuleLogger } from '../logger.js';
import type {
ChainId,
Caip19AssetId,
@@ -20,13 +20,13 @@ import type {
DataResponse,
Middleware,
AssetsControllerStateInternal,
-} from '../types';
-import { fetchWithTimeout, normalizeAssetId } from '../utils';
+} from '../types.js';
+import { fetchWithTimeout, normalizeAssetId } from '../utils.js';
import type {
DataSourceState,
SubscriptionRequest,
-} from './AbstractDataSource';
-import { AbstractDataSource } from './AbstractDataSource';
+} from './AbstractDataSource.js';
+import { AbstractDataSource } from './AbstractDataSource.js';
// ============================================================================
// CONSTANTS
diff --git a/packages/assets-controller/src/data-sources/BackendWebsocketDataSource.test.ts b/packages/assets-controller/src/data-sources/BackendWebsocketDataSource.test.ts
index b2d5af59586..5f6887deba5 100644
--- a/packages/assets-controller/src/data-sources/BackendWebsocketDataSource.test.ts
+++ b/packages/assets-controller/src/data-sources/BackendWebsocketDataSource.test.ts
@@ -9,16 +9,16 @@ import type { InternalAccount } from '@metamask/keyring-internal-api';
import { Messenger, MOCK_ANY_NAMESPACE } from '@metamask/messenger';
import type { MockAnyNamespace } from '@metamask/messenger';
-import type { AssetsControllerMessenger } from '../AssetsController';
-import type { Caip19AssetId, ChainId, DataRequest } from '../types';
+import type { AssetsControllerMessenger } from '../AssetsController.js';
+import type { Caip19AssetId, ChainId, DataRequest } from '../types.js';
import {
BackendWebsocketDataSource,
createBackendWebsocketDataSource,
-} from './BackendWebsocketDataSource';
+} from './BackendWebsocketDataSource.js';
import type {
BackendWebsocketDataSourceAllowedActions,
BackendWebsocketDataSourceAllowedEvents,
-} from './BackendWebsocketDataSource';
+} from './BackendWebsocketDataSource.js';
type AllActions = BackendWebsocketDataSourceAllowedActions;
type AllEvents = BackendWebsocketDataSourceAllowedEvents;
diff --git a/packages/assets-controller/src/data-sources/BackendWebsocketDataSource.ts b/packages/assets-controller/src/data-sources/BackendWebsocketDataSource.ts
index b0349b297be..e15290bedb2 100644
--- a/packages/assets-controller/src/data-sources/BackendWebsocketDataSource.ts
+++ b/packages/assets-controller/src/data-sources/BackendWebsocketDataSource.ts
@@ -14,15 +14,15 @@ import {
toCaipChainId,
} from '@metamask/utils';
-import type { AssetsControllerMessenger } from '../AssetsController';
-import { projectLogger, createModuleLogger } from '../logger';
-import type { ChainId, Caip19AssetId, DataResponse } from '../types';
-import { processAccountActivityBalanceUpdates } from '../utils/processAccountActivityBalanceUpdates';
-import { AbstractDataSource } from './AbstractDataSource';
+import type { AssetsControllerMessenger } from '../AssetsController.js';
+import { projectLogger, createModuleLogger } from '../logger.js';
+import type { ChainId, Caip19AssetId, DataResponse } from '../types.js';
+import { processAccountActivityBalanceUpdates } from '../utils/processAccountActivityBalanceUpdates.js';
+import { AbstractDataSource } from './AbstractDataSource.js';
import type {
DataSourceState,
SubscriptionRequest,
-} from './AbstractDataSource';
+} from './AbstractDataSource.js';
// ============================================================================
// CONSTANTS
diff --git a/packages/assets-controller/src/data-sources/PriceDataSource.test.ts b/packages/assets-controller/src/data-sources/PriceDataSource.test.ts
index d0842543e31..69612678810 100644
--- a/packages/assets-controller/src/data-sources/PriceDataSource.test.ts
+++ b/packages/assets-controller/src/data-sources/PriceDataSource.test.ts
@@ -7,10 +7,10 @@ import type {
Context,
Caip19AssetId,
AssetsControllerStateInternal,
-} from '../types';
-import { normalizeAssetId } from '../utils';
-import type { PriceDataSourceOptions } from './PriceDataSource';
-import { PriceDataSource } from './PriceDataSource';
+} from '../types.js';
+import { normalizeAssetId } from '../utils.js';
+import type { PriceDataSourceOptions } from './PriceDataSource.js';
+import { PriceDataSource } from './PriceDataSource.js';
jest.useFakeTimers();
diff --git a/packages/assets-controller/src/data-sources/PriceDataSource.ts b/packages/assets-controller/src/data-sources/PriceDataSource.ts
index 4b0a45c3bd0..6a015d295a8 100644
--- a/packages/assets-controller/src/data-sources/PriceDataSource.ts
+++ b/packages/assets-controller/src/data-sources/PriceDataSource.ts
@@ -5,8 +5,8 @@ import type {
import { ApiPlatformClient } from '@metamask/core-backend';
import { parseCaipAssetType } from '@metamask/utils';
-import { projectLogger, createModuleLogger } from '../logger';
-import { forDataTypes } from '../types';
+import { projectLogger, createModuleLogger } from '../logger.js';
+import { forDataTypes } from '../types.js';
import type {
Caip19AssetId,
DataRequest,
@@ -14,11 +14,11 @@ import type {
FungibleAssetPrice,
Middleware,
AssetsControllerStateInternal,
-} from '../types';
-import { fetchWithTimeout, normalizeAssetId } from '../utils';
-import { DedupingBatchFetcher } from '../utils/dedupingBatchFetcher';
-import type { SubscriptionRequest } from './AbstractDataSource';
-import { reduceInBatchesSerially } from './evm-rpc-services';
+} from '../types.js';
+import { fetchWithTimeout, normalizeAssetId } from '../utils.js';
+import { DedupingBatchFetcher } from '../utils/dedupingBatchFetcher.js';
+import type { SubscriptionRequest } from './AbstractDataSource.js';
+import { reduceInBatchesSerially } from './evm-rpc-services.js';
// ============================================================================
// CONSTANTS
diff --git a/packages/assets-controller/src/data-sources/RpcDataSource.test.ts b/packages/assets-controller/src/data-sources/RpcDataSource.test.ts
index c2ff9044d13..4ed2c8b5079 100644
--- a/packages/assets-controller/src/data-sources/RpcDataSource.test.ts
+++ b/packages/assets-controller/src/data-sources/RpcDataSource.test.ts
@@ -8,24 +8,24 @@ import {
createMockAssetControllerMessenger,
MockRootMessenger,
registerRpcDataSourceActions,
-} from '../__fixtures__/MockAssetControllerMessenger';
-import { getDefaultAssetsControllerState } from '../AssetsController';
-import type { AssetsControllerMessenger } from '../AssetsController';
-import type { Caip19AssetId, ChainId, DataRequest, Context } from '../types';
-import { normalizeAssetId } from '../utils';
-import { BalanceFetcher, TokenDetector } from './evm-rpc-services';
+} from '../__fixtures__/MockAssetControllerMessenger.js';
+import { getDefaultAssetsControllerState } from '../AssetsController.js';
+import type { AssetsControllerMessenger } from '../AssetsController.js';
+import type { Caip19AssetId, ChainId, DataRequest, Context } from '../types.js';
+import { normalizeAssetId } from '../utils.js';
+import { BalanceFetcher, TokenDetector } from './evm-rpc-services.js';
import type {
Address,
BalanceFetchResult,
TokenDetectionResult,
-} from './evm-rpc-services';
-import { shouldSkipNativeForCaipChainId } from './evm-rpc-services/utils/assets';
-import type { RpcDataSourceOptions } from './RpcDataSource';
+} from './evm-rpc-services.js';
+import { shouldSkipNativeForCaipChainId } from './evm-rpc-services/utils/assets.js';
+import type { RpcDataSourceOptions } from './RpcDataSource.js';
import {
RpcDataSource,
caipChainIdToHex,
createRpcDataSource,
-} from './RpcDataSource';
+} from './RpcDataSource.js';
const MOCK_CHAIN_ID_HEX = '0x1';
const MOCK_CHAIN_ID_CAIP = 'eip155:1' as ChainId;
diff --git a/packages/assets-controller/src/data-sources/RpcDataSource.ts b/packages/assets-controller/src/data-sources/RpcDataSource.ts
index d28af6e3fda..153dd1a7878 100644
--- a/packages/assets-controller/src/data-sources/RpcDataSource.ts
+++ b/packages/assets-controller/src/data-sources/RpcDataSource.ts
@@ -24,8 +24,8 @@ import BigNumberJS from 'bignumber.js';
import type {
AssetsControllerGetStateAction,
AssetsControllerMessenger,
-} from '../AssetsController';
-import { projectLogger, createModuleLogger } from '../logger';
+} from '../AssetsController.js';
+import { projectLogger, createModuleLogger } from '../logger.js';
import type {
ChainId,
Caip19AssetId,
@@ -34,33 +34,33 @@ import type {
DataRequest,
DataResponse,
Middleware,
-} from '../types';
-import { normalizeAssetId } from '../utils';
-import { ZERO_ADDRESS } from '../utils/constants';
-import { AbstractDataSource } from './AbstractDataSource';
+} from '../types.js';
+import { normalizeAssetId } from '../utils.js';
+import { ZERO_ADDRESS } from '../utils/constants.js';
+import { AbstractDataSource } from './AbstractDataSource.js';
import type {
DataSourceState,
SubscriptionRequest,
-} from './AbstractDataSource';
+} from './AbstractDataSource.js';
import {
BalanceFetcher,
MulticallClient,
TokenDetector,
TokensApiClient,
-} from './evm-rpc-services';
+} from './evm-rpc-services.js';
import type {
BalancePollingInput,
DetectionPollingInput,
TokenListQueryClient,
-} from './evm-rpc-services';
+} from './evm-rpc-services.js';
import type {
Address,
AssetFetchEntry,
Provider as RpcProvider,
BalanceFetchResult,
TokenDetectionResult,
-} from './evm-rpc-services/types';
-import { shouldSkipNativeForCaipChainId } from './evm-rpc-services/utils/assets';
+} from './evm-rpc-services/types.js';
+import { shouldSkipNativeForCaipChainId } from './evm-rpc-services/utils/assets.js';
const CONTROLLER_NAME = 'RpcDataSource';
const DEFAULT_BALANCE_INTERVAL = 30_000; // 30 seconds
diff --git a/packages/assets-controller/src/data-sources/SnapDataSource.test.ts b/packages/assets-controller/src/data-sources/SnapDataSource.test.ts
index 8518b3d694d..00d517cee91 100644
--- a/packages/assets-controller/src/data-sources/SnapDataSource.test.ts
+++ b/packages/assets-controller/src/data-sources/SnapDataSource.test.ts
@@ -7,14 +7,14 @@ import type {
SubjectPermissions,
} from '@metamask/permission-controller';
-import type { AssetsControllerMessenger } from '../AssetsController';
-import type { ChainId, DataRequest, Context, Caip19AssetId } from '../types';
+import type { AssetsControllerMessenger } from '../AssetsController.js';
+import type { ChainId, DataRequest, Context, Caip19AssetId } from '../types.js';
import type {
SnapDataSourceOptions,
AccountBalancesUpdatedEventPayload,
SnapDataSourceAllowedActions,
SnapDataSourceAllowedEvents,
-} from './SnapDataSource';
+} from './SnapDataSource.js';
import {
SnapDataSource,
createSnapDataSource,
@@ -22,7 +22,7 @@ import {
getChainIdsCaveat,
KEYRING_PERMISSION,
ASSETS_PERMISSION,
-} from './SnapDataSource';
+} from './SnapDataSource.js';
// Test chain IDs
const SOLANA_MAINNET = 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' as ChainId;
diff --git a/packages/assets-controller/src/data-sources/SnapDataSource.ts b/packages/assets-controller/src/data-sources/SnapDataSource.ts
index 17da7b0b5e3..dec5e6b1159 100644
--- a/packages/assets-controller/src/data-sources/SnapDataSource.ts
+++ b/packages/assets-controller/src/data-sources/SnapDataSource.ts
@@ -1,7 +1,6 @@
import type { Balance, CaipAssetType } from '@metamask/keyring-api';
import { KeyringClient } from '@metamask/keyring-snap-client';
import type {
- Caveat,
GetPermissions,
PermissionConstraint,
PermissionControllerStateChange,
@@ -17,8 +16,8 @@ import { HandlerType, SnapCaveatType } from '@metamask/snaps-utils';
import { parseCaipAssetType } from '@metamask/utils';
import type { Json, JsonRpcRequest } from '@metamask/utils';
-import type { AssetsControllerMessenger } from '../AssetsController';
-import { projectLogger, createModuleLogger } from '../logger';
+import type { AssetsControllerMessenger } from '../AssetsController.js';
+import { projectLogger, createModuleLogger } from '../logger.js';
import type {
AssetBalance,
ChainId,
@@ -26,12 +25,12 @@ import type {
DataRequest,
DataResponse,
Middleware,
-} from '../types';
-import { AbstractDataSource } from './AbstractDataSource';
+} from '../types.js';
+import { AbstractDataSource } from './AbstractDataSource.js';
import type {
DataSourceState,
SubscriptionRequest,
-} from './AbstractDataSource';
+} from './AbstractDataSource.js';
// ============================================================================
// SNAP KEYRING EVENT TYPES
@@ -97,7 +96,7 @@ export function getChainIdsCaveat(
const caveat = permission.caveats.find(
(permCaveat) => permCaveat.type === SnapCaveatType.ChainIds,
- ) as Caveat | undefined;
+ );
return caveat ? (caveat.value as ChainId[]) : null;
}
diff --git a/packages/assets-controller/src/data-sources/StakedBalanceDataSource.test.ts b/packages/assets-controller/src/data-sources/StakedBalanceDataSource.test.ts
index 358dcbc534d..ec928eb6a0e 100644
--- a/packages/assets-controller/src/data-sources/StakedBalanceDataSource.test.ts
+++ b/packages/assets-controller/src/data-sources/StakedBalanceDataSource.test.ts
@@ -6,16 +6,16 @@ import {
createMockAssetControllerMessenger,
createMockWeb3Provider,
registerStakedMessengerActions,
-} from '../__fixtures__/MockAssetControllerMessenger';
-import type { AssetsControllerMessenger } from '../AssetsController';
+} from '../__fixtures__/MockAssetControllerMessenger.js';
+import type { AssetsControllerMessenger } from '../AssetsController.js';
import type {
AssetsControllerStateInternal,
ChainId,
Context,
DataRequest,
-} from '../types';
-import type { StakedBalanceDataSourceOptions } from './StakedBalanceDataSource';
-import { StakedBalanceDataSource } from './StakedBalanceDataSource';
+} from '../types.js';
+import type { StakedBalanceDataSourceOptions } from './StakedBalanceDataSource.js';
+import { StakedBalanceDataSource } from './StakedBalanceDataSource.js';
const MAINNET_CHAIN_ID_HEX = '0x1';
const MAINNET_CHAIN_ID_CAIP = 'eip155:1' as ChainId;
diff --git a/packages/assets-controller/src/data-sources/StakedBalanceDataSource.ts b/packages/assets-controller/src/data-sources/StakedBalanceDataSource.ts
index df747c54955..e0e571cd402 100644
--- a/packages/assets-controller/src/data-sources/StakedBalanceDataSource.ts
+++ b/packages/assets-controller/src/data-sources/StakedBalanceDataSource.ts
@@ -10,8 +10,8 @@ import {
} from '@metamask/utils';
import type { Hex } from '@metamask/utils';
-import type { AssetsControllerMessenger } from '../AssetsController';
-import { projectLogger, createModuleLogger } from '../logger';
+import type { AssetsControllerMessenger } from '../AssetsController.js';
+import { projectLogger, createModuleLogger } from '../logger.js';
import type {
AccountId,
ChainId,
@@ -21,21 +21,21 @@ import type {
DataRequest,
DataResponse,
Middleware,
-} from '../types';
+} from '../types.js';
import type {
DataSourceState,
SubscriptionRequest,
-} from './AbstractDataSource';
-import { AbstractDataSource } from './AbstractDataSource';
+} from './AbstractDataSource.js';
+import { AbstractDataSource } from './AbstractDataSource.js';
import type {
StakedBalancePollingInput,
StakedBalanceFetchResult,
-} from './evm-rpc-services';
+} from './evm-rpc-services.js';
import {
StakedBalanceFetcher,
getStakingContractAddress,
getSupportedStakingChainIds,
-} from './evm-rpc-services';
+} from './evm-rpc-services.js';
const CONTROLLER_NAME = 'StakedBalanceDataSource';
const DEFAULT_POLL_INTERVAL = 180_000; // 3 minutes
diff --git a/packages/assets-controller/src/data-sources/TokenDataSource.test.ts b/packages/assets-controller/src/data-sources/TokenDataSource.test.ts
index c4de66e06f8..88e5f6edeb6 100644
--- a/packages/assets-controller/src/data-sources/TokenDataSource.test.ts
+++ b/packages/assets-controller/src/data-sources/TokenDataSource.test.ts
@@ -7,10 +7,10 @@ import type {
} from '@metamask/phishing-controller';
import { TokenScanResultType } from '@metamask/phishing-controller';
-import type { AssetsControllerMessenger } from '../AssetsController';
-import type { Context, DataRequest, Caip19AssetId, ChainId } from '../types';
-import type { TokenDataSourceOptions } from './TokenDataSource';
-import { TokenDataSource } from './TokenDataSource';
+import type { AssetsControllerMessenger } from '../AssetsController.js';
+import type { Context, DataRequest, Caip19AssetId, ChainId } from '../types.js';
+import type { TokenDataSourceOptions } from './TokenDataSource.js';
+import { TokenDataSource } from './TokenDataSource.js';
type AllActions = PhishingControllerBulkScanTokensAction;
type AllEvents = never;
diff --git a/packages/assets-controller/src/data-sources/TokenDataSource.ts b/packages/assets-controller/src/data-sources/TokenDataSource.ts
index 836e26bc3ef..0e52a37c71c 100644
--- a/packages/assets-controller/src/data-sources/TokenDataSource.ts
+++ b/packages/assets-controller/src/data-sources/TokenDataSource.ts
@@ -8,20 +8,20 @@ import { TokenScanResultType } from '@metamask/phishing-controller';
import { KnownCaipNamespace, parseCaipAssetType } from '@metamask/utils';
import type { CaipAssetType } from '@metamask/utils';
-import type { AssetsControllerMessenger } from '../AssetsController';
-import { projectLogger, createModuleLogger } from '../logger';
-import { forDataTypes } from '../types';
+import type { AssetsControllerMessenger } from '../AssetsController.js';
+import { projectLogger, createModuleLogger } from '../logger.js';
+import { forDataTypes } from '../types.js';
import type {
Caip19AssetId,
AssetMetadata,
Middleware,
FungibleAssetMetadata,
-} from '../types';
-import { fetchWithTimeout } from '../utils';
+} from '../types.js';
+import { fetchWithTimeout } from '../utils.js';
import {
isStakingContractAssetId,
reduceInBatchesSerially,
-} from './evm-rpc-services';
+} from './evm-rpc-services.js';
// ============================================================================
// CONSTANTS
diff --git a/packages/assets-controller/src/data-sources/evm-rpc-services/clients/MulticallClient.test.ts b/packages/assets-controller/src/data-sources/evm-rpc-services/clients/MulticallClient.test.ts
index 01528dbdee1..0f7a9394c47 100644
--- a/packages/assets-controller/src/data-sources/evm-rpc-services/clients/MulticallClient.test.ts
+++ b/packages/assets-controller/src/data-sources/evm-rpc-services/clients/MulticallClient.test.ts
@@ -2,12 +2,12 @@ import { defaultAbiCoder, Interface } from '@ethersproject/abi';
import * as controllerUtils from '@metamask/controller-utils';
import type { Hex } from '@metamask/utils';
-import type { Address, BalanceOfRequest, ChainId, Provider } from '../types';
+import type { Address, BalanceOfRequest, ChainId, Provider } from '../types.js';
import {
decodeAggregate3Response,
encodeAggregate3,
MulticallClient,
-} from './MulticallClient';
+} from './MulticallClient.js';
// =============================================================================
// MOCK PROVIDER
diff --git a/packages/assets-controller/src/data-sources/evm-rpc-services/clients/MulticallClient.ts b/packages/assets-controller/src/data-sources/evm-rpc-services/clients/MulticallClient.ts
index 3f9079d9ac2..1a2f0dcca4b 100644
--- a/packages/assets-controller/src/data-sources/evm-rpc-services/clients/MulticallClient.ts
+++ b/packages/assets-controller/src/data-sources/evm-rpc-services/clients/MulticallClient.ts
@@ -5,7 +5,7 @@ import {
} from '@metamask/controller-utils';
import type { Hex } from '@metamask/utils';
-import { ZERO_ADDRESS } from '../../../utils/constants';
+import { ZERO_ADDRESS } from '../../../utils/constants.js';
import type {
Address,
BalanceOfRequest,
@@ -13,8 +13,8 @@ import type {
ChainId,
GetProviderFunction,
Provider,
-} from '../types';
-import { reduceInBatchesSerially } from '../utils';
+} from '../types.js';
+import { reduceInBatchesSerially } from '../utils.js';
// =============================================================================
// ABI DEFINITIONS
diff --git a/packages/assets-controller/src/data-sources/evm-rpc-services/clients/TokensApiClient.test.ts b/packages/assets-controller/src/data-sources/evm-rpc-services/clients/TokensApiClient.test.ts
index 83a16c13e6c..0c56eb77e62 100644
--- a/packages/assets-controller/src/data-sources/evm-rpc-services/clients/TokensApiClient.test.ts
+++ b/packages/assets-controller/src/data-sources/evm-rpc-services/clients/TokensApiClient.test.ts
@@ -1,9 +1,9 @@
-import type { ChainId } from '../types';
-import { TokensApiClient } from './TokensApiClient';
+import type { ChainId } from '../types.js';
+import { TokensApiClient } from './TokensApiClient.js';
import type {
TokensApiClientConfig,
TokenListQueryClient,
-} from './TokensApiClient';
+} from './TokensApiClient.js';
// =============================================================================
// CONSTANTS
diff --git a/packages/assets-controller/src/data-sources/evm-rpc-services/clients/TokensApiClient.ts b/packages/assets-controller/src/data-sources/evm-rpc-services/clients/TokensApiClient.ts
index 57522b30759..078605a1598 100644
--- a/packages/assets-controller/src/data-sources/evm-rpc-services/clients/TokensApiClient.ts
+++ b/packages/assets-controller/src/data-sources/evm-rpc-services/clients/TokensApiClient.ts
@@ -3,7 +3,7 @@ import {
convertHexToDecimal,
} from '@metamask/controller-utils';
-import type { ChainId, TokenListEntry } from '../types';
+import type { ChainId, TokenListEntry } from '../types.js';
/**
* Same host + path that `TokenListController` (assets-controllers) uses
diff --git a/packages/assets-controller/src/data-sources/evm-rpc-services/clients/index.ts b/packages/assets-controller/src/data-sources/evm-rpc-services/clients/index.ts
index 59afaabeb0b..b1b742f4aca 100644
--- a/packages/assets-controller/src/data-sources/evm-rpc-services/clients/index.ts
+++ b/packages/assets-controller/src/data-sources/evm-rpc-services/clients/index.ts
@@ -3,13 +3,13 @@ export {
encodeAggregate3,
MulticallClient,
type MulticallClientConfig,
-} from './MulticallClient';
+} from './MulticallClient.js';
export {
TokensApiClient,
type TokensApiClientConfig,
type TokenListQueryClient,
-} from './TokensApiClient';
+} from './TokensApiClient.js';
// Re-export provider types from types module
-export type { GetProviderFunction, Provider } from '../types';
+export type { GetProviderFunction, Provider } from '../types.js';
diff --git a/packages/assets-controller/src/data-sources/evm-rpc-services/index.ts b/packages/assets-controller/src/data-sources/evm-rpc-services/index.ts
index f193260d185..82022c752ca 100644
--- a/packages/assets-controller/src/data-sources/evm-rpc-services/index.ts
+++ b/packages/assets-controller/src/data-sources/evm-rpc-services/index.ts
@@ -10,14 +10,14 @@ export type {
TokenListState,
BalanceFetchResult,
TokenDetectionResult,
-} from './types';
+} from './types.js';
export {
MulticallClient,
type MulticallClientConfig,
TokensApiClient,
type TokensApiClientConfig,
type TokenListQueryClient,
-} from './clients';
+} from './clients.js';
export {
BalanceFetcher,
TokenDetector,
@@ -32,5 +32,5 @@ export {
type OnBalanceUpdateCallback,
type OnDetectionUpdateCallback,
type OnStakedBalanceUpdateCallback,
-} from './services';
-export { divideIntoBatches, reduceInBatchesSerially } from './utils';
+} from './services.js';
+export { divideIntoBatches, reduceInBatchesSerially } from './utils.js';
diff --git a/packages/assets-controller/src/data-sources/evm-rpc-services/services/BalanceFetcher.test.ts b/packages/assets-controller/src/data-sources/evm-rpc-services/services/BalanceFetcher.test.ts
index d4476a988e3..cc788192d96 100644
--- a/packages/assets-controller/src/data-sources/evm-rpc-services/services/BalanceFetcher.test.ts
+++ b/packages/assets-controller/src/data-sources/evm-rpc-services/services/BalanceFetcher.test.ts
@@ -1,19 +1,19 @@
import type { CaipAssetType } from '@metamask/utils';
-import type { MulticallClient } from '../clients';
+import type { MulticallClient } from '../clients.js';
import type {
Address,
AssetFetchEntry,
AssetsBalanceState,
BalanceOfResponse,
ChainId,
-} from '../types';
-import { BalanceFetcher } from './BalanceFetcher';
+} from '../types.js';
+import { BalanceFetcher } from './BalanceFetcher.js';
import type {
BalanceFetcherConfig,
BalanceFetcherMessenger,
BalancePollingInput,
-} from './BalanceFetcher';
+} from './BalanceFetcher.js';
// =============================================================================
// CONSTANTS
diff --git a/packages/assets-controller/src/data-sources/evm-rpc-services/services/BalanceFetcher.ts b/packages/assets-controller/src/data-sources/evm-rpc-services/services/BalanceFetcher.ts
index 43c9b16736c..b069b79bbe8 100644
--- a/packages/assets-controller/src/data-sources/evm-rpc-services/services/BalanceFetcher.ts
+++ b/packages/assets-controller/src/data-sources/evm-rpc-services/services/BalanceFetcher.ts
@@ -1,8 +1,8 @@
import { StaticIntervalPollingControllerOnly } from '@metamask/polling-controller';
import { parseCaipAssetType } from '@metamask/utils';
-import { ZERO_ADDRESS } from '../../../utils/constants';
-import type { MulticallClient } from '../clients';
+import { ZERO_ADDRESS } from '../../../utils/constants.js';
+import type { MulticallClient } from '../clients.js';
import type {
AccountId,
Address,
@@ -14,8 +14,8 @@ import type {
BalanceOfResponse,
CaipAssetType,
ChainId,
-} from '../types';
-import { reduceInBatchesSerially } from '../utils';
+} from '../types.js';
+import { reduceInBatchesSerially } from '../utils.js';
const DEFAULT_BALANCE_INTERVAL = 30_000; // 30 seconds
diff --git a/packages/assets-controller/src/data-sources/evm-rpc-services/services/StakedBalanceFetcher.test.ts b/packages/assets-controller/src/data-sources/evm-rpc-services/services/StakedBalanceFetcher.test.ts
index d63b9ba8070..f9adb99d851 100644
--- a/packages/assets-controller/src/data-sources/evm-rpc-services/services/StakedBalanceFetcher.test.ts
+++ b/packages/assets-controller/src/data-sources/evm-rpc-services/services/StakedBalanceFetcher.test.ts
@@ -4,11 +4,11 @@ import type { Web3Provider } from '@ethersproject/providers';
import type {
StakedBalanceFetcherConfig,
StakedBalancePollingInput,
-} from './StakedBalanceFetcher';
+} from './StakedBalanceFetcher.js';
import {
StakedBalanceFetcher,
isStakingContractAssetId,
-} from './StakedBalanceFetcher';
+} from './StakedBalanceFetcher.js';
const TEST_ADDRESS = '0x9bed78535d6a03a955f1504aadba974d9a29e292';
const MAINNET_CHAIN_ID = '0x1';
diff --git a/packages/assets-controller/src/data-sources/evm-rpc-services/services/StakedBalanceFetcher.ts b/packages/assets-controller/src/data-sources/evm-rpc-services/services/StakedBalanceFetcher.ts
index 035c160b18f..c6460d0d14d 100644
--- a/packages/assets-controller/src/data-sources/evm-rpc-services/services/StakedBalanceFetcher.ts
+++ b/packages/assets-controller/src/data-sources/evm-rpc-services/services/StakedBalanceFetcher.ts
@@ -2,13 +2,13 @@ import { Interface } from '@ethersproject/abi';
import { Web3Provider } from '@ethersproject/providers';
import { StaticIntervalPollingControllerOnly } from '@metamask/polling-controller';
-import type { Address, AccountId, ChainId } from '../types';
+import type { Address, AccountId, ChainId } from '../types.js';
import {
getStakingContractAddress,
getSupportedStakingChainIds,
isStakingContractAssetId,
weiToHumanReadable,
-} from '../utils';
+} from '../utils.js';
export {
getStakingContractAddress,
diff --git a/packages/assets-controller/src/data-sources/evm-rpc-services/services/TokenDetector.test.ts b/packages/assets-controller/src/data-sources/evm-rpc-services/services/TokenDetector.test.ts
index 05a45a5ab7f..39bb017aca6 100644
--- a/packages/assets-controller/src/data-sources/evm-rpc-services/services/TokenDetector.test.ts
+++ b/packages/assets-controller/src/data-sources/evm-rpc-services/services/TokenDetector.test.ts
@@ -1,16 +1,16 @@
-import type { MulticallClient } from '../clients';
-import type { TokensApiClient } from '../clients/TokensApiClient';
+import type { MulticallClient } from '../clients.js';
+import type { TokensApiClient } from '../clients/TokensApiClient.js';
import type {
Address,
BalanceOfResponse,
ChainId,
TokenListEntry,
-} from '../types';
-import { TokenDetector } from './TokenDetector';
+} from '../types.js';
+import { TokenDetector } from './TokenDetector.js';
import type {
TokenDetectorConfig,
DetectionPollingInput,
-} from './TokenDetector';
+} from './TokenDetector.js';
// =============================================================================
// CONSTANTS
diff --git a/packages/assets-controller/src/data-sources/evm-rpc-services/services/TokenDetector.ts b/packages/assets-controller/src/data-sources/evm-rpc-services/services/TokenDetector.ts
index e63a907f37e..1a9121448ea 100644
--- a/packages/assets-controller/src/data-sources/evm-rpc-services/services/TokenDetector.ts
+++ b/packages/assets-controller/src/data-sources/evm-rpc-services/services/TokenDetector.ts
@@ -1,9 +1,9 @@
import { StaticIntervalPollingControllerOnly } from '@metamask/polling-controller';
import type { CaipAssetType } from '@metamask/utils';
-import { projectLogger, createModuleLogger } from '../../../logger';
-import type { MulticallClient } from '../clients';
-import type { TokensApiClient } from '../clients/TokensApiClient';
+import { projectLogger, createModuleLogger } from '../../../logger.js';
+import type { MulticallClient } from '../clients.js';
+import type { TokensApiClient } from '../clients/TokensApiClient.js';
import type {
AccountId,
Address,
@@ -15,8 +15,8 @@ import type {
TokenDetectionOptions,
TokenDetectionResult,
TokenListEntry,
-} from '../types';
-import { reduceInBatchesSerially } from '../utils';
+} from '../types.js';
+import { reduceInBatchesSerially } from '../utils.js';
const log = createModuleLogger(projectLogger, 'TokenDetector');
diff --git a/packages/assets-controller/src/data-sources/evm-rpc-services/services/index.ts b/packages/assets-controller/src/data-sources/evm-rpc-services/services/index.ts
index 1eded823b02..8e6d21d8acf 100644
--- a/packages/assets-controller/src/data-sources/evm-rpc-services/services/index.ts
+++ b/packages/assets-controller/src/data-sources/evm-rpc-services/services/index.ts
@@ -3,14 +3,14 @@ export {
type TokenDetectorConfig,
type DetectionPollingInput,
type OnDetectionUpdateCallback,
-} from './TokenDetector';
+} from './TokenDetector.js';
export {
BalanceFetcher,
type BalanceFetcherConfig,
type BalanceFetcherMessenger,
type BalancePollingInput,
type OnBalanceUpdateCallback,
-} from './BalanceFetcher';
+} from './BalanceFetcher.js';
export {
StakedBalanceFetcher,
getSupportedStakingChainIds,
@@ -20,4 +20,4 @@ export {
type StakedBalancePollingInput,
type StakedBalanceFetchResult,
type OnStakedBalanceUpdateCallback,
-} from './StakedBalanceFetcher';
+} from './StakedBalanceFetcher.js';
diff --git a/packages/assets-controller/src/data-sources/evm-rpc-services/types/assets.ts b/packages/assets-controller/src/data-sources/evm-rpc-services/types/assets.ts
index 5ca8f1ea496..511cd88e701 100644
--- a/packages/assets-controller/src/data-sources/evm-rpc-services/types/assets.ts
+++ b/packages/assets-controller/src/data-sources/evm-rpc-services/types/assets.ts
@@ -1,6 +1,6 @@
import type { CaipAssetType } from '@metamask/utils';
-import type { AccountId, Address, AssetType, ChainId } from './core';
+import type { AccountId, Address, AssetType, ChainId } from './core.js';
/**
* Core asset definition.
diff --git a/packages/assets-controller/src/data-sources/evm-rpc-services/types/config.ts b/packages/assets-controller/src/data-sources/evm-rpc-services/types/config.ts
index dbf583c910c..64225226761 100644
--- a/packages/assets-controller/src/data-sources/evm-rpc-services/types/config.ts
+++ b/packages/assets-controller/src/data-sources/evm-rpc-services/types/config.ts
@@ -1,4 +1,4 @@
-import type { ChainId } from './core';
+import type { ChainId } from './core.js';
/**
* Minimal provider interface for RPC calls.
diff --git a/packages/assets-controller/src/data-sources/evm-rpc-services/types/index.ts b/packages/assets-controller/src/data-sources/evm-rpc-services/types/index.ts
index ac9a8989041..8286fe3341e 100644
--- a/packages/assets-controller/src/data-sources/evm-rpc-services/types/index.ts
+++ b/packages/assets-controller/src/data-sources/evm-rpc-services/types/index.ts
@@ -5,10 +5,10 @@ export type {
AssetType,
CaipAssetType,
ChainId,
-} from './core';
+} from './core.js';
// Asset types
-export type { Asset, AssetBalance } from './assets';
+export type { Asset, AssetBalance } from './assets.js';
// State types
export type {
@@ -16,13 +16,13 @@ export type {
TokenChainsCacheEntry,
TokenListEntry,
TokenListState,
-} from './state';
+} from './state.js';
// Config types
-export type { GetProviderFunction, Provider } from './config';
+export type { GetProviderFunction, Provider } from './config.js';
// Multicall types
-export type { BalanceOfRequest, BalanceOfResponse } from './multicall';
+export type { BalanceOfRequest, BalanceOfResponse } from './multicall.js';
// Service types
export type {
@@ -30,4 +30,4 @@ export type {
BalanceFetchResult,
TokenDetectionOptions,
TokenDetectionResult,
-} from './services';
+} from './services.js';
diff --git a/packages/assets-controller/src/data-sources/evm-rpc-services/types/multicall.ts b/packages/assets-controller/src/data-sources/evm-rpc-services/types/multicall.ts
index 7f56d538e27..bd19640ebeb 100644
--- a/packages/assets-controller/src/data-sources/evm-rpc-services/types/multicall.ts
+++ b/packages/assets-controller/src/data-sources/evm-rpc-services/types/multicall.ts
@@ -1,4 +1,4 @@
-import type { Address } from './core';
+import type { Address } from './core.js';
/**
* Balance request for batch balance fetching.
diff --git a/packages/assets-controller/src/data-sources/evm-rpc-services/types/services.ts b/packages/assets-controller/src/data-sources/evm-rpc-services/types/services.ts
index ab5a89dd6a2..14859e5254d 100644
--- a/packages/assets-controller/src/data-sources/evm-rpc-services/types/services.ts
+++ b/packages/assets-controller/src/data-sources/evm-rpc-services/types/services.ts
@@ -1,5 +1,5 @@
-import type { Asset, AssetBalance } from './assets';
-import type { AccountId, Address, CaipAssetType, ChainId } from './core';
+import type { Asset, AssetBalance } from './assets.js';
+import type { AccountId, Address, CaipAssetType, ChainId } from './core.js';
/**
* Token detection result.
diff --git a/packages/assets-controller/src/data-sources/evm-rpc-services/types/state.ts b/packages/assets-controller/src/data-sources/evm-rpc-services/types/state.ts
index 9ea14a2951f..af114458eaf 100644
--- a/packages/assets-controller/src/data-sources/evm-rpc-services/types/state.ts
+++ b/packages/assets-controller/src/data-sources/evm-rpc-services/types/state.ts
@@ -1,4 +1,4 @@
-import type { ChainId } from './core';
+import type { ChainId } from './core.js';
/**
* Single token entry from token list.
diff --git a/packages/assets-controller/src/data-sources/evm-rpc-services/utils/batch.test.ts b/packages/assets-controller/src/data-sources/evm-rpc-services/utils/batch.test.ts
index 9501555edf4..24f945dbb6f 100644
--- a/packages/assets-controller/src/data-sources/evm-rpc-services/utils/batch.test.ts
+++ b/packages/assets-controller/src/data-sources/evm-rpc-services/utils/batch.test.ts
@@ -1,4 +1,4 @@
-import { divideIntoBatches, reduceInBatchesSerially } from './batch';
+import { divideIntoBatches, reduceInBatchesSerially } from './batch.js';
describe('batch utilities', () => {
describe('divideIntoBatches', () => {
diff --git a/packages/assets-controller/src/data-sources/evm-rpc-services/utils/index.ts b/packages/assets-controller/src/data-sources/evm-rpc-services/utils/index.ts
index 8a9129363d1..55367744a83 100644
--- a/packages/assets-controller/src/data-sources/evm-rpc-services/utils/index.ts
+++ b/packages/assets-controller/src/data-sources/evm-rpc-services/utils/index.ts
@@ -1,8 +1,8 @@
-export { divideIntoBatches, reduceInBatchesSerially } from './batch';
-export { chainIdToHex, weiToHumanReadable } from './parsing';
+export { divideIntoBatches, reduceInBatchesSerially } from './batch.js';
+export { chainIdToHex, weiToHumanReadable } from './parsing.js';
export {
getStakingContractAddress,
getSupportedStakingChainIds,
isStakingContractAssetId,
STAKING_CONTRACT_ADDRESS_BY_CHAINID,
-} from './staking-contracts';
+} from './staking-contracts.js';
diff --git a/packages/assets-controller/src/data-sources/evm-rpc-services/utils/parsing.test.ts b/packages/assets-controller/src/data-sources/evm-rpc-services/utils/parsing.test.ts
index 21a14f53671..6429d2b7577 100644
--- a/packages/assets-controller/src/data-sources/evm-rpc-services/utils/parsing.test.ts
+++ b/packages/assets-controller/src/data-sources/evm-rpc-services/utils/parsing.test.ts
@@ -1,4 +1,4 @@
-import { chainIdToHex, weiToHumanReadable } from './parsing';
+import { chainIdToHex, weiToHumanReadable } from './parsing.js';
describe('parsing utilities', () => {
describe('weiToHumanReadable', () => {
diff --git a/packages/assets-controller/src/data-sources/evm-rpc-services/utils/parsing.ts b/packages/assets-controller/src/data-sources/evm-rpc-services/utils/parsing.ts
index 7a2a5c32c65..718d71efcee 100644
--- a/packages/assets-controller/src/data-sources/evm-rpc-services/utils/parsing.ts
+++ b/packages/assets-controller/src/data-sources/evm-rpc-services/utils/parsing.ts
@@ -7,7 +7,7 @@ import {
import type { CaipChainId, Hex } from '@metamask/utils';
import BigNumberJS from 'bignumber.js';
-import type { ChainId } from '../types';
+import type { ChainId } from '../types.js';
/**
* Convert wei to human-readable amount with decimals, trim trailing zeros.
diff --git a/packages/assets-controller/src/data-sources/index.ts b/packages/assets-controller/src/data-sources/index.ts
index 47cb7c5734c..be96ba70d72 100644
--- a/packages/assets-controller/src/data-sources/index.ts
+++ b/packages/assets-controller/src/data-sources/index.ts
@@ -2,7 +2,7 @@ export {
AbstractDataSource,
type DataSourceState,
type SubscriptionRequest,
-} from './AbstractDataSource';
+} from './AbstractDataSource.js';
export {
AccountsApiDataSource,
@@ -10,7 +10,7 @@ export {
type AccountsApiDataSourceOptions,
type AccountsApiDataSourceState,
type AccountsApiDataSourceAllowedActions,
-} from './AccountsApiDataSource';
+} from './AccountsApiDataSource.js';
export {
BackendWebsocketDataSource,
@@ -19,7 +19,7 @@ export {
type BackendWebsocketDataSourceState,
type BackendWebsocketDataSourceAllowedActions,
type BackendWebsocketDataSourceAllowedEvents,
-} from './BackendWebsocketDataSource';
+} from './BackendWebsocketDataSource.js';
export {
RpcDataSource,
@@ -30,19 +30,19 @@ export {
type RpcDataSourceAllowedActions,
type RpcDataSourceAllowedEvents,
type ChainStatus,
-} from './RpcDataSource';
+} from './RpcDataSource.js';
export {
TokenDataSource,
type TokenDataSourceOptions,
type TokenDataSourceAllowedActions,
-} from './TokenDataSource';
+} from './TokenDataSource.js';
export {
PriceDataSource,
type PriceDataSourceConfig,
type PriceDataSourceOptions,
-} from './PriceDataSource';
+} from './PriceDataSource.js';
// Unified Snap Data Source (dynamically discovers keyring snaps via PermissionController)
export {
@@ -59,10 +59,10 @@ export {
type SnapDataSourceOptions,
type SnapDataSourceAllowedActions,
type SnapDataSourceAllowedEvents,
-} from './SnapDataSource';
+} from './SnapDataSource.js';
export {
StakedBalanceDataSource,
type StakedBalanceDataSourceConfig,
type StakedBalanceDataSourceOptions,
-} from './StakedBalanceDataSource';
+} from './StakedBalanceDataSource.js';
diff --git a/packages/assets-controller/src/defaults.ts b/packages/assets-controller/src/defaults.ts
index 97e30970ca9..6c587cddf85 100644
--- a/packages/assets-controller/src/defaults.ts
+++ b/packages/assets-controller/src/defaults.ts
@@ -3,7 +3,7 @@ import type {
Caip19AssetId,
ChainId,
FungibleAssetMetadata,
-} from './types';
+} from './types.js';
/**
* EIP-55 checksummed address of MetaMask USD (mUSD) — same canonical contract
diff --git a/packages/assets-controller/src/index.ts b/packages/assets-controller/src/index.ts
index 4f69c989517..20661f0ba13 100644
--- a/packages/assets-controller/src/index.ts
+++ b/packages/assets-controller/src/index.ts
@@ -2,8 +2,8 @@
export {
AssetsController,
getDefaultAssetsControllerState,
-} from './AssetsController';
-export { AssetsDataSourceError } from './errors';
+} from './AssetsController.js';
+export { AssetsDataSourceError } from './errors.js';
export {
DEFAULT_TRACKED_ASSETS_BY_CHAIN,
CHAINS_WITH_DEFAULT_TRACKED_ASSETS,
@@ -11,8 +11,8 @@ export {
buildDefaultAssetsInfo,
getDefaultTrackedAssetsForChain,
getDefaultAssetMetadata,
-} from './defaults';
-export type { PendingTokenMetadata } from './AssetsController';
+} from './defaults.js';
+export type { PendingTokenMetadata } from './AssetsController.js';
// State and messenger types
export type {
@@ -26,7 +26,7 @@ export type {
AssetsControllerPriceChangedEvent,
AssetsControllerAssetsDetectedEvent,
AssetsControllerEvents,
-} from './AssetsController';
+} from './AssetsController.js';
export type {
AssetsControllerGetAssetsAction,
AssetsControllerGetAssetsBalanceAction,
@@ -41,7 +41,7 @@ export type {
AssetsControllerGetExchangeRatesForBridgeAction,
AssetsControllerGetStateForTransactionPayAction,
AssetsControllerSetSelectedCurrencyAction,
-} from './AssetsController-method-action-types';
+} from './AssetsController-method-action-types.js';
// Core types
export type {
@@ -95,42 +95,42 @@ export type {
PriceChangeEvent,
MetadataChangeEvent,
AssetsDetectedEvent,
-} from './types';
+} from './types.js';
// Data sources - base class and types
-export { AbstractDataSource } from './data-sources';
+export { AbstractDataSource } from './data-sources.js';
-export type { DataSourceState, SubscriptionRequest } from './data-sources';
+export type { DataSourceState, SubscriptionRequest } from './data-sources.js';
// Data sources - AccountsApi
-export { AccountsApiDataSource } from './data-sources';
+export { AccountsApiDataSource } from './data-sources.js';
export type {
AccountsApiDataSourceConfig,
AccountsApiDataSourceOptions,
AccountsApiDataSourceState,
-} from './data-sources';
+} from './data-sources.js';
// Data sources - BackendWebsocket
export {
BackendWebsocketDataSource,
createBackendWebsocketDataSource,
-} from './data-sources';
+} from './data-sources.js';
export type {
BackendWebsocketDataSourceOptions,
BackendWebsocketDataSourceState,
-} from './data-sources';
+} from './data-sources.js';
// Data sources - RPC
-export { RpcDataSource, createRpcDataSource } from './data-sources';
+export { RpcDataSource, createRpcDataSource } from './data-sources.js';
export type {
RpcDataSourceConfig,
RpcDataSourceOptions,
RpcDataSourceState,
ChainStatus,
-} from './data-sources';
+} from './data-sources.js';
// Data sources - Unified Snap Data Source (dynamically discovers keyring snaps)
export {
@@ -142,45 +142,45 @@ export {
// Utility functions
getChainIdsCaveat,
extractChainFromAssetId,
-} from './data-sources';
+} from './data-sources.js';
export type {
SnapDataSourceState,
SnapDataSourceOptions,
-} from './data-sources';
+} from './data-sources.js';
// Enrichment data sources
-export { TokenDataSource, PriceDataSource } from './data-sources';
+export { TokenDataSource, PriceDataSource } from './data-sources.js';
export type {
TokenDataSourceOptions,
PriceDataSourceConfig,
PriceDataSourceOptions,
-} from './data-sources';
+} from './data-sources.js';
// Middlewares
export {
CustomAssetGraduationMiddleware,
DetectionMiddleware,
RpcFallbackMiddleware,
-} from './middlewares';
+} from './middlewares.js';
export type {
CustomAssetGraduationMiddlewareOptions,
RpcFallbackMiddlewareOptions,
-} from './middlewares';
+} from './middlewares.js';
// Utilities
export {
normalizeAssetId,
formatExchangeRatesForBridge,
formatStateForTransactionPay,
-} from './utils';
+} from './utils.js';
export type {
AccountForLegacyFormat,
BridgeExchangeRatesFormat,
LegacyToken,
TransactionPayLegacyFormat,
-} from './utils';
+} from './utils.js';
// Selectors
export {
@@ -189,7 +189,7 @@ export {
getAggregatedBalanceForAccount,
getGroupIdForAccount,
getInternalAccountsForGroup,
-} from './selectors/balance';
+} from './selectors/balance.js';
export type {
AccountGroupBalance,
@@ -201,4 +201,4 @@ export type {
BalanceChangeResult,
EnabledNetworkMap,
WalletBalance,
-} from './selectors/balance';
+} from './selectors/balance.js';
diff --git a/packages/assets-controller/src/middlewares/CustomAssetGraduationMiddleware.test.ts b/packages/assets-controller/src/middlewares/CustomAssetGraduationMiddleware.test.ts
index 02331161e93..2fdcb05d5f6 100644
--- a/packages/assets-controller/src/middlewares/CustomAssetGraduationMiddleware.test.ts
+++ b/packages/assets-controller/src/middlewares/CustomAssetGraduationMiddleware.test.ts
@@ -5,8 +5,8 @@ import type {
Caip19AssetId,
Context,
DataRequest,
-} from '../types';
-import { CustomAssetGraduationMiddleware } from './CustomAssetGraduationMiddleware';
+} from '../types.js';
+import { CustomAssetGraduationMiddleware } from './CustomAssetGraduationMiddleware.js';
const MOCK_ACCOUNT_ID = 'mock-account-id';
const OTHER_ACCOUNT_ID = 'other-account-id';
diff --git a/packages/assets-controller/src/middlewares/CustomAssetGraduationMiddleware.ts b/packages/assets-controller/src/middlewares/CustomAssetGraduationMiddleware.ts
index 3fec59bcce5..942cc2c546a 100644
--- a/packages/assets-controller/src/middlewares/CustomAssetGraduationMiddleware.ts
+++ b/packages/assets-controller/src/middlewares/CustomAssetGraduationMiddleware.ts
@@ -1,14 +1,14 @@
import { KnownCaipNamespace } from '@metamask/utils';
-import { projectLogger, createModuleLogger } from '../logger';
-import { forDataTypes } from '../types';
+import { projectLogger, createModuleLogger } from '../logger.js';
+import { forDataTypes } from '../types.js';
import type {
AccountId,
AssetBalance,
Caip19AssetId,
Middleware,
-} from '../types';
-import { normalizeAssetId } from '../utils';
+} from '../types.js';
+import { normalizeAssetId } from '../utils.js';
const CONTROLLER_NAME = 'CustomAssetGraduationMiddleware';
diff --git a/packages/assets-controller/src/middlewares/DetectionMiddleware.test.ts b/packages/assets-controller/src/middlewares/DetectionMiddleware.test.ts
index 4d471c0bb0a..0a42e23d926 100644
--- a/packages/assets-controller/src/middlewares/DetectionMiddleware.test.ts
+++ b/packages/assets-controller/src/middlewares/DetectionMiddleware.test.ts
@@ -6,9 +6,9 @@ import type {
DataRequest,
Caip19AssetId,
AssetsControllerStateInternal,
-} from '../types';
-import { normalizeAssetId } from '../utils';
-import { DetectionMiddleware } from './DetectionMiddleware';
+} from '../types.js';
+import { normalizeAssetId } from '../utils.js';
+import { DetectionMiddleware } from './DetectionMiddleware.js';
const MOCK_ADDRESS = '0x1234567890123456789012345678901234567890';
const MOCK_ACCOUNT_ID = 'mock-account-id';
diff --git a/packages/assets-controller/src/middlewares/DetectionMiddleware.ts b/packages/assets-controller/src/middlewares/DetectionMiddleware.ts
index 2fe4b1dcf8f..fa43e776a80 100644
--- a/packages/assets-controller/src/middlewares/DetectionMiddleware.ts
+++ b/packages/assets-controller/src/middlewares/DetectionMiddleware.ts
@@ -1,7 +1,7 @@
-import { projectLogger, createModuleLogger } from '../logger';
-import { forDataTypes } from '../types';
-import type { AccountId, Caip19AssetId, Middleware } from '../types';
-import { normalizeAssetId } from '../utils';
+import { projectLogger, createModuleLogger } from '../logger.js';
+import { forDataTypes } from '../types.js';
+import type { AccountId, Caip19AssetId, Middleware } from '../types.js';
+import { normalizeAssetId } from '../utils.js';
// ============================================================================
// CONSTANTS
diff --git a/packages/assets-controller/src/middlewares/ParallelMiddleware.test.ts b/packages/assets-controller/src/middlewares/ParallelMiddleware.test.ts
index a20712b6567..9fbf852067f 100644
--- a/packages/assets-controller/src/middlewares/ParallelMiddleware.test.ts
+++ b/packages/assets-controller/src/middlewares/ParallelMiddleware.test.ts
@@ -1,6 +1,6 @@
-import type { AssetsDataSource } from '../types';
-import type { Context, DataResponse } from '../types';
-import { createParallelMiddleware } from './ParallelMiddleware';
+import type { AssetsDataSource } from '../types.js';
+import type { Context, DataResponse } from '../types.js';
+import { createParallelMiddleware } from './ParallelMiddleware.js';
const MOCK_ASSET = 'eip155:1/erc20:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48';
diff --git a/packages/assets-controller/src/middlewares/ParallelMiddleware.ts b/packages/assets-controller/src/middlewares/ParallelMiddleware.ts
index 7d67c83308e..8b6fceed491 100644
--- a/packages/assets-controller/src/middlewares/ParallelMiddleware.ts
+++ b/packages/assets-controller/src/middlewares/ParallelMiddleware.ts
@@ -7,7 +7,7 @@ import type {
DataResponse,
Middleware,
AssetsDataSource,
-} from '../types';
+} from '../types.js';
// ============================================================================
// MERGE HELPER
diff --git a/packages/assets-controller/src/middlewares/RpcFallbackMiddleware.test.ts b/packages/assets-controller/src/middlewares/RpcFallbackMiddleware.test.ts
index bcd82f65d19..4bcbbc472f4 100644
--- a/packages/assets-controller/src/middlewares/RpcFallbackMiddleware.test.ts
+++ b/packages/assets-controller/src/middlewares/RpcFallbackMiddleware.test.ts
@@ -7,8 +7,8 @@ import type {
Context,
DataRequest,
DataResponse,
-} from '../types';
-import { RpcFallbackMiddleware } from './RpcFallbackMiddleware';
+} from '../types.js';
+import { RpcFallbackMiddleware } from './RpcFallbackMiddleware.js';
const MOCK_ACCOUNT_ID = 'mock-account-id';
const MOCK_ASSET_MAINNET = 'eip155:1/slip44:60' as Caip19AssetId;
diff --git a/packages/assets-controller/src/middlewares/RpcFallbackMiddleware.ts b/packages/assets-controller/src/middlewares/RpcFallbackMiddleware.ts
index b91da7490a3..fb164a89126 100644
--- a/packages/assets-controller/src/middlewares/RpcFallbackMiddleware.ts
+++ b/packages/assets-controller/src/middlewares/RpcFallbackMiddleware.ts
@@ -1,12 +1,12 @@
-import { projectLogger, createModuleLogger } from '../logger';
-import { forDataTypes } from '../types';
+import { projectLogger, createModuleLogger } from '../logger.js';
+import { forDataTypes } from '../types.js';
import type {
AssetsDataSource,
ChainId,
DataResponse,
Middleware,
-} from '../types';
-import { mergeDataResponses } from './ParallelMiddleware';
+} from '../types.js';
+import { mergeDataResponses } from './ParallelMiddleware.js';
const CONTROLLER_NAME = 'RpcFallbackMiddleware';
diff --git a/packages/assets-controller/src/middlewares/index.ts b/packages/assets-controller/src/middlewares/index.ts
index 15a26613b99..d6796382aa3 100644
--- a/packages/assets-controller/src/middlewares/index.ts
+++ b/packages/assets-controller/src/middlewares/index.ts
@@ -1,12 +1,12 @@
-export { CustomAssetGraduationMiddleware } from './CustomAssetGraduationMiddleware';
-export type { CustomAssetGraduationMiddlewareOptions } from './CustomAssetGraduationMiddleware';
-export { DetectionMiddleware } from './DetectionMiddleware';
-export { RpcFallbackMiddleware } from './RpcFallbackMiddleware';
-export type { RpcFallbackMiddlewareOptions } from './RpcFallbackMiddleware';
+export { CustomAssetGraduationMiddleware } from './CustomAssetGraduationMiddleware.js';
+export type { CustomAssetGraduationMiddlewareOptions } from './CustomAssetGraduationMiddleware.js';
+export { DetectionMiddleware } from './DetectionMiddleware.js';
+export { RpcFallbackMiddleware } from './RpcFallbackMiddleware.js';
+export type { RpcFallbackMiddlewareOptions } from './RpcFallbackMiddleware.js';
export {
createParallelBalanceMiddleware,
createParallelMiddleware,
mergeDataResponses,
-} from './ParallelMiddleware';
-export type { BalanceSource } from './ParallelMiddleware';
-export type { AssetsDataSource } from '../types';
+} from './ParallelMiddleware.js';
+export type { BalanceSource } from './ParallelMiddleware.js';
+export type { AssetsDataSource } from '../types.js';
diff --git a/packages/assets-controller/src/migrations/healAssetsInfoMetadata.test.ts b/packages/assets-controller/src/migrations/healAssetsInfoMetadata.test.ts
index 98202bb31be..d4fa0785d8c 100644
--- a/packages/assets-controller/src/migrations/healAssetsInfoMetadata.test.ts
+++ b/packages/assets-controller/src/migrations/healAssetsInfoMetadata.test.ts
@@ -1,9 +1,9 @@
-import type { AssetsControllerStateInternal, Caip19AssetId } from '../types';
-import type { CurrentAssetsState } from './healAssetsInfoMetadata';
+import type { AssetsControllerStateInternal, Caip19AssetId } from '../types.js';
+import type { CurrentAssetsState } from './healAssetsInfoMetadata.js';
import {
healAssetsInfoMetadata,
tempHealAssetsInfoMetadata,
-} from './healAssetsInfoMetadata';
+} from './healAssetsInfoMetadata.js';
const ACCOUNT_ID = 'account-uuid-1';
const ACCOUNT_ADDRESS = '0x1111111111111111111111111111111111111111';
diff --git a/packages/assets-controller/src/migrations/healAssetsInfoMetadata.ts b/packages/assets-controller/src/migrations/healAssetsInfoMetadata.ts
index fc34bc32855..e3f75f6fbb5 100644
--- a/packages/assets-controller/src/migrations/healAssetsInfoMetadata.ts
+++ b/packages/assets-controller/src/migrations/healAssetsInfoMetadata.ts
@@ -7,15 +7,15 @@ import {
hasProperty,
isObject,
} from '@metamask/utils';
-import { cloneDeep } from 'lodash';
+import { cloneDeep } from 'lodash-es';
-import { createModuleLogger, projectLogger } from '../logger';
+import { createModuleLogger, projectLogger } from '../logger.js';
import type {
AccountId,
Caip19AssetId,
FungibleAssetMetadata,
AssetsControllerStateInternal,
-} from '../types';
+} from '../types.js';
/**
* TEMPORARY MODULE — remove in a future release.
diff --git a/packages/assets-controller/src/selectors/balance.test.ts b/packages/assets-controller/src/selectors/balance.test.ts
index 61fcc2b9ddc..facc9a9af5b 100644
--- a/packages/assets-controller/src/selectors/balance.test.ts
+++ b/packages/assets-controller/src/selectors/balance.test.ts
@@ -1,9 +1,9 @@
import type { AccountTreeControllerState } from '@metamask/account-tree-controller';
import type { InternalAccount } from '@metamask/keyring-internal-api';
-import type { AssetsControllerState } from '../AssetsController';
-import type { Caip19AssetId } from '../types';
-import type { AccountsById, EnabledNetworkMap } from './balance';
+import type { AssetsControllerState } from '../AssetsController.js';
+import type { Caip19AssetId } from '../types.js';
+import type { AccountsById, EnabledNetworkMap } from './balance.js';
import {
calculateBalanceChangeForAccountGroup,
calculateBalanceForAllWallets,
@@ -12,7 +12,7 @@ import {
getAggregatedBalanceForAccountIds,
getGroupIdForAccount,
getInternalAccountsForGroup,
-} from './balance';
+} from './balance.js';
describe('balance selectors', () => {
const accountId1 = 'account-id-1';
diff --git a/packages/assets-controller/src/selectors/balance.ts b/packages/assets-controller/src/selectors/balance.ts
index bd354714ff7..c993af84e4e 100644
--- a/packages/assets-controller/src/selectors/balance.ts
+++ b/packages/assets-controller/src/selectors/balance.ts
@@ -11,14 +11,14 @@ import {
} from '@metamask/utils';
import BigNumberJS from 'bignumber.js';
-import type { AssetsControllerState } from '../AssetsController';
+import type { AssetsControllerState } from '../AssetsController.js';
import type {
AccountId,
AssetBalance,
AssetMetadata,
AssetPreferences,
Caip19AssetId,
-} from '../types';
+} from '../types.js';
// ============================================================================
// TRACE NAMES — used in Sentry spans (search these strings in Discover)
diff --git a/packages/assets-controller/src/utils/customAssetsRpcSupplement.test.ts b/packages/assets-controller/src/utils/customAssetsRpcSupplement.test.ts
index c7bfe631747..597a6e541b5 100644
--- a/packages/assets-controller/src/utils/customAssetsRpcSupplement.test.ts
+++ b/packages/assets-controller/src/utils/customAssetsRpcSupplement.test.ts
@@ -1,5 +1,5 @@
-import type { Caip19AssetId, ChainId } from '../types';
-import { pickRpcCustomAssetsSupplement } from './customAssetsRpcSupplement';
+import type { Caip19AssetId, ChainId } from '../types.js';
+import { pickRpcCustomAssetsSupplement } from './customAssetsRpcSupplement.js';
const MAINNET = 'eip155:1' as ChainId;
const POLYGON = 'eip155:137' as ChainId;
diff --git a/packages/assets-controller/src/utils/customAssetsRpcSupplement.ts b/packages/assets-controller/src/utils/customAssetsRpcSupplement.ts
index 3e202535bc5..3703a5f9fc9 100644
--- a/packages/assets-controller/src/utils/customAssetsRpcSupplement.ts
+++ b/packages/assets-controller/src/utils/customAssetsRpcSupplement.ts
@@ -1,6 +1,6 @@
import { parseCaipAssetType } from '@metamask/utils';
-import type { Caip19AssetId, ChainId } from '../types';
+import type { Caip19AssetId, ChainId } from '../types.js';
/**
* Inputs needed to decide whether `RpcDataSource` should run a supplemental
diff --git a/packages/assets-controller/src/utils/fetchWithTimeout.test.ts b/packages/assets-controller/src/utils/fetchWithTimeout.test.ts
index 65c3f20ae2a..89b773fa4ee 100644
--- a/packages/assets-controller/src/utils/fetchWithTimeout.test.ts
+++ b/packages/assets-controller/src/utils/fetchWithTimeout.test.ts
@@ -1,4 +1,4 @@
-import { fetchWithTimeout } from './fetchWithTimeout';
+import { fetchWithTimeout } from './fetchWithTimeout.js';
describe('fetchWithTimeout', () => {
it('resolves with the task value when it settles in time', async () => {
diff --git a/packages/assets-controller/src/utils/formatExchangeRatesForBridge.test.ts b/packages/assets-controller/src/utils/formatExchangeRatesForBridge.test.ts
index 40cacaec833..6ca041632fc 100644
--- a/packages/assets-controller/src/utils/formatExchangeRatesForBridge.test.ts
+++ b/packages/assets-controller/src/utils/formatExchangeRatesForBridge.test.ts
@@ -1,5 +1,5 @@
-import type { AssetMetadata, FungibleAssetPrice } from '../types';
-import { formatExchangeRatesForBridge } from './formatExchangeRatesForBridge';
+import type { AssetMetadata, FungibleAssetPrice } from '../types.js';
+import { formatExchangeRatesForBridge } from './formatExchangeRatesForBridge.js';
/**
* Builds minimal AssetPrice for tests. Defaults usdPrice to the same
diff --git a/packages/assets-controller/src/utils/formatExchangeRatesForBridge.ts b/packages/assets-controller/src/utils/formatExchangeRatesForBridge.ts
index db306600322..156349c7dce 100644
--- a/packages/assets-controller/src/utils/formatExchangeRatesForBridge.ts
+++ b/packages/assets-controller/src/utils/formatExchangeRatesForBridge.ts
@@ -15,7 +15,7 @@ import type {
AssetPrice,
FungibleAssetPrice,
Caip19AssetId,
-} from '../types';
+} from '../types.js';
/**
* Exchange rates in the format expected by the bridge controller:
@@ -128,9 +128,7 @@ export function formatExchangeRatesForBridge(params: {
if (tokenAddress) {
const priceInNative =
nativeAssetUsdPrice > 0 ? usdPrice / nativeAssetUsdPrice : usdPrice;
- if (!marketData[chainIdHex]) {
- marketData[chainIdHex] = {};
- }
+ marketData[chainIdHex] ??= {};
marketData[chainIdHex][tokenAddress] = {
...priceData,
price: priceInNative,
diff --git a/packages/assets-controller/src/utils/formatStateForTransactionPay.test.ts b/packages/assets-controller/src/utils/formatStateForTransactionPay.test.ts
index d906273061e..94c099feb50 100644
--- a/packages/assets-controller/src/utils/formatStateForTransactionPay.test.ts
+++ b/packages/assets-controller/src/utils/formatStateForTransactionPay.test.ts
@@ -1,8 +1,12 @@
-import type { AssetBalance, AssetMetadata, FungibleAssetPrice } from '../types';
+import type {
+ AssetBalance,
+ AssetMetadata,
+ FungibleAssetPrice,
+} from '../types.js';
import {
formatStateForTransactionPay,
AccountForLegacyFormat,
-} from './formatStateForTransactionPay';
+} from './formatStateForTransactionPay.js';
function price(
overrides: Partial & { price: number },
diff --git a/packages/assets-controller/src/utils/formatStateForTransactionPay.ts b/packages/assets-controller/src/utils/formatStateForTransactionPay.ts
index eeeba30c893..c0538a1d07b 100644
--- a/packages/assets-controller/src/utils/formatStateForTransactionPay.ts
+++ b/packages/assets-controller/src/utils/formatStateForTransactionPay.ts
@@ -8,9 +8,9 @@ import type {
AssetMetadata,
AssetPrice,
Caip19AssetId,
-} from '../types';
-import { formatExchangeRatesForBridge } from './formatExchangeRatesForBridge';
-import type { BridgeExchangeRatesFormat } from './formatExchangeRatesForBridge';
+} from '../types.js';
+import { formatExchangeRatesForBridge } from './formatExchangeRatesForBridge.js';
+import type { BridgeExchangeRatesFormat } from './formatExchangeRatesForBridge.js';
/** Account with id and address for mapping state to legacy format. */
export type AccountForLegacyFormat = { id: string; address: string };
diff --git a/packages/assets-controller/src/utils/index.ts b/packages/assets-controller/src/utils/index.ts
index 408f745261d..daff68bcaec 100644
--- a/packages/assets-controller/src/utils/index.ts
+++ b/packages/assets-controller/src/utils/index.ts
@@ -1,15 +1,15 @@
-export { fetchWithTimeout } from './fetchWithTimeout';
-export { normalizeAmountString } from './normalizeAmountString';
-export { normalizeAssetId } from './normalizeAssetId';
-export { formatExchangeRatesForBridge } from './formatExchangeRatesForBridge';
-export { formatStateForTransactionPay } from './formatStateForTransactionPay';
-export type { BridgeExchangeRatesFormat } from './formatExchangeRatesForBridge';
+export { fetchWithTimeout } from './fetchWithTimeout.js';
+export { normalizeAmountString } from './normalizeAmountString.js';
+export { normalizeAssetId } from './normalizeAssetId.js';
+export { formatExchangeRatesForBridge } from './formatExchangeRatesForBridge.js';
+export { formatStateForTransactionPay } from './formatStateForTransactionPay.js';
+export type { BridgeExchangeRatesFormat } from './formatExchangeRatesForBridge.js';
export type {
AccountForLegacyFormat,
LegacyToken,
TransactionPayLegacyFormat,
-} from './formatStateForTransactionPay';
+} from './formatStateForTransactionPay.js';
export {
buildNativeAssetsFromConstant,
buildNativeAssetsFromApi,
-} from './native-assets';
+} from './native-assets.js';
diff --git a/packages/assets-controller/src/utils/native-assets.test.ts b/packages/assets-controller/src/utils/native-assets.test.ts
index e63df1bd83a..b82cedfdeb9 100644
--- a/packages/assets-controller/src/utils/native-assets.test.ts
+++ b/packages/assets-controller/src/utils/native-assets.test.ts
@@ -4,8 +4,8 @@ import { fetchWithErrorHandling } from '@metamask/controller-utils';
import {
buildNativeAssetsFromConstant,
buildNativeAssetsFromApi,
-} from './native-assets';
-import { normalizeAssetId } from './normalizeAssetId';
+} from './native-assets.js';
+import { normalizeAssetId } from './normalizeAssetId.js';
jest.mock('@metamask/controller-utils', () => ({
...jest.requireActual('@metamask/controller-utils'),
diff --git a/packages/assets-controller/src/utils/native-assets.ts b/packages/assets-controller/src/utils/native-assets.ts
index 2693daae520..5cf251974aa 100644
--- a/packages/assets-controller/src/utils/native-assets.ts
+++ b/packages/assets-controller/src/utils/native-assets.ts
@@ -2,8 +2,8 @@ import { SPOT_PRICES_SUPPORT_INFO } from '@metamask/assets-controllers';
import { fetchWithErrorHandling } from '@metamask/controller-utils';
import { parseCaipAssetType } from '@metamask/utils';
-import type { Caip19AssetId, ChainId } from '../types';
-import { normalizeAssetId } from './normalizeAssetId';
+import type { Caip19AssetId, ChainId } from '../types.js';
+import { normalizeAssetId } from './normalizeAssetId.js';
const CHAINID_NETWORK_URL = 'https://chainid.network/chains.json';
diff --git a/packages/assets-controller/src/utils/normalizeAmountString.test.ts b/packages/assets-controller/src/utils/normalizeAmountString.test.ts
index eb21ca68d38..da1af7da45b 100644
--- a/packages/assets-controller/src/utils/normalizeAmountString.test.ts
+++ b/packages/assets-controller/src/utils/normalizeAmountString.test.ts
@@ -1,4 +1,4 @@
-import { normalizeAmountString } from './normalizeAmountString';
+import { normalizeAmountString } from './normalizeAmountString.js';
describe('normalizeAmountString', () => {
describe('with decimals=18 (e.g. ETH/most ERC20)', () => {
diff --git a/packages/assets-controller/src/utils/normalizeAssetId.ts b/packages/assets-controller/src/utils/normalizeAssetId.ts
index 76632a54813..ecdbc4f03e1 100644
--- a/packages/assets-controller/src/utils/normalizeAssetId.ts
+++ b/packages/assets-controller/src/utils/normalizeAssetId.ts
@@ -1,7 +1,7 @@
import { toChecksumAddress } from '@ethereumjs/util';
import { parseCaipAssetType, parseCaipChainId } from '@metamask/utils';
-import type { Caip19AssetId } from '../types';
+import type { Caip19AssetId } from '../types.js';
/**
* Normalizes a CAIP-19 asset ID by checksumming EVM addresses.
diff --git a/packages/assets-controller/src/utils/processAccountActivityBalanceUpdates.test.ts b/packages/assets-controller/src/utils/processAccountActivityBalanceUpdates.test.ts
index 6f4f09e58c9..01f1d82b47a 100644
--- a/packages/assets-controller/src/utils/processAccountActivityBalanceUpdates.test.ts
+++ b/packages/assets-controller/src/utils/processAccountActivityBalanceUpdates.test.ts
@@ -1,7 +1,7 @@
import type { BalanceUpdate } from '@metamask/core-backend';
-import type { Caip19AssetId } from '../types';
-import { processAccountActivityBalanceUpdates } from './processAccountActivityBalanceUpdates';
+import type { Caip19AssetId } from '../types.js';
+import { processAccountActivityBalanceUpdates } from './processAccountActivityBalanceUpdates.js';
describe('processAccountActivityBalanceUpdates', () => {
it('converts hex postBalance to human-readable amount', () => {
diff --git a/packages/assets-controller/src/utils/processAccountActivityBalanceUpdates.ts b/packages/assets-controller/src/utils/processAccountActivityBalanceUpdates.ts
index 16c3844ce3c..b6367ff9b15 100644
--- a/packages/assets-controller/src/utils/processAccountActivityBalanceUpdates.ts
+++ b/packages/assets-controller/src/utils/processAccountActivityBalanceUpdates.ts
@@ -6,7 +6,7 @@ import type {
AssetMetadata,
Caip19AssetId,
DataResponse,
-} from '../types';
+} from '../types.js';
/**
* Convert AccountActivityMessage balance updates into a {@link DataResponse}
diff --git a/packages/assets-controllers/jest.config.js b/packages/assets-controllers/jest.config.js
index add4e35680f..c3d205b2c53 100644
--- a/packages/assets-controllers/jest.config.js
+++ b/packages/assets-controllers/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/assets-controllers/package.json b/packages/assets-controllers/package.json
index d8f1f9478af..fa341ed3cd2 100644
--- a/packages/assets-controllers/package.json
+++ b/packages/assets-controllers/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/assets-controllers",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/assets-controllers",
@@ -96,7 +89,7 @@
"bitcoin-address-validation": "^2.2.3",
"bn.js": "^5.2.1",
"immer": "^9.0.6",
- "lodash": "^4.17.21",
+ "lodash-es": "^4.17.21",
"multiformats": "^9.9.0",
"reselect": "^5.1.1",
"single-call-balance-checker-abi": "^1.0.0",
@@ -110,7 +103,6 @@
"@metamask/keyring-internal-api": "^11.0.1",
"@metamask/keyring-snap-client": "^9.2.0",
"@metamask/providers": "^22.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"@types/lodash": "^4.14.191",
"@types/node": "^16.18.54",
diff --git a/packages/assets-controllers/src/AccountTrackerController-method-action-types.ts b/packages/assets-controllers/src/AccountTrackerController-method-action-types.ts
index 38794c00d96..e9eab07a2eb 100644
--- a/packages/assets-controllers/src/AccountTrackerController-method-action-types.ts
+++ b/packages/assets-controllers/src/AccountTrackerController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { AccountTrackerController } from './AccountTrackerController';
+import type { AccountTrackerController } from './AccountTrackerController.js';
/**
* Refreshes the balances of the accounts depending on the multi-account setting.
diff --git a/packages/assets-controllers/src/AccountTrackerController.test.ts b/packages/assets-controllers/src/AccountTrackerController.test.ts
index 3e18da317dd..0f4efc6fae6 100644
--- a/packages/assets-controllers/src/AccountTrackerController.test.ts
+++ b/packages/assets-controllers/src/AccountTrackerController.test.ts
@@ -19,17 +19,17 @@ import type { TransactionMeta } from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
import BN from 'bn.js';
-import { FakeProvider } from '../../../tests/fake-provider';
-import { jestAdvanceTime } from '../../../tests/helpers';
-import { createMockInternalAccount } from '../../accounts-controller/tests/mocks';
+import { FakeProvider } from '../../../tests/fake-provider.js';
+import { jestAdvanceTime } from '../../../tests/helpers.js';
+import { createMockInternalAccount } from '../../accounts-controller/tests/mocks.js';
import {
buildCustomNetworkClientConfiguration,
buildMockGetNetworkClientById,
-} from '../../network-controller/tests/helpers';
-import type { AccountTrackerControllerMessenger } from './AccountTrackerController';
-import { AccountTrackerController } from './AccountTrackerController';
-import { AccountsApiBalanceFetcher } from './multi-chain-accounts-service/api-balance-fetcher';
-import { getTokenBalancesForMultipleAddresses } from './multicall';
+} from '../../network-controller/tests/helpers.js';
+import type { AccountTrackerControllerMessenger } from './AccountTrackerController.js';
+import { AccountTrackerController } from './AccountTrackerController.js';
+import { AccountsApiBalanceFetcher } from './multi-chain-accounts-service/api-balance-fetcher.js';
+import { getTokenBalancesForMultipleAddresses } from './multicall.js';
type AllAccountTrackerControllerActions =
MessengerActions;
diff --git a/packages/assets-controllers/src/AccountTrackerController.ts b/packages/assets-controllers/src/AccountTrackerController.ts
index 264e40ba353..f319460af18 100644
--- a/packages/assets-controllers/src/AccountTrackerController.ts
+++ b/packages/assets-controllers/src/AccountTrackerController.ts
@@ -42,22 +42,22 @@ import type {
import { assert, KnownCaipNamespace } from '@metamask/utils';
import type { Hex } from '@metamask/utils';
import { Mutex } from 'async-mutex';
-import { cloneDeep, isEqual } from 'lodash';
+import { cloneDeep, isEqual } from 'lodash-es';
-import type { AccountTrackerControllerMethodActions } from './AccountTrackerController-method-action-types';
-import { STAKING_CONTRACT_ADDRESS_BY_CHAINID } from './AssetsContractController';
+import type { AccountTrackerControllerMethodActions } from './AccountTrackerController-method-action-types.js';
+import { STAKING_CONTRACT_ADDRESS_BY_CHAINID } from './AssetsContractController.js';
import type {
AssetsContractController,
StakedBalance,
-} from './AssetsContractController';
-import { shouldIncludeNativeToken } from './constants';
-import { AccountsApiBalanceFetcher } from './multi-chain-accounts-service/api-balance-fetcher';
+} from './AssetsContractController.js';
+import { shouldIncludeNativeToken } from './constants.js';
+import { AccountsApiBalanceFetcher } from './multi-chain-accounts-service/api-balance-fetcher.js';
import type {
BalanceFetcher,
BalanceFetchResult,
ProcessedBalance,
-} from './multi-chain-accounts-service/api-balance-fetcher';
-import { RpcBalanceFetcher } from './rpc-service/rpc-balance-fetcher';
+} from './multi-chain-accounts-service/api-balance-fetcher.js';
+import { RpcBalanceFetcher } from './rpc-service/rpc-balance-fetcher.js';
/**
* The name of the {@link AccountTrackerController}.
@@ -506,11 +506,9 @@ export class AccountTrackerController extends StaticIntervalPollingController {
newAddresses.forEach((address) => {
- if (!accountsByChainId[chainId][address]) {
- accountsByChainId[chainId][address] = {
- balance: '0x0',
- };
- }
+ accountsByChainId[chainId][address] ??= {
+ balance: '0x0',
+ };
});
});
diff --git a/packages/assets-controllers/src/AssetsContractController-method-action-types.ts b/packages/assets-controllers/src/AssetsContractController-method-action-types.ts
index 73f709e8793..2801517c446 100644
--- a/packages/assets-controllers/src/AssetsContractController-method-action-types.ts
+++ b/packages/assets-controllers/src/AssetsContractController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { AssetsContractController } from './AssetsContractController';
+import type { AssetsContractController } from './AssetsContractController.js';
/**
* Get a ERC20Standard instance using the relevant provider instance.
diff --git a/packages/assets-controllers/src/AssetsContractController.test.ts b/packages/assets-controllers/src/AssetsContractController.test.ts
index a9c893b7139..8033c412094 100644
--- a/packages/assets-controllers/src/AssetsContractController.test.ts
+++ b/packages/assets-controllers/src/AssetsContractController.test.ts
@@ -27,15 +27,15 @@ import type { PreferencesState } from '@metamask/preferences-controller';
import { getDefaultPreferencesState } from '@metamask/preferences-controller';
import assert from 'assert';
-import { SECONDS } from '../../../tests/constants';
-import { mockNetwork } from '../../../tests/mock-network';
-import { buildInfuraNetworkClientConfiguration } from '../../network-controller/tests/helpers';
-import type { AssetsContractControllerMessenger } from './AssetsContractController';
+import { SECONDS } from '../../../tests/constants.js';
+import { mockNetwork } from '../../../tests/mock-network.js';
+import { buildInfuraNetworkClientConfiguration } from '../../network-controller/tests/helpers.js';
+import type { AssetsContractControllerMessenger } from './AssetsContractController.js';
import {
AssetsContractController,
MISSING_PROVIDER_ERROR,
-} from './AssetsContractController';
-import { SupportedTokenDetectionNetworks } from './assetsUtil';
+} from './AssetsContractController.js';
+import { SupportedTokenDetectionNetworks } from './assetsUtil.js';
type AllAssetsContractControllerActions =
MessengerActions;
diff --git a/packages/assets-controllers/src/AssetsContractController.ts b/packages/assets-controllers/src/AssetsContractController.ts
index ff33a0a2cf0..c25c085a906 100644
--- a/packages/assets-controllers/src/AssetsContractController.ts
+++ b/packages/assets-controllers/src/AssetsContractController.ts
@@ -18,16 +18,16 @@ import type { Hex } from '@metamask/utils';
import type BN from 'bn.js';
import abiSingleCallBalancesContract from 'single-call-balance-checker-abi';
-import type { AssetsContractControllerMethodActions } from './AssetsContractController-method-action-types';
+import type { AssetsContractControllerMethodActions } from './AssetsContractController-method-action-types.js';
import {
SupportedStakedBalanceNetworks,
SupportedTokenDetectionNetworks,
-} from './assetsUtil';
-import type { Call } from './multicall';
-import { multicallOrFallback } from './multicall';
-import { ERC20Standard } from './Standards/ERC20Standard';
-import { ERC721Standard } from './Standards/NftStandards/ERC721/ERC721Standard';
-import { ERC1155Standard } from './Standards/NftStandards/ERC1155/ERC1155Standard';
+} from './assetsUtil.js';
+import type { Call } from './multicall.js';
+import { multicallOrFallback } from './multicall.js';
+import { ERC20Standard } from './Standards/ERC20Standard.js';
+import { ERC721Standard } from './Standards/NftStandards/ERC721/ERC721Standard.js';
+import { ERC1155Standard } from './Standards/NftStandards/ERC1155/ERC1155Standard.js';
/**
* Check if token detection is enabled for certain networks
diff --git a/packages/assets-controllers/src/AssetsContractControllerWithNetworkClientId.test.ts b/packages/assets-controllers/src/AssetsContractControllerWithNetworkClientId.test.ts
index cd5ffe1a18b..87428c42bd6 100644
--- a/packages/assets-controllers/src/AssetsContractControllerWithNetworkClientId.test.ts
+++ b/packages/assets-controllers/src/AssetsContractControllerWithNetworkClientId.test.ts
@@ -2,7 +2,7 @@ import { BigNumber } from '@ethersproject/bignumber';
import { BUILT_IN_NETWORKS } from '@metamask/controller-utils';
import { NetworkClientType } from '@metamask/network-controller';
-import { SECONDS } from '../../../tests/constants';
+import { SECONDS } from '../../../tests/constants.js';
import {
setupAssetContractControllers,
mockNetworkWithDefaultChainId,
diff --git a/packages/assets-controllers/src/CurrencyRateController-method-action-types.ts b/packages/assets-controllers/src/CurrencyRateController-method-action-types.ts
index d8a71ecc84e..673ce8964c5 100644
--- a/packages/assets-controllers/src/CurrencyRateController-method-action-types.ts
+++ b/packages/assets-controllers/src/CurrencyRateController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { CurrencyRateController } from './CurrencyRateController';
+import type { CurrencyRateController } from './CurrencyRateController.js';
/**
* Sets a currency to track.
diff --git a/packages/assets-controllers/src/CurrencyRateController.test.ts b/packages/assets-controllers/src/CurrencyRateController.test.ts
index 38c8a689a13..411e37c1a4f 100644
--- a/packages/assets-controllers/src/CurrencyRateController.test.ts
+++ b/packages/assets-controllers/src/CurrencyRateController.test.ts
@@ -13,10 +13,10 @@ import type {
import type { NetworkConfiguration } from '@metamask/network-controller';
import type { Hex } from '@metamask/utils';
-import { jestAdvanceTime } from '../../../tests/helpers';
-import type { CurrencyRateMessenger } from './CurrencyRateController';
-import { CurrencyRateController } from './CurrencyRateController';
-import type { AbstractTokenPricesService } from './token-prices-service';
+import { jestAdvanceTime } from '../../../tests/helpers.js';
+import type { CurrencyRateMessenger } from './CurrencyRateController.js';
+import { CurrencyRateController } from './CurrencyRateController.js';
+import type { AbstractTokenPricesService } from './token-prices-service.js';
const namespace = 'CurrencyRateController';
diff --git a/packages/assets-controllers/src/CurrencyRateController.ts b/packages/assets-controllers/src/CurrencyRateController.ts
index 52a35f2de77..5c4ac92587a 100644
--- a/packages/assets-controllers/src/CurrencyRateController.ts
+++ b/packages/assets-controllers/src/CurrencyRateController.ts
@@ -17,9 +17,9 @@ import { StaticIntervalPollingController } from '@metamask/polling-controller';
import type { Hex } from '@metamask/utils';
import { Mutex } from 'async-mutex';
-import type { CurrencyRateControllerMethodActions } from './CurrencyRateController-method-action-types';
-import type { AbstractTokenPricesService } from './token-prices-service/abstract-token-prices-service';
-import { getNativeTokenAddress } from './token-prices-service/codefi-v2';
+import type { CurrencyRateControllerMethodActions } from './CurrencyRateController-method-action-types.js';
+import type { AbstractTokenPricesService } from './token-prices-service/abstract-token-prices-service.js';
+import { getNativeTokenAddress } from './token-prices-service/codefi-v2.js';
/**
* currencyRates - Object keyed by native currency
diff --git a/packages/assets-controllers/src/DeFiPositionsController/DeFiPositionsController.test.ts b/packages/assets-controllers/src/DeFiPositionsController/DeFiPositionsController.test.ts
index b045d1891b2..68dd28693ed 100644
--- a/packages/assets-controllers/src/DeFiPositionsController/DeFiPositionsController.test.ts
+++ b/packages/assets-controllers/src/DeFiPositionsController/DeFiPositionsController.test.ts
@@ -7,20 +7,20 @@ import type {
MockAnyNamespace,
} from '@metamask/messenger';
-import { flushPromises } from '../../../../tests/helpers';
-import { createMockInternalAccount } from '../../../accounts-controller/tests/mocks';
+import { flushPromises } from '../../../../tests/helpers.js';
+import { createMockInternalAccount } from '../../../accounts-controller/tests/mocks.js';
import type {
InternalAccount,
TransactionMeta,
-} from '../../../transaction-controller/src/types';
-import * as calculateDefiMetrics from './calculate-defi-metrics';
-import type { DeFiPositionsControllerMessenger } from './DeFiPositionsController';
+} from '../../../transaction-controller/src/types.js';
+import * as calculateDefiMetrics from './calculate-defi-metrics.js';
+import type { DeFiPositionsControllerMessenger } from './DeFiPositionsController.js';
import {
DeFiPositionsController,
getDefaultDefiPositionsControllerState,
-} from './DeFiPositionsController';
-import * as fetchPositions from './fetch-positions';
-import * as groupDeFiPositions from './group-defi-positions';
+} from './DeFiPositionsController.js';
+import * as fetchPositions from './fetch-positions.js';
+import * as groupDeFiPositions from './group-defi-positions.js';
const GROUP_ACCOUNTS = [
createMockInternalAccount({
diff --git a/packages/assets-controllers/src/DeFiPositionsController/DeFiPositionsController.ts b/packages/assets-controllers/src/DeFiPositionsController/DeFiPositionsController.ts
index 33b33ecc7df..9642fd52a44 100644
--- a/packages/assets-controllers/src/DeFiPositionsController/DeFiPositionsController.ts
+++ b/packages/assets-controllers/src/DeFiPositionsController/DeFiPositionsController.ts
@@ -15,11 +15,11 @@ import { StaticIntervalPollingController } from '@metamask/polling-controller';
import type { TransactionControllerTransactionConfirmedEvent } from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
-import { calculateDeFiPositionMetrics } from './calculate-defi-metrics';
-import type { DefiPositionResponse } from './fetch-positions';
-import { buildPositionFetcher } from './fetch-positions';
-import { groupDeFiPositions } from './group-defi-positions';
-import type { GroupedDeFiPositions } from './group-defi-positions';
+import { calculateDeFiPositionMetrics } from './calculate-defi-metrics.js';
+import type { DefiPositionResponse } from './fetch-positions.js';
+import { buildPositionFetcher } from './fetch-positions.js';
+import { groupDeFiPositions } from './group-defi-positions.js';
+import type { GroupedDeFiPositions } from './group-defi-positions.js';
const TEN_MINUTES_IN_MS = 600_000;
diff --git a/packages/assets-controllers/src/DeFiPositionsController/__fixtures__/mock-responses.ts b/packages/assets-controllers/src/DeFiPositionsController/__fixtures__/mock-responses.ts
index 18b41466da5..94cfdbbeef5 100644
--- a/packages/assets-controllers/src/DeFiPositionsController/__fixtures__/mock-responses.ts
+++ b/packages/assets-controllers/src/DeFiPositionsController/__fixtures__/mock-responses.ts
@@ -1,4 +1,4 @@
-import type { DefiPositionResponse } from '../fetch-positions';
+import type { DefiPositionResponse } from '../fetch-positions.js';
/**
* Entries are from different chains
diff --git a/packages/assets-controllers/src/DeFiPositionsController/__fixtures__/mock-result.ts b/packages/assets-controllers/src/DeFiPositionsController/__fixtures__/mock-result.ts
index 4daf1df0744..3be5588f6f8 100644
--- a/packages/assets-controllers/src/DeFiPositionsController/__fixtures__/mock-result.ts
+++ b/packages/assets-controllers/src/DeFiPositionsController/__fixtures__/mock-result.ts
@@ -1,6 +1,6 @@
import type { Hex } from '@metamask/utils';
-import type { GroupedDeFiPositions } from '../group-defi-positions';
+import type { GroupedDeFiPositions } from '../group-defi-positions.js';
export const MOCK_EXPECTED_RESULT: { [key: Hex]: GroupedDeFiPositions } = {
'0x1': {
diff --git a/packages/assets-controllers/src/DeFiPositionsController/calculate-defi-metrics.test.ts b/packages/assets-controllers/src/DeFiPositionsController/calculate-defi-metrics.test.ts
index 807ca125a0a..cb83e91b9c4 100644
--- a/packages/assets-controllers/src/DeFiPositionsController/calculate-defi-metrics.test.ts
+++ b/packages/assets-controllers/src/DeFiPositionsController/calculate-defi-metrics.test.ts
@@ -1,5 +1,5 @@
-import { MOCK_EXPECTED_RESULT } from './__fixtures__/mock-result';
-import { calculateDeFiPositionMetrics } from './calculate-defi-metrics';
+import { MOCK_EXPECTED_RESULT } from './__fixtures__/mock-result.js';
+import { calculateDeFiPositionMetrics } from './calculate-defi-metrics.js';
describe('groupDeFiPositions', () => {
it('verifies that the resulting object is valid', () => {
diff --git a/packages/assets-controllers/src/DeFiPositionsController/calculate-defi-metrics.ts b/packages/assets-controllers/src/DeFiPositionsController/calculate-defi-metrics.ts
index e01d854db99..82b81752b76 100644
--- a/packages/assets-controllers/src/DeFiPositionsController/calculate-defi-metrics.ts
+++ b/packages/assets-controllers/src/DeFiPositionsController/calculate-defi-metrics.ts
@@ -3,7 +3,7 @@ import type { Hex } from '@metamask/utils';
import type {
GroupedDeFiPositionsPerChain,
TrackingEventPayload,
-} from './DeFiPositionsController';
+} from './DeFiPositionsController.js';
/**
* Calculates the total market value and total positions for a given account
diff --git a/packages/assets-controllers/src/DeFiPositionsController/fetch-positions.test.ts b/packages/assets-controllers/src/DeFiPositionsController/fetch-positions.test.ts
index e9228a070a8..c5ace0d5412 100644
--- a/packages/assets-controllers/src/DeFiPositionsController/fetch-positions.test.ts
+++ b/packages/assets-controllers/src/DeFiPositionsController/fetch-positions.test.ts
@@ -3,7 +3,7 @@ import nock from 'nock';
import {
DEFI_POSITIONS_API_URL,
buildPositionFetcher,
-} from './fetch-positions';
+} from './fetch-positions.js';
describe('fetchPositions', () => {
const mockAccountAddress = '0x1234567890123456789012345678901234567890';
diff --git a/packages/assets-controllers/src/DeFiPositionsController/fetch-positions.ts b/packages/assets-controllers/src/DeFiPositionsController/fetch-positions.ts
index 427ca587081..a6a47b622fc 100644
--- a/packages/assets-controllers/src/DeFiPositionsController/fetch-positions.ts
+++ b/packages/assets-controllers/src/DeFiPositionsController/fetch-positions.ts
@@ -1,4 +1,4 @@
-import { timeoutWithRetry } from '../utils/timeout-with-retry';
+import { timeoutWithRetry } from '../utils/timeout-with-retry.js';
export type DefiPositionResponse = AdapterResponse<{
tokens: ProtocolToken[];
diff --git a/packages/assets-controllers/src/DeFiPositionsController/group-defi-positions.test.ts b/packages/assets-controllers/src/DeFiPositionsController/group-defi-positions.test.ts
index ab3ade89e54..213e705eba5 100644
--- a/packages/assets-controllers/src/DeFiPositionsController/group-defi-positions.test.ts
+++ b/packages/assets-controllers/src/DeFiPositionsController/group-defi-positions.test.ts
@@ -6,9 +6,9 @@ import {
MOCK_DEFI_RESPONSE_FAILED_ENTRY,
MOCK_DEFI_RESPONSE_MULTI_CHAIN,
MOCK_DEFI_RESPONSE_NO_PRICES,
-} from './__fixtures__/mock-responses';
-import { MOCK_EXPECTED_RESULT } from './__fixtures__/mock-result';
-import { groupDeFiPositions } from './group-defi-positions';
+} from './__fixtures__/mock-responses.js';
+import { MOCK_EXPECTED_RESULT } from './__fixtures__/mock-result.js';
+import { groupDeFiPositions } from './group-defi-positions.js';
describe('groupDeFiPositions', () => {
it('groups multiple chains', () => {
diff --git a/packages/assets-controllers/src/DeFiPositionsController/group-defi-positions.ts b/packages/assets-controllers/src/DeFiPositionsController/group-defi-positions.ts
index 16b13b45396..dfef9acc50c 100644
--- a/packages/assets-controllers/src/DeFiPositionsController/group-defi-positions.ts
+++ b/packages/assets-controllers/src/DeFiPositionsController/group-defi-positions.ts
@@ -7,7 +7,7 @@ import type {
ProtocolToken,
Underlying,
Balance,
-} from './fetch-positions';
+} from './fetch-positions.js';
export type GroupedDeFiPositions = {
aggregatedMarketValue: number;
diff --git a/packages/assets-controllers/src/MultichainAssetsController/MultichainAssetsController-method-action-types.ts b/packages/assets-controllers/src/MultichainAssetsController/MultichainAssetsController-method-action-types.ts
index b7c48e83db8..a61cfdcd3e0 100644
--- a/packages/assets-controllers/src/MultichainAssetsController/MultichainAssetsController-method-action-types.ts
+++ b/packages/assets-controllers/src/MultichainAssetsController/MultichainAssetsController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { MultichainAssetsController } from './MultichainAssetsController';
+import type { MultichainAssetsController } from './MultichainAssetsController.js';
/**
* Returns the metadata for the given asset
diff --git a/packages/assets-controllers/src/MultichainAssetsController/MultichainAssetsController.test.ts b/packages/assets-controllers/src/MultichainAssetsController/MultichainAssetsController.test.ts
index f1bcd86cece..0e9e9dc506e 100644
--- a/packages/assets-controllers/src/MultichainAssetsController/MultichainAssetsController.test.ts
+++ b/packages/assets-controllers/src/MultichainAssetsController/MultichainAssetsController.test.ts
@@ -25,16 +25,16 @@ import { TokenScanResultType } from '@metamask/phishing-controller';
import type { Snap } from '@metamask/snaps-utils';
import { v4 as uuidv4 } from 'uuid';
+import { jestAdvanceTime } from '../../../../tests/helpers.js';
import {
getDefaultMultichainAssetsControllerState,
MultichainAssetsController,
-} from '.';
-import { jestAdvanceTime } from '../../../../tests/helpers';
+} from './..js';
import type {
AssetMetadataResponse,
MultichainAssetsControllerMessenger,
MultichainAssetsControllerState,
-} from './MultichainAssetsController';
+} from './MultichainAssetsController.js';
const mockSolanaAccount: InternalAccount = {
type: 'solana:data-account',
diff --git a/packages/assets-controllers/src/MultichainAssetsController/MultichainAssetsController.ts b/packages/assets-controllers/src/MultichainAssetsController/MultichainAssetsController.ts
index 3bd5ee7e12f..df803ad83f1 100644
--- a/packages/assets-controllers/src/MultichainAssetsController/MultichainAssetsController.ts
+++ b/packages/assets-controllers/src/MultichainAssetsController/MultichainAssetsController.ts
@@ -41,8 +41,8 @@ import type { Json, JsonRpcRequest } from '@metamask/utils';
import type { MutexInterface } from 'async-mutex';
import { Mutex } from 'async-mutex';
-import type { MultichainAssetsControllerMethodActions } from './MultichainAssetsController-method-action-types';
-import { getChainIdsCaveat } from './utils';
+import type { MultichainAssetsControllerMethodActions } from './MultichainAssetsController-method-action-types.js';
+import { getChainIdsCaveat } from './utils.js';
const controllerName = 'MultichainAssetsController';
@@ -241,17 +241,17 @@ export class MultichainAssetsController extends StaticIntervalPollingController<
this.messenger.subscribe(
'AccountsController:accountAdded',
- // eslint-disable-next-line @typescript-eslint/no-misused-promises
+
async (account) => await this.#handleOnAccountAddedEvent(account),
);
this.messenger.subscribe(
'AccountsController:accountRemoved',
- // eslint-disable-next-line @typescript-eslint/no-misused-promises
+
async (account) => await this.#handleOnAccountRemovedEvent(account),
);
this.messenger.subscribe(
'AccountsController:accountAssetListUpdated',
- // eslint-disable-next-line @typescript-eslint/no-misused-promises
+
async (event) => await this.#handleAccountAssetListUpdatedEvent(event),
);
@@ -341,9 +341,7 @@ export class MultichainAssetsController extends StaticIntervalPollingController<
].filter((asset) => !assetsToIgnore.includes(asset));
}
- if (!state.allIgnoredAssets[accountId]) {
- state.allIgnoredAssets[accountId] = [];
- }
+ state.allIgnoredAssets[accountId] ??= [];
const newIgnoredAssets = assetsToIgnore.filter(
(asset) => !state.allIgnoredAssets[accountId].includes(asset),
@@ -366,7 +364,7 @@ export class MultichainAssetsController extends StaticIntervalPollingController<
accountId: string,
): Promise {
if (assetIds.length === 0) {
- return this.state.accountsAssets[accountId] || [];
+ return this.state.accountsAssets[accountId] ?? [];
}
// Validate that all assets are from the same chain
@@ -387,9 +385,7 @@ export class MultichainAssetsController extends StaticIntervalPollingController<
this.update((state) => {
// Initialize account assets if it doesn't exist
- if (!state.accountsAssets[accountId]) {
- state.accountsAssets[accountId] = [];
- }
+ state.accountsAssets[accountId] ??= [];
// Add assets if they don't already exist
for (const assetId of assetIds) {
@@ -424,7 +420,7 @@ export class MultichainAssetsController extends StaticIntervalPollingController<
});
}
- return this.state.accountsAssets[accountId] || [];
+ return this.state.accountsAssets[accountId] ?? [];
});
}
@@ -457,7 +453,7 @@ export class MultichainAssetsController extends StaticIntervalPollingController<
event.assets,
)) {
if (added.length > 0 || removed.length > 0) {
- const existing = this.state.accountsAssets[accountId] || [];
+ const existing = this.state.accountsAssets[accountId] ?? [];
// In case accountsAndAssetsToUpdate event is fired with "added" assets that already exist, we don't want to add them again
// Also filter out ignored assets
@@ -504,7 +500,7 @@ export class MultichainAssetsController extends StaticIntervalPollingController<
accountsAndAssetsToUpdate,
)) {
const assets = new Set([
- ...(state.accountsAssets[accountId] || []),
+ ...(state.accountsAssets[accountId] ?? []),
...added,
]);
for (const asset of removed) {
diff --git a/packages/assets-controllers/src/MultichainAssetsController/index.ts b/packages/assets-controllers/src/MultichainAssetsController/index.ts
index 2ad53646897..ed9c95ea52b 100644
--- a/packages/assets-controllers/src/MultichainAssetsController/index.ts
+++ b/packages/assets-controllers/src/MultichainAssetsController/index.ts
@@ -1,7 +1,7 @@
export {
MultichainAssetsController,
getDefaultMultichainAssetsControllerState,
-} from './MultichainAssetsController';
+} from './MultichainAssetsController.js';
export type {
MultichainAssetsControllerState,
@@ -11,9 +11,9 @@ export type {
MultichainAssetsControllerMessenger,
MultichainAssetsControllerAccountAssetListUpdatedEvent,
MultichainAssetsControllerEvents,
-} from './MultichainAssetsController';
+} from './MultichainAssetsController.js';
export type {
MultichainAssetsControllerGetAssetMetadataAction,
MultichainAssetsControllerIgnoreAssetsAction,
MultichainAssetsControllerAddAssetsAction,
-} from './MultichainAssetsController-method-action-types';
+} from './MultichainAssetsController-method-action-types.js';
diff --git a/packages/assets-controllers/src/MultichainAssetsController/utils.ts b/packages/assets-controllers/src/MultichainAssetsController/utils.ts
index 1b7e2323341..57199fdd213 100644
--- a/packages/assets-controllers/src/MultichainAssetsController/utils.ts
+++ b/packages/assets-controllers/src/MultichainAssetsController/utils.ts
@@ -1,7 +1,4 @@
-import type {
- Caveat,
- PermissionConstraint,
-} from '@metamask/permission-controller';
+import type { PermissionConstraint } from '@metamask/permission-controller';
import { SnapCaveatType } from '@metamask/snaps-utils';
// TODO: this is a duplicate of https://github.com/MetaMask/snaps/blob/362208e725db18baed550ade99087d44e7b537ed/packages/snaps-rpc-methods/src/endowments/name-lookup.ts#L151
@@ -26,7 +23,7 @@ export function getChainIdsCaveat(
const caveat = permission.caveats.find(
(permCaveat) => permCaveat.type === SnapCaveatType.ChainIds,
- ) as Caveat | undefined;
+ );
return caveat ? caveat.value : null;
}
diff --git a/packages/assets-controllers/src/MultichainAssetsRatesController/MultichainAssetsRatesController-method-action-types.ts b/packages/assets-controllers/src/MultichainAssetsRatesController/MultichainAssetsRatesController-method-action-types.ts
index 2d79438d0d2..1da91b94023 100644
--- a/packages/assets-controllers/src/MultichainAssetsRatesController/MultichainAssetsRatesController-method-action-types.ts
+++ b/packages/assets-controllers/src/MultichainAssetsRatesController/MultichainAssetsRatesController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { MultichainAssetsRatesController } from './MultichainAssetsRatesController';
+import type { MultichainAssetsRatesController } from './MultichainAssetsRatesController.js';
/**
* Updates token conversion rates for each non-EVM account.
diff --git a/packages/assets-controllers/src/MultichainAssetsRatesController/MultichainAssetsRatesController.test.ts b/packages/assets-controllers/src/MultichainAssetsRatesController/MultichainAssetsRatesController.test.ts
index e95dab33774..527f3bcb884 100644
--- a/packages/assets-controllers/src/MultichainAssetsRatesController/MultichainAssetsRatesController.test.ts
+++ b/packages/assets-controllers/src/MultichainAssetsRatesController/MultichainAssetsRatesController.test.ts
@@ -15,9 +15,9 @@ import type {
import type { OnAssetHistoricalPriceResponse } from '@metamask/snaps-sdk';
import { v4 as uuidv4 } from 'uuid';
-import { MultichainAssetsRatesController } from '.';
-import { jestAdvanceTime } from '../../../../tests/helpers';
-import type { MultichainAssetsRatesControllerMessenger } from './MultichainAssetsRatesController';
+import { jestAdvanceTime } from '../../../../tests/helpers.js';
+import { MultichainAssetsRatesController } from './..js';
+import type { MultichainAssetsRatesControllerMessenger } from './MultichainAssetsRatesController.js';
type AllMultichainAssetsRateControllerActions =
MessengerActions;
diff --git a/packages/assets-controllers/src/MultichainAssetsRatesController/MultichainAssetsRatesController.ts b/packages/assets-controllers/src/MultichainAssetsRatesController/MultichainAssetsRatesController.ts
index 5e75427b48d..60104383350 100644
--- a/packages/assets-controllers/src/MultichainAssetsRatesController/MultichainAssetsRatesController.ts
+++ b/packages/assets-controllers/src/MultichainAssetsRatesController/MultichainAssetsRatesController.ts
@@ -38,13 +38,13 @@ import type {
CurrencyRateState,
CurrencyRateStateChange,
CurrencyRateControllerGetStateAction,
-} from '../CurrencyRateController';
+} from '../CurrencyRateController.js';
import type {
MultichainAssetsControllerGetStateAction,
MultichainAssetsControllerAccountAssetListUpdatedEvent,
-} from '../MultichainAssetsController';
-import { MAP_CAIP_CURRENCIES } from './constant';
-import type { MultichainAssetsRatesControllerMethodActions } from './MultichainAssetsRatesController-method-action-types';
+} from '../MultichainAssetsController.js';
+import { MAP_CAIP_CURRENCIES } from './constant.js';
+import type { MultichainAssetsRatesControllerMethodActions } from './MultichainAssetsRatesController-method-action-types.js';
/**
* The name of the MultichainAssetsRatesController.
@@ -263,7 +263,7 @@ export class MultichainAssetsRatesController extends StaticIntervalPollingContro
this.messenger.subscribe(
'CurrencyRateController:stateChange',
- // eslint-disable-next-line @typescript-eslint/no-misused-promises
+
async (currentCurrency: string) => {
if (this.#isDeprecated()) {
this.#enforceDisabledState();
@@ -278,7 +278,7 @@ export class MultichainAssetsRatesController extends StaticIntervalPollingContro
this.messenger.subscribe(
'MultichainAssetsController:accountAssetListUpdated',
- // eslint-disable-next-line @typescript-eslint/no-misused-promises
+
async ({ assets }) => {
if (this.#isDeprecated()) {
this.#enforceDisabledState();
diff --git a/packages/assets-controllers/src/MultichainAssetsRatesController/index.ts b/packages/assets-controllers/src/MultichainAssetsRatesController/index.ts
index c285191f15f..ea14145b845 100644
--- a/packages/assets-controllers/src/MultichainAssetsRatesController/index.ts
+++ b/packages/assets-controllers/src/MultichainAssetsRatesController/index.ts
@@ -5,14 +5,14 @@ export type {
MultichainAssetsRatesControllerGetStateAction,
MultichainAssetsRatesControllerStateChange,
MultichainAssetsRatesControllerMessenger,
-} from './MultichainAssetsRatesController';
+} from './MultichainAssetsRatesController.js';
export type {
MultichainAssetsRatesControllerUpdateAssetsRatesAction,
MultichainAssetsRatesControllerFetchHistoricalPricesForAssetAction,
-} from './MultichainAssetsRatesController-method-action-types';
+} from './MultichainAssetsRatesController-method-action-types.js';
export {
MultichainAssetsRatesController,
getDefaultMultichainAssetsRatesControllerState,
-} from './MultichainAssetsRatesController';
-export { MAP_CAIP_CURRENCIES } from './constant';
+} from './MultichainAssetsRatesController.js';
+export { MAP_CAIP_CURRENCIES } from './constant.js';
diff --git a/packages/assets-controllers/src/MultichainBalancesController/MultichainBalancesController.test.ts b/packages/assets-controllers/src/MultichainBalancesController/MultichainBalancesController.test.ts
index d49b10494ec..4e13a4f5ff6 100644
--- a/packages/assets-controllers/src/MultichainBalancesController/MultichainBalancesController.test.ts
+++ b/packages/assets-controllers/src/MultichainBalancesController/MultichainBalancesController.test.ts
@@ -21,12 +21,12 @@ import type {
} from '@metamask/messenger';
import { v4 as uuidv4 } from 'uuid';
-import { MultichainBalancesController } from '.';
+import { MultichainBalancesController } from './..js';
import type {
MultichainBalancesControllerMessenger,
MultichainBalancesControllerState,
-} from '.';
-import { getDefaultMultichainBalancesControllerState } from './MultichainBalancesController';
+} from './..js';
+import { getDefaultMultichainBalancesControllerState } from './MultichainBalancesController.js';
const mockBtcAccount = {
address: 'bc1qssdcp5kvwh6nghzg9tuk99xsflwkdv4hgvq58q',
diff --git a/packages/assets-controllers/src/MultichainBalancesController/MultichainBalancesController.ts b/packages/assets-controllers/src/MultichainBalancesController/MultichainBalancesController.ts
index 6887d98c235..5f79d0e89f6 100644
--- a/packages/assets-controllers/src/MultichainBalancesController/MultichainBalancesController.ts
+++ b/packages/assets-controllers/src/MultichainBalancesController/MultichainBalancesController.ts
@@ -29,7 +29,7 @@ import type { Draft } from 'immer';
import type {
MultichainAssetsControllerGetStateAction,
MultichainAssetsControllerAccountAssetListUpdatedEvent,
-} from '../MultichainAssetsController';
+} from '../MultichainAssetsController.js';
const controllerName = 'MultichainBalancesController';
@@ -183,7 +183,7 @@ export class MultichainBalancesController extends BaseController<
// Fetch initial balances for all non-EVM accounts
for (const account of this.#listAccounts()) {
// Fetching the balance is asynchronous and we cannot use `await` here.
- // eslint-disable-next-line no-void
+
void this.updateBalance(account.id);
}
}
@@ -200,7 +200,7 @@ export class MultichainBalancesController extends BaseController<
this.messenger.subscribe(
'MultichainAssetsController:accountAssetListUpdated',
- // eslint-disable-next-line @typescript-eslint/no-misused-promises
+
async ({ assets }) => {
const updatedAccountAssets = Object.entries(assets).map(
([accountId, { added, removed }]) => ({
diff --git a/packages/assets-controllers/src/MultichainBalancesController/index.ts b/packages/assets-controllers/src/MultichainBalancesController/index.ts
index 7e7b30a0950..174fb14bc87 100644
--- a/packages/assets-controllers/src/MultichainBalancesController/index.ts
+++ b/packages/assets-controllers/src/MultichainBalancesController/index.ts
@@ -1,4 +1,4 @@
-export { MultichainBalancesController } from './MultichainBalancesController';
+export { MultichainBalancesController } from './MultichainBalancesController.js';
export type {
MultichainBalancesControllerState,
MultichainBalancesControllerGetStateAction,
@@ -6,4 +6,4 @@ export type {
MultichainBalancesControllerActions,
MultichainBalancesControllerEvents,
MultichainBalancesControllerMessenger,
-} from './MultichainBalancesController';
+} from './MultichainBalancesController.js';
diff --git a/packages/assets-controllers/src/NftController.test.ts b/packages/assets-controllers/src/NftController.test.ts
index 633d2faa894..1b27a1a0248 100644
--- a/packages/assets-controllers/src/NftController.test.ts
+++ b/packages/assets-controllers/src/NftController.test.ts
@@ -40,31 +40,31 @@ import type { Hex } from '@metamask/utils';
import nock from 'nock';
import { v4 } from 'uuid';
-import { createMockInternalAccount } from '../../accounts-controller/tests/mocks';
+import { createMockInternalAccount } from '../../accounts-controller/tests/mocks.js';
import {
buildCustomNetworkClientConfiguration,
buildMockFindNetworkClientIdByChainId,
buildMockGetNetworkClientById,
-} from '../../network-controller/tests/helpers';
+} from '../../network-controller/tests/helpers.js';
import type {
AssetsContractControllerGetERC1155TokenURIAction,
AssetsContractControllerGetERC721AssetNameAction,
AssetsContractControllerGetERC721AssetSymbolAction,
AssetsContractControllerGetERC721TokenURIAction,
-} from './AssetsContractController';
-import { getFormattedIpfsUrl } from './assetsUtil';
-import { Source } from './constants';
-import type { NftOwnershipResult } from './multicall';
-import { getNftOwnershipForMultipleNfts } from './multicall';
+} from './AssetsContractController.js';
+import { getFormattedIpfsUrl } from './assetsUtil.js';
+import { Source } from './constants.js';
+import type { NftOwnershipResult } from './multicall.js';
+import { getNftOwnershipForMultipleNfts } from './multicall.js';
import type {
Nft,
NftControllerState,
NftControllerMessenger,
NFTStandardType,
NftMetadata,
-} from './NftController';
-import { NftController } from './NftController';
-import type { Collection } from './NftDetectionController';
+} from './NftController.js';
+import { NftController } from './NftController.js';
+import type { Collection } from './NftDetectionController.js';
type AllActions =
| MessengerActions
@@ -1183,8 +1183,8 @@ describe('NftController', () => {
});
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
- nftController.watchNft(
+
+ void nftController.watchNft(
ERC721_NFT,
ERC721,
'https://etherscan.io',
@@ -1198,7 +1198,7 @@ describe('NftController', () => {
// now accept the request
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
+
approvalController.acceptRequest(requestId);
await acceptedRequest;
@@ -1289,8 +1289,8 @@ describe('NftController', () => {
});
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
- nftController.watchNft(
+
+ void nftController.watchNft(
ERC721_NFT,
ERC721,
'https://etherscan.io',
@@ -1310,7 +1310,7 @@ describe('NftController', () => {
});
// now accept the request
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
+
approvalController.acceptRequest(requestId);
await acceptedRequest;
diff --git a/packages/assets-controllers/src/NftController.ts b/packages/assets-controllers/src/NftController.ts
index 5c4e9649b75..76523cd8bad 100644
--- a/packages/assets-controllers/src/NftController.ts
+++ b/packages/assets-controllers/src/NftController.ts
@@ -49,16 +49,16 @@ import type {
AssetsContractControllerGetERC721AssetNameAction,
AssetsContractControllerGetERC721AssetSymbolAction,
AssetsContractControllerGetERC721TokenURIAction,
-} from './AssetsContractController-method-action-types';
+} from './AssetsContractController-method-action-types.js';
import {
compareNftMetadata,
getFormattedIpfsUrl,
hasNewCollectionFields,
reduceInBatchesSerially,
-} from './assetsUtil';
-import { Source } from './constants';
-import { getNftOwnershipForMultipleNfts } from './multicall';
-import type { NftOwnershipResult } from './multicall';
+} from './assetsUtil.js';
+import { Source } from './constants.js';
+import { getNftOwnershipForMultipleNfts } from './multicall.js';
+import type { NftOwnershipResult } from './multicall.js';
import type {
ApiNftContract,
ReservoirResponse,
@@ -66,7 +66,7 @@ import type {
Attributes,
LastSale,
TopBid,
-} from './NftDetectionController';
+} from './NftDetectionController.js';
export type NFTStandardType = 'ERC721' | 'ERC1155';
@@ -458,7 +458,7 @@ export class NftController extends BaseController<
);
this.#selectedAccountId = selectedAccount.id;
- const newDisplayNftMedia = Boolean(displayNftMedia || openSeaEnabled);
+ const newDisplayNftMedia = Boolean(displayNftMedia ?? openSeaEnabled);
// Get current state values
if (
@@ -529,7 +529,7 @@ export class NftController extends BaseController<
this.update((state) => {
const oldState = state[baseStateKey];
- const addressState = oldState[userAddress] || {};
+ const addressState = oldState[userAddress] ?? {};
const newAddressState = {
...addressState,
[chainId]: newCollection,
@@ -603,9 +603,9 @@ export class NftController extends BaseController<
/* istanbul ignore next */
const nftMetadata: NftMetadata = Object.assign(
{},
- { name: name || null },
- { description: description || null },
- { image: image || null },
+ { name: name ?? null },
+ { description: description ?? null },
+ { image: image ?? null },
collection?.creator && { creator: collection.creator },
imageOriginal && { imageOriginal },
imageSmall && { imageThumbnail: imageSmall },
@@ -886,7 +886,7 @@ export class NftController extends BaseController<
const releaseLock = await this.#mutex.acquire();
try {
const { allNfts } = this.state;
- const allNftsForUser = allNfts[userAddress] || {};
+ const allNftsForUser = allNfts[userAddress] ?? {};
const allNftsForUserPerChain: {
[chainId: `0x${string}`]: Nft[];
} = {};
@@ -1015,7 +1015,7 @@ export class NftController extends BaseController<
const releaseLock = await this.#mutex.acquire();
try {
const { allNftContracts } = this.state;
- const allNftContractsForUser = allNftContracts[userAddress] || {};
+ const allNftContractsForUser = allNftContracts[userAddress] ?? {};
const nftContractsForUserPerChain: {
[chainId: `0x${string}`]: NftContract[];
} = {};
@@ -1149,7 +1149,7 @@ export class NftController extends BaseController<
const checksumHexAddress = toChecksumHexAddress(address);
const { allNfts, ignoredNfts } = this.state;
const newIgnoredNfts = [...ignoredNfts];
- const nfts = allNfts[userAddress]?.[chainId] || [];
+ const nfts = allNfts[userAddress]?.[chainId] ?? [];
const newNfts = nfts.filter((nft) => {
if (
nft.address.toLowerCase() === checksumHexAddress.toLowerCase() &&
@@ -1190,7 +1190,7 @@ export class NftController extends BaseController<
): void {
const checksumHexAddress = toChecksumHexAddress(address);
const { allNfts } = this.state;
- const nfts = allNfts[userAddress]?.[chainId] || [];
+ const nfts = allNfts[userAddress]?.[chainId] ?? [];
const newNfts = nfts.filter(
(nft) =>
!(
@@ -1219,7 +1219,7 @@ export class NftController extends BaseController<
): NftContract[] {
const checksumHexAddress = toChecksumHexAddress(address);
const { allNftContracts } = this.state;
- const nftContracts = allNftContracts[userAddress]?.[chainId] || [];
+ const nftContracts = allNftContracts[userAddress]?.[chainId] ?? [];
const newNftContracts = nftContracts.filter(
(nftContract) =>
@@ -1250,7 +1250,6 @@ export class NftController extends BaseController<
if (type !== ERC721 && type !== ERC1155) {
throw rpcErrors.invalidParams(
- // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
`Non NFT asset type ${type} not supported by watchNft`,
);
}
@@ -1526,9 +1525,7 @@ export class NftController extends BaseController<
// This is the case when the NFT is added manually and not detected automatically
// TODO: An improvement would be to make the chainId a required field and return it when getting the NFT information
- if (!nftMetadata.chainId) {
- nftMetadata.chainId = convertHexToDecimal(chainId);
- }
+ nftMetadata.chainId ??= convertHexToDecimal(chainId);
if (nftContract) {
await this.#addMultipleNfts(addressToSearch, [
@@ -1796,7 +1793,7 @@ export class NftController extends BaseController<
userAddress: addressToSearch,
});
const { allNfts } = this.state;
- const nfts = allNfts[addressToSearch]?.[chainId] || [];
+ const nfts = allNfts[addressToSearch]?.[chainId] ?? [];
const remainingNft = nfts.find(
(nft) => nft.address.toLowerCase() === checksumHexAddress.toLowerCase(),
);
@@ -1837,7 +1834,7 @@ export class NftController extends BaseController<
userAddress: addressToSearch,
});
const { allNfts } = this.state;
- const nfts = allNfts[addressToSearch]?.[chainId] || [];
+ const nfts = allNfts[addressToSearch]?.[chainId] ?? [];
const remainingNft = nfts.find(
(nft) => nft.address.toLowerCase() === checksumHexAddress.toLowerCase(),
);
@@ -1944,7 +1941,7 @@ export class NftController extends BaseController<
);
const { chainId } = client.configuration;
const { allNfts } = this.state;
- const nfts = allNfts[addressToSearch]?.[chainId] || [];
+ const nfts = allNfts[addressToSearch]?.[chainId] ?? [];
if (nfts.length === 0) {
return;
@@ -2008,7 +2005,7 @@ export class NftController extends BaseController<
networkClientId,
);
const { allNfts } = this.state;
- const nfts = [...(allNfts[addressToSearch]?.[chainId] || [])];
+ const nfts = [...(allNfts[addressToSearch]?.[chainId] ?? [])];
const index: number = nfts.findIndex(
(nft) => nft.address === address && nft.tokenId === tokenId,
);
@@ -2047,7 +2044,7 @@ export class NftController extends BaseController<
chainId: Hex,
): { nft: Nft; index: number } | null {
const { allNfts } = this.state;
- const nfts = allNfts[selectedAddress]?.[chainId] || [];
+ const nfts = allNfts[selectedAddress]?.[chainId] ?? [];
const index: number = nfts.findIndex(
(nft) =>
nft.address.toLowerCase() === address.toLowerCase() &&
@@ -2076,7 +2073,7 @@ export class NftController extends BaseController<
chainId: Hex,
): void {
const { allNfts } = this.state;
- const nfts = allNfts[selectedAddress]?.[chainId] || [];
+ const nfts = allNfts[selectedAddress]?.[chainId] ?? [];
const nftInfo = this.findNftByAddressAndTokenId(
nft.address,
nft.tokenId,
@@ -2118,7 +2115,7 @@ export class NftController extends BaseController<
chainId: Hex,
): boolean {
const { allNfts } = this.state;
- const nfts = allNfts[selectedAddress]?.[chainId] || [];
+ const nfts = allNfts[selectedAddress]?.[chainId] ?? [];
const index: number = nfts.findIndex(
(nft) => nft.transactionId === transactionId,
);
@@ -2179,7 +2176,7 @@ export class NftController extends BaseController<
'AccountsController:getAccount',
this.#selectedAccountId,
);
- return selectedAccount?.address || '';
+ return selectedAccount?.address ?? '';
}
/**
@@ -2191,7 +2188,7 @@ export class NftController extends BaseController<
async #updateNftUpdateForAccount(account: InternalAccount): Promise {
// get all nfts for the account for all chains
const nfts: Nft[] = Object.values(
- this.state.allNfts[account.address] || {},
+ this.state.allNfts[account.address] ?? {},
).flat();
// Filter only nfts
diff --git a/packages/assets-controllers/src/NftDetectionController.test.ts b/packages/assets-controllers/src/NftDetectionController.test.ts
index d5320438001..b6514c37863 100644
--- a/packages/assets-controllers/src/NftDetectionController.test.ts
+++ b/packages/assets-controllers/src/NftDetectionController.test.ts
@@ -25,21 +25,21 @@ import { getDefaultPreferencesState } from '@metamask/preferences-controller';
import type { PreferencesState } from '@metamask/preferences-controller';
import nock from 'nock';
-import { FakeBlockTracker } from '../../../tests/fake-block-tracker';
-import { FakeProvider } from '../../../tests/fake-provider';
-import { jestAdvanceTime } from '../../../tests/helpers';
-import { createMockInternalAccount } from '../../accounts-controller/tests/mocks';
+import { FakeBlockTracker } from '../../../tests/fake-block-tracker.js';
+import { FakeProvider } from '../../../tests/fake-provider.js';
+import { jestAdvanceTime } from '../../../tests/helpers.js';
+import { createMockInternalAccount } from '../../accounts-controller/tests/mocks.js';
import {
buildMockFindNetworkClientIdByChainId,
buildMockGetNetworkClientById,
-} from '../../network-controller/tests/helpers';
-import { Source } from './constants';
-import { getDefaultNftControllerState } from './NftController';
+} from '../../network-controller/tests/helpers.js';
+import { Source } from './constants.js';
+import { getDefaultNftControllerState } from './NftController.js';
import {
NftDetectionController,
BlockaidResultType,
-} from './NftDetectionController';
-import type { NftDetectionControllerMessenger } from './NftDetectionController';
+} from './NftDetectionController.js';
+import type { NftDetectionControllerMessenger } from './NftDetectionController.js';
type AllActions = MessengerActions;
diff --git a/packages/assets-controllers/src/NftDetectionController.ts b/packages/assets-controllers/src/NftDetectionController.ts
index bb67ab5d562..a2c508d221a 100644
--- a/packages/assets-controllers/src/NftDetectionController.ts
+++ b/packages/assets-controllers/src/NftDetectionController.ts
@@ -29,12 +29,12 @@ import type {
import { createDeferredPromise } from '@metamask/utils';
import type { Hex } from '@metamask/utils';
-import { Source } from './constants';
+import { Source } from './constants.js';
import type {
NftController,
NftControllerState,
NftMetadata,
-} from './NftController';
+} from './NftController.js';
const controllerName = 'NftDetectionController';
diff --git a/packages/assets-controllers/src/RatesController/RatesController.test.ts b/packages/assets-controllers/src/RatesController/RatesController.test.ts
index e7d4d007058..3d73a4bbfb9 100644
--- a/packages/assets-controllers/src/RatesController/RatesController.test.ts
+++ b/packages/assets-controllers/src/RatesController/RatesController.test.ts
@@ -6,14 +6,17 @@ import type {
MockAnyNamespace,
} from '@metamask/messenger';
-import { jestAdvanceTime } from '../../../../tests/helpers';
-import type { fetchMultiExchangeRate as defaultFetchExchangeRate } from '../crypto-compare-service';
+import { jestAdvanceTime } from '../../../../tests/helpers.js';
+import type { fetchMultiExchangeRate as defaultFetchExchangeRate } from '../crypto-compare-service.js';
import {
Cryptocurrency,
RatesController,
name as ratesControllerName,
-} from './RatesController';
-import type { RatesControllerMessenger, RatesControllerState } from './types';
+} from './RatesController.js';
+import type {
+ RatesControllerMessenger,
+ RatesControllerState,
+} from './types.js';
type AllActions = MessengerActions;
diff --git a/packages/assets-controllers/src/RatesController/RatesController.ts b/packages/assets-controllers/src/RatesController/RatesController.ts
index 20da17925b8..dbf0dea6df5 100644
--- a/packages/assets-controllers/src/RatesController/RatesController.ts
+++ b/packages/assets-controllers/src/RatesController/RatesController.ts
@@ -3,13 +3,13 @@ import type { StateMetadata } from '@metamask/base-controller';
import { Mutex } from 'async-mutex';
import type { Draft } from 'immer';
-import { fetchMultiExchangeRate as defaultFetchExchangeRate } from '../crypto-compare-service';
+import { fetchMultiExchangeRate as defaultFetchExchangeRate } from '../crypto-compare-service.js';
import type {
ConversionRates,
RatesControllerState,
RatesControllerOptions,
RatesControllerMessenger,
-} from './types';
+} from './types.js';
export const name = 'RatesController';
diff --git a/packages/assets-controllers/src/RatesController/index.ts b/packages/assets-controllers/src/RatesController/index.ts
index bf1a078eb2e..2b4e42f5636 100644
--- a/packages/assets-controllers/src/RatesController/index.ts
+++ b/packages/assets-controllers/src/RatesController/index.ts
@@ -1,4 +1,4 @@
-export { RatesController, Cryptocurrency } from './RatesController';
+export { RatesController, Cryptocurrency } from './RatesController.js';
export type {
RatesControllerState,
RatesControllerEvents,
@@ -8,4 +8,4 @@ export type {
RatesControllerStateChangeEvent,
RatesControllerPollingStartedEvent,
RatesControllerPollingStoppedEvent,
-} from './types';
+} from './types.js';
diff --git a/packages/assets-controllers/src/RatesController/types.ts b/packages/assets-controllers/src/RatesController/types.ts
index 49c5515391b..6b61c0faf4b 100644
--- a/packages/assets-controllers/src/RatesController/types.ts
+++ b/packages/assets-controllers/src/RatesController/types.ts
@@ -4,11 +4,11 @@ import type {
} from '@metamask/base-controller';
import type { Messenger } from '@metamask/messenger';
-import type { fetchMultiExchangeRate as defaultFetchExchangeRate } from '../crypto-compare-service';
+import type { fetchMultiExchangeRate as defaultFetchExchangeRate } from '../crypto-compare-service.js';
import type {
name as ratesControllerName,
Cryptocurrency,
-} from './RatesController';
+} from './RatesController.js';
/**
* Represents the conversion rates from one currency to others, including the conversion date.
diff --git a/packages/assets-controllers/src/Standards/ERC20Standard.test.ts b/packages/assets-controllers/src/Standards/ERC20Standard.test.ts
index db16b75fba0..a681dc9350e 100644
--- a/packages/assets-controllers/src/Standards/ERC20Standard.test.ts
+++ b/packages/assets-controllers/src/Standards/ERC20Standard.test.ts
@@ -3,7 +3,7 @@ import HttpProvider from '@metamask/ethjs-provider-http';
import BN from 'bn.js';
import nock from 'nock';
-import { ERC20Standard } from './ERC20Standard';
+import { ERC20Standard } from './ERC20Standard.js';
const MAINNET_PROVIDER_HTTP = new HttpProvider(
'https://mainnet.infura.io/v3/341eacb578dd44a1a049cbc5f6fd4035',
diff --git a/packages/assets-controllers/src/Standards/ERC20Standard.ts b/packages/assets-controllers/src/Standards/ERC20Standard.ts
index 05df1933f12..b33e37ea823 100644
--- a/packages/assets-controllers/src/Standards/ERC20Standard.ts
+++ b/packages/assets-controllers/src/Standards/ERC20Standard.ts
@@ -7,7 +7,7 @@ import { abiERC20 } from '@metamask/metamask-eth-abis';
import { assertIsStrictHexString, hexToBytes } from '@metamask/utils';
import type BN from 'bn.js';
-import { ethersBigNumberToBN } from '../assetsUtil';
+import { ethersBigNumberToBN } from '../assetsUtil.js';
export class ERC20Standard {
private readonly provider: Web3Provider;
diff --git a/packages/assets-controllers/src/Standards/NftStandards/ERC1155/ERC1155Standard.test.ts b/packages/assets-controllers/src/Standards/NftStandards/ERC1155/ERC1155Standard.test.ts
index d35857522a2..d5d5429118c 100644
--- a/packages/assets-controllers/src/Standards/NftStandards/ERC1155/ERC1155Standard.test.ts
+++ b/packages/assets-controllers/src/Standards/NftStandards/ERC1155/ERC1155Standard.test.ts
@@ -2,7 +2,7 @@ import { Web3Provider } from '@ethersproject/providers';
import HttpProvider from '@metamask/ethjs-provider-http';
import nock from 'nock';
-import { ERC1155Standard } from './ERC1155Standard';
+import { ERC1155Standard } from './ERC1155Standard.js';
const MAINNET_PROVIDER_HTTP = new HttpProvider(
'https://mainnet.infura.io/v3/341eacb578dd44a1a049cbc5f6fd4035',
diff --git a/packages/assets-controllers/src/Standards/NftStandards/ERC1155/ERC1155Standard.ts b/packages/assets-controllers/src/Standards/NftStandards/ERC1155/ERC1155Standard.ts
index d11b7eb84a4..1961a3498ce 100644
--- a/packages/assets-controllers/src/Standards/NftStandards/ERC1155/ERC1155Standard.ts
+++ b/packages/assets-controllers/src/Standards/NftStandards/ERC1155/ERC1155Standard.ts
@@ -11,7 +11,10 @@ import {
import { abiERC1155 } from '@metamask/metamask-eth-abis';
import type * as BN from 'bn.js';
-import { getFormattedIpfsUrl, ethersBigNumberToBN } from '../../../assetsUtil';
+import {
+ getFormattedIpfsUrl,
+ ethersBigNumberToBN,
+} from '../../../assetsUtil.js';
export class ERC1155Standard {
private readonly provider: Web3Provider;
diff --git a/packages/assets-controllers/src/Standards/NftStandards/ERC721/ERC721Standard.test.ts b/packages/assets-controllers/src/Standards/NftStandards/ERC721/ERC721Standard.test.ts
index 19fe58346f2..b2c171a8a69 100644
--- a/packages/assets-controllers/src/Standards/NftStandards/ERC721/ERC721Standard.test.ts
+++ b/packages/assets-controllers/src/Standards/NftStandards/ERC721/ERC721Standard.test.ts
@@ -3,7 +3,7 @@ import { IPFS_DEFAULT_GATEWAY_URL } from '@metamask/controller-utils';
import HttpProvider from '@metamask/ethjs-provider-http';
import nock from 'nock';
-import { ERC721Standard } from './ERC721Standard';
+import { ERC721Standard } from './ERC721Standard.js';
const MAINNET_PROVIDER_HTTP = new HttpProvider(
'https://mainnet.infura.io/v3/341eacb578dd44a1a049cbc5f6fd4035',
diff --git a/packages/assets-controllers/src/Standards/NftStandards/ERC721/ERC721Standard.ts b/packages/assets-controllers/src/Standards/NftStandards/ERC721/ERC721Standard.ts
index 48b84612a69..e9fbd51c607 100644
--- a/packages/assets-controllers/src/Standards/NftStandards/ERC721/ERC721Standard.ts
+++ b/packages/assets-controllers/src/Standards/NftStandards/ERC721/ERC721Standard.ts
@@ -10,7 +10,7 @@ import {
} from '@metamask/controller-utils';
import { abiERC721 } from '@metamask/metamask-eth-abis';
-import { getFormattedIpfsUrl } from '../../../assetsUtil';
+import { getFormattedIpfsUrl } from '../../../assetsUtil.js';
export class ERC721Standard {
private readonly provider: Web3Provider;
diff --git a/packages/assets-controllers/src/TokenBalancesController-method-action-types.ts b/packages/assets-controllers/src/TokenBalancesController-method-action-types.ts
index e554dc72771..c6e79d8c62a 100644
--- a/packages/assets-controllers/src/TokenBalancesController-method-action-types.ts
+++ b/packages/assets-controllers/src/TokenBalancesController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { TokenBalancesController } from './TokenBalancesController';
+import type { TokenBalancesController } from './TokenBalancesController.js';
export type TokenBalancesControllerGetChainPollingConfigAction = {
type: `TokenBalancesController:getChainPollingConfig`;
diff --git a/packages/assets-controllers/src/TokenBalancesController.test.ts b/packages/assets-controllers/src/TokenBalancesController.test.ts
index 56656ee144c..424c5018245 100644
--- a/packages/assets-controllers/src/TokenBalancesController.test.ts
+++ b/packages/assets-controllers/src/TokenBalancesController.test.ts
@@ -16,14 +16,14 @@ import type { Hex } from '@metamask/utils';
import BN from 'bn.js';
import type nock from 'nock';
-import { jestAdvanceTime, flushPromises } from '../../../tests/helpers';
-import { createMockInternalAccount } from '../../accounts-controller/tests/mocks';
-import type { RpcEndpoint } from '../../network-controller/src/NetworkController';
-import { mockAPI_accountsAPI_MultichainAccountBalances as mockAPIAccountsAPIMultichainAccountBalancesCamelCase } from './__fixtures__/account-api-v4-mocks';
-import { waitFor } from './__fixtures__/test-utils';
-import { AccountsApiBalanceFetcher } from './multi-chain-accounts-service/api-balance-fetcher';
-import * as multicall from './multicall';
-import { RpcBalanceFetcher } from './rpc-service/rpc-balance-fetcher';
+import { jestAdvanceTime, flushPromises } from '../../../tests/helpers.js';
+import { createMockInternalAccount } from '../../accounts-controller/tests/mocks.js';
+import type { RpcEndpoint } from '../../network-controller/src/NetworkController.js';
+import { mockAPI_accountsAPI_MultichainAccountBalances as mockAPIAccountsAPIMultichainAccountBalancesCamelCase } from './__fixtures__/account-api-v4-mocks.js';
+import { waitFor } from './__fixtures__/test-utils.js';
+import { AccountsApiBalanceFetcher } from './multi-chain-accounts-service/api-balance-fetcher.js';
+import * as multicall from './multicall.js';
+import { RpcBalanceFetcher } from './rpc-service/rpc-balance-fetcher.js';
import type {
ChainIdHex,
TokenBalancesControllerMessenger,
@@ -31,15 +31,15 @@ import type {
TokenBalancesControllerState,
TokenBalances,
UpdateBalancesOptions,
-} from './TokenBalancesController';
+} from './TokenBalancesController.js';
import {
TokenBalancesController,
UPDATE_BALANCES_BATCH_MS,
caipChainIdToHex,
mergeUpdateBalancesOptions,
parseAssetType,
-} from './TokenBalancesController';
-import type { TokensControllerState } from './TokensController';
+} from './TokenBalancesController.js';
+import type { TokensControllerState } from './TokensController.js';
type AllTokenBalancesControllerActions =
MessengerActions;
diff --git a/packages/assets-controllers/src/TokenBalancesController.ts b/packages/assets-controllers/src/TokenBalancesController.ts
index f04e5d7fc87..c72529d9769 100644
--- a/packages/assets-controllers/src/TokenBalancesController.ts
+++ b/packages/assets-controllers/src/TokenBalancesController.ts
@@ -52,37 +52,37 @@ import {
parseCaipChainId,
} from '@metamask/utils';
import { produce } from 'immer';
-import { isEqual, union } from 'lodash';
+import { isEqual, union } from 'lodash-es';
-import type { AccountTrackerControllerGetStateAction } from './AccountTrackerController';
import type {
AccountTrackerControllerUpdateNativeBalancesAction,
AccountTrackerControllerUpdateStakedBalancesAction,
-} from './AccountTrackerController-method-action-types';
-import { STAKING_CONTRACT_ADDRESS_BY_CHAINID } from './AssetsContractController';
+} from './AccountTrackerController-method-action-types.js';
+import type { AccountTrackerControllerGetStateAction } from './AccountTrackerController.js';
+import { STAKING_CONTRACT_ADDRESS_BY_CHAINID } from './AssetsContractController.js';
import {
MUSD_ERC20_ADDRESS_LOWER,
MUSD_TOKEN_DETECTION_CHAIN_IDS,
-} from './constants';
-import { AccountsApiBalanceFetcher } from './multi-chain-accounts-service/api-balance-fetcher';
+} from './constants.js';
+import { AccountsApiBalanceFetcher } from './multi-chain-accounts-service/api-balance-fetcher.js';
import type {
BalanceFetcher,
ProcessedBalance,
UnprocessedTokens,
-} from './multi-chain-accounts-service/api-balance-fetcher';
-import { RpcBalanceFetcher } from './rpc-service/rpc-balance-fetcher';
-import type { TokenBalancesControllerMethodActions } from './TokenBalancesController-method-action-types';
+} from './multi-chain-accounts-service/api-balance-fetcher.js';
+import { RpcBalanceFetcher } from './rpc-service/rpc-balance-fetcher.js';
+import type { TokenBalancesControllerMethodActions } from './TokenBalancesController-method-action-types.js';
import type {
TokenDetectionControllerAddDetectedTokensViaPollingAction,
TokenDetectionControllerAddDetectedTokensViaWsAction,
TokenDetectionControllerDetectTokensAction,
-} from './TokenDetectionController-method-action-types';
+} from './TokenDetectionController-method-action-types.js';
import type {
TokensControllerGetStateAction,
TokensControllerState,
TokensControllerStateChangeEvent,
-} from './TokensController';
-import { createBatchedHandler } from './utils/create-batch-handler';
+} from './TokensController.js';
+import { createBatchedHandler } from './utils/create-batch-handler.js';
const MUSD_IMPORT_CHAIN_ID_SET = new Set(MUSD_TOKEN_DETECTION_CHAIN_IDS);
@@ -1388,7 +1388,7 @@ export class TokenBalancesController extends StaticIntervalPollingController<{
for (const address of Object.keys(this.state.tokenBalances)) {
const addressKey = address as ChecksumAddress;
for (const network of Object.keys(
- this.state.tokenBalances[addressKey] || {},
+ this.state.tokenBalances[addressKey] ?? {},
)) {
networksWithBalances.add(network);
}
diff --git a/packages/assets-controllers/src/TokenDetectionController-method-action-types.ts b/packages/assets-controllers/src/TokenDetectionController-method-action-types.ts
index 80ac0965841..b3279a49707 100644
--- a/packages/assets-controllers/src/TokenDetectionController-method-action-types.ts
+++ b/packages/assets-controllers/src/TokenDetectionController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { TokenDetectionController } from './TokenDetectionController';
+import type { TokenDetectionController } from './TokenDetectionController.js';
/**
* Allows controller to make active and passive polling requests
diff --git a/packages/assets-controllers/src/TokenDetectionController.test.ts b/packages/assets-controllers/src/TokenDetectionController.test.ts
index 33b19d453ea..34d7912dfbe 100644
--- a/packages/assets-controllers/src/TokenDetectionController.test.ts
+++ b/packages/assets-controllers/src/TokenDetectionController.test.ts
@@ -31,33 +31,33 @@ import type { Hex } from '@metamask/utils';
import BN from 'bn.js';
import nock from 'nock';
-import { jestAdvanceTime } from '../../../tests/helpers';
-import { createMockInternalAccount } from '../../accounts-controller/tests/mocks';
+import { jestAdvanceTime } from '../../../tests/helpers.js';
+import { createMockInternalAccount } from '../../accounts-controller/tests/mocks.js';
import {
buildCustomRpcEndpoint,
buildInfuraNetworkConfiguration,
-} from '../../network-controller/tests/helpers';
-import { formatAggregatorNames } from './assetsUtil';
-import { MUSD_ERC20_ADDRESS_LOWER } from './constants';
-import { TOKEN_END_POINT_API } from './token-service';
-import type { TokenDetectionControllerMessenger } from './TokenDetectionController';
+} from '../../network-controller/tests/helpers.js';
+import { formatAggregatorNames } from './assetsUtil.js';
+import { MUSD_ERC20_ADDRESS_LOWER } from './constants.js';
+import { TOKEN_END_POINT_API } from './token-service.js';
+import type { TokenDetectionControllerMessenger } from './TokenDetectionController.js';
import {
TokenDetectionController,
controllerName,
-} from './TokenDetectionController';
-import { getDefaultTokenListState } from './TokenListController';
+} from './TokenDetectionController.js';
+import { getDefaultTokenListState } from './TokenListController.js';
import type {
TokenListMap,
TokenListState,
TokenListToken,
-} from './TokenListController';
-import type { TokenListService } from './TokenListService';
-import type { Token } from './TokenRatesController';
+} from './TokenListController.js';
+import type { TokenListService } from './TokenListService.js';
+import type { Token } from './TokenRatesController.js';
import type {
TokensController,
TokensControllerState,
-} from './TokensController';
-import { getDefaultTokensState } from './TokensController';
+} from './TokensController.js';
+import { getDefaultTokensState } from './TokensController.js';
const DEFAULT_INTERVAL = 180000;
diff --git a/packages/assets-controllers/src/TokenDetectionController.ts b/packages/assets-controllers/src/TokenDetectionController.ts
index 0baf8a33311..0ee9cd31303 100644
--- a/packages/assets-controllers/src/TokenDetectionController.ts
+++ b/packages/assets-controllers/src/TokenDetectionController.ts
@@ -40,30 +40,30 @@ import type { AuthenticationController } from '@metamask/profile-sync-controller
import type { TransactionControllerTransactionConfirmedEvent } from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
-import type { AssetsContractController } from './AssetsContractController';
+import type { AssetsContractController } from './AssetsContractController.js';
import {
formatIconUrlWithProxy,
isTokenDetectionSupportedForNetwork,
-} from './assetsUtil';
+} from './assetsUtil.js';
import {
MUSD_ERC20_ADDRESS_LOWER,
MUSD_TOKEN_DETECTION_CHAIN_IDS,
MUSD_TOKEN_METADATA_BY_CHAIN,
SUPPORTED_NETWORKS_ACCOUNTS_API_V4,
-} from './constants';
-import type { TokenDetectionControllerMethodActions } from './TokenDetectionController-method-action-types';
+} from './constants.js';
+import type { TokenDetectionControllerMethodActions } from './TokenDetectionController-method-action-types.js';
import type {
TokenListMap,
TokenListToken,
TokensChainsCache,
-} from './TokenListController';
-import type { TokenListService } from './TokenListService';
-import type { Token } from './TokenRatesController';
-import type { TokensControllerGetStateAction } from './TokensController';
+} from './TokenListController.js';
+import type { TokenListService } from './TokenListService.js';
+import type { Token } from './TokenRatesController.js';
import type {
TokensControllerAddDetectedTokensAction,
TokensControllerAddTokensAction,
-} from './TokensController-method-action-types';
+} from './TokensController-method-action-types.js';
+import type { TokensControllerGetStateAction } from './TokensController.js';
const DEFAULT_INTERVAL = 180000;
diff --git a/packages/assets-controllers/src/TokenListController.test.ts b/packages/assets-controllers/src/TokenListController.test.ts
index 2f34c93d81f..d6a1589dea7 100644
--- a/packages/assets-controllers/src/TokenListController.test.ts
+++ b/packages/assets-controllers/src/TokenListController.test.ts
@@ -17,20 +17,20 @@ import { StorageGetResult } from '@metamask/storage-service';
import type { Hex } from '@metamask/utils';
import nock from 'nock';
-import { jestAdvanceTime } from '../../../tests/helpers';
+import { jestAdvanceTime } from '../../../tests/helpers.js';
import {
buildCustomNetworkClientConfiguration,
buildInfuraNetworkClientConfiguration,
buildMockGetNetworkClientById,
-} from '../../network-controller/tests/helpers';
-import * as tokenService from './token-service';
+} from '../../network-controller/tests/helpers.js';
+import * as tokenService from './token-service.js';
import type {
TokenListMap,
TokenListState,
TokenListControllerMessenger,
DataCache,
-} from './TokenListController';
-import { TokenListController } from './TokenListController';
+} from './TokenListController.js';
+import { TokenListController } from './TokenListController.js';
const namespace = 'TokenListController';
const timestamp = Date.now();
@@ -669,8 +669,8 @@ describe('TokenListController', () => {
messenger: restrictedMessenger,
});
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
- controller.start();
+
+ void controller.start();
await new Promise((resolve) => setTimeout(() => resolve(), 150));
onNetworkStateChangeCallback({
selectedNetworkClientId,
diff --git a/packages/assets-controllers/src/TokenListController.ts b/packages/assets-controllers/src/TokenListController.ts
index 066a24d2a29..2635e6f26e1 100644
--- a/packages/assets-controllers/src/TokenListController.ts
+++ b/packages/assets-controllers/src/TokenListController.ts
@@ -22,8 +22,8 @@ import {
isTokenListSupportedForNetwork,
formatAggregatorNames,
formatIconUrlWithProxy,
-} from './assetsUtil';
-import { TokenRwaData, fetchTokenListByChainId } from './token-service';
+} from './assetsUtil.js';
+import { TokenRwaData, fetchTokenListByChainId } from './token-service.js';
// 4 Hour Interval Cache Refresh Threshold
const DEFAULT_INTERVAL = 4 * 60 * 60 * 1000;
@@ -234,7 +234,7 @@ export class TokenListController extends StaticIntervalPollingController {
await this.#onNetworkControllerStateChange(networkControllerState);
},
diff --git a/packages/assets-controllers/src/TokenListService.test.ts b/packages/assets-controllers/src/TokenListService.test.ts
index 11854f7ec5f..5a411ed482a 100644
--- a/packages/assets-controllers/src/TokenListService.test.ts
+++ b/packages/assets-controllers/src/TokenListService.test.ts
@@ -1,9 +1,9 @@
import type { Hex } from '@metamask/utils';
-import * as assetsUtil from './assetsUtil';
-import { fetchTokenListByChainId } from './token-service';
-import type { TokenListToken } from './TokenListController';
-import { buildTokenListMap, TokenListService } from './TokenListService';
+import * as assetsUtil from './assetsUtil.js';
+import { fetchTokenListByChainId } from './token-service.js';
+import type { TokenListToken } from './TokenListController.js';
+import { buildTokenListMap, TokenListService } from './TokenListService.js';
jest.mock('./token-service', () => ({
fetchTokenListByChainId: jest.fn(),
diff --git a/packages/assets-controllers/src/TokenListService.ts b/packages/assets-controllers/src/TokenListService.ts
index 4f6db1a0159..372d6d17c31 100644
--- a/packages/assets-controllers/src/TokenListService.ts
+++ b/packages/assets-controllers/src/TokenListService.ts
@@ -1,9 +1,9 @@
import type { Hex } from '@metamask/utils';
import { QueryClient } from '@tanstack/query-core';
-import { formatAggregatorNames, formatIconUrlWithProxy } from './assetsUtil';
-import { fetchTokenListByChainId } from './token-service';
-import type { TokenListMap, TokenListToken } from './TokenListController';
+import { formatAggregatorNames, formatIconUrlWithProxy } from './assetsUtil.js';
+import { fetchTokenListByChainId } from './token-service.js';
+import type { TokenListMap, TokenListToken } from './TokenListController.js';
// 4 hours — mirrors TokenListController's DEFAULT_THRESHOLD
const FOUR_HOURS_MS = 4 * 60 * 60 * 1000;
diff --git a/packages/assets-controllers/src/TokenRatesController.test.ts b/packages/assets-controllers/src/TokenRatesController.test.ts
index c16908bf586..cb3908c19df 100644
--- a/packages/assets-controllers/src/TokenRatesController.test.ts
+++ b/packages/assets-controllers/src/TokenRatesController.test.ts
@@ -17,22 +17,25 @@ import type { CaipAssetType, Hex } from '@metamask/utils';
import { add0x, KnownCaipNamespace } from '@metamask/utils';
import type { Patch } from 'immer';
-import { flushPromises } from '../../../tests/helpers';
-import { TOKEN_PRICES_BATCH_SIZE } from './assetsUtil';
+import { flushPromises } from '../../../tests/helpers.js';
+import { TOKEN_PRICES_BATCH_SIZE } from './assetsUtil.js';
import type {
AbstractTokenPricesService,
EvmAssetWithMarketData,
-} from './token-prices-service/abstract-token-prices-service';
-import { ZERO_ADDRESS } from './token-prices-service/codefi-v2';
-import { controllerName, TokenRatesController } from './TokenRatesController';
+} from './token-prices-service/abstract-token-prices-service.js';
+import { ZERO_ADDRESS } from './token-prices-service/codefi-v2.js';
+import {
+ controllerName,
+ TokenRatesController,
+} from './TokenRatesController.js';
import type {
MarketDataDetails,
Token,
TokenRatesControllerMessenger,
TokenRatesControllerState,
-} from './TokenRatesController';
-import { getDefaultTokensState } from './TokensController';
-import type { TokensControllerState } from './TokensController';
+} from './TokenRatesController.js';
+import { getDefaultTokensState } from './TokensController.js';
+import type { TokensControllerState } from './TokensController.js';
const defaultSelectedAddress = '0x1111111111111111111111111111111111111111';
@@ -112,8 +115,7 @@ describe('TokenRatesController', () => {
it('should not fail if tokenPricesService does not have setNativeAssetIdentifiers', async () => {
const tokenPricesService = buildMockTokenPricesService();
// Explicitly remove setNativeAssetIdentifiers to simulate an old service
- delete (tokenPricesService as Partial)
- .setNativeAssetIdentifiers;
+ delete tokenPricesService.setNativeAssetIdentifiers;
await withController(
{
diff --git a/packages/assets-controllers/src/TokenRatesController.ts b/packages/assets-controllers/src/TokenRatesController.ts
index e8a98880b14..58dad4f5299 100644
--- a/packages/assets-controllers/src/TokenRatesController.ts
+++ b/packages/assets-controllers/src/TokenRatesController.ts
@@ -12,17 +12,20 @@ import type {
import type { NetworkEnablementControllerGetStateAction } from '@metamask/network-enablement-controller';
import { StaticIntervalPollingController } from '@metamask/polling-controller';
import type { Hex } from '@metamask/utils';
-import { isEqual } from 'lodash';
-
-import { reduceInBatchesSerially, TOKEN_PRICES_BATCH_SIZE } from './assetsUtil';
-import type { AbstractTokenPricesService } from './token-prices-service/abstract-token-prices-service';
-import { getNativeTokenAddress } from './token-prices-service/codefi-v2';
-import { TokenRwaData } from './token-service';
+import { isEqual } from 'lodash-es';
+
+import {
+ reduceInBatchesSerially,
+ TOKEN_PRICES_BATCH_SIZE,
+} from './assetsUtil.js';
+import type { AbstractTokenPricesService } from './token-prices-service/abstract-token-prices-service.js';
+import { getNativeTokenAddress } from './token-prices-service/codefi-v2.js';
+import { TokenRwaData } from './token-service.js';
import type {
TokensControllerGetStateAction,
TokensControllerStateChangeEvent,
TokensControllerState,
-} from './TokensController';
+} from './TokensController.js';
/**
* @type Token
@@ -280,7 +283,7 @@ export class TokenRatesController extends StaticIntervalPollingController {
if (this.#isDeprecated()) {
this.#enforceDisabledState();
diff --git a/packages/assets-controllers/src/TokenSearchDiscoveryDataController/TokenSearchDiscoveryDataController.test.ts b/packages/assets-controllers/src/TokenSearchDiscoveryDataController/TokenSearchDiscoveryDataController.test.ts
index 05a1530aa88..eda72fd2383 100644
--- a/packages/assets-controllers/src/TokenSearchDiscoveryDataController/TokenSearchDiscoveryDataController.test.ts
+++ b/packages/assets-controllers/src/TokenSearchDiscoveryDataController/TokenSearchDiscoveryDataController.test.ts
@@ -12,20 +12,23 @@ import assert from 'assert';
import type {
AbstractTokenPricesService,
EvmAssetWithMarketData,
-} from '../token-prices-service/abstract-token-prices-service';
-import { fetchTokenMetadata } from '../token-service';
-import type { Token } from '../TokenRatesController';
+} from '../token-prices-service/abstract-token-prices-service.js';
+import { fetchTokenMetadata } from '../token-service.js';
+import type { Token } from '../TokenRatesController.js';
import {
getDefaultTokenSearchDiscoveryDataControllerState,
TokenSearchDiscoveryDataController,
controllerName,
MAX_TOKEN_DISPLAY_DATA_LENGTH,
-} from './TokenSearchDiscoveryDataController';
+} from './TokenSearchDiscoveryDataController.js';
import type {
TokenSearchDiscoveryDataControllerMessenger,
TokenSearchDiscoveryDataControllerState,
-} from './TokenSearchDiscoveryDataController';
-import type { NotFoundTokenDisplayData, FoundTokenDisplayData } from './types';
+} from './TokenSearchDiscoveryDataController.js';
+import type {
+ NotFoundTokenDisplayData,
+ FoundTokenDisplayData,
+} from './types.js';
jest.mock('../token-service', () => {
const mockFetchTokenMetadata = jest.fn();
diff --git a/packages/assets-controllers/src/TokenSearchDiscoveryDataController/TokenSearchDiscoveryDataController.ts b/packages/assets-controllers/src/TokenSearchDiscoveryDataController/TokenSearchDiscoveryDataController.ts
index 5f3617c57eb..71ec634756f 100644
--- a/packages/assets-controllers/src/TokenSearchDiscoveryDataController/TokenSearchDiscoveryDataController.ts
+++ b/packages/assets-controllers/src/TokenSearchDiscoveryDataController/TokenSearchDiscoveryDataController.ts
@@ -7,15 +7,15 @@ import type {
import type { Messenger } from '@metamask/messenger';
import type { Hex } from '@metamask/utils';
-import { formatIconUrlWithProxy } from '../assetsUtil';
-import type { CurrencyRateControllerGetStateAction } from '../CurrencyRateController';
-import type { AbstractTokenPricesService } from '../token-prices-service';
+import { formatIconUrlWithProxy } from '../assetsUtil.js';
+import type { CurrencyRateControllerGetStateAction } from '../CurrencyRateController.js';
+import type { AbstractTokenPricesService } from '../token-prices-service.js';
import {
fetchTokenMetadata,
TOKEN_METADATA_NO_SUPPORT_ERROR,
-} from '../token-service';
-import type { TokenListToken } from '../TokenListController';
-import type { TokenDisplayData } from './types';
+} from '../token-service.js';
+import type { TokenListToken } from '../TokenListController.js';
+import type { TokenDisplayData } from './types.js';
// === GENERAL ===
diff --git a/packages/assets-controllers/src/TokenSearchDiscoveryDataController/index.ts b/packages/assets-controllers/src/TokenSearchDiscoveryDataController/index.ts
index e2f6c06eb59..033f1c5cf90 100644
--- a/packages/assets-controllers/src/TokenSearchDiscoveryDataController/index.ts
+++ b/packages/assets-controllers/src/TokenSearchDiscoveryDataController/index.ts
@@ -1,2 +1,2 @@
-export * from './TokenSearchDiscoveryDataController';
-export type * from './types';
+export * from './TokenSearchDiscoveryDataController.js';
+export type * from './types.js';
diff --git a/packages/assets-controllers/src/TokenSearchDiscoveryDataController/types.ts b/packages/assets-controllers/src/TokenSearchDiscoveryDataController/types.ts
index 26b482ef141..694f65c2738 100644
--- a/packages/assets-controllers/src/TokenSearchDiscoveryDataController/types.ts
+++ b/packages/assets-controllers/src/TokenSearchDiscoveryDataController/types.ts
@@ -1,7 +1,7 @@
import type { Hex } from '@metamask/utils';
-import type { EvmAssetWithMarketData } from '../token-prices-service/abstract-token-prices-service';
-import type { Token } from '../TokenRatesController';
+import type { EvmAssetWithMarketData } from '../token-prices-service/abstract-token-prices-service.js';
+import type { Token } from '../TokenRatesController.js';
export type NotFoundTokenDisplayData = {
found: false;
diff --git a/packages/assets-controllers/src/TokensController-method-action-types.ts b/packages/assets-controllers/src/TokensController-method-action-types.ts
index 7488df8e132..3aba1259bed 100644
--- a/packages/assets-controllers/src/TokensController-method-action-types.ts
+++ b/packages/assets-controllers/src/TokensController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { TokensController } from './TokensController';
+import type { TokensController } from './TokensController.js';
/**
* Adds a token to the stored token list.
diff --git a/packages/assets-controllers/src/TokensController.test.ts b/packages/assets-controllers/src/TokensController.test.ts
index e88f0eb588e..c4142b25176 100644
--- a/packages/assets-controllers/src/TokensController.test.ts
+++ b/packages/assets-controllers/src/TokensController.test.ts
@@ -30,22 +30,22 @@ import type { Patch } from 'immer';
import nock from 'nock';
import { v1 as uuidV1 } from 'uuid';
-import { FakeProvider } from '../../../tests/fake-provider';
-import { createMockInternalAccount } from '../../accounts-controller/tests/mocks';
+import { FakeProvider } from '../../../tests/fake-provider.js';
+import { createMockInternalAccount } from '../../accounts-controller/tests/mocks.js';
import {
buildCustomNetworkClientConfiguration,
buildMockGetNetworkClientById,
-} from '../../network-controller/tests/helpers';
-import { ERC20Standard } from './Standards/ERC20Standard';
-import { ERC1155Standard } from './Standards/NftStandards/ERC1155/ERC1155Standard';
-import { TOKEN_END_POINT_API } from './token-service';
-import type { TokenRwaData } from './token-service';
-import type { Token } from './TokenRatesController';
-import { TokensController } from './TokensController';
+} from '../../network-controller/tests/helpers.js';
+import { ERC20Standard } from './Standards/ERC20Standard.js';
+import { ERC1155Standard } from './Standards/NftStandards/ERC1155/ERC1155Standard.js';
+import { TOKEN_END_POINT_API } from './token-service.js';
+import type { TokenRwaData } from './token-service.js';
+import type { Token } from './TokenRatesController.js';
+import { TokensController } from './TokensController.js';
import type {
TokensControllerMessenger,
TokensControllerState,
-} from './TokensController';
+} from './TokensController.js';
jest.mock('@ethersproject/contracts');
jest.mock('uuid', () => ({
@@ -2785,16 +2785,14 @@ describe('TokensController', () => {
messenger.subscribe('ApprovalController:stateChange', listener);
});
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
- controller.watchAsset({
+ void controller.watchAsset({
asset,
type: 'ERC20',
interactingAddress,
networkClientId: 'goerli',
});
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
- controller.watchAsset({
+ void controller.watchAsset({
asset: anotherAsset,
type: 'ERC20',
interactingAddress,
diff --git a/packages/assets-controllers/src/TokensController.ts b/packages/assets-controllers/src/TokensController.ts
index f528a12b52b..51de66e3eeb 100644
--- a/packages/assets-controllers/src/TokensController.ts
+++ b/packages/assets-controllers/src/TokensController.ts
@@ -42,21 +42,21 @@ import { isStrictHexString } from '@metamask/utils';
import type { Hex, Json } from '@metamask/utils';
import { Mutex } from 'async-mutex';
import type { Patch } from 'immer';
-import { cloneDeep } from 'lodash';
+import { cloneDeep } from 'lodash-es';
import { v1 as random } from 'uuid';
-import { formatAggregatorNames, formatIconUrlWithProxy } from './assetsUtil';
-import { ERC20Standard } from './Standards/ERC20Standard';
-import { ERC1155Standard } from './Standards/NftStandards/ERC1155/ERC1155Standard';
+import { formatAggregatorNames, formatIconUrlWithProxy } from './assetsUtil.js';
+import { ERC20Standard } from './Standards/ERC20Standard.js';
+import { ERC1155Standard } from './Standards/NftStandards/ERC1155/ERC1155Standard.js';
import {
fetchTokenMetadata,
TOKEN_METADATA_NO_SUPPORT_ERROR,
TokenRwaData,
-} from './token-service';
-import type { TokenListMap, TokenListToken } from './TokenListController';
-import type { TokenListService } from './TokenListService';
-import type { Token } from './TokenRatesController';
-import type { TokensControllerMethodActions } from './TokensController-method-action-types';
+} from './token-service.js';
+import type { TokenListMap, TokenListToken } from './TokenListController.js';
+import type { TokenListService } from './TokenListService.js';
+import type { Token } from './TokenRatesController.js';
+import type { TokensControllerMethodActions } from './TokensController-method-action-types.js';
/**
* @type SuggestedAssetMeta
@@ -1133,10 +1133,7 @@ export class TokensController extends BaseController<
let newAllTokens = allTokens;
if (
newTokens?.length ||
- (newTokens &&
- allTokens &&
- allTokens[interactingChainId] &&
- allTokens[interactingChainId][userAddressToAddTokens])
+ (newTokens && allTokens?.[interactingChainId]?.[userAddressToAddTokens])
) {
const networkTokens = allTokens[interactingChainId];
const newNetworkTokens = {
@@ -1153,9 +1150,7 @@ export class TokensController extends BaseController<
if (
newIgnoredTokens?.length ||
(newIgnoredTokens &&
- allIgnoredTokens &&
- allIgnoredTokens[interactingChainId] &&
- allIgnoredTokens[interactingChainId][userAddressToAddTokens])
+ allIgnoredTokens?.[interactingChainId]?.[userAddressToAddTokens])
) {
const networkIgnoredTokens = allIgnoredTokens[interactingChainId];
const newIgnoredNetworkTokens = {
@@ -1172,9 +1167,7 @@ export class TokensController extends BaseController<
if (
newDetectedTokens?.length ||
(newDetectedTokens &&
- allDetectedTokens &&
- allDetectedTokens[interactingChainId] &&
- allDetectedTokens[interactingChainId][userAddressToAddTokens])
+ allDetectedTokens?.[interactingChainId]?.[userAddressToAddTokens])
) {
const networkDetectedTokens = allDetectedTokens[interactingChainId];
const newDetectedNetworkTokens = {
diff --git a/packages/assets-controllers/src/assetsUtil.test.ts b/packages/assets-controllers/src/assetsUtil.test.ts
index 634444e04b2..300231d9c59 100644
--- a/packages/assets-controllers/src/assetsUtil.test.ts
+++ b/packages/assets-controllers/src/assetsUtil.test.ts
@@ -8,12 +8,12 @@ import {
import { add0x } from '@metamask/utils';
import type { Hex } from '@metamask/utils';
-import * as assetsUtil from './assetsUtil';
-import { TOKEN_PRICES_BATCH_SIZE } from './assetsUtil';
-import type { Nft, NftMetadata } from './NftController';
-import { getNativeTokenAddress } from './token-prices-service';
-import type { AbstractTokenPricesService } from './token-prices-service';
-import { EvmAssetWithMarketData } from './token-prices-service/abstract-token-prices-service';
+import * as assetsUtil from './assetsUtil.js';
+import { TOKEN_PRICES_BATCH_SIZE } from './assetsUtil.js';
+import type { Nft, NftMetadata } from './NftController.js';
+import { getNativeTokenAddress } from './token-prices-service.js';
+import type { AbstractTokenPricesService } from './token-prices-service.js';
+import { EvmAssetWithMarketData } from './token-prices-service/abstract-token-prices-service.js';
const DEFAULT_IPFS_URL_FORMAT = 'ipfs://';
const ALTERNATIVE_IPFS_URL_FORMAT = 'ipfs://ipfs/';
diff --git a/packages/assets-controllers/src/assetsUtil.ts b/packages/assets-controllers/src/assetsUtil.ts
index f481151e870..0575ef5aa0d 100644
--- a/packages/assets-controllers/src/assetsUtil.ts
+++ b/packages/assets-controllers/src/assetsUtil.ts
@@ -13,14 +13,14 @@ import {
import BN from 'bn.js';
import { CID } from 'multiformats/cid';
-import type { Nft, NftMetadata } from './NftController';
-import { getNativeTokenAddress } from './token-prices-service';
-import type { AbstractTokenPricesService } from './token-prices-service';
-import type { EvmAssetWithMarketData } from './token-prices-service/abstract-token-prices-service';
+import type { Nft, NftMetadata } from './NftController.js';
+import { getNativeTokenAddress } from './token-prices-service.js';
+import type { AbstractTokenPricesService } from './token-prices-service.js';
+import type { EvmAssetWithMarketData } from './token-prices-service/abstract-token-prices-service.js';
import type {
ContractExchangeRates,
ContractMarketData,
-} from './TokenRatesController';
+} from './TokenRatesController.js';
/**
* The maximum number of token addresses that should be sent to the Price API in
diff --git a/packages/assets-controllers/src/balances.test.ts b/packages/assets-controllers/src/balances.test.ts
index 3237f025972..6327d98264a 100644
--- a/packages/assets-controllers/src/balances.test.ts
+++ b/packages/assets-controllers/src/balances.test.ts
@@ -1,13 +1,13 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
import { AccountWalletType, AccountGroupType } from '@metamask/account-api';
-import { STAKING_CONTRACT_ADDRESS_BY_CHAINID } from './AssetsContractController';
+import { STAKING_CONTRACT_ADDRESS_BY_CHAINID } from './AssetsContractController.js';
import {
calculateBalanceForAllWallets,
calculateBalanceChangeForAllWallets,
calculateBalanceChangeForAccountGroup,
-} from './balances';
-import { getNativeTokenAddress } from './token-prices-service/codefi-v2';
+} from './balances.js';
+import { getNativeTokenAddress } from './token-prices-service/codefi-v2.js';
const createBaseMockState = (userCurrency = 'USD') => ({
AccountTreeController: {
diff --git a/packages/assets-controllers/src/balances.ts b/packages/assets-controllers/src/balances.ts
index 41a9ae5a1b9..27b692e03fc 100644
--- a/packages/assets-controllers/src/balances.ts
+++ b/packages/assets-controllers/src/balances.ts
@@ -13,15 +13,15 @@ import {
isStrictHexString,
} from '@metamask/utils';
-import { STAKING_CONTRACT_ADDRESS_BY_CHAINID } from './AssetsContractController';
-import type { CurrencyRateState } from './CurrencyRateController';
-import type { MultichainAssetsControllerState } from './MultichainAssetsController';
-import type { MultichainAssetsRatesControllerState } from './MultichainAssetsRatesController';
-import type { MultichainBalancesControllerState } from './MultichainBalancesController';
-import { getNativeTokenAddress } from './token-prices-service/codefi-v2';
-import type { TokenBalancesControllerState } from './TokenBalancesController';
-import type { TokenRatesControllerState } from './TokenRatesController';
-import type { TokensControllerState } from './TokensController';
+import { STAKING_CONTRACT_ADDRESS_BY_CHAINID } from './AssetsContractController.js';
+import type { CurrencyRateState } from './CurrencyRateController.js';
+import type { MultichainAssetsControllerState } from './MultichainAssetsController.js';
+import type { MultichainAssetsRatesControllerState } from './MultichainAssetsRatesController.js';
+import type { MultichainBalancesControllerState } from './MultichainBalancesController.js';
+import { getNativeTokenAddress } from './token-prices-service/codefi-v2.js';
+import type { TokenBalancesControllerState } from './TokenBalancesController.js';
+import type { TokenRatesControllerState } from './TokenRatesController.js';
+import type { TokensControllerState } from './TokensController.js';
export type AccountGroupBalance = {
walletId: string;
@@ -260,7 +260,7 @@ function getNonEvmAssetBalances(
) {
const accountBalances = multichainBalancesState.balances[account.id] ?? {};
const ignoredAssets =
- multichainAssetsState.allIgnoredAssets[account.id] || [];
+ multichainAssetsState.allIgnoredAssets[account.id] ?? [];
return Object.entries(accountBalances)
.filter(
@@ -423,7 +423,7 @@ export function calculateBalanceForAllWallets(
const getFlatAccountBalances = () =>
Object.entries(accountTreeState.accountTree.wallets ?? {})
.flatMap(([walletId, wallet]) =>
- Object.keys(wallet?.groups || {}).flatMap((groupId) => {
+ Object.keys(wallet?.groups ?? {}).flatMap((groupId) => {
const accounts = getInternalAccountsForGroup(
accountTreeState,
accountsState,
@@ -490,7 +490,7 @@ export function calculateBalanceForAllWallets(
return;
}
wallets[walletId] ??= defaultWalletBalance(walletId);
- Object.keys(wallet.groups || {}).forEach((groupId) => {
+ Object.keys(wallet.groups ?? {}).forEach((groupId) => {
wallets[walletId].groups[groupId] ??= defaultGroupBalance(
walletId,
groupId,
@@ -582,7 +582,7 @@ export function calculateBalanceChangeForAllWallets(
const getFlatAccountChanges = () =>
Object.entries(accountTreeState.accountTree.wallets ?? {})
.flatMap(([walletId, wallet]) =>
- Object.keys(wallet?.groups || {}).flatMap((groupId) => {
+ Object.keys(wallet?.groups ?? {}).flatMap((groupId) => {
const accounts = getInternalAccountsForGroup(
accountTreeState,
accountsState,
diff --git a/packages/assets-controllers/src/crypto-compare-service/crypto-compare.test.ts b/packages/assets-controllers/src/crypto-compare-service/crypto-compare.test.ts
index 0c42dacf1d6..f69bb44bcd5 100644
--- a/packages/assets-controllers/src/crypto-compare-service/crypto-compare.test.ts
+++ b/packages/assets-controllers/src/crypto-compare-service/crypto-compare.test.ts
@@ -1,6 +1,6 @@
import nock from 'nock';
-import { fetchExchangeRate, fetchMultiExchangeRate } from './crypto-compare';
+import { fetchExchangeRate, fetchMultiExchangeRate } from './crypto-compare.js';
const cryptoCompareHost = 'https://min-api.cryptocompare.com';
diff --git a/packages/assets-controllers/src/crypto-compare-service/crypto-compare.ts b/packages/assets-controllers/src/crypto-compare-service/crypto-compare.ts
index 5af6f3869d3..cb030c07391 100644
--- a/packages/assets-controllers/src/crypto-compare-service/crypto-compare.ts
+++ b/packages/assets-controllers/src/crypto-compare-service/crypto-compare.ts
@@ -1,6 +1,6 @@
import { handleFetch } from '@metamask/controller-utils';
-import { getKeyByValue } from '../assetsUtil';
+import { getKeyByValue } from '../assetsUtil.js';
/**
* A map from native currency symbol to CryptoCompare identifier.
diff --git a/packages/assets-controllers/src/crypto-compare-service/index.ts b/packages/assets-controllers/src/crypto-compare-service/index.ts
index 33646741118..c33d3e11b9d 100644
--- a/packages/assets-controllers/src/crypto-compare-service/index.ts
+++ b/packages/assets-controllers/src/crypto-compare-service/index.ts
@@ -1 +1 @@
-export { fetchExchangeRate, fetchMultiExchangeRate } from './crypto-compare';
+export { fetchExchangeRate, fetchMultiExchangeRate } from './crypto-compare.js';
diff --git a/packages/assets-controllers/src/index.ts b/packages/assets-controllers/src/index.ts
index a005d08481b..357f8a1b739 100644
--- a/packages/assets-controllers/src/index.ts
+++ b/packages/assets-controllers/src/index.ts
@@ -6,20 +6,20 @@ export type {
AccountTrackerControllerGetStateAction,
AccountTrackerControllerStateChangeEvent,
AccountTrackerControllerEvents,
-} from './AccountTrackerController';
-export { AccountTrackerController } from './AccountTrackerController';
+} from './AccountTrackerController.js';
+export { AccountTrackerController } from './AccountTrackerController.js';
export type {
AccountTrackerControllerUpdateNativeBalancesAction,
AccountTrackerControllerUpdateStakedBalancesAction,
AccountTrackerControllerRefreshAction,
AccountTrackerControllerSyncBalanceWithAddressesAction,
-} from './AccountTrackerController-method-action-types';
+} from './AccountTrackerController-method-action-types.js';
export type {
AssetsContractControllerActions,
AssetsContractControllerEvents,
AssetsContractControllerMessenger,
BalanceMap,
-} from './AssetsContractController';
+} from './AssetsContractController.js';
export type {
AssetsContractControllerGetERC20StandardAction,
AssetsContractControllerGetERC721StandardAction,
@@ -38,16 +38,16 @@ export type {
AssetsContractControllerGetTokenStandardAndDetailsAction,
AssetsContractControllerGetBalancesInSingleCallAction,
AssetsContractControllerGetStakedBalanceForChainAction,
-} from './AssetsContractController-method-action-types';
+} from './AssetsContractController-method-action-types.js';
export {
SINGLE_CALL_BALANCES_ADDRESS_BY_CHAINID,
AssetsContractController,
-} from './AssetsContractController';
-export * from './CurrencyRateController';
+} from './AssetsContractController.js';
+export * from './CurrencyRateController.js';
export type {
CurrencyRateControllerSetCurrentCurrencyAction,
CurrencyRateControllerUpdateExchangeRateAction,
-} from './CurrencyRateController-method-action-types';
+} from './CurrencyRateController-method-action-types.js';
export type {
NftControllerState,
NftControllerMessenger,
@@ -58,8 +58,11 @@ export type {
Nft,
NftContract,
NftMetadata,
-} from './NftController';
-export { getDefaultNftControllerState, NftController } from './NftController';
+} from './NftController.js';
+export {
+ getDefaultNftControllerState,
+ NftController,
+} from './NftController.js';
export type {
NftDetectionControllerMessenger,
ApiNft,
@@ -82,8 +85,8 @@ export type {
FloorAsk,
Price,
Metadata,
-} from './NftDetectionController';
-export { NftDetectionController } from './NftDetectionController';
+} from './NftDetectionController.js';
+export { NftDetectionController } from './NftDetectionController.js';
export type {
TokenBalancesControllerActions,
TokenBalancesControllerGetStateAction,
@@ -92,21 +95,21 @@ export type {
TokenBalancesControllerOptions,
TokenBalancesControllerStateChangeEvent,
TokenBalancesControllerState,
-} from './TokenBalancesController';
-export { TokenBalancesController } from './TokenBalancesController';
+} from './TokenBalancesController.js';
+export { TokenBalancesController } from './TokenBalancesController.js';
export type {
TokenBalancesControllerUpdateChainPollingConfigsAction,
TokenBalancesControllerGetChainPollingConfigAction,
TokenBalancesControllerUpdateBalancesAction,
TokenBalancesControllerResetStateAction,
-} from './TokenBalancesController-method-action-types';
+} from './TokenBalancesController-method-action-types.js';
export type {
TokenDetectionControllerMessenger,
TokenDetectionControllerActions,
TokenDetectionControllerGetStateAction,
TokenDetectionControllerEvents,
TokenDetectionControllerStateChangeEvent,
-} from './TokenDetectionController';
+} from './TokenDetectionController.js';
export type {
TokenDetectionControllerEnableAction,
TokenDetectionControllerDisableAction,
@@ -115,8 +118,8 @@ export type {
TokenDetectionControllerDetectTokensAction,
TokenDetectionControllerAddDetectedTokensViaWsAction,
TokenDetectionControllerAddDetectedTokensViaPollingAction,
-} from './TokenDetectionController-method-action-types';
-export { TokenDetectionController } from './TokenDetectionController';
+} from './TokenDetectionController-method-action-types.js';
+export { TokenDetectionController } from './TokenDetectionController.js';
export type {
TokenListState,
TokenListToken,
@@ -126,9 +129,9 @@ export type {
GetTokenListState,
TokenListControllerActions,
TokenListControllerMessenger,
-} from './TokenListController';
-export { TokenListController } from './TokenListController';
-export { TokenListService, buildTokenListMap } from './TokenListService';
+} from './TokenListController.js';
+export { TokenListController } from './TokenListController.js';
+export { TokenListService, buildTokenListMap } from './TokenListService.js';
export type {
ContractExchangeRates,
ContractMarketData,
@@ -140,11 +143,11 @@ export type {
TokenRatesControllerState,
TokenRatesControllerStateChangeEvent,
MarketDataDetails,
-} from './TokenRatesController';
+} from './TokenRatesController.js';
export {
getDefaultTokenRatesControllerState,
TokenRatesController,
-} from './TokenRatesController';
+} from './TokenRatesController.js';
export type {
TokensControllerState,
TokensControllerActions,
@@ -152,7 +155,7 @@ export type {
TokensControllerEvents,
TokensControllerStateChangeEvent,
TokensControllerMessenger,
-} from './TokensController';
+} from './TokensController.js';
export type {
TokensControllerAddTokenAction,
TokensControllerAddTokensAction,
@@ -162,29 +165,29 @@ export type {
TokensControllerWatchAssetAction,
TokensControllerClearIgnoredTokensAction,
TokensControllerResetStateAction,
-} from './TokensController-method-action-types';
-export { TokensController } from './TokensController';
+} from './TokensController-method-action-types.js';
+export { TokensController } from './TokensController.js';
export {
isTokenDetectionSupportedForNetwork,
formatIconUrlWithProxy,
getFormattedIpfsUrl,
fetchTokenContractExchangeRates,
getKeyByValue,
-} from './assetsUtil';
+} from './assetsUtil.js';
export {
CodefiTokenPricesServiceV2,
SUPPORTED_CHAIN_IDS,
getNativeTokenAddress,
SPOT_PRICES_SUPPORT_INFO,
getAssetId,
-} from './token-prices-service';
+} from './token-prices-service.js';
export {
fetchRwas,
searchTokens,
getTrendingTokens,
fetchTokenAssets,
-} from './token-service';
-export { RatesController, Cryptocurrency } from './RatesController';
+} from './token-service.js';
+export { RatesController, Cryptocurrency } from './RatesController.js';
export type {
RatesControllerState,
RatesControllerEvents,
@@ -194,8 +197,8 @@ export type {
RatesControllerStateChangeEvent,
RatesControllerPollingStartedEvent,
RatesControllerPollingStoppedEvent,
-} from './RatesController';
-export { MultichainBalancesController } from './MultichainBalancesController';
+} from './RatesController.js';
+export { MultichainBalancesController } from './MultichainBalancesController.js';
export type {
MultichainBalancesControllerState,
MultichainBalancesControllerGetStateAction,
@@ -203,12 +206,12 @@ export type {
MultichainBalancesControllerActions,
MultichainBalancesControllerEvents,
MultichainBalancesControllerMessenger,
-} from './MultichainBalancesController';
+} from './MultichainBalancesController.js';
export {
MultichainAssetsController,
getDefaultMultichainAssetsControllerState,
-} from './MultichainAssetsController';
+} from './MultichainAssetsController.js';
export type {
MultichainAssetsControllerState,
@@ -218,18 +221,18 @@ export type {
MultichainAssetsControllerEvents,
MultichainAssetsControllerAccountAssetListUpdatedEvent,
MultichainAssetsControllerMessenger,
-} from './MultichainAssetsController';
+} from './MultichainAssetsController.js';
export type {
MultichainAssetsControllerGetAssetMetadataAction,
MultichainAssetsControllerIgnoreAssetsAction,
MultichainAssetsControllerAddAssetsAction,
-} from './MultichainAssetsController/MultichainAssetsController-method-action-types';
+} from './MultichainAssetsController/MultichainAssetsController-method-action-types.js';
export {
MultichainAssetsRatesController,
getDefaultMultichainAssetsRatesControllerState,
-} from './MultichainAssetsRatesController';
-export { MAP_CAIP_CURRENCIES } from './MultichainAssetsRatesController';
+} from './MultichainAssetsRatesController.js';
+export { MAP_CAIP_CURRENCIES } from './MultichainAssetsRatesController.js';
export type {
MultichainAssetsRatesControllerState,
@@ -238,14 +241,14 @@ export type {
MultichainAssetsRatesControllerGetStateAction,
MultichainAssetsRatesControllerStateChange,
MultichainAssetsRatesControllerMessenger,
-} from './MultichainAssetsRatesController';
+} from './MultichainAssetsRatesController.js';
export type {
MultichainAssetsRatesControllerUpdateAssetsRatesAction,
MultichainAssetsRatesControllerFetchHistoricalPricesForAssetAction,
-} from './MultichainAssetsRatesController/MultichainAssetsRatesController-method-action-types';
+} from './MultichainAssetsRatesController/MultichainAssetsRatesController-method-action-types.js';
-export { TokenSearchDiscoveryDataController } from './TokenSearchDiscoveryDataController';
+export { TokenSearchDiscoveryDataController } from './TokenSearchDiscoveryDataController.js';
export type {
TokenDisplayData,
TokenSearchDiscoveryDataControllerState,
@@ -254,8 +257,8 @@ export type {
TokenSearchDiscoveryDataControllerStateChangeEvent,
TokenSearchDiscoveryDataControllerActions,
TokenSearchDiscoveryDataControllerMessenger,
-} from './TokenSearchDiscoveryDataController';
-export { DeFiPositionsController } from './DeFiPositionsController/DeFiPositionsController';
+} from './TokenSearchDiscoveryDataController.js';
+export { DeFiPositionsController } from './DeFiPositionsController/DeFiPositionsController.js';
export type {
DeFiPositionsControllerState,
DeFiPositionsControllerActions,
@@ -263,34 +266,34 @@ export type {
DeFiPositionsControllerGetStateAction,
DeFiPositionsControllerStateChangeEvent,
DeFiPositionsControllerMessenger,
-} from './DeFiPositionsController/DeFiPositionsController';
-export type { GroupedDeFiPositions } from './DeFiPositionsController/group-defi-positions';
+} from './DeFiPositionsController/DeFiPositionsController.js';
+export type { GroupedDeFiPositions } from './DeFiPositionsController/group-defi-positions.js';
export type {
AccountGroupBalance,
WalletBalance,
AllWalletsBalance,
-} from './balances';
-export { calculateBalanceForAllWallets } from './balances';
+} from './balances.js';
+export { calculateBalanceForAllWallets } from './balances.js';
export type {
BalanceChangePeriod,
BalanceChangeResult,
NetworkConfigurationNativeCurrency,
-} from './balances';
+} from './balances.js';
export {
calculateBalanceChangeForAllWallets,
calculateBalanceChangeForAccountGroup,
-} from './balances';
+} from './balances.js';
export type {
AssetsByAccountGroup,
AccountGroupAssets,
Asset,
AssetListState,
-} from './selectors/token-selectors';
+} from './selectors/token-selectors.js';
export {
selectAssetsBySelectedAccountGroup,
selectAllAssets,
-} from './selectors/token-selectors';
-export { createFormatters } from './utils/formatters';
+} from './selectors/token-selectors.js';
+export { createFormatters } from './utils/formatters.js';
export type {
SortTrendingBy,
TrendingAsset,
@@ -312,4 +315,4 @@ export type {
RwasResponse,
RwaSortBy,
FetchRwasParams,
-} from './token-service';
+} from './token-service.js';
diff --git a/packages/assets-controllers/src/multi-chain-accounts-service/api-balance-fetcher.test.ts b/packages/assets-controllers/src/multi-chain-accounts-service/api-balance-fetcher.test.ts
index a117e40022a..d6ab34e40cd 100644
--- a/packages/assets-controllers/src/multi-chain-accounts-service/api-balance-fetcher.test.ts
+++ b/packages/assets-controllers/src/multi-chain-accounts-service/api-balance-fetcher.test.ts
@@ -1,12 +1,12 @@
import type { InternalAccount } from '@metamask/keyring-internal-api';
import BN from 'bn.js';
-import { createMockInternalAccount } from '../../../accounts-controller/tests/mocks';
-import { SUPPORTED_NETWORKS_ACCOUNTS_API_V4 } from '../constants';
-import * as ConstantsModule from '../constants';
-import { AccountsApiBalanceFetcher } from './api-balance-fetcher';
-import type { ChainIdHex, ChecksumAddress } from './api-balance-fetcher';
-import type { GetBalancesResponse } from './types';
+import { createMockInternalAccount } from '../../../accounts-controller/tests/mocks.js';
+import { SUPPORTED_NETWORKS_ACCOUNTS_API_V4 } from '../constants.js';
+import * as ConstantsModule from '../constants.js';
+import { AccountsApiBalanceFetcher } from './api-balance-fetcher.js';
+import type { ChainIdHex, ChecksumAddress } from './api-balance-fetcher.js';
+import type { GetBalancesResponse } from './types.js';
// Mock dependencies that cause import issues
jest.mock('../AssetsContractController', () => ({
diff --git a/packages/assets-controllers/src/multi-chain-accounts-service/api-balance-fetcher.ts b/packages/assets-controllers/src/multi-chain-accounts-service/api-balance-fetcher.ts
index 9f1a53708d2..3e52a5336b6 100644
--- a/packages/assets-controllers/src/multi-chain-accounts-service/api-balance-fetcher.ts
+++ b/packages/assets-controllers/src/multi-chain-accounts-service/api-balance-fetcher.ts
@@ -12,15 +12,15 @@ import type { CaipAccountAddress, CaipChainId, Hex } from '@metamask/utils';
import { parseCaipChainId } from '@metamask/utils';
import BN from 'bn.js';
-import { STAKING_CONTRACT_ADDRESS_BY_CHAINID } from '../AssetsContractController';
+import { STAKING_CONTRACT_ADDRESS_BY_CHAINID } from '../AssetsContractController.js';
import {
accountAddressToCaipReference,
reduceInBatchesSerially,
SupportedStakedBalanceNetworks,
-} from '../assetsUtil';
-import { SUPPORTED_NETWORKS_ACCOUNTS_API_V4 } from '../constants';
-import { fetchMultiChainBalancesV4 } from './multi-chain-accounts';
-import type { GetBalancesResponse } from './types';
+} from '../assetsUtil.js';
+import { SUPPORTED_NETWORKS_ACCOUNTS_API_V4 } from '../constants.js';
+import { fetchMultiChainBalancesV4 } from './multi-chain-accounts.js';
+import type { GetBalancesResponse } from './types.js';
// Maximum number of account addresses that can be sent to the accounts API in a single request
const ACCOUNTS_API_BATCH_SIZE = 20;
diff --git a/packages/assets-controllers/src/multi-chain-accounts-service/index.ts b/packages/assets-controllers/src/multi-chain-accounts-service/index.ts
index 13cdd73ca5f..15361688b45 100644
--- a/packages/assets-controllers/src/multi-chain-accounts-service/index.ts
+++ b/packages/assets-controllers/src/multi-chain-accounts-service/index.ts
@@ -1,9 +1,9 @@
export type {
GetBalancesResponse,
GetSupportedNetworksResponse,
-} from './types';
+} from './types.js';
export {
fetchMultiChainBalances,
fetchSupportedNetworks,
-} from './multi-chain-accounts';
+} from './multi-chain-accounts.js';
diff --git a/packages/assets-controllers/src/multi-chain-accounts-service/mocks/mock-get-balances.test.ts b/packages/assets-controllers/src/multi-chain-accounts-service/mocks/mock-get-balances.test.ts
index 3fe96f75cfd..af0acef7bd0 100644
--- a/packages/assets-controllers/src/multi-chain-accounts-service/mocks/mock-get-balances.test.ts
+++ b/packages/assets-controllers/src/multi-chain-accounts-service/mocks/mock-get-balances.test.ts
@@ -1,7 +1,7 @@
import {
MOCK_GET_BALANCES_RESPONSE,
createMockGetBalancesResponse,
-} from './mock-get-balances';
+} from './mock-get-balances.js';
describe('mock-get-balances', () => {
describe('MOCK_GET_BALANCES_RESPONSE', () => {
diff --git a/packages/assets-controllers/src/multi-chain-accounts-service/mocks/mock-get-balances.ts b/packages/assets-controllers/src/multi-chain-accounts-service/mocks/mock-get-balances.ts
index 3ac5f716970..6de434c4d82 100644
--- a/packages/assets-controllers/src/multi-chain-accounts-service/mocks/mock-get-balances.ts
+++ b/packages/assets-controllers/src/multi-chain-accounts-service/mocks/mock-get-balances.ts
@@ -1,4 +1,4 @@
-import type { GetBalancesResponse } from '../types';
+import type { GetBalancesResponse } from '../types.js';
export const MOCK_GET_BALANCES_RESPONSE: GetBalancesResponse = {
count: 6,
diff --git a/packages/assets-controllers/src/multi-chain-accounts-service/mocks/mock-get-supported-networks.ts b/packages/assets-controllers/src/multi-chain-accounts-service/mocks/mock-get-supported-networks.ts
index 73370150728..094928d9a10 100644
--- a/packages/assets-controllers/src/multi-chain-accounts-service/mocks/mock-get-supported-networks.ts
+++ b/packages/assets-controllers/src/multi-chain-accounts-service/mocks/mock-get-supported-networks.ts
@@ -1,4 +1,4 @@
-import type { GetSupportedNetworksResponse } from '../types';
+import type { GetSupportedNetworksResponse } from '../types.js';
export const MOCK_GET_SUPPORTED_NETWORKS_RESPONSE: GetSupportedNetworksResponse =
{
diff --git a/packages/assets-controllers/src/multi-chain-accounts-service/multi-chain-accounts.test.ts b/packages/assets-controllers/src/multi-chain-accounts-service/multi-chain-accounts.test.ts
index 184b06c6934..13ed68205bf 100644
--- a/packages/assets-controllers/src/multi-chain-accounts-service/multi-chain-accounts.test.ts
+++ b/packages/assets-controllers/src/multi-chain-accounts-service/multi-chain-accounts.test.ts
@@ -1,13 +1,13 @@
import nock from 'nock';
-import { MOCK_GET_BALANCES_RESPONSE } from './mocks/mock-get-balances';
-import { MOCK_GET_SUPPORTED_NETWORKS_RESPONSE } from './mocks/mock-get-supported-networks';
+import { MOCK_GET_BALANCES_RESPONSE } from './mocks/mock-get-balances.js';
+import { MOCK_GET_SUPPORTED_NETWORKS_RESPONSE } from './mocks/mock-get-supported-networks.js';
import {
MULTICHAIN_ACCOUNTS_DOMAIN,
fetchMultiChainBalances,
fetchMultiChainBalancesV4,
fetchSupportedNetworks,
-} from './multi-chain-accounts';
+} from './multi-chain-accounts.js';
const MOCK_ADDRESS = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045';
const MOCK_CAIP_ADDRESSES = [
diff --git a/packages/assets-controllers/src/multi-chain-accounts-service/multi-chain-accounts.ts b/packages/assets-controllers/src/multi-chain-accounts-service/multi-chain-accounts.ts
index 14c52d44823..5f72dd51692 100644
--- a/packages/assets-controllers/src/multi-chain-accounts-service/multi-chain-accounts.ts
+++ b/packages/assets-controllers/src/multi-chain-accounts-service/multi-chain-accounts.ts
@@ -6,7 +6,7 @@ import type {
GetBalancesQueryParamsV4,
GetBalancesResponse,
GetSupportedNetworksResponse,
-} from './types';
+} from './types.js';
export const MULTICHAIN_ACCOUNTS_DOMAIN = 'https://accounts.api.cx.metamask.io';
diff --git a/packages/assets-controllers/src/multicall.test.ts b/packages/assets-controllers/src/multicall.test.ts
index 78b4bb2e97e..b225b24cc5c 100644
--- a/packages/assets-controllers/src/multicall.test.ts
+++ b/packages/assets-controllers/src/multicall.test.ts
@@ -11,8 +11,8 @@ import {
getTokenBalancesForMultipleAddresses,
getStakedBalancesForAddresses,
getNftOwnershipForMultipleNfts,
-} from './multicall';
-import type { Aggregate3Call, NftOwnershipQuery } from './multicall';
+} from './multicall.js';
+import type { Aggregate3Call, NftOwnershipQuery } from './multicall.js';
const provider = new Web3Provider(jest.fn());
diff --git a/packages/assets-controllers/src/multicall.ts b/packages/assets-controllers/src/multicall.ts
index cd3907e9082..65f728e3f1a 100644
--- a/packages/assets-controllers/src/multicall.ts
+++ b/packages/assets-controllers/src/multicall.ts
@@ -3,8 +3,8 @@ import type { Web3Provider } from '@ethersproject/providers';
import type { Hex } from '@metamask/utils';
import BN from 'bn.js';
-import { STAKING_CONTRACT_ADDRESS_BY_CHAINID } from './AssetsContractController';
-import { reduceInBatchesSerially } from './assetsUtil';
+import { STAKING_CONTRACT_ADDRESS_BY_CHAINID } from './AssetsContractController.js';
+import { reduceInBatchesSerially } from './assetsUtil.js';
// https://github.com/mds1/multicall/blob/main/deployments.json
const MULTICALL_CONTRACT_BY_CHAINID = {
diff --git a/packages/assets-controllers/src/rpc-service/rpc-balance-fetcher.test.ts b/packages/assets-controllers/src/rpc-service/rpc-balance-fetcher.test.ts
index a38c3a66c0e..8bf6cd2ac1f 100644
--- a/packages/assets-controllers/src/rpc-service/rpc-balance-fetcher.test.ts
+++ b/packages/assets-controllers/src/rpc-service/rpc-balance-fetcher.test.ts
@@ -3,10 +3,10 @@ import type { InternalAccount } from '@metamask/keyring-internal-api';
import type { NetworkClient } from '@metamask/network-controller';
import BN from 'bn.js';
-import type { UnprocessedTokens } from '../multi-chain-accounts-service/api-balance-fetcher';
-import type { TokensControllerState } from '../TokensController';
-import { RpcBalanceFetcher } from './rpc-balance-fetcher';
-import type { ChainIdHex, ChecksumAddress } from './rpc-balance-fetcher';
+import type { UnprocessedTokens } from '../multi-chain-accounts-service/api-balance-fetcher.js';
+import type { TokensControllerState } from '../TokensController.js';
+import { RpcBalanceFetcher } from './rpc-balance-fetcher.js';
+import type { ChainIdHex, ChecksumAddress } from './rpc-balance-fetcher.js';
const MOCK_ADDRESS_1 = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045';
const MOCK_ADDRESS_2 = '0x742d35cc6675c4f17f41140100aa83a4b1fa4c82';
diff --git a/packages/assets-controllers/src/rpc-service/rpc-balance-fetcher.ts b/packages/assets-controllers/src/rpc-service/rpc-balance-fetcher.ts
index 327c644d117..f0d6d56cffd 100644
--- a/packages/assets-controllers/src/rpc-service/rpc-balance-fetcher.ts
+++ b/packages/assets-controllers/src/rpc-service/rpc-balance-fetcher.ts
@@ -8,11 +8,11 @@ import type { NetworkClient } from '@metamask/network-controller';
import type { Hex } from '@metamask/utils';
import BN from 'bn.js';
-import { STAKING_CONTRACT_ADDRESS_BY_CHAINID } from '../AssetsContractController';
-import { shouldIncludeNativeToken } from '../constants';
-import type { UnprocessedTokens } from '../multi-chain-accounts-service/api-balance-fetcher';
-import { getTokenBalancesForMultipleAddresses } from '../multicall';
-import type { TokensControllerState } from '../TokensController';
+import { STAKING_CONTRACT_ADDRESS_BY_CHAINID } from '../AssetsContractController.js';
+import { shouldIncludeNativeToken } from '../constants.js';
+import type { UnprocessedTokens } from '../multi-chain-accounts-service/api-balance-fetcher.js';
+import { getTokenBalancesForMultipleAddresses } from '../multicall.js';
+import type { TokensControllerState } from '../TokensController.js';
const RPC_TIMEOUT_MS = 30000;
@@ -162,10 +162,10 @@ export class RpcBalanceFetcher implements BalanceFetcher {
// Ensure native token entries exist for all addresses
allAddressesForNative.forEach((address) => {
- const nativeBalance = tokenBalances[ZERO_ADDRESS]?.[address] || null;
+ const nativeBalance = tokenBalances[ZERO_ADDRESS]?.[address] ?? null;
chainResults.push({
success: true,
- value: nativeBalance || new BN('0'),
+ value: nativeBalance ?? new BN('0'),
account: address as ChecksumAddress,
token: ZERO_ADDRESS,
chainId,
diff --git a/packages/assets-controllers/src/selectors/stringify-balance.test.ts b/packages/assets-controllers/src/selectors/stringify-balance.test.ts
index 7cf8c0b216b..5ba6d2e805b 100644
--- a/packages/assets-controllers/src/selectors/stringify-balance.test.ts
+++ b/packages/assets-controllers/src/selectors/stringify-balance.test.ts
@@ -3,7 +3,7 @@ import { bigIntToHex } from '@metamask/utils';
import {
stringifyBalanceWithDecimals,
parseBalanceWithDecimals,
-} from './stringify-balance';
+} from './stringify-balance.js';
describe('stringifyBalanceWithDecimals', () => {
it('returns the balance early if it is 0', () => {
diff --git a/packages/assets-controllers/src/selectors/token-selectors.test.ts b/packages/assets-controllers/src/selectors/token-selectors.test.ts
index ccbac2f2d21..4071eef7862 100644
--- a/packages/assets-controllers/src/selectors/token-selectors.test.ts
+++ b/packages/assets-controllers/src/selectors/token-selectors.test.ts
@@ -8,18 +8,18 @@ import type { AccountsControllerState } from '@metamask/accounts-controller';
import { TrxScope } from '@metamask/keyring-api';
import type { NetworkState } from '@metamask/network-controller';
import type { Hex } from '@metamask/utils';
-import { cloneDeep } from 'lodash';
-
-import type { AccountGroupMultichainAccountObject } from '../../../account-tree-controller/src/group';
-import type { CurrencyRateState } from '../CurrencyRateController';
-import type { MultichainAssetsControllerState } from '../MultichainAssetsController';
-import type { MultichainAssetsRatesControllerState } from '../MultichainAssetsRatesController';
-import type { MultichainBalancesControllerState } from '../MultichainBalancesController';
-import type { TokenBalancesControllerState } from '../TokenBalancesController';
-import type { TokenRatesControllerState } from '../TokenRatesController';
-import type { TokensControllerState } from '../TokensController';
-import { MOCK_TRON_TOKENS } from './__fixtures__/arrange-tron-state';
-import { selectAssetsBySelectedAccountGroup } from './token-selectors';
+import { cloneDeep } from 'lodash-es';
+
+import type { AccountGroupMultichainAccountObject } from '../../../account-tree-controller/src/group.js';
+import type { CurrencyRateState } from '../CurrencyRateController.js';
+import type { MultichainAssetsControllerState } from '../MultichainAssetsController.js';
+import type { MultichainAssetsRatesControllerState } from '../MultichainAssetsRatesController.js';
+import type { MultichainBalancesControllerState } from '../MultichainBalancesController.js';
+import type { TokenBalancesControllerState } from '../TokenBalancesController.js';
+import type { TokenRatesControllerState } from '../TokenRatesController.js';
+import type { TokensControllerState } from '../TokensController.js';
+import { MOCK_TRON_TOKENS } from './__fixtures__/arrange-tron-state.js';
+import { selectAssetsBySelectedAccountGroup } from './token-selectors.js';
const mockTokensControllerState: TokensControllerState = {
allTokens: {
diff --git a/packages/assets-controllers/src/selectors/token-selectors.ts b/packages/assets-controllers/src/selectors/token-selectors.ts
index 4b6e7dc2b7d..0a8c5ab1317 100644
--- a/packages/assets-controllers/src/selectors/token-selectors.ts
+++ b/packages/assets-controllers/src/selectors/token-selectors.ts
@@ -10,19 +10,22 @@ import type { Hex } from '@metamask/utils';
import { createSelector, weakMapMemoize } from 'reselect';
import { TokenRwaData } from 'src/token-service';
-import { shouldIncludeNativeToken } from '../constants';
-import type { CurrencyRateState } from '../CurrencyRateController';
-import type { MultichainAssetsControllerState } from '../MultichainAssetsController';
-import type { MultichainAssetsRatesControllerState } from '../MultichainAssetsRatesController';
-import type { MultichainBalancesControllerState } from '../MultichainBalancesController';
-import { getNativeTokenAddress } from '../token-prices-service/codefi-v2';
-import type { TokenBalancesControllerState } from '../TokenBalancesController';
-import type { Token, TokenRatesControllerState } from '../TokenRatesController';
-import type { TokensControllerState } from '../TokensController';
+import { shouldIncludeNativeToken } from '../constants.js';
+import type { CurrencyRateState } from '../CurrencyRateController.js';
+import type { MultichainAssetsControllerState } from '../MultichainAssetsController.js';
+import type { MultichainAssetsRatesControllerState } from '../MultichainAssetsRatesController.js';
+import type { MultichainBalancesControllerState } from '../MultichainBalancesController.js';
+import { getNativeTokenAddress } from '../token-prices-service/codefi-v2.js';
+import type { TokenBalancesControllerState } from '../TokenBalancesController.js';
+import type {
+ Token,
+ TokenRatesControllerState,
+} from '../TokenRatesController.js';
+import type { TokensControllerState } from '../TokensController.js';
import {
parseBalanceWithDecimals,
stringifyBalanceWithDecimals,
-} from './stringify-balance';
+} from './stringify-balance.js';
// Asset Tron Filters
export const TRON_RESOURCE = {
@@ -200,10 +203,10 @@ const selectAllEvmAccountNativeBalances = createAssetListSelector(
const groupChainAssets = groupAssets[accountGroupId][chainId];
// If a native balance is missing, we still want to show it as 0
- const rawBalance = accountBalance.balance || '0x0';
+ const rawBalance = accountBalance.balance ?? '0x0';
const nativeCurrency =
- networkConfigurationsByChainId[chainId]?.nativeCurrency || 'NATIVE';
+ networkConfigurationsByChainId[chainId]?.nativeCurrency ?? 'NATIVE';
const nativeToken = {
address: getNativeTokenAddress(chainId),
diff --git a/packages/assets-controllers/src/token-prices-service/abstract-token-prices-service.ts b/packages/assets-controllers/src/token-prices-service/abstract-token-prices-service.ts
index 8c6ad9c9c85..23376d97955 100644
--- a/packages/assets-controllers/src/token-prices-service/abstract-token-prices-service.ts
+++ b/packages/assets-controllers/src/token-prices-service/abstract-token-prices-service.ts
@@ -1,7 +1,7 @@
import type { ServicePolicy } from '@metamask/controller-utils';
import type { CaipAssetType, CaipChainId, Hex } from '@metamask/utils';
-import type { MarketDataDetails } from '../TokenRatesController';
+import type { MarketDataDetails } from '../TokenRatesController.js';
/**
* A map of CAIP-2 chain IDs to their native asset identifiers (CAIP-19 format).
diff --git a/packages/assets-controllers/src/token-prices-service/codefi-v2.test.ts b/packages/assets-controllers/src/token-prices-service/codefi-v2.test.ts
index 47aec3556fb..f81cf6879e7 100644
--- a/packages/assets-controllers/src/token-prices-service/codefi-v2.test.ts
+++ b/packages/assets-controllers/src/token-prices-service/codefi-v2.test.ts
@@ -16,7 +16,7 @@ import {
getSupportedNetworks,
resetSupportedNetworksCache,
getAssetId,
-} from './codefi-v2';
+} from './codefi-v2.js';
// We're not customizing the default max delay
// The default can be found here: https://github.com/connor4312/cockatiel?tab=readme-ov-file#exponentialbackoff
diff --git a/packages/assets-controllers/src/token-prices-service/codefi-v2.ts b/packages/assets-controllers/src/token-prices-service/codefi-v2.ts
index 95e42a9539b..42307d251e2 100644
--- a/packages/assets-controllers/src/token-prices-service/codefi-v2.ts
+++ b/packages/assets-controllers/src/token-prices-service/codefi-v2.ts
@@ -15,7 +15,7 @@ import {
toCaipChainId,
} from '@metamask/utils';
-import type { MarketDataDetails } from '../TokenRatesController';
+import type { MarketDataDetails } from '../TokenRatesController.js';
import type {
AbstractTokenPricesService,
EvmAssetAddressWithChain,
@@ -23,7 +23,7 @@ import type {
EvmAssetWithMarketData,
ExchangeRatesByCurrency,
NativeAssetIdentifiersMap,
-} from './abstract-token-prices-service';
+} from './abstract-token-prices-service.js';
/**
* The list of currencies that can be supplied as the `vsCurrency` parameter to
@@ -913,13 +913,15 @@ export class CodefiTokenPricesServiceV2 implements AbstractTokenPricesService<
throw new Error('Failed to fetch');
}
- const filteredExchangeRates = cryptocurrencies.reduce((acc, key) => {
+ const filteredExchangeRates = cryptocurrencies.reduce<
+ ExchangeRatesByCurrency
+ >((acc, key) => {
if (exchangeRates[key.toLowerCase() as SupportedCurrency]) {
acc[key.toLowerCase() as SupportedCurrency] =
exchangeRates[key.toLowerCase() as SupportedCurrency];
}
return acc;
- }, {} as ExchangeRatesByCurrency);
+ }, {});
if (Object.keys(filteredExchangeRates).length === 0) {
throw new Error(
@@ -927,13 +929,15 @@ export class CodefiTokenPricesServiceV2 implements AbstractTokenPricesService<
);
}
- const filteredUsdExchangeRates = cryptocurrencies.reduce((acc, key) => {
+ const filteredUsdExchangeRates = cryptocurrencies.reduce<
+ ExchangeRatesByCurrency
+ >((acc, key) => {
if (exchangeRatesUsd[key.toLowerCase() as SupportedCurrency]) {
acc[key.toLowerCase() as SupportedCurrency] =
exchangeRatesUsd[key.toLowerCase() as SupportedCurrency];
}
return acc;
- }, {} as ExchangeRatesByCurrency);
+ }, {});
if (baseCurrency.toLowerCase() === 'usd') {
Object.keys(filteredExchangeRates).forEach((key) => {
@@ -948,7 +952,9 @@ export class CodefiTokenPricesServiceV2 implements AbstractTokenPricesService<
return filteredExchangeRates;
}
- const merged = Object.keys(filteredExchangeRates).reduce((acc, key) => {
+ const merged = Object.keys(filteredExchangeRates).reduce<
+ ExchangeRatesByCurrency
+ >((acc, key) => {
acc[key as SupportedCurrency] = {
...filteredExchangeRates[key as SupportedCurrency],
...(filteredUsdExchangeRates[key as SupportedCurrency]?.value
@@ -956,7 +962,7 @@ export class CodefiTokenPricesServiceV2 implements AbstractTokenPricesService<
: {}),
};
return acc;
- }, {} as ExchangeRatesByCurrency);
+ }, {});
return merged;
}
diff --git a/packages/assets-controllers/src/token-prices-service/index.test.ts b/packages/assets-controllers/src/token-prices-service/index.test.ts
index 687fe8b6736..1bcc81fbef5 100644
--- a/packages/assets-controllers/src/token-prices-service/index.test.ts
+++ b/packages/assets-controllers/src/token-prices-service/index.test.ts
@@ -1,4 +1,4 @@
-import * as allExports from '.';
+import * as allExports from './..js';
describe('token-prices-service', () => {
it('has expected exports', () => {
diff --git a/packages/assets-controllers/src/token-prices-service/index.ts b/packages/assets-controllers/src/token-prices-service/index.ts
index da2ee6adffe..8361bb68afa 100644
--- a/packages/assets-controllers/src/token-prices-service/index.ts
+++ b/packages/assets-controllers/src/token-prices-service/index.ts
@@ -1,7 +1,7 @@
export type {
AbstractTokenPricesService,
NativeAssetIdentifiersMap,
-} from './abstract-token-prices-service';
+} from './abstract-token-prices-service.js';
export {
CodefiTokenPricesServiceV2,
SUPPORTED_CHAIN_IDS,
@@ -11,4 +11,4 @@ export {
resetSupportedNetworksCache,
SPOT_PRICES_SUPPORT_INFO,
getAssetId,
-} from './codefi-v2';
+} from './codefi-v2.js';
diff --git a/packages/assets-controllers/src/token-service.test.ts b/packages/assets-controllers/src/token-service.test.ts
index 5661e83422f..153e7376890 100644
--- a/packages/assets-controllers/src/token-service.test.ts
+++ b/packages/assets-controllers/src/token-service.test.ts
@@ -3,7 +3,7 @@ import type { CaipChainId } from '@metamask/utils';
import type { CaipAssetType } from '@metamask/utils';
import nock from 'nock';
-import type { SortTrendingBy } from './token-service';
+import type { SortTrendingBy } from './token-service.js';
import {
fetchRwas,
fetchTokenAssets,
@@ -13,7 +13,7 @@ import {
searchTokens,
TOKEN_END_POINT_API,
TOKEN_METADATA_NO_SUPPORT_ERROR,
-} from './token-service';
+} from './token-service.js';
const ONE_MILLISECOND = 1;
const ONE_SECOND_IN_MILLISECONDS = 1_000;
diff --git a/packages/assets-controllers/src/token-service.ts b/packages/assets-controllers/src/token-service.ts
index 2218fda8690..ed4a08fb25c 100644
--- a/packages/assets-controllers/src/token-service.ts
+++ b/packages/assets-controllers/src/token-service.ts
@@ -6,7 +6,7 @@ import {
} from '@metamask/controller-utils';
import type { CaipAssetType, CaipChainId, Hex } from '@metamask/utils';
-import { isTokenListSupportedForNetwork } from './assetsUtil';
+import { isTokenListSupportedForNetwork } from './assetsUtil.js';
export const TOKEN_END_POINT_API = 'https://token.api.cx.metamask.io';
export const TOKEN_METADATA_NO_SUPPORT_ERROR =
diff --git a/packages/assets-controllers/src/utils/create-batch-handler.test.ts b/packages/assets-controllers/src/utils/create-batch-handler.test.ts
index d3ac6601bd2..f91763e4f78 100644
--- a/packages/assets-controllers/src/utils/create-batch-handler.test.ts
+++ b/packages/assets-controllers/src/utils/create-batch-handler.test.ts
@@ -1,4 +1,4 @@
-import { createBatchedHandler } from './create-batch-handler';
+import { createBatchedHandler } from './create-batch-handler.js';
const TEST_BATCH_MS = 50;
diff --git a/packages/assets-controllers/src/utils/create-batch-handler.ts b/packages/assets-controllers/src/utils/create-batch-handler.ts
index 4d202b9575d..f0bdc872ea2 100644
--- a/packages/assets-controllers/src/utils/create-batch-handler.ts
+++ b/packages/assets-controllers/src/utils/create-batch-handler.ts
@@ -1,4 +1,4 @@
-import { debounce } from 'lodash';
+import { debounce } from 'lodash-es';
type PendingSettler = {
resolve: () => void;
@@ -54,7 +54,7 @@ export function createBatchedHandler- (
return new Promise((resolve, reject) => {
eventBuffer.push(arg);
pendingSettlers.push({ resolve, reject });
- // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Rejections are forwarded to capture() callers via pendingSettlers.
+
debouncedFlush();
});
};
diff --git a/packages/assets-controllers/src/utils/formatters.test.ts b/packages/assets-controllers/src/utils/formatters.test.ts
index e3064ae8596..35badf5b32f 100644
--- a/packages/assets-controllers/src/utils/formatters.test.ts
+++ b/packages/assets-controllers/src/utils/formatters.test.ts
@@ -1,4 +1,4 @@
-import { createFormatters } from './formatters';
+import { createFormatters } from './formatters.js';
const locale = 'en-US';
diff --git a/packages/assets-controllers/src/utils/timeout-with-retry.test.ts b/packages/assets-controllers/src/utils/timeout-with-retry.test.ts
index f39d212a164..e9bcb6a8356 100644
--- a/packages/assets-controllers/src/utils/timeout-with-retry.test.ts
+++ b/packages/assets-controllers/src/utils/timeout-with-retry.test.ts
@@ -1,5 +1,5 @@
-import { flushPromises } from '../../../../tests/helpers';
-import { timeoutWithRetry } from './timeout-with-retry';
+import { flushPromises } from '../../../../tests/helpers.js';
+import { timeoutWithRetry } from './timeout-with-retry.js';
describe('timeoutWithRetry', () => {
const timeout = 1000;
diff --git a/packages/authenticated-user-storage/jest.config.js b/packages/authenticated-user-storage/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/authenticated-user-storage/jest.config.js
+++ b/packages/authenticated-user-storage/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/authenticated-user-storage/package.json b/packages/authenticated-user-storage/package.json
index 14073a68c11..7f6ee112b5f 100644
--- a/packages/authenticated-user-storage/package.json
+++ b/packages/authenticated-user-storage/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,15 +32,15 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/authenticated-user-storage",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/authenticated-user-storage",
"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 --check",
- "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate",
+ "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",
"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",
@@ -63,7 +56,6 @@
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/authenticated-user-storage/src/authenticated-user-storage-method-action-types.ts b/packages/authenticated-user-storage/src/authenticated-user-storage-method-action-types.ts
index b400de367c4..39c88ae9c5b 100644
--- a/packages/authenticated-user-storage/src/authenticated-user-storage-method-action-types.ts
+++ b/packages/authenticated-user-storage/src/authenticated-user-storage-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { AuthenticatedUserStorageService } from './authenticated-user-storage';
+import type { AuthenticatedUserStorageService } from './authenticated-user-storage.js';
/**
* Returns all delegation records belonging to the authenticated user.
diff --git a/packages/authenticated-user-storage/src/authenticated-user-storage.test.ts b/packages/authenticated-user-storage/src/authenticated-user-storage.test.ts
index 6b8ed45cda6..f0c5c3ee8f8 100644
--- a/packages/authenticated-user-storage/src/authenticated-user-storage.test.ts
+++ b/packages/authenticated-user-storage/src/authenticated-user-storage.test.ts
@@ -14,7 +14,7 @@ import {
handleMockPutNotificationPreferences,
handleMockGetAssetsWatchlist,
handleMockSetAssetsWatchlist,
-} from '../tests/fixtures/authenticated-userstorage';
+} from '../tests/fixtures/authenticated-userstorage.js';
import {
MOCK_DELEGATION_RESPONSE,
MOCK_DELEGATION_SUBMISSION,
@@ -22,15 +22,15 @@ import {
MOCK_NOTIFICATION_PREFERENCES,
MOCK_ASSETS_WATCHLIST_BLOB,
MOCK_ASSETS_WATCHLIST_URL,
-} from '../tests/mocks/authenticated-userstorage';
-import type { AuthenticatedUserStorageMessenger } from './authenticated-user-storage';
+} from '../tests/mocks/authenticated-userstorage.js';
+import type { AuthenticatedUserStorageMessenger } from './authenticated-user-storage.js';
import {
getAuthenticatedStorageUrl,
AuthenticatedUserStorageService,
-} from './authenticated-user-storage';
-import type { Environment } from './env';
-import { getUserStorageApiUrl } from './env';
-import { ASSETS_WATCHLIST_MAX_ASSETS } from './validators';
+} from './authenticated-user-storage.js';
+import type { Environment } from './env.js';
+import { getUserStorageApiUrl } from './env.js';
+import { ASSETS_WATCHLIST_MAX_ASSETS } from './validators.js';
const MOCK_ACCESS_TOKEN = 'mock-access-token';
diff --git a/packages/authenticated-user-storage/src/authenticated-user-storage.ts b/packages/authenticated-user-storage/src/authenticated-user-storage.ts
index fc84e00555e..2b14522fe3c 100644
--- a/packages/authenticated-user-storage/src/authenticated-user-storage.ts
+++ b/packages/authenticated-user-storage/src/authenticated-user-storage.ts
@@ -9,22 +9,22 @@ import { HttpError } from '@metamask/controller-utils';
import type { Messenger } from '@metamask/messenger';
import type { Json } from '@metamask/utils';
-import type { AuthenticatedUserStorageServiceMethodActions } from './authenticated-user-storage-method-action-types';
-import type { Environment } from './env';
-import { getUserStorageApiUrl } from './env';
+import type { AuthenticatedUserStorageServiceMethodActions } from './authenticated-user-storage-method-action-types.js';
+import type { Environment } from './env.js';
+import { getUserStorageApiUrl } from './env.js';
import type {
AssetsWatchlistBlob,
ClientType,
DelegationResponse,
DelegationSubmission,
NotificationPreferences,
-} from './types';
+} from './types.js';
import {
assertAssetsWatchlistBlob,
assertAssetsWatchlistBlobForWrite,
assertDelegationResponseArray,
assertNotificationPreferences,
-} from './validators';
+} from './validators.js';
// === GENERAL ===
diff --git a/packages/authenticated-user-storage/src/index.ts b/packages/authenticated-user-storage/src/index.ts
index 96d3efec1ba..d1bb02bdbca 100644
--- a/packages/authenticated-user-storage/src/index.ts
+++ b/packages/authenticated-user-storage/src/index.ts
@@ -1,12 +1,12 @@
export {
getAuthenticatedStorageUrl,
AuthenticatedUserStorageService,
-} from './authenticated-user-storage';
+} from './authenticated-user-storage.js';
export {
ASSETS_WATCHLIST_MAX_ASSETS,
DEFAULT_AGENTIC_CLI_PREFERENCES,
DEFAULT_PRICE_ALERT_PREFERENCES,
-} from './validators';
+} from './validators.js';
export type {
AuthenticatedUserStorageActions,
AuthenticatedUserStorageCacheUpdatedEvent,
@@ -14,7 +14,7 @@ export type {
AuthenticatedUserStorageGranularCacheUpdatedEvent,
AuthenticatedUserStorageInvalidateQueriesAction,
AuthenticatedUserStorageMessenger,
-} from './authenticated-user-storage';
+} from './authenticated-user-storage.js';
export type {
AuthenticatedUserStorageServiceListDelegationsAction,
AuthenticatedUserStorageServiceCreateDelegationAction,
@@ -23,9 +23,9 @@ export type {
AuthenticatedUserStorageServicePutNotificationPreferencesAction,
AuthenticatedUserStorageServiceGetAssetsWatchlistAction,
AuthenticatedUserStorageServiceSetAssetsWatchlistAction,
-} from './authenticated-user-storage-method-action-types';
-export { getUserStorageApiUrl } from './env';
-export type { Environment } from './env';
+} from './authenticated-user-storage-method-action-types.js';
+export { getUserStorageApiUrl } from './env.js';
+export type { Environment } from './env.js';
export type {
Caveat,
SignedDelegation,
@@ -44,4 +44,4 @@ export type {
NotificationPreferences,
AssetsWatchlistBlob,
ClientType,
-} from './types';
+} from './types.js';
diff --git a/packages/authenticated-user-storage/src/types.ts b/packages/authenticated-user-storage/src/types.ts
index f3a2323a19d..8775fc68032 100644
--- a/packages/authenticated-user-storage/src/types.ts
+++ b/packages/authenticated-user-storage/src/types.ts
@@ -133,7 +133,7 @@ export type NotificationPreferences = {
// `./validators` and re-exported here so the public type surface remains in
// `./types`. Keeping the runtime schema and the static type co-located in
// one file keeps the two in lock-step.
-export type { AssetsWatchlistBlob } from './validators';
+export type { AssetsWatchlistBlob } from './validators.js';
// ---------------------------------------------------------------------------
// Shared
diff --git a/packages/authenticated-user-storage/src/validators.ts b/packages/authenticated-user-storage/src/validators.ts
index 8e5eaa0b9a4..8bc6098c6c6 100644
--- a/packages/authenticated-user-storage/src/validators.ts
+++ b/packages/authenticated-user-storage/src/validators.ts
@@ -18,7 +18,7 @@ import type {
DelegationResponse,
NotificationPreferences,
PriceAlertPreference,
-} from './types';
+} from './types.js';
/**
* Matches a 0x-prefixed hex string with zero or more hex digits.
diff --git a/packages/authenticated-user-storage/tests/fixtures/authenticated-userstorage.ts b/packages/authenticated-user-storage/tests/fixtures/authenticated-userstorage.ts
index 564ab5f1a07..10d005b4e90 100644
--- a/packages/authenticated-user-storage/tests/fixtures/authenticated-userstorage.ts
+++ b/packages/authenticated-user-storage/tests/fixtures/authenticated-userstorage.ts
@@ -7,7 +7,7 @@ import {
MOCK_DELEGATION_RESPONSE,
MOCK_NOTIFICATION_PREFERENCES,
MOCK_NOTIFICATION_PREFERENCES_URL,
-} from '../mocks/authenticated-userstorage';
+} from '../mocks/authenticated-userstorage.js';
type MockReply = {
status: nock.StatusCode;
diff --git a/packages/authenticated-user-storage/tests/mocks/authenticated-userstorage.ts b/packages/authenticated-user-storage/tests/mocks/authenticated-userstorage.ts
index 4f82283c601..e959a2fa211 100644
--- a/packages/authenticated-user-storage/tests/mocks/authenticated-userstorage.ts
+++ b/packages/authenticated-user-storage/tests/mocks/authenticated-userstorage.ts
@@ -1,11 +1,11 @@
-import { getAuthenticatedStorageUrl } from '../../src/authenticated-user-storage';
+import { getAuthenticatedStorageUrl } from '../../src/authenticated-user-storage.js';
import type {
AssetsWatchlistBlob,
DelegationResponse,
DelegationSubmission,
NotificationPreferences,
-} from '../../src/types';
-import { DEFAULT_PRICE_ALERT_PREFERENCES } from '../../src/validators';
+} from '../../src/types.js';
+import { DEFAULT_PRICE_ALERT_PREFERENCES } from '../../src/validators.js';
export const MOCK_DELEGATIONS_URL = `${getAuthenticatedStorageUrl('prod')}/delegations`;
export const MOCK_NOTIFICATION_PREFERENCES_URL = `${getAuthenticatedStorageUrl('prod')}/preferences/notifications`;
diff --git a/packages/base-controller/jest.config.js b/packages/base-controller/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/base-controller/jest.config.js
+++ b/packages/base-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/base-controller/package.json b/packages/base-controller/package.json
index 232fb6da728..5287659d824 100644
--- a/packages/base-controller/package.json
+++ b/packages/base-controller/package.json
@@ -18,18 +18,11 @@
"files": [
"dist/"
],
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
+ "type": "module",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -38,8 +31,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/base-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/base-controller",
@@ -57,8 +50,8 @@
"immer": "^9.0.6"
},
"devDependencies": {
+ "@jest/globals": "^30.4.1",
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/base-controller/src/BaseController.test.ts b/packages/base-controller/src/BaseController.test.ts
index b268b451763..6277bc59ea3 100644
--- a/packages/base-controller/src/BaseController.test.ts
+++ b/packages/base-controller/src/BaseController.test.ts
@@ -1,3 +1,4 @@
+import { jest } from '@jest/globals';
/* eslint-disable jest/no-export */
import type { MockAnyNamespace } from '@metamask/messenger';
import { Messenger, MOCK_ANY_NAMESPACE } from '@metamask/messenger';
@@ -11,8 +12,8 @@ import type {
ControllerStateChangeEvent,
ControllerStateChangedEvent,
StatePropertyMetadata,
-} from './BaseController';
-import { BaseController, deriveStateFromMetadata } from './BaseController';
+} from './BaseController.js';
+import { BaseController, deriveStateFromMetadata } from './BaseController.js';
export const countControllerName = 'CountController';
diff --git a/packages/base-controller/src/index.ts b/packages/base-controller/src/index.ts
index 796998c8b79..0a615b60e1e 100644
--- a/packages/base-controller/src/index.ts
+++ b/packages/base-controller/src/index.ts
@@ -11,5 +11,5 @@ export type {
ControllerGetStateAction,
ControllerStateChangeEvent,
ControllerStateChangedEvent,
-} from './BaseController';
-export { BaseController, deriveStateFromMetadata } from './BaseController';
+} from './BaseController.js';
+export { BaseController, deriveStateFromMetadata } from './BaseController.js';
diff --git a/packages/base-data-service/jest.config.js b/packages/base-data-service/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/base-data-service/jest.config.js
+++ b/packages/base-data-service/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/base-data-service/package.json b/packages/base-data-service/package.json
index 408c32fd90c..069288c33f9 100644
--- a/packages/base-data-service/package.json
+++ b/packages/base-data-service/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/base-data-service",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/base-data-service",
@@ -62,11 +55,11 @@
"@tanstack/query-core": "^4.43.0",
"cockatiel": "^3.1.2",
"fast-deep-equal": "^3.1.3",
- "lodash": "^4.17.21"
+ "lodash-es": "^4.17.21"
},
"devDependencies": {
+ "@jest/globals": "^30.4.1",
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"@types/lodash": "^4.14.191",
"deepmerge": "^4.2.2",
diff --git a/packages/base-data-service/src/BaseDataService.test.ts b/packages/base-data-service/src/BaseDataService.test.ts
index af231b5b3a5..70076546ed1 100644
--- a/packages/base-data-service/src/BaseDataService.test.ts
+++ b/packages/base-data-service/src/BaseDataService.test.ts
@@ -1,9 +1,13 @@
+import { jest } from '@jest/globals';
import { MOCK_ANY_NAMESPACE, Messenger } from '@metamask/messenger';
import { hashQueryKey } from '@tanstack/query-core';
import { BrokenCircuitError } from 'cockatiel';
-import { cleanAll } from 'nock';
+import nock from 'nock';
-import { ExampleDataService, serviceName } from '../tests/ExampleDataService';
+import {
+ ExampleDataService,
+ serviceName,
+} from '../tests/ExampleDataService.js';
import {
mockAssets,
mockTransactionsPage1,
@@ -11,8 +15,8 @@ import {
mockTransactionsPage3,
TRANSACTIONS_PAGE_2_CURSOR,
TRANSACTIONS_PAGE_3_CURSOR,
-} from '../tests/mocks';
-import { STORAGE_SERVICE_KEY } from './BaseDataService';
+} from '../tests/mocks.js';
+import { STORAGE_SERVICE_KEY } from './BaseDataService.js';
const TEST_ADDRESS = '0x4bbeEB066eD09B7AEd07bF39EEe0460DFa261520';
@@ -232,7 +236,8 @@ describe('BaseDataService', () => {
});
beforeEach(() => {
- cleanAll();
+ // eslint-disable-next-line import-x/no-named-as-default-member
+ nock.cleanAll();
});
it('retries failed queries using the service policy', async () => {
diff --git a/packages/base-data-service/src/BaseDataService.ts b/packages/base-data-service/src/BaseDataService.ts
index 3b459612253..96b02a38632 100644
--- a/packages/base-data-service/src/BaseDataService.ts
+++ b/packages/base-data-service/src/BaseDataService.ts
@@ -26,13 +26,13 @@ import {
hydrate,
} from '@tanstack/query-core';
import deepEqual from 'fast-deep-equal';
-import { debounce, DebouncedFunc } from 'lodash';
+import { debounce, DebouncedFunc } from 'lodash-es';
import {
createServicePolicy,
CreateServicePolicyOptions,
ServicePolicy,
-} from './createServicePolicy';
+} from './createServicePolicy.js';
// Data service queries use the following format: ['ServiceActionName', ...params]
export type QueryKey = [string, ...Json[]];
diff --git a/packages/base-data-service/src/createServicePolicy.test.ts b/packages/base-data-service/src/createServicePolicy.test.ts
index 9b34660b334..c7dd0c46357 100644
--- a/packages/base-data-service/src/createServicePolicy.test.ts
+++ b/packages/base-data-service/src/createServicePolicy.test.ts
@@ -1,3 +1,4 @@
+import { jest } from '@jest/globals';
import { CircuitState, ConstantBackoff, handleWhen } from 'cockatiel';
import {
@@ -7,7 +8,7 @@ import {
DEFAULT_MAX_CONSECUTIVE_FAILURES,
DEFAULT_MAX_RETRIES,
ServicePolicy,
-} from './createServicePolicy';
+} from './createServicePolicy.js';
describe('createServicePolicy', () => {
beforeEach(() => {
diff --git a/packages/base-data-service/src/index.ts b/packages/base-data-service/src/index.ts
index d0e9673dc01..9313f9d103a 100644
--- a/packages/base-data-service/src/index.ts
+++ b/packages/base-data-service/src/index.ts
@@ -21,8 +21,8 @@ export type {
DataServiceGranularCacheUpdatedEvent,
QueryKey,
PersistenceConfiguration,
-} from './BaseDataService';
-export { BaseDataService } from './BaseDataService';
+} from './BaseDataService.js';
+export { BaseDataService } from './BaseDataService.js';
export {
DEFAULT_CIRCUIT_BREAK_DURATION,
@@ -30,8 +30,8 @@ export {
DEFAULT_MAX_CONSECUTIVE_FAILURES,
DEFAULT_MAX_RETRIES,
createServicePolicy,
-} from './createServicePolicy';
+} from './createServicePolicy.js';
export type {
CreateServicePolicyOptions,
ServicePolicy,
-} from './createServicePolicy';
+} from './createServicePolicy.js';
diff --git a/packages/base-data-service/tests/ExampleDataService-method-action-types.ts b/packages/base-data-service/tests/ExampleDataService-method-action-types.ts
index 037dc899e74..b15943c584d 100644
--- a/packages/base-data-service/tests/ExampleDataService-method-action-types.ts
+++ b/packages/base-data-service/tests/ExampleDataService-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { ExampleDataService } from './ExampleDataService';
+import type { ExampleDataService } from './ExampleDataService.js';
export type ExampleDataServiceGetAssetsAction = {
type: `ExampleDataService:getAssets`;
diff --git a/packages/base-data-service/tests/ExampleDataService.ts b/packages/base-data-service/tests/ExampleDataService.ts
index f6eb3ff93bc..d84e9edf5d1 100644
--- a/packages/base-data-service/tests/ExampleDataService.ts
+++ b/packages/base-data-service/tests/ExampleDataService.ts
@@ -8,8 +8,8 @@ import {
DataServiceCacheUpdatedEvent,
DataServiceGranularCacheUpdatedEvent,
PersistenceConfiguration,
-} from '../src/BaseDataService';
-import { ExampleDataServiceMethodActions } from './ExampleDataService-method-action-types';
+} from '../src/BaseDataService.js';
+import { ExampleDataServiceMethodActions } from './ExampleDataService-method-action-types.js';
export const serviceName = 'ExampleDataService';
diff --git a/packages/bitcoin-regtest-up/jest.config.js b/packages/bitcoin-regtest-up/jest.config.js
index fc9274eb1ef..8f151c5e8b6 100644
--- a/packages/bitcoin-regtest-up/jest.config.js
+++ b/packages/bitcoin-regtest-up/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/bitcoin-regtest-up/package.json b/packages/bitcoin-regtest-up/package.json
index 2f9827693a5..327aa636981 100644
--- a/packages/bitcoin-regtest-up/package.json
+++ b/packages/bitcoin-regtest-up/package.json
@@ -19,19 +19,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -40,8 +33,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/bitcoin-regtest-up",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/bitcoin-regtest-up",
@@ -60,7 +53,6 @@
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/bitcoin-regtest-up/src/bin/bitcoin-regtest-up.ts b/packages/bitcoin-regtest-up/src/bin/bitcoin-regtest-up.ts
index c9cd9985b98..029995a4bbb 100644
--- a/packages/bitcoin-regtest-up/src/bin/bitcoin-regtest-up.ts
+++ b/packages/bitcoin-regtest-up/src/bin/bitcoin-regtest-up.ts
@@ -5,7 +5,7 @@ import {
installBitcoinRegtest,
parseBitcoinRegtestInstallCliOptions,
readBitcoinRegtestInstallOptionsFromPackageJson,
-} from '../install';
+} from '../install.js';
async function main(): Promise {
const [command, ...args] = process.argv.slice(2);
diff --git a/packages/bitcoin-regtest-up/src/index.ts b/packages/bitcoin-regtest-up/src/index.ts
index 7e36171c69b..fe800015793 100644
--- a/packages/bitcoin-regtest-up/src/index.ts
+++ b/packages/bitcoin-regtest-up/src/index.ts
@@ -5,11 +5,11 @@ export {
installBitcoinRegtest,
parseBitcoinRegtestInstallCliOptions,
readBitcoinRegtestInstallOptionsFromPackageJson,
-} from './install';
+} from './install.js';
export type {
BitcoinRegtestArtifactConfig,
BitcoinRegtestArtifactPlatformConfig,
BitcoinRegtestInstallDependencies,
BitcoinRegtestInstallOptions,
BitcoinRegtestInstallResult,
-} from './install';
+} from './install.js';
diff --git a/packages/bitcoin-regtest-up/src/install.test.ts b/packages/bitcoin-regtest-up/src/install.test.ts
index 9481f528cf2..f543af50195 100644
--- a/packages/bitcoin-regtest-up/src/install.test.ts
+++ b/packages/bitcoin-regtest-up/src/install.test.ts
@@ -23,8 +23,8 @@ import {
installBitcoinRegtest,
parseBitcoinRegtestInstallCliOptions,
readBitcoinRegtestInstallOptionsFromPackageJson,
-} from './install';
-import type { BitcoinRegtestInstallDependencies } from './install';
+} from './install.js';
+import type { BitcoinRegtestInstallDependencies } from './install.js';
describe('bitcoin-regtest-up installer', () => {
let tempDirs: string[] = [];
diff --git a/packages/bridge-controller/jest.config.js b/packages/bridge-controller/jest.config.js
index 632d1db1f00..881aa3b0c2e 100644
--- a/packages/bridge-controller/jest.config.js
+++ b/packages/bridge-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/bridge-controller/package.json b/packages/bridge-controller/package.json
index 329871eb235..b47424b8a7e 100644
--- a/packages/bridge-controller/package.json
+++ b/packages/bridge-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/bridge-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/bridge-controller",
@@ -84,12 +77,11 @@
"@metamask/auto-changelog": "^6.1.0",
"@metamask/eth-json-rpc-provider": "^6.0.1",
"@metamask/superstruct": "^3.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
"jest-environment-jsdom": "^29.7.0",
- "lodash": "^4.17.21",
+ "lodash-es": "^4.17.21",
"nock": "^13.3.1",
"ts-jest": "^29.2.5",
"tsx": "^4.20.5",
diff --git a/packages/bridge-controller/src/bridge-controller-method-action-types.ts b/packages/bridge-controller/src/bridge-controller-method-action-types.ts
index 0b592c95cd6..f10b7d816fe 100644
--- a/packages/bridge-controller/src/bridge-controller-method-action-types.ts
+++ b/packages/bridge-controller/src/bridge-controller-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { BridgeController } from './bridge-controller';
+import type { BridgeController } from './bridge-controller.js';
export type BridgeControllerUpdateBridgeQuoteRequestParamsAction = {
type: `BridgeController:updateBridgeQuoteRequestParams`;
diff --git a/packages/bridge-controller/src/bridge-controller.sse.batch.test.ts b/packages/bridge-controller/src/bridge-controller.sse.batch.test.ts
index 23baf3f531c..d9fe142058a 100644
--- a/packages/bridge-controller/src/bridge-controller.sse.batch.test.ts
+++ b/packages/bridge-controller/src/bridge-controller.sse.batch.test.ts
@@ -6,26 +6,26 @@ import type {
MockAnyNamespace,
} from '@metamask/messenger';
-import { flushPromises } from '../../../tests/helpers';
-import { mockBridgeQuotesErc20Erc20V1 } from '../tests/mock-quotes-erc20-erc20';
-import { mockBridgeQuotesNativeErc20V1 } from '../tests/mock-quotes-native-erc20';
+import { flushPromises } from '../../../tests/helpers.js';
+import { mockBridgeQuotesErc20Erc20V1 } from '../tests/mock-quotes-erc20-erc20.js';
+import { mockBridgeQuotesNativeErc20V1 } from '../tests/mock-quotes-native-erc20.js';
import {
advanceToNthTimerThenFlush,
mockSseBatchSellEventSource,
-} from '../tests/mock-sse';
-import { BridgeController } from './bridge-controller';
+} from '../tests/mock-sse.js';
+import { BridgeController } from './bridge-controller.js';
import {
BridgeClientId,
BRIDGE_PROD_API_BASE_URL,
DEFAULT_BRIDGE_CONTROLLER_STATE,
-} from './constants/bridge';
-import * as selectors from './selectors';
-import { ChainId, RequestStatus } from './types';
-import type { BridgeControllerMessenger } from './types';
-import * as balanceUtils from './utils/balance';
-import * as featureFlagUtils from './utils/feature-flags';
-import * as fetchUtils from './utils/fetch';
-import { FeatureId } from './validators/feature-flags';
+} from './constants/bridge.js';
+import * as selectors from './selectors.js';
+import { ChainId, RequestStatus } from './types.js';
+import type { BridgeControllerMessenger } from './types.js';
+import * as balanceUtils from './utils/balance.js';
+import * as featureFlagUtils from './utils/feature-flags.js';
+import * as fetchUtils from './utils/fetch.js';
+import { FeatureId } from './validators/feature-flags.js';
type RootMessenger = Messenger<
MockAnyNamespace,
diff --git a/packages/bridge-controller/src/bridge-controller.sse.test.ts b/packages/bridge-controller/src/bridge-controller.sse.test.ts
index e4a27087208..d06fc9d3758 100644
--- a/packages/bridge-controller/src/bridge-controller.sse.test.ts
+++ b/packages/bridge-controller/src/bridge-controller.sse.test.ts
@@ -9,10 +9,10 @@ import type {
} from '@metamask/messenger';
import { abiERC20 } from '@metamask/metamask-eth-abis';
-import { flushPromises } from '../../../tests/helpers';
-import { mockBridgeQuotesErc20Erc20V1 } from '../tests/mock-quotes-erc20-erc20';
-import { mockBridgeQuotesNativeErc20V1 } from '../tests/mock-quotes-native-erc20';
-import { mockBridgeQuotesNativeErc20EthV1 } from '../tests/mock-quotes-native-erc20-eth';
+import { flushPromises } from '../../../tests/helpers.js';
+import { mockBridgeQuotesErc20Erc20V1 } from '../tests/mock-quotes-erc20-erc20.js';
+import { mockBridgeQuotesNativeErc20EthV1 } from '../tests/mock-quotes-native-erc20-eth.js';
+import { mockBridgeQuotesNativeErc20V1 } from '../tests/mock-quotes-native-erc20.js';
import {
advanceToNthTimer,
advanceToNthTimerThenFlush,
@@ -21,24 +21,24 @@ import {
mockSseEventSourceWithMultipleDelays,
mockSseEventSourceWithWarnings,
mockSseServerError,
-} from '../tests/mock-sse';
-import { BridgeController } from './bridge-controller';
+} from '../tests/mock-sse.js';
+import { BridgeController } from './bridge-controller.js';
import {
BridgeClientId,
BRIDGE_PROD_API_BASE_URL,
DEFAULT_BRIDGE_CONTROLLER_STATE,
ETH_USDT_ADDRESS,
-} from './constants/bridge';
-import { ChainId, RequestStatus } from './types';
-import type { BridgeControllerMessenger } from './types';
-import * as balanceUtils from './utils/balance';
-import { formatChainIdToDec } from './utils/caip-formatters';
-import * as featureFlagUtils from './utils/feature-flags';
-import * as fetchUtils from './utils/fetch';
-import { FeatureId } from './validators/feature-flags';
-import { QuoteStreamCompleteReason } from './validators/quote-stream-complete';
-import { TokenFeatureType } from './validators/token-feature';
-import type { TxData } from './validators/trade';
+} from './constants/bridge.js';
+import { ChainId, RequestStatus } from './types.js';
+import type { BridgeControllerMessenger } from './types.js';
+import * as balanceUtils from './utils/balance.js';
+import { formatChainIdToDec } from './utils/caip-formatters.js';
+import * as featureFlagUtils from './utils/feature-flags.js';
+import * as fetchUtils from './utils/fetch.js';
+import { FeatureId } from './validators/feature-flags.js';
+import { QuoteStreamCompleteReason } from './validators/quote-stream-complete.js';
+import { TokenFeatureType } from './validators/token-feature.js';
+import type { TxData } from './validators/trade.js';
type RootMessenger = Messenger<
MockAnyNamespace,
@@ -747,8 +747,8 @@ describe('BridgeController SSE', function () {
quotesLastFetched: expect.any(Number),
});
const t2 = bridgeController.state.quotesLastFetched;
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- expect(t2).toBeGreaterThan(t1!);
+
+ expect(t2).toBeGreaterThan(t1);
// After 2nd server event
await advanceToNthTimerThenFlush();
@@ -852,10 +852,7 @@ describe('BridgeController SSE', function () {
quotesLastFetched: Date.now(),
assetExchangeRates,
});
- expect(
- bridgeController.state.quotesLastFetched,
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- ).toBeGreaterThan(t2!);
+ expect(bridgeController.state.quotesLastFetched).toBeGreaterThan(t2);
expect(consoleLogSpy.mock.calls).toMatchInlineSnapshot(`
[
[
@@ -942,8 +939,8 @@ describe('BridgeController SSE', function () {
expect(bridgeController.state.quotesRefreshCount).toBe(3);
expect(bridgeController.state.quotes).toStrictEqual([]);
expect(consoleLogSpy).toHaveBeenCalledTimes(1);
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- expect(t5).toBeGreaterThan(t2!);
+
+ expect(t5).toBeGreaterThan(t2);
const expectedState = {
...DEFAULT_BRIDGE_CONTROLLER_STATE,
quotesLoadingStatus: RequestStatus.LOADING,
@@ -1020,10 +1017,7 @@ describe('BridgeController SSE', function () {
...expectedStateAfterFirstQuote,
});
const t4 = bridgeController.state.quotesLastFetched;
- expect(t4).toBe(
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- t5!,
- );
+ expect(t4).toBe(t5);
// All other quotes are received
await advanceToNthTimerThenFlush(3);
expect(bridgeController.state).toStrictEqual({
@@ -1041,10 +1035,7 @@ describe('BridgeController SSE', function () {
})),
assetExchangeRates,
});
- expect(
- bridgeController.state.quotesLastFetched,
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- ).toBe(t4!);
+ expect(bridgeController.state.quotesLastFetched).toBe(t4);
expect(consoleLogSpy).toHaveBeenCalledTimes(1);
expect(fetchBridgeQuotesSpy).toHaveBeenCalledTimes(4);
@@ -1166,10 +1157,7 @@ describe('BridgeController SSE', function () {
await flushPromises();
const t4 = bridgeController.state.quotesLastFetched;
- expect(t4).toBe(
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- t5!,
- );
+ expect(t4).toBe(t5);
expect(bridgeController.state.quotesRefreshCount).toBe(0);
expect(bridgeController.state.quotesLoadingStatus).toBe(
RequestStatus.LOADING,
@@ -1231,10 +1219,7 @@ describe('BridgeController SSE', function () {
await advanceToNthTimerThenFlush();
expect(bridgeController.state).toStrictEqual(expectedState);
const t7 = bridgeController.state.quotesLastFetched;
- expect(t7).toBe(
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- t6!,
- );
+ expect(t7).toBe(t6);
expect(consoleWarnSpy.mock.calls[0]).toMatchInlineSnapshot(`
[
"Quote validation failed",
@@ -1264,10 +1249,7 @@ describe('BridgeController SSE', function () {
quotesRefreshCount: 2,
quotesLoadingStatus: RequestStatus.FETCHED,
});
- expect(bridgeController.state.quotesLastFetched).toBe(
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- t7!,
- );
+ expect(bridgeController.state.quotesLastFetched).toBe(t7);
expect(consoleWarnSpy.mock.calls).toHaveLength(3);
expect(consoleWarnSpy.mock.calls[1]).toMatchInlineSnapshot(`
[
diff --git a/packages/bridge-controller/src/bridge-controller.test.ts b/packages/bridge-controller/src/bridge-controller.test.ts
index dbdc5b1e964..16ac20a45f9 100644
--- a/packages/bridge-controller/src/bridge-controller.test.ts
+++ b/packages/bridge-controller/src/bridge-controller.test.ts
@@ -16,32 +16,35 @@ import type {
import type { CaipAssetType } from '@metamask/utils';
import nock from 'nock';
-import { flushPromises } from '../../../tests/helpers';
-import { handleFetch } from '../../controller-utils/src';
-import { mockBridgeQuotesErc20NativeV1 } from '../tests/mock-quotes-erc20-native';
-import { mockBridgeQuotesNativeErc20V1 } from '../tests/mock-quotes-native-erc20';
-import { mockBridgeQuotesNativeErc20EthV1 } from '../tests/mock-quotes-native-erc20-eth';
-import { mockBridgeQuotesSolErc20V1 } from '../tests/mock-quotes-sol-erc20';
-import { advanceToNthTimerThenFlush } from '../tests/mock-sse';
-import { BridgeController } from './bridge-controller';
+import { flushPromises } from '../../../tests/helpers.js';
+import { handleFetch } from '../../controller-utils/src.js';
+import { mockBridgeQuotesErc20NativeV1 } from '../tests/mock-quotes-erc20-native.js';
+import { mockBridgeQuotesNativeErc20EthV1 } from '../tests/mock-quotes-native-erc20-eth.js';
+import { mockBridgeQuotesNativeErc20V1 } from '../tests/mock-quotes-native-erc20.js';
+import { mockBridgeQuotesSolErc20V1 } from '../tests/mock-quotes-sol-erc20.js';
+import { advanceToNthTimerThenFlush } from '../tests/mock-sse.js';
+import { BridgeController } from './bridge-controller.js';
import {
BridgeClientId,
BRIDGE_PROD_API_BASE_URL,
DEFAULT_BRIDGE_CONTROLLER_STATE,
ETH_USDT_ADDRESS,
-} from './constants/bridge';
-import { SWAPS_API_V2_BASE_URL } from './constants/swaps';
-import * as selectors from './selectors';
-import { ChainId, RequestStatus, SortOrder, StatusTypes } from './types';
-import type { BridgeControllerMessenger, GenericQuoteRequest } from './types';
-import * as balanceUtils from './utils/balance';
-import { getNativeAssetForChainId, isSolanaChainId } from './utils/bridge';
+} from './constants/bridge.js';
+import { SWAPS_API_V2_BASE_URL } from './constants/swaps.js';
+import * as selectors from './selectors.js';
+import { ChainId, RequestStatus, SortOrder, StatusTypes } from './types.js';
+import type {
+ BridgeControllerMessenger,
+ GenericQuoteRequest,
+} from './types.js';
+import * as balanceUtils from './utils/balance.js';
+import { getNativeAssetForChainId, isSolanaChainId } from './utils/bridge.js';
import {
formatAddressToAssetId,
formatChainIdToCaip,
-} from './utils/caip-formatters';
-import * as featureFlagUtils from './utils/feature-flags';
-import * as fetchUtils from './utils/fetch';
+} from './utils/caip-formatters.js';
+import * as featureFlagUtils from './utils/feature-flags.js';
+import * as fetchUtils from './utils/fetch.js';
import {
BatchSellMetricsEventName,
BatchSellMetricsLocation,
@@ -50,9 +53,9 @@ import {
MetricsActionType,
MetricsSwapType,
UnifiedSwapBridgeEventName,
-} from './utils/metrics/constants';
-import { FeatureId } from './validators/feature-flags';
-import type { QuoteResponseV1 } from './validators/quote-response-v1';
+} from './utils/metrics/constants.js';
+import { FeatureId } from './validators/feature-flags.js';
+import type { QuoteResponseV1 } from './validators/quote-response-v1.js';
const EMPTY_INIT_STATE = DEFAULT_BRIDGE_CONTROLLER_STATE;
@@ -995,8 +998,8 @@ describe('BridgeController', function () {
);
expect(fetchBridgeQuotesSpy).toHaveBeenCalledTimes(2);
const secondFetchTime = bridgeController.state.quotesLastFetched;
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- expect(secondFetchTime).toBeGreaterThan(firstFetchTime!);
+
+ expect(secondFetchTime).toBeGreaterThan(firstFetchTime);
// After 3nd fetch throws an error
jest.advanceTimersToNextTimer();
@@ -1019,10 +1022,9 @@ describe('BridgeController', function () {
quotesRefreshCount: 3,
}),
);
- expect(
- bridgeController.state.quotesLastFetched,
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- ).toBeGreaterThan(secondFetchTime!);
+ expect(bridgeController.state.quotesLastFetched).toBeGreaterThan(
+ secondFetchTime,
+ );
const thirdFetchTime = bridgeController.state.quotesLastFetched;
// Incoming request update aborts current polling
@@ -1065,10 +1067,7 @@ describe('BridgeController', function () {
...mockBridgeQuotesNativeErc20EthV1,
...mockBridgeQuotesNativeErc20EthV1,
]);
- expect(
- quotesLastFetched,
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- ).toBeGreaterThan(thirdFetchTime!);
+ expect(quotesLastFetched).toBeGreaterThan(thirdFetchTime);
expect(hasSufficientBalanceSpy).toHaveBeenCalledTimes(1);
expect(getLayer1GasFeeMock).not.toHaveBeenCalled();
diff --git a/packages/bridge-controller/src/bridge-controller.ts b/packages/bridge-controller/src/bridge-controller.ts
index 8e81ad76817..48279450c32 100644
--- a/packages/bridge-controller/src/bridge-controller.ts
+++ b/packages/bridge-controller/src/bridge-controller.ts
@@ -10,22 +10,22 @@ import { StaticIntervalPollingController } from '@metamask/polling-controller';
import type { TransactionController } from '@metamask/transaction-controller';
import type { CaipAssetType, Hex } from '@metamask/utils';
-import type { BridgeClientId } from './constants/bridge';
+import type { BridgeClientId } from './constants/bridge.js';
import {
BRIDGE_CONTROLLER_NAME,
BRIDGE_PROD_API_BASE_URL,
DEFAULT_BRIDGE_CONTROLLER_STATE,
METABRIDGE_ETHEREUM_ADDRESS,
REFRESH_INTERVAL_MS,
-} from './constants/bridge';
-import { CHAIN_IDS } from './constants/chains';
-import { SWAPS_CONTRACT_ADDRESSES } from './constants/swaps';
-import { TraceName } from './constants/traces';
+} from './constants/bridge.js';
+import { CHAIN_IDS } from './constants/chains.js';
+import { SWAPS_CONTRACT_ADDRESSES } from './constants/swaps.js';
+import { TraceName } from './constants/traces.js';
import {
ExchangeRateSourcesForLookup,
selectIsAssetExchangeRateInState,
-} from './selectors';
-import { RequestStatus } from './types';
+} from './selectors.js';
+import { RequestStatus } from './types.js';
import type {
L1GasFees,
GenericQuoteRequest,
@@ -35,42 +35,42 @@ import type {
BridgeControllerMessenger,
FetchFunction,
InputPrimaryDenomination,
-} from './types';
-import { getAssetIdsForToken, toExchangeRates } from './utils/assets';
-import { hasSufficientBalance } from './utils/balance';
+} from './types.js';
+import { getAssetIdsForToken, toExchangeRates } from './utils/assets.js';
+import { hasSufficientBalance } from './utils/balance.js';
import {
getDefaultBridgeControllerState,
isCrossChain,
isEthUsdt,
isNonEvmChainId,
isSolanaChainId,
-} from './utils/bridge';
+} from './utils/bridge.js';
import {
formatAddressToCaipReference,
formatChainIdToCaip,
formatChainIdToHex,
-} from './utils/caip-formatters';
+} from './utils/caip-formatters.js';
import {
getBridgeFeatureFlags,
hasMinimumRequiredVersion,
-} from './utils/feature-flags';
+} from './utils/feature-flags.js';
import {
fetchAssetPrices,
fetchBridgeQuotes,
fetchBridgeQuoteStream,
fetchBatchSellTrades,
-} from './utils/fetch';
+} from './utils/fetch.js';
import {
AbortReason,
BatchSellMetricsEventName,
MetaMetricsSwapsEventSource,
MetricsActionType,
UnifiedSwapBridgeEventName,
-} from './utils/metrics/constants';
+} from './utils/metrics/constants.js';
import type {
BridgeControllerMetricsEventName,
BridgeControllerMetricsLocation,
-} from './utils/metrics/constants';
+} from './utils/metrics/constants.js';
import {
formatProviderLabel,
getAccountHardwareType,
@@ -79,22 +79,22 @@ import {
isCustomSlippage,
toInputChangedPropertyKey,
toInputChangedPropertyValue,
-} from './utils/metrics/properties';
+} from './utils/metrics/properties.js';
import type {
QuoteFetchData,
RequestMetadata,
RequiredEventContextFromClient,
-} from './utils/metrics/types';
-import type { CrossChainSwapsEventProperties } from './utils/metrics/types';
+} from './utils/metrics/types.js';
+import type { CrossChainSwapsEventProperties } from './utils/metrics/types.js';
+import { appendFeesToQuotes } from './utils/quote-fees.js';
import {
isValidQuoteRequest,
isValidBatchSellQuoteRequest,
sortQuotes,
-} from './utils/quote';
-import { appendFeesToQuotes } from './utils/quote-fees';
-import { getMinimumBalanceForRentExemptionInLamports } from './utils/snaps';
-import type { FeatureId } from './validators/feature-flags';
-import type { QuoteResponseV1 } from './validators/quote-response-v1';
+} from './utils/quote.js';
+import { getMinimumBalanceForRentExemptionInLamports } from './utils/snaps.js';
+import type { FeatureId } from './validators/feature-flags.js';
+import type { QuoteResponseV1 } from './validators/quote-response-v1.js';
const metadata: StateMetadata = {
quoteRequest: {
diff --git a/packages/bridge-controller/src/constants/bridge.ts b/packages/bridge-controller/src/constants/bridge.ts
index 663253e2d4b..c9f25a3aa5d 100644
--- a/packages/bridge-controller/src/constants/bridge.ts
+++ b/packages/bridge-controller/src/constants/bridge.ts
@@ -5,8 +5,8 @@ import type { Hex } from '@metamask/utils';
import type {
BridgeControllerState,
FeatureFlagsPlatformConfig,
-} from '../types';
-import { CHAIN_IDS } from './chains';
+} from '../types.js';
+import { CHAIN_IDS } from './chains.js';
export const ALLOWED_BRIDGE_CHAIN_IDS = [
CHAIN_IDS.MAINNET,
diff --git a/packages/bridge-controller/src/constants/swaps.ts b/packages/bridge-controller/src/constants/swaps.ts
index 1c968c2fef5..652634dc17f 100644
--- a/packages/bridge-controller/src/constants/swaps.ts
+++ b/packages/bridge-controller/src/constants/swaps.ts
@@ -1,6 +1,6 @@
import type { Hex } from '@metamask/utils';
-import { CHAIN_IDS } from './chains';
+import { CHAIN_IDS } from './chains.js';
export const SWAPS_API_V2_BASE_URL = 'https://swap.api.cx.metamask.io';
diff --git a/packages/bridge-controller/src/constants/tokens.ts b/packages/bridge-controller/src/constants/tokens.ts
index f1b6615e2a5..ae26ea1c8b4 100644
--- a/packages/bridge-controller/src/constants/tokens.ts
+++ b/packages/bridge-controller/src/constants/tokens.ts
@@ -1,7 +1,7 @@
import { BtcScope, SolScope, TrxScope, XlmScope } from '@metamask/keyring-api';
-import type { AllowedBridgeChainIds } from './bridge';
-import { CHAIN_IDS } from './chains';
+import type { AllowedBridgeChainIds } from './bridge.js';
+import { CHAIN_IDS } from './chains.js';
export type SwapsTokenObject = {
/**
diff --git a/packages/bridge-controller/src/index.ts b/packages/bridge-controller/src/index.ts
index 5bd78eb6e51..c2878523958 100644
--- a/packages/bridge-controller/src/index.ts
+++ b/packages/bridge-controller/src/index.ts
@@ -1,4 +1,4 @@
-export { BridgeController } from './bridge-controller';
+export { BridgeController } from './bridge-controller.js';
export {
BatchSellMetricsEventName,
@@ -9,10 +9,10 @@ export {
InputAmountPreset,
MetaMetricsSwapsEventSource,
PollingStatus,
-} from './utils/metrics/constants';
+} from './utils/metrics/constants.js';
-export type { BridgeControllerMetricsEventName } from './utils/metrics/constants';
-export type { BridgeControllerMetricsLocation } from './utils/metrics/constants';
+export type { BridgeControllerMetricsEventName } from './utils/metrics/constants.js';
+export type { BridgeControllerMetricsLocation } from './utils/metrics/constants.js';
export type {
AccountHardwareType,
@@ -25,7 +25,7 @@ export type {
QuoteFetchData,
QuoteWarning,
InputPrimaryDenominationData,
-} from './utils/metrics/types';
+} from './utils/metrics/types.js';
export {
getAccountHardwareType,
@@ -35,7 +35,7 @@ export {
isHardwareWallet,
isCustomSlippage,
getQuotesReceivedProperties,
-} from './utils/metrics/properties';
+} from './utils/metrics/properties.js';
export type {
ChainConfiguration,
@@ -67,7 +67,7 @@ export type {
QuoteStreamCompleteData,
BridgeControllerGetStateAction,
BridgeControllerStateChangeEvent,
-} from './types';
+} from './types.js';
export {
AssetType,
@@ -75,7 +75,7 @@ export {
ChainId,
RequestStatus,
StatusTypes,
-} from './types';
+} from './types.js';
export type {
BridgeControllerUpdateBridgeQuoteRequestParamsAction,
@@ -88,9 +88,9 @@ export type {
BridgeControllerSetChainIntervalLengthAction,
BridgeControllerTrackUnifiedSwapBridgeEventAction,
BridgeControllerUpdateBatchSellTradesAction,
-} from './bridge-controller-method-action-types';
+} from './bridge-controller-method-action-types.js';
-export { AbortReason } from './utils/metrics/constants';
+export { AbortReason } from './utils/metrics/constants.js';
export type {
TxData,
@@ -98,25 +98,25 @@ export type {
TronTradeData,
StellarTradeData,
Trade,
-} from './validators/trade';
+} from './validators/trade.js';
export {
isBitcoinTrade,
isTronTrade,
isEvmTxData,
isStellarTrade,
-} from './validators/trade';
-export type { QuoteResponseV1 as QuoteResponse } from './validators/quote-response-v1';
-export type { Quote } from './validators/quote';
-export { FeeType, DiscountType } from './validators/quote';
-export { ActionTypes } from './validators/step';
+} from './validators/trade.js';
+export type { QuoteResponseV1 as QuoteResponse } from './validators/quote-response-v1.js';
+export type { Quote } from './validators/quote.js';
+export { FeeType, DiscountType } from './validators/quote.js';
+export { ActionTypes } from './validators/step.js';
export {
validateQuoteStreamComplete,
QuoteStreamCompleteReason,
-} from './validators/quote-stream-complete';
-export { BatchSellTransactionType } from './validators/batch-sell';
-export { TokenFeatureType } from './validators/token-feature';
-export { BridgeAssetSchema } from './validators/bridge-asset';
-export { FeatureId } from './validators/feature-flags';
+} from './validators/quote-stream-complete.js';
+export { BatchSellTransactionType } from './validators/batch-sell.js';
+export { TokenFeatureType } from './validators/token-feature.js';
+export { BridgeAssetSchema } from './validators/bridge-asset.js';
+export { FeatureId } from './validators/feature-flags.js';
export {
ALLOWED_BRIDGE_CHAIN_IDS,
@@ -132,9 +132,9 @@ export {
METABRIDGE_CHAIN_TO_ADDRESS_MAP,
BRIDGE_DEV_API_BASE_URL,
BRIDGE_PROD_API_BASE_URL,
-} from './constants/bridge';
+} from './constants/bridge.js';
-export type { AllowedBridgeChainIds } from './constants/bridge';
+export type { AllowedBridgeChainIds } from './constants/bridge.js';
export {
/**
@@ -145,16 +145,19 @@ export {
* @deprecated This map should not be used. Use getNativeAssetForChainId" } instead.
*/
SWAPS_CHAINID_DEFAULT_TOKEN_MAP,
-} from './constants/tokens';
+} from './constants/tokens.js';
export {
SWAPS_API_V2_BASE_URL,
SWAPS_CONTRACT_ADDRESSES,
SWAPS_WRAPPED_TOKENS_ADDRESSES,
ALLOWED_CONTRACT_ADDRESSES,
-} from './constants/swaps';
+} from './constants/swaps.js';
-export { MetricsActionType, MetricsSwapType } from './utils/metrics/constants';
+export {
+ MetricsActionType,
+ MetricsSwapType,
+} from './utils/metrics/constants.js';
export {
isEthUsdt,
@@ -167,33 +170,33 @@ export {
getNativeAssetForChainId,
getDefaultBridgeControllerState,
isCrossChain,
-} from './utils/bridge';
+} from './utils/bridge.js';
export {
isValidQuoteRequest,
isValidBatchSellQuoteRequest,
formatEtaInMinutes,
calcSlippagePercentage,
-} from './utils/quote';
+} from './utils/quote.js';
-export { calcLatestSrcBalance } from './utils/balance';
+export { calcLatestSrcBalance } from './utils/balance.js';
export {
fetchBridgeTokens,
getClientHeaders,
fetchBridgeQuoteStream,
-} from './utils/fetch';
+} from './utils/fetch.js';
-export { appendFeesToQuotes } from './utils/quote-fees';
+export { appendFeesToQuotes } from './utils/quote-fees.js';
export {
formatChainIdToCaip,
formatChainIdToHex,
formatAddressToCaipReference,
formatAddressToAssetId,
-} from './utils/caip-formatters';
+} from './utils/caip-formatters.js';
-export { extractTradeData } from './utils/trade-utils';
+export { extractTradeData } from './utils/trade-utils.js';
export {
selectBridgeQuotes,
@@ -206,17 +209,17 @@ export {
selectBridgeFeatureFlags,
selectMinimumBalanceForRentExemptionInSOL,
selectTokenWarnings,
-} from './selectors';
+} from './selectors.js';
-export { DEFAULT_FEATURE_FLAG_CONFIG } from './constants/bridge';
+export { DEFAULT_FEATURE_FLAG_CONFIG } from './constants/bridge.js';
-export { getBridgeFeatureFlags } from './utils/feature-flags';
+export { getBridgeFeatureFlags } from './utils/feature-flags.js';
-export { BRIDGE_DEFAULT_SLIPPAGE } from './utils/slippage';
+export { BRIDGE_DEFAULT_SLIPPAGE } from './utils/slippage.js';
export {
isValidSwapsContractAddress,
getSwapsContractAddress,
fetchTokens,
type SwapsToken,
-} from './utils/swaps';
+} from './utils/swaps.js';
diff --git a/packages/bridge-controller/src/selectors.test.ts b/packages/bridge-controller/src/selectors.test.ts
index 03f12996ebe..e3037fdcd06 100644
--- a/packages/bridge-controller/src/selectors.test.ts
+++ b/packages/bridge-controller/src/selectors.test.ts
@@ -4,12 +4,12 @@ import { toHex } from '@metamask/controller-utils';
import { SolScope } from '@metamask/keyring-api';
import { parseCaipAssetType } from '@metamask/utils';
import { BigNumber } from 'bignumber.js';
-import { merge } from 'lodash';
+import { merge } from 'lodash-es';
-import { mockBridgeQuotesErc20Erc20V1 } from '../tests/mock-quotes-erc20-erc20';
-import { mockBridgeQuotesNativeErc20V1 } from '../tests/mock-quotes-native-erc20';
-import { DEFAULT_CHAIN_RANKING, ETH_USDT_ADDRESS } from './constants/bridge';
-import type { BridgeAppState } from './selectors';
+import { mockBridgeQuotesErc20Erc20V1 } from '../tests/mock-quotes-erc20-erc20.js';
+import { mockBridgeQuotesNativeErc20V1 } from '../tests/mock-quotes-native-erc20.js';
+import { DEFAULT_CHAIN_RANKING, ETH_USDT_ADDRESS } from './constants/bridge.js';
+import type { BridgeAppState } from './selectors.js';
import {
selectExchangeRateByAssetId,
selectIsAssetExchangeRateInState,
@@ -21,25 +21,25 @@ import {
selectTokenWarnings,
selectBatchSellQuotes,
selectBatchSellTrades,
-} from './selectors';
+} from './selectors.js';
import {
SortOrder,
RequestStatus,
ChainId,
BridgeAsset,
NonEvmFees,
-} from './types';
-import { getNativeAssetForChainId, isNativeAddress } from './utils/bridge';
+} from './types.js';
+import { getNativeAssetForChainId, isNativeAddress } from './utils/bridge.js';
import {
formatAddressToAssetId,
formatAddressToCaipReference,
formatChainIdToCaip,
formatChainIdToDec,
formatChainIdToHex,
-} from './utils/caip-formatters';
-import { BatchSellTransactionType } from './validators/batch-sell';
-import type { QuoteResponseV1 } from './validators/quote-response-v1';
-import { validateQuoteResponseV1 } from './validators/quote-response-v1';
+} from './utils/caip-formatters.js';
+import { BatchSellTransactionType } from './validators/batch-sell.js';
+import type { QuoteResponseV1 } from './validators/quote-response-v1.js';
+import { validateQuoteResponseV1 } from './validators/quote-response-v1.js';
const MOCK_USDC_ADDRESS = '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48';
const MOCK_MUSD_ADDRESS = '0x12345A7890123456789012345678901234567890';
@@ -347,8 +347,7 @@ describe('Bridge Selectors', () => {
quotesLastFetched: Date.now() - 40000, // 40 seconds ago
remoteFeatureFlags: {
bridgeConfig: {
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- ...(mockState.remoteFeatureFlags.bridgeConfig as any),
+ ...mockState.remoteFeatureFlags.bridgeConfig,
chainRanking: [],
chains: {
'1': {
@@ -382,8 +381,7 @@ describe('Bridge Selectors', () => {
quotesLastFetched: Date.now() - 40000, // 40 seconds ago
remoteFeatureFlags: {
bridgeConfig: {
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- ...(mockState.remoteFeatureFlags.bridgeConfig as any),
+ ...mockState.remoteFeatureFlags.bridgeConfig,
chainRanking: [],
chains: {
'1': {
diff --git a/packages/bridge-controller/src/selectors.ts b/packages/bridge-controller/src/selectors.ts
index a9246b7bee5..8f1f93f663b 100644
--- a/packages/bridge-controller/src/selectors.ts
+++ b/packages/bridge-controller/src/selectors.ts
@@ -12,33 +12,33 @@ import type {
import type { CaipAssetType } from '@metamask/utils';
import { isStrictHexString, parseCaipAssetType } from '@metamask/utils';
import { BigNumber } from 'bignumber.js';
-import { orderBy } from 'lodash';
+import { orderBy } from 'lodash-es';
import {
createSelector as createSelector_,
createStructuredSelector as createStructuredSelector_,
} from 'reselect';
-import { BRIDGE_PREFERRED_GAS_ESTIMATE } from './constants/bridge';
+import { BRIDGE_PREFERRED_GAS_ESTIMATE } from './constants/bridge.js';
import type {
BridgeControllerState,
ExchangeRate,
QuoteMetadata,
TokenAmountValues,
-} from './types';
-import { RequestStatus, SortOrder } from './types';
+} from './types.js';
+import { RequestStatus, SortOrder } from './types.js';
import {
getNativeAssetForChainId,
isEvmQuoteResponse,
isNativeAddress,
isNonEvmChainId,
-} from './utils/bridge';
+} from './utils/bridge.js';
import {
formatAddressToAssetId,
formatAddressToCaipReference,
formatChainIdToCaip,
formatChainIdToHex,
-} from './utils/caip-formatters';
-import { processFeatureFlags } from './utils/feature-flags';
+} from './utils/caip-formatters.js';
+import { processFeatureFlags } from './utils/feature-flags.js';
import {
calcAdjustedReturn,
calcCost,
@@ -52,9 +52,9 @@ import {
calcTotalEstimatedNetworkFee,
calcTotalMaxNetworkFee,
calcBatchFees,
-} from './utils/quote';
-import { getDefaultSlippagePercentage } from './utils/slippage';
-import type { QuoteResponseV1 } from './validators/quote-response-v1';
+} from './utils/quote.js';
+import { getDefaultSlippagePercentage } from './utils/slippage.js';
+import type { QuoteResponseV1 } from './validators/quote-response-v1.js';
/**
* The controller states that provide exchange rates
diff --git a/packages/bridge-controller/src/types.ts b/packages/bridge-controller/src/types.ts
index d0228f874ac..1bd51a28d4e 100644
--- a/packages/bridge-controller/src/types.ts
+++ b/packages/bridge-controller/src/types.ts
@@ -27,25 +27,25 @@ import type {
Hex,
} from '@metamask/utils';
-import type { BridgeController } from './bridge-controller';
-import type { BridgeControllerMethodActions } from './bridge-controller-method-action-types';
-import type { BRIDGE_CONTROLLER_NAME } from './constants/bridge';
-import type { SimulatedGasFeeLimitsSchema } from './validators/batch-sell';
-import type { BatchSellTradesResponseSchema } from './validators/batch-sell';
-import type { BridgeAssetSchema } from './validators/bridge-asset';
+import type { BridgeControllerMethodActions } from './bridge-controller-method-action-types.js';
+import type { BridgeController } from './bridge-controller.js';
+import type { BRIDGE_CONTROLLER_NAME } from './constants/bridge.js';
+import type { SimulatedGasFeeLimitsSchema } from './validators/batch-sell.js';
+import type { BatchSellTradesResponseSchema } from './validators/batch-sell.js';
+import type { BridgeAssetSchema } from './validators/bridge-asset.js';
import type {
ChainConfigurationSchema,
ChainRankingSchema,
PlatformConfigSchema,
-} from './validators/feature-flags';
-import type { IntentSchema } from './validators/intent';
-import type { TxFeeGasLimitsSchema } from './validators/quote';
-import type { FeeDataSchema } from './validators/quote';
-import type { GaslessPropertiesSchema } from './validators/quote';
-import type { QuoteResponseV1 } from './validators/quote-response-v1';
-import type { QuoteStreamCompleteSchema } from './validators/quote-stream-complete';
-import type { StepSchema } from './validators/step';
-import type { TokenFeatureSchema } from './validators/token-feature';
+} from './validators/feature-flags.js';
+import type { IntentSchema } from './validators/intent.js';
+import type { QuoteResponseV1 } from './validators/quote-response-v1.js';
+import type { QuoteStreamCompleteSchema } from './validators/quote-stream-complete.js';
+import type { TxFeeGasLimitsSchema } from './validators/quote.js';
+import type { FeeDataSchema } from './validators/quote.js';
+import type { GaslessPropertiesSchema } from './validators/quote.js';
+import type { StepSchema } from './validators/step.js';
+import type { TokenFeatureSchema } from './validators/token-feature.js';
export type FetchFunction = (
input: RequestInfo | URL | string,
diff --git a/packages/bridge-controller/src/utils/assets.test.ts b/packages/bridge-controller/src/utils/assets.test.ts
index e51a9e0a3dd..8e85e00e726 100644
--- a/packages/bridge-controller/src/utils/assets.test.ts
+++ b/packages/bridge-controller/src/utils/assets.test.ts
@@ -1,8 +1,8 @@
import type { CaipAssetType } from '@metamask/utils';
-import { getAssetIdsForToken, toExchangeRates } from './assets';
-import { getNativeAssetForChainId } from './bridge';
-import { formatAddressToAssetId } from './caip-formatters';
+import { getAssetIdsForToken, toExchangeRates } from './assets.js';
+import { getNativeAssetForChainId } from './bridge.js';
+import { formatAddressToAssetId } from './caip-formatters.js';
// Mock the imported functions
jest.mock('./bridge', () => ({
diff --git a/packages/bridge-controller/src/utils/assets.ts b/packages/bridge-controller/src/utils/assets.ts
index 41bc81f3f50..db540aa01eb 100644
--- a/packages/bridge-controller/src/utils/assets.ts
+++ b/packages/bridge-controller/src/utils/assets.ts
@@ -1,8 +1,8 @@
import type { CaipAssetType } from '@metamask/utils';
-import type { ExchangeRate, GenericQuoteRequest } from '../types';
-import { getNativeAssetForChainId } from './bridge';
-import { formatAddressToAssetId } from './caip-formatters';
+import type { ExchangeRate, GenericQuoteRequest } from '../types.js';
+import { getNativeAssetForChainId } from './bridge.js';
+import { formatAddressToAssetId } from './caip-formatters.js';
export const getAssetIdsForToken = (
tokenAddress: GenericQuoteRequest['srcTokenAddress'],
diff --git a/packages/bridge-controller/src/utils/balance.test.ts b/packages/bridge-controller/src/utils/balance.test.ts
index f3db1e42a5f..9bea4dbf5f7 100644
--- a/packages/bridge-controller/src/utils/balance.test.ts
+++ b/packages/bridge-controller/src/utils/balance.test.ts
@@ -5,9 +5,9 @@ import { Web3Provider } from '@ethersproject/providers';
import { abiERC20 } from '@metamask/metamask-eth-abis';
import type { Provider } from '@metamask/network-controller';
-import { FakeProvider } from '../../../../tests/fake-provider';
-import * as balanceUtils from './balance';
-import { fetchTokenBalance } from './balance';
+import { FakeProvider } from '../../../../tests/fake-provider.js';
+import * as balanceUtils from './balance.js';
+import { fetchTokenBalance } from './balance.js';
declare global {
var ethereumProvider: Provider;
diff --git a/packages/bridge-controller/src/utils/balance.ts b/packages/bridge-controller/src/utils/balance.ts
index 56eb212f5f4..4120c1d11d4 100644
--- a/packages/bridge-controller/src/utils/balance.ts
+++ b/packages/bridge-controller/src/utils/balance.ts
@@ -6,7 +6,7 @@ import { abiERC20 } from '@metamask/metamask-eth-abis';
import type { Provider } from '@metamask/network-controller';
import type { Hex } from '@metamask/utils';
-import { isNativeAddress } from './bridge';
+import { isNativeAddress } from './bridge.js';
export const fetchTokenBalance = async (
address: string,
diff --git a/packages/bridge-controller/src/utils/bridge.test.ts b/packages/bridge-controller/src/utils/bridge.test.ts
index f24dea769ae..360b53cc3c1 100644
--- a/packages/bridge-controller/src/utils/bridge.test.ts
+++ b/packages/bridge-controller/src/utils/bridge.test.ts
@@ -4,10 +4,10 @@ import type { Hex } from '@metamask/utils';
import {
ETH_USDT_ADDRESS,
METABRIDGE_ETHEREUM_ADDRESS,
-} from '../constants/bridge';
-import { CHAIN_IDS } from '../constants/chains';
-import { SWAPS_CHAINID_DEFAULT_TOKEN_MAP } from '../constants/tokens';
-import { ChainId } from '../types';
+} from '../constants/bridge.js';
+import { CHAIN_IDS } from '../constants/chains.js';
+import { SWAPS_CHAINID_DEFAULT_TOKEN_MAP } from '../constants/tokens.js';
+import { ChainId } from '../types.js';
import {
getNativeAssetForChainId,
isBitcoinChainId,
@@ -19,7 +19,7 @@ import {
isSwapsDefaultTokenAddress,
isSwapsDefaultTokenSymbol,
sumHexes,
-} from './bridge';
+} from './bridge.js';
describe('Bridge utils', () => {
beforeEach(() => {
diff --git a/packages/bridge-controller/src/utils/bridge.ts b/packages/bridge-controller/src/utils/bridge.ts
index a51bf2d4eff..09cd6e23ad0 100644
--- a/packages/bridge-controller/src/utils/bridge.ts
+++ b/packages/bridge-controller/src/utils/bridge.ts
@@ -10,27 +10,27 @@ import {
DEFAULT_BRIDGE_CONTROLLER_STATE,
ETH_USDT_ADDRESS,
METABRIDGE_ETHEREUM_ADDRESS,
-} from '../constants/bridge';
-import { CHAIN_IDS } from '../constants/chains';
-import { SWAPS_CONTRACT_ADDRESSES } from '../constants/swaps';
+} from '../constants/bridge.js';
+import { CHAIN_IDS } from '../constants/chains.js';
+import { SWAPS_CONTRACT_ADDRESSES } from '../constants/swaps.js';
import {
SWAPS_CHAINID_DEFAULT_TOKEN_MAP,
SYMBOL_TO_SLIP44_MAP,
-} from '../constants/tokens';
-import type { SupportedSwapsNativeCurrencySymbols } from '../constants/tokens';
+} from '../constants/tokens.js';
+import type { SupportedSwapsNativeCurrencySymbols } from '../constants/tokens.js';
import type {
BridgeAsset,
BridgeControllerState,
GenericQuoteRequest,
-} from '../types';
-import { ChainId } from '../types';
-import type { QuoteResponseV1 } from '../validators/quote-response-v1';
-import type { TxData } from '../validators/trade';
+} from '../types.js';
+import { ChainId } from '../types.js';
+import type { QuoteResponseV1 } from '../validators/quote-response-v1.js';
+import type { TxData } from '../validators/trade.js';
import {
formatChainIdToCaip,
formatChainIdToDec,
formatChainIdToHex,
-} from './caip-formatters';
+} from './caip-formatters.js';
/**
* Checks whether the transaction is a cross-chain transaction by comparing the source and destination chainIds
diff --git a/packages/bridge-controller/src/utils/caip-formatters.test.ts b/packages/bridge-controller/src/utils/caip-formatters.test.ts
index 3f91b91bfca..4f373cf1693 100644
--- a/packages/bridge-controller/src/utils/caip-formatters.test.ts
+++ b/packages/bridge-controller/src/utils/caip-formatters.test.ts
@@ -1,15 +1,15 @@
import { AddressZero } from '@ethersproject/constants';
import { BtcScope, SolScope, TrxScope, XlmScope } from '@metamask/keyring-api';
-import { CHAIN_IDS } from '../constants/chains';
-import { ChainId } from '../types';
+import { CHAIN_IDS } from '../constants/chains.js';
+import { ChainId } from '../types.js';
import {
formatChainIdToCaip,
formatChainIdToDec,
formatChainIdToHex,
formatAddressToCaipReference,
formatAddressToAssetId,
-} from './caip-formatters';
+} from './caip-formatters.js';
describe('CAIP Formatters', () => {
describe('formatChainIdToCaip', () => {
diff --git a/packages/bridge-controller/src/utils/caip-formatters.ts b/packages/bridge-controller/src/utils/caip-formatters.ts
index eec21f2c74f..c3626eb79c2 100644
--- a/packages/bridge-controller/src/utils/caip-formatters.ts
+++ b/packages/bridge-controller/src/utils/caip-formatters.ts
@@ -18,8 +18,8 @@ import {
} from '@metamask/utils';
import type { CaipAssetType, CaipChainId, Hex } from '@metamask/utils';
-import type { GenericQuoteRequest } from '../types';
-import { ChainId } from '../types';
+import type { GenericQuoteRequest } from '../types.js';
+import { ChainId } from '../types.js';
import {
getNativeAssetForChainId,
isBitcoinChainId,
@@ -27,7 +27,7 @@ import {
isSolanaChainId,
isStellarChainId,
isTronChainId,
-} from './bridge';
+} from './bridge.js';
/**
* Converts a chainId to a CaipChainId
diff --git a/packages/bridge-controller/src/utils/feature-flags.test.ts b/packages/bridge-controller/src/utils/feature-flags.test.ts
index 0ae8082d461..3ec28a6ac18 100644
--- a/packages/bridge-controller/src/utils/feature-flags.test.ts
+++ b/packages/bridge-controller/src/utils/feature-flags.test.ts
@@ -1,13 +1,13 @@
-import { DEFAULT_CHAIN_RANKING } from '../constants/bridge';
+import { DEFAULT_CHAIN_RANKING } from '../constants/bridge.js';
import type {
FeatureFlagsPlatformConfig,
BridgeControllerMessenger,
-} from '../types';
+} from '../types.js';
import {
formatFeatureFlags,
getBridgeFeatureFlags,
hasMinimumRequiredVersion,
-} from './feature-flags';
+} from './feature-flags.js';
describe('feature-flags', () => {
describe('formatFeatureFlags', () => {
diff --git a/packages/bridge-controller/src/utils/feature-flags.ts b/packages/bridge-controller/src/utils/feature-flags.ts
index b0aedd5197f..d4f304e7df0 100644
--- a/packages/bridge-controller/src/utils/feature-flags.ts
+++ b/packages/bridge-controller/src/utils/feature-flags.ts
@@ -3,10 +3,13 @@ import type { RemoteFeatureFlagControllerState } from '@metamask/remote-feature-
import {
DEFAULT_CHAIN_RANKING,
DEFAULT_FEATURE_FLAG_CONFIG,
-} from '../constants/bridge';
-import type { FeatureFlagsPlatformConfig, ChainConfiguration } from '../types';
-import { validateFeatureFlagsResponse } from '../validators/feature-flags';
-import { formatChainIdToCaip } from './caip-formatters';
+} from '../constants/bridge.js';
+import type {
+ FeatureFlagsPlatformConfig,
+ ChainConfiguration,
+} from '../types.js';
+import { validateFeatureFlagsResponse } from '../validators/feature-flags.js';
+import { formatChainIdToCaip } from './caip-formatters.js';
export const formatFeatureFlags = (
bridgeFeatureFlags: FeatureFlagsPlatformConfig,
diff --git a/packages/bridge-controller/src/utils/fetch.test.ts b/packages/bridge-controller/src/utils/fetch.test.ts
index 62f058af5c2..e6794054ab9 100644
--- a/packages/bridge-controller/src/utils/fetch.test.ts
+++ b/packages/bridge-controller/src/utils/fetch.test.ts
@@ -1,18 +1,21 @@
import { AddressZero } from '@ethersproject/constants';
import type { CaipAssetType } from '@metamask/utils';
-import { mockBridgeQuotesErc20Erc20V1 } from '../../tests/mock-quotes-erc20-erc20';
-import { mockBridgeQuotesNativeErc20V1 } from '../../tests/mock-quotes-native-erc20';
-import { BridgeClientId, BRIDGE_PROD_API_BASE_URL } from '../constants/bridge';
-import { BatchSellTransactionType } from '../validators/batch-sell';
-import { FeatureId } from '../validators/feature-flags';
+import { mockBridgeQuotesErc20Erc20V1 } from '../../tests/mock-quotes-erc20-erc20.js';
+import { mockBridgeQuotesNativeErc20V1 } from '../../tests/mock-quotes-native-erc20.js';
+import {
+ BridgeClientId,
+ BRIDGE_PROD_API_BASE_URL,
+} from '../constants/bridge.js';
+import { BatchSellTransactionType } from '../validators/batch-sell.js';
+import { FeatureId } from '../validators/feature-flags.js';
import {
fetchBridgeQuotes,
fetchBridgeTokens,
fetchAssetPrices,
fetchBatchSellTrades,
formatBatchSellTradesRequest,
-} from './fetch';
+} from './fetch.js';
const mockFetchFn = jest.fn();
diff --git a/packages/bridge-controller/src/utils/fetch.ts b/packages/bridge-controller/src/utils/fetch.ts
index b63b4d15dd9..d8f60476941 100644
--- a/packages/bridge-controller/src/utils/fetch.ts
+++ b/packages/bridge-controller/src/utils/fetch.ts
@@ -11,23 +11,23 @@ import type {
QuoteStreamCompleteData,
BatchSellTradesRequest,
BatchSellTradesResponse,
-} from '../types';
-import { validateBatchSellTradesResponse } from '../validators/batch-sell';
-import { validateBridgeAsset } from '../validators/bridge-asset';
-import type { FeatureId } from '../validators/feature-flags';
-import type { QuoteResponseV1 } from '../validators/quote-response-v1';
-import { validateQuoteResponseV1 } from '../validators/quote-response-v1';
-import { validateQuoteStreamComplete } from '../validators/quote-stream-complete';
-import { validateTokenFeature } from '../validators/token-feature';
-import { isEvmTxData } from '../validators/trade';
-import { getEthUsdtResetData } from './bridge';
+} from '../types.js';
+import { validateBatchSellTradesResponse } from '../validators/batch-sell.js';
+import { validateBridgeAsset } from '../validators/bridge-asset.js';
+import type { FeatureId } from '../validators/feature-flags.js';
+import type { QuoteResponseV1 } from '../validators/quote-response-v1.js';
+import { validateQuoteResponseV1 } from '../validators/quote-response-v1.js';
+import { validateQuoteStreamComplete } from '../validators/quote-stream-complete.js';
+import { validateTokenFeature } from '../validators/token-feature.js';
+import { isEvmTxData } from '../validators/trade.js';
+import { getEthUsdtResetData } from './bridge.js';
import {
formatAddressToAssetId,
formatAddressToCaipReference,
formatChainIdToDec,
-} from './caip-formatters';
-import { fetchServerEvents } from './fetch-server-events';
-import { formatStructErrors } from './struct-error';
+} from './caip-formatters.js';
+import { fetchServerEvents } from './fetch-server-events.js';
+import { formatStructErrors } from './struct-error.js';
export const getClientHeaders = ({
clientId,
diff --git a/packages/bridge-controller/src/utils/metrics/properties.test.ts b/packages/bridge-controller/src/utils/metrics/properties.test.ts
index 7c46242b872..c7d4551f0ea 100644
--- a/packages/bridge-controller/src/utils/metrics/properties.test.ts
+++ b/packages/bridge-controller/src/utils/metrics/properties.test.ts
@@ -1,11 +1,11 @@
import { SolScope } from '@metamask/keyring-api';
import type { CaipChainId } from '@metamask/utils';
-import type { QuoteMetadata } from '../../types';
-import type { QuoteResponseV1 } from '../../validators/quote-response-v1';
-import { getNativeAssetForChainId } from '../bridge';
-import { formatChainIdToCaip } from '../caip-formatters';
-import { MetricsSwapType } from './constants';
+import type { QuoteMetadata } from '../../types.js';
+import type { QuoteResponseV1 } from '../../validators/quote-response-v1.js';
+import { getNativeAssetForChainId } from '../bridge.js';
+import { formatChainIdToCaip } from '../caip-formatters.js';
+import { MetricsSwapType } from './constants.js';
import {
getAccountHardwareType,
isHardwareWallet,
@@ -15,7 +15,7 @@ import {
formatProviderLabel,
getRequestParams,
getQuotesReceivedProperties,
-} from './properties';
+} from './properties.js';
describe('properties', () => {
beforeEach(() => {
diff --git a/packages/bridge-controller/src/utils/metrics/properties.ts b/packages/bridge-controller/src/utils/metrics/properties.ts
index 9c0b45989a3..09db420acb7 100644
--- a/packages/bridge-controller/src/utils/metrics/properties.ts
+++ b/packages/bridge-controller/src/utils/metrics/properties.ts
@@ -1,29 +1,29 @@
/* eslint-disable @typescript-eslint/explicit-function-return-type */
import type { AccountsControllerState } from '@metamask/accounts-controller';
-import { DEFAULT_BRIDGE_CONTROLLER_STATE } from '../../constants/bridge';
-import { ChainId } from '../../types';
+import { DEFAULT_BRIDGE_CONTROLLER_STATE } from '../../constants/bridge.js';
+import { ChainId } from '../../types.js';
import type {
GenericQuoteRequest,
QuoteMetadata,
QuoteRequest,
-} from '../../types';
-import { FeatureId } from '../../validators/feature-flags';
-import type { QuoteResponseV1 } from '../../validators/quote-response-v1';
-import type { TxData } from '../../validators/trade';
-import { getNativeAssetForChainId, isCrossChain } from '../bridge';
+} from '../../types.js';
+import { FeatureId } from '../../validators/feature-flags.js';
+import type { QuoteResponseV1 } from '../../validators/quote-response-v1.js';
+import type { TxData } from '../../validators/trade.js';
+import { getNativeAssetForChainId, isCrossChain } from '../bridge.js';
import {
formatAddressToAssetId,
formatChainIdToCaip,
-} from '../caip-formatters';
-import { MetricsSwapType } from './constants';
+} from '../caip-formatters.js';
+import { MetricsSwapType } from './constants.js';
import type {
AccountHardwareType,
InputKeys,
InputValues,
QuoteWarning,
RequestParams,
-} from './types';
+} from './types.js';
export const toInputChangedPropertyKey: Partial<
Record
diff --git a/packages/bridge-controller/src/utils/metrics/types.ts b/packages/bridge-controller/src/utils/metrics/types.ts
index 62f27713716..cb0db21ce21 100644
--- a/packages/bridge-controller/src/utils/metrics/types.ts
+++ b/packages/bridge-controller/src/utils/metrics/types.ts
@@ -5,8 +5,8 @@ import type {
InputPrimaryDenomination,
SortOrder,
StatusTypes,
-} from '../../types';
-import type { FeatureId } from '../../validators/feature-flags';
+} from '../../types.js';
+import type { FeatureId } from '../../validators/feature-flags.js';
import type {
UnifiedSwapBridgeEventName,
BatchSellMetricsEventName,
@@ -16,7 +16,7 @@ import type {
MetricsActionType,
MetricsSwapType,
PollingStatus,
-} from './constants';
+} from './constants.js';
/**
* These properties map to properties required by the segment-schema. For example: https://github.com/Consensys/segment-schema/blob/main/libraries/properties/cross-chain-swaps-action.yaml
diff --git a/packages/bridge-controller/src/utils/quote-fees.ts b/packages/bridge-controller/src/utils/quote-fees.ts
index a6f639655ca..56023454c9b 100644
--- a/packages/bridge-controller/src/utils/quote-fees.ts
+++ b/packages/bridge-controller/src/utils/quote-fees.ts
@@ -2,19 +2,19 @@ import type { InternalAccount } from '@metamask/keyring-internal-api';
import type { TransactionController } from '@metamask/transaction-controller';
import { numberToHex } from '@metamask/utils';
-import { CHAIN_IDS } from '../constants/chains';
+import { CHAIN_IDS } from '../constants/chains.js';
import type {
L1GasFees,
NonEvmFees,
BridgeControllerMessenger,
-} from '../types';
-import type { QuoteResponseV1 } from '../validators/quote-response-v1';
-import { isTronTrade } from '../validators/trade';
-import type { TxData } from '../validators/trade';
-import { isNonEvmChainId, sumHexes } from './bridge';
-import { formatChainIdToCaip } from './caip-formatters';
-import { computeFeeRequest } from './snaps';
-import { extractTradeData } from './trade-utils';
+} from '../types.js';
+import type { QuoteResponseV1 } from '../validators/quote-response-v1.js';
+import { isTronTrade } from '../validators/trade.js';
+import type { TxData } from '../validators/trade.js';
+import { isNonEvmChainId, sumHexes } from './bridge.js';
+import { formatChainIdToCaip } from './caip-formatters.js';
+import { computeFeeRequest } from './snaps.js';
+import { extractTradeData } from './trade-utils.js';
/**
* Appends transaction fees for EVM chains to quotes
@@ -59,7 +59,7 @@ const appendL1GasFees = async (
})
: '0x0';
const tradeL1GasFees = await getLayer1GasFee({
- transactionParams: getTxParams(trade as TxData),
+ transactionParams: getTxParams(trade),
chainId,
});
diff --git a/packages/bridge-controller/src/utils/quote.test.ts b/packages/bridge-controller/src/utils/quote.test.ts
index 4113818c892..4866d6fdff1 100644
--- a/packages/bridge-controller/src/utils/quote.test.ts
+++ b/packages/bridge-controller/src/utils/quote.test.ts
@@ -2,10 +2,10 @@ import { AddressZero } from '@ethersproject/constants';
import { convertHexToDecimal } from '@metamask/controller-utils';
import { BigNumber } from 'bignumber.js';
-import type { GenericQuoteRequest, NonEvmFees, L1GasFees } from '../types';
-import type { Quote } from '../validators/quote';
-import type { QuoteResponseV1 } from '../validators/quote-response-v1';
-import type { TxData } from '../validators/trade';
+import type { GenericQuoteRequest, NonEvmFees, L1GasFees } from '../types.js';
+import type { QuoteResponseV1 } from '../validators/quote-response-v1.js';
+import type { Quote } from '../validators/quote.js';
+import type { TxData } from '../validators/trade.js';
import {
isValidQuoteRequest,
getQuoteIdentifier,
@@ -21,7 +21,7 @@ import {
calcCost,
formatEtaInMinutes,
calcSlippagePercentage,
-} from './quote';
+} from './quote.js';
describe('Quote Utils', () => {
describe('isValidQuoteRequest', () => {
@@ -500,7 +500,7 @@ describe('Quote Metadata Utils', () => {
...mockBridgeQuote,
trade: { gasLimit: 21000, effectiveGas: 10000 },
approval: { gasLimit: 46000, effectiveGas: 20000 },
- } as QuoteResponseV1 & L1GasFees,
+ },
feePerGasInDecGwei: '52',
maxFeePerGasInDecGwei: '102',
exchangeRate: '2000',
diff --git a/packages/bridge-controller/src/utils/quote.ts b/packages/bridge-controller/src/utils/quote.ts
index fec1a84538e..f43510e79e1 100644
--- a/packages/bridge-controller/src/utils/quote.ts
+++ b/packages/bridge-controller/src/utils/quote.ts
@@ -13,12 +13,12 @@ import type {
L1GasFees,
QuoteMetadata,
NonEvmFees,
-} from '../types';
-import { FeatureId } from '../validators/feature-flags';
-import type { Quote } from '../validators/quote';
-import type { QuoteResponseV1 } from '../validators/quote-response-v1';
-import { TxData } from '../validators/trade';
-import { isNativeAddress, isNonEvmChainId } from './bridge';
+} from '../types.js';
+import { FeatureId } from '../validators/feature-flags.js';
+import type { QuoteResponseV1 } from '../validators/quote-response-v1.js';
+import type { Quote } from '../validators/quote.js';
+import { TxData } from '../validators/trade.js';
+import { isNativeAddress, isNonEvmChainId } from './bridge.js';
export const isValidQuoteRequest = (
partialRequest: Partial,
diff --git a/packages/bridge-controller/src/utils/slippage.ts b/packages/bridge-controller/src/utils/slippage.ts
index 75076a0ac11..9134438fb51 100644
--- a/packages/bridge-controller/src/utils/slippage.ts
+++ b/packages/bridge-controller/src/utils/slippage.ts
@@ -1,5 +1,5 @@
-import type { GenericQuoteRequest } from '../types';
-import { isCrossChain, isSolanaChainId } from './bridge';
+import type { GenericQuoteRequest } from '../types.js';
+import { isCrossChain, isSolanaChainId } from './bridge.js';
export const BRIDGE_DEFAULT_SLIPPAGE = 0.5;
const SWAP_SOLANA_SLIPPAGE = undefined;
diff --git a/packages/bridge-controller/src/utils/snaps.test.ts b/packages/bridge-controller/src/utils/snaps.test.ts
index 3ae39c081eb..a561ac4eecb 100644
--- a/packages/bridge-controller/src/utils/snaps.test.ts
+++ b/packages/bridge-controller/src/utils/snaps.test.ts
@@ -4,7 +4,7 @@ import { v4 as uuid } from 'uuid';
import {
getMinimumBalanceForRentExemptionRequest,
computeFeeRequest,
-} from './snaps';
+} from './snaps.js';
jest.mock('uuid', () => ({
v4: jest.fn(),
diff --git a/packages/bridge-controller/src/utils/snaps.ts b/packages/bridge-controller/src/utils/snaps.ts
index 6c8badf6024..2787612e770 100644
--- a/packages/bridge-controller/src/utils/snaps.ts
+++ b/packages/bridge-controller/src/utils/snaps.ts
@@ -2,8 +2,8 @@ import { SolScope } from '@metamask/keyring-api';
import type { CaipChainId } from '@metamask/utils';
import { v4 as uuid } from 'uuid';
-import { DEFAULT_BRIDGE_CONTROLLER_STATE } from '../constants/bridge';
-import type { BridgeControllerMessenger } from '../types';
+import { DEFAULT_BRIDGE_CONTROLLER_STATE } from '../constants/bridge.js';
+import type { BridgeControllerMessenger } from '../types.js';
export const getMinimumBalanceForRentExemptionRequest = (snapId: string) => {
return {
diff --git a/packages/bridge-controller/src/utils/swaps.test.ts b/packages/bridge-controller/src/utils/swaps.test.ts
index 336f6159f41..ea4fcad48f0 100644
--- a/packages/bridge-controller/src/utils/swaps.test.ts
+++ b/packages/bridge-controller/src/utils/swaps.test.ts
@@ -1,22 +1,22 @@
import type { Hex } from '@metamask/utils';
-import { CHAIN_IDS } from '../constants/chains';
+import { CHAIN_IDS } from '../constants/chains.js';
import {
ALLOWED_CONTRACT_ADDRESSES,
SWAPS_CONTRACT_ADDRESSES,
-} from '../constants/swaps';
+} from '../constants/swaps.js';
import {
DEFAULT_TOKEN_ADDRESS,
SWAPS_CHAINID_DEFAULT_TOKEN_MAP,
-} from '../constants/tokens';
-import type { FetchFunction } from '../types';
+} from '../constants/tokens.js';
+import type { FetchFunction } from '../types.js';
import {
API_BASE_URL,
fetchTokens,
getSwapsContractAddress,
isValidSwapsContractAddress,
-} from './swaps';
-import type { SwapsToken } from './swaps';
+} from './swaps.js';
+import type { SwapsToken } from './swaps.js';
describe('Swaps utils', () => {
beforeEach(() => {
diff --git a/packages/bridge-controller/src/utils/swaps.ts b/packages/bridge-controller/src/utils/swaps.ts
index ebfd01be31d..6708e87ea42 100644
--- a/packages/bridge-controller/src/utils/swaps.ts
+++ b/packages/bridge-controller/src/utils/swaps.ts
@@ -1,16 +1,16 @@
import type { Hex } from '@metamask/utils';
-import { CHAIN_IDS } from '../constants/chains';
+import { CHAIN_IDS } from '../constants/chains.js';
import {
ALLOWED_CONTRACT_ADDRESSES,
SWAPS_CONTRACT_ADDRESSES,
-} from '../constants/swaps';
+} from '../constants/swaps.js';
import {
DEFAULT_TOKEN_ADDRESS,
SWAPS_CHAINID_DEFAULT_TOKEN_MAP,
-} from '../constants/tokens';
-import type { FetchFunction } from '../types';
-import { formatChainIdToDec } from './caip-formatters';
+} from '../constants/tokens.js';
+import type { FetchFunction } from '../types.js';
+import { formatChainIdToDec } from './caip-formatters.js';
/**
* Checks if the given contract address is valid for the given chain ID.
diff --git a/packages/bridge-controller/src/utils/trade-utils.test.ts b/packages/bridge-controller/src/utils/trade-utils.test.ts
index f847daa13bb..4a686d18a33 100644
--- a/packages/bridge-controller/src/utils/trade-utils.test.ts
+++ b/packages/bridge-controller/src/utils/trade-utils.test.ts
@@ -3,14 +3,14 @@ import type {
BitcoinTradeData,
TronTradeData,
Trade,
-} from '../validators/trade';
+} from '../validators/trade.js';
import {
isEvmTxData,
isBitcoinTrade,
isStellarTrade,
isTronTrade,
-} from '../validators/trade';
-import { extractTradeData } from './trade-utils';
+} from '../validators/trade.js';
+import { extractTradeData } from './trade-utils.js';
describe('Trade utils', () => {
describe('isEvmTxData', () => {
diff --git a/packages/bridge-controller/src/utils/trade-utils.ts b/packages/bridge-controller/src/utils/trade-utils.ts
index cf1aa645ef0..a0319d2df03 100644
--- a/packages/bridge-controller/src/utils/trade-utils.ts
+++ b/packages/bridge-controller/src/utils/trade-utils.ts
@@ -5,7 +5,7 @@ import {
isEvmTxData,
isStellarTrade,
hasOwnProp,
-} from '../validators/trade';
+} from '../validators/trade.js';
/**
* Extracts the transaction data from different trade formats
diff --git a/packages/bridge-controller/src/validators/batch-sell.ts b/packages/bridge-controller/src/validators/batch-sell.ts
index 79246d08b89..6aa59b3aab5 100644
--- a/packages/bridge-controller/src/validators/batch-sell.ts
+++ b/packages/bridge-controller/src/validators/batch-sell.ts
@@ -9,10 +9,10 @@ import {
import type { Infer } from '@metamask/superstruct';
import { StrictHexStruct } from '@metamask/utils';
-import { BridgeAssetSchema } from './bridge-asset';
-import { NumberStringSchema } from './number';
-import { GaslessPropertiesSchema } from './quote';
-import { TxDataSchema } from './trade';
+import { BridgeAssetSchema } from './bridge-asset.js';
+import { NumberStringSchema } from './number.js';
+import { GaslessPropertiesSchema } from './quote.js';
+import { TxDataSchema } from './trade.js';
export enum BatchSellTransactionType {
TRADE = 'trade',
diff --git a/packages/bridge-controller/src/validators/intent.ts b/packages/bridge-controller/src/validators/intent.ts
index ada780dcb81..3f42e164bc2 100644
--- a/packages/bridge-controller/src/validators/intent.ts
+++ b/packages/bridge-controller/src/validators/intent.ts
@@ -11,8 +11,8 @@ import {
any,
} from '@metamask/superstruct';
-import { TruthyDigitStringSchema } from './number';
-import { HexString } from './trade';
+import { TruthyDigitStringSchema } from './number.js';
+import { HexString } from './trade.js';
// Allow digit strings for amounts/validTo for flexibility across providers
const DigitStringOrNumberSchema = union([TruthyDigitStringSchema, number()]);
diff --git a/packages/bridge-controller/src/validators/quote-response-v1.ts b/packages/bridge-controller/src/validators/quote-response-v1.ts
index 7695b30f850..0956b693083 100644
--- a/packages/bridge-controller/src/validators/quote-response-v1.ts
+++ b/packages/bridge-controller/src/validators/quote-response-v1.ts
@@ -10,21 +10,21 @@ import {
} from '@metamask/superstruct';
import { StrictHexStruct } from '@metamask/utils';
-import { FeatureId } from './feature-flags';
-import { FloatStringSchema } from './number';
-import { QuoteSchema } from './quote';
+import { FeatureId } from './feature-flags.js';
+import { FloatStringSchema } from './number.js';
+import { QuoteSchema } from './quote.js';
import {
TxDataSchema,
TronTradeDataSchema,
BitcoinTradeDataSchema,
StellarTradeDataSchema,
-} from './trade';
+} from './trade.js';
import type {
BitcoinTradeData,
StellarTradeData,
TronTradeData,
TxData,
-} from './trade';
+} from './trade.js';
export const QuoteResponseSchemaV1 = type({
featureId: optional(enums(Object.values(FeatureId))),
diff --git a/packages/bridge-controller/src/validators/quote.ts b/packages/bridge-controller/src/validators/quote.ts
index f27dc1926d4..8982750fd0c 100644
--- a/packages/bridge-controller/src/validators/quote.ts
+++ b/packages/bridge-controller/src/validators/quote.ts
@@ -10,10 +10,10 @@ import {
} from '@metamask/superstruct';
import type { Infer } from '@metamask/superstruct';
-import { ChainIdSchema, BridgeAssetSchema } from './bridge-asset';
-import { IntentSchema } from './intent';
-import { TruthyDigitStringSchema, NumberStringSchema } from './number';
-import { RefuelDataSchema, StepSchema } from './step';
+import { ChainIdSchema, BridgeAssetSchema } from './bridge-asset.js';
+import { IntentSchema } from './intent.js';
+import { TruthyDigitStringSchema, NumberStringSchema } from './number.js';
+import { RefuelDataSchema, StepSchema } from './step.js';
export enum FeeType {
METABRIDGE = 'metabridge',
diff --git a/packages/bridge-controller/src/validators/step.ts b/packages/bridge-controller/src/validators/step.ts
index 59460be4c97..cf3fff44b72 100644
--- a/packages/bridge-controller/src/validators/step.ts
+++ b/packages/bridge-controller/src/validators/step.ts
@@ -1,6 +1,6 @@
import { type, enums, optional } from '@metamask/superstruct';
-import { BridgeAssetSchema, ChainIdSchema } from './bridge-asset';
+import { BridgeAssetSchema, ChainIdSchema } from './bridge-asset.js';
export enum ActionTypes {
BRIDGE = 'bridge',
diff --git a/packages/bridge-controller/src/validators/validators.test.ts b/packages/bridge-controller/src/validators/validators.test.ts
index 3b809f31e90..58a0bfc835d 100644
--- a/packages/bridge-controller/src/validators/validators.test.ts
+++ b/packages/bridge-controller/src/validators/validators.test.ts
@@ -1,15 +1,15 @@
import { is } from '@metamask/superstruct';
-import { mockBridgeQuotesNativeErc20EthV1 } from '../../tests/mock-quotes-native-erc20-eth';
-import { validateFeatureFlagsResponse } from './feature-flags';
-import { IntentSchema } from './intent';
-import { DiscountType } from './quote';
-import { FeeDataSchema } from './quote';
-import { validateQuoteResponseV1 } from './quote-response-v1';
+import { mockBridgeQuotesNativeErc20EthV1 } from '../../tests/mock-quotes-native-erc20-eth.js';
+import { validateFeatureFlagsResponse } from './feature-flags.js';
+import { IntentSchema } from './intent.js';
+import { validateQuoteResponseV1 } from './quote-response-v1.js';
import {
validateQuoteStreamComplete,
QuoteStreamCompleteReason,
-} from './quote-stream-complete';
+} from './quote-stream-complete.js';
+import { DiscountType } from './quote.js';
+import { FeeDataSchema } from './quote.js';
describe('validators', () => {
describe('validateFeatureFlagsResponse', () => {
diff --git a/packages/bridge-controller/tests/mock-quotes-erc20-erc20.ts b/packages/bridge-controller/tests/mock-quotes-erc20-erc20.ts
index e43025d3721..7f63bed5a53 100644
--- a/packages/bridge-controller/tests/mock-quotes-erc20-erc20.ts
+++ b/packages/bridge-controller/tests/mock-quotes-erc20-erc20.ts
@@ -1,11 +1,11 @@
-import { merge } from 'lodash';
+import { merge } from 'lodash-es';
-import type { DeepPartial } from '../src/types';
+import type { DeepPartial } from '../src/types.js';
import {
validateQuoteResponseV1,
QuoteResponseV1,
-} from '../src/validators/quote-response-v1';
-import { ActionTypes } from '../src/validators/step';
+} from '../src/validators/quote-response-v1.js';
+import { ActionTypes } from '../src/validators/step.js';
export const mockBridgeQuotesErc20Erc20V1: QuoteResponseV1[] = [
{
diff --git a/packages/bridge-controller/tests/mock-quotes-erc20-native.ts b/packages/bridge-controller/tests/mock-quotes-erc20-native.ts
index 07c33bfb418..1503dc55c6e 100644
--- a/packages/bridge-controller/tests/mock-quotes-erc20-native.ts
+++ b/packages/bridge-controller/tests/mock-quotes-erc20-native.ts
@@ -1,9 +1,9 @@
-import { merge } from 'lodash';
+import { merge } from 'lodash-es';
-import type { DeepPartial } from '../src/types';
-import type { QuoteResponseV1 } from '../src/validators/quote-response-v1';
-import { validateQuoteResponseV1 } from '../src/validators/quote-response-v1';
-import { ActionTypes } from '../src/validators/step';
+import type { DeepPartial } from '../src/types.js';
+import type { QuoteResponseV1 } from '../src/validators/quote-response-v1.js';
+import { validateQuoteResponseV1 } from '../src/validators/quote-response-v1.js';
+import { ActionTypes } from '../src/validators/step.js';
export const mockBridgeQuotesErc20NativeV1: QuoteResponseV1[] = [
{
diff --git a/packages/bridge-controller/tests/mock-quotes-native-erc20-eth.ts b/packages/bridge-controller/tests/mock-quotes-native-erc20-eth.ts
index ad41fbed3e3..54823d91c04 100644
--- a/packages/bridge-controller/tests/mock-quotes-native-erc20-eth.ts
+++ b/packages/bridge-controller/tests/mock-quotes-native-erc20-eth.ts
@@ -1,9 +1,9 @@
-import { merge } from 'lodash';
+import { merge } from 'lodash-es';
-import type { DeepPartial } from '../src/types';
-import type { QuoteResponseV1 } from '../src/validators/quote-response-v1';
-import { validateQuoteResponseV1 } from '../src/validators/quote-response-v1';
-import { ActionTypes } from '../src/validators/step';
+import type { DeepPartial } from '../src/types.js';
+import type { QuoteResponseV1 } from '../src/validators/quote-response-v1.js';
+import { validateQuoteResponseV1 } from '../src/validators/quote-response-v1.js';
+import { ActionTypes } from '../src/validators/step.js';
export const mockBridgeQuotesNativeErc20EthV1: QuoteResponseV1[] = [
{
diff --git a/packages/bridge-controller/tests/mock-quotes-native-erc20.ts b/packages/bridge-controller/tests/mock-quotes-native-erc20.ts
index ed44c75a924..a4c8804dd3a 100644
--- a/packages/bridge-controller/tests/mock-quotes-native-erc20.ts
+++ b/packages/bridge-controller/tests/mock-quotes-native-erc20.ts
@@ -1,9 +1,9 @@
-import { merge } from 'lodash';
+import { merge } from 'lodash-es';
-import type { DeepPartial } from '../src/types';
-import type { QuoteResponseV1 } from '../src/validators/quote-response-v1';
-import { validateQuoteResponseV1 } from '../src/validators/quote-response-v1';
-import { ActionTypes } from '../src/validators/step';
+import type { DeepPartial } from '../src/types.js';
+import type { QuoteResponseV1 } from '../src/validators/quote-response-v1.js';
+import { validateQuoteResponseV1 } from '../src/validators/quote-response-v1.js';
+import { ActionTypes } from '../src/validators/step.js';
export const mockBridgeQuotesNativeErc20V1: QuoteResponseV1[] = [
{
diff --git a/packages/bridge-controller/tests/mock-quotes-sol-erc20.ts b/packages/bridge-controller/tests/mock-quotes-sol-erc20.ts
index 7bc3ab0fcf5..5ab5d59d745 100644
--- a/packages/bridge-controller/tests/mock-quotes-sol-erc20.ts
+++ b/packages/bridge-controller/tests/mock-quotes-sol-erc20.ts
@@ -1,9 +1,9 @@
-import { merge } from 'lodash';
+import { merge } from 'lodash-es';
-import type { DeepPartial } from '../src/types';
-import type { QuoteResponseV1 } from '../src/validators/quote-response-v1';
-import { validateQuoteResponseV1 } from '../src/validators/quote-response-v1';
-import { ActionTypes } from '../src/validators/step';
+import type { DeepPartial } from '../src/types.js';
+import type { QuoteResponseV1 } from '../src/validators/quote-response-v1.js';
+import { validateQuoteResponseV1 } from '../src/validators/quote-response-v1.js';
+import { ActionTypes } from '../src/validators/step.js';
export const mockBridgeQuotesSolErc20V1: QuoteResponseV1[] = [
{
diff --git a/packages/bridge-controller/tests/mock-sse.ts b/packages/bridge-controller/tests/mock-sse.ts
index c8846021aec..eeca0622840 100644
--- a/packages/bridge-controller/tests/mock-sse.ts
+++ b/packages/bridge-controller/tests/mock-sse.ts
@@ -1,9 +1,8 @@
-// eslint-disable-next-line @typescript-eslint/no-shadow
import { ReadableStream } from 'node:stream/web';
-import { flushPromises } from '../../../tests/helpers';
-import type { QuoteStreamCompleteData, TokenFeature } from '../src';
-import { QuoteResponseV1 } from '../src/validators/quote-response-v1';
+import { flushPromises } from '../../../tests/helpers.js';
+import type { QuoteStreamCompleteData, TokenFeature } from '../src.js';
+import { QuoteResponseV1 } from '../src/validators/quote-response-v1.js';
type MockSseResponse = { status: number; ok: boolean; body: ReadableStream };
diff --git a/packages/bridge-status-controller/jest.config.js b/packages/bridge-status-controller/jest.config.js
index 86e3fc3cfeb..3de417c7bfb 100644
--- a/packages/bridge-status-controller/jest.config.js
+++ b/packages/bridge-status-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/bridge-status-controller/package.json b/packages/bridge-status-controller/package.json
index a8188afd042..41bbedc1226 100644
--- a/packages/bridge-status-controller/package.json
+++ b/packages/bridge-status-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/bridge-status-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/bridge-status-controller",
@@ -73,7 +66,6 @@
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/bridge-status-controller/src/bridge-status-controller-method-action-types.ts b/packages/bridge-status-controller/src/bridge-status-controller-method-action-types.ts
index d6a4aaf6488..f777b04111d 100644
--- a/packages/bridge-status-controller/src/bridge-status-controller-method-action-types.ts
+++ b/packages/bridge-status-controller/src/bridge-status-controller-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { BridgeStatusController } from './bridge-status-controller';
+import type { BridgeStatusController } from './bridge-status-controller.js';
export type BridgeStatusControllerStartPollingForBridgeTxStatusAction = {
type: `BridgeStatusController:startPollingForBridgeTxStatus`;
diff --git a/packages/bridge-status-controller/src/bridge-status-controller.batch-sell.test.ts b/packages/bridge-status-controller/src/bridge-status-controller.batch-sell.test.ts
index 8281f5754fb..2164c8ee24c 100644
--- a/packages/bridge-status-controller/src/bridge-status-controller.batch-sell.test.ts
+++ b/packages/bridge-status-controller/src/bridge-status-controller.batch-sell.test.ts
@@ -25,16 +25,16 @@ import {
getTxMetasForBatch,
mockBatchSellErc20Erc20,
mockBatchSellTradesErc20Erc20,
-} from '../test/mock-batch-sell-erc20-erc20';
-import { BridgeStatusController } from './bridge-status-controller';
-import { BRIDGE_STATUS_CONTROLLER_NAME } from './constants';
-import { BridgeClientId } from './types';
+} from '../test/mock-batch-sell-erc20-erc20.js';
+import { BridgeStatusController } from './bridge-status-controller.js';
+import { BRIDGE_STATUS_CONTROLLER_NAME } from './constants.js';
+import { BridgeClientId } from './types.js';
import type {
BridgeHistoryItem,
BridgeStatusControllerMessenger,
-} from './types';
-import { getBatchSellHistoryItemsForTxHash } from './utils/history';
-import { shouldDisable7702 } from './utils/transaction';
+} from './types.js';
+import { getBatchSellHistoryItemsForTxHash } from './utils/history.js';
+import { shouldDisable7702 } from './utils/transaction.js';
const mockGenerateBatchId = jest.fn();
jest.mock('@metamask/transaction-controller', () => ({
diff --git a/packages/bridge-status-controller/src/bridge-status-controller.intent-manager.test.ts b/packages/bridge-status-controller/src/bridge-status-controller.intent-manager.test.ts
index af2822d83c4..73480aa50c4 100644
--- a/packages/bridge-status-controller/src/bridge-status-controller.intent-manager.test.ts
+++ b/packages/bridge-status-controller/src/bridge-status-controller.intent-manager.test.ts
@@ -3,9 +3,9 @@ import { BridgeClientId, StatusTypes } from '@metamask/bridge-controller';
import { TransactionStatus } from '@metamask/transaction-controller';
import { IntentManager } from './bridge-status-controller.intent';
-import type { BridgeHistoryItem } from './types';
-import { postSubmitOrder } from './utils/intent-api';
-import { IntentOrderStatus } from './utils/validators';
+import type { BridgeHistoryItem } from './types.js';
+import { postSubmitOrder } from './utils/intent-api.js';
+import { IntentOrderStatus } from './utils/validators.js';
const makeHistoryItem = (
overrides?: Partial,
diff --git a/packages/bridge-status-controller/src/bridge-status-controller.intent.test.ts b/packages/bridge-status-controller/src/bridge-status-controller.intent.test.ts
index a4c6824222a..1fe94d0abd5 100644
--- a/packages/bridge-status-controller/src/bridge-status-controller.intent.test.ts
+++ b/packages/bridge-status-controller/src/bridge-status-controller.intent.test.ts
@@ -15,13 +15,13 @@ import {
TransactionType,
} from '@metamask/transaction-controller';
-import { BridgeStatusController } from './bridge-status-controller';
-import { MAX_ATTEMPTS } from './constants';
-import type { BridgeStatusControllerState } from './types';
-import * as bridgeStatusUtils from './utils/bridge-status';
-import * as historyUtils from './utils/history';
-import * as intentApi from './utils/intent-api';
-import { IntentOrderStatus } from './utils/validators';
+import { BridgeStatusController } from './bridge-status-controller.js';
+import { MAX_ATTEMPTS } from './constants.js';
+import type { BridgeStatusControllerState } from './types.js';
+import * as bridgeStatusUtils from './utils/bridge-status.js';
+import * as historyUtils from './utils/history.js';
+import * as intentApi from './utils/intent-api.js';
+import { IntentOrderStatus } from './utils/validators.js';
jest.spyOn(intentApi, 'postSubmitOrder').mockImplementation(jest.fn());
jest
diff --git a/packages/bridge-status-controller/src/bridge-status-controller.intent.ts b/packages/bridge-status-controller/src/bridge-status-controller.intent.ts
index cf040c02300..1f9a42bb9fb 100644
--- a/packages/bridge-status-controller/src/bridge-status-controller.intent.ts
+++ b/packages/bridge-status-controller/src/bridge-status-controller.intent.ts
@@ -1,16 +1,22 @@
import { BridgeClientId, StatusTypes } from '@metamask/bridge-controller';
-import type { BridgeStatusControllerMessenger, FetchFunction } from './types';
-import type { BridgeHistoryItem } from './types';
-import { getJwt } from './utils/authentication';
+import type {
+ BridgeStatusControllerMessenger,
+ FetchFunction,
+} from './types.js';
+import type { BridgeHistoryItem } from './types.js';
+import { getJwt } from './utils/authentication.js';
import {
IntentApi,
IntentApiImpl,
IntentBridgeStatus,
translateIntentOrderToBridgeStatus,
-} from './utils/intent-api';
-import { getTransactionMetaById, updateTransaction } from './utils/transaction';
-import { IntentStatusResponse, IntentOrderStatus } from './utils/validators';
+} from './utils/intent-api.js';
+import {
+ getTransactionMetaById,
+ updateTransaction,
+} from './utils/transaction.js';
+import { IntentStatusResponse, IntentOrderStatus } from './utils/validators.js';
type IntentStatuses = {
orderStatus: IntentOrderStatus;
diff --git a/packages/bridge-status-controller/src/bridge-status-controller.test.ts b/packages/bridge-status-controller/src/bridge-status-controller.test.ts
index 89dc773d1af..7953cbfb289 100644
--- a/packages/bridge-status-controller/src/bridge-status-controller.test.ts
+++ b/packages/bridge-status-controller/src/bridge-status-controller.test.ts
@@ -42,19 +42,19 @@ import type { CaipAssetType } from '@metamask/utils';
import { numberToHex } from '@metamask/utils';
import type { Hex } from '@metamask/utils';
-import { flushPromises } from '../../../tests/helpers';
-import { BridgeStatusController } from './bridge-status-controller';
+import { flushPromises } from '../../../tests/helpers.js';
+import { BridgeStatusController } from './bridge-status-controller.js';
import {
BRIDGE_STATUS_CONTROLLER_NAME,
DEFAULT_BRIDGE_STATUS_CONTROLLER_STATE,
DEFAULT_MAX_PENDING_HISTORY_ITEM_AGE_MS,
MAX_ATTEMPTS,
-} from './constants';
+} from './constants.js';
import {
QUOTE_STATUS_BACKFILL_WINDOW_MS,
QuoteStatusState,
-} from './quote-status-manager/constants';
-import { BridgeClientId } from './types';
+} from './quote-status-manager/constants.js';
+import { BridgeClientId } from './types.js';
import type {
BridgeId,
StartPollingForBridgeTxStatusArgsSerialized,
@@ -62,11 +62,11 @@ import type {
BridgeStatusControllerState,
BridgeStatusControllerMessenger,
StatusResponse,
-} from './types';
-import * as bridgeStatusUtils from './utils/bridge-status';
-import * as historyUtils from './utils/history';
-import * as metricsUtils from './utils/metrics';
-import * as transactionUtils from './utils/transaction';
+} from './types.js';
+import * as bridgeStatusUtils from './utils/bridge-status.js';
+import * as historyUtils from './utils/history.js';
+import * as metricsUtils from './utils/metrics.js';
+import * as transactionUtils from './utils/transaction.js';
type AllBridgeStatusControllerActions =
MessengerActions;
diff --git a/packages/bridge-status-controller/src/bridge-status-controller.ts b/packages/bridge-status-controller/src/bridge-status-controller.ts
index 27ae844c795..f1953cc60e2 100644
--- a/packages/bridge-status-controller/src/bridge-status-controller.ts
+++ b/packages/bridge-status-controller/src/bridge-status-controller.ts
@@ -39,49 +39,49 @@ import {
DEFAULT_BRIDGE_STATUS_CONTROLLER_STATE,
MAX_ATTEMPTS,
REFRESH_INTERVAL_MS,
-} from './constants';
+} from './constants.js';
import {
QUOTE_STATUS_BACKFILL_WINDOW_MS,
QUOTE_STATUS_UPDATE_ENTRY_TTL,
QUOTE_STATUS_UPDATE_RETRY_INTERVAL_MS,
-} from './quote-status-manager/constants';
+} from './quote-status-manager/constants.js';
import {
QuoteStatusGetError,
QuoteStatusUpdateError,
-} from './quote-status-manager/errors';
-import { QuoteStatusManager } from './quote-status-manager/quotes-status-manager';
-import executeSubmitStrategy from './strategy';
-import { SubmitStep } from './strategy/types';
-import type { SubmitStrategyParams } from './strategy/types';
+} from './quote-status-manager/errors.js';
+import { QuoteStatusManager } from './quote-status-manager/quotes-status-manager.js';
+import executeSubmitStrategy from './strategy.js';
+import { SubmitStep } from './strategy/types.js';
+import type { SubmitStrategyParams } from './strategy/types.js';
import type {
BridgeStatusControllerState,
StartPollingForBridgeTxStatusArgsSerialized,
FetchFunction,
BridgeHistoryItem,
-} from './types';
-import type { BridgeStatusControllerMessenger } from './types';
-import { BridgeClientId } from './types';
-import { getAccountByAddress } from './utils/accounts';
-import { getJwt } from './utils/authentication';
-import {
- getBatchSellTrades,
- stopPollingForQuotes,
- trackMetricsEvent,
-} from './utils/bridge';
+} from './types.js';
+import type { BridgeStatusControllerMessenger } from './types.js';
+import { BridgeClientId } from './types.js';
+import { getAccountByAddress } from './utils/accounts.js';
+import { getJwt } from './utils/authentication.js';
import {
fetchBridgeTxStatus,
fetchBridgeQuoteStatus,
getStatusRequestWithSrcTxHash,
shouldSkipFetchDueToFetchFailures,
shouldWaitForFinalBridgeStatus,
-} from './utils/bridge-status';
+} from './utils/bridge-status.js';
+import {
+ getBatchSellTrades,
+ stopPollingForQuotes,
+ trackMetricsEvent,
+} from './utils/bridge.js';
import {
getInitialHistoryItem,
getMatchingHistoryEntryForTxMeta,
rekeyHistoryItemInState,
shouldPollHistoryItem,
getMatchingHistoryEntryForApprovalTxMeta,
-} from './utils/history';
+} from './utils/history.js';
import {
getFinalizedTxProperties,
getPriceImpactFromQuote,
@@ -91,9 +91,9 @@ import {
getEVMTxPropertiesFromTransactionMeta,
getTxStatusesFromHistory,
getPreConfirmationPropertiesFromQuote,
-} from './utils/metrics';
-import { getSelectedChainId } from './utils/network';
-import { getTraceParams } from './utils/trace';
+} from './utils/metrics.js';
+import { getSelectedChainId } from './utils/network.js';
+import { getTraceParams } from './utils/trace.js';
import {
getTransactionMetaById,
getTransactions,
@@ -101,7 +101,7 @@ import {
isCrossChainTx,
updateTransactionsInBatch,
hasNestedSwapTransactions,
-} from './utils/transaction';
+} from './utils/transaction.js';
const metadata: StateMetadata = {
// We want to persist the bridge status state so that we can show the proper data for the Activity list
diff --git a/packages/bridge-status-controller/src/constants.ts b/packages/bridge-status-controller/src/constants.ts
index 5505c1d2060..c194658e892 100644
--- a/packages/bridge-status-controller/src/constants.ts
+++ b/packages/bridge-status-controller/src/constants.ts
@@ -1,6 +1,6 @@
import { FeatureId } from '@metamask/bridge-controller';
-import type { BridgeStatusControllerState } from './types';
+import type { BridgeStatusControllerState } from './types.js';
export const REFRESH_INTERVAL_MS = 10 * 1000; // 10 seconds
export const MAX_ATTEMPTS = 7; // at 7 attempts, delay is 10:40, cumulative time is 21:10
diff --git a/packages/bridge-status-controller/src/index.ts b/packages/bridge-status-controller/src/index.ts
index 4e1d845ce0d..78e3ecda008 100644
--- a/packages/bridge-status-controller/src/index.ts
+++ b/packages/bridge-status-controller/src/index.ts
@@ -2,8 +2,8 @@
export {
QuoteStatusUpdateError,
QuoteStatusGetError,
-} from './quote-status-manager/errors';
-export { BaseQuoteStatusUpdateErrorTypes } from './quote-status-manager/constants';
+} from './quote-status-manager/errors.js';
+export { BaseQuoteStatusUpdateErrorTypes } from './quote-status-manager/constants.js';
// Export constants
export {
@@ -11,7 +11,7 @@ export {
DEFAULT_BRIDGE_STATUS_CONTROLLER_STATE,
BRIDGE_STATUS_CONTROLLER_NAME,
MAX_ATTEMPTS,
-} from './constants';
+} from './constants.js';
export type {
FetchFunction,
@@ -32,7 +32,7 @@ export type {
StartPollingForBridgeTxStatusArgsSerialized,
TokenAmountValuesSerialized,
QuoteMetadataSerialized,
-} from './types';
+} from './types.js';
export type {
BridgeStatusControllerStartPollingForBridgeTxStatusAction,
@@ -42,13 +42,13 @@ export type {
BridgeStatusControllerSubmitIntentAction,
BridgeStatusControllerRestartPollingForFailedAttemptsAction,
BridgeStatusControllerGetBridgeHistoryItemByTxMetaIdAction,
-} from './bridge-status-controller-method-action-types';
+} from './bridge-status-controller-method-action-types.js';
-export { BridgeId, BridgeStatusAction } from './types';
+export { BridgeId, BridgeStatusAction } from './types.js';
-export { BridgeStatusController } from './bridge-status-controller';
+export { BridgeStatusController } from './bridge-status-controller.js';
export {
getBatchSellHistoryItemsForTxHash,
isBatchSellHistoryItem,
-} from './utils/history';
+} from './utils/history.js';
diff --git a/packages/bridge-status-controller/src/quote-status-manager/errors.test.ts b/packages/bridge-status-controller/src/quote-status-manager/errors.test.ts
index ae0d637ad5e..5f024756f4f 100644
--- a/packages/bridge-status-controller/src/quote-status-manager/errors.test.ts
+++ b/packages/bridge-status-controller/src/quote-status-manager/errors.test.ts
@@ -1,5 +1,5 @@
-import { QuoteStatusUpdateBackendErrorType } from './constants';
-import { QuoteStatusGetError, QuoteStatusUpdateError } from './errors';
+import { QuoteStatusUpdateBackendErrorType } from './constants.js';
+import { QuoteStatusGetError, QuoteStatusUpdateError } from './errors.js';
describe('QuoteStatusUpdateError', () => {
describe('constructor', () => {
diff --git a/packages/bridge-status-controller/src/quote-status-manager/errors.ts b/packages/bridge-status-controller/src/quote-status-manager/errors.ts
index 01fbcd6a788..24c3c0a4eec 100644
--- a/packages/bridge-status-controller/src/quote-status-manager/errors.ts
+++ b/packages/bridge-status-controller/src/quote-status-manager/errors.ts
@@ -1,7 +1,7 @@
import {
QuoteStatusGetErrorDetails,
QuoteStatusUpdateErrorDetails,
-} from './types';
+} from './types.js';
/**
* Error thrown for quote status update failures.
diff --git a/packages/bridge-status-controller/src/quote-status-manager/quote-status-api-service.test.ts b/packages/bridge-status-controller/src/quote-status-manager/quote-status-api-service.test.ts
index 070ff4b761d..d66414370a8 100644
--- a/packages/bridge-status-controller/src/quote-status-manager/quote-status-api-service.test.ts
+++ b/packages/bridge-status-controller/src/quote-status-manager/quote-status-api-service.test.ts
@@ -1,18 +1,18 @@
import { StatusTypes } from '@metamask/bridge-controller';
-import { BridgeClientId, BridgeStatusControllerMessenger } from '../types';
+import { BridgeClientId, BridgeStatusControllerMessenger } from '../types.js';
import {
QuoteStatusUpdateBackendErrorType,
QuoteStatusBackendStatus,
QuoteStatusFetchWithRetryOutcomeType,
-} from './constants';
-import { QuoteStatusGetError, QuoteStatusUpdateError } from './errors';
-import { QuoteStatusApiService } from './quote-status-api-service';
+} from './constants.js';
+import { QuoteStatusGetError, QuoteStatusUpdateError } from './errors.js';
+import { QuoteStatusApiService } from './quote-status-api-service.js';
import type {
QuoteStatusApiServiceOptions,
QuoteStatusGetResponse,
-} from './types';
-import * as validators from './validators';
+} from './types.js';
+import * as validators from './validators.js';
const API_BASE_URL = 'https://bridge.api.test';
diff --git a/packages/bridge-status-controller/src/quote-status-manager/quote-status-api-service.ts b/packages/bridge-status-controller/src/quote-status-manager/quote-status-api-service.ts
index 937ff529a5c..21dc9a836e2 100644
--- a/packages/bridge-status-controller/src/quote-status-manager/quote-status-api-service.ts
+++ b/packages/bridge-status-controller/src/quote-status-manager/quote-status-api-service.ts
@@ -1,26 +1,26 @@
import { getClientHeaders } from '@metamask/bridge-controller';
import { StructError } from '@metamask/superstruct';
-import { BridgeClientId, BridgeStatusControllerMessenger } from '../types';
-import { getJwt } from '../utils/authentication';
+import { BridgeClientId, BridgeStatusControllerMessenger } from '../types.js';
+import { getJwt } from '../utils/authentication.js';
import {
QuoteStatusBackendStatus,
QuoteStatusUpdateRetryableBackendTypes,
QuoteStatusFetchWithRetryOutcomeType,
-} from './constants';
-import { QuoteStatusGetError, QuoteStatusUpdateError } from './errors';
-import { QuoteStatusGetWithRetryOutcome } from './quote-status-get-with-retry-outcome';
-import { QuoteStatusUpdateWithRetryOutcome } from './quote-status-update-with-retry-outcome';
+} from './constants.js';
+import { QuoteStatusGetError, QuoteStatusUpdateError } from './errors.js';
+import { QuoteStatusGetWithRetryOutcome } from './quote-status-get-with-retry-outcome.js';
+import { QuoteStatusUpdateWithRetryOutcome } from './quote-status-update-with-retry-outcome.js';
import {
QuoteStatusApiServiceOptions,
QuoteStatusGetResponse,
QuoteStatusUpdateResponse,
-} from './types';
-import { sleep } from './utils';
+} from './types.js';
+import { sleep } from './utils.js';
import {
validateQuoteStatusGetResponse,
validateQuoteStatusUpdateResponse,
-} from './validators';
+} from './validators.js';
/**
* Service responsible for calling bridge quote status update APIs.
diff --git a/packages/bridge-status-controller/src/quote-status-manager/quote-status-entry-store.test.ts b/packages/bridge-status-controller/src/quote-status-manager/quote-status-entry-store.test.ts
index a077941a150..86acbe3915a 100644
--- a/packages/bridge-status-controller/src/quote-status-manager/quote-status-entry-store.test.ts
+++ b/packages/bridge-status-controller/src/quote-status-manager/quote-status-entry-store.test.ts
@@ -1,7 +1,10 @@
-import { QuoteStatusState } from './constants';
-import { QuoteStatusEntryStore } from './quote-status-entry-store';
-import { QuoteStatusStateFsm } from './quote-status-state-fsm';
-import type { QuoteStatusPersistEntry, QuoteStatusRuntimeEntry } from './types';
+import { QuoteStatusState } from './constants.js';
+import { QuoteStatusEntryStore } from './quote-status-entry-store.js';
+import { QuoteStatusStateFsm } from './quote-status-state-fsm.js';
+import type {
+ QuoteStatusPersistEntry,
+ QuoteStatusRuntimeEntry,
+} from './types.js';
const TTL_MS = 1000;
const NOW = 1_000_000;
diff --git a/packages/bridge-status-controller/src/quote-status-manager/quote-status-entry-store.ts b/packages/bridge-status-controller/src/quote-status-manager/quote-status-entry-store.ts
index bc72760892f..3aaf15dc175 100644
--- a/packages/bridge-status-controller/src/quote-status-manager/quote-status-entry-store.ts
+++ b/packages/bridge-status-controller/src/quote-status-manager/quote-status-entry-store.ts
@@ -1,10 +1,10 @@
-import { QuoteStatusState } from './constants';
-import { QuoteStatusStateFsm } from './quote-status-state-fsm';
+import { QuoteStatusState } from './constants.js';
+import { QuoteStatusStateFsm } from './quote-status-state-fsm.js';
import {
QuoteStatusEntryStoreOptions,
QuoteStatusPersistEntry,
QuoteStatusRuntimeEntry,
-} from './types';
+} from './types.js';
/**
* In-memory store for quote status update entries.
diff --git a/packages/bridge-status-controller/src/quote-status-manager/quote-status-get-with-retry-outcome.test.ts b/packages/bridge-status-controller/src/quote-status-manager/quote-status-get-with-retry-outcome.test.ts
index 080c4530094..98fce6ba968 100644
--- a/packages/bridge-status-controller/src/quote-status-manager/quote-status-get-with-retry-outcome.test.ts
+++ b/packages/bridge-status-controller/src/quote-status-manager/quote-status-get-with-retry-outcome.test.ts
@@ -1,9 +1,9 @@
import { StatusTypes } from '@metamask/bridge-controller';
-import { QuoteStatusFetchWithRetryOutcomeType } from './constants';
-import { QuoteStatusGetError } from './errors';
-import { QuoteStatusGetWithRetryOutcome } from './quote-status-get-with-retry-outcome';
-import type { QuoteStatusGetResponse } from './types';
+import { QuoteStatusFetchWithRetryOutcomeType } from './constants.js';
+import { QuoteStatusGetError } from './errors.js';
+import { QuoteStatusGetWithRetryOutcome } from './quote-status-get-with-retry-outcome.js';
+import type { QuoteStatusGetResponse } from './types.js';
describe('QuoteStatusGetWithRetryOutcome', () => {
it('exposes the outcome type', () => {
diff --git a/packages/bridge-status-controller/src/quote-status-manager/quote-status-get-with-retry-outcome.ts b/packages/bridge-status-controller/src/quote-status-manager/quote-status-get-with-retry-outcome.ts
index 0d14afdf1fd..cd27bfdc9dd 100644
--- a/packages/bridge-status-controller/src/quote-status-manager/quote-status-get-with-retry-outcome.ts
+++ b/packages/bridge-status-controller/src/quote-status-manager/quote-status-get-with-retry-outcome.ts
@@ -1,6 +1,6 @@
-import { QuoteStatusFetchWithRetryOutcomeType } from './constants';
-import { QuoteStatusGetError } from './errors';
-import { QuoteStatusGetResponse } from './types';
+import { QuoteStatusFetchWithRetryOutcomeType } from './constants.js';
+import { QuoteStatusGetError } from './errors.js';
+import { QuoteStatusGetResponse } from './types.js';
/**
* Result of a retrying quote status fetch
diff --git a/packages/bridge-status-controller/src/quote-status-manager/quote-status-state-fsm.test.ts b/packages/bridge-status-controller/src/quote-status-manager/quote-status-state-fsm.test.ts
index 14bc03a71a8..5083a28d517 100644
--- a/packages/bridge-status-controller/src/quote-status-manager/quote-status-state-fsm.test.ts
+++ b/packages/bridge-status-controller/src/quote-status-manager/quote-status-state-fsm.test.ts
@@ -1,5 +1,5 @@
-import { QuoteStatusState } from './constants';
-import { QuoteStatusStateFsm } from './quote-status-state-fsm';
+import { QuoteStatusState } from './constants.js';
+import { QuoteStatusStateFsm } from './quote-status-state-fsm.js';
describe('QuoteStatusStateFsm', () => {
describe('constructor', () => {
diff --git a/packages/bridge-status-controller/src/quote-status-manager/quote-status-state-fsm.ts b/packages/bridge-status-controller/src/quote-status-manager/quote-status-state-fsm.ts
index 49ad62a5cfd..936efb62c78 100644
--- a/packages/bridge-status-controller/src/quote-status-manager/quote-status-state-fsm.ts
+++ b/packages/bridge-status-controller/src/quote-status-manager/quote-status-state-fsm.ts
@@ -1,11 +1,11 @@
import {
AllowedQuoteStatusStateTransitions,
QuoteStatusState,
-} from './constants';
+} from './constants.js';
import type {
QuoteStatusStateUpdateEvent,
QuoteStatusStateUpdateListener,
-} from './types';
+} from './types.js';
/**
* Finite state machine that enforces forward-only quote status transitions.
diff --git a/packages/bridge-status-controller/src/quote-status-manager/quote-status-update-with-retry-outcome.test.ts b/packages/bridge-status-controller/src/quote-status-manager/quote-status-update-with-retry-outcome.test.ts
index c13b2cd34c9..9eff74ae16d 100644
--- a/packages/bridge-status-controller/src/quote-status-manager/quote-status-update-with-retry-outcome.test.ts
+++ b/packages/bridge-status-controller/src/quote-status-manager/quote-status-update-with-retry-outcome.test.ts
@@ -1,9 +1,9 @@
import {
QuoteStatusUpdateBackendErrorType,
QuoteStatusFetchWithRetryOutcomeType,
-} from './constants';
-import { QuoteStatusUpdateWithRetryOutcome } from './quote-status-update-with-retry-outcome';
-import type { QuoteStatusUpdateResponse } from './types';
+} from './constants.js';
+import { QuoteStatusUpdateWithRetryOutcome } from './quote-status-update-with-retry-outcome.js';
+import type { QuoteStatusUpdateResponse } from './types.js';
describe('QuoteStatusUpdateWithRetryOutcome', () => {
it('exposes the outcome type', () => {
diff --git a/packages/bridge-status-controller/src/quote-status-manager/quote-status-update-with-retry-outcome.ts b/packages/bridge-status-controller/src/quote-status-manager/quote-status-update-with-retry-outcome.ts
index 8edd374d64a..36634dc671f 100644
--- a/packages/bridge-status-controller/src/quote-status-manager/quote-status-update-with-retry-outcome.ts
+++ b/packages/bridge-status-controller/src/quote-status-manager/quote-status-update-with-retry-outcome.ts
@@ -1,5 +1,5 @@
-import { QuoteStatusFetchWithRetryOutcomeType } from './constants';
-import { QuoteStatusUpdateResponse } from './types';
+import { QuoteStatusFetchWithRetryOutcomeType } from './constants.js';
+import { QuoteStatusUpdateResponse } from './types.js';
/**
* Result of a retrying quote status update
diff --git a/packages/bridge-status-controller/src/quote-status-manager/quotes-status-manager.test.ts b/packages/bridge-status-controller/src/quote-status-manager/quotes-status-manager.test.ts
index 2338f2903dd..8d8918f88be 100644
--- a/packages/bridge-status-controller/src/quote-status-manager/quotes-status-manager.test.ts
+++ b/packages/bridge-status-controller/src/quote-status-manager/quotes-status-manager.test.ts
@@ -4,21 +4,21 @@ import {
} from '@metamask/transaction-controller';
import type { TransactionMeta } from '@metamask/transaction-controller';
-import { BridgeClientId, BridgeStatusControllerMessenger } from '../types';
+import { BridgeClientId, BridgeStatusControllerMessenger } from '../types.js';
import {
QuoteStatusState,
QuoteStatusUpdateBackendErrorType,
QuoteStatusBackendStatus,
QuoteStatusFetchWithRetryOutcomeType,
-} from './constants';
-import { QuoteStatusApiService } from './quote-status-api-service';
-import { QuoteStatusGetWithRetryOutcome } from './quote-status-get-with-retry-outcome';
-import { QuoteStatusUpdateWithRetryOutcome } from './quote-status-update-with-retry-outcome';
-import { QuoteStatusManager } from './quotes-status-manager';
+} from './constants.js';
+import { QuoteStatusApiService } from './quote-status-api-service.js';
+import { QuoteStatusGetWithRetryOutcome } from './quote-status-get-with-retry-outcome.js';
+import { QuoteStatusUpdateWithRetryOutcome } from './quote-status-update-with-retry-outcome.js';
+import { QuoteStatusManager } from './quotes-status-manager.js';
import type {
QuoteStatusPersistEntry,
QuoteStatusUpdateResponse,
-} from './types';
+} from './types.js';
jest.mock('./quote-status-api-service');
diff --git a/packages/bridge-status-controller/src/quote-status-manager/quotes-status-manager.ts b/packages/bridge-status-controller/src/quote-status-manager/quotes-status-manager.ts
index 1998177b281..dd288df3b2b 100644
--- a/packages/bridge-status-controller/src/quote-status-manager/quotes-status-manager.ts
+++ b/packages/bridge-status-controller/src/quote-status-manager/quotes-status-manager.ts
@@ -1,25 +1,25 @@
import { TransactionStatus } from '@metamask/transaction-controller';
-import { BridgeClientId, BridgeStatusControllerMessenger } from '../types';
+import { BridgeClientId, BridgeStatusControllerMessenger } from '../types.js';
import {
getTransactionMetaById,
hasNestedSwapTransactions,
isCrossChainTx,
-} from '../utils/transaction';
+} from '../utils/transaction.js';
import {
QuoteStatusState,
QuoteStatusStateToBackendStatus,
QuoteStatusUpdateBackendErrorType,
QuoteStatusBackendStatus,
QuoteStatusFetchWithRetryOutcomeType,
-} from './constants';
-import { QuoteStatusUpdateError } from './errors';
-import { QuoteStatusApiService } from './quote-status-api-service';
-import { QuoteStatusEntryStore } from './quote-status-entry-store';
-import { QuoteStatusGetWithRetryOutcome } from './quote-status-get-with-retry-outcome';
-import { QuoteStatusStateFsm } from './quote-status-state-fsm';
-import { QuoteStatusUpdateWithRetryOutcome } from './quote-status-update-with-retry-outcome';
-import { QuoteStatusPersistEntry, QuoteStatusRuntimeEntry } from './types';
+} from './constants.js';
+import { QuoteStatusUpdateError } from './errors.js';
+import { QuoteStatusApiService } from './quote-status-api-service.js';
+import { QuoteStatusEntryStore } from './quote-status-entry-store.js';
+import { QuoteStatusGetWithRetryOutcome } from './quote-status-get-with-retry-outcome.js';
+import { QuoteStatusStateFsm } from './quote-status-state-fsm.js';
+import { QuoteStatusUpdateWithRetryOutcome } from './quote-status-update-with-retry-outcome.js';
+import { QuoteStatusPersistEntry, QuoteStatusRuntimeEntry } from './types.js';
/**
* Tracks bridge/swap quotes through their lifecycle and keeps the backend in
diff --git a/packages/bridge-status-controller/src/quote-status-manager/types.ts b/packages/bridge-status-controller/src/quote-status-manager/types.ts
index d1146c5d3cb..75163d1f762 100644
--- a/packages/bridge-status-controller/src/quote-status-manager/types.ts
+++ b/packages/bridge-status-controller/src/quote-status-manager/types.ts
@@ -1,17 +1,17 @@
import { BridgeClientId } from '@metamask/bridge-controller';
import { Infer } from '@metamask/superstruct';
-import { BridgeStatusControllerMessenger } from '../types';
+import { BridgeStatusControllerMessenger } from '../types.js';
import {
QuoteStatusState,
QuoteStatusUpdateBackendErrorType,
-} from './constants';
-import { QuoteStatusGetError, QuoteStatusUpdateError } from './errors';
-import { QuoteStatusStateFsm } from './quote-status-state-fsm';
+} from './constants.js';
+import { QuoteStatusGetError, QuoteStatusUpdateError } from './errors.js';
+import { QuoteStatusStateFsm } from './quote-status-state-fsm.js';
import {
QuoteStatusGetResponseSchema,
QuoteStatusUpdateResponseSchema,
-} from './validators';
+} from './validators.js';
/**
* Persisted queue entry describing a single quote status update attempt.
diff --git a/packages/bridge-status-controller/src/quote-status-manager/utils.test.ts b/packages/bridge-status-controller/src/quote-status-manager/utils.test.ts
index 8cc83534daa..a56488da059 100644
--- a/packages/bridge-status-controller/src/quote-status-manager/utils.test.ts
+++ b/packages/bridge-status-controller/src/quote-status-manager/utils.test.ts
@@ -1,4 +1,4 @@
-import { sleep } from './utils';
+import { sleep } from './utils.js';
describe('sleep', () => {
beforeEach(() => {
diff --git a/packages/bridge-status-controller/src/quote-status-manager/validators.test.ts b/packages/bridge-status-controller/src/quote-status-manager/validators.test.ts
index d57a6d93dcd..17f4629f8f5 100644
--- a/packages/bridge-status-controller/src/quote-status-manager/validators.test.ts
+++ b/packages/bridge-status-controller/src/quote-status-manager/validators.test.ts
@@ -3,11 +3,11 @@ import { StatusTypes } from '@metamask/bridge-controller';
import {
QuoteStatusBackendStatus,
QuoteStatusUpdateBackendErrorType,
-} from './constants';
+} from './constants.js';
import {
validateQuoteStatusGetResponse,
validateQuoteStatusUpdateResponse,
-} from './validators';
+} from './validators.js';
describe('quote-status validators', () => {
describe('validateQuoteStatusUpdateResponse', () => {
diff --git a/packages/bridge-status-controller/src/quote-status-manager/validators.ts b/packages/bridge-status-controller/src/quote-status-manager/validators.ts
index 9c530c74d57..43f35870e61 100644
--- a/packages/bridge-status-controller/src/quote-status-manager/validators.ts
+++ b/packages/bridge-status-controller/src/quote-status-manager/validators.ts
@@ -8,13 +8,13 @@ import {
optional,
} from '@metamask/superstruct';
-import { StatusResponseSchema } from '../utils/validators';
+import { StatusResponseSchema } from '../utils/validators.js';
import {
BaseQuoteStatusUpdateErrorTypes,
QuoteStatusUpdateBackendOnChainMismatchTypes,
QuoteStatusBackendValues,
-} from './constants';
-import { QuoteStatusGetResponse, QuoteStatusUpdateResponse } from './types';
+} from './constants.js';
+import { QuoteStatusGetResponse, QuoteStatusUpdateResponse } from './types.js';
const QuoteStatusUpdateResponseWithCurrentStatusSchema = type({
statusCode: number(),
diff --git a/packages/bridge-status-controller/src/strategy/batch-sell-strategy.ts b/packages/bridge-status-controller/src/strategy/batch-sell-strategy.ts
index 27b1f2c4626..b86530ae6c6 100644
--- a/packages/bridge-status-controller/src/strategy/batch-sell-strategy.ts
+++ b/packages/bridge-status-controller/src/strategy/batch-sell-strategy.ts
@@ -4,7 +4,7 @@ import {
TransactionType,
} from '@metamask/transaction-controller';
-import { QuoteAndTxMetadata } from '../types';
+import { QuoteAndTxMetadata } from '../types.js';
import {
findAllTransactionsInBatch,
getAddTransactionBatchParams,
@@ -13,9 +13,9 @@ import {
isTradeTx,
shouldDisable7702,
toQuoteAndTxMetadataBatch,
-} from '../utils/transaction';
-import { SubmitStep } from './types';
-import type { SubmitStrategyParams, SubmitStepResult } from './types';
+} from '../utils/transaction.js';
+import { SubmitStep } from './types.js';
+import type { SubmitStrategyParams, SubmitStepResult } from './types.js';
const getHistoryKeyForQuote = ({
quoteResponse: { quoteId, quote },
diff --git a/packages/bridge-status-controller/src/strategy/batch-strategy.ts b/packages/bridge-status-controller/src/strategy/batch-strategy.ts
index 88f7357e69e..bede6f8c892 100644
--- a/packages/bridge-status-controller/src/strategy/batch-strategy.ts
+++ b/packages/bridge-status-controller/src/strategy/batch-strategy.ts
@@ -7,9 +7,9 @@ import {
isTradeTx,
shouldDisable7702,
toQuoteAndTxMetadata,
-} from '../utils/transaction';
-import { SubmitStep } from './types';
-import type { SubmitStrategyParams, SubmitStepResult } from './types';
+} from '../utils/transaction.js';
+import { SubmitStep } from './types.js';
+import type { SubmitStrategyParams, SubmitStepResult } from './types.js';
/**
* Submits batched EVM transactions to the TransactionController
diff --git a/packages/bridge-status-controller/src/strategy/evm-strategy.ts b/packages/bridge-status-controller/src/strategy/evm-strategy.ts
index a3f33253706..97f4bf54f75 100644
--- a/packages/bridge-status-controller/src/strategy/evm-strategy.ts
+++ b/packages/bridge-status-controller/src/strategy/evm-strategy.ts
@@ -7,10 +7,10 @@ import {
TransactionType,
} from '@metamask/transaction-controller';
-import { BridgeStatusControllerMessenger } from '../types';
-import { getAccountByAddress } from '../utils/accounts';
-import { getNetworkClientIdByChainId } from '../utils/network';
-import { getApprovalTraceParams } from '../utils/trace';
+import { BridgeStatusControllerMessenger } from '../types.js';
+import { getAccountByAddress } from '../utils/accounts.js';
+import { getNetworkClientIdByChainId } from '../utils/network.js';
+import { getApprovalTraceParams } from '../utils/trace.js';
import {
addTransaction,
generateActionId,
@@ -18,9 +18,9 @@ import {
handleMobileHardwareWalletDelay,
toTransactionParams,
waitForTxConfirmation,
-} from '../utils/transaction';
-import { SubmitStep } from './types';
-import type { SubmitStrategyParams, SubmitStepResult } from './types';
+} from '../utils/transaction.js';
+import { SubmitStep } from './types.js';
+import type { SubmitStrategyParams, SubmitStepResult } from './types.js';
/**
* Submits a single tx to the TransactionController and returns the txMetaId
diff --git a/packages/bridge-status-controller/src/strategy/index.ts b/packages/bridge-status-controller/src/strategy/index.ts
index 53500b9aba3..22b8ed10f68 100644
--- a/packages/bridge-status-controller/src/strategy/index.ts
+++ b/packages/bridge-status-controller/src/strategy/index.ts
@@ -14,12 +14,12 @@ import {
TxData,
} from '@metamask/bridge-controller';
-import { submitBatchSellHandler } from './batch-sell-strategy';
-import { submitBatchHandler } from './batch-strategy';
-import { submitEvmHandler as defaultSubmitHandler } from './evm-strategy';
-import { submitIntentHandler } from './intent-strategy';
-import { submitNonEvmHandler } from './non-evm-strategy';
-import type { SubmitStrategyParams, SubmitStepResult } from './types';
+import { submitBatchSellHandler } from './batch-sell-strategy.js';
+import { submitBatchHandler } from './batch-strategy.js';
+import { submitEvmHandler as defaultSubmitHandler } from './evm-strategy.js';
+import { submitIntentHandler } from './intent-strategy.js';
+import { submitNonEvmHandler } from './non-evm-strategy.js';
+import type { SubmitStrategyParams, SubmitStepResult } from './types.js';
const validateParams = <
TxDataType extends
diff --git a/packages/bridge-status-controller/src/strategy/intent-strategy.ts b/packages/bridge-status-controller/src/strategy/intent-strategy.ts
index ef35263cfda..19a95b830bd 100644
--- a/packages/bridge-status-controller/src/strategy/intent-strategy.ts
+++ b/packages/bridge-status-controller/src/strategy/intent-strategy.ts
@@ -6,20 +6,20 @@ import {
} from '@metamask/bridge-controller';
import { TransactionType } from '@metamask/transaction-controller';
-import { getJwt } from '../utils/authentication';
+import { getJwt } from '../utils/authentication.js';
import {
getIntentFromQuote,
mapIntentOrderStatusToTransactionStatus,
postSubmitOrder,
-} from '../utils/intent-api';
-import { signTypedMessage } from '../utils/keyring';
-import { getNetworkClientIdByChainId } from '../utils/network';
+} from '../utils/intent-api.js';
+import { signTypedMessage } from '../utils/keyring.js';
+import { getNetworkClientIdByChainId } from '../utils/network.js';
import {
addSyntheticTransaction,
waitForTxConfirmation,
-} from '../utils/transaction';
-import { handleEvmApprovals } from './evm-strategy';
-import { SubmitStrategyParams, SubmitStepResult, SubmitStep } from './types';
+} from '../utils/transaction.js';
+import { handleEvmApprovals } from './evm-strategy.js';
+import { SubmitStrategyParams, SubmitStepResult, SubmitStep } from './types.js';
/**
* Submits a synthetic EVM transaction to the TransactionController in order to display the intent order's
diff --git a/packages/bridge-status-controller/src/strategy/non-evm-strategy.ts b/packages/bridge-status-controller/src/strategy/non-evm-strategy.ts
index 29a22dcfd6d..cda6d5c2ad4 100644
--- a/packages/bridge-status-controller/src/strategy/non-evm-strategy.ts
+++ b/packages/bridge-status-controller/src/strategy/non-evm-strategy.ts
@@ -7,11 +7,11 @@ import type {
TxData,
} from '@metamask/bridge-controller';
-import { handleNonEvmTx } from '../utils/snaps';
-import { getApprovalTraceParams } from '../utils/trace';
-import { handleApprovalDelay } from '../utils/transaction';
-import { SubmitStep } from './types';
-import type { SubmitStrategyParams, SubmitStepResult } from './types';
+import { handleNonEvmTx } from '../utils/snaps.js';
+import { getApprovalTraceParams } from '../utils/trace.js';
+import { handleApprovalDelay } from '../utils/transaction.js';
+import { SubmitStep } from './types.js';
+import type { SubmitStrategyParams, SubmitStepResult } from './types.js';
/**
* Submits the approval transaction for a non-EVM transaction if present
diff --git a/packages/bridge-status-controller/src/strategy/types.ts b/packages/bridge-status-controller/src/strategy/types.ts
index c45024a9cb4..2d56a7f8d9a 100644
--- a/packages/bridge-status-controller/src/strategy/types.ts
+++ b/packages/bridge-status-controller/src/strategy/types.ts
@@ -19,7 +19,7 @@ import type {
FetchFunction,
QuoteAndTxMetadata,
StartPollingForBridgeTxStatusArgs,
-} from '../types';
+} from '../types.js';
export enum SubmitStep {
/**
diff --git a/packages/bridge-status-controller/src/types.ts b/packages/bridge-status-controller/src/types.ts
index 0f02fce8c76..8a76a77a167 100644
--- a/packages/bridge-status-controller/src/types.ts
+++ b/packages/bridge-status-controller/src/types.ts
@@ -43,10 +43,10 @@ import type {
} from '@metamask/transaction-controller';
import type { CaipAssetType } from '@metamask/utils';
-import type { BridgeStatusControllerMethodActions } from './bridge-status-controller-method-action-types';
-import { BRIDGE_STATUS_CONTROLLER_NAME } from './constants';
-import { QuoteStatusState } from './quote-status-manager/constants';
-import { StatusResponseSchema } from './utils/validators';
+import type { BridgeStatusControllerMethodActions } from './bridge-status-controller-method-action-types.js';
+import { BRIDGE_STATUS_CONTROLLER_NAME } from './constants.js';
+import { QuoteStatusState } from './quote-status-manager/constants.js';
+import { StatusResponseSchema } from './utils/validators.js';
// All fields need to be types not interfaces, same with their children fields
// o/w you get a type error
diff --git a/packages/bridge-status-controller/src/utils/accounts.ts b/packages/bridge-status-controller/src/utils/accounts.ts
index 41343aa5a1f..01b56075ad6 100644
--- a/packages/bridge-status-controller/src/utils/accounts.ts
+++ b/packages/bridge-status-controller/src/utils/accounts.ts
@@ -1,5 +1,5 @@
/* eslint-disable @typescript-eslint/explicit-function-return-type */
-import { BridgeStatusControllerMessenger } from '../types';
+import { BridgeStatusControllerMessenger } from '../types.js';
export const getAccountByAddress = (
messenger: BridgeStatusControllerMessenger,
diff --git a/packages/bridge-status-controller/src/utils/authentication.ts b/packages/bridge-status-controller/src/utils/authentication.ts
index 0b9cbd68c3d..9c78fb8349b 100644
--- a/packages/bridge-status-controller/src/utils/authentication.ts
+++ b/packages/bridge-status-controller/src/utils/authentication.ts
@@ -1,4 +1,4 @@
-import type { BridgeStatusControllerMessenger } from '../types';
+import type { BridgeStatusControllerMessenger } from '../types.js';
export const getJwt = async (
messenger: BridgeStatusControllerMessenger,
diff --git a/packages/bridge-status-controller/src/utils/bridge-status.test.ts b/packages/bridge-status-controller/src/utils/bridge-status.test.ts
index df5680bb658..83471d4abc0 100644
--- a/packages/bridge-status-controller/src/utils/bridge-status.test.ts
+++ b/packages/bridge-status-controller/src/utils/bridge-status.test.ts
@@ -1,17 +1,17 @@
-import { BRIDGE_PROD_API_BASE_URL, REFRESH_INTERVAL_MS } from '../constants';
-import { QuoteStatusFetchWithRetryOutcomeType } from '../quote-status-manager/constants';
-import { QuoteStatusGetError } from '../quote-status-manager/errors';
-import { QuoteStatusGetWithRetryOutcome } from '../quote-status-manager/quote-status-get-with-retry-outcome';
-import type { QuoteStatusManager } from '../quote-status-manager/quotes-status-manager';
-import { BridgeClientId } from '../types';
-import type { StatusRequestWithSrcTxHash, FetchFunction } from '../types';
+import { BRIDGE_PROD_API_BASE_URL, REFRESH_INTERVAL_MS } from '../constants.js';
+import { QuoteStatusFetchWithRetryOutcomeType } from '../quote-status-manager/constants.js';
+import { QuoteStatusGetError } from '../quote-status-manager/errors.js';
+import { QuoteStatusGetWithRetryOutcome } from '../quote-status-manager/quote-status-get-with-retry-outcome.js';
+import type { QuoteStatusManager } from '../quote-status-manager/quotes-status-manager.js';
+import { BridgeClientId } from '../types.js';
+import type { StatusRequestWithSrcTxHash, FetchFunction } from '../types.js';
import {
fetchBridgeQuoteStatus,
fetchBridgeTxStatus,
getBridgeStatusUrl,
getStatusRequestDto,
shouldSkipFetchDueToFetchFailures,
-} from './bridge-status';
+} from './bridge-status.js';
describe('utils', () => {
const mockStatusRequest: StatusRequestWithSrcTxHash = {
diff --git a/packages/bridge-status-controller/src/utils/bridge-status.ts b/packages/bridge-status-controller/src/utils/bridge-status.ts
index f97a1e6bf65..15040f27032 100644
--- a/packages/bridge-status-controller/src/utils/bridge-status.ts
+++ b/packages/bridge-status-controller/src/utils/bridge-status.ts
@@ -7,8 +7,8 @@ import type { Quote, QuoteResponse } from '@metamask/bridge-controller';
import type { Provider } from '@metamask/network-controller';
import { StructError } from '@metamask/superstruct';
-import { REFRESH_INTERVAL_MS } from '../constants';
-import { QuoteStatusManager } from '../quote-status-manager/quotes-status-manager';
+import { REFRESH_INTERVAL_MS } from '../constants.js';
+import { QuoteStatusManager } from '../quote-status-manager/quotes-status-manager.js';
import type {
StatusResponse,
StatusRequestWithSrcTxHash,
@@ -17,10 +17,10 @@ import type {
BridgeHistoryItem,
StatusRequest,
BridgeStatusControllerMessenger,
-} from '../types';
-import { isHistoryItemTooOld } from './history';
-import { getNetworkClientByChainId } from './network';
-import { validateBridgeStatusResponse } from './validators';
+} from '../types.js';
+import { isHistoryItemTooOld } from './history.js';
+import { getNetworkClientByChainId } from './network.js';
+import { validateBridgeStatusResponse } from './validators.js';
export const getBridgeStatusUrl = (bridgeApiBaseUrl: string): string =>
`${bridgeApiBaseUrl}/getTxStatus`;
diff --git a/packages/bridge-status-controller/src/utils/bridge.ts b/packages/bridge-status-controller/src/utils/bridge.ts
index 01aa557264e..6e9a1154262 100644
--- a/packages/bridge-status-controller/src/utils/bridge.ts
+++ b/packages/bridge-status-controller/src/utils/bridge.ts
@@ -5,7 +5,7 @@ import {
RequiredEventContextFromClient,
} from '@metamask/bridge-controller';
-import { BridgeStatusControllerMessenger } from '../types';
+import { BridgeStatusControllerMessenger } from '../types.js';
export const stopPollingForQuotes = (
messenger: BridgeStatusControllerMessenger,
diff --git a/packages/bridge-status-controller/src/utils/feature-flags.ts b/packages/bridge-status-controller/src/utils/feature-flags.ts
index 7194f9cfbe7..19452e9251b 100644
--- a/packages/bridge-status-controller/src/utils/feature-flags.ts
+++ b/packages/bridge-status-controller/src/utils/feature-flags.ts
@@ -1,7 +1,7 @@
import { getBridgeFeatureFlags } from '@metamask/bridge-controller';
-import { DEFAULT_MAX_PENDING_HISTORY_ITEM_AGE_MS } from '../constants';
-import { BridgeStatusControllerMessenger } from '../types';
+import { DEFAULT_MAX_PENDING_HISTORY_ITEM_AGE_MS } from '../constants.js';
+import { BridgeStatusControllerMessenger } from '../types.js';
export const getMaxPendingHistoryItemAgeMs = (
messenger: BridgeStatusControllerMessenger,
diff --git a/packages/bridge-status-controller/src/utils/gas.ts b/packages/bridge-status-controller/src/utils/gas.ts
index b5afdfe0abf..54d8e7690ae 100644
--- a/packages/bridge-status-controller/src/utils/gas.ts
+++ b/packages/bridge-status-controller/src/utils/gas.ts
@@ -3,7 +3,7 @@ import type { TokenAmountValues } from '@metamask/bridge-controller';
import type { TransactionReceipt } from '@metamask/transaction-controller';
import { BigNumber } from 'bignumber.js';
-import type { BridgeHistoryItem } from '../types';
+import type { BridgeHistoryItem } from '../types.js';
const calcGasInHexWei = (gasLimit?: string, gasPrice?: string) => {
return gasLimit && gasPrice
diff --git a/packages/bridge-status-controller/src/utils/history.test.ts b/packages/bridge-status-controller/src/utils/history.test.ts
index 695e9d4ab32..1f5a0a75004 100644
--- a/packages/bridge-status-controller/src/utils/history.test.ts
+++ b/packages/bridge-status-controller/src/utils/history.test.ts
@@ -6,12 +6,12 @@ import type {
BridgeHistoryItem,
StartPollingForBridgeTxStatusArgsSerialized,
StatusResponse,
-} from '../types';
+} from '../types.js';
import {
getHistoryKey,
getInitialHistoryItem,
rekeyHistoryItemInState,
-} from './history';
+} from './history.js';
describe('History Utils', () => {
describe('rekeyHistoryItemInState', () => {
diff --git a/packages/bridge-status-controller/src/utils/history.ts b/packages/bridge-status-controller/src/utils/history.ts
index 3eb541926a6..c504b9de75f 100644
--- a/packages/bridge-status-controller/src/utils/history.ts
+++ b/packages/bridge-status-controller/src/utils/history.ts
@@ -11,8 +11,8 @@ import type {
BridgeStatusControllerMessenger,
BridgeStatusControllerState,
StartPollingForBridgeTxStatusArgsSerialized,
-} from '../types';
-import { getMaxPendingHistoryItemAgeMs } from './feature-flags';
+} from '../types.js';
+import { getMaxPendingHistoryItemAgeMs } from './feature-flags.js';
const updateHistoryItem = (
oldHistoryItem: BridgeHistoryItem,
diff --git a/packages/bridge-status-controller/src/utils/intent-api.test.ts b/packages/bridge-status-controller/src/utils/intent-api.test.ts
index caaa42aa1d5..cb22db0b77c 100644
--- a/packages/bridge-status-controller/src/utils/intent-api.test.ts
+++ b/packages/bridge-status-controller/src/utils/intent-api.test.ts
@@ -2,16 +2,16 @@
import { BridgeClientId, StatusTypes } from '@metamask/bridge-controller';
import { TransactionStatus } from '@metamask/transaction-controller';
-import type { FetchFunction } from '../types';
+import type { FetchFunction } from '../types.js';
import {
getIntentFromQuote,
IntentApiImpl,
mapIntentOrderStatusToTransactionStatus,
postSubmitOrder,
translateIntentOrderToBridgeStatus,
-} from './intent-api';
-import type { IntentSubmissionParams } from './intent-api';
-import { IntentOrderStatus } from './validators';
+} from './intent-api.js';
+import type { IntentSubmissionParams } from './intent-api.js';
+import { IntentOrderStatus } from './validators.js';
describe('IntentApiImpl', () => {
const baseUrl = 'https://example.com/api';
diff --git a/packages/bridge-status-controller/src/utils/intent-api.ts b/packages/bridge-status-controller/src/utils/intent-api.ts
index c9edb1a0671..38421882f08 100644
--- a/packages/bridge-status-controller/src/utils/intent-api.ts
+++ b/packages/bridge-status-controller/src/utils/intent-api.ts
@@ -8,12 +8,12 @@ import {
} from '@metamask/bridge-controller';
import { TransactionStatus } from '@metamask/transaction-controller';
-import type { FetchFunction, StatusResponse } from '../types';
+import type { FetchFunction, StatusResponse } from '../types.js';
import {
IntentStatusResponse,
IntentOrderStatus,
validateIntentStatusResponse,
-} from './validators';
+} from './validators.js';
export type IntentSubmissionParams = {
srcChainId: ChainId;
diff --git a/packages/bridge-status-controller/src/utils/keyring.ts b/packages/bridge-status-controller/src/utils/keyring.ts
index 09c031add54..0eeba547e1b 100644
--- a/packages/bridge-status-controller/src/utils/keyring.ts
+++ b/packages/bridge-status-controller/src/utils/keyring.ts
@@ -1,7 +1,7 @@
import type { Intent } from '@metamask/bridge-controller';
import { SignTypedDataVersion } from '@metamask/keyring-controller';
-import type { BridgeStatusControllerMessenger } from '../types';
+import type { BridgeStatusControllerMessenger } from '../types.js';
export const signTypedMessage = async ({
messenger,
diff --git a/packages/bridge-status-controller/src/utils/metrics.test.ts b/packages/bridge-status-controller/src/utils/metrics.test.ts
index bff10092277..5f48886e8e9 100644
--- a/packages/bridge-status-controller/src/utils/metrics.test.ts
+++ b/packages/bridge-status-controller/src/utils/metrics.test.ts
@@ -15,7 +15,7 @@ import type {
import { TransactionType } from '@metamask/transaction-controller';
import { TransactionStatus } from '@metamask/transaction-controller';
-import type { BridgeHistoryItem } from '../types';
+import type { BridgeHistoryItem } from '../types.js';
import {
getTxStatusesFromHistory,
getFinalizedTxProperties,
@@ -24,7 +24,7 @@ import {
getRequestMetadataFromHistory,
getEVMTxPropertiesFromTransactionMeta,
getPreConfirmationPropertiesFromQuote,
-} from './metrics';
+} from './metrics.js';
describe('metrics utils', () => {
const mockHistoryItem: BridgeHistoryItem = {
diff --git a/packages/bridge-status-controller/src/utils/metrics.ts b/packages/bridge-status-controller/src/utils/metrics.ts
index 99510c4aa57..2d28b950ae7 100644
--- a/packages/bridge-status-controller/src/utils/metrics.ts
+++ b/packages/bridge-status-controller/src/utils/metrics.ts
@@ -36,12 +36,12 @@ import type { TransactionMeta } from '@metamask/transaction-controller';
import type { CaipAssetType, Hex } from '@metamask/utils';
import { BigNumber } from 'bignumber.js';
-import type { BridgeHistoryItem } from '../types';
-import { calcActualGasUsed } from './gas';
+import type { BridgeHistoryItem } from '../types.js';
+import { calcActualGasUsed } from './gas.js';
import {
getActualBridgeReceivedAmount,
getActualSwapReceivedAmount,
-} from './swap-received-amount';
+} from './swap-received-amount.js';
export const getTxStatusesFromHistory = ({
status,
diff --git a/packages/bridge-status-controller/src/utils/network.ts b/packages/bridge-status-controller/src/utils/network.ts
index 98bc47f9e1e..e0ef393d277 100644
--- a/packages/bridge-status-controller/src/utils/network.ts
+++ b/packages/bridge-status-controller/src/utils/network.ts
@@ -3,7 +3,7 @@ import { formatChainIdToHex } from '@metamask/bridge-controller';
import type { GenericQuoteRequest } from '@metamask/bridge-controller';
import type { NetworkClient } from '@metamask/network-controller';
-import type { BridgeStatusControllerMessenger } from '../types';
+import type { BridgeStatusControllerMessenger } from '../types.js';
export const getSelectedChainId = (
messenger: BridgeStatusControllerMessenger,
diff --git a/packages/bridge-status-controller/src/utils/snaps.test.ts b/packages/bridge-status-controller/src/utils/snaps.test.ts
index 2b7fe7ed1b4..60668a55578 100644
--- a/packages/bridge-status-controller/src/utils/snaps.test.ts
+++ b/packages/bridge-status-controller/src/utils/snaps.test.ts
@@ -1,9 +1,9 @@
/* eslint-disable consistent-return */
import { v4 as uuid } from 'uuid';
-import { ChainId } from '../../../bridge-controller/src/types';
-import { BridgeStatusControllerMessenger } from '../types';
-import { createClientTransactionRequest, handleNonEvmTx } from './snaps';
+import { ChainId } from '../../../bridge-controller/src/types.js';
+import { BridgeStatusControllerMessenger } from '../types.js';
+import { createClientTransactionRequest, handleNonEvmTx } from './snaps.js';
jest.mock('uuid', () => ({
v4: jest.fn(),
diff --git a/packages/bridge-status-controller/src/utils/snaps.ts b/packages/bridge-status-controller/src/utils/snaps.ts
index 94ce3483344..4dec1345910 100644
--- a/packages/bridge-status-controller/src/utils/snaps.ts
+++ b/packages/bridge-status-controller/src/utils/snaps.ts
@@ -26,7 +26,7 @@ import { v4 as uuid } from 'uuid';
import type {
BridgeStatusControllerMessenger,
SolanaTransactionMeta,
-} from '../types';
+} from '../types.js';
/**
* Creates a client request object for signing and sending a transaction
diff --git a/packages/bridge-status-controller/src/utils/swap-received-amount.ts b/packages/bridge-status-controller/src/utils/swap-received-amount.ts
index f8553e77e64..9827fb41c74 100644
--- a/packages/bridge-status-controller/src/utils/swap-received-amount.ts
+++ b/packages/bridge-status-controller/src/utils/swap-received-amount.ts
@@ -3,7 +3,7 @@ import { isNativeAddress } from '@metamask/bridge-controller';
import type { TransactionMeta } from '@metamask/transaction-controller';
import { BigNumber } from 'bignumber.js';
-import type { BridgeHistoryItem } from '../types';
+import type { BridgeHistoryItem } from '../types.js';
const getReceivedNativeAmount = (
historyItem: BridgeHistoryItem,
diff --git a/packages/bridge-status-controller/src/utils/trace.ts b/packages/bridge-status-controller/src/utils/trace.ts
index 72098788d1f..3faf53d55ab 100644
--- a/packages/bridge-status-controller/src/utils/trace.ts
+++ b/packages/bridge-status-controller/src/utils/trace.ts
@@ -5,7 +5,7 @@ import {
QuoteResponse,
} from '@metamask/bridge-controller';
-import { TraceName } from '../constants';
+import { TraceName } from '../constants.js';
export const getTraceParams = (
quoteResponse: QuoteResponse,
diff --git a/packages/bridge-status-controller/src/utils/transaction.test.ts b/packages/bridge-status-controller/src/utils/transaction.test.ts
index 1cd257935e1..f5d8be3aab3 100644
--- a/packages/bridge-status-controller/src/utils/transaction.test.ts
+++ b/packages/bridge-status-controller/src/utils/transaction.test.ts
@@ -18,13 +18,13 @@ import {
} from '@metamask/transaction-controller';
import type { TransactionMeta } from '@metamask/transaction-controller';
-import { APPROVAL_DELAY_MS } from '../constants';
+import { APPROVAL_DELAY_MS } from '../constants.js';
import type {
BridgeStatusControllerMessenger,
QuoteAndTxMetadata,
-} from '../types';
-import { getStatusRequestParams } from './bridge-status';
-import * as snaps from './snaps';
+} from '../types.js';
+import { getStatusRequestParams } from './bridge-status.js';
+import * as snaps from './snaps.js';
import {
handleApprovalDelay,
handleMobileHardwareWalletDelay,
@@ -35,7 +35,7 @@ import {
findAllTransactionsInBatch,
isApprovalTx,
updateTransactionsInBatch,
-} from './transaction';
+} from './transaction.js';
describe('Bridge Status Controller Transaction Utils', () => {
describe('waitForTxConfirmation', () => {
diff --git a/packages/bridge-status-controller/src/utils/transaction.ts b/packages/bridge-status-controller/src/utils/transaction.ts
index 6942ee261d8..519a2edf533 100644
--- a/packages/bridge-status-controller/src/utils/transaction.ts
+++ b/packages/bridge-status-controller/src/utils/transaction.ts
@@ -32,11 +32,11 @@ import type {
import { createProjectLogger, isStrictHexString } from '@metamask/utils';
import type { Hex } from '@metamask/utils';
-import { APPROVAL_DELAY_MS } from '../constants';
-import type { BridgeStatusControllerMessenger } from '../types';
-import type { QuoteAndTxMetadata } from '../types';
-import { getAccountByAddress } from './accounts';
-import { getNetworkClientIdByChainId } from './network';
+import { APPROVAL_DELAY_MS } from '../constants.js';
+import type { BridgeStatusControllerMessenger } from '../types.js';
+import type { QuoteAndTxMetadata } from '../types.js';
+import { getAccountByAddress } from './accounts.js';
+import { getNetworkClientIdByChainId } from './network.js';
export const isApprovalTx = (type: TransactionType) =>
type === TransactionType.bridgeApproval ||
diff --git a/packages/bridge-status-controller/src/utils/validators.test.ts b/packages/bridge-status-controller/src/utils/validators.test.ts
index 9987a1afb2c..ab842f35bb2 100644
--- a/packages/bridge-status-controller/src/utils/validators.test.ts
+++ b/packages/bridge-status-controller/src/utils/validators.test.ts
@@ -1,4 +1,4 @@
-import { validateBridgeStatusResponse } from './validators';
+import { validateBridgeStatusResponse } from './validators.js';
const BridgeTxStatusResponses = {
STATUS_PENDING_VALID: {
diff --git a/packages/bridge-status-controller/test/mock-batch-sell-erc20-erc20.ts b/packages/bridge-status-controller/test/mock-batch-sell-erc20-erc20.ts
index ad65c4c72d1..e6780ea49c4 100644
--- a/packages/bridge-status-controller/test/mock-batch-sell-erc20-erc20.ts
+++ b/packages/bridge-status-controller/test/mock-batch-sell-erc20-erc20.ts
@@ -16,7 +16,7 @@ import {
TransactionType,
} from '@metamask/transaction-controller';
-import { BridgeHistoryItem } from '../src';
+import { BridgeHistoryItem } from '../src.js';
export const mockBatchSellErc20Erc20: QuoteResponse[] = [
{
diff --git a/packages/build-utils/jest.config.js b/packages/build-utils/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/build-utils/jest.config.js
+++ b/packages/build-utils/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/build-utils/package.json b/packages/build-utils/package.json
index 66c69139339..6aef4b716fa 100644
--- a/packages/build-utils/package.json
+++ b/packages/build-utils/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/build-utils",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/build-utils",
@@ -57,8 +50,8 @@
"@types/eslint": "^8.44.7"
},
"devDependencies": {
+ "@jest/globals": "^30.4.1",
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/build-utils/src/index.ts b/packages/build-utils/src/index.ts
index 0e5dc2315ed..294d4375e69 100644
--- a/packages/build-utils/src/index.ts
+++ b/packages/build-utils/src/index.ts
@@ -1,3 +1,3 @@
-export type { FeatureLabels } from './transforms/remove-fenced-code';
-export { removeFencedCode } from './transforms/remove-fenced-code';
-export { lintTransformedFile } from './transforms/utils';
+export type { FeatureLabels } from './transforms/remove-fenced-code.js';
+export { removeFencedCode } from './transforms/remove-fenced-code.js';
+export { lintTransformedFile } from './transforms/utils.js';
diff --git a/packages/build-utils/src/transforms/remove-fenced-code.test.ts b/packages/build-utils/src/transforms/remove-fenced-code.test.ts
index 749c7b2f3a2..9e6f4ae2ec4 100644
--- a/packages/build-utils/src/transforms/remove-fenced-code.test.ts
+++ b/packages/build-utils/src/transforms/remove-fenced-code.test.ts
@@ -1,10 +1,10 @@
-import { removeFencedCode } from '..';
-import type { FeatureLabels } from '..';
+import { removeFencedCode } from './...js';
+import type { FeatureLabels } from './...js';
import {
DirectiveCommand,
multiSplice,
validateCommand,
-} from './remove-fenced-code';
+} from './remove-fenced-code.js';
const FEATURE_A = 'feature-a';
const FEATURE_B = 'feature-b';
diff --git a/packages/build-utils/src/transforms/utils.test.ts b/packages/build-utils/src/transforms/utils.test.ts
index 8921017c8cc..85cfb42e880 100644
--- a/packages/build-utils/src/transforms/utils.test.ts
+++ b/packages/build-utils/src/transforms/utils.test.ts
@@ -1,4 +1,6 @@
-import { lintTransformedFile } from '..';
+import { jest } from '@jest/globals';
+
+import { lintTransformedFile } from './...js';
describe('transform utils', () => {
describe('lintTransformedFile', () => {
diff --git a/packages/chain-agnostic-permission/jest.config.js b/packages/chain-agnostic-permission/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/chain-agnostic-permission/jest.config.js
+++ b/packages/chain-agnostic-permission/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/chain-agnostic-permission/package.json b/packages/chain-agnostic-permission/package.json
index 5e34d38a07a..d06a0cedc8d 100644
--- a/packages/chain-agnostic-permission/package.json
+++ b/packages/chain-agnostic-permission/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/chain-agnostic-permission",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/chain-agnostic-permission",
@@ -58,12 +51,11 @@
"@metamask/permission-controller": "^13.1.1",
"@metamask/rpc-errors": "^7.0.2",
"@metamask/utils": "^11.11.0",
- "lodash": "^4.17.21"
+ "lodash-es": "^4.17.21"
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
"@metamask/keyring-internal-api": "^11.0.1",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/chain-agnostic-permission/src/caip25Permission.test.ts b/packages/chain-agnostic-permission/src/caip25Permission.test.ts
index 514488adc95..f35a35b981a 100644
--- a/packages/chain-agnostic-permission/src/caip25Permission.test.ts
+++ b/packages/chain-agnostic-permission/src/caip25Permission.test.ts
@@ -8,9 +8,9 @@ import type {
PermissionSpecificationConstraint,
CaveatSpecificationConstraint,
} from '@metamask/permission-controller';
-import { pick } from 'lodash';
+import { pick } from 'lodash-es';
-import type { Caip25CaveatValue } from './caip25Permission';
+import type { Caip25CaveatValue } from './caip25Permission.js';
import {
Caip25CaveatType,
caip25EndowmentBuilder,
@@ -23,10 +23,10 @@ import {
getCaip25CaveatFromPermission,
getCaip25PermissionFromLegacyPermissions,
requestPermittedChainsPermissionIncremental,
-} from './caip25Permission';
-import { CaveatTypes, PermissionKeys } from './constants';
-import { KnownSessionProperties } from './scope/constants';
-import * as ScopeSupported from './scope/supported';
+} from './caip25Permission.js';
+import { CaveatTypes, PermissionKeys } from './constants.js';
+import { KnownSessionProperties } from './scope/constants.js';
+import * as ScopeSupported from './scope/supported.js';
jest.mock('./scope/supported', () => ({
...jest.requireActual('./scope/supported'),
diff --git a/packages/chain-agnostic-permission/src/caip25Permission.ts b/packages/chain-agnostic-permission/src/caip25Permission.ts
index 2671fdd226e..3758969b4f7 100644
--- a/packages/chain-agnostic-permission/src/caip25Permission.ts
+++ b/packages/chain-agnostic-permission/src/caip25Permission.ts
@@ -23,31 +23,31 @@ import type {
Hex,
NonEmptyArray,
} from '@metamask/utils';
-import { cloneDeep, isEqual, pick } from 'lodash';
+import { cloneDeep, isEqual, pick } from 'lodash-es';
-import { CaveatTypes, PermissionKeys } from './constants';
+import { CaveatTypes, PermissionKeys } from './constants.js';
import {
setEthAccounts,
setNonSCACaipAccountIdsInCaip25CaveatValue,
-} from './operators/caip-permission-operator-accounts';
+} from './operators/caip-permission-operator-accounts.js';
import {
setChainIdsInCaip25CaveatValue,
setPermittedEthChainIds,
-} from './operators/caip-permission-operator-permittedChains';
-import { assertIsInternalScopesObject } from './scope/assert';
-import { KnownSessionProperties } from './scope/constants';
+} from './operators/caip-permission-operator-permittedChains.js';
+import { assertIsInternalScopesObject } from './scope/assert.js';
+import { KnownSessionProperties } from './scope/constants.js';
import {
isSupportedAccount,
isSupportedScopeString,
isSupportedSessionProperty,
-} from './scope/supported';
-import { mergeInternalScopes } from './scope/transform';
-import { parseScopeString } from './scope/types';
+} from './scope/supported.js';
+import { mergeInternalScopes } from './scope/transform.js';
+import { parseScopeString } from './scope/types.js';
import type {
ExternalScopeString,
InternalScopeObject,
InternalScopesObject,
-} from './scope/types';
+} from './scope/types.js';
/**
* The CAIP-25 permission caveat value.
diff --git a/packages/chain-agnostic-permission/src/index.test.ts b/packages/chain-agnostic-permission/src/index.test.ts
index 33c73ae3767..62fe16a34d6 100644
--- a/packages/chain-agnostic-permission/src/index.test.ts
+++ b/packages/chain-agnostic-permission/src/index.test.ts
@@ -1,4 +1,4 @@
-import * as allExports from '.';
+import * as allExports from './..js';
describe('@metamask/chain-agnostic-permission', () => {
it('has expected JavaScript exports', () => {
diff --git a/packages/chain-agnostic-permission/src/index.ts b/packages/chain-agnostic-permission/src/index.ts
index 734114f6c4b..bf4f3744db8 100644
--- a/packages/chain-agnostic-permission/src/index.ts
+++ b/packages/chain-agnostic-permission/src/index.ts
@@ -6,7 +6,7 @@ export {
getCaipAccountIdsFromCaip25CaveatValue,
isInternalAccountInPermittedAccountIds,
isCaipAccountIdInPermittedAccountIds,
-} from './operators/caip-permission-operator-accounts';
+} from './operators/caip-permission-operator-accounts.js';
export {
getPermittedEthChainIds,
addPermittedEthChainId,
@@ -17,20 +17,20 @@ export {
getAllScopesFromPermission,
getAllScopesFromCaip25CaveatValue,
getAllScopesFromScopesObjects,
-} from './operators/caip-permission-operator-permittedChains';
+} from './operators/caip-permission-operator-permittedChains.js';
export {
getInternalScopesObject,
getSessionScopes,
getSessionProperties,
getPermittedAccountsForScopes,
-} from './operators/caip-permission-operator-session-scopes';
-export type { Caip25Authorization } from './scope/authorization';
+} from './operators/caip-permission-operator-session-scopes.js';
+export type { Caip25Authorization } from './scope/authorization.js';
export {
validateAndNormalizeScopes,
bucketScopes,
isNamespaceInScopesObject,
-} from './scope/authorization';
-export { assertIsInternalScopeString } from './scope/assert';
+} from './scope/authorization.js';
+export { assertIsInternalScopeString } from './scope/assert.js';
export {
KnownWalletRpcMethods,
KnownRpcMethods,
@@ -38,8 +38,8 @@ export {
KnownNotifications,
KnownWalletScopeString,
isKnownSessionPropertyValue,
-} from './scope/constants';
-export { getSupportedScopeObjects } from './scope/filter';
+} from './scope/constants.js';
+export { getSupportedScopeObjects } from './scope/filter.js';
export type {
ExternalScopeString,
ExternalScopeObject,
@@ -51,8 +51,8 @@ export type {
NormalizedScopesObject,
ScopedProperties,
NonWalletKnownCaipNamespace,
-} from './scope/types';
-export { parseScopeString } from './scope/types';
+} from './scope/types.js';
+export { parseScopeString } from './scope/types.js';
export {
getUniqueArrayItems,
normalizeScope,
@@ -60,9 +60,9 @@ export {
mergeNormalizedScopes,
mergeInternalScopes,
normalizeAndMergeScopes,
-} from './scope/transform';
+} from './scope/transform.js';
-export type { Caip25CaveatValue } from './caip25Permission';
+export type { Caip25CaveatValue } from './caip25Permission.js';
export {
caip25CaveatBuilder,
Caip25CaveatType,
@@ -74,6 +74,6 @@ export {
getCaip25CaveatFromPermission,
getCaip25PermissionFromLegacyPermissions,
requestPermittedChainsPermissionIncremental,
-} from './caip25Permission';
-export { KnownSessionProperties } from './scope/constants';
-export { Caip25Errors } from './scope/errors';
+} from './caip25Permission.js';
+export { KnownSessionProperties } from './scope/constants.js';
+export { Caip25Errors } from './scope/errors.js';
diff --git a/packages/chain-agnostic-permission/src/operators/caip-permission-operator-accounts.test.ts b/packages/chain-agnostic-permission/src/operators/caip-permission-operator-accounts.test.ts
index 52aca179221..216dc401e55 100644
--- a/packages/chain-agnostic-permission/src/operators/caip-permission-operator-accounts.test.ts
+++ b/packages/chain-agnostic-permission/src/operators/caip-permission-operator-accounts.test.ts
@@ -1,7 +1,7 @@
import type { CaipAccountId } from '@metamask/utils';
-import type { Caip25CaveatValue } from '../caip25Permission';
-import type { InternalScopesObject } from '../scope/types';
+import type { Caip25CaveatValue } from '../caip25Permission.js';
+import type { InternalScopesObject } from '../scope/types.js';
import {
getEthAccounts,
setEthAccounts,
@@ -10,7 +10,7 @@ import {
getCaipAccountIdsFromCaip25CaveatValue,
isCaipAccountIdInPermittedAccountIds,
isInternalAccountInPermittedAccountIds,
-} from './caip-permission-operator-accounts';
+} from './caip-permission-operator-accounts.js';
describe('CAIP-25 eth_accounts adapters', () => {
describe('getEthAccounts', () => {
diff --git a/packages/chain-agnostic-permission/src/operators/caip-permission-operator-accounts.ts b/packages/chain-agnostic-permission/src/operators/caip-permission-operator-accounts.ts
index 71278aca353..281daa5e874 100644
--- a/packages/chain-agnostic-permission/src/operators/caip-permission-operator-accounts.ts
+++ b/packages/chain-agnostic-permission/src/operators/caip-permission-operator-accounts.ts
@@ -13,11 +13,14 @@ import type {
Hex,
} from '@metamask/utils';
-import type { Caip25CaveatValue } from '../caip25Permission';
-import { KnownWalletScopeString } from '../scope/constants';
-import { getUniqueArrayItems } from '../scope/transform';
-import type { InternalScopeString, InternalScopesObject } from '../scope/types';
-import { parseScopeString } from '../scope/types';
+import type { Caip25CaveatValue } from '../caip25Permission.js';
+import { KnownWalletScopeString } from '../scope/constants.js';
+import { getUniqueArrayItems } from '../scope/transform.js';
+import type {
+ InternalScopeString,
+ InternalScopesObject,
+} from '../scope/types.js';
+import { parseScopeString } from '../scope/types.js';
/*
*
diff --git a/packages/chain-agnostic-permission/src/operators/caip-permission-operator-permittedChains.test.ts b/packages/chain-agnostic-permission/src/operators/caip-permission-operator-permittedChains.test.ts
index f85384c9569..a14c5802ee8 100644
--- a/packages/chain-agnostic-permission/src/operators/caip-permission-operator-permittedChains.test.ts
+++ b/packages/chain-agnostic-permission/src/operators/caip-permission-operator-permittedChains.test.ts
@@ -1,5 +1,5 @@
-import type { Caip25CaveatValue } from '../caip25Permission';
-import { Caip25CaveatType } from '../caip25Permission';
+import type { Caip25CaveatValue } from '../caip25Permission.js';
+import { Caip25CaveatType } from '../caip25Permission.js';
import {
addPermittedEthChainId,
getPermittedEthChainIds,
@@ -10,7 +10,7 @@ import {
getAllScopesFromCaip25CaveatValue,
getAllNamespacesFromCaip25CaveatValue,
getAllScopesFromPermission,
-} from './caip-permission-operator-permittedChains';
+} from './caip-permission-operator-permittedChains.js';
describe('CAIP-25 permittedChains adapters', () => {
describe('getPermittedEthChainIds', () => {
diff --git a/packages/chain-agnostic-permission/src/operators/caip-permission-operator-permittedChains.ts b/packages/chain-agnostic-permission/src/operators/caip-permission-operator-permittedChains.ts
index c8feac45825..b44f53debc5 100644
--- a/packages/chain-agnostic-permission/src/operators/caip-permission-operator-permittedChains.ts
+++ b/packages/chain-agnostic-permission/src/operators/caip-permission-operator-permittedChains.ts
@@ -2,11 +2,14 @@ import { toHex } from '@metamask/controller-utils';
import type { Hex, CaipChainId, CaipNamespace } from '@metamask/utils';
import { hexToBigInt, KnownCaipNamespace } from '@metamask/utils';
-import { Caip25CaveatType } from '../caip25Permission';
-import type { Caip25CaveatValue } from '../caip25Permission';
-import { getUniqueArrayItems } from '../scope/transform';
-import type { InternalScopesObject, InternalScopeString } from '../scope/types';
-import { isWalletScope, parseScopeString } from '../scope/types';
+import { Caip25CaveatType } from '../caip25Permission.js';
+import type { Caip25CaveatValue } from '../caip25Permission.js';
+import { getUniqueArrayItems } from '../scope/transform.js';
+import type {
+ InternalScopesObject,
+ InternalScopeString,
+} from '../scope/types.js';
+import { isWalletScope, parseScopeString } from '../scope/types.js';
/*
*
diff --git a/packages/chain-agnostic-permission/src/operators/caip-permission-operator-session-scopes.test.ts b/packages/chain-agnostic-permission/src/operators/caip-permission-operator-session-scopes.test.ts
index 3e17e0cf627..cbdc893698c 100644
--- a/packages/chain-agnostic-permission/src/operators/caip-permission-operator-session-scopes.test.ts
+++ b/packages/chain-agnostic-permission/src/operators/caip-permission-operator-session-scopes.test.ts
@@ -5,13 +5,13 @@ import {
KnownRpcMethods,
KnownWalletNamespaceRpcMethods,
KnownWalletRpcMethods,
-} from '../scope/constants';
+} from '../scope/constants.js';
import {
getInternalScopesObject,
getPermittedAccountsForScopes,
getSessionProperties,
getSessionScopes,
-} from './caip-permission-operator-session-scopes';
+} from './caip-permission-operator-session-scopes.js';
describe('CAIP-25 session scopes adapters', () => {
describe('getInternalScopesObject', () => {
diff --git a/packages/chain-agnostic-permission/src/operators/caip-permission-operator-session-scopes.ts b/packages/chain-agnostic-permission/src/operators/caip-permission-operator-session-scopes.ts
index 1c4ccbbf1a7..c2ca2b7d8da 100644
--- a/packages/chain-agnostic-permission/src/operators/caip-permission-operator-session-scopes.ts
+++ b/packages/chain-agnostic-permission/src/operators/caip-permission-operator-session-scopes.ts
@@ -1,20 +1,20 @@
import { isCaipChainId, KnownCaipNamespace } from '@metamask/utils';
import type { CaipAccountId, CaipChainId, Hex, Json } from '@metamask/utils';
-import type { Caip25CaveatValue } from '../caip25Permission';
+import type { Caip25CaveatValue } from '../caip25Permission.js';
import {
KnownNotifications,
KnownRpcMethods,
KnownWalletNamespaceRpcMethods,
KnownWalletRpcMethods,
-} from '../scope/constants';
-import { mergeNormalizedScopes } from '../scope/transform';
+} from '../scope/constants.js';
+import { mergeNormalizedScopes } from '../scope/transform.js';
import type {
InternalScopesObject,
NormalizedScopesObject,
-} from '../scope/types';
-import { parseScopeString } from '../scope/types';
-import { getEthAccounts } from './caip-permission-operator-accounts';
+} from '../scope/types.js';
+import { parseScopeString } from '../scope/types.js';
+import { getEthAccounts } from './caip-permission-operator-accounts.js';
/**
* Converts an NormalizedScopesObject to a InternalScopesObject.
diff --git a/packages/chain-agnostic-permission/src/scope/assert.test.ts b/packages/chain-agnostic-permission/src/scope/assert.test.ts
index 92487edd291..2f011a59d88 100644
--- a/packages/chain-agnostic-permission/src/scope/assert.test.ts
+++ b/packages/chain-agnostic-permission/src/scope/assert.test.ts
@@ -6,10 +6,10 @@ import {
assertIsExternalScopesObject,
assertIsInternalScopesObject,
assertIsInternalScopeString,
-} from './assert';
-import { Caip25Errors } from './errors';
-import * as Supported from './supported';
-import type { NormalizedScopeObject } from './types';
+} from './assert.js';
+import { Caip25Errors } from './errors.js';
+import * as Supported from './supported.js';
+import type { NormalizedScopeObject } from './types.js';
jest.mock('./supported', () => ({
isSupportedScopeString: jest.fn(),
diff --git a/packages/chain-agnostic-permission/src/scope/assert.ts b/packages/chain-agnostic-permission/src/scope/assert.ts
index 01eda87eb93..b5afee94bb5 100644
--- a/packages/chain-agnostic-permission/src/scope/assert.ts
+++ b/packages/chain-agnostic-permission/src/scope/assert.ts
@@ -8,12 +8,12 @@ import {
} from '@metamask/utils';
import type { CaipChainId, Hex } from '@metamask/utils';
-import { Caip25Errors } from './errors';
+import { Caip25Errors } from './errors.js';
import {
isSupportedMethod,
isSupportedNotification,
isSupportedScopeString,
-} from './supported';
+} from './supported.js';
import type {
ExternalScopeObject,
ExternalScopesObject,
@@ -23,7 +23,7 @@ import type {
InternalScopeString,
NormalizedScopeObject,
NormalizedScopesObject,
-} from './types';
+} from './types.js';
/**
* Asserts that a scope string and its associated scope object are supported.
diff --git a/packages/chain-agnostic-permission/src/scope/authorization.test.ts b/packages/chain-agnostic-permission/src/scope/authorization.test.ts
index 53d3dc44111..a2d7d650951 100644
--- a/packages/chain-agnostic-permission/src/scope/authorization.test.ts
+++ b/packages/chain-agnostic-permission/src/scope/authorization.test.ts
@@ -2,11 +2,11 @@ import {
bucketScopes,
isNamespaceInScopesObject,
validateAndNormalizeScopes,
-} from './authorization';
-import * as Filter from './filter';
-import * as Transform from './transform';
-import type { ExternalScopeObject } from './types';
-import * as Validation from './validation';
+} from './authorization.js';
+import * as Filter from './filter.js';
+import * as Transform from './transform.js';
+import type { ExternalScopeObject } from './types.js';
+import * as Validation from './validation.js';
jest.mock('./filter', () => ({
bucketScopesBySupport: jest.fn(),
diff --git a/packages/chain-agnostic-permission/src/scope/authorization.ts b/packages/chain-agnostic-permission/src/scope/authorization.ts
index 2df9ae6c8f3..8f29ff57de0 100644
--- a/packages/chain-agnostic-permission/src/scope/authorization.ts
+++ b/packages/chain-agnostic-permission/src/scope/authorization.ts
@@ -1,14 +1,14 @@
import type { CaipChainId, CaipNamespace, Hex, Json } from '@metamask/utils';
-import { bucketScopesBySupport } from './filter';
-import { normalizeAndMergeScopes } from './transform';
+import { bucketScopesBySupport } from './filter.js';
+import { normalizeAndMergeScopes } from './transform.js';
import type {
ExternalScopesObject,
ExternalScopeString,
NormalizedScopesObject,
-} from './types';
-import { parseScopeString } from './types';
-import { getValidScopes } from './validation';
+} from './types.js';
+import { parseScopeString } from './types.js';
+import { getValidScopes } from './validation.js';
/**
* Represents the parameters of a [CAIP-25](https://chainagnostic.org/CAIPs/caip-25) request.
*/
diff --git a/packages/chain-agnostic-permission/src/scope/constants.test.ts b/packages/chain-agnostic-permission/src/scope/constants.test.ts
index ea0f622591a..cd0d09c407f 100644
--- a/packages/chain-agnostic-permission/src/scope/constants.test.ts
+++ b/packages/chain-agnostic-permission/src/scope/constants.test.ts
@@ -2,7 +2,7 @@ import {
KnownRpcMethods,
KnownSessionProperties,
isKnownSessionPropertyValue,
-} from './constants';
+} from './constants.js';
describe('KnownRpcMethods', () => {
it('should match the snapshot', () => {
diff --git a/packages/chain-agnostic-permission/src/scope/constants.ts b/packages/chain-agnostic-permission/src/scope/constants.ts
index 1737948162b..cc6f6a5977b 100644
--- a/packages/chain-agnostic-permission/src/scope/constants.ts
+++ b/packages/chain-agnostic-permission/src/scope/constants.ts
@@ -1,6 +1,6 @@
import MetaMaskOpenRPCDocument from '@metamask/api-specs';
-import type { NonWalletKnownCaipNamespace } from './types';
+import type { NonWalletKnownCaipNamespace } from './types.js';
/**
* ScopeStrings for offchain methods that are not specific to a chainId but are specific to a CAIP namespace.
diff --git a/packages/chain-agnostic-permission/src/scope/errors.test.ts b/packages/chain-agnostic-permission/src/scope/errors.test.ts
index f176cd36d8a..afe56f5747d 100644
--- a/packages/chain-agnostic-permission/src/scope/errors.test.ts
+++ b/packages/chain-agnostic-permission/src/scope/errors.test.ts
@@ -1,4 +1,4 @@
-import { Caip25Errors } from './errors';
+import { Caip25Errors } from './errors.js';
describe('Caip25Errors', () => {
it('requestedChainsNotSupportedError', () => {
diff --git a/packages/chain-agnostic-permission/src/scope/filter.test.ts b/packages/chain-agnostic-permission/src/scope/filter.test.ts
index 336af7d3a98..d70a20d04f6 100644
--- a/packages/chain-agnostic-permission/src/scope/filter.test.ts
+++ b/packages/chain-agnostic-permission/src/scope/filter.test.ts
@@ -1,6 +1,6 @@
-import * as Assert from './assert';
-import { bucketScopesBySupport, getSupportedScopeObjects } from './filter';
-import * as Supported from './supported';
+import * as Assert from './assert.js';
+import { bucketScopesBySupport, getSupportedScopeObjects } from './filter.js';
+import * as Supported from './supported.js';
jest.mock('./assert', () => ({
...jest.requireActual('./assert'),
diff --git a/packages/chain-agnostic-permission/src/scope/filter.ts b/packages/chain-agnostic-permission/src/scope/filter.ts
index a71dd18365e..41c14e20f58 100644
--- a/packages/chain-agnostic-permission/src/scope/filter.ts
+++ b/packages/chain-agnostic-permission/src/scope/filter.ts
@@ -1,12 +1,12 @@
import type { CaipChainId, Hex } from '@metamask/utils';
-import { assertIsInternalScopeString, assertScopeSupported } from './assert';
-import { isSupportedMethod, isSupportedNotification } from './supported';
+import { assertIsInternalScopeString, assertScopeSupported } from './assert.js';
+import { isSupportedMethod, isSupportedNotification } from './supported.js';
import type {
InternalScopeString,
NormalizedScopeObject,
NormalizedScopesObject,
-} from './types';
+} from './types.js';
/**
* Groups a NormalizedScopesObject into two separate
diff --git a/packages/chain-agnostic-permission/src/scope/supported.test.ts b/packages/chain-agnostic-permission/src/scope/supported.test.ts
index d55ec08b17d..f596c383513 100644
--- a/packages/chain-agnostic-permission/src/scope/supported.test.ts
+++ b/packages/chain-agnostic-permission/src/scope/supported.test.ts
@@ -4,14 +4,14 @@ import {
KnownSessionProperties,
KnownWalletNamespaceRpcMethods,
KnownWalletRpcMethods,
-} from './constants';
+} from './constants.js';
import {
isSupportedAccount,
isSupportedMethod,
isSupportedNotification,
isSupportedScopeString,
isSupportedSessionProperty,
-} from './supported';
+} from './supported.js';
describe('Scope Support', () => {
describe('isSupportedNotification', () => {
diff --git a/packages/chain-agnostic-permission/src/scope/supported.ts b/packages/chain-agnostic-permission/src/scope/supported.ts
index c0afa8a2d01..0b86cc9fdca 100644
--- a/packages/chain-agnostic-permission/src/scope/supported.ts
+++ b/packages/chain-agnostic-permission/src/scope/supported.ts
@@ -13,9 +13,9 @@ import {
KnownSessionProperties,
KnownWalletNamespaceRpcMethods,
KnownWalletRpcMethods,
-} from './constants';
-import type { ExternalScopeString } from './types';
-import { parseScopeString } from './types';
+} from './constants.js';
+import type { ExternalScopeString } from './types.js';
+import { parseScopeString } from './types.js';
/**
* Determines if a scope string is supported.
diff --git a/packages/chain-agnostic-permission/src/scope/transform.test.ts b/packages/chain-agnostic-permission/src/scope/transform.test.ts
index 7d8e33715a5..1041f84d99b 100644
--- a/packages/chain-agnostic-permission/src/scope/transform.test.ts
+++ b/packages/chain-agnostic-permission/src/scope/transform.test.ts
@@ -4,12 +4,12 @@ import {
mergeInternalScopes,
mergeScopeObject,
normalizeAndMergeScopes,
-} from './transform';
+} from './transform.js';
import type {
ExternalScopeObject,
NormalizedScopeObject,
InternalScopesObject,
-} from './types';
+} from './types.js';
const externalScopeObject: ExternalScopeObject = {
methods: [],
diff --git a/packages/chain-agnostic-permission/src/scope/transform.ts b/packages/chain-agnostic-permission/src/scope/transform.ts
index a44d510474d..c5d84c64dd3 100644
--- a/packages/chain-agnostic-permission/src/scope/transform.ts
+++ b/packages/chain-agnostic-permission/src/scope/transform.ts
@@ -1,5 +1,5 @@
import type { CaipReference } from '@metamask/utils';
-import { cloneDeep } from 'lodash';
+import { cloneDeep } from 'lodash-es';
import type {
ExternalScopeObject,
@@ -7,8 +7,8 @@ import type {
InternalScopesObject,
NormalizedScopeObject,
NormalizedScopesObject,
-} from './types';
-import { parseScopeString } from './types';
+} from './types.js';
+import { parseScopeString } from './types.js';
/**
* Returns a list of unique items
diff --git a/packages/chain-agnostic-permission/src/scope/types.test.ts b/packages/chain-agnostic-permission/src/scope/types.test.ts
index 1b6149b3f2e..a7a16a15a7a 100644
--- a/packages/chain-agnostic-permission/src/scope/types.test.ts
+++ b/packages/chain-agnostic-permission/src/scope/types.test.ts
@@ -1,4 +1,4 @@
-import { parseScopeString } from './types';
+import { parseScopeString } from './types.js';
describe('Scope', () => {
describe('parseScopeString', () => {
diff --git a/packages/chain-agnostic-permission/src/scope/validation.test.ts b/packages/chain-agnostic-permission/src/scope/validation.test.ts
index 6871b01069b..c79ee002772 100644
--- a/packages/chain-agnostic-permission/src/scope/validation.test.ts
+++ b/packages/chain-agnostic-permission/src/scope/validation.test.ts
@@ -1,5 +1,5 @@
-import type { ExternalScopeObject } from './types';
-import { isValidScope, getValidScopes } from './validation';
+import type { ExternalScopeObject } from './types.js';
+import { isValidScope, getValidScopes } from './validation.js';
const validScopeString = 'eip155:1';
const validScopeObject: ExternalScopeObject = {
diff --git a/packages/chain-agnostic-permission/src/scope/validation.ts b/packages/chain-agnostic-permission/src/scope/validation.ts
index 53c0b231d59..2f8629c2c45 100644
--- a/packages/chain-agnostic-permission/src/scope/validation.ts
+++ b/packages/chain-agnostic-permission/src/scope/validation.ts
@@ -4,8 +4,8 @@ import type {
ExternalScopeString,
ExternalScopeObject,
ExternalScopesObject,
-} from './types';
-import { parseScopeString } from './types';
+} from './types.js';
+import { parseScopeString } from './types.js';
/**
* Validates a scope object according to the [CAIP-217](https://chainagnostic.org/CAIPs/caip-217) spec.
diff --git a/packages/chomp-api-service/jest.config.js b/packages/chomp-api-service/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/chomp-api-service/jest.config.js
+++ b/packages/chomp-api-service/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/chomp-api-service/package.json b/packages/chomp-api-service/package.json
index 8b2de092168..d6ee3807ebe 100644
--- a/packages/chomp-api-service/package.json
+++ b/packages/chomp-api-service/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/chomp-api-service",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/chomp-api-service",
@@ -62,7 +55,6 @@
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/chomp-api-service/src/chomp-api-service-method-action-types.ts b/packages/chomp-api-service/src/chomp-api-service-method-action-types.ts
index ba2e1c8c984..26c863b0d9b 100644
--- a/packages/chomp-api-service/src/chomp-api-service-method-action-types.ts
+++ b/packages/chomp-api-service/src/chomp-api-service-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { ChompApiService } from './chomp-api-service';
+import type { ChompApiService } from './chomp-api-service.js';
/**
* Associates an address with a CHOMP profile.
diff --git a/packages/chomp-api-service/src/chomp-api-service.test.ts b/packages/chomp-api-service/src/chomp-api-service.test.ts
index 1750ff5fecb..c80b6ba7b5c 100644
--- a/packages/chomp-api-service/src/chomp-api-service.test.ts
+++ b/packages/chomp-api-service/src/chomp-api-service.test.ts
@@ -7,8 +7,8 @@ import type {
} from '@metamask/messenger';
import nock from 'nock';
-import type { ChompApiServiceMessenger } from './chomp-api-service';
-import { ChompApiService } from './chomp-api-service';
+import type { ChompApiServiceMessenger } from './chomp-api-service.js';
+import { ChompApiService } from './chomp-api-service.js';
const BASE_URL = 'https://api.chomp.example.com';
const MOCK_TOKEN = 'mock-jwt-token';
diff --git a/packages/chomp-api-service/src/chomp-api-service.ts b/packages/chomp-api-service/src/chomp-api-service.ts
index 2e30d829763..a8d400c1bc5 100644
--- a/packages/chomp-api-service/src/chomp-api-service.ts
+++ b/packages/chomp-api-service/src/chomp-api-service.ts
@@ -29,7 +29,7 @@ import {
} from '@metamask/utils';
import type { QueryClientConfig } from '@tanstack/query-core';
-import type { ChompApiServiceMethodActions } from './chomp-api-service-method-action-types';
+import type { ChompApiServiceMethodActions } from './chomp-api-service-method-action-types.js';
import type {
AssociateAddressParams,
AssociateAddressResponse,
@@ -45,7 +45,7 @@ import type {
ServiceDetailsResponse,
VerifyDelegationParams,
VerifyDelegationResponse,
-} from './types';
+} from './types.js';
// === GENERAL ===
diff --git a/packages/chomp-api-service/src/index.ts b/packages/chomp-api-service/src/index.ts
index 72d6cc07f37..ab5b8faa26f 100644
--- a/packages/chomp-api-service/src/index.ts
+++ b/packages/chomp-api-service/src/index.ts
@@ -1,4 +1,4 @@
-export { ChompApiService } from './chomp-api-service';
+export { ChompApiService } from './chomp-api-service.js';
export type {
ChompApiServiceMessenger,
ChompApiServiceActions,
@@ -6,7 +6,7 @@ export type {
ChompApiServiceInvalidateQueriesAction,
ChompApiServiceCacheUpdatedEvent,
ChompApiServiceGranularCacheUpdatedEvent,
-} from './chomp-api-service';
+} from './chomp-api-service.js';
export type {
ChompApiServiceAssociateAddressAction,
ChompApiServiceGetAssociatedAddressesAction,
@@ -17,7 +17,7 @@ export type {
ChompApiServiceGetIntentsByAddressAction,
ChompApiServiceCreateWithdrawalAction,
ChompApiServiceGetServiceDetailsAction,
-} from './chomp-api-service-method-action-types';
+} from './chomp-api-service-method-action-types.js';
export type {
AccountUpgradeStatus,
AssociateAddressParams,
@@ -42,4 +42,4 @@ export type {
SignedDelegation,
VerifyDelegationParams,
VerifyDelegationResponse,
-} from './types';
+} from './types.js';
diff --git a/packages/claims-controller/jest.config.js b/packages/claims-controller/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/claims-controller/jest.config.js
+++ b/packages/claims-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/claims-controller/package.json b/packages/claims-controller/package.json
index aa74f3a0eb8..14137e19e6c 100644
--- a/packages/claims-controller/package.json
+++ b/packages/claims-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/claims-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/claims-controller",
@@ -64,7 +57,6 @@
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/claims-controller/src/ClaimsController-method-action-types.ts b/packages/claims-controller/src/ClaimsController-method-action-types.ts
index 6685cd3aedf..4cf63e746c7 100644
--- a/packages/claims-controller/src/ClaimsController-method-action-types.ts
+++ b/packages/claims-controller/src/ClaimsController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { ClaimsController } from './ClaimsController';
+import type { ClaimsController } from './ClaimsController.js';
/**
* Fetch the required configurations for the claims service.
diff --git a/packages/claims-controller/src/ClaimsController.test.ts b/packages/claims-controller/src/ClaimsController.test.ts
index 9b096d674e4..e4e1ab9dfbf 100644
--- a/packages/claims-controller/src/ClaimsController.test.ts
+++ b/packages/claims-controller/src/ClaimsController.test.ts
@@ -1,18 +1,18 @@
import { toHex } from '@metamask/controller-utils';
-import { createMockClaimsControllerMessenger } from '../tests/mocks/messenger';
-import type { WithControllerArgs } from '../tests/types';
+import { createMockClaimsControllerMessenger } from '../tests/mocks/messenger.js';
+import type { WithControllerArgs } from '../tests/types.js';
import {
ClaimsController,
getDefaultClaimsControllerState,
-} from './ClaimsController';
-import { ClaimsControllerErrorMessages, ClaimStatusEnum } from './constants';
+} from './ClaimsController.js';
+import { ClaimsControllerErrorMessages, ClaimStatusEnum } from './constants.js';
import type {
Claim,
ClaimDraft,
ClaimsConfigurationsResponse,
CreateClaimRequest,
-} from './types';
+} from './types.js';
const mockClaimServiceRequestHeaders = jest.fn();
const mockClaimServiceGetClaimsApiUrl = jest.fn();
diff --git a/packages/claims-controller/src/ClaimsController.ts b/packages/claims-controller/src/ClaimsController.ts
index f9ce5070afe..473fe3531ef 100644
--- a/packages/claims-controller/src/ClaimsController.ts
+++ b/packages/claims-controller/src/ClaimsController.ts
@@ -9,7 +9,7 @@ import type { KeyringControllerSignPersonalMessageAction } from '@metamask/keyri
import type { Messenger } from '@metamask/messenger';
import { bytesToHex, stringToBytes } from '@metamask/utils';
-import type { ClaimsControllerMethodActions } from './ClaimsController-method-action-types';
+import type { ClaimsControllerMethodActions } from './ClaimsController-method-action-types.js';
import type {
ClaimsServiceFetchClaimsConfigurationsAction,
ClaimsServiceGenerateMessageForClaimSignatureAction,
@@ -17,13 +17,13 @@ import type {
ClaimsServiceGetClaimsAction,
ClaimsServiceGetClaimsApiUrlAction,
ClaimsServiceGetRequestHeadersAction,
-} from './ClaimsService';
+} from './ClaimsService.js';
import {
ClaimsControllerErrorMessages,
CONTROLLER_NAME,
DEFAULT_CLAIMS_CONFIGURATIONS,
SERVICE_NAME,
-} from './constants';
+} from './constants.js';
import type {
Claim,
ClaimDraft,
@@ -31,7 +31,7 @@ import type {
ClaimsControllerState,
CreateClaimRequest,
SubmitClaimConfig,
-} from './types';
+} from './types.js';
export type ClaimsControllerGetStateAction = ControllerGetStateAction<
typeof CONTROLLER_NAME,
diff --git a/packages/claims-controller/src/ClaimsService.test.ts b/packages/claims-controller/src/ClaimsService.test.ts
index 83ddac4a3ec..e760a0a635b 100644
--- a/packages/claims-controller/src/ClaimsService.test.ts
+++ b/packages/claims-controller/src/ClaimsService.test.ts
@@ -1,17 +1,17 @@
-import { createMockClaimsServiceMessenger } from '../tests/mocks/messenger';
-import { ClaimsService } from './ClaimsService';
+import { createMockClaimsServiceMessenger } from '../tests/mocks/messenger.js';
+import { ClaimsService } from './ClaimsService.js';
import {
CLAIMS_API_URL_MAP,
ClaimsServiceErrorMessages,
ClaimStatusEnum,
Env,
-} from './constants';
+} from './constants.js';
import type {
Claim,
ClaimsConfigurationsResponse,
GenerateSignatureMessageResponse,
-} from './types';
-import { createSentryError } from './utils';
+} from './types.js';
+import { createSentryError } from './utils.js';
const mockAuthenticationControllerGetBearerToken = jest.fn();
const mockFetchFunction = jest.fn();
diff --git a/packages/claims-controller/src/ClaimsService.ts b/packages/claims-controller/src/ClaimsService.ts
index 8e09a1a50a0..209cbd92417 100644
--- a/packages/claims-controller/src/ClaimsService.ts
+++ b/packages/claims-controller/src/ClaimsService.ts
@@ -6,15 +6,15 @@ import {
CLAIMS_API_URL_MAP,
ClaimsServiceErrorMessages,
SERVICE_NAME,
-} from './constants';
-import type { Env } from './constants';
-import { createModuleLogger, projectLogger } from './logger';
+} from './constants.js';
+import type { Env } from './constants.js';
+import { createModuleLogger, projectLogger } from './logger.js';
import type {
Claim,
ClaimsConfigurationsResponse,
GenerateSignatureMessageResponse,
-} from './types';
-import { createSentryError, getErrorFromResponse } from './utils';
+} from './types.js';
+import { createSentryError, getErrorFromResponse } from './utils.js';
export type ClaimsServiceFetchClaimsConfigurationsAction = {
type: `${typeof SERVICE_NAME}:fetchClaimsConfigurations`;
diff --git a/packages/claims-controller/src/index.ts b/packages/claims-controller/src/index.ts
index 6675c21c470..5c33db2987b 100644
--- a/packages/claims-controller/src/index.ts
+++ b/packages/claims-controller/src/index.ts
@@ -1,14 +1,14 @@
export {
ClaimsController,
getDefaultClaimsControllerState,
-} from './ClaimsController';
+} from './ClaimsController.js';
export type {
ClaimsControllerGetStateAction,
ClaimsControllerActions,
ClaimsControllerStateChangeEvent,
ClaimsControllerMessenger,
-} from './ClaimsController';
+} from './ClaimsController.js';
export type {
ClaimsControllerFetchClaimsConfigurationsAction,
@@ -20,7 +20,7 @@ export type {
ClaimsControllerDeleteClaimDraftAction,
ClaimsControllerDeleteAllClaimDraftsAction,
ClaimsControllerClearStateAction,
-} from './ClaimsController-method-action-types';
+} from './ClaimsController-method-action-types.js';
export type {
Claim,
@@ -30,9 +30,9 @@ export type {
CreateClaimRequest,
SubmitClaimConfig,
ClaimDraft,
-} from './types';
+} from './types.js';
-export { ClaimsService } from './ClaimsService';
+export { ClaimsService } from './ClaimsService.js';
export type {
ClaimsServiceFetchClaimsConfigurationsAction,
@@ -43,7 +43,7 @@ export type {
ClaimsServiceGenerateMessageForClaimSignatureAction,
ClaimsServiceActions,
ClaimsServiceMessenger,
-} from './ClaimsService';
+} from './ClaimsService.js';
export {
ClaimStatusEnum,
@@ -52,4 +52,4 @@ export {
DEFAULT_CLAIMS_CONFIGURATIONS,
ClaimsServiceErrorMessages,
CLAIMS_API_URL_MAP,
-} from './constants';
+} from './constants.js';
diff --git a/packages/claims-controller/src/logger.ts b/packages/claims-controller/src/logger.ts
index 2a7fd152af5..a122df6b96c 100644
--- a/packages/claims-controller/src/logger.ts
+++ b/packages/claims-controller/src/logger.ts
@@ -1,6 +1,6 @@
import { createProjectLogger, createModuleLogger } from '@metamask/utils';
-import { CONTROLLER_NAME } from './constants';
+import { CONTROLLER_NAME } from './constants.js';
export const projectLogger = createProjectLogger(CONTROLLER_NAME);
diff --git a/packages/claims-controller/src/types.ts b/packages/claims-controller/src/types.ts
index 9eae8d3d4d0..9b03109d544 100644
--- a/packages/claims-controller/src/types.ts
+++ b/packages/claims-controller/src/types.ts
@@ -1,6 +1,6 @@
import type { Hex } from '@metamask/utils';
-import type { ClaimStatusEnum } from './constants';
+import type { ClaimStatusEnum } from './constants.js';
export type Attachment = {
publicUrl: string;
diff --git a/packages/claims-controller/src/utils.test.ts b/packages/claims-controller/src/utils.test.ts
index 7b4a58c363f..6013b070060 100644
--- a/packages/claims-controller/src/utils.test.ts
+++ b/packages/claims-controller/src/utils.test.ts
@@ -1,4 +1,4 @@
-import { getErrorFromResponse, createSentryError } from './utils';
+import { getErrorFromResponse, createSentryError } from './utils.js';
describe('getErrorFromResponse', () => {
it('returns error with message from JSON response', async () => {
diff --git a/packages/claims-controller/tests/mocks/messenger.ts b/packages/claims-controller/tests/mocks/messenger.ts
index 7836f5b52c1..7022016b65b 100644
--- a/packages/claims-controller/tests/mocks/messenger.ts
+++ b/packages/claims-controller/tests/mocks/messenger.ts
@@ -8,8 +8,8 @@ import type {
import type {
ClaimsServiceMessenger,
ClaimsControllerMessenger,
-} from '../../src';
-import { CONTROLLER_NAME, SERVICE_NAME } from '../../src/constants';
+} from '../../src.js';
+import { CONTROLLER_NAME, SERVICE_NAME } from '../../src/constants.js';
type AllShieldControllerActions = MessengerActions;
diff --git a/packages/claims-controller/tests/types.ts b/packages/claims-controller/tests/types.ts
index 2160c2b5da9..060136fbe67 100644
--- a/packages/claims-controller/tests/types.ts
+++ b/packages/claims-controller/tests/types.ts
@@ -2,9 +2,9 @@ import type {
ClaimsController,
ClaimsControllerMessenger,
ClaimsControllerOptions,
-} from '../src/ClaimsController';
-import type { ClaimsControllerState } from '../src/types';
-import type { RootControllerMessenger } from './mocks/messenger';
+} from '../src/ClaimsController.js';
+import type { ClaimsControllerState } from '../src/types.js';
+import type { RootControllerMessenger } from './mocks/messenger.js';
/**
* Helper function to create controller with options.
diff --git a/packages/client-controller/jest.config.js b/packages/client-controller/jest.config.js
index 9efbc1e7d1f..3fcf3b128cb 100644
--- a/packages/client-controller/jest.config.js
+++ b/packages/client-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
displayName,
coveragePathIgnorePatterns: [],
coverageThreshold: {
diff --git a/packages/client-controller/package.json b/packages/client-controller/package.json
index 04a30f94d35..935386a50b6 100644
--- a/packages/client-controller/package.json
+++ b/packages/client-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/client-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/client-controller",
@@ -60,7 +53,6 @@
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/client-controller/src/ClientController-method-action-types.ts b/packages/client-controller/src/ClientController-method-action-types.ts
index 966fc52fcdd..16932305f2d 100644
--- a/packages/client-controller/src/ClientController-method-action-types.ts
+++ b/packages/client-controller/src/ClientController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { ClientController } from './ClientController';
+import type { ClientController } from './ClientController.js';
/**
* Updates state with whether the MetaMask UI is open.
diff --git a/packages/client-controller/src/ClientController.test.ts b/packages/client-controller/src/ClientController.test.ts
index c7c7b7cf412..ffc378261c8 100644
--- a/packages/client-controller/src/ClientController.test.ts
+++ b/packages/client-controller/src/ClientController.test.ts
@@ -4,13 +4,13 @@ import type {
ClientControllerActions,
ClientControllerEvents,
ClientControllerMessenger,
-} from './ClientController';
+} from './ClientController.js';
import {
ClientController,
controllerName,
getDefaultClientControllerState,
-} from './ClientController';
-import { clientControllerSelectors } from './selectors';
+} from './ClientController.js';
+import { clientControllerSelectors } from './selectors.js';
describe('ClientController', () => {
type RootMessenger = Messenger<
diff --git a/packages/client-controller/src/ClientController.ts b/packages/client-controller/src/ClientController.ts
index 78553c1a990..507a4fd18f0 100644
--- a/packages/client-controller/src/ClientController.ts
+++ b/packages/client-controller/src/ClientController.ts
@@ -6,7 +6,7 @@ import type {
import { BaseController } from '@metamask/base-controller';
import type { Messenger } from '@metamask/messenger';
-import type { ClientControllerMethodActions } from './ClientController-method-action-types';
+import type { ClientControllerMethodActions } from './ClientController-method-action-types.js';
// === GENERAL ===
diff --git a/packages/client-controller/src/index.ts b/packages/client-controller/src/index.ts
index 8695331b716..86aa4d5f54c 100644
--- a/packages/client-controller/src/index.ts
+++ b/packages/client-controller/src/index.ts
@@ -1,8 +1,8 @@
export {
ClientController,
getDefaultClientControllerState,
-} from './ClientController';
-export { clientControllerSelectors } from './selectors';
+} from './ClientController.js';
+export { clientControllerSelectors } from './selectors.js';
export type {
ClientControllerState,
@@ -12,5 +12,5 @@ export type {
ClientControllerStateChangeEvent,
ClientControllerEvents,
ClientControllerMessenger,
-} from './ClientController';
-export type { ClientControllerSetUiOpenAction } from './ClientController-method-action-types';
+} from './ClientController.js';
+export type { ClientControllerSetUiOpenAction } from './ClientController-method-action-types.js';
diff --git a/packages/client-controller/src/selectors.ts b/packages/client-controller/src/selectors.ts
index a8cefc6c5a3..132152a782c 100644
--- a/packages/client-controller/src/selectors.ts
+++ b/packages/client-controller/src/selectors.ts
@@ -1,4 +1,4 @@
-import type { ClientControllerState } from './ClientController';
+import type { ClientControllerState } from './ClientController.js';
/**
* Selects whether the UI is currently open.
diff --git a/packages/client-utils/jest.config.js b/packages/client-utils/jest.config.js
index cf3a75978f1..613be281c62 100644
--- a/packages/client-utils/jest.config.js
+++ b/packages/client-utils/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/client-utils/package.json b/packages/client-utils/package.json
index 6da53027071..bd4ff1efecb 100644
--- a/packages/client-utils/package.json
+++ b/packages/client-utils/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/client-utils",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/client-utils",
@@ -65,7 +58,6 @@
"devDependencies": {
"@ethersproject/abi": "^5.7.0",
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/client-utils/src/index.ts b/packages/client-utils/src/index.ts
index fb31f08249c..141283712e1 100644
--- a/packages/client-utils/src/index.ts
+++ b/packages/client-utils/src/index.ts
@@ -1,5 +1,5 @@
-export { mapApiTransaction } from './mappers/api-transaction-mapper';
-export { mapKeyringTransaction } from './mappers/keyring-transaction-mapper';
-export { mapLocalTransaction } from './mappers/local-transaction-mapper';
+export { mapApiTransaction } from './mappers/api-transaction-mapper.js';
+export { mapKeyringTransaction } from './mappers/keyring-transaction-mapper.js';
+export { mapLocalTransaction } from './mappers/local-transaction-mapper.js';
-export type * from './types';
+export type * from './types.js';
diff --git a/packages/client-utils/src/mappers/api-transaction-mapper.test.ts b/packages/client-utils/src/mappers/api-transaction-mapper.test.ts
index 2869421cf1f..35ddc89fac8 100644
--- a/packages/client-utils/src/mappers/api-transaction-mapper.test.ts
+++ b/packages/client-utils/src/mappers/api-transaction-mapper.test.ts
@@ -1,6 +1,6 @@
-import { apiTransactionFixtures } from '../../test/fixtures/api-transactions';
-import { mapApiTransaction } from './api-transaction-mapper';
-import { formatAddressToAssetId } from './helpers/caip';
+import { apiTransactionFixtures } from '../../test/fixtures/api-transactions.js';
+import { mapApiTransaction } from './api-transaction-mapper.js';
+import { formatAddressToAssetId } from './helpers/caip.js';
// Mock known-token lookup with the deterministic test table in `test/`.
jest.mock('./helpers/token-metadata', () => ({
diff --git a/packages/client-utils/src/mappers/api-transaction-mapper.ts b/packages/client-utils/src/mappers/api-transaction-mapper.ts
index e18751b0e8c..16b2b87c41c 100644
--- a/packages/client-utils/src/mappers/api-transaction-mapper.ts
+++ b/packages/client-utils/src/mappers/api-transaction-mapper.ts
@@ -10,15 +10,15 @@ import type {
Status,
TokenAmount,
ValueTransfer,
-} from '../types';
+} from '../types.js';
import {
nativeTokenAddress,
supplyMethodIds,
swapsWrappedTokensAddresses,
withdrawMethodIds,
wrapMethodIds,
-} from './constants';
-import { formatAddressToAssetId, getNativeAsset } from './helpers/caip';
+} from './constants.js';
+import { formatAddressToAssetId, getNativeAsset } from './helpers/caip.js';
import {
getFees,
getNftPaymentTransfer,
@@ -26,7 +26,7 @@ import {
getTokenMetadataFromKnownToken,
parseValueTransfers,
withFallbackTokenAssetId,
-} from './helpers/transactions';
+} from './helpers/transactions.js';
/**
* Maps an indexed API transaction into the shared activity item shape.
diff --git a/packages/client-utils/src/mappers/helpers/caip.test.ts b/packages/client-utils/src/mappers/helpers/caip.test.ts
index 20209510707..67e7462787b 100644
--- a/packages/client-utils/src/mappers/helpers/caip.test.ts
+++ b/packages/client-utils/src/mappers/helpers/caip.test.ts
@@ -2,7 +2,7 @@ import {
formatAddressToAssetId,
formatChainIdToCaip,
getNativeAsset,
-} from './caip';
+} from './caip.js';
describe('caip helpers', () => {
describe('formatChainIdToCaip', () => {
diff --git a/packages/client-utils/src/mappers/helpers/caip.ts b/packages/client-utils/src/mappers/helpers/caip.ts
index 1f8a1c6d3ee..d0d0edc9085 100644
--- a/packages/client-utils/src/mappers/helpers/caip.ts
+++ b/packages/client-utils/src/mappers/helpers/caip.ts
@@ -7,7 +7,7 @@ import {
toCaipAssetType,
} from '@metamask/utils';
-import { nativeTokenAddress } from '../constants';
+import { nativeTokenAddress } from '../constants.js';
export type NativeAssetMetadata = {
symbol: string;
diff --git a/packages/client-utils/src/mappers/helpers/token-metadata.test.ts b/packages/client-utils/src/mappers/helpers/token-metadata.test.ts
index 0b324575773..f0d6cfe6989 100644
--- a/packages/client-utils/src/mappers/helpers/token-metadata.test.ts
+++ b/packages/client-utils/src/mappers/helpers/token-metadata.test.ts
@@ -1,4 +1,4 @@
-import { getKnownTokenMetadata } from './token-metadata';
+import { getKnownTokenMetadata } from './token-metadata.js';
describe('getKnownTokenMetadata', () => {
it('returns undefined when the contract address is missing', () => {
diff --git a/packages/client-utils/src/mappers/helpers/token-metadata.ts b/packages/client-utils/src/mappers/helpers/token-metadata.ts
index f4959967392..1bf72cefaba 100644
--- a/packages/client-utils/src/mappers/helpers/token-metadata.ts
+++ b/packages/client-utils/src/mappers/helpers/token-metadata.ts
@@ -2,7 +2,7 @@ import contractMap from '@metamask/contract-metadata';
import { toChecksumHexAddress } from '@metamask/controller-utils';
import type { CaipChainId, Hex } from '@metamask/utils';
-import { formatAddressToAssetId } from './caip';
+import { formatAddressToAssetId } from './caip.js';
export type KnownTokenMetadata = {
symbol?: string;
diff --git a/packages/client-utils/src/mappers/helpers/transactions.test.ts b/packages/client-utils/src/mappers/helpers/transactions.test.ts
index 3127f194596..27e69a2277d 100644
--- a/packages/client-utils/src/mappers/helpers/transactions.test.ts
+++ b/packages/client-utils/src/mappers/helpers/transactions.test.ts
@@ -1,4 +1,4 @@
-import * as tokenMetadata from './token-metadata';
+import * as tokenMetadata from './token-metadata.js';
import {
getFees,
getLocalTransactionFees,
@@ -9,7 +9,7 @@ import {
isNftStandard,
parseValueTransfers,
withFallbackTokenAssetId,
-} from './transactions';
+} from './transactions.js';
describe('transaction helpers', () => {
afterEach(() => {
diff --git a/packages/client-utils/src/mappers/helpers/transactions.ts b/packages/client-utils/src/mappers/helpers/transactions.ts
index 332ce98092d..4f1df467292 100644
--- a/packages/client-utils/src/mappers/helpers/transactions.ts
+++ b/packages/client-utils/src/mappers/helpers/transactions.ts
@@ -11,10 +11,10 @@ import {
} from '@metamask/transaction-controller';
import type { CaipChainId, Hex } from '@metamask/utils';
-import type { Fee, Status, TokenAmount, ValueTransfer } from '../../types';
-import { nativeTokenAddress } from '../constants';
-import { formatAddressToAssetId, getNativeAsset } from './caip';
-import { getKnownTokenMetadata } from './token-metadata';
+import type { Fee, Status, TokenAmount, ValueTransfer } from '../../types.js';
+import { nativeTokenAddress } from '../constants.js';
+import { formatAddressToAssetId, getNativeAsset } from './caip.js';
+import { getKnownTokenMetadata } from './token-metadata.js';
// Adds optional `isSmartTransaction` to `TransactionMeta`.
export type TransactionGroup = {
@@ -326,7 +326,7 @@ export function getTokenAmountFromTransfer(
const { transferType, amount } = transfer;
const isNftTransfer = isNftStandard(transferType);
const symbol = isNftTransfer
- ? transfer.name || transfer.symbol
+ ? (transfer.name ?? transfer.symbol)
: transfer.symbol;
if (!symbol && amount === undefined) {
diff --git a/packages/client-utils/src/mappers/keyring-transaction-mapper.test.ts b/packages/client-utils/src/mappers/keyring-transaction-mapper.test.ts
index e1902a92d01..d6624ffef73 100644
--- a/packages/client-utils/src/mappers/keyring-transaction-mapper.test.ts
+++ b/packages/client-utils/src/mappers/keyring-transaction-mapper.test.ts
@@ -1,7 +1,7 @@
import { SolScope } from '@metamask/keyring-api';
-import { keyringTransactionFixtures } from '../../test/fixtures/keyring-transactions';
-import { mapKeyringTransaction } from './keyring-transaction-mapper';
+import { keyringTransactionFixtures } from '../../test/fixtures/keyring-transactions.js';
+import { mapKeyringTransaction } from './keyring-transaction-mapper.js';
describe('mapKeyringTransaction', () => {
it('maps keyring send transactions with token amount data', () => {
diff --git a/packages/client-utils/src/mappers/keyring-transaction-mapper.ts b/packages/client-utils/src/mappers/keyring-transaction-mapper.ts
index 789f31fe73a..84edd2da9e4 100644
--- a/packages/client-utils/src/mappers/keyring-transaction-mapper.ts
+++ b/packages/client-utils/src/mappers/keyring-transaction-mapper.ts
@@ -4,7 +4,7 @@ import {
TransactionType as KeyringTransactionType,
} from '@metamask/keyring-api';
-import type { Fee, ActivityItem, Status, TokenAmount } from '../types';
+import type { Fee, ActivityItem, Status, TokenAmount } from '../types.js';
type Movement = KeyringTransaction['from'][number];
type KeyringFee = KeyringTransaction['fees'][number];
diff --git a/packages/client-utils/src/mappers/local-transaction-mapper.test.ts b/packages/client-utils/src/mappers/local-transaction-mapper.test.ts
index 2888cef1e69..bcbbec1dad0 100644
--- a/packages/client-utils/src/mappers/local-transaction-mapper.test.ts
+++ b/packages/client-utils/src/mappers/local-transaction-mapper.test.ts
@@ -1,6 +1,6 @@
-import { localTransactionFixtures } from '../../test/fixtures/local-transactions';
-import { formatAddressToAssetId } from './helpers/caip';
-import { mapLocalTransaction } from './local-transaction-mapper';
+import { localTransactionFixtures } from '../../test/fixtures/local-transactions.js';
+import { formatAddressToAssetId } from './helpers/caip.js';
+import { mapLocalTransaction } from './local-transaction-mapper.js';
jest.mock('./helpers/token-metadata', () => ({
getKnownTokenMetadata: jest.requireActual('../../test/test-helpers')
diff --git a/packages/client-utils/src/mappers/local-transaction-mapper.ts b/packages/client-utils/src/mappers/local-transaction-mapper.ts
index 16789381040..ff219ec64f0 100644
--- a/packages/client-utils/src/mappers/local-transaction-mapper.ts
+++ b/packages/client-utils/src/mappers/local-transaction-mapper.ts
@@ -2,7 +2,7 @@ import { isEqualCaseInsensitive as equalsIgnoreCase } from '@metamask/controller
import { TransactionType } from '@metamask/transaction-controller';
import { KnownCaipNamespace, toCaipChainId } from '@metamask/utils';
-import type { Fee, ActivityItem, TokenAmount } from '../types';
+import type { Fee, ActivityItem, TokenAmount } from '../types.js';
import {
permit2ApproveMethodId,
swapsWrappedTokensAddresses,
@@ -11,15 +11,15 @@ import {
unwrapMethodIds,
withdrawMethodIds,
wrapMethodIds,
-} from './constants';
-import { formatAddressToAssetId, getNativeAsset } from './helpers/caip';
-import { getKnownTokenMetadata } from './helpers/token-metadata';
+} from './constants.js';
+import { formatAddressToAssetId, getNativeAsset } from './helpers/caip.js';
+import { getKnownTokenMetadata } from './helpers/token-metadata.js';
import {
getLocalTransactionFees,
getLocalTransactionStatus,
isNftStandard,
-} from './helpers/transactions';
-import type { TransactionGroup } from './helpers/transactions';
+} from './helpers/transactions.js';
+import type { TransactionGroup } from './helpers/transactions.js';
const evmNativeDecimals = 18;
@@ -63,7 +63,7 @@ export function mapLocalTransaction(
const isPermit2Approve = methodId === permit2ApproveMethodId;
const tokenContractAddress = isPermit2Approve
? undefined
- : (transferInformation?.contractAddress ?? (to || undefined));
+ : (transferInformation?.contractAddress ?? to ?? undefined);
const chainId = toCaipChainId(
KnownCaipNamespace.Eip155,
Number.parseInt(initialTransaction.chainId, 16).toString(),
diff --git a/packages/client-utils/test/fixtures/keyring-transactions.ts b/packages/client-utils/test/fixtures/keyring-transactions.ts
index d9bc457b2ed..d79a1ac9a39 100644
--- a/packages/client-utils/test/fixtures/keyring-transactions.ts
+++ b/packages/client-utils/test/fixtures/keyring-transactions.ts
@@ -5,7 +5,7 @@ import {
TransactionType,
} from '@metamask/keyring-api';
-import { CustomTransactionTypeLabel } from '../../src/mappers/keyring-transaction-mapper';
+import { CustomTransactionTypeLabel } from '../../src/mappers/keyring-transaction-mapper.js';
const accountId = '00000000-0000-4000-8000-000000000000';
const stellarUsdcAsset = `stellar:pubnet/asset:USDC-GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN`;
diff --git a/packages/client-utils/test/fixtures/local-transactions.ts b/packages/client-utils/test/fixtures/local-transactions.ts
index 6de26dc2975..5204ac25429 100644
--- a/packages/client-utils/test/fixtures/local-transactions.ts
+++ b/packages/client-utils/test/fixtures/local-transactions.ts
@@ -3,12 +3,12 @@ import {
TransactionType,
} from '@metamask/transaction-controller';
-import { formatAddressToAssetId } from '../../src/mappers/helpers/caip';
+import { formatAddressToAssetId } from '../../src/mappers/helpers/caip.js';
import {
buildApproveTransactionData,
buildPermit2ApproveTransactionData,
encodeMerklClaimCalldata,
-} from '../test-helpers';
+} from '../test-helpers.js';
const chainIds = {
mainnet: '0x1',
diff --git a/packages/client-utils/test/test-helpers.ts b/packages/client-utils/test/test-helpers.ts
index 0f43a700217..49c1095b1dc 100644
--- a/packages/client-utils/test/test-helpers.ts
+++ b/packages/client-utils/test/test-helpers.ts
@@ -1,8 +1,8 @@
import { Interface } from '@ethersproject/abi';
import type { CaipChainId, Hex } from '@metamask/utils';
-import { formatAddressToAssetId } from '../src/mappers/helpers/caip';
-import type { KnownTokenMetadata } from '../src/mappers/helpers/token-metadata';
+import { formatAddressToAssetId } from '../src/mappers/helpers/caip.js';
+import type { KnownTokenMetadata } from '../src/mappers/helpers/token-metadata.js';
const knownTokens: Record<
string,
diff --git a/packages/compliance-controller/jest.config.js b/packages/compliance-controller/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/compliance-controller/jest.config.js
+++ b/packages/compliance-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/compliance-controller/package.json b/packages/compliance-controller/package.json
index 00b600c426e..9f5255e2700 100644
--- a/packages/compliance-controller/package.json
+++ b/packages/compliance-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/compliance-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/compliance-controller",
@@ -63,8 +56,8 @@
"reselect": "^5.1.1"
},
"devDependencies": {
+ "@jest/globals": "^30.4.1",
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/compliance-controller/src/ComplianceController-method-action-types.ts b/packages/compliance-controller/src/ComplianceController-method-action-types.ts
index 602222842ff..78e9fd43062 100644
--- a/packages/compliance-controller/src/ComplianceController-method-action-types.ts
+++ b/packages/compliance-controller/src/ComplianceController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { ComplianceController } from './ComplianceController';
+import type { ComplianceController } from './ComplianceController.js';
/**
* Checks compliance status for a single wallet address via the API and
diff --git a/packages/compliance-controller/src/ComplianceController.test.ts b/packages/compliance-controller/src/ComplianceController.test.ts
index 96e7d9d9509..35378071832 100644
--- a/packages/compliance-controller/src/ComplianceController.test.ts
+++ b/packages/compliance-controller/src/ComplianceController.test.ts
@@ -1,3 +1,4 @@
+import { jest } from '@jest/globals';
import { deriveStateFromMetadata } from '@metamask/base-controller';
import { toChecksumHexAddress } from '@metamask/controller-utils';
import { Messenger, MOCK_ANY_NAMESPACE } from '@metamask/messenger';
@@ -7,9 +8,12 @@ import type {
MessengerEvents,
} from '@metamask/messenger';
-import { ComplianceController } from './ComplianceController';
-import type { ComplianceControllerMessenger } from './ComplianceController';
-import { selectAreAnyWalletsBlocked, selectIsWalletBlocked } from './selectors';
+import { ComplianceController } from './ComplianceController.js';
+import type { ComplianceControllerMessenger } from './ComplianceController.js';
+import {
+ selectAreAnyWalletsBlocked,
+ selectIsWalletBlocked,
+} from './selectors.js';
const LOWERCASE_EVM_ADDRESS = '0x4e1ff7229bddaf0a73df183a88d9c3a04cc975e0';
const CHECKSUM_EVM_ADDRESS = toChecksumHexAddress(LOWERCASE_EVM_ADDRESS);
diff --git a/packages/compliance-controller/src/ComplianceController.ts b/packages/compliance-controller/src/ComplianceController.ts
index 4611b29f361..720441dde30 100644
--- a/packages/compliance-controller/src/ComplianceController.ts
+++ b/packages/compliance-controller/src/ComplianceController.ts
@@ -6,13 +6,13 @@ import type {
import { BaseController } from '@metamask/base-controller';
import type { Messenger } from '@metamask/messenger';
-import type { ComplianceControllerMethodActions } from './ComplianceController-method-action-types';
+import type { ComplianceControllerMethodActions } from './ComplianceController-method-action-types.js';
import type {
ComplianceServiceCheckWalletComplianceAction,
ComplianceServiceCheckWalletsComplianceAction,
-} from './ComplianceService-method-action-types';
-import type { WalletComplianceStatus } from './types';
-import { getWalletComplianceStatus } from './utils';
+} from './ComplianceService-method-action-types.js';
+import type { WalletComplianceStatus } from './types.js';
+import { getWalletComplianceStatus } from './utils.js';
// === GENERAL ===
diff --git a/packages/compliance-controller/src/ComplianceService-method-action-types.ts b/packages/compliance-controller/src/ComplianceService-method-action-types.ts
index 602eee5b8fd..72948599d51 100644
--- a/packages/compliance-controller/src/ComplianceService-method-action-types.ts
+++ b/packages/compliance-controller/src/ComplianceService-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { ComplianceService } from './ComplianceService';
+import type { ComplianceService } from './ComplianceService.js';
/**
* Checks compliance status for a single wallet address.
diff --git a/packages/compliance-controller/src/ComplianceService.test.ts b/packages/compliance-controller/src/ComplianceService.test.ts
index 269d24d9587..8848610312e 100644
--- a/packages/compliance-controller/src/ComplianceService.test.ts
+++ b/packages/compliance-controller/src/ComplianceService.test.ts
@@ -1,3 +1,4 @@
+import { jest } from '@jest/globals';
import { HttpError } from '@metamask/controller-utils';
import { Messenger, MOCK_ANY_NAMESPACE } from '@metamask/messenger';
import type {
@@ -7,8 +8,8 @@ import type {
} from '@metamask/messenger';
import nock from 'nock';
-import type { ComplianceServiceMessenger } from './ComplianceService';
-import { ComplianceService } from './ComplianceService';
+import type { ComplianceServiceMessenger } from './ComplianceService.js';
+import { ComplianceService } from './ComplianceService.js';
const MOCK_API_URL = 'https://compliance.dev-api.cx.metamask.io';
const MOCK_PRODUCTION_API_URL = 'https://compliance.api.cx.metamask.io';
diff --git a/packages/compliance-controller/src/ComplianceService.ts b/packages/compliance-controller/src/ComplianceService.ts
index 91fd92dece2..473da277132 100644
--- a/packages/compliance-controller/src/ComplianceService.ts
+++ b/packages/compliance-controller/src/ComplianceService.ts
@@ -8,7 +8,7 @@ import type { Infer } from '@metamask/superstruct';
import { array, boolean, object, string } from '@metamask/superstruct';
import type { IDisposable } from 'cockatiel';
-import type { ComplianceServiceMethodActions } from './ComplianceService-method-action-types';
+import type { ComplianceServiceMethodActions } from './ComplianceService-method-action-types.js';
// === GENERAL ===
diff --git a/packages/compliance-controller/src/index.ts b/packages/compliance-controller/src/index.ts
index fa6d2463e91..c28a9c5e41e 100644
--- a/packages/compliance-controller/src/index.ts
+++ b/packages/compliance-controller/src/index.ts
@@ -4,12 +4,12 @@ export type {
ComplianceServiceEvents,
ComplianceServiceMessenger,
ComplianceServiceOptions,
-} from './ComplianceService';
+} from './ComplianceService.js';
export type {
ComplianceServiceCheckWalletComplianceAction,
ComplianceServiceCheckWalletsComplianceAction,
-} from './ComplianceService-method-action-types';
-export { ComplianceService } from './ComplianceService';
+} from './ComplianceService-method-action-types.js';
+export { ComplianceService } from './ComplianceService.js';
export type {
ComplianceControllerActions,
ComplianceControllerEvents,
@@ -17,15 +17,18 @@ export type {
ComplianceControllerMessenger,
ComplianceControllerState,
ComplianceControllerStateChangeEvent,
-} from './ComplianceController';
+} from './ComplianceController.js';
export type {
ComplianceControllerCheckWalletComplianceAction,
ComplianceControllerCheckWalletsComplianceAction,
ComplianceControllerClearComplianceStateAction,
-} from './ComplianceController-method-action-types';
+} from './ComplianceController-method-action-types.js';
export {
ComplianceController,
getDefaultComplianceControllerState,
-} from './ComplianceController';
-export { selectAreAnyWalletsBlocked, selectIsWalletBlocked } from './selectors';
-export type { WalletComplianceStatus } from './types';
+} from './ComplianceController.js';
+export {
+ selectAreAnyWalletsBlocked,
+ selectIsWalletBlocked,
+} from './selectors.js';
+export type { WalletComplianceStatus } from './types.js';
diff --git a/packages/compliance-controller/src/selectors.ts b/packages/compliance-controller/src/selectors.ts
index 1e8f6a4bd7a..5d5660535ed 100644
--- a/packages/compliance-controller/src/selectors.ts
+++ b/packages/compliance-controller/src/selectors.ts
@@ -1,7 +1,7 @@
import { createSelector } from 'reselect';
-import type { ComplianceControllerState } from './ComplianceController';
-import { getWalletComplianceStatus } from './utils';
+import type { ComplianceControllerState } from './ComplianceController.js';
+import { getWalletComplianceStatus } from './utils.js';
const selectWalletComplianceStatusMap = (
state: ComplianceControllerState,
diff --git a/packages/compliance-controller/src/utils.ts b/packages/compliance-controller/src/utils.ts
index cdafbcc289e..cfc996186c0 100644
--- a/packages/compliance-controller/src/utils.ts
+++ b/packages/compliance-controller/src/utils.ts
@@ -3,7 +3,7 @@ import {
isValidHexAddress,
} from '@metamask/controller-utils';
-import type { WalletComplianceStatus } from './types';
+import type { WalletComplianceStatus } from './types.js';
export const getWalletComplianceStatus = (
statusMap: Record,
diff --git a/packages/composable-controller/jest.config.js b/packages/composable-controller/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/composable-controller/jest.config.js
+++ b/packages/composable-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/composable-controller/package.json b/packages/composable-controller/package.json
index 1d934351e4b..d959517e6d1 100644
--- a/packages/composable-controller/package.json
+++ b/packages/composable-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/composable-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/composable-controller",
@@ -57,9 +50,9 @@
"@metamask/messenger": "^2.0.0"
},
"devDependencies": {
+ "@jest/globals": "^30.4.1",
"@metamask/auto-changelog": "^6.1.0",
"@metamask/json-rpc-engine": "^10.5.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"immer": "^9.0.6",
diff --git a/packages/composable-controller/src/ComposableController.test.ts b/packages/composable-controller/src/ComposableController.test.ts
index fccf473b871..0aef9eca4e5 100644
--- a/packages/composable-controller/src/ComposableController.test.ts
+++ b/packages/composable-controller/src/ComposableController.test.ts
@@ -1,3 +1,4 @@
+import { jest } from '@jest/globals';
import {
BaseController,
deriveStateFromMetadata,
@@ -20,11 +21,11 @@ import type {
ChildControllerStateChangeEvents,
ComposableControllerActions,
ComposableControllerEvents,
-} from './ComposableController';
+} from './ComposableController.js';
import {
ComposableController,
INVALID_CONTROLLER_ERROR,
-} from './ComposableController';
+} from './ComposableController.js';
// Mock BaseController classes
diff --git a/packages/composable-controller/src/index.ts b/packages/composable-controller/src/index.ts
index 8a0b5f5da2f..6d2000e7113 100644
--- a/packages/composable-controller/src/index.ts
+++ b/packages/composable-controller/src/index.ts
@@ -3,5 +3,5 @@ export type {
ComposableControllerStateChangeEvent,
ComposableControllerEvents,
ComposableControllerMessenger,
-} from './ComposableController';
-export { ComposableController } from './ComposableController';
+} from './ComposableController.js';
+export { ComposableController } from './ComposableController.js';
diff --git a/packages/config-registry-controller/jest.config.js b/packages/config-registry-controller/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/config-registry-controller/jest.config.js
+++ b/packages/config-registry-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/config-registry-controller/package.json b/packages/config-registry-controller/package.json
index d1f41b7c66d..0051211b89d 100644
--- a/packages/config-registry-controller/package.json
+++ b/packages/config-registry-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/config-registry-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/config-registry-controller",
@@ -70,7 +63,6 @@
"devDependencies": {
"@lavamoat/allow-scripts": "^3.0.4",
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/config-registry-controller/src/ConfigRegistryController-method-action-types.ts b/packages/config-registry-controller/src/ConfigRegistryController-method-action-types.ts
index e40a2bce2fc..4415001e537 100644
--- a/packages/config-registry-controller/src/ConfigRegistryController-method-action-types.ts
+++ b/packages/config-registry-controller/src/ConfigRegistryController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { ConfigRegistryController } from './ConfigRegistryController';
+import type { ConfigRegistryController } from './ConfigRegistryController.js';
/**
* Stop all polling.
diff --git a/packages/config-registry-controller/src/ConfigRegistryController.test.ts b/packages/config-registry-controller/src/ConfigRegistryController.test.ts
index c15fed9cf2b..12c5dbb0f23 100644
--- a/packages/config-registry-controller/src/ConfigRegistryController.test.ts
+++ b/packages/config-registry-controller/src/ConfigRegistryController.test.ts
@@ -5,15 +5,15 @@ import type {
} from '@metamask/messenger';
import { Messenger, MOCK_ANY_NAMESPACE } from '@metamask/messenger';
-import { createMockNetworkConfig } from '../tests/helpers';
-import type { RegistryNetworkConfig } from './config-registry-api-service/types';
-import type { FetchConfigResult } from './config-registry-api-service/types';
-import type { ConfigRegistryControllerMessenger } from './ConfigRegistryController';
+import { createMockNetworkConfig } from '../tests/helpers.js';
+import type { RegistryNetworkConfig } from './config-registry-api-service/types.js';
+import type { FetchConfigResult } from './config-registry-api-service/types.js';
+import type { ConfigRegistryControllerMessenger } from './ConfigRegistryController.js';
import {
ConfigRegistryController,
DEFAULT_POLLING_INTERVAL,
-} from './ConfigRegistryController';
-import { selectFeaturedNetworks, selectNetworks } from './selectors';
+} from './ConfigRegistryController.js';
+import { selectFeaturedNetworks, selectNetworks } from './selectors.js';
const namespace = 'ConfigRegistryController' as const;
diff --git a/packages/config-registry-controller/src/ConfigRegistryController.ts b/packages/config-registry-controller/src/ConfigRegistryController.ts
index f1be853dfcb..2d5e5ec2f56 100644
--- a/packages/config-registry-controller/src/ConfigRegistryController.ts
+++ b/packages/config-registry-controller/src/ConfigRegistryController.ts
@@ -14,9 +14,9 @@ import type { RemoteFeatureFlagControllerGetStateAction } from '@metamask/remote
import type { RemoteFeatureFlagControllerStateChangeEvent } from '@metamask/remote-feature-flag-controller';
import { Duration, inMilliseconds, Json } from '@metamask/utils';
-import type { ConfigRegistryApiServiceFetchConfigAction } from './config-registry-api-service/config-registry-api-service-method-action-types';
-import type { RegistryNetworkConfig } from './config-registry-api-service/types';
-import type { ConfigRegistryControllerMethodActions } from './ConfigRegistryController-method-action-types';
+import type { ConfigRegistryApiServiceFetchConfigAction } from './config-registry-api-service/config-registry-api-service-method-action-types.js';
+import type { RegistryNetworkConfig } from './config-registry-api-service/types.js';
+import type { ConfigRegistryControllerMethodActions } from './ConfigRegistryController-method-action-types.js';
const controllerName = 'ConfigRegistryController';
diff --git a/packages/config-registry-controller/src/config-registry-api-service/config-registry-api-service-method-action-types.ts b/packages/config-registry-controller/src/config-registry-api-service/config-registry-api-service-method-action-types.ts
index 5bdba1c73df..5f2f15c4025 100644
--- a/packages/config-registry-controller/src/config-registry-api-service/config-registry-api-service-method-action-types.ts
+++ b/packages/config-registry-controller/src/config-registry-api-service/config-registry-api-service-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { ConfigRegistryApiService } from './config-registry-api-service';
+import type { ConfigRegistryApiService } from './config-registry-api-service.js';
export type ConfigRegistryApiServiceFetchConfigAction = {
type: `ConfigRegistryApiService:fetchConfig`;
diff --git a/packages/config-registry-controller/src/config-registry-api-service/config-registry-api-service.test.ts b/packages/config-registry-controller/src/config-registry-api-service/config-registry-api-service.test.ts
index fa3c1a5027b..efcdf648bfc 100644
--- a/packages/config-registry-controller/src/config-registry-api-service/config-registry-api-service.test.ts
+++ b/packages/config-registry-controller/src/config-registry-api-service/config-registry-api-service.test.ts
@@ -1,13 +1,13 @@
import { SDK } from '@metamask/profile-sync-controller';
import nock from 'nock';
-import { createMockNetworkConfig } from '../../tests/helpers';
-import { ConfigRegistryApiService } from './config-registry-api-service';
+import { createMockNetworkConfig } from '../../tests/helpers.js';
+import { ConfigRegistryApiService } from './config-registry-api-service.js';
import type {
ConfigRegistryApiServiceMessenger,
ConfigRegistryApiServiceOptions,
-} from './config-registry-api-service';
-import type { RegistryConfigApiResponse } from './types';
+} from './config-registry-api-service.js';
+import type { RegistryConfigApiResponse } from './types.js';
function createMockServiceMessenger(): ConfigRegistryApiServiceMessenger {
return {
diff --git a/packages/config-registry-controller/src/config-registry-api-service/config-registry-api-service.ts b/packages/config-registry-controller/src/config-registry-api-service/config-registry-api-service.ts
index b023e2bdb42..1c8767ec9f0 100644
--- a/packages/config-registry-controller/src/config-registry-api-service/config-registry-api-service.ts
+++ b/packages/config-registry-controller/src/config-registry-api-service/config-registry-api-service.ts
@@ -7,13 +7,13 @@ import type { Messenger } from '@metamask/messenger';
import { SDK } from '@metamask/profile-sync-controller';
import type { IDisposable } from 'cockatiel';
-import type { ConfigRegistryApiServiceMethodActions } from './config-registry-api-service-method-action-types';
+import type { ConfigRegistryApiServiceMethodActions } from './config-registry-api-service-method-action-types.js';
import type {
FetchConfigOptions,
FetchConfigResult,
RegistryConfigApiResponse,
-} from './types';
-import { validateRegistryConfigApiResponse } from './types';
+} from './types.js';
+import { validateRegistryConfigApiResponse } from './types.js';
const ENDPOINT_PATH = '/config/networks';
diff --git a/packages/config-registry-controller/src/config-registry-api-service/filters.test.ts b/packages/config-registry-controller/src/config-registry-api-service/filters.test.ts
index a9a15e14514..b81120efd16 100644
--- a/packages/config-registry-controller/src/config-registry-api-service/filters.test.ts
+++ b/packages/config-registry-controller/src/config-registry-api-service/filters.test.ts
@@ -1,6 +1,6 @@
-import { createMockNetworkConfig } from '../../tests/helpers';
-import { filterNetworks } from './filters';
-import type { RegistryNetworkConfig } from './types';
+import { createMockNetworkConfig } from '../../tests/helpers.js';
+import { filterNetworks } from './filters.js';
+import type { RegistryNetworkConfig } from './types.js';
describe('filters', () => {
describe('filterNetworks', () => {
diff --git a/packages/config-registry-controller/src/config-registry-api-service/filters.ts b/packages/config-registry-controller/src/config-registry-api-service/filters.ts
index 0827d6ad65d..e0add5261f0 100644
--- a/packages/config-registry-controller/src/config-registry-api-service/filters.ts
+++ b/packages/config-registry-controller/src/config-registry-api-service/filters.ts
@@ -1,4 +1,4 @@
-import type { RegistryNetworkConfig } from './types';
+import type { RegistryNetworkConfig } from './types.js';
export type NetworkFilterOptions = {
isFeatured?: boolean;
diff --git a/packages/config-registry-controller/src/index.ts b/packages/config-registry-controller/src/index.ts
index 1c650078617..bcc085962d1 100644
--- a/packages/config-registry-controller/src/index.ts
+++ b/packages/config-registry-controller/src/index.ts
@@ -6,33 +6,33 @@ export type {
ConfigRegistryControllerEvents,
ConfigRegistryControllerStateChangeEvent,
ConfigRegistryControllerMessenger,
-} from './ConfigRegistryController';
+} from './ConfigRegistryController.js';
export type {
ConfigRegistryControllerStartPollingAction,
ConfigRegistryControllerStopPollingAction,
ConfigRegistryControllerMethodActions,
-} from './ConfigRegistryController-method-action-types';
+} from './ConfigRegistryController-method-action-types.js';
export {
ConfigRegistryController,
DEFAULT_POLLING_INTERVAL,
-} from './ConfigRegistryController';
-export { selectFeaturedNetworks, selectNetworks } from './selectors';
+} from './ConfigRegistryController.js';
+export { selectFeaturedNetworks, selectNetworks } from './selectors.js';
export type {
FetchConfigOptions,
FetchConfigResult,
RegistryNetworkConfig,
RegistryConfigApiResponse,
-} from './config-registry-api-service/types';
+} from './config-registry-api-service/types.js';
export type {
ConfigRegistryApiServiceOptions,
ConfigRegistryApiServiceActions,
ConfigRegistryApiServiceEvents,
ConfigRegistryApiServiceMessenger,
-} from './config-registry-api-service/config-registry-api-service';
+} from './config-registry-api-service/config-registry-api-service.js';
export type {
ConfigRegistryApiServiceFetchConfigAction,
ConfigRegistryApiServiceMethodActions,
-} from './config-registry-api-service/config-registry-api-service-method-action-types';
-export type { NetworkFilterOptions } from './config-registry-api-service/filters';
-export { ConfigRegistryApiService } from './config-registry-api-service/config-registry-api-service';
-export { filterNetworks } from './config-registry-api-service/filters';
+} from './config-registry-api-service/config-registry-api-service-method-action-types.js';
+export type { NetworkFilterOptions } from './config-registry-api-service/filters.js';
+export { ConfigRegistryApiService } from './config-registry-api-service/config-registry-api-service.js';
+export { filterNetworks } from './config-registry-api-service/filters.js';
diff --git a/packages/config-registry-controller/src/selectors.test.ts b/packages/config-registry-controller/src/selectors.test.ts
index fe7b6e6a7cf..1120c15eb55 100644
--- a/packages/config-registry-controller/src/selectors.test.ts
+++ b/packages/config-registry-controller/src/selectors.test.ts
@@ -1,5 +1,5 @@
-import { createMockNetworkConfig } from '../tests/helpers';
-import { selectFeaturedNetworks, selectNetworks } from './selectors';
+import { createMockNetworkConfig } from '../tests/helpers.js';
+import { selectFeaturedNetworks, selectNetworks } from './selectors.js';
describe('selectors', () => {
describe('selectNetworks', () => {
diff --git a/packages/config-registry-controller/src/selectors.ts b/packages/config-registry-controller/src/selectors.ts
index 7d44c486a59..5c8c608dd33 100644
--- a/packages/config-registry-controller/src/selectors.ts
+++ b/packages/config-registry-controller/src/selectors.ts
@@ -1,8 +1,8 @@
import { createSelector } from 'reselect';
-import { filterNetworks } from './config-registry-api-service/filters';
-import type { RegistryNetworkConfig } from './config-registry-api-service/types';
-import type { ConfigRegistryControllerState } from './ConfigRegistryController';
+import { filterNetworks } from './config-registry-api-service/filters.js';
+import type { RegistryNetworkConfig } from './config-registry-api-service/types.js';
+import type { ConfigRegistryControllerState } from './ConfigRegistryController.js';
/**
* Base selector to get all networks from the controller state.
diff --git a/packages/config-registry-controller/tests/helpers.ts b/packages/config-registry-controller/tests/helpers.ts
index a096f0e9143..38e9544d46c 100644
--- a/packages/config-registry-controller/tests/helpers.ts
+++ b/packages/config-registry-controller/tests/helpers.ts
@@ -1,4 +1,4 @@
-import type { RegistryNetworkConfig } from '../src/config-registry-api-service/types';
+import type { RegistryNetworkConfig } from '../src/config-registry-api-service/types.js';
/**
* Creates a mock RegistryNetworkConfig (CAIP-2 chain) for testing.
diff --git a/packages/connectivity-controller/jest.config.js b/packages/connectivity-controller/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/connectivity-controller/jest.config.js
+++ b/packages/connectivity-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/connectivity-controller/package.json b/packages/connectivity-controller/package.json
index 572ed638b63..acff6d0d06e 100644
--- a/packages/connectivity-controller/package.json
+++ b/packages/connectivity-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/connectivity-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/connectivity-controller",
@@ -60,8 +53,8 @@
"reselect": "^5.1.1"
},
"devDependencies": {
+ "@jest/globals": "^30.4.1",
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/connectivity-controller/src/ConnectivityController-method-action-types.ts b/packages/connectivity-controller/src/ConnectivityController-method-action-types.ts
index 456618d255d..ddc961f0a57 100644
--- a/packages/connectivity-controller/src/ConnectivityController-method-action-types.ts
+++ b/packages/connectivity-controller/src/ConnectivityController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { ConnectivityController } from './ConnectivityController';
+import type { ConnectivityController } from './ConnectivityController.js';
/**
* Initializes the controller by fetching the initial connectivity status.
diff --git a/packages/connectivity-controller/src/ConnectivityController.test.ts b/packages/connectivity-controller/src/ConnectivityController.test.ts
index b90c90d72ef..56ab109a270 100644
--- a/packages/connectivity-controller/src/ConnectivityController.test.ts
+++ b/packages/connectivity-controller/src/ConnectivityController.test.ts
@@ -1,3 +1,4 @@
+import { jest } from '@jest/globals';
import { deriveStateFromMetadata } from '@metamask/base-controller';
import { Messenger, MOCK_ANY_NAMESPACE } from '@metamask/messenger';
import type {
@@ -6,10 +7,10 @@ import type {
MessengerEvents,
} from '@metamask/messenger';
-import type { ConnectivityControllerMessenger } from './ConnectivityController';
-import { ConnectivityController } from './ConnectivityController';
-import { CONNECTIVITY_STATUSES } from './types';
-import type { ConnectivityAdapter, ConnectivityStatus } from './types';
+import type { ConnectivityControllerMessenger } from './ConnectivityController.js';
+import { ConnectivityController } from './ConnectivityController.js';
+import { CONNECTIVITY_STATUSES } from './types.js';
+import type { ConnectivityAdapter, ConnectivityStatus } from './types.js';
describe('ConnectivityController', () => {
describe('constructor', () => {
diff --git a/packages/connectivity-controller/src/ConnectivityController.ts b/packages/connectivity-controller/src/ConnectivityController.ts
index b83312285f8..dd55086ed43 100644
--- a/packages/connectivity-controller/src/ConnectivityController.ts
+++ b/packages/connectivity-controller/src/ConnectivityController.ts
@@ -6,9 +6,9 @@ import type {
import { BaseController } from '@metamask/base-controller';
import type { Messenger } from '@metamask/messenger';
-import { ConnectivityControllerMethodActions } from './ConnectivityController-method-action-types';
-import { CONNECTIVITY_STATUSES } from './types';
-import type { ConnectivityAdapter, ConnectivityStatus } from './types';
+import { ConnectivityControllerMethodActions } from './ConnectivityController-method-action-types.js';
+import { CONNECTIVITY_STATUSES } from './types.js';
+import type { ConnectivityAdapter, ConnectivityStatus } from './types.js';
/**
* The name of the {@link ConnectivityController}, used to namespace the
diff --git a/packages/connectivity-controller/src/index.ts b/packages/connectivity-controller/src/index.ts
index 4cd875d8f89..3d6fdbd428c 100644
--- a/packages/connectivity-controller/src/index.ts
+++ b/packages/connectivity-controller/src/index.ts
@@ -5,12 +5,12 @@ export type {
ConnectivityControllerStateChangeEvent,
ConnectivityControllerEvents,
ConnectivityControllerMessenger,
-} from './ConnectivityController';
-export type { ConnectivityControllerSetConnectivityStatusAction } from './ConnectivityController-method-action-types';
-export type { ConnectivityAdapter, ConnectivityStatus } from './types';
-export { CONNECTIVITY_STATUSES } from './types';
+} from './ConnectivityController.js';
+export type { ConnectivityControllerSetConnectivityStatusAction } from './ConnectivityController-method-action-types.js';
+export type { ConnectivityAdapter, ConnectivityStatus } from './types.js';
+export { CONNECTIVITY_STATUSES } from './types.js';
export {
ConnectivityController,
getDefaultConnectivityControllerState,
-} from './ConnectivityController';
-export { connectivityControllerSelectors } from './selectors';
+} from './ConnectivityController.js';
+export { connectivityControllerSelectors } from './selectors.js';
diff --git a/packages/connectivity-controller/src/selectors.test.ts b/packages/connectivity-controller/src/selectors.test.ts
index 99eec99a459..80a363ded62 100644
--- a/packages/connectivity-controller/src/selectors.test.ts
+++ b/packages/connectivity-controller/src/selectors.test.ts
@@ -1,6 +1,6 @@
-import type { ConnectivityControllerState } from './ConnectivityController';
-import { connectivityControllerSelectors } from './selectors';
-import { CONNECTIVITY_STATUSES } from './types';
+import type { ConnectivityControllerState } from './ConnectivityController.js';
+import { connectivityControllerSelectors } from './selectors.js';
+import { CONNECTIVITY_STATUSES } from './types.js';
describe('connectivityControllerSelectors', () => {
describe('selectConnectivityStatus', () => {
diff --git a/packages/connectivity-controller/src/selectors.ts b/packages/connectivity-controller/src/selectors.ts
index cea73cc5974..d8b442e6b76 100644
--- a/packages/connectivity-controller/src/selectors.ts
+++ b/packages/connectivity-controller/src/selectors.ts
@@ -1,8 +1,8 @@
import { createSelector } from 'reselect';
-import type { ConnectivityControllerState } from './ConnectivityController';
-import { CONNECTIVITY_STATUSES } from './types';
-import type { ConnectivityStatus } from './types';
+import type { ConnectivityControllerState } from './ConnectivityController.js';
+import { CONNECTIVITY_STATUSES } from './types.js';
+import type { ConnectivityStatus } from './types.js';
/**
* Selects the connectivity status from the controller state.
diff --git a/packages/controller-utils/jest.config.js b/packages/controller-utils/jest.config.js
index 8e0bb5320db..d28f5ee76a2 100644
--- a/packages/controller-utils/jest.config.js
+++ b/packages/controller-utils/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/controller-utils/package.json b/packages/controller-utils/package.json
index e76dfc53bd6..3dff7bd6fd3 100644
--- a/packages/controller-utils/package.json
+++ b/packages/controller-utils/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/controller-utils",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/controller-utils",
@@ -64,14 +57,14 @@
"cockatiel": "^3.1.2",
"eth-ens-namehash": "^2.0.8",
"fast-deep-equal": "^3.1.3",
- "lodash": "^4.17.21"
+ "lodash-es": "^4.17.21"
},
"devDependencies": {
"@babel/runtime": "^7.23.9",
+ "@jest/globals": "^30.4.1",
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
- "@types/lodash": "^4.14.191",
+ "@types/lodash-es": "^4.17.12",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
"jest-environment-jsdom": "^29.7.0",
diff --git a/packages/controller-utils/src/abi.test.ts b/packages/controller-utils/src/abi.test.ts
index f06b8f316dd..deaea972621 100644
--- a/packages/controller-utils/src/abi.test.ts
+++ b/packages/controller-utils/src/abi.test.ts
@@ -1,6 +1,6 @@
import { Interface } from '@ethersproject/abi';
-import { encodeFunctionData } from './abi';
+import { encodeFunctionData } from './abi.js';
const ERC20_ABI = [
{
diff --git a/packages/controller-utils/src/constants.ts b/packages/controller-utils/src/constants.ts
index 99f23aa72d8..85967701bf4 100644
--- a/packages/controller-utils/src/constants.ts
+++ b/packages/controller-utils/src/constants.ts
@@ -4,7 +4,7 @@ import {
ChainId,
BuiltInNetworkName,
BlockExplorerUrl,
-} from './types';
+} from './types.js';
export const RPC = 'rpc';
export const FALL_BACK_VS_CURRENCY = 'ETH';
diff --git a/packages/controller-utils/src/create-service-policy.test.ts b/packages/controller-utils/src/create-service-policy.test.ts
index 784e61795e5..3867b6e49ba 100644
--- a/packages/controller-utils/src/create-service-policy.test.ts
+++ b/packages/controller-utils/src/create-service-policy.test.ts
@@ -1,3 +1,4 @@
+import { jest } from '@jest/globals';
import { CircuitState, ConstantBackoff, handleWhen } from 'cockatiel';
import {
@@ -7,7 +8,7 @@ import {
DEFAULT_MAX_CONSECUTIVE_FAILURES,
DEFAULT_MAX_RETRIES,
ServicePolicy,
-} from './create-service-policy';
+} from './create-service-policy.js';
describe('createServicePolicy', () => {
beforeEach(() => {
diff --git a/packages/controller-utils/src/index.test.ts b/packages/controller-utils/src/index.test.ts
index 91092cdd388..0399fc7d23e 100644
--- a/packages/controller-utils/src/index.test.ts
+++ b/packages/controller-utils/src/index.test.ts
@@ -1,77 +1,92 @@
-import * as allExports from '.';
+import * as allExports from './..js';
describe('@metamask/controller-utils', () => {
it('has expected JavaScript exports', () => {
expect(Object.keys(allExports)).toMatchInlineSnapshot(`
[
- "encodeFunctionData",
+ "ASSET_TYPES",
+ "ApprovalType",
+ "BNToHex",
+ "BUILT_IN_CUSTOM_NETWORKS_RPC",
+ "BUILT_IN_NETWORKS",
+ "BlockExplorerUrl",
"BrokenCircuitError",
+ "BuiltInNetworkName",
+ "CHAIN_IDS_WITH_NO_NATIVE_TOKEN",
+ "CHAIN_ID_TO_ETHERS_NETWORK_NAME_MAP",
+ "ChainId",
"CircuitState",
"CockatielEventEmitter",
"ConstantBackoff",
+ "CustomNetworkType",
+ "DAY",
+ "DAYS",
"DEFAULT_CIRCUIT_BREAK_DURATION",
"DEFAULT_DEGRADED_THRESHOLD",
+ "DEFAULT_INFURA_NETWORKS",
"DEFAULT_MAX_CONSECUTIVE_FAILURES",
"DEFAULT_MAX_RETRIES",
- "ExponentialBackoff",
- "createServicePolicy",
- "handleAll",
- "handleWhen",
- "RPC",
- "FALL_BACK_VS_CURRENCY",
- "IPFS_DEFAULT_GATEWAY_URL",
- "GANACHE_CHAIN_ID",
- "MAX_SAFE_CHAIN_ID",
- "ERC721",
"ERC1155",
- "ERC20",
- "ERC721_INTERFACE_ID",
- "ERC721_METADATA_INTERFACE_ID",
- "ERC721_ENUMERABLE_INTERFACE_ID",
"ERC1155_INTERFACE_ID",
"ERC1155_METADATA_URI_INTERFACE_ID",
"ERC1155_TOKEN_RECEIVER_INTERFACE_ID",
+ "ERC20",
+ "ERC721",
+ "ERC721_ENUMERABLE_INTERFACE_ID",
+ "ERC721_INTERFACE_ID",
+ "ERC721_METADATA_INTERFACE_ID",
+ "ExponentialBackoff",
+ "FALL_BACK_VS_CURRENCY",
+ "GANACHE_CHAIN_ID",
"GWEI",
- "ASSET_TYPES",
- "TESTNET_TICKER_SYMBOLS",
- "BUILT_IN_CUSTOM_NETWORKS_RPC",
- "BUILT_IN_NETWORKS",
- "OPENSEA_PROXY_URL",
+ "HOUR",
+ "HOURS",
+ "HttpError",
+ "IPFS_DEFAULT_GATEWAY_URL",
+ "InfuraNetworkType",
+ "MAX_SAFE_CHAIN_ID",
+ "MINUTE",
+ "MINUTES",
+ "NETWORKS_BYPASSING_VALIDATION",
"NFT_API_BASE_URL",
- "NFT_API_VERSION",
"NFT_API_TIMEOUT",
+ "NFT_API_VERSION",
+ "NetworkNickname",
+ "NetworkType",
+ "NetworksTicker",
+ "OPENSEA_PROXY_URL",
"ORIGIN_METAMASK",
- "ApprovalType",
- "CHAIN_ID_TO_ETHERS_NETWORK_NAME_MAP",
+ "RPC",
"SECOND",
"SECONDS",
- "MINUTE",
- "MINUTES",
- "HOUR",
- "HOURS",
- "DAY",
- "DAYS",
- "NETWORKS_BYPASSING_VALIDATION",
- "CHAIN_IDS_WITH_NO_NATIVE_TOKEN",
- "BNToHex",
+ "TESTNET_TICKER_SYMBOLS",
"convertHexToDecimal",
+ "createServicePolicy",
+ "detectSIWE",
+ "encodeFunctionData",
"fetchWithErrorHandling",
"fractionBN",
"fromHex",
"getBuyURL",
"gweiDecToWEIBN",
+ "handleAll",
"handleFetch",
+ "handleWhen",
"hexToBN",
"hexToText",
- "HttpError",
+ "isEqualCaseInsensitive",
+ "isInfuraNetworkType",
+ "isNetworkType",
"isNonEmptyArray",
"isPlainObject",
"isSafeChainId",
"isSafeDynamicKey",
"isSmartContractCode",
- "isValidJson",
"isValidHexAddress",
+ "isValidJson",
+ "isValidSIWEOrigin",
"normalizeEnsName",
+ "parseDomainParts",
"query",
"safelyExecute",
"safelyExecuteWithTimeout",
@@ -80,21 +95,6 @@ describe('@metamask/controller-utils', () => {
"toChecksumHexAddress",
"toHex",
"weiHexToGweiDec",
- "isEqualCaseInsensitive",
- "InfuraNetworkType",
- "DEFAULT_INFURA_NETWORKS",
- "CustomNetworkType",
- "NetworkType",
- "isNetworkType",
- "isInfuraNetworkType",
- "BuiltInNetworkName",
- "ChainId",
- "NetworksTicker",
- "BlockExplorerUrl",
- "NetworkNickname",
- "parseDomainParts",
- "isValidSIWEOrigin",
- "detectSIWE",
]
`);
});
diff --git a/packages/controller-utils/src/index.ts b/packages/controller-utils/src/index.ts
index 9a5a22a608b..bd0061e5415 100644
--- a/packages/controller-utils/src/index.ts
+++ b/packages/controller-utils/src/index.ts
@@ -1,4 +1,4 @@
-export { encodeFunctionData } from './abi';
+export { encodeFunctionData } from './abi.js';
export {
BrokenCircuitError,
CircuitState,
@@ -12,13 +12,13 @@ export {
createServicePolicy,
handleAll,
handleWhen,
-} from './create-service-policy';
+} from './create-service-policy.js';
export type {
CockatielEvent,
CreateServicePolicyOptions,
CockatielFailureReason,
ServicePolicy,
-} from './create-service-policy';
+} from './create-service-policy.js';
export {
RPC,
FALL_BACK_VS_CURRENCY,
@@ -56,8 +56,8 @@ export {
DAYS,
NETWORKS_BYPASSING_VALIDATION,
CHAIN_IDS_WITH_NO_NATIVE_TOKEN,
-} from './constants';
-export type { NonEmptyArray } from './util';
+} from './constants.js';
+export type { NonEmptyArray } from './util.js';
export {
BNToHex,
convertHexToDecimal,
@@ -87,6 +87,6 @@ export {
toHex,
weiHexToGweiDec,
isEqualCaseInsensitive,
-} from './util';
-export * from './types';
-export * from './siwe';
+} from './util.js';
+export * from './types.js';
+export * from './siwe.js';
diff --git a/packages/controller-utils/src/siwe.test.ts b/packages/controller-utils/src/siwe.test.ts
index c792ac3499f..466fdd3844a 100644
--- a/packages/controller-utils/src/siwe.test.ts
+++ b/packages/controller-utils/src/siwe.test.ts
@@ -1,6 +1,6 @@
import { ParsedMessage } from '@spruceid/siwe-parser';
-import { detectSIWE, isValidSIWEOrigin } from './siwe';
+import { detectSIWE, isValidSIWEOrigin } from './siwe.js';
const siweMessage =
'example.com wants you to sign in with your Ethereum account:\n0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\n\n\nURI: https://example.com/login\nVersion: 1\nChain ID: 1\nNonce: 32891756\nIssued At: 2021-09-30T16:25:24Z';
diff --git a/packages/controller-utils/src/siwe.ts b/packages/controller-utils/src/siwe.ts
index f82574a38de..aee9b1bee62 100644
--- a/packages/controller-utils/src/siwe.ts
+++ b/packages/controller-utils/src/siwe.ts
@@ -1,7 +1,7 @@
import { remove0x } from '@metamask/utils';
import { ParsedMessage } from '@spruceid/siwe-parser';
-import { projectLogger, createModuleLogger } from './logger';
+import { projectLogger, createModuleLogger } from './logger.js';
const log = createModuleLogger(projectLogger, 'detect-siwe');
diff --git a/packages/controller-utils/src/types.test.ts b/packages/controller-utils/src/types.test.ts
index f42e7e2fb19..d024e1dbdf0 100644
--- a/packages/controller-utils/src/types.test.ts
+++ b/packages/controller-utils/src/types.test.ts
@@ -1,4 +1,4 @@
-import { isNetworkType, NetworkType } from './types';
+import { isNetworkType, NetworkType } from './types.js';
describe('types', () => {
it('isNetworkType', () => {
diff --git a/packages/controller-utils/src/util.test.ts b/packages/controller-utils/src/util.test.ts
index ae8c002b39d..e3346ea473f 100644
--- a/packages/controller-utils/src/util.test.ts
+++ b/packages/controller-utils/src/util.test.ts
@@ -4,9 +4,9 @@ import { BigNumber } from 'bignumber.js';
import BN from 'bn.js';
import nock from 'nock';
-import { FakeProvider } from '../../../tests/fake-provider';
-import { MAX_SAFE_CHAIN_ID } from './constants';
-import * as util from './util';
+import { FakeProvider } from '../../../tests/fake-provider.js';
+import { MAX_SAFE_CHAIN_ID } from './constants.js';
+import * as util from './util.js';
type EverythingButNull =
| string
diff --git a/packages/controller-utils/src/util.ts b/packages/controller-utils/src/util.ts
index d8ce910c3d0..e2e4e5cac3d 100644
--- a/packages/controller-utils/src/util.ts
+++ b/packages/controller-utils/src/util.ts
@@ -13,9 +13,9 @@ import type { BigNumber } from 'bignumber.js';
import BN from 'bn.js';
import ensNamehash from 'eth-ens-namehash';
import deepEqual from 'fast-deep-equal';
-import { memoize } from 'lodash';
+import { memoize } from 'lodash-es';
-import { MAX_SAFE_CHAIN_ID } from './constants';
+import { MAX_SAFE_CHAIN_ID } from './constants.js';
export type { BigNumber };
diff --git a/packages/core-backend/jest.config.js b/packages/core-backend/jest.config.js
index 9af4c974897..0fd79da270d 100644
--- a/packages/core-backend/jest.config.js
+++ b/packages/core-backend/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/core-backend/package.json b/packages/core-backend/package.json
index 55cb72ab7e2..39d75b23bb3 100644
--- a/packages/core-backend/package.json
+++ b/packages/core-backend/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/core-backend",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/core-backend",
@@ -68,7 +61,6 @@
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/core-backend/src/ApiPlatformClientService-method-action-types.ts b/packages/core-backend/src/ApiPlatformClientService-method-action-types.ts
index 1debb137c08..4ff7a560e78 100644
--- a/packages/core-backend/src/ApiPlatformClientService-method-action-types.ts
+++ b/packages/core-backend/src/ApiPlatformClientService-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { ApiPlatformClientService } from './ApiPlatformClientService';
+import type { ApiPlatformClientService } from './ApiPlatformClientService.js';
/**
* Returns the shared ApiPlatformClient instance.
diff --git a/packages/core-backend/src/ApiPlatformClientService.test.ts b/packages/core-backend/src/ApiPlatformClientService.test.ts
index 8ff627f83cd..abb2a5fa372 100644
--- a/packages/core-backend/src/ApiPlatformClientService.test.ts
+++ b/packages/core-backend/src/ApiPlatformClientService.test.ts
@@ -5,8 +5,8 @@ import type {
MockAnyNamespace,
} from '@metamask/messenger';
-import { ApiPlatformClientService } from './ApiPlatformClientService';
-import type { ApiPlatformClientServiceMessenger } from './ApiPlatformClientService';
+import { ApiPlatformClientService } from './ApiPlatformClientService.js';
+import type { ApiPlatformClientServiceMessenger } from './ApiPlatformClientService.js';
type AllApiPlatformClientServiceActions =
MessengerActions;
diff --git a/packages/core-backend/src/ApiPlatformClientService.ts b/packages/core-backend/src/ApiPlatformClientService.ts
index 5aeca2fddc2..a0de602acca 100644
--- a/packages/core-backend/src/ApiPlatformClientService.ts
+++ b/packages/core-backend/src/ApiPlatformClientService.ts
@@ -1,8 +1,8 @@
import type { Messenger } from '@metamask/messenger';
-import { ApiPlatformClient } from './api';
-import type { ApiPlatformClientOptions } from './api';
-import type { ApiPlatformClientServiceMethodActions } from './ApiPlatformClientService-method-action-types';
+import { ApiPlatformClient } from './api.js';
+import type { ApiPlatformClientOptions } from './api.js';
+import type { ApiPlatformClientServiceMethodActions } from './ApiPlatformClientService-method-action-types.js';
// === GENERAL ===
diff --git a/packages/core-backend/src/api/ApiPlatformClient.test.ts b/packages/core-backend/src/api/ApiPlatformClient.test.ts
index 397193c6a36..a33d1fe3b95 100644
--- a/packages/core-backend/src/api/ApiPlatformClient.test.ts
+++ b/packages/core-backend/src/api/ApiPlatformClient.test.ts
@@ -24,12 +24,12 @@ import {
HttpError,
shouldRetry,
calculateRetryDelay,
-} from '.';
+} from './..js';
import {
mockFetch,
createMockResponse,
setupTestEnvironment,
-} from './test-utils';
+} from './test-utils.js';
describe('ApiPlatformClient', () => {
let client: ApiPlatformClient;
diff --git a/packages/core-backend/src/api/ApiPlatformClient.ts b/packages/core-backend/src/api/ApiPlatformClient.ts
index 4a47f933599..7e697fb2248 100644
--- a/packages/core-backend/src/api/ApiPlatformClient.ts
+++ b/packages/core-backend/src/api/ApiPlatformClient.ts
@@ -38,18 +38,18 @@ import { QueryClient } from '@tanstack/query-core';
import type { QueryKey } from '@tanstack/query-core';
// Import API clients from subfolders
-import { AccountsApiClient } from './accounts';
-import { authQueryKeys } from './base-client';
-import { PricesApiClient } from './prices';
+import { AccountsApiClient } from './accounts.js';
+import { authQueryKeys } from './base-client.js';
+import { PricesApiClient } from './prices.js';
import {
STALE_TIMES,
GC_TIMES,
shouldRetry,
calculateRetryDelay,
-} from './shared-types';
-import type { ApiPlatformClientOptions } from './shared-types';
-import { TokenApiClient } from './token';
-import { TokensApiClient } from './tokens';
+} from './shared-types.js';
+import type { ApiPlatformClientOptions } from './shared-types.js';
+import { TokenApiClient } from './token.js';
+import { TokensApiClient } from './tokens.js';
// ============================================================================
// UNIFIED API CLIENT
diff --git a/packages/core-backend/src/api/accounts/client.test.ts b/packages/core-backend/src/api/accounts/client.test.ts
index bdd5ec32367..0230be1e933 100644
--- a/packages/core-backend/src/api/accounts/client.test.ts
+++ b/packages/core-backend/src/api/accounts/client.test.ts
@@ -2,20 +2,20 @@
* Accounts API Client Tests - accounts.api.cx.metamask.io
*/
-import type { ApiPlatformClient } from '../ApiPlatformClient';
-import { API_URLS, HttpError } from '../shared-types';
+import type { ApiPlatformClient } from '../ApiPlatformClient.js';
+import { API_URLS, HttpError } from '../shared-types.js';
import {
mockFetch,
createMockResponse,
setupTestEnvironment,
-} from '../test-utils';
+} from '../test-utils.js';
import type {
V1SupportedNetworksResponse,
V2SupportedNetworksResponse,
V2BalancesResponse,
V5BalancesResponse,
V6BalancesResponse,
-} from './types';
+} from './types.js';
describe('AccountsApiClient', () => {
let client: ApiPlatformClient;
diff --git a/packages/core-backend/src/api/accounts/client.ts b/packages/core-backend/src/api/accounts/client.ts
index e5cec8f0f7e..575746c63eb 100644
--- a/packages/core-backend/src/api/accounts/client.ts
+++ b/packages/core-backend/src/api/accounts/client.ts
@@ -17,9 +17,14 @@ import type {
QueryFunctionContext,
} from '@tanstack/query-core';
-import { BaseApiClient, API_URLS, STALE_TIMES, GC_TIMES } from '../base-client';
-import { getQueryOptionsOverrides } from '../shared-types';
-import type { FetchOptions } from '../shared-types';
+import {
+ BaseApiClient,
+ API_URLS,
+ STALE_TIMES,
+ GC_TIMES,
+} from '../base-client.js';
+import { getQueryOptionsOverrides } from '../shared-types.js';
+import type { FetchOptions } from '../shared-types.js';
import type {
V1SupportedNetworksResponse,
V2SupportedNetworksResponse,
@@ -35,7 +40,7 @@ import type {
V1AccountRelationshipResult,
V2NftsResponse,
V2TokensResponse,
-} from './types';
+} from './types.js';
/**
* Accounts API Client.
diff --git a/packages/core-backend/src/api/accounts/index.ts b/packages/core-backend/src/api/accounts/index.ts
index 3f08819c3fa..e9cce03f246 100644
--- a/packages/core-backend/src/api/accounts/index.ts
+++ b/packages/core-backend/src/api/accounts/index.ts
@@ -2,7 +2,7 @@
* Accounts API barrel export.
*/
-export { AccountsApiClient } from './client';
+export { AccountsApiClient } from './client.js';
export type {
V5BalanceItem,
V5BalancesResponse,
@@ -27,4 +27,4 @@ export type {
V2NftsResponse,
TokenDiscoveryItem,
V2TokensResponse,
-} from './types';
+} from './types.js';
diff --git a/packages/core-backend/src/api/accounts/types.ts b/packages/core-backend/src/api/accounts/types.ts
index 41eeb031767..a01caaaa4de 100644
--- a/packages/core-backend/src/api/accounts/types.ts
+++ b/packages/core-backend/src/api/accounts/types.ts
@@ -3,7 +3,7 @@
* API: accounts.api.cx.metamask.io
*/
-import type { PageInfo } from '../shared-types';
+import type { PageInfo } from '../shared-types.js';
// ============================================================================
// BALANCE TYPES
diff --git a/packages/core-backend/src/api/base-client.test.ts b/packages/core-backend/src/api/base-client.test.ts
index 3db0eda66e6..41a458d9b00 100644
--- a/packages/core-backend/src/api/base-client.test.ts
+++ b/packages/core-backend/src/api/base-client.test.ts
@@ -4,8 +4,8 @@
import { QueryClient } from '@tanstack/query-core';
-import { AccountsApiClient } from './accounts';
-import { authQueryKeys } from './base-client';
+import { AccountsApiClient } from './accounts.js';
+import { authQueryKeys } from './base-client.js';
describe('BaseApiClient', () => {
describe('invalidateAuthToken', () => {
diff --git a/packages/core-backend/src/api/base-client.ts b/packages/core-backend/src/api/base-client.ts
index c8a1d1e01a1..db8ff3fbe1b 100644
--- a/packages/core-backend/src/api/base-client.ts
+++ b/packages/core-backend/src/api/base-client.ts
@@ -12,8 +12,8 @@ import {
calculateRetryDelay,
shouldRetry,
HttpError,
-} from './shared-types';
-import type { ApiPlatformClientOptions } from './shared-types';
+} from './shared-types.js';
+import type { ApiPlatformClientOptions } from './shared-types.js';
// Auth query keys - shared for token management across clients
export const authQueryKeys = {
diff --git a/packages/core-backend/src/api/index.ts b/packages/core-backend/src/api/index.ts
index 02c01b9838e..c2920f14153 100644
--- a/packages/core-backend/src/api/index.ts
+++ b/packages/core-backend/src/api/index.ts
@@ -10,7 +10,7 @@ export type {
MarketDataDetails,
ApiPlatformClientOptions,
FetchOptions,
-} from './shared-types';
+} from './shared-types.js';
export {
API_URLS,
STALE_TIMES,
@@ -20,10 +20,10 @@ export {
getQueryOptionsOverrides,
shouldRetry,
HttpError,
-} from './shared-types';
+} from './shared-types.js';
// Accounts API
-export { AccountsApiClient } from './accounts';
+export { AccountsApiClient } from './accounts.js';
export type {
V5BalanceItem,
V5BalancesResponse,
@@ -48,10 +48,10 @@ export type {
V2NftsResponse,
TokenDiscoveryItem,
V2TokensResponse,
-} from './accounts';
+} from './accounts.js';
// Prices API
-export { PricesApiClient } from './prices';
+export { PricesApiClient } from './prices.js';
export type {
V3SpotPricesResponse,
CoinGeckoSpotPrice,
@@ -60,10 +60,10 @@ export type {
PriceSupportedNetworksResponse,
V1HistoricalPricesResponse,
V3HistoricalPricesResponse,
-} from './prices';
+} from './prices.js';
// Token API
-export { TokenApiClient } from './token';
+export { TokenApiClient } from './token.js';
export type {
TokenMetadata,
V1TokenDescriptionResponse,
@@ -74,22 +74,22 @@ export type {
TopGainersSortOption,
TrendingSortOption,
V1SuggestedOccurrenceFloorsResponse,
-} from './token';
+} from './token.js';
// Tokens API
-export { TokensApiClient } from './tokens';
+export { TokensApiClient } from './tokens.js';
export type {
V1TokenSupportedNetworksResponse,
V2TokenSupportedNetworksResponse,
V3AssetResponse,
-} from './tokens';
+} from './tokens.js';
// Base client
-export { BaseApiClient } from './base-client';
-export type { InternalFetchOptions } from './base-client';
+export { BaseApiClient } from './base-client.js';
+export type { InternalFetchOptions } from './base-client.js';
// API Platform Client (unified client)
export {
ApiPlatformClient,
createApiPlatformClient,
-} from './ApiPlatformClient';
+} from './ApiPlatformClient.js';
diff --git a/packages/core-backend/src/api/prices/client.test.ts b/packages/core-backend/src/api/prices/client.test.ts
index 80cf8c5f095..237d4ed5a5a 100644
--- a/packages/core-backend/src/api/prices/client.test.ts
+++ b/packages/core-backend/src/api/prices/client.test.ts
@@ -2,19 +2,19 @@
* Prices API Client Tests - price.api.cx.metamask.io
*/
-import type { ApiPlatformClient } from '../ApiPlatformClient';
-import { API_URLS } from '../shared-types';
-import type { FetchOptions } from '../shared-types';
+import type { ApiPlatformClient } from '../ApiPlatformClient.js';
+import { API_URLS } from '../shared-types.js';
+import type { FetchOptions } from '../shared-types.js';
import {
createMockResponse,
mockFetch,
setupTestEnvironment,
-} from '../test-utils';
+} from '../test-utils.js';
import type {
PriceSupportedNetworksResponse,
V1ExchangeRatesResponse,
V3SpotPricesResponse,
-} from './types';
+} from './types.js';
describe('PricesApiClient', () => {
let client: ApiPlatformClient;
diff --git a/packages/core-backend/src/api/prices/client.ts b/packages/core-backend/src/api/prices/client.ts
index 0cd31afe65e..f8cc86fa993 100644
--- a/packages/core-backend/src/api/prices/client.ts
+++ b/packages/core-backend/src/api/prices/client.ts
@@ -14,13 +14,18 @@ import type {
QueryFunctionContext,
} from '@tanstack/query-core';
-import { BaseApiClient, API_URLS, STALE_TIMES, GC_TIMES } from '../base-client';
-import { getQueryOptionsOverrides } from '../shared-types';
+import {
+ BaseApiClient,
+ API_URLS,
+ STALE_TIMES,
+ GC_TIMES,
+} from '../base-client.js';
+import { getQueryOptionsOverrides } from '../shared-types.js';
import type {
FetchOptions,
MarketDataDetails,
SupportedCurrency,
-} from '../shared-types';
+} from '../shared-types.js';
import type {
CoinGeckoSpotPrice,
V1ExchangeRatesResponse,
@@ -28,7 +33,7 @@ import type {
V1HistoricalPricesResponse,
V3SpotPricesResponse,
V3HistoricalPricesResponse,
-} from './types';
+} from './types.js';
/**
* Prices API Client.
diff --git a/packages/core-backend/src/api/prices/index.ts b/packages/core-backend/src/api/prices/index.ts
index ca41dab5191..f8f24383a96 100644
--- a/packages/core-backend/src/api/prices/index.ts
+++ b/packages/core-backend/src/api/prices/index.ts
@@ -2,7 +2,7 @@
* Prices API barrel export.
*/
-export { PricesApiClient } from './client';
+export { PricesApiClient } from './client.js';
export type {
V3SpotPricesResponse,
CoinGeckoSpotPrice,
@@ -11,4 +11,4 @@ export type {
PriceSupportedNetworksResponse,
V1HistoricalPricesResponse,
V3HistoricalPricesResponse,
-} from './types';
+} from './types.js';
diff --git a/packages/core-backend/src/api/test-utils.ts b/packages/core-backend/src/api/test-utils.ts
index ce14c505222..cb6a6f6529d 100644
--- a/packages/core-backend/src/api/test-utils.ts
+++ b/packages/core-backend/src/api/test-utils.ts
@@ -4,7 +4,7 @@
import { QueryClient } from '@tanstack/query-core';
-import { ApiPlatformClient } from './ApiPlatformClient';
+import { ApiPlatformClient } from './ApiPlatformClient.js';
// Mock fetch globally
export const mockFetch = jest.fn();
diff --git a/packages/core-backend/src/api/token/client.test.ts b/packages/core-backend/src/api/token/client.test.ts
index d09900257f2..9d8e95a9e22 100644
--- a/packages/core-backend/src/api/token/client.test.ts
+++ b/packages/core-backend/src/api/token/client.test.ts
@@ -2,14 +2,14 @@
* Token API Client Tests - token.api.cx.metamask.io
*/
-import type { ApiPlatformClient } from '../ApiPlatformClient';
-import { API_URLS } from '../shared-types';
+import type { ApiPlatformClient } from '../ApiPlatformClient.js';
+import { API_URLS } from '../shared-types.js';
import {
mockFetch,
createMockResponse,
setupTestEnvironment,
-} from '../test-utils';
-import type { NetworkInfo, TokenMetadata } from './types';
+} from '../test-utils.js';
+import type { NetworkInfo, TokenMetadata } from './types.js';
describe('TokenApiClient', () => {
let client: ApiPlatformClient;
diff --git a/packages/core-backend/src/api/token/client.ts b/packages/core-backend/src/api/token/client.ts
index 1194c0df487..520a9602209 100644
--- a/packages/core-backend/src/api/token/client.ts
+++ b/packages/core-backend/src/api/token/client.ts
@@ -17,9 +17,14 @@ import type {
QueryFunctionContext,
} from '@tanstack/query-core';
-import { BaseApiClient, API_URLS, STALE_TIMES, GC_TIMES } from '../base-client';
-import { getQueryOptionsOverrides } from '../shared-types';
-import type { FetchOptions } from '../shared-types';
+import {
+ BaseApiClient,
+ API_URLS,
+ STALE_TIMES,
+ GC_TIMES,
+} from '../base-client.js';
+import { getQueryOptionsOverrides } from '../shared-types.js';
+import type { FetchOptions } from '../shared-types.js';
import type {
TokenMetadata,
V1TokenDescriptionResponse,
@@ -29,7 +34,7 @@ import type {
TrendingSortOption,
TopGainersSortOption,
V1SuggestedOccurrenceFloorsResponse,
-} from './types';
+} from './types.js';
/**
* Token API Client.
diff --git a/packages/core-backend/src/api/token/index.ts b/packages/core-backend/src/api/token/index.ts
index dbf9047e995..c141ba43739 100644
--- a/packages/core-backend/src/api/token/index.ts
+++ b/packages/core-backend/src/api/token/index.ts
@@ -2,7 +2,7 @@
* Token API barrel export.
*/
-export { TokenApiClient } from './client';
+export { TokenApiClient } from './client.js';
export type {
TokenMetadata,
V1TokenDescriptionResponse,
@@ -20,4 +20,4 @@ export type {
TokenSecurityFees,
TokenSecurityFinancialStats,
TokenSecurityMetadata,
-} from './types';
+} from './types.js';
diff --git a/packages/core-backend/src/api/tokens/client.test.ts b/packages/core-backend/src/api/tokens/client.test.ts
index a0559a44129..a619505b6eb 100644
--- a/packages/core-backend/src/api/tokens/client.test.ts
+++ b/packages/core-backend/src/api/tokens/client.test.ts
@@ -2,13 +2,13 @@
* Tokens API Client Tests - tokens.api.cx.metamask.io
*/
-import type { ApiPlatformClient } from '../ApiPlatformClient';
-import { API_URLS } from '../shared-types';
+import type { ApiPlatformClient } from '../ApiPlatformClient.js';
+import { API_URLS } from '../shared-types.js';
import {
mockFetch,
createMockResponse,
setupTestEnvironment,
-} from '../test-utils';
+} from '../test-utils.js';
describe('TokensApiClient', () => {
let client: ApiPlatformClient;
diff --git a/packages/core-backend/src/api/tokens/client.ts b/packages/core-backend/src/api/tokens/client.ts
index ad3a57e1e15..37d5d3ea589 100644
--- a/packages/core-backend/src/api/tokens/client.ts
+++ b/packages/core-backend/src/api/tokens/client.ts
@@ -11,15 +11,20 @@ import type {
QueryFunctionContext,
} from '@tanstack/query-core';
-import { BaseApiClient, API_URLS, STALE_TIMES, GC_TIMES } from '../base-client';
-import { getQueryOptionsOverrides } from '../shared-types';
-import type { FetchOptions } from '../shared-types';
+import {
+ BaseApiClient,
+ API_URLS,
+ STALE_TIMES,
+ GC_TIMES,
+} from '../base-client.js';
+import { getQueryOptionsOverrides } from '../shared-types.js';
+import type { FetchOptions } from '../shared-types.js';
import type {
V1TokenSupportedNetworksResponse,
V2TokenSupportedNetworksResponse,
V3AssetResponse,
V3AssetsQueryOptions,
-} from './types';
+} from './types.js';
/**
* Tokens API Client.
diff --git a/packages/core-backend/src/api/tokens/index.ts b/packages/core-backend/src/api/tokens/index.ts
index c8fe69c1cea..1b4207f79b3 100644
--- a/packages/core-backend/src/api/tokens/index.ts
+++ b/packages/core-backend/src/api/tokens/index.ts
@@ -2,7 +2,7 @@
* Tokens API barrel export.
*/
-export { TokensApiClient } from './client';
+export { TokensApiClient } from './client.js';
export type {
V1TokenSupportedNetworksResponse,
V2TokenSupportedNetworksResponse,
@@ -12,4 +12,4 @@ export type {
V3AssetHoneypotStatus,
V3AssetStorage,
V3AssetDescription,
-} from './types';
+} from './types.js';
diff --git a/packages/core-backend/src/index.ts b/packages/core-backend/src/index.ts
index f88d719373e..8ebe658aa55 100644
--- a/packages/core-backend/src/index.ts
+++ b/packages/core-backend/src/index.ts
@@ -9,7 +9,7 @@ export {
getCloseReason,
WebSocketState,
WebSocketEventType,
-} from './ws/BackendWebSocketService';
+} from './ws/BackendWebSocketService.js';
export type {
BackendWebSocketServiceOptions,
@@ -24,7 +24,7 @@ export type {
BackendWebSocketServiceConnectionStateChangedEvent,
BackendWebSocketServiceEvents,
BackendWebSocketServiceMessenger,
-} from './ws/BackendWebSocketService';
+} from './ws/BackendWebSocketService.js';
// ============================================================================
// ACCOUNT ACTIVITY SERVICE
@@ -34,7 +34,7 @@ export {
AccountActivityService,
ACCOUNT_ACTIVITY_SERVICE_ALLOWED_ACTIONS,
ACCOUNT_ACTIVITY_SERVICE_ALLOWED_EVENTS,
-} from './ws/AccountActivityService';
+} from './ws/AccountActivityService.js';
export type {
SystemNotificationData,
@@ -49,7 +49,7 @@ export type {
AccountActivityServiceEvents,
AllowedEvents as AccountActivityServiceAllowedEvents,
AccountActivityServiceMessenger,
-} from './ws/AccountActivityService';
+} from './ws/AccountActivityService.js';
// ============================================================================
// SHARED TYPES
@@ -62,7 +62,7 @@ export type {
Transfer,
BalanceUpdate,
AccountActivityMessage,
-} from './types';
+} from './types.js';
// ============================================================================
// API PLATFORM CLIENT SERVICE
@@ -71,14 +71,14 @@ export type {
export {
ApiPlatformClientService,
apiPlatformClientServiceName,
-} from './ApiPlatformClientService';
+} from './ApiPlatformClientService.js';
export type {
ApiPlatformClientServiceOptions,
ApiPlatformClientServiceActions,
ApiPlatformClientServiceEvents,
ApiPlatformClientServiceMessenger,
-} from './ApiPlatformClientService';
+} from './ApiPlatformClientService.js';
// ============================================================================
// OHLCV SERVICE
@@ -88,7 +88,7 @@ export {
OHLCVService,
OHLCV_SERVICE_ALLOWED_ACTIONS,
OHLCV_SERVICE_ALLOWED_EVENTS,
-} from './ws/ohlcv';
+} from './ws/ohlcv.js';
export type {
OHLCVBar,
@@ -103,7 +103,7 @@ export type {
OHLCVServiceEvents,
OHLCVServiceAllowedEvents,
OHLCVServiceMessenger,
-} from './ws/ohlcv';
+} from './ws/ohlcv.js';
// ============================================================================
// API PLATFORM CLIENT
@@ -127,7 +127,7 @@ export {
shouldRetry,
// Errors
HttpError,
-} from './api';
+} from './api.js';
// ============================================================================
// API PLATFORM CLIENT TYPES
@@ -187,4 +187,4 @@ export type {
V1TokenSupportedNetworksResponse,
V2TokenSupportedNetworksResponse,
V3AssetResponse,
-} from './api';
+} from './api.js';
diff --git a/packages/core-backend/src/ws/AccountActivityService-method-action-types.ts b/packages/core-backend/src/ws/AccountActivityService-method-action-types.ts
index b9e97818b98..249caf8ad0d 100644
--- a/packages/core-backend/src/ws/AccountActivityService-method-action-types.ts
+++ b/packages/core-backend/src/ws/AccountActivityService-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { AccountActivityService } from './AccountActivityService';
+import type { AccountActivityService } from './AccountActivityService.js';
/**
* Subscribe to account activity (transactions and balance updates)
diff --git a/packages/core-backend/src/ws/AccountActivityService.test.ts b/packages/core-backend/src/ws/AccountActivityService.test.ts
index 2db21d4e867..929815b16e1 100644
--- a/packages/core-backend/src/ws/AccountActivityService.test.ts
+++ b/packages/core-backend/src/ws/AccountActivityService.test.ts
@@ -7,16 +7,16 @@ import type {
} from '@metamask/messenger';
import type { Hex, Json } from '@metamask/utils';
-import { flushPromises } from '../../../../tests/helpers';
-import type { Transaction, BalanceUpdate } from '../types';
-import type { AccountActivityMessage } from '../types';
-import { AccountActivityService } from './AccountActivityService';
+import { flushPromises } from '../../../../tests/helpers.js';
+import type { Transaction, BalanceUpdate } from '../types.js';
+import type { AccountActivityMessage } from '../types.js';
+import { AccountActivityService } from './AccountActivityService.js';
import type {
AccountActivityServiceMessenger,
SubscriptionOptions,
-} from './AccountActivityService';
-import type { ServerNotificationMessage } from './BackendWebSocketService';
-import { WebSocketState } from './BackendWebSocketService';
+} from './AccountActivityService.js';
+import type { ServerNotificationMessage } from './BackendWebSocketService.js';
+import { WebSocketState } from './BackendWebSocketService.js';
type AllAccountActivityServiceActions =
MessengerActions;
diff --git a/packages/core-backend/src/ws/AccountActivityService.ts b/packages/core-backend/src/ws/AccountActivityService.ts
index 8245b6b9de1..35245580d35 100644
--- a/packages/core-backend/src/ws/AccountActivityService.ts
+++ b/packages/core-backend/src/ws/AccountActivityService.ts
@@ -19,20 +19,20 @@ import type {
} from '@metamask/remote-feature-flag-controller';
import { isObject } from '@metamask/utils';
-import { projectLogger, createModuleLogger } from '../logger';
+import { projectLogger, createModuleLogger } from '../logger.js';
import type {
Transaction,
AccountActivityMessage,
BalanceUpdate,
-} from '../types';
-import type { AccountActivityServiceMethodActions } from './AccountActivityService-method-action-types';
+} from '../types.js';
+import type { AccountActivityServiceMethodActions } from './AccountActivityService-method-action-types.js';
+import type { BackendWebSocketServiceMethodActions } from './BackendWebSocketService-method-action-types.js';
import type {
WebSocketConnectionInfo,
BackendWebSocketServiceConnectionStateChangedEvent,
ServerNotificationMessage,
-} from './BackendWebSocketService';
-import { WebSocketState } from './BackendWebSocketService';
-import type { BackendWebSocketServiceMethodActions } from './BackendWebSocketService-method-action-types';
+} from './BackendWebSocketService.js';
+import { WebSocketState } from './BackendWebSocketService.js';
// =============================================================================
// Types and Constants
@@ -254,13 +254,13 @@ export class AccountActivityService {
this.#messenger.subscribe(
'AccountTreeController:selectedAccountGroupChange',
// Promise result intentionally not awaited
- // eslint-disable-next-line @typescript-eslint/no-misused-promises
+
async () => await this.#handleSelectedAccountChange(),
);
this.#messenger.subscribe(
'BackendWebSocketService:connectionStateChanged',
// Promise result intentionally not awaited
- // eslint-disable-next-line @typescript-eslint/no-misused-promises
+
(connectionInfo: WebSocketConnectionInfo) =>
this.#handleWebSocketStateChange(connectionInfo),
);
@@ -268,7 +268,7 @@ export class AccountActivityService {
// eslint-disable-next-line no-restricted-syntax
'RemoteFeatureFlagController:stateChange',
// Promise result intentionally not awaited
- // eslint-disable-next-line @typescript-eslint/no-misused-promises
+
async () => await this.#handleFeatureFlagsStateChange(),
// Only react to changes in the set of enabled chain prefixes. The
// messenger compares selector results with strict equality, so the
@@ -393,7 +393,7 @@ export class AccountActivityService {
// Trace message receipt with latency from transaction time to now
// Promise result intentionally not awaited
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
+
this.#trace(
{
name: `${SERVICE_NAME} Transaction Message`,
diff --git a/packages/core-backend/src/ws/BackendWebSocketService-method-action-types.ts b/packages/core-backend/src/ws/BackendWebSocketService-method-action-types.ts
index deb59311c3d..2390ec62dcc 100644
--- a/packages/core-backend/src/ws/BackendWebSocketService-method-action-types.ts
+++ b/packages/core-backend/src/ws/BackendWebSocketService-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { BackendWebSocketService } from './BackendWebSocketService';
+import type { BackendWebSocketService } from './BackendWebSocketService.js';
/**
* Establishes WebSocket connection with smart reconnection behavior
diff --git a/packages/core-backend/src/ws/BackendWebSocketService.test.ts b/packages/core-backend/src/ws/BackendWebSocketService.test.ts
index 21dc19dcd90..75e7baf4482 100644
--- a/packages/core-backend/src/ws/BackendWebSocketService.test.ts
+++ b/packages/core-backend/src/ws/BackendWebSocketService.test.ts
@@ -5,18 +5,18 @@ import type {
MockAnyNamespace,
} from '@metamask/messenger';
-import { flushPromises } from '../../../../tests/helpers';
+import { flushPromises } from '../../../../tests/helpers.js';
import {
BackendWebSocketService,
getCloseReason,
WebSocketState,
WebSocketSubscription,
-} from './BackendWebSocketService';
+} from './BackendWebSocketService.js';
import type {
BackendWebSocketServiceOptions,
BackendWebSocketServiceMessenger,
ServerNotificationMessage,
-} from './BackendWebSocketService';
+} from './BackendWebSocketService.js';
// =====================================================
// TYPES
@@ -906,8 +906,7 @@ describe('BackendWebSocketService', () => {
// Mock Math.random to make Cockatiel's jitter deterministic
jest.spyOn(Math, 'random').mockReturnValue(0);
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
- service.connect();
+ void service.connect();
// Advance time past the timeout
await completeAsyncOperations(101);
@@ -956,8 +955,7 @@ describe('BackendWebSocketService', () => {
// Mock Math.random to make Cockatiel's jitter deterministic
jest.spyOn(Math, 'random').mockReturnValue(0);
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
- service.connect();
+ void service.connect();
await completeAsyncOperations(10);
// Verify we're in CONNECTING state
@@ -1028,8 +1026,7 @@ describe('BackendWebSocketService', () => {
jest.spyOn(Math, 'random').mockReturnValue(0);
// Start connection (this sets connectionTimeout)
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
- service.connect();
+ void service.connect();
await completeAsyncOperations(10);
const mockWs = getMockWebSocket();
@@ -1138,8 +1135,7 @@ describe('BackendWebSocketService', () => {
jest.spyOn(Math, 'random').mockReturnValue(0);
// Trigger a connection failure to schedule a reconnect
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
- service.connect();
+ void service.connect();
await completeAsyncOperations(10);
const mockWs = getMockWebSocket();
@@ -1178,8 +1174,7 @@ describe('BackendWebSocketService', () => {
jest.spyOn(Math, 'random').mockReturnValue(0);
// Trigger a connection failure to schedule a reconnect
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
- service.connect();
+ void service.connect();
await completeAsyncOperations(10);
const mockWs = getMockWebSocket();
@@ -1260,8 +1255,7 @@ describe('BackendWebSocketService', () => {
},
async ({ service, getMockWebSocket, completeAsyncOperations }) => {
// Start connecting
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
- service.connect();
+ void service.connect();
await completeAsyncOperations(0);
expect(service.getConnectionInfo().state).toBe(
diff --git a/packages/core-backend/src/ws/BackendWebSocketService.ts b/packages/core-backend/src/ws/BackendWebSocketService.ts
index b456a678c7c..df0cf5e0b86 100644
--- a/packages/core-backend/src/ws/BackendWebSocketService.ts
+++ b/packages/core-backend/src/ws/BackendWebSocketService.ts
@@ -9,8 +9,8 @@ import type { AuthenticationController } from '@metamask/profile-sync-controller
import { getErrorMessage } from '@metamask/utils';
import { v4 as uuidV4 } from 'uuid';
-import { projectLogger, createModuleLogger } from '../logger';
-import type { BackendWebSocketServiceMethodActions } from './BackendWebSocketService-method-action-types';
+import { projectLogger, createModuleLogger } from '../logger.js';
+import type { BackendWebSocketServiceMethodActions } from './BackendWebSocketService-method-action-types.js';
const SERVICE_NAME = 'BackendWebSocketService' as const;
@@ -1178,7 +1178,6 @@ export class BackendWebSocketService {
this.#scheduleReconnect();
}
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
this.#trace({
name: `${SERVICE_NAME} Disconnection`,
data: {
@@ -1426,7 +1425,7 @@ export class BackendWebSocketService {
// Trace notification processing wi th latency data
// Use stored channelType instead of parsing each time
// Promise result intentionally not awaited
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
+
this.#trace(
{
name: `${SERVICE_NAME} Notification`,
diff --git a/packages/core-backend/src/ws/ohlcv/OHLCVService-method-action-types.ts b/packages/core-backend/src/ws/ohlcv/OHLCVService-method-action-types.ts
index 6c30d853829..26b5e564ef5 100644
--- a/packages/core-backend/src/ws/ohlcv/OHLCVService-method-action-types.ts
+++ b/packages/core-backend/src/ws/ohlcv/OHLCVService-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { OHLCVService } from './OHLCVService';
+import type { OHLCVService } from './OHLCVService.js';
/**
* Subscribe to an OHLCV channel. If this is the first subscriber for the
diff --git a/packages/core-backend/src/ws/ohlcv/OHLCVService.test.ts b/packages/core-backend/src/ws/ohlcv/OHLCVService.test.ts
index 19a442779df..8a4709effcf 100644
--- a/packages/core-backend/src/ws/ohlcv/OHLCVService.test.ts
+++ b/packages/core-backend/src/ws/ohlcv/OHLCVService.test.ts
@@ -5,12 +5,12 @@ import type {
MockAnyNamespace,
} from '@metamask/messenger';
-import { flushPromises } from '../../../../../tests/helpers';
-import type { ServerNotificationMessage } from '../BackendWebSocketService';
-import { WebSocketState } from '../BackendWebSocketService';
-import { OHLCVService } from './OHLCVService';
-import type { OHLCVServiceMessenger } from './OHLCVService';
-import type { OHLCVSubscriptionOptions } from './types';
+import { flushPromises } from '../../../../../tests/helpers.js';
+import type { ServerNotificationMessage } from '../BackendWebSocketService.js';
+import { WebSocketState } from '../BackendWebSocketService.js';
+import { OHLCVService } from './OHLCVService.js';
+import type { OHLCVServiceMessenger } from './OHLCVService.js';
+import type { OHLCVSubscriptionOptions } from './types.js';
// =============================================================================
// Test Helpers
diff --git a/packages/core-backend/src/ws/ohlcv/OHLCVService.ts b/packages/core-backend/src/ws/ohlcv/OHLCVService.ts
index f729bbf8fea..6bacc2a0514 100644
--- a/packages/core-backend/src/ws/ohlcv/OHLCVService.ts
+++ b/packages/core-backend/src/ws/ohlcv/OHLCVService.ts
@@ -15,16 +15,16 @@ import type {
import type { Messenger } from '@metamask/messenger';
import { Mutex } from 'async-mutex';
-import { projectLogger, createModuleLogger } from '../../logger';
+import { projectLogger, createModuleLogger } from '../../logger.js';
+import type { BackendWebSocketServiceMethodActions } from '../BackendWebSocketService-method-action-types.js';
import type {
WebSocketConnectionInfo,
BackendWebSocketServiceConnectionStateChangedEvent,
ServerNotificationMessage,
-} from '../BackendWebSocketService';
-import { WebSocketState } from '../BackendWebSocketService';
-import type { BackendWebSocketServiceMethodActions } from '../BackendWebSocketService-method-action-types';
-import type { OHLCVServiceMethodActions } from './OHLCVService-method-action-types';
-import type { OHLCVBar, OHLCVSubscriptionOptions } from './types';
+} from '../BackendWebSocketService.js';
+import { WebSocketState } from '../BackendWebSocketService.js';
+import type { OHLCVServiceMethodActions } from './OHLCVService-method-action-types.js';
+import type { OHLCVBar, OHLCVSubscriptionOptions } from './types.js';
// =============================================================================
// Constants
@@ -184,7 +184,7 @@ export class OHLCVService {
this.#messenger.subscribe(
'BackendWebSocketService:connectionStateChanged',
- // eslint-disable-next-line @typescript-eslint/no-misused-promises
+
(connectionInfo: WebSocketConnectionInfo) =>
this.#handleWebSocketStateChange(connectionInfo),
);
@@ -442,7 +442,6 @@ export class OHLCVService {
): void {
const bar = notification.data as OHLCVBar;
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
this.#trace(
{
name: `${SERVICE_NAME} Bar Update`,
diff --git a/packages/core-backend/src/ws/ohlcv/index.ts b/packages/core-backend/src/ws/ohlcv/index.ts
index e40d24d8c36..7f99a9178c9 100644
--- a/packages/core-backend/src/ws/ohlcv/index.ts
+++ b/packages/core-backend/src/ws/ohlcv/index.ts
@@ -1,8 +1,8 @@
-export { OHLCVService } from './OHLCVService';
+export { OHLCVService } from './OHLCVService.js';
export {
OHLCV_SERVICE_ALLOWED_ACTIONS,
OHLCV_SERVICE_ALLOWED_EVENTS,
-} from './OHLCVService';
+} from './OHLCVService.js';
export type {
OHLCVSystemNotificationData,
OHLCVServiceOptions,
@@ -14,5 +14,5 @@ export type {
OHLCVServiceEvents,
AllowedEvents as OHLCVServiceAllowedEvents,
OHLCVServiceMessenger,
-} from './OHLCVService';
-export type { OHLCVBar, OHLCVSubscriptionOptions } from './types';
+} from './OHLCVService.js';
+export type { OHLCVBar, OHLCVSubscriptionOptions } from './types.js';
diff --git a/packages/delegation-controller/jest.config.js b/packages/delegation-controller/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/delegation-controller/jest.config.js
+++ b/packages/delegation-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/delegation-controller/package.json b/packages/delegation-controller/package.json
index 83a7c3eb014..d0e1b02ece2 100644
--- a/packages/delegation-controller/package.json
+++ b/packages/delegation-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/delegation-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/delegation-controller",
@@ -62,7 +55,6 @@
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/delegation-controller/src/DelegationController-method-action-types.ts b/packages/delegation-controller/src/DelegationController-method-action-types.ts
index 1a9aef56e27..18d17f8e296 100644
--- a/packages/delegation-controller/src/DelegationController-method-action-types.ts
+++ b/packages/delegation-controller/src/DelegationController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { DelegationController } from './DelegationController';
+import type { DelegationController } from './DelegationController.js';
/**
* Signs a delegation.
diff --git a/packages/delegation-controller/src/DelegationController.test.ts b/packages/delegation-controller/src/DelegationController.test.ts
index 5e885b7ed36..1c0a43d7f56 100644
--- a/packages/delegation-controller/src/DelegationController.test.ts
+++ b/packages/delegation-controller/src/DelegationController.test.ts
@@ -8,8 +8,11 @@ import type {
} from '@metamask/messenger';
import { hexToNumber } from '@metamask/utils';
-import { ROOT_AUTHORITY } from './constants';
-import { controllerName, DelegationController } from './DelegationController';
+import { ROOT_AUTHORITY } from './constants.js';
+import {
+ controllerName,
+ DelegationController,
+} from './DelegationController.js';
import type {
Address,
Delegation,
@@ -17,8 +20,8 @@ import type {
DelegationControllerState,
DeleGatorEnvironment,
Hex,
-} from './types';
-import { toDelegationStruct } from './utils';
+} from './types.js';
+import { toDelegationStruct } from './utils.js';
type AllDelegationControllerActions =
MessengerActions;
diff --git a/packages/delegation-controller/src/DelegationController.ts b/packages/delegation-controller/src/DelegationController.ts
index 98e399368ab..3118641fd0f 100644
--- a/packages/delegation-controller/src/DelegationController.ts
+++ b/packages/delegation-controller/src/DelegationController.ts
@@ -9,8 +9,8 @@ import type {
DeleGatorEnvironment,
Hex,
UnsignedDelegation,
-} from './types';
-import { createTypedMessageParams } from './utils';
+} from './types.js';
+import { createTypedMessageParams } from './utils.js';
export const controllerName = 'DelegationController';
diff --git a/packages/delegation-controller/src/constants.ts b/packages/delegation-controller/src/constants.ts
index a68f311fdc2..1177f1ad590 100644
--- a/packages/delegation-controller/src/constants.ts
+++ b/packages/delegation-controller/src/constants.ts
@@ -1,4 +1,4 @@
-import type { Hex } from './types';
+import type { Hex } from './types.js';
export const ROOT_AUTHORITY =
'0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' as Hex;
diff --git a/packages/delegation-controller/src/index.ts b/packages/delegation-controller/src/index.ts
index 493f3caaec6..3e9050f0936 100644
--- a/packages/delegation-controller/src/index.ts
+++ b/packages/delegation-controller/src/index.ts
@@ -1,9 +1,9 @@
-export type { DelegationControllerSignDelegationAction } from './DelegationController-method-action-types';
+export type { DelegationControllerSignDelegationAction } from './DelegationController-method-action-types.js';
export type {
DelegationControllerGetStateAction,
DelegationControllerActions,
DelegationControllerEvents,
DelegationControllerMessenger,
-} from './types';
+} from './types.js';
-export { DelegationController } from './DelegationController';
+export { DelegationController } from './DelegationController.js';
diff --git a/packages/delegation-controller/src/types.ts b/packages/delegation-controller/src/types.ts
index 7566053570c..9802ca94048 100644
--- a/packages/delegation-controller/src/types.ts
+++ b/packages/delegation-controller/src/types.ts
@@ -5,8 +5,8 @@ import type {
import type { KeyringControllerSignTypedMessageAction } from '@metamask/keyring-controller';
import type { Messenger } from '@metamask/messenger';
-import type { controllerName } from './DelegationController';
-import type { DelegationControllerMethodActions } from './DelegationController-method-action-types';
+import type { DelegationControllerMethodActions } from './DelegationController-method-action-types.js';
+import type { controllerName } from './DelegationController.js';
type Hex = `0x${string}`;
type Address = `0x${string}`;
diff --git a/packages/delegation-controller/src/utils.ts b/packages/delegation-controller/src/utils.ts
index edefcd88ad8..02da461f9ed 100644
--- a/packages/delegation-controller/src/utils.ts
+++ b/packages/delegation-controller/src/utils.ts
@@ -1,8 +1,8 @@
import type { TypedMessageParams } from '@metamask/keyring-controller';
import { getChecksumAddress } from '@metamask/utils';
-import { SIGNABLE_DELEGATION_TYPED_DATA } from './constants';
-import type { Address, Delegation, DelegationStruct } from './types';
+import { SIGNABLE_DELEGATION_TYPED_DATA } from './constants.js';
+import type { Address, Delegation, DelegationStruct } from './types.js';
type CreateTypedMessageParamsOptions = {
chainId: number;
diff --git a/packages/earn-controller/jest.config.js b/packages/earn-controller/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/earn-controller/jest.config.js
+++ b/packages/earn-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/earn-controller/package.json b/packages/earn-controller/package.json
index d15c7b66aa3..3108dfafbb1 100644
--- a/packages/earn-controller/package.json
+++ b/packages/earn-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/earn-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/earn-controller",
@@ -69,7 +62,6 @@
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
"@metamask/transaction-controller": "^69.0.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/earn-controller/src/EarnController-method-action-types.ts b/packages/earn-controller/src/EarnController-method-action-types.ts
index 6171c7c4887..6d5f29a0620 100644
--- a/packages/earn-controller/src/EarnController-method-action-types.ts
+++ b/packages/earn-controller/src/EarnController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { EarnController } from './EarnController';
+import type { EarnController } from './EarnController.js';
/**
* Refreshes the pooled stakes data for the current account.
diff --git a/packages/earn-controller/src/EarnController.test.ts b/packages/earn-controller/src/EarnController.test.ts
index 7dbf3b1ca41..39c48388350 100644
--- a/packages/earn-controller/src/EarnController.test.ts
+++ b/packages/earn-controller/src/EarnController.test.ts
@@ -20,19 +20,19 @@ import type {
LendingMarket,
} from '@metamask/stake-sdk';
-import type { TransactionMeta } from '../../transaction-controller/src';
+import type { TransactionMeta } from '../../transaction-controller/src.js';
import {
TransactionStatus,
TransactionType,
-} from '../../transaction-controller/src';
+} from '../../transaction-controller/src.js';
import {
EarnController,
DEFAULT_POOLED_STAKING_CHAIN_STATE,
-} from './EarnController';
+} from './EarnController.js';
import type {
EarnControllerState,
EarnControllerMessenger,
-} from './EarnController';
+} from './EarnController.js';
type AllEarnControllerActions = MessengerActions;
diff --git a/packages/earn-controller/src/EarnController.ts b/packages/earn-controller/src/EarnController.ts
index 8715795ba48..7a0ade618a6 100644
--- a/packages/earn-controller/src/EarnController.ts
+++ b/packages/earn-controller/src/EarnController.ts
@@ -47,14 +47,14 @@ import type {
TransactionMeta,
} from '@metamask/transaction-controller';
-import type { EarnControllerMethodActions } from './EarnController-method-action-types';
+import type { EarnControllerMethodActions } from './EarnController-method-action-types.js';
import type {
RefreshEarnEligibilityOptions,
RefreshLendingPositionsOptions,
RefreshPooledStakesOptions,
RefreshPooledStakingDataOptions,
RefreshPooledStakingVaultDailyApysOptions,
-} from './types';
+} from './types.js';
export const controllerName = 'EarnController';
diff --git a/packages/earn-controller/src/index.ts b/packages/earn-controller/src/index.ts
index a81e5525ce5..ee1e978106e 100644
--- a/packages/earn-controller/src/index.ts
+++ b/packages/earn-controller/src/index.ts
@@ -11,14 +11,14 @@ export type {
EarnControllerActions,
EarnControllerEvents,
EarnControllerMessenger,
-} from './EarnController';
+} from './EarnController.js';
export {
controllerName,
getDefaultEarnControllerState,
DEFAULT_TRON_STAKING_STATE,
EarnController,
-} from './EarnController';
+} from './EarnController.js';
export type {
EarnControllerRefreshPooledStakesAction,
@@ -40,7 +40,7 @@ export type {
EarnControllerGetLendingTokenAllowanceAction,
EarnControllerGetLendingTokenMaxWithdrawAction,
EarnControllerGetLendingTokenMaxDepositAction,
-} from './EarnController-method-action-types';
+} from './EarnController-method-action-types.js';
export {
selectLendingMarkets,
@@ -62,7 +62,7 @@ export {
selectLendingMarketsByChainIdAndTokenAddress,
selectTronStaking,
selectTronStakingApy,
-} from './selectors';
+} from './selectors.js';
export {
CHAIN_ID_TO_AAVE_POOL_CONTRACT,
diff --git a/packages/earn-controller/src/selectors.test.ts b/packages/earn-controller/src/selectors.test.ts
index 3bd1805ba5d..b0d08de1de7 100644
--- a/packages/earn-controller/src/selectors.test.ts
+++ b/packages/earn-controller/src/selectors.test.ts
@@ -3,7 +3,7 @@ import type { LendingMarket } from '@metamask/stake-sdk';
import type {
EarnControllerState,
LendingPositionWithMarket,
-} from './EarnController';
+} from './EarnController.js';
import {
selectLendingMarkets,
selectLendingPositions,
@@ -24,7 +24,7 @@ import {
selectIsLendingEligible,
selectTronStaking,
selectTronStakingApy,
-} from './selectors';
+} from './selectors.js';
describe('Earn Controller Selectors', () => {
const mockMarket1: LendingMarket = {
diff --git a/packages/earn-controller/src/selectors.ts b/packages/earn-controller/src/selectors.ts
index b2d454539c5..21c400fce14 100644
--- a/packages/earn-controller/src/selectors.ts
+++ b/packages/earn-controller/src/selectors.ts
@@ -6,7 +6,7 @@ import type {
LendingMarketWithPosition,
LendingPositionWithMarket,
LendingPositionWithMarketReference,
-} from './EarnController';
+} from './EarnController.js';
export const selectLendingMarkets = (
state: EarnControllerState,
diff --git a/packages/eip-5792-middleware/jest.config.js b/packages/eip-5792-middleware/jest.config.js
index 70d67779fbe..8a6b1e06416 100644
--- a/packages/eip-5792-middleware/jest.config.js
+++ b/packages/eip-5792-middleware/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/eip-5792-middleware/package.json b/packages/eip-5792-middleware/package.json
index 81a3f4c1ec9..07a859422ba 100644
--- a/packages/eip-5792-middleware/package.json
+++ b/packages/eip-5792-middleware/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/eip-5792-middleware",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/eip-5792-middleware",
@@ -58,14 +51,13 @@
"@metamask/superstruct": "^3.1.0",
"@metamask/transaction-controller": "^69.0.0",
"@metamask/utils": "^11.11.0",
- "lodash": "^4.17.21",
+ "lodash-es": "^4.17.21",
"uuid": "^8.3.2"
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
"@metamask/keyring-controller": "^27.1.0",
"@metamask/rpc-errors": "^7.0.2",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/eip-5792-middleware/src/hooks/getCallsStatus.test.ts b/packages/eip-5792-middleware/src/hooks/getCallsStatus.test.ts
index bad969e7917..ed4ddfa0f03 100644
--- a/packages/eip-5792-middleware/src/hooks/getCallsStatus.test.ts
+++ b/packages/eip-5792-middleware/src/hooks/getCallsStatus.test.ts
@@ -6,9 +6,9 @@ import type {
TransactionControllerState,
} from '@metamask/transaction-controller';
-import { GetCallsStatusCode } from '../constants';
-import type { EIP5792Messenger } from '../types';
-import { getCallsStatus } from './getCallsStatus';
+import { GetCallsStatusCode } from '../constants.js';
+import type { EIP5792Messenger } from '../types.js';
+import { getCallsStatus } from './getCallsStatus.js';
const CHAIN_ID_MOCK = '0x123';
const BATCH_ID_MOCK = '0xf3472db2a4134607a17213b7e9ca26e3';
diff --git a/packages/eip-5792-middleware/src/hooks/getCallsStatus.ts b/packages/eip-5792-middleware/src/hooks/getCallsStatus.ts
index f3af9bb27eb..3ec4642f45f 100644
--- a/packages/eip-5792-middleware/src/hooks/getCallsStatus.ts
+++ b/packages/eip-5792-middleware/src/hooks/getCallsStatus.ts
@@ -1,14 +1,10 @@
import { JsonRpcError } from '@metamask/rpc-errors';
-import type {
- Log,
- TransactionMeta,
- TransactionReceipt,
-} from '@metamask/transaction-controller';
+import type { Log, TransactionMeta } from '@metamask/transaction-controller';
import { TransactionStatus } from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
-import { EIP5792ErrorCode, GetCallsStatusCode, VERSION } from '../constants';
-import type { EIP5792Messenger, GetCallsStatusResult } from '../types';
+import { EIP5792ErrorCode, GetCallsStatusCode, VERSION } from '../constants.js';
+import type { EIP5792Messenger, GetCallsStatusResult } from '../types.js';
/**
* Retrieves the status of a transaction batch by its ID.
@@ -36,7 +32,7 @@ export function getCallsStatus(
const transaction = transactions[0];
const { chainId, txReceipt: rawTxReceipt } = transaction;
const status = getStatusCode(transaction);
- const txReceipt = rawTxReceipt as Required | undefined;
+ const txReceipt = rawTxReceipt;
const logs = (txReceipt?.logs ?? []) as Required[];
const receipts: GetCallsStatusResult['receipts'] = txReceipt && [
diff --git a/packages/eip-5792-middleware/src/hooks/getCapabilities.test.ts b/packages/eip-5792-middleware/src/hooks/getCapabilities.test.ts
index e85be86bbc6..5ad6c431f07 100644
--- a/packages/eip-5792-middleware/src/hooks/getCapabilities.test.ts
+++ b/packages/eip-5792-middleware/src/hooks/getCapabilities.test.ts
@@ -12,8 +12,8 @@ import type {
import type { TransactionController } from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
-import type { EIP5792Messenger } from '../types';
-import { getCapabilities } from './getCapabilities';
+import type { EIP5792Messenger } from '../types.js';
+import { getCapabilities } from './getCapabilities.js';
const CHAIN_ID_MOCK = '0x123';
const FROM_MOCK = '0xabc123';
diff --git a/packages/eip-5792-middleware/src/hooks/getCapabilities.ts b/packages/eip-5792-middleware/src/hooks/getCapabilities.ts
index 7fb74ac62ae..8e749071208 100644
--- a/packages/eip-5792-middleware/src/hooks/getCapabilities.ts
+++ b/packages/eip-5792-middleware/src/hooks/getCapabilities.ts
@@ -1,13 +1,12 @@
import type {
IsAtomicBatchSupportedResult,
- IsAtomicBatchSupportedResultEntry,
TransactionController,
} from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
-import { KEYRING_TYPES_SUPPORTING_7702 } from '../constants';
-import type { EIP5792Messenger, GetCapabilitiesResult } from '../types';
-import { getAccountKeyringType } from '../utils';
+import { KEYRING_TYPES_SUPPORTING_7702 } from '../constants.js';
+import type { EIP5792Messenger, GetCapabilitiesResult } from '../types.js';
+import { getAccountKeyringType } from '../utils.js';
/**
* Type definition for required controller hooks and utilities of {@link getCapabilities}
@@ -79,11 +78,10 @@ export async function getCapabilities(
);
return chainIdsNormalized.reduce((acc, chainId) => {
- const chainBatchSupport = (batchSupport.find(
- ({ chainId: batchChainId }) => batchChainId === chainId,
- ) ?? {}) as IsAtomicBatchSupportedResultEntry & {
- isRelaySupported: boolean;
- };
+ const chainBatchSupport =
+ batchSupport.find(
+ ({ chainId: batchChainId }) => batchChainId === chainId,
+ ) ?? {};
const { delegationAddress, isSupported, upgradeContractAddress } =
chainBatchSupport;
@@ -169,11 +167,10 @@ async function getAlternateGasFeesCapability(
}));
return chainIds.reduce((acc, chainId) => {
- const chainBatchSupport = (updatedBatchSupport.find(
- ({ chainId: batchChainId }) => batchChainId === chainId,
- ) ?? {}) as IsAtomicBatchSupportedResultEntry & {
- relaySupportedForChain: boolean;
- };
+ const chainBatchSupport =
+ updatedBatchSupport.find(
+ ({ chainId: batchChainId }) => batchChainId === chainId,
+ ) ?? {};
const { isSupported = false, relaySupportedForChain } = chainBatchSupport;
diff --git a/packages/eip-5792-middleware/src/hooks/processSendCalls.test.ts b/packages/eip-5792-middleware/src/hooks/processSendCalls.test.ts
index 6402b1fdade..5098fc743f9 100644
--- a/packages/eip-5792-middleware/src/hooks/processSendCalls.test.ts
+++ b/packages/eip-5792-middleware/src/hooks/processSendCalls.test.ts
@@ -16,13 +16,13 @@ import { providerErrors } from '@metamask/rpc-errors';
import type { TransactionController } from '@metamask/transaction-controller';
import type { Hex, JsonRpcRequest } from '@metamask/utils';
-import { SupportedCapabilities } from '../constants';
+import { SupportedCapabilities } from '../constants.js';
import type {
SendCallsPayload,
SendCallsParams,
EIP5792Messenger,
-} from '../types';
-import { processSendCalls } from './processSendCalls';
+} from '../types.js';
+import { processSendCalls } from './processSendCalls.js';
const CHAIN_ID_MOCK = '0x123';
const CHAIN_ID_2_MOCK = '0xabc';
diff --git a/packages/eip-5792-middleware/src/hooks/processSendCalls.ts b/packages/eip-5792-middleware/src/hooks/processSendCalls.ts
index 9f97779612a..416ffcd5ba0 100644
--- a/packages/eip-5792-middleware/src/hooks/processSendCalls.ts
+++ b/packages/eip-5792-middleware/src/hooks/processSendCalls.ts
@@ -11,7 +11,7 @@ import type {
import { TransactionEnvelopeType } from '@metamask/transaction-controller';
import type { Hex, JsonRpcRequest } from '@metamask/utils';
import { add0x, bytesToHex } from '@metamask/utils';
-import { groupBy } from 'lodash';
+import { groupBy } from 'lodash-es';
import { parse, v4 as uuid } from 'uuid';
import {
@@ -21,14 +21,14 @@ import {
MessageType,
SupportedCapabilities,
VERSION,
-} from '../constants';
+} from '../constants.js';
import type {
EIP5792Messenger,
SendCallsPayload,
SendCallsRequiredAssetsParam,
SendCallsResult,
-} from '../types';
-import { getAccountKeyringType } from '../utils';
+} from '../types.js';
+import { getAccountKeyringType } from '../utils.js';
/**
* Type definition for required controller hooks and utilities of {@link processSendCalls}
diff --git a/packages/eip-5792-middleware/src/index.test.ts b/packages/eip-5792-middleware/src/index.test.ts
index 6b99a379ce6..cf9321f8f42 100644
--- a/packages/eip-5792-middleware/src/index.test.ts
+++ b/packages/eip-5792-middleware/src/index.test.ts
@@ -1,4 +1,4 @@
-import * as allExports from '.';
+import * as allExports from './..js';
describe('@metamask/eip-5792-middleware', () => {
it('has expected JavaScript exports', () => {
diff --git a/packages/eip-5792-middleware/src/index.ts b/packages/eip-5792-middleware/src/index.ts
index d8e09244a9c..bf283cbd37f 100644
--- a/packages/eip-5792-middleware/src/index.ts
+++ b/packages/eip-5792-middleware/src/index.ts
@@ -1,17 +1,17 @@
export type {
ProcessSendCallsRequest,
ProcessSendCallsHooks,
-} from './hooks/processSendCalls';
-export { processSendCalls } from './hooks/processSendCalls';
-export { getCallsStatus } from './hooks/getCallsStatus';
+} from './hooks/processSendCalls.js';
+export { processSendCalls } from './hooks/processSendCalls.js';
+export { getCallsStatus } from './hooks/getCallsStatus.js';
export {
getCapabilities,
type GetCapabilitiesHooks,
-} from './hooks/getCapabilities';
-export { walletSendCalls } from './methods/wallet_sendCalls';
-export { walletGetCallsStatus } from './methods/wallet_getCallsStatus';
-export { walletGetCapabilities } from './methods/wallet_getCapabilities';
-export type { EIP5792Messenger } from './types';
+} from './hooks/getCapabilities.js';
+export { walletSendCalls } from './methods/wallet_sendCalls.js';
+export { walletGetCallsStatus } from './methods/wallet_getCallsStatus.js';
+export { walletGetCapabilities } from './methods/wallet_getCapabilities.js';
+export type { EIP5792Messenger } from './types.js';
export type {
GetCallsStatusHook,
@@ -24,4 +24,4 @@ export type {
SendCallsPayload as SendCalls,
SendCallsParams,
SendCallsResult,
-} from './types';
+} from './types.js';
diff --git a/packages/eip-5792-middleware/src/methods/wallet_getCallsStatus.test.ts b/packages/eip-5792-middleware/src/methods/wallet_getCallsStatus.test.ts
index 2dd2dd69fec..ae9b2c8c8d2 100644
--- a/packages/eip-5792-middleware/src/methods/wallet_getCallsStatus.test.ts
+++ b/packages/eip-5792-middleware/src/methods/wallet_getCallsStatus.test.ts
@@ -9,8 +9,8 @@ import type {
GetCallsStatusHook,
GetCallsStatusParams,
GetCallsStatusResult,
-} from '../types';
-import { walletGetCallsStatus } from './wallet_getCallsStatus';
+} from '../types.js';
+import { walletGetCallsStatus } from './wallet_getCallsStatus.js';
const ID_MOCK = '0x12345678';
diff --git a/packages/eip-5792-middleware/src/methods/wallet_getCallsStatus.ts b/packages/eip-5792-middleware/src/methods/wallet_getCallsStatus.ts
index 3023ec9b44b..e3a3bf60a2a 100644
--- a/packages/eip-5792-middleware/src/methods/wallet_getCallsStatus.ts
+++ b/packages/eip-5792-middleware/src/methods/wallet_getCallsStatus.ts
@@ -1,9 +1,9 @@
import { rpcErrors } from '@metamask/rpc-errors';
import type { JsonRpcRequest, PendingJsonRpcResponse } from '@metamask/utils';
-import { GetCallsStatusStruct } from '../types';
-import type { GetCallsStatusHook } from '../types';
-import { validateParams } from '../utils';
+import { GetCallsStatusStruct } from '../types.js';
+import type { GetCallsStatusHook } from '../types.js';
+import { validateParams } from '../utils.js';
/**
* The RPC method handler middleware for `wallet_getCallStatus`
diff --git a/packages/eip-5792-middleware/src/methods/wallet_getCapabilities.test.ts b/packages/eip-5792-middleware/src/methods/wallet_getCapabilities.test.ts
index a53a058d073..01e7cd10655 100644
--- a/packages/eip-5792-middleware/src/methods/wallet_getCapabilities.test.ts
+++ b/packages/eip-5792-middleware/src/methods/wallet_getCapabilities.test.ts
@@ -5,8 +5,8 @@ import type {
GetCapabilitiesHook,
GetCapabilitiesParams,
GetCapabilitiesResult,
-} from '../types';
-import { walletGetCapabilities } from './wallet_getCapabilities';
+} from '../types.js';
+import { walletGetCapabilities } from './wallet_getCapabilities.js';
type GetPermittedAccountsForOrigin = () => Promise;
diff --git a/packages/eip-5792-middleware/src/methods/wallet_getCapabilities.ts b/packages/eip-5792-middleware/src/methods/wallet_getCapabilities.ts
index de68a51e325..989da9965ff 100644
--- a/packages/eip-5792-middleware/src/methods/wallet_getCapabilities.ts
+++ b/packages/eip-5792-middleware/src/methods/wallet_getCapabilities.ts
@@ -1,9 +1,9 @@
import { rpcErrors } from '@metamask/rpc-errors';
import type { JsonRpcRequest, PendingJsonRpcResponse } from '@metamask/utils';
-import { GetCapabilitiesStruct } from '../types';
-import type { GetCapabilitiesHook } from '../types';
-import { validateAndNormalizeKeyholder, validateParams } from '../utils';
+import { GetCapabilitiesStruct } from '../types.js';
+import type { GetCapabilitiesHook } from '../types.js';
+import { validateAndNormalizeKeyholder, validateParams } from '../utils.js';
/**
* The RPC method handler middleware for `wallet_getCapabilities`
diff --git a/packages/eip-5792-middleware/src/methods/wallet_sendCalls.test.ts b/packages/eip-5792-middleware/src/methods/wallet_sendCalls.test.ts
index fd77076be8b..0b34d1b25fc 100644
--- a/packages/eip-5792-middleware/src/methods/wallet_sendCalls.test.ts
+++ b/packages/eip-5792-middleware/src/methods/wallet_sendCalls.test.ts
@@ -5,8 +5,8 @@ import type {
ProcessSendCallsHook,
SendCallsPayload,
SendCallsParams,
-} from '../types';
-import { walletSendCalls } from './wallet_sendCalls';
+} from '../types.js';
+import { walletSendCalls } from './wallet_sendCalls.js';
type GetPermittedAccountsForOrigin = () => Promise;
diff --git a/packages/eip-5792-middleware/src/methods/wallet_sendCalls.ts b/packages/eip-5792-middleware/src/methods/wallet_sendCalls.ts
index 9c3d391c485..e61401afe9d 100644
--- a/packages/eip-5792-middleware/src/methods/wallet_sendCalls.ts
+++ b/packages/eip-5792-middleware/src/methods/wallet_sendCalls.ts
@@ -1,9 +1,9 @@
import { rpcErrors } from '@metamask/rpc-errors';
import type { JsonRpcRequest, PendingJsonRpcResponse } from '@metamask/utils';
-import { SendCallsStruct } from '../types';
-import type { ProcessSendCallsHook, SendCallsPayload } from '../types';
-import { validateAndNormalizeKeyholder, validateParams } from '../utils';
+import { SendCallsStruct } from '../types.js';
+import type { ProcessSendCallsHook, SendCallsPayload } from '../types.js';
+import { validateAndNormalizeKeyholder, validateParams } from '../utils.js';
/**
* The RPC method handler middleware for `wallet_sendCalls`
diff --git a/packages/eip-5792-middleware/src/utils.test.ts b/packages/eip-5792-middleware/src/utils.test.ts
index f9fadc5fa59..5bbfb616537 100644
--- a/packages/eip-5792-middleware/src/utils.test.ts
+++ b/packages/eip-5792-middleware/src/utils.test.ts
@@ -4,13 +4,13 @@ import type { StructError } from '@metamask/superstruct';
import { any, validate } from '@metamask/superstruct';
import type { Hex } from '@metamask/utils';
-import { EIP5792ErrorCode } from './constants';
-import type { EIP5792Messenger } from './types';
+import { EIP5792ErrorCode } from './constants.js';
+import type { EIP5792Messenger } from './types.js';
import {
getAccountKeyringType,
validateAndNormalizeKeyholder,
validateParams,
-} from './utils';
+} from './utils.js';
jest.mock('@metamask/superstruct', () => ({
...jest.requireActual('@metamask/superstruct'),
diff --git a/packages/eip-5792-middleware/src/utils.ts b/packages/eip-5792-middleware/src/utils.ts
index c888ceafde9..f473eddebbe 100644
--- a/packages/eip-5792-middleware/src/utils.ts
+++ b/packages/eip-5792-middleware/src/utils.ts
@@ -4,8 +4,8 @@ import type { Struct, StructError } from '@metamask/superstruct';
import { validate } from '@metamask/superstruct';
import type { Hex } from '@metamask/utils';
-import { EIP5792ErrorCode } from './constants';
-import type { EIP5792Messenger } from './types';
+import { EIP5792ErrorCode } from './constants.js';
+import type { EIP5792Messenger } from './types.js';
/**
* Retrieves the keyring type for a given account address.
diff --git a/packages/eip-7702-internal-rpc-middleware/jest.config.js b/packages/eip-7702-internal-rpc-middleware/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/eip-7702-internal-rpc-middleware/jest.config.js
+++ b/packages/eip-7702-internal-rpc-middleware/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/eip-7702-internal-rpc-middleware/package.json b/packages/eip-7702-internal-rpc-middleware/package.json
index ba2539da905..4bdb8434d53 100644
--- a/packages/eip-7702-internal-rpc-middleware/package.json
+++ b/packages/eip-7702-internal-rpc-middleware/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/eip-7702-internal-rpc-middleware",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/eip-7702-internal-rpc-middleware",
@@ -60,7 +53,6 @@
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/eip-7702-internal-rpc-middleware/src/index.ts b/packages/eip-7702-internal-rpc-middleware/src/index.ts
index 09ee48299bb..443b9000b16 100644
--- a/packages/eip-7702-internal-rpc-middleware/src/index.ts
+++ b/packages/eip-7702-internal-rpc-middleware/src/index.ts
@@ -1,12 +1,12 @@
// Method handlers
-export { walletUpgradeAccount } from './wallet_upgradeAccount';
-export { walletGetAccountUpgradeStatus } from './wallet_getAccountUpgradeStatus';
+export { walletUpgradeAccount } from './wallet_upgradeAccount.js';
+export { walletGetAccountUpgradeStatus } from './wallet_getAccountUpgradeStatus.js';
// Utilities
-export { validateParams, validateAndNormalizeAddress } from './utils';
+export { validateParams, validateAndNormalizeAddress } from './utils.js';
// Constants
-export { METHOD_NAMES } from './constants';
+export { METHOD_NAMES } from './constants.js';
// Types
export type {
@@ -14,4 +14,4 @@ export type {
UpgradeAccountResult,
GetAccountUpgradeStatusParams,
GetAccountUpgradeStatusResult,
-} from './types';
+} from './types.js';
diff --git a/packages/eip-7702-internal-rpc-middleware/src/utils.test.ts b/packages/eip-7702-internal-rpc-middleware/src/utils.test.ts
index c7b7afc962b..701335f7c42 100644
--- a/packages/eip-7702-internal-rpc-middleware/src/utils.test.ts
+++ b/packages/eip-7702-internal-rpc-middleware/src/utils.test.ts
@@ -2,7 +2,7 @@ import { providerErrors, rpcErrors } from '@metamask/rpc-errors';
import { object, string, number } from '@metamask/superstruct';
import type { Hex } from '@metamask/utils';
-import { validateParams, validateAndNormalizeAddress } from './utils';
+import { validateParams, validateAndNormalizeAddress } from './utils.js';
describe('validateParams', () => {
it('does not throw for valid parameters', () => {
diff --git a/packages/eip-7702-internal-rpc-middleware/src/wallet_getAccountUpgradeStatus.test.ts b/packages/eip-7702-internal-rpc-middleware/src/wallet_getAccountUpgradeStatus.test.ts
index 2c6edb15fd8..a7f10663c4f 100644
--- a/packages/eip-7702-internal-rpc-middleware/src/wallet_getAccountUpgradeStatus.test.ts
+++ b/packages/eip-7702-internal-rpc-middleware/src/wallet_getAccountUpgradeStatus.test.ts
@@ -1,8 +1,8 @@
import { rpcErrors } from '@metamask/rpc-errors';
import type { JsonRpcRequest, PendingJsonRpcResponse } from '@metamask/utils';
-import type { GetAccountUpgradeStatusParams } from './types';
-import { walletGetAccountUpgradeStatus } from './wallet_getAccountUpgradeStatus';
+import type { GetAccountUpgradeStatusParams } from './types.js';
+import { walletGetAccountUpgradeStatus } from './wallet_getAccountUpgradeStatus.js';
const TEST_ACCOUNT = '0x1234567890123456789012345678901234567890';
const NETWORK_CLIENT_ID = 'mainnet';
diff --git a/packages/eip-7702-internal-rpc-middleware/src/wallet_getAccountUpgradeStatus.ts b/packages/eip-7702-internal-rpc-middleware/src/wallet_getAccountUpgradeStatus.ts
index 41a2aa631fb..c72e6289aa3 100644
--- a/packages/eip-7702-internal-rpc-middleware/src/wallet_getAccountUpgradeStatus.ts
+++ b/packages/eip-7702-internal-rpc-middleware/src/wallet_getAccountUpgradeStatus.ts
@@ -6,10 +6,10 @@ import type {
Hex,
} from '@metamask/utils';
-import { DELEGATION_INDICATOR_PREFIX } from './constants';
-import type { GetAccountUpgradeStatusParams } from './types';
-import { GetAccountUpgradeStatusParamsStruct } from './types';
-import { validateParams, validateAndNormalizeAddress } from './utils';
+import { DELEGATION_INDICATOR_PREFIX } from './constants.js';
+import type { GetAccountUpgradeStatusParams } from './types.js';
+import { GetAccountUpgradeStatusParamsStruct } from './types.js';
+import { validateParams, validateAndNormalizeAddress } from './utils.js';
export type WalletGetAccountUpgradeStatusHooks = {
getCurrentChainIdForDomain: (origin: string) => Hex | null;
diff --git a/packages/eip-7702-internal-rpc-middleware/src/wallet_upgradeAccount.test.ts b/packages/eip-7702-internal-rpc-middleware/src/wallet_upgradeAccount.test.ts
index d80eacbca20..03d5339d708 100644
--- a/packages/eip-7702-internal-rpc-middleware/src/wallet_upgradeAccount.test.ts
+++ b/packages/eip-7702-internal-rpc-middleware/src/wallet_upgradeAccount.test.ts
@@ -1,8 +1,8 @@
import { rpcErrors } from '@metamask/rpc-errors';
import type { JsonRpcRequest, PendingJsonRpcResponse } from '@metamask/utils';
-import type { UpgradeAccountParams } from './types';
-import { walletUpgradeAccount } from './wallet_upgradeAccount';
+import type { UpgradeAccountParams } from './types.js';
+import { walletUpgradeAccount } from './wallet_upgradeAccount.js';
const TEST_ACCOUNT = '0x1234567890123456789012345678901234567890';
const UPGRADE_CONTRACT = '0x0000000000000000000000000000000000000000';
diff --git a/packages/eip-7702-internal-rpc-middleware/src/wallet_upgradeAccount.ts b/packages/eip-7702-internal-rpc-middleware/src/wallet_upgradeAccount.ts
index af786b26e2d..f17f65fe54e 100644
--- a/packages/eip-7702-internal-rpc-middleware/src/wallet_upgradeAccount.ts
+++ b/packages/eip-7702-internal-rpc-middleware/src/wallet_upgradeAccount.ts
@@ -5,9 +5,9 @@ import type {
Hex,
} from '@metamask/utils';
-import type { UpgradeAccountParams } from './types';
-import { UpgradeAccountParamsStruct } from './types';
-import { validateParams, validateAndNormalizeAddress } from './utils';
+import type { UpgradeAccountParams } from './types.js';
+import { UpgradeAccountParamsStruct } from './types.js';
+import { validateParams, validateAndNormalizeAddress } from './utils.js';
export type WalletUpgradeAccountHooks = {
upgradeAccount: (
diff --git a/packages/eip1193-permission-middleware/jest.config.js b/packages/eip1193-permission-middleware/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/eip1193-permission-middleware/jest.config.js
+++ b/packages/eip1193-permission-middleware/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/eip1193-permission-middleware/package.json b/packages/eip1193-permission-middleware/package.json
index 0789020042b..33d421a2ba2 100644
--- a/packages/eip1193-permission-middleware/package.json
+++ b/packages/eip1193-permission-middleware/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/eip1193-permission-middleware",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/eip1193-permission-middleware",
@@ -58,12 +51,11 @@
"@metamask/json-rpc-engine": "^10.5.0",
"@metamask/permission-controller": "^13.1.1",
"@metamask/utils": "^11.11.0",
- "lodash": "^4.17.21"
+ "lodash-es": "^4.17.21"
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
"@metamask/rpc-errors": "^7.0.2",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/eip1193-permission-middleware/src/index.test.ts b/packages/eip1193-permission-middleware/src/index.test.ts
index feed1294273..89ce618a75c 100644
--- a/packages/eip1193-permission-middleware/src/index.test.ts
+++ b/packages/eip1193-permission-middleware/src/index.test.ts
@@ -1,9 +1,9 @@
import { createMethodMiddleware } from '@metamask/json-rpc-engine';
-import * as allExports from '.';
-import type { GetPermissionsHooks } from './wallet-getPermissions';
-import type { RequestPermissionsHooks } from './wallet-requestPermissions';
-import type { RevokePermissionsHooks } from './wallet-revokePermissions';
+import * as allExports from './..js';
+import type { GetPermissionsHooks } from './wallet-getPermissions.js';
+import type { RequestPermissionsHooks } from './wallet-requestPermissions.js';
+import type { RevokePermissionsHooks } from './wallet-revokePermissions.js';
type Hooks = GetPermissionsHooks &
RequestPermissionsHooks &
diff --git a/packages/eip1193-permission-middleware/src/index.ts b/packages/eip1193-permission-middleware/src/index.ts
index ef0b2336e84..c84419f78fc 100644
--- a/packages/eip1193-permission-middleware/src/index.ts
+++ b/packages/eip1193-permission-middleware/src/index.ts
@@ -1,8 +1,8 @@
import { MethodNames } from '@metamask/permission-controller';
-import { getPermissionsHandler } from './wallet-getPermissions';
-import { requestPermissionsHandler } from './wallet-requestPermissions';
-import { revokePermissionsHandler } from './wallet-revokePermissions';
+import { getPermissionsHandler } from './wallet-getPermissions.js';
+import { requestPermissionsHandler } from './wallet-requestPermissions.js';
+import { revokePermissionsHandler } from './wallet-revokePermissions.js';
type MethodHandlers = {
[MethodNames.GetPermissions]: typeof getPermissionsHandler;
diff --git a/packages/eip1193-permission-middleware/src/wallet-getPermissions.test.ts b/packages/eip1193-permission-middleware/src/wallet-getPermissions.test.ts
index a13091bb69e..1866636dcc4 100644
--- a/packages/eip1193-permission-middleware/src/wallet-getPermissions.test.ts
+++ b/packages/eip1193-permission-middleware/src/wallet-getPermissions.test.ts
@@ -5,8 +5,8 @@ import type {
PendingJsonRpcResponse,
} from '@metamask/utils';
-import { CaveatTypes, EndowmentTypes, RestrictedMethods } from './types';
-import { getPermissionsHandler } from './wallet-getPermissions';
+import { CaveatTypes, EndowmentTypes, RestrictedMethods } from './types.js';
+import { getPermissionsHandler } from './wallet-getPermissions.js';
jest.mock('@metamask/chain-agnostic-permission', () => ({
...jest.requireActual('@metamask/chain-agnostic-permission'),
diff --git a/packages/eip1193-permission-middleware/src/wallet-getPermissions.ts b/packages/eip1193-permission-middleware/src/wallet-getPermissions.ts
index 52914bc1ff4..1ef352468e7 100644
--- a/packages/eip1193-permission-middleware/src/wallet-getPermissions.ts
+++ b/packages/eip1193-permission-middleware/src/wallet-getPermissions.ts
@@ -1,4 +1,3 @@
-import type { Caip25CaveatValue } from '@metamask/chain-agnostic-permission';
import {
Caip25CaveatType,
Caip25EndowmentPermissionName,
@@ -16,7 +15,7 @@ import type {
PendingJsonRpcResponse,
} from '@metamask/utils';
-import { CaveatTypes, EndowmentTypes, RestrictedMethods } from './types';
+import { CaveatTypes, EndowmentTypes, RestrictedMethods } from './types.js';
export type GetPermissionsHooks = {
getPermissionsForOrigin: () => ReturnType<
@@ -65,7 +64,7 @@ async function getPermissionsImplementation(
const caip25Endowment = permissions[Caip25EndowmentPermissionName];
const caip25CaveatValue = caip25Endowment?.caveats?.find(
({ type }) => type === Caip25CaveatType,
- )?.value as Caip25CaveatValue | undefined;
+ )?.value;
delete permissions[Caip25EndowmentPermissionName];
if (caip25CaveatValue) {
diff --git a/packages/eip1193-permission-middleware/src/wallet-requestPermissions.test.ts b/packages/eip1193-permission-middleware/src/wallet-requestPermissions.test.ts
index c14728e930d..8e1e90e438b 100644
--- a/packages/eip1193-permission-middleware/src/wallet-requestPermissions.test.ts
+++ b/packages/eip1193-permission-middleware/src/wallet-requestPermissions.test.ts
@@ -6,8 +6,8 @@ import { invalidParams } from '@metamask/permission-controller';
import type { RequestedPermissions } from '@metamask/permission-controller';
import type { JsonRpcRequest, PendingJsonRpcResponse } from '@metamask/utils';
-import { CaveatTypes, EndowmentTypes, RestrictedMethods } from './types';
-import { requestPermissionsHandler } from './wallet-requestPermissions';
+import { CaveatTypes, EndowmentTypes, RestrictedMethods } from './types.js';
+import { requestPermissionsHandler } from './wallet-requestPermissions.js';
const getBaseRequest = (overrides = {}) => ({
jsonrpc: '2.0' as const,
diff --git a/packages/eip1193-permission-middleware/src/wallet-requestPermissions.ts b/packages/eip1193-permission-middleware/src/wallet-requestPermissions.ts
index ec723df7ba3..4f07f25cea2 100644
--- a/packages/eip1193-permission-middleware/src/wallet-requestPermissions.ts
+++ b/packages/eip1193-permission-middleware/src/wallet-requestPermissions.ts
@@ -1,4 +1,3 @@
-import type { Caip25CaveatValue } from '@metamask/chain-agnostic-permission';
import {
Caip25CaveatType,
Caip25EndowmentPermissionName,
@@ -22,9 +21,9 @@ import type {
JsonRpcRequest,
PendingJsonRpcResponse,
} from '@metamask/utils';
-import { pick } from 'lodash';
+import { pick } from 'lodash-es';
-import { CaveatTypes, EndowmentTypes, RestrictedMethods } from './types';
+import { CaveatTypes, EndowmentTypes, RestrictedMethods } from './types.js';
export type RequestPermissionsHooks = {
getAccounts: () => string[];
@@ -128,7 +127,7 @@ async function requestPermissionsImplementation(
const caip25CaveatValue = caip25Endowment.caveats?.find(
({ type }) => type === Caip25CaveatType,
- )?.value as Caip25CaveatValue | undefined;
+ )?.value;
if (!caip25CaveatValue) {
throw new Error(
`could not find ${Caip25CaveatType} in granted ${Caip25EndowmentPermissionName} permission.`,
diff --git a/packages/eip1193-permission-middleware/src/wallet-revokePermissions.test.ts b/packages/eip1193-permission-middleware/src/wallet-revokePermissions.test.ts
index 34bb499c4c3..0a7f51144cd 100644
--- a/packages/eip1193-permission-middleware/src/wallet-revokePermissions.test.ts
+++ b/packages/eip1193-permission-middleware/src/wallet-revokePermissions.test.ts
@@ -6,8 +6,8 @@ import type {
PendingJsonRpcResponse,
} from '@metamask/utils';
-import { EndowmentTypes, RestrictedMethods } from './types';
-import { revokePermissionsHandler } from './wallet-revokePermissions';
+import { EndowmentTypes, RestrictedMethods } from './types.js';
+import { revokePermissionsHandler } from './wallet-revokePermissions.js';
const baseRequest = {
jsonrpc: '2.0' as const,
diff --git a/packages/eip1193-permission-middleware/src/wallet-revokePermissions.ts b/packages/eip1193-permission-middleware/src/wallet-revokePermissions.ts
index 8f051393a16..96039209937 100644
--- a/packages/eip1193-permission-middleware/src/wallet-revokePermissions.ts
+++ b/packages/eip1193-permission-middleware/src/wallet-revokePermissions.ts
@@ -13,7 +13,7 @@ import type {
PendingJsonRpcResponse,
} from '@metamask/utils';
-import { EndowmentTypes, RestrictedMethods } from './types';
+import { EndowmentTypes, RestrictedMethods } from './types.js';
export type RevokePermissionsHooks = {
revokePermissionsForOrigin: (
diff --git a/packages/ens-controller/jest.config.js b/packages/ens-controller/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/ens-controller/jest.config.js
+++ b/packages/ens-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/ens-controller/package.json b/packages/ens-controller/package.json
index 299e3d364af..d2921d72224 100644
--- a/packages/ens-controller/package.json
+++ b/packages/ens-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/ens-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/ens-controller",
@@ -65,7 +58,6 @@
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/ens-controller/src/EnsController-method-action-types.ts b/packages/ens-controller/src/EnsController-method-action-types.ts
index 0cddc37e12d..5b355c8d8d6 100644
--- a/packages/ens-controller/src/EnsController-method-action-types.ts
+++ b/packages/ens-controller/src/EnsController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { EnsController } from './EnsController';
+import type { EnsController } from './EnsController.js';
/**
* Clears ensResolutionsByAddress state property.
diff --git a/packages/ens-controller/src/EnsController.test.ts b/packages/ens-controller/src/EnsController.test.ts
index e113c914061..7a93e4cf314 100644
--- a/packages/ens-controller/src/EnsController.test.ts
+++ b/packages/ens-controller/src/EnsController.test.ts
@@ -20,12 +20,12 @@ import type {
import {
buildMockGetNetworkClientById,
buildCustomNetworkClientConfiguration,
-} from '../../network-controller/tests/helpers';
-import { EnsController, DEFAULT_ENS_NETWORK_MAP } from './EnsController';
+} from '../../network-controller/tests/helpers.js';
+import { EnsController, DEFAULT_ENS_NETWORK_MAP } from './EnsController.js';
import type {
EnsControllerState,
EnsControllerMessenger,
-} from './EnsController';
+} from './EnsController.js';
const defaultState: EnsControllerState = {
ensEntries: {},
diff --git a/packages/ens-controller/src/EnsController.ts b/packages/ens-controller/src/EnsController.ts
index 9d974bce5be..ef9a68c9f78 100644
--- a/packages/ens-controller/src/EnsController.ts
+++ b/packages/ens-controller/src/EnsController.ts
@@ -25,7 +25,7 @@ import type { Hex } from '@metamask/utils';
import { createProjectLogger } from '@metamask/utils';
import { toASCII } from 'punycode/punycode.js';
-import type { EnsControllerMethodActions } from './EnsController-method-action-types';
+import type { EnsControllerMethodActions } from './EnsController-method-action-types.js';
const log = createProjectLogger('ens-controller');
@@ -262,7 +262,7 @@ export class EnsController extends BaseController<
// TODO Explicitly handle the case where `normalizedEnsName` is `null`
// eslint-disable-next-line no-implicit-coercion
return !!normalizedEnsName && this.state.ensEntries[chainId]
- ? this.state.ensEntries[chainId][normalizedEnsName] || null
+ ? (this.state.ensEntries[chainId][normalizedEnsName] ?? null)
: null;
}
diff --git a/packages/ens-controller/src/index.ts b/packages/ens-controller/src/index.ts
index a2f476a1a05..9b6610d6d88 100644
--- a/packages/ens-controller/src/index.ts
+++ b/packages/ens-controller/src/index.ts
@@ -1,4 +1,4 @@
-export * from './EnsController';
+export * from './EnsController.js';
export type {
EnsControllerResetStateAction,
EnsControllerClearAction,
@@ -6,4 +6,4 @@ export type {
EnsControllerGetAction,
EnsControllerSetAction,
EnsControllerReverseResolveAddressAction,
-} from './EnsController-method-action-types';
+} from './EnsController-method-action-types.js';
diff --git a/packages/eth-block-tracker/jest.config.js b/packages/eth-block-tracker/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/eth-block-tracker/jest.config.js
+++ b/packages/eth-block-tracker/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/eth-block-tracker/package.json b/packages/eth-block-tracker/package.json
index 63291723a68..fccaeb6cd40 100644
--- a/packages/eth-block-tracker/package.json
+++ b/packages/eth-block-tracker/package.json
@@ -19,20 +19,13 @@
"dist",
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
"module": "./dist/index.mjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -41,8 +34,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/eth-block-tracker",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/eth-block-tracker",
@@ -56,14 +49,13 @@
},
"dependencies": {
"@metamask/eth-json-rpc-provider": "^6.0.1",
- "@metamask/safe-event-emitter": "^3.0.0",
+ "@metamask/safe-event-emitter": "patch:@metamask/safe-event-emitter@npm%3A3.1.1#~/.yarn/patches/@metamask-safe-event-emitter-npm-3.1.1-a7872b1f5a.patch",
"@metamask/utils": "^11.11.0",
"json-rpc-random-id": "^1.0.1"
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
"@metamask/json-rpc-engine": "^10.5.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"@types/json-rpc-random-id": "^1.0.1",
"deepmerge": "^4.2.2",
diff --git a/packages/eth-block-tracker/src/PollingBlockTracker.test.ts b/packages/eth-block-tracker/src/PollingBlockTracker.test.ts
index 95ae2204f76..dbec24c97e9 100644
--- a/packages/eth-block-tracker/src/PollingBlockTracker.test.ts
+++ b/packages/eth-block-tracker/src/PollingBlockTracker.test.ts
@@ -1,9 +1,9 @@
import { createDeferredPromise } from '@metamask/utils';
-import { PollingBlockTracker } from '.';
-import EMPTY_FUNCTION from '../tests/emptyFunction';
-import recordCallsToSetTimeout from '../tests/recordCallsToSetTimeout';
-import { withPollingBlockTracker } from '../tests/withBlockTracker';
+import EMPTY_FUNCTION from '../tests/emptyFunction.js';
+import recordCallsToSetTimeout from '../tests/recordCallsToSetTimeout.js';
+import { withPollingBlockTracker } from '../tests/withBlockTracker.js';
+import { PollingBlockTracker } from './..js';
type Sync = {
oldBlock: string;
diff --git a/packages/eth-block-tracker/src/PollingBlockTracker.ts b/packages/eth-block-tracker/src/PollingBlockTracker.ts
index 4d8bbe5737c..ab3e858bf9b 100644
--- a/packages/eth-block-tracker/src/PollingBlockTracker.ts
+++ b/packages/eth-block-tracker/src/PollingBlockTracker.ts
@@ -8,8 +8,8 @@ import { createDeferredPromise, getErrorMessage } from '@metamask/utils';
import type { DeferredPromise, JsonRpcRequest } from '@metamask/utils';
import getCreateRandomId from 'json-rpc-random-id';
-import type { BlockTracker } from './BlockTracker';
-import { projectLogger, createModuleLogger } from './logging-utils';
+import type { BlockTracker } from './BlockTracker.js';
+import { projectLogger, createModuleLogger } from './logging-utils.js';
const log = createModuleLogger(projectLogger, 'polling-block-tracker');
const createRandomId = getCreateRandomId();
diff --git a/packages/eth-block-tracker/src/index.ts b/packages/eth-block-tracker/src/index.ts
index 20f0aa19b07..32370f265de 100644
--- a/packages/eth-block-tracker/src/index.ts
+++ b/packages/eth-block-tracker/src/index.ts
@@ -1,2 +1,2 @@
-export * from './PollingBlockTracker';
-export type * from './BlockTracker';
+export * from './PollingBlockTracker.js';
+export type * from './BlockTracker.js';
diff --git a/packages/eth-block-tracker/tests/recordCallsToSetTimeout.ts b/packages/eth-block-tracker/tests/recordCallsToSetTimeout.ts
index 42116a3e78f..bb5ab7107ba 100644
--- a/packages/eth-block-tracker/tests/recordCallsToSetTimeout.ts
+++ b/packages/eth-block-tracker/tests/recordCallsToSetTimeout.ts
@@ -1,6 +1,6 @@
import EventEmitter from 'events';
-import EMPTY_FUNCTION from './emptyFunction';
+import EMPTY_FUNCTION from './emptyFunction.js';
type SetTimeoutCallback = () => unknown;
diff --git a/packages/eth-block-tracker/tests/withBlockTracker.ts b/packages/eth-block-tracker/tests/withBlockTracker.ts
index b5d6fe46759..ffc6c70a0ba 100644
--- a/packages/eth-block-tracker/tests/withBlockTracker.ts
+++ b/packages/eth-block-tracker/tests/withBlockTracker.ts
@@ -3,8 +3,8 @@ import { JsonRpcEngine } from '@metamask/json-rpc-engine';
import type { Json } from '@metamask/utils';
import util from 'util';
-import type { PollingBlockTrackerOptions } from '../src';
-import { PollingBlockTracker } from '../src';
+import type { PollingBlockTrackerOptions } from '../src.js';
+import { PollingBlockTracker } from '../src.js';
type WithPollingBlockTrackerOptions = {
provider?: FakeProviderOptions;
diff --git a/packages/eth-json-rpc-middleware/jest.config.js b/packages/eth-json-rpc-middleware/jest.config.js
index 4c500d749cb..41da4681c37 100644
--- a/packages/eth-json-rpc-middleware/jest.config.js
+++ b/packages/eth-json-rpc-middleware/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/eth-json-rpc-middleware/package.json b/packages/eth-json-rpc-middleware/package.json
index 63e4913087e..f896b9c4974 100644
--- a/packages/eth-json-rpc-middleware/package.json
+++ b/packages/eth-json-rpc-middleware/package.json
@@ -18,20 +18,13 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
"module": "./dist/index.mjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -40,8 +33,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/eth-json-rpc-middleware --tag-prefix-before-package-rename eth-json-rpc-middleware@ --version-before-package-rename 6.1.0",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/eth-json-rpc-middleware --tag-prefix-before-package-rename eth-json-rpc-middleware@ --version-before-package-rename 6.1.0",
@@ -67,7 +60,6 @@
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/deep-freeze-strict": "^1.1.0",
"@types/jest": "^29.5.14",
"deep-freeze-strict": "^1.1.1",
diff --git a/packages/eth-json-rpc-middleware/src/block-cache.test.ts b/packages/eth-json-rpc-middleware/src/block-cache.test.ts
index b456789eeaf..3520652f27a 100644
--- a/packages/eth-json-rpc-middleware/src/block-cache.test.ts
+++ b/packages/eth-json-rpc-middleware/src/block-cache.test.ts
@@ -4,12 +4,12 @@ import {
} from '@metamask/json-rpc-engine/v2';
import type { Hex, Json } from '@metamask/utils';
-import { createBlockCacheMiddleware } from '.';
import {
createProviderAndBlockTracker,
createRequest,
stubProviderRequests,
-} from '../test/util/helpers';
+} from '../test/util/helpers.js';
+import { createBlockCacheMiddleware } from './..js';
describe('block cache middleware', () => {
let provider: ReturnType['provider'];
diff --git a/packages/eth-json-rpc-middleware/src/block-cache.ts b/packages/eth-json-rpc-middleware/src/block-cache.ts
index 700425a1fa2..6efc528fb00 100644
--- a/packages/eth-json-rpc-middleware/src/block-cache.ts
+++ b/packages/eth-json-rpc-middleware/src/block-cache.ts
@@ -5,20 +5,20 @@ import type {
} from '@metamask/json-rpc-engine/v2';
import type { Json, JsonRpcRequest } from '@metamask/utils';
-import { projectLogger, createModuleLogger } from './logging-utils';
+import { projectLogger, createModuleLogger } from './logging-utils.js';
import type {
Block,
BlockCache,
// eslint-disable-next-line @typescript-eslint/no-shadow
Cache,
-} from './types';
+} from './types.js';
import {
cacheIdentifierForRequest,
blockTagForRequest,
cacheTypeForMethod,
canCache,
CacheStrategy,
-} from './utils/cache';
+} from './utils/cache.js';
const log = createModuleLogger(projectLogger, 'block-cache');
// `` comes from https://github.com/ethereum/go-ethereum/issues/16925
diff --git a/packages/eth-json-rpc-middleware/src/block-ref-rewrite.test.ts b/packages/eth-json-rpc-middleware/src/block-ref-rewrite.test.ts
index 158da99e291..4e260f3b3ba 100644
--- a/packages/eth-json-rpc-middleware/src/block-ref-rewrite.test.ts
+++ b/packages/eth-json-rpc-middleware/src/block-ref-rewrite.test.ts
@@ -5,8 +5,8 @@ import type { Json, JsonRpcRequest } from '@metamask/utils';
import {
createFinalMiddlewareWithDefaultResult,
createRequest,
-} from '../test/util/helpers';
-import { createBlockRefRewriteMiddleware } from './block-ref-rewrite';
+} from '../test/util/helpers.js';
+import { createBlockRefRewriteMiddleware } from './block-ref-rewrite.js';
const createMockBlockTracker = (): PollingBlockTracker => {
return {
diff --git a/packages/eth-json-rpc-middleware/src/block-ref-rewrite.ts b/packages/eth-json-rpc-middleware/src/block-ref-rewrite.ts
index be2cc882382..7ad43ef900d 100644
--- a/packages/eth-json-rpc-middleware/src/block-ref-rewrite.ts
+++ b/packages/eth-json-rpc-middleware/src/block-ref-rewrite.ts
@@ -2,7 +2,7 @@ import type { PollingBlockTracker } from '@metamask/eth-block-tracker';
import type { JsonRpcMiddleware } from '@metamask/json-rpc-engine/v2';
import type { Json, JsonRpcRequest } from '@metamask/utils';
-import { blockTagParamIndex } from './utils/cache';
+import { blockTagParamIndex } from './utils/cache.js';
type BlockRefRewriteMiddlewareOptions = {
blockTracker?: PollingBlockTracker;
diff --git a/packages/eth-json-rpc-middleware/src/block-ref.test.ts b/packages/eth-json-rpc-middleware/src/block-ref.test.ts
index e5f5406c546..c8cae296863 100644
--- a/packages/eth-json-rpc-middleware/src/block-ref.test.ts
+++ b/packages/eth-json-rpc-middleware/src/block-ref.test.ts
@@ -1,6 +1,5 @@
import { MiddlewareContext } from '@metamask/json-rpc-engine/v2';
-import { createBlockRefMiddleware } from '.';
import {
createMockParamsWithBlockParamAt,
stubProviderRequests,
@@ -12,7 +11,8 @@ import {
createProviderAndBlockTracker,
createEngine,
createRequest,
-} from '../test/util/helpers';
+} from '../test/util/helpers.js';
+import { createBlockRefMiddleware } from './..js';
describe('createBlockRefMiddleware', () => {
let provider: ReturnType['provider'];
diff --git a/packages/eth-json-rpc-middleware/src/block-ref.ts b/packages/eth-json-rpc-middleware/src/block-ref.ts
index 1fd52d1504c..8462b0eb97e 100644
--- a/packages/eth-json-rpc-middleware/src/block-ref.ts
+++ b/packages/eth-json-rpc-middleware/src/block-ref.ts
@@ -4,9 +4,9 @@ import type { JsonRpcMiddleware } from '@metamask/json-rpc-engine/v2';
import type { Json, JsonRpcParams, JsonRpcRequest } from '@metamask/utils';
import { klona } from 'klona';
-import { projectLogger, createModuleLogger } from './logging-utils';
-import type { Block } from './types';
-import { blockTagParamIndex } from './utils/cache';
+import { projectLogger, createModuleLogger } from './logging-utils.js';
+import type { Block } from './types.js';
+import { blockTagParamIndex } from './utils/cache.js';
type BlockRefMiddlewareOptions = {
blockTracker?: PollingBlockTracker;
diff --git a/packages/eth-json-rpc-middleware/src/block-tracker-inspector.test.ts b/packages/eth-json-rpc-middleware/src/block-tracker-inspector.test.ts
index a6e6d4a790b..8532922098e 100644
--- a/packages/eth-json-rpc-middleware/src/block-tracker-inspector.test.ts
+++ b/packages/eth-json-rpc-middleware/src/block-tracker-inspector.test.ts
@@ -6,8 +6,8 @@ import { Hex, Json } from '@metamask/utils';
import {
createFinalMiddlewareWithDefaultResult,
createRequest,
-} from '../test/util/helpers';
-import { createBlockTrackerInspectorMiddleware } from './block-tracker-inspector';
+} from '../test/util/helpers.js';
+import { createBlockTrackerInspectorMiddleware } from './block-tracker-inspector.js';
const createMockBlockTracker = (): PollingBlockTracker => {
return {
diff --git a/packages/eth-json-rpc-middleware/src/block-tracker-inspector.ts b/packages/eth-json-rpc-middleware/src/block-tracker-inspector.ts
index a8885ace130..ba31dba114e 100644
--- a/packages/eth-json-rpc-middleware/src/block-tracker-inspector.ts
+++ b/packages/eth-json-rpc-middleware/src/block-tracker-inspector.ts
@@ -3,7 +3,7 @@ import type { JsonRpcMiddleware } from '@metamask/json-rpc-engine/v2';
import { hasProperty } from '@metamask/utils';
import type { Json, JsonRpcRequest } from '@metamask/utils';
-import { projectLogger, createModuleLogger } from './logging-utils';
+import { projectLogger, createModuleLogger } from './logging-utils.js';
const log = createModuleLogger(projectLogger, 'block-tracker-inspector');
const futureBlockRefRequests: readonly string[] = [
diff --git a/packages/eth-json-rpc-middleware/src/fetch.test.ts b/packages/eth-json-rpc-middleware/src/fetch.test.ts
index 4030442c8e5..b8af7d1de39 100644
--- a/packages/eth-json-rpc-middleware/src/fetch.test.ts
+++ b/packages/eth-json-rpc-middleware/src/fetch.test.ts
@@ -10,9 +10,9 @@ import type {
JsonRpcResponse,
} from '@metamask/utils';
-import { createRequest } from '../test/util/helpers';
-import { createFetchMiddleware } from './fetch';
-import type { AbstractRpcServiceLike } from './types';
+import { createRequest } from '../test/util/helpers.js';
+import { createFetchMiddleware } from './fetch.js';
+import type { AbstractRpcServiceLike } from './types.js';
describe('createFetchMiddleware', () => {
it.each([
diff --git a/packages/eth-json-rpc-middleware/src/fetch.ts b/packages/eth-json-rpc-middleware/src/fetch.ts
index bd5dc886a3d..61b8935c476 100644
--- a/packages/eth-json-rpc-middleware/src/fetch.ts
+++ b/packages/eth-json-rpc-middleware/src/fetch.ts
@@ -5,7 +5,7 @@ import type {
import { rpcErrors } from '@metamask/rpc-errors';
import type { Json, JsonRpcRequest } from '@metamask/utils';
-import type { AbstractRpcServiceLike } from './types';
+import type { AbstractRpcServiceLike } from './types.js';
/**
* Creates middleware for sending a JSON-RPC request through the given RPC
diff --git a/packages/eth-json-rpc-middleware/src/index.test.ts b/packages/eth-json-rpc-middleware/src/index.test.ts
index ff6ab443529..0bd1588d08d 100644
--- a/packages/eth-json-rpc-middleware/src/index.test.ts
+++ b/packages/eth-json-rpc-middleware/src/index.test.ts
@@ -1,4 +1,4 @@
-import * as indexModule from '.';
+import * as indexModule from './..js';
describe('index module', () => {
it('has expected JavaScript exports', () => {
diff --git a/packages/eth-json-rpc-middleware/src/index.ts b/packages/eth-json-rpc-middleware/src/index.ts
index 8efff9e55d6..73a5dc9f51b 100644
--- a/packages/eth-json-rpc-middleware/src/index.ts
+++ b/packages/eth-json-rpc-middleware/src/index.ts
@@ -1,38 +1,38 @@
-export * from './block-cache';
-export * from './block-ref-rewrite';
-export * from './block-ref';
-export * from './block-tracker-inspector';
-export { createFetchMiddleware } from './fetch';
-export * from './inflight-cache';
+export * from './block-cache.js';
+export * from './block-ref-rewrite.js';
+export * from './block-ref.js';
+export * from './block-tracker-inspector.js';
+export { createFetchMiddleware } from './fetch.js';
+export * from './inflight-cache.js';
export type {
PermissionDependency,
RequestExecutionPermissionsRequestParams,
RequestExecutionPermissionsResult,
ProcessRequestExecutionPermissionsHook,
-} from './methods/wallet-request-execution-permissions';
+} from './methods/wallet-request-execution-permissions.js';
export type {
ProcessRevokeExecutionPermissionHook,
RevokeExecutionPermissionRequestParams,
RevokeExecutionPermissionResult,
-} from './methods/wallet-revoke-execution-permission';
+} from './methods/wallet-revoke-execution-permission.js';
export type {
GrantedExecutionPermission,
GetGrantedExecutionPermissionsResult,
ProcessGetGrantedExecutionPermissionsHook,
-} from './methods/wallet-get-granted-execution-permissions';
+} from './methods/wallet-get-granted-execution-permissions.js';
export {
GrantedExecutionPermissionStruct,
GetGrantedExecutionPermissionsResultStruct,
-} from './methods/wallet-get-granted-execution-permissions';
+} from './methods/wallet-get-granted-execution-permissions.js';
export type {
SupportedExecutionPermissionConfig,
GetSupportedExecutionPermissionsResult,
ProcessGetSupportedExecutionPermissionsHook,
-} from './methods/wallet-get-supported-execution-permissions';
+} from './methods/wallet-get-supported-execution-permissions.js';
export {
SupportedExecutionPermissionConfigStruct,
GetSupportedExecutionPermissionsResultStruct,
-} from './methods/wallet-get-supported-execution-permissions';
-export * from './providerAsMiddleware';
-export * from './retryOnEmpty';
-export * from './wallet';
+} from './methods/wallet-get-supported-execution-permissions.js';
+export * from './providerAsMiddleware.js';
+export * from './retryOnEmpty.js';
+export * from './wallet.js';
diff --git a/packages/eth-json-rpc-middleware/src/inflight-cache.test.ts b/packages/eth-json-rpc-middleware/src/inflight-cache.test.ts
index 22e1f053d29..4ec89fdf894 100644
--- a/packages/eth-json-rpc-middleware/src/inflight-cache.test.ts
+++ b/packages/eth-json-rpc-middleware/src/inflight-cache.test.ts
@@ -1,7 +1,7 @@
import { JsonRpcEngineV2 } from '@metamask/json-rpc-engine/v2';
-import { createInflightCacheMiddleware } from '.';
-import { createRequest } from '../test/util/helpers';
+import { createRequest } from '../test/util/helpers.js';
+import { createInflightCacheMiddleware } from './..js';
describe('inflight cache', () => {
it('should cache an inflight request and only hit provider once', async () => {
diff --git a/packages/eth-json-rpc-middleware/src/inflight-cache.ts b/packages/eth-json-rpc-middleware/src/inflight-cache.ts
index 6d2b16c5737..d7c6cc1c0e0 100644
--- a/packages/eth-json-rpc-middleware/src/inflight-cache.ts
+++ b/packages/eth-json-rpc-middleware/src/inflight-cache.ts
@@ -5,8 +5,8 @@ import type {
import { createDeferredPromise } from '@metamask/utils';
import type { Json, JsonRpcRequest } from '@metamask/utils';
-import { projectLogger, createModuleLogger } from './logging-utils';
-import { cacheIdentifierForRequest } from './utils/cache';
+import { projectLogger, createModuleLogger } from './logging-utils.js';
+import { cacheIdentifierForRequest } from './utils/cache.js';
type RequestHandler = [
(result: Readonly) => void,
diff --git a/packages/eth-json-rpc-middleware/src/methods/wallet-get-granted-execution-permissions.test.ts b/packages/eth-json-rpc-middleware/src/methods/wallet-get-granted-execution-permissions.test.ts
index 19a506fa1f5..5370ea44a8c 100644
--- a/packages/eth-json-rpc-middleware/src/methods/wallet-get-granted-execution-permissions.test.ts
+++ b/packages/eth-json-rpc-middleware/src/methods/wallet-get-granted-execution-permissions.test.ts
@@ -1,11 +1,11 @@
import type { Hex, Json, JsonRpcRequest } from '@metamask/utils';
-import type { WalletMiddlewareParams } from '../wallet';
+import type { WalletMiddlewareParams } from '../wallet.js';
import type {
GetGrantedExecutionPermissionsResult,
ProcessGetGrantedExecutionPermissionsHook,
-} from './wallet-get-granted-execution-permissions';
-import { createWalletGetGrantedExecutionPermissionsHandler } from './wallet-get-granted-execution-permissions';
+} from './wallet-get-granted-execution-permissions.js';
+import { createWalletGetGrantedExecutionPermissionsHandler } from './wallet-get-granted-execution-permissions.js';
const RESULT_MOCK: GetGrantedExecutionPermissionsResult = [
{
diff --git a/packages/eth-json-rpc-middleware/src/methods/wallet-get-granted-execution-permissions.ts b/packages/eth-json-rpc-middleware/src/methods/wallet-get-granted-execution-permissions.ts
index d58259d8de9..06d352aa0fd 100644
--- a/packages/eth-json-rpc-middleware/src/methods/wallet-get-granted-execution-permissions.ts
+++ b/packages/eth-json-rpc-middleware/src/methods/wallet-get-granted-execution-permissions.ts
@@ -12,9 +12,9 @@ import {
import { HexChecksumAddressStruct, StrictHexStruct } from '@metamask/utils';
import type { Json, JsonRpcRequest } from '@metamask/utils';
-import { NoParamsStruct } from '../utils/structs';
-import { validateParams } from '../utils/validation';
-import type { WalletMiddlewareContext } from '../wallet';
+import { NoParamsStruct } from '../utils/structs.js';
+import { validateParams } from '../utils/validation.js';
+import type { WalletMiddlewareContext } from '../wallet.js';
/**
* Superstruct schema for the `wallet_getGrantedExecutionPermissions` request params.
diff --git a/packages/eth-json-rpc-middleware/src/methods/wallet-get-supported-execution-permissions.test.ts b/packages/eth-json-rpc-middleware/src/methods/wallet-get-supported-execution-permissions.test.ts
index 2fcec4d658f..283db560df3 100644
--- a/packages/eth-json-rpc-middleware/src/methods/wallet-get-supported-execution-permissions.test.ts
+++ b/packages/eth-json-rpc-middleware/src/methods/wallet-get-supported-execution-permissions.test.ts
@@ -1,11 +1,11 @@
import type { Hex, Json, JsonRpcRequest } from '@metamask/utils';
-import type { WalletMiddlewareParams } from '../wallet';
+import type { WalletMiddlewareParams } from '../wallet.js';
import type {
GetSupportedExecutionPermissionsResult,
ProcessGetSupportedExecutionPermissionsHook,
-} from './wallet-get-supported-execution-permissions';
-import { createWalletGetSupportedExecutionPermissionsHandler } from './wallet-get-supported-execution-permissions';
+} from './wallet-get-supported-execution-permissions.js';
+import { createWalletGetSupportedExecutionPermissionsHandler } from './wallet-get-supported-execution-permissions.js';
const RESULT_MOCK: GetSupportedExecutionPermissionsResult = {
'native-token-allowance': {
diff --git a/packages/eth-json-rpc-middleware/src/methods/wallet-get-supported-execution-permissions.ts b/packages/eth-json-rpc-middleware/src/methods/wallet-get-supported-execution-permissions.ts
index 120f947aae1..725bb951547 100644
--- a/packages/eth-json-rpc-middleware/src/methods/wallet-get-supported-execution-permissions.ts
+++ b/packages/eth-json-rpc-middleware/src/methods/wallet-get-supported-execution-permissions.ts
@@ -5,9 +5,9 @@ import { array, object, record, string } from '@metamask/superstruct';
import { StrictHexStruct } from '@metamask/utils';
import type { Json, JsonRpcRequest } from '@metamask/utils';
-import { NoParamsStruct } from '../utils/structs';
-import { validateParams } from '../utils/validation';
-import type { WalletMiddlewareContext } from '../wallet';
+import { NoParamsStruct } from '../utils/structs.js';
+import { validateParams } from '../utils/validation.js';
+import type { WalletMiddlewareContext } from '../wallet.js';
/**
* Superstruct schema for the `wallet_getSupportedExecutionPermissions` request params.
diff --git a/packages/eth-json-rpc-middleware/src/methods/wallet-request-execution-permissions.test.ts b/packages/eth-json-rpc-middleware/src/methods/wallet-request-execution-permissions.test.ts
index 13e95d44acd..9d0e9ac94f5 100644
--- a/packages/eth-json-rpc-middleware/src/methods/wallet-request-execution-permissions.test.ts
+++ b/packages/eth-json-rpc-middleware/src/methods/wallet-request-execution-permissions.test.ts
@@ -1,13 +1,13 @@
import type { Json, JsonRpcRequest } from '@metamask/utils';
import { klona } from 'klona';
-import type { WalletMiddlewareParams } from '../wallet';
+import type { WalletMiddlewareParams } from '../wallet.js';
import type {
ProcessRequestExecutionPermissionsHook,
RequestExecutionPermissionsRequestParams,
RequestExecutionPermissionsResult,
-} from './wallet-request-execution-permissions';
-import { createWalletRequestExecutionPermissionsHandler } from './wallet-request-execution-permissions';
+} from './wallet-request-execution-permissions.js';
+import { createWalletRequestExecutionPermissionsHandler } from './wallet-request-execution-permissions.js';
const FROM_ADDRESS_MOCK = '0x123abc123abc123abc123abc123abc123abc123A';
const TO_ADDRESS_MOCK = '0x016562aA41A8697720ce0943F003141f5dEAe006';
diff --git a/packages/eth-json-rpc-middleware/src/methods/wallet-request-execution-permissions.ts b/packages/eth-json-rpc-middleware/src/methods/wallet-request-execution-permissions.ts
index dc2ec4027a8..67fb5f748ea 100644
--- a/packages/eth-json-rpc-middleware/src/methods/wallet-request-execution-permissions.ts
+++ b/packages/eth-json-rpc-middleware/src/methods/wallet-request-execution-permissions.ts
@@ -15,8 +15,8 @@ import {
import { HexChecksumAddressStruct, StrictHexStruct } from '@metamask/utils';
import type { Hex, Json, JsonRpcRequest } from '@metamask/utils';
-import { validateParams } from '../utils/validation';
-import type { WalletMiddlewareContext } from '../wallet';
+import { validateParams } from '../utils/validation.js';
+import type { WalletMiddlewareContext } from '../wallet.js';
const PermissionStruct = object({
type: string(),
diff --git a/packages/eth-json-rpc-middleware/src/methods/wallet-revoke-execution-permission.test.ts b/packages/eth-json-rpc-middleware/src/methods/wallet-revoke-execution-permission.test.ts
index 13c92f80238..63f88b90807 100644
--- a/packages/eth-json-rpc-middleware/src/methods/wallet-revoke-execution-permission.test.ts
+++ b/packages/eth-json-rpc-middleware/src/methods/wallet-revoke-execution-permission.test.ts
@@ -1,12 +1,12 @@
import type { Json, JsonRpcRequest } from '@metamask/utils';
import { klona } from 'klona';
-import type { WalletMiddlewareParams } from '../wallet';
+import type { WalletMiddlewareParams } from '../wallet.js';
import type {
ProcessRevokeExecutionPermissionHook,
RevokeExecutionPermissionRequestParams,
-} from './wallet-revoke-execution-permission';
-import { createWalletRevokeExecutionPermissionHandler } from './wallet-revoke-execution-permission';
+} from './wallet-revoke-execution-permission.js';
+import { createWalletRevokeExecutionPermissionHandler } from './wallet-revoke-execution-permission.js';
const HEX_MOCK = '0x123abc';
diff --git a/packages/eth-json-rpc-middleware/src/methods/wallet-revoke-execution-permission.ts b/packages/eth-json-rpc-middleware/src/methods/wallet-revoke-execution-permission.ts
index fe2f7a6d833..a5da3aef542 100644
--- a/packages/eth-json-rpc-middleware/src/methods/wallet-revoke-execution-permission.ts
+++ b/packages/eth-json-rpc-middleware/src/methods/wallet-revoke-execution-permission.ts
@@ -5,8 +5,8 @@ import { object } from '@metamask/superstruct';
import { StrictHexStruct } from '@metamask/utils';
import type { Json, JsonRpcRequest } from '@metamask/utils';
-import { validateParams } from '../utils/validation';
-import type { WalletMiddlewareContext } from '../wallet';
+import { validateParams } from '../utils/validation.js';
+import type { WalletMiddlewareContext } from '../wallet.js';
export const RevokeExecutionPermissionResultStruct = object({});
diff --git a/packages/eth-json-rpc-middleware/src/providerAsMiddleware.test.ts b/packages/eth-json-rpc-middleware/src/providerAsMiddleware.test.ts
index 73c743395b5..02c60a34f61 100644
--- a/packages/eth-json-rpc-middleware/src/providerAsMiddleware.test.ts
+++ b/packages/eth-json-rpc-middleware/src/providerAsMiddleware.test.ts
@@ -7,11 +7,11 @@ import {
assertIsJsonRpcSuccess,
} from '@metamask/utils';
-import { createRequest } from '../test/util/helpers';
+import { createRequest } from '../test/util/helpers.js';
import {
providerAsMiddleware,
providerAsMiddlewareV2,
-} from './providerAsMiddleware';
+} from './providerAsMiddleware.js';
const createMockProvider = (resultOrError: Json | Error): InternalProvider =>
({
diff --git a/packages/eth-json-rpc-middleware/src/retryOnEmpty.test.ts b/packages/eth-json-rpc-middleware/src/retryOnEmpty.test.ts
index c201d8687db..3c03ee0fe9a 100644
--- a/packages/eth-json-rpc-middleware/src/retryOnEmpty.test.ts
+++ b/packages/eth-json-rpc-middleware/src/retryOnEmpty.test.ts
@@ -1,8 +1,7 @@
import { providerErrors, rpcErrors } from '@metamask/rpc-errors';
import type { Json, JsonRpcParams, JsonRpcRequest } from '@metamask/utils';
-import { createRetryOnEmptyMiddleware } from '.';
-import type { ProviderRequestStub } from '../test/util/helpers';
+import type { ProviderRequestStub } from '../test/util/helpers.js';
import {
createMockParamsWithBlockParamAt,
createMockParamsWithoutBlockParamAt,
@@ -14,7 +13,8 @@ import {
createEngine,
createRequest,
createFinalMiddlewareWithDefaultResult,
-} from '../test/util/helpers';
+} from '../test/util/helpers.js';
+import { createRetryOnEmptyMiddleware } from './..js';
const originalSetTimeout = globalThis.setTimeout;
diff --git a/packages/eth-json-rpc-middleware/src/retryOnEmpty.ts b/packages/eth-json-rpc-middleware/src/retryOnEmpty.ts
index ba615fb2e60..ecf18c05e0c 100644
--- a/packages/eth-json-rpc-middleware/src/retryOnEmpty.ts
+++ b/packages/eth-json-rpc-middleware/src/retryOnEmpty.ts
@@ -4,11 +4,11 @@ import type { JsonRpcMiddleware } from '@metamask/json-rpc-engine/v2';
import type { Json, JsonRpcParams, JsonRpcRequest } from '@metamask/utils';
import { klona } from 'klona';
-import { projectLogger, createModuleLogger } from './logging-utils';
-import type { Block } from './types';
-import { blockTagParamIndex } from './utils/cache';
-import { isExecutionRevertedError } from './utils/error';
-import { timeout } from './utils/timeout';
+import { projectLogger, createModuleLogger } from './logging-utils.js';
+import type { Block } from './types.js';
+import { blockTagParamIndex } from './utils/cache.js';
+import { isExecutionRevertedError } from './utils/error.js';
+import { timeout } from './utils/timeout.js';
//
// RetryOnEmptyMiddleware will retry any request with an empty response that has
@@ -137,7 +137,7 @@ async function retry(
return await asyncFn();
} catch (error: unknown) {
if (isExecutionRevertedError(error)) {
- throw error as unknown;
+ throw error;
}
log('(call %i) Request failed, waiting 1s to retry again...', index + 1);
await timeout(1000);
diff --git a/packages/eth-json-rpc-middleware/src/utils/cache.test.ts b/packages/eth-json-rpc-middleware/src/utils/cache.test.ts
index d755a82ce26..57f83d7d3b7 100644
--- a/packages/eth-json-rpc-middleware/src/utils/cache.test.ts
+++ b/packages/eth-json-rpc-middleware/src/utils/cache.test.ts
@@ -4,7 +4,7 @@ import {
cacheTypeForMethod,
cacheIdentifierForRequest,
canCache,
-} from './cache';
+} from './cache.js';
const knownMethods = [
'web3_clientVersion',
diff --git a/packages/eth-json-rpc-middleware/src/utils/common.test.ts b/packages/eth-json-rpc-middleware/src/utils/common.test.ts
index 304e6634d9e..38d5c80a8d5 100644
--- a/packages/eth-json-rpc-middleware/src/utils/common.test.ts
+++ b/packages/eth-json-rpc-middleware/src/utils/common.test.ts
@@ -1,4 +1,4 @@
-import { stripArrayTypeIfPresent } from './common';
+import { stripArrayTypeIfPresent } from './common.js';
describe('CommonUtils', () => {
describe('stripArrayTypeIfPresent', () => {
diff --git a/packages/eth-json-rpc-middleware/src/utils/error.test.ts b/packages/eth-json-rpc-middleware/src/utils/error.test.ts
index d51eca67272..ad868fb4fc4 100644
--- a/packages/eth-json-rpc-middleware/src/utils/error.test.ts
+++ b/packages/eth-json-rpc-middleware/src/utils/error.test.ts
@@ -1,6 +1,6 @@
import { errorCodes } from '@metamask/rpc-errors';
-import { isExecutionRevertedError } from './error';
+import { isExecutionRevertedError } from './error.js';
const executionRevertedError = {
code: errorCodes.rpc.invalidInput,
diff --git a/packages/eth-json-rpc-middleware/src/utils/normalize.test.ts b/packages/eth-json-rpc-middleware/src/utils/normalize.test.ts
index 72bcc706b39..dc489331196 100644
--- a/packages/eth-json-rpc-middleware/src/utils/normalize.test.ts
+++ b/packages/eth-json-rpc-middleware/src/utils/normalize.test.ts
@@ -2,7 +2,7 @@ import { MessageTypes, TypedMessage } from '@metamask/eth-sig-util';
import deepFreeze from 'deep-freeze-strict';
import { klona } from 'klona';
-import { normalizeTypedMessage } from './normalize';
+import { normalizeTypedMessage } from './normalize.js';
const MESSAGE_DATA_MOCK = {
types: {
diff --git a/packages/eth-json-rpc-middleware/src/utils/timeout.test.ts b/packages/eth-json-rpc-middleware/src/utils/timeout.test.ts
index 8e9e8181991..91f406dfed1 100644
--- a/packages/eth-json-rpc-middleware/src/utils/timeout.test.ts
+++ b/packages/eth-json-rpc-middleware/src/utils/timeout.test.ts
@@ -1,4 +1,4 @@
-import { timeout } from './timeout';
+import { timeout } from './timeout.js';
describe('timeout', () => {
describe('with real timers', () => {
diff --git a/packages/eth-json-rpc-middleware/src/utils/validation.test.ts b/packages/eth-json-rpc-middleware/src/utils/validation.test.ts
index 230b476a4cf..1760a9bf154 100644
--- a/packages/eth-json-rpc-middleware/src/utils/validation.test.ts
+++ b/packages/eth-json-rpc-middleware/src/utils/validation.test.ts
@@ -3,13 +3,13 @@ import { providerErrors } from '@metamask/rpc-errors';
import type { StructError } from '@metamask/superstruct';
import { any, validate } from '@metamask/superstruct';
-import type { WalletMiddlewareKeyValues } from '../wallet';
+import type { WalletMiddlewareKeyValues } from '../wallet.js';
import {
resemblesAddress,
validateAndNormalizeKeyholder,
validateParams,
validateTypedMessageKeys,
-} from './validation';
+} from './validation.js';
jest.mock('@metamask/superstruct', () => ({
...jest.requireActual('@metamask/superstruct'),
diff --git a/packages/eth-json-rpc-middleware/src/utils/validation.ts b/packages/eth-json-rpc-middleware/src/utils/validation.ts
index de3782fa67b..031fc0a76ca 100644
--- a/packages/eth-json-rpc-middleware/src/utils/validation.ts
+++ b/packages/eth-json-rpc-middleware/src/utils/validation.ts
@@ -4,8 +4,8 @@ import type { Struct, StructError } from '@metamask/superstruct';
import { validate } from '@metamask/superstruct';
import type { Hex } from '@metamask/utils';
-import type { WalletMiddlewareContext } from '../wallet';
-import { parseTypedMessage } from './normalize';
+import type { WalletMiddlewareContext } from '../wallet.js';
+import { parseTypedMessage } from './normalize.js';
/**
* Validates and normalizes a keyholder address for transaction- and
diff --git a/packages/eth-json-rpc-middleware/src/wallet.test.ts b/packages/eth-json-rpc-middleware/src/wallet.test.ts
index a9964c0d3a1..3b62e387ea9 100644
--- a/packages/eth-json-rpc-middleware/src/wallet.test.ts
+++ b/packages/eth-json-rpc-middleware/src/wallet.test.ts
@@ -1,15 +1,15 @@
import { MessageTypes, TypedMessage } from '@metamask/eth-sig-util';
import { JsonRpcEngineV2 } from '@metamask/json-rpc-engine/v2';
+import { createHandleParams, createRequest } from '../test/util/helpers.js';
import type {
MessageParams,
TransactionParams,
TypedMessageParams,
TypedMessageV1Params,
-} from '.';
-import { createWalletMiddleware } from '.';
-import { createHandleParams, createRequest } from '../test/util/helpers';
-import { DANGEROUS_PROTOTYPE_PROPERTIES } from './utils/validation';
+} from './..js';
+import { createWalletMiddleware } from './..js';
+import { DANGEROUS_PROTOTYPE_PROPERTIES } from './utils/validation.js';
const testAddresses = [
'0xbe93f9bacbcffc8ee6663f2647917ed7a20a57bb',
diff --git a/packages/eth-json-rpc-middleware/src/wallet.ts b/packages/eth-json-rpc-middleware/src/wallet.ts
index b220be16e09..3b8e6f17f71 100644
--- a/packages/eth-json-rpc-middleware/src/wallet.ts
+++ b/packages/eth-json-rpc-middleware/src/wallet.ts
@@ -10,23 +10,23 @@ import { rpcErrors } from '@metamask/rpc-errors';
import { isValidHexAddress } from '@metamask/utils';
import type { JsonRpcRequest, Json, Hex } from '@metamask/utils';
-import { createWalletGetGrantedExecutionPermissionsHandler } from './methods/wallet-get-granted-execution-permissions';
-import type { ProcessGetGrantedExecutionPermissionsHook } from './methods/wallet-get-granted-execution-permissions';
-import { createWalletGetSupportedExecutionPermissionsHandler } from './methods/wallet-get-supported-execution-permissions';
-import type { ProcessGetSupportedExecutionPermissionsHook } from './methods/wallet-get-supported-execution-permissions';
-import { createWalletRequestExecutionPermissionsHandler } from './methods/wallet-request-execution-permissions';
-import type { ProcessRequestExecutionPermissionsHook } from './methods/wallet-request-execution-permissions';
-import { createWalletRevokeExecutionPermissionHandler } from './methods/wallet-revoke-execution-permission';
-import type { ProcessRevokeExecutionPermissionHook } from './methods/wallet-revoke-execution-permission';
-import { stripArrayTypeIfPresent } from './utils/common';
-import { normalizeTypedMessage, parseTypedMessage } from './utils/normalize';
+import { createWalletGetGrantedExecutionPermissionsHandler } from './methods/wallet-get-granted-execution-permissions.js';
+import type { ProcessGetGrantedExecutionPermissionsHook } from './methods/wallet-get-granted-execution-permissions.js';
+import { createWalletGetSupportedExecutionPermissionsHandler } from './methods/wallet-get-supported-execution-permissions.js';
+import type { ProcessGetSupportedExecutionPermissionsHook } from './methods/wallet-get-supported-execution-permissions.js';
+import { createWalletRequestExecutionPermissionsHandler } from './methods/wallet-request-execution-permissions.js';
+import type { ProcessRequestExecutionPermissionsHook } from './methods/wallet-request-execution-permissions.js';
+import { createWalletRevokeExecutionPermissionHandler } from './methods/wallet-revoke-execution-permission.js';
+import type { ProcessRevokeExecutionPermissionHook } from './methods/wallet-revoke-execution-permission.js';
+import { stripArrayTypeIfPresent } from './utils/common.js';
+import { normalizeTypedMessage, parseTypedMessage } from './utils/normalize.js';
import {
resemblesAddress,
validateAndNormalizeKeyholder as validateKeyholder,
validateTypedDataForPrototypePollution,
validateTypedDataV1ForPrototypePollution,
validateTypedMessageKeys,
-} from './utils/validation';
+} from './utils/validation.js';
export type TransactionParams = {
from: string;
diff --git a/packages/eth-json-rpc-middleware/test/util/helpers.ts b/packages/eth-json-rpc-middleware/test/util/helpers.ts
index 778eda5a2cc..617fbad474e 100644
--- a/packages/eth-json-rpc-middleware/test/util/helpers.ts
+++ b/packages/eth-json-rpc-middleware/test/util/helpers.ts
@@ -10,7 +10,7 @@ import type { Json, JsonRpcParams, JsonRpcRequest } from '@metamask/utils';
import { klona } from 'klona/full';
import { isDeepStrictEqual } from 'util';
-import type { WalletMiddlewareKeyValues } from '../../src/wallet';
+import type { WalletMiddlewareKeyValues } from '../../src/wallet.js';
export const createRequest = <
Input extends Partial>,
diff --git a/packages/eth-json-rpc-provider/jest.config.js b/packages/eth-json-rpc-provider/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/eth-json-rpc-provider/jest.config.js
+++ b/packages/eth-json-rpc-provider/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/eth-json-rpc-provider/package.json b/packages/eth-json-rpc-provider/package.json
index a5d9bf73028..f70e602cc31 100644
--- a/packages/eth-json-rpc-provider/package.json
+++ b/packages/eth-json-rpc-provider/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/eth-json-rpc-provider",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/eth-json-rpc-provider",
@@ -60,10 +53,10 @@
},
"devDependencies": {
"@ethersproject/providers": "^5.7.0",
+ "@jest/globals": "^30.4.1",
"@metamask/auto-changelog": "^6.1.0",
"@metamask/eth-query": "^4.0.0",
"@metamask/ethjs-query": "^0.5.3",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"ethers": "^6.12.0",
diff --git a/packages/eth-json-rpc-provider/src/index.test.ts b/packages/eth-json-rpc-provider/src/index.test.ts
index 63ae8ab36ee..cd6ab0b5d5a 100644
--- a/packages/eth-json-rpc-provider/src/index.test.ts
+++ b/packages/eth-json-rpc-provider/src/index.test.ts
@@ -1,4 +1,4 @@
-import * as allExports from '.';
+import * as allExports from './..js';
describe('Package exports', () => {
it('has expected exports', () => {
diff --git a/packages/eth-json-rpc-provider/src/index.ts b/packages/eth-json-rpc-provider/src/index.ts
index a4bab7a5db3..b972bff0db6 100644
--- a/packages/eth-json-rpc-provider/src/index.ts
+++ b/packages/eth-json-rpc-provider/src/index.ts
@@ -1,6 +1,6 @@
-import { InternalProvider } from './internal-provider';
+import { InternalProvider } from './internal-provider.js';
-export * from './provider-from-middleware';
+export * from './provider-from-middleware.js';
/**
* @deprecated Use {@link InternalProvider} instead.
diff --git a/packages/eth-json-rpc-provider/src/internal-provider.test.ts b/packages/eth-json-rpc-provider/src/internal-provider.test.ts
index 24ee40abe33..3e40de07338 100644
--- a/packages/eth-json-rpc-provider/src/internal-provider.test.ts
+++ b/packages/eth-json-rpc-provider/src/internal-provider.test.ts
@@ -1,4 +1,6 @@
+import { jest } from '@jest/globals';
import { Web3Provider } from '@ethersproject/providers';
+import { jest } from '@jest/globals';
import EthQuery from '@metamask/eth-query';
import EthJsQuery from '@metamask/ethjs-query';
import { asV2Middleware, JsonRpcEngine } from '@metamask/json-rpc-engine';
@@ -15,7 +17,7 @@ import { promisify } from 'util';
import {
InternalProvider,
convertEip1193RequestToJsonRpcRequest,
-} from './internal-provider';
+} from './internal-provider.js';
jest.mock('uuid');
diff --git a/packages/eth-json-rpc-provider/src/provider-from-middleware.test.ts b/packages/eth-json-rpc-provider/src/provider-from-middleware.test.ts
index 6c20713e0bf..ca9955525e6 100644
--- a/packages/eth-json-rpc-provider/src/provider-from-middleware.test.ts
+++ b/packages/eth-json-rpc-provider/src/provider-from-middleware.test.ts
@@ -6,7 +6,7 @@ import type { Json, JsonRpcParams, JsonRpcRequest } from '@metamask/utils';
import {
providerFromMiddleware,
providerFromMiddlewareV2,
-} from './provider-from-middleware';
+} from './provider-from-middleware.js';
describe('providerFromMiddleware', () => {
it('handle a successful request', async () => {
diff --git a/packages/eth-json-rpc-provider/src/provider-from-middleware.ts b/packages/eth-json-rpc-provider/src/provider-from-middleware.ts
index f3ce178e58f..07a0f5fbbf5 100644
--- a/packages/eth-json-rpc-provider/src/provider-from-middleware.ts
+++ b/packages/eth-json-rpc-provider/src/provider-from-middleware.ts
@@ -8,7 +8,7 @@ import type {
} from '@metamask/json-rpc-engine/v2';
import type { Json, JsonRpcParams, JsonRpcRequest } from '@metamask/utils';
-import { InternalProvider } from './internal-provider';
+import { InternalProvider } from './internal-provider.js';
/**
* Construct an Ethereum provider from the given middleware.
diff --git a/packages/foundryup/jest.config.js b/packages/foundryup/jest.config.js
index df8d173e85f..a8a60cec9ac 100644
--- a/packages/foundryup/jest.config.js
+++ b/packages/foundryup/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/foundryup/package.json b/packages/foundryup/package.json
index a1e280c244d..476471fd0ba 100644
--- a/packages/foundryup/package.json
+++ b/packages/foundryup/package.json
@@ -21,6 +21,7 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
"main": "./dist/index.cjs",
"types": "./dist/index.d.cts",
@@ -33,8 +34,8 @@
},
"scripts": {
"anvil": "node_modules/.bin/anvil",
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/foundryup",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/foundryup",
@@ -55,7 +56,6 @@
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"@types/unzipper": "^0.10.10",
"@types/yargs": "^17.0.32",
diff --git a/packages/foundryup/src/cli.ts b/packages/foundryup/src/cli.ts
index 2fab6c50585..39ea8c28750 100644
--- a/packages/foundryup/src/cli.ts
+++ b/packages/foundryup/src/cli.ts
@@ -6,7 +6,7 @@
* This script downloads and installs Foundry binaries.
* If an error occurs, it logs the error and exits with code 1.
*/
-import { downloadAndInstallFoundryBinaries } from '.';
+import { downloadAndInstallFoundryBinaries } from './index.js';
/**
* Run the main installation process and handle errors.
diff --git a/packages/foundryup/src/download.ts b/packages/foundryup/src/download.ts
index 3958694702d..d9dac1e9cbc 100644
--- a/packages/foundryup/src/download.ts
+++ b/packages/foundryup/src/download.ts
@@ -4,7 +4,7 @@ import { request as httpsRequest } from 'node:https';
import { Stream } from 'node:stream';
import { pipeline } from 'node:stream/promises';
-import type { DownloadOptions } from './types';
+import type { DownloadOptions } from './types.js';
/**
* A PassThrough stream that emits a 'response' event when the HTTP(S) response is available.
diff --git a/packages/foundryup/src/extract.ts b/packages/foundryup/src/extract.ts
index 3cb213d9d97..82248a4aac8 100644
--- a/packages/foundryup/src/extract.ts
+++ b/packages/foundryup/src/extract.ts
@@ -11,10 +11,10 @@ import { extract as extractTar } from 'tar';
import { Open } from 'unzipper';
import type { Source, Entry } from 'unzipper';
-import { startDownload } from './download';
-import { Extension } from './types';
-import type { Binary } from './types';
-import { say } from './utils';
+import { startDownload } from './download.js';
+import { Extension } from './types.js';
+import type { Binary } from './types.js';
+import { say } from './utils.js';
/**
* Extracts the binaries from the given URL and writes them to the destination.
diff --git a/packages/foundryup/src/foundryup.test.ts b/packages/foundryup/src/foundryup.test.ts
index da3268a3dfa..75a0b5d26d2 100644
--- a/packages/foundryup/src/foundryup.test.ts
+++ b/packages/foundryup/src/foundryup.test.ts
@@ -9,11 +9,11 @@ import {
checkAndDownloadBinaries,
getBinaryArchiveUrl,
getCacheDirectory,
-} from '.';
-import { parseArgs } from './options';
-import type { Binary, Checksums } from './types';
-import { Architecture, Platform } from './types';
-import { isCodedError } from './utils';
+} from './..js';
+import { parseArgs } from './options.js';
+import type { Binary, Checksums } from './types.js';
+import { Architecture, Platform } from './types.js';
+import { isCodedError } from './utils.js';
type OperationDetails = {
path?: string;
diff --git a/packages/foundryup/src/index.ts b/packages/foundryup/src/index.ts
index 309c759275a..b483a61987e 100755
--- a/packages/foundryup/src/index.ts
+++ b/packages/foundryup/src/index.ts
@@ -16,17 +16,17 @@ import { dirname, join, relative } from 'node:path';
import { cwd, exit } from 'node:process';
import { parse as parseYaml } from 'yaml';
-import { extractFrom } from './extract';
-import { parseArgs, printBanner } from './options';
-import type { Checksums, Architecture, Binary } from './types';
-import { Extension, Platform } from './types';
+import { extractFrom } from './extract.js';
+import { parseArgs, printBanner } from './options.js';
+import type { Checksums, Architecture, Binary } from './types.js';
+import { Extension, Platform } from './types.js';
import {
getVersion,
isCodedError,
noop,
say,
transformChecksums,
-} from './utils';
+} from './utils.js';
/**
* Determines the cache directory based on the .yarnrc.yml configuration.
diff --git a/packages/foundryup/src/options.ts b/packages/foundryup/src/options.ts
index a0666b89edc..97a95fd3816 100644
--- a/packages/foundryup/src/options.ts
+++ b/packages/foundryup/src/options.ts
@@ -2,15 +2,15 @@ import { platform } from 'node:os';
import { argv, stdout } from 'node:process';
import yargs from 'yargs/yargs';
-import { Architecture, Binary, Platform } from './types';
+import { Architecture, Binary, Platform } from './types.js';
import type {
Checksums,
ParsedOptions,
ArchitecturesTuple,
BinariesTuple,
PlatformsTuple,
-} from './types';
-import { normalizeSystemArchitecture } from './utils';
+} from './types.js';
+import { normalizeSystemArchitecture } from './utils.js';
/**
* Type guard to check if a string is a valid version string starting with 'v'.
diff --git a/packages/foundryup/src/utils.ts b/packages/foundryup/src/utils.ts
index 1b9c33092c6..6cdbb1f14dc 100644
--- a/packages/foundryup/src/utils.ts
+++ b/packages/foundryup/src/utils.ts
@@ -1,13 +1,13 @@
import { execFileSync, execSync } from 'node:child_process';
import { arch } from 'node:os';
-import { Architecture } from './types';
+import { Architecture } from './types.js';
import type {
Checksums,
PlatformArchChecksums,
Binary,
Platform,
-} from './types';
+} from './types.js';
/**
* No Operation. A function that does nothing and returns nothing.
@@ -114,7 +114,7 @@ export function transformChecksums(
const key = `${targetPlatform}-${targetArch}` as const;
return {
algorithm: checksums.algorithm,
- binaries: Object.entries(checksums.binaries).reduce(
+ binaries: Object.entries(checksums.binaries).reduce>(
(acc, [name, record]) => {
acc[name as Binary] = record[key];
return acc;
diff --git a/packages/gas-fee-controller/jest.config.js b/packages/gas-fee-controller/jest.config.js
index 14cf684c6a7..3cd993c4462 100644
--- a/packages/gas-fee-controller/jest.config.js
+++ b/packages/gas-fee-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/gas-fee-controller/package.json b/packages/gas-fee-controller/package.json
index 0ed2f242854..79341d7396e 100644
--- a/packages/gas-fee-controller/package.json
+++ b/packages/gas-fee-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/gas-fee-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/gas-fee-controller",
@@ -71,7 +64,6 @@
"devDependencies": {
"@babel/runtime": "^7.23.9",
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"@types/jest-when": "^2.7.3",
"deepmerge": "^4.2.2",
diff --git a/packages/gas-fee-controller/src/GasFeeController-method-action-types.ts b/packages/gas-fee-controller/src/GasFeeController-method-action-types.ts
index 000c9b6a77e..4f50d3ce9a4 100644
--- a/packages/gas-fee-controller/src/GasFeeController-method-action-types.ts
+++ b/packages/gas-fee-controller/src/GasFeeController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { GasFeeController } from './GasFeeController';
+import type { GasFeeController } from './GasFeeController.js';
/**
* Resets the polling interval by stopping and restarting polling
diff --git a/packages/gas-fee-controller/src/GasFeeController.test.ts b/packages/gas-fee-controller/src/GasFeeController.test.ts
index 594330af428..b8d6db3b778 100644
--- a/packages/gas-fee-controller/src/GasFeeController.test.ts
+++ b/packages/gas-fee-controller/src/GasFeeController.test.ts
@@ -22,22 +22,22 @@ import nock from 'nock';
import {
buildCustomNetworkConfiguration,
buildCustomRpcEndpoint,
-} from '../../network-controller/tests/helpers';
-import determineGasFeeCalculations from './determineGasFeeCalculations';
+} from '../../network-controller/tests/helpers.js';
+import determineGasFeeCalculations from './determineGasFeeCalculations.js';
import {
fetchGasEstimates,
fetchLegacyGasPriceEstimates,
fetchEthGasPriceEstimate,
calculateTimeEstimate,
-} from './gas-util';
-import { GAS_ESTIMATE_TYPES, GasFeeController } from './GasFeeController';
+} from './gas-util.js';
+import { GAS_ESTIMATE_TYPES, GasFeeController } from './GasFeeController.js';
import type {
GasFeeMessenger,
GasFeeState,
GasFeeStateEthGasPrice,
GasFeeStateFeeMarket,
GasFeeStateLegacy,
-} from './GasFeeController';
+} from './GasFeeController.js';
jest.mock('./determineGasFeeCalculations');
@@ -353,7 +353,7 @@ describe('GasFeeController', () => {
gasFeeController.destroy();
const { blockTracker } = networkController.getProviderAndBlockTracker();
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
+
blockTracker?.destroy();
jest.useRealTimers();
});
@@ -612,9 +612,7 @@ describe('GasFeeController', () => {
},
});
- // TODO: Either fix this lint violation or explain why it's necessary to ignore.
- // eslint-disable-next-line @typescript-eslint/await-thenable
- await gasFeeController.enableNonRPCGasFeeApis();
+ gasFeeController.enableNonRPCGasFeeApis();
expect(gasFeeController.state.nonRPCGasFeeApisDisabled).toBe(false);
});
@@ -629,9 +627,7 @@ describe('GasFeeController', () => {
},
});
- // TODO: Either fix this lint violation or explain why it's necessary to ignore.
- // eslint-disable-next-line @typescript-eslint/await-thenable
- await gasFeeController.disableNonRPCGasFeeApis();
+ gasFeeController.disableNonRPCGasFeeApis();
expect(gasFeeController.state.nonRPCGasFeeApisDisabled).toBe(true);
});
diff --git a/packages/gas-fee-controller/src/GasFeeController.ts b/packages/gas-fee-controller/src/GasFeeController.ts
index bacebdd786f..9e74f2e0680 100644
--- a/packages/gas-fee-controller/src/GasFeeController.ts
+++ b/packages/gas-fee-controller/src/GasFeeController.ts
@@ -23,14 +23,14 @@ import { StaticIntervalPollingController } from '@metamask/polling-controller';
import type { Hex } from '@metamask/utils';
import { v1 as random } from 'uuid';
-import determineGasFeeCalculations from './determineGasFeeCalculations';
+import determineGasFeeCalculations from './determineGasFeeCalculations.js';
import {
fetchGasEstimates,
fetchLegacyGasPriceEstimates,
fetchEthGasPriceEstimate,
calculateTimeEstimate,
-} from './gas-util';
-import type { GasFeeControllerMethodActions } from './GasFeeController-method-action-types';
+} from './gas-util.js';
+import type { GasFeeControllerMethodActions } from './GasFeeController-method-action-types.js';
export const LEGACY_GAS_PRICES_API_URL = `https://api.metaswap.codefi.network/gasPrices`;
@@ -426,7 +426,7 @@ export class GasFeeController extends StaticIntervalPollingController {
await this.#onNetworkControllerDidChange(networkControllerState);
},
diff --git a/packages/gas-fee-controller/src/determineGasFeeCalculations.test.ts b/packages/gas-fee-controller/src/determineGasFeeCalculations.test.ts
index a8df42bc14c..deaf4f27aed 100644
--- a/packages/gas-fee-controller/src/determineGasFeeCalculations.test.ts
+++ b/packages/gas-fee-controller/src/determineGasFeeCalculations.test.ts
@@ -1,17 +1,17 @@
-import determineGasFeeCalculations from './determineGasFeeCalculations';
+import determineGasFeeCalculations from './determineGasFeeCalculations.js';
import {
fetchGasEstimates,
fetchLegacyGasPriceEstimates,
fetchEthGasPriceEstimate,
calculateTimeEstimate,
-} from './gas-util';
+} from './gas-util.js';
import type {
unknownString,
GasFeeEstimates,
LegacyGasPriceEstimate,
EthGasPriceEstimate,
EstimatedGasFeeTimeBounds,
-} from './GasFeeController';
+} from './GasFeeController.js';
jest.mock('./gas-util');
diff --git a/packages/gas-fee-controller/src/determineGasFeeCalculations.ts b/packages/gas-fee-controller/src/determineGasFeeCalculations.ts
index b93b86e9bb8..3d8382b451b 100644
--- a/packages/gas-fee-controller/src/determineGasFeeCalculations.ts
+++ b/packages/gas-fee-controller/src/determineGasFeeCalculations.ts
@@ -4,8 +4,8 @@ import type {
GasFeeEstimates,
GasFeeState as GasFeeCalculations,
LegacyGasPriceEstimate,
-} from './GasFeeController';
-import { GAS_ESTIMATE_TYPES } from './GasFeeController';
+} from './GasFeeController.js';
+import { GAS_ESTIMATE_TYPES } from './GasFeeController.js';
type DetermineGasFeeCalculationsRequest = {
isEIP1559Compatible: boolean;
diff --git a/packages/gas-fee-controller/src/gas-util.test.ts b/packages/gas-fee-controller/src/gas-util.test.ts
index baea4369289..aaea5d2370b 100644
--- a/packages/gas-fee-controller/src/gas-util.test.ts
+++ b/packages/gas-fee-controller/src/gas-util.test.ts
@@ -5,8 +5,8 @@ import {
normalizeGWEIDecimalNumbers,
fetchGasEstimates,
calculateTimeEstimate,
-} from './gas-util';
-import type { GasFeeEstimates } from './GasFeeController';
+} from './gas-util.js';
+import type { GasFeeEstimates } from './GasFeeController.js';
const mockEIP1559ApiResponses: GasFeeEstimates[] = [
{
diff --git a/packages/gas-fee-controller/src/gas-util.ts b/packages/gas-fee-controller/src/gas-util.ts
index 17a242ac8be..adabe9fbf23 100644
--- a/packages/gas-fee-controller/src/gas-util.ts
+++ b/packages/gas-fee-controller/src/gas-util.ts
@@ -13,7 +13,7 @@ import type {
EstimatedGasFeeTimeBounds,
unknownString,
LegacyGasPriceEstimate,
-} from './GasFeeController';
+} from './GasFeeController.js';
const makeClientIdHeader = (clientId: string) => ({ 'X-Client-Id': clientId });
diff --git a/packages/gas-fee-controller/src/index.ts b/packages/gas-fee-controller/src/index.ts
index 073a4b4b74a..20a4abf17e0 100644
--- a/packages/gas-fee-controller/src/index.ts
+++ b/packages/gas-fee-controller/src/index.ts
@@ -1,4 +1,4 @@
-export * from './GasFeeController';
+export * from './GasFeeController.js';
export type {
GasFeeControllerResetPollingAction,
GasFeeControllerFetchGasFeeEstimatesAction,
@@ -8,4 +8,4 @@ export type {
GasFeeControllerGetTimeEstimateAction,
GasFeeControllerEnableNonRPCGasFeeApisAction,
GasFeeControllerDisableNonRPCGasFeeApisAction,
-} from './GasFeeController-method-action-types';
+} from './GasFeeController-method-action-types.js';
diff --git a/packages/gator-permissions-controller/jest.config.js b/packages/gator-permissions-controller/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/gator-permissions-controller/jest.config.js
+++ b/packages/gator-permissions-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/gator-permissions-controller/package.json b/packages/gator-permissions-controller/package.json
index 2f683a13d07..2c8e92bf2bf 100644
--- a/packages/gator-permissions-controller/package.json
+++ b/packages/gator-permissions-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/gator-permissions-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/gator-permissions-controller",
@@ -72,7 +65,6 @@
"@lavamoat/allow-scripts": "^3.0.4",
"@lavamoat/preinstall-always-fail": "^2.1.0",
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/gator-permissions-controller/src/GatorPermissionsController-method-action-types.ts b/packages/gator-permissions-controller/src/GatorPermissionsController-method-action-types.ts
index cd8e92e7ab2..1acd3f0e7a2 100644
--- a/packages/gator-permissions-controller/src/GatorPermissionsController-method-action-types.ts
+++ b/packages/gator-permissions-controller/src/GatorPermissionsController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { GatorPermissionsController } from './GatorPermissionsController';
+import type { GatorPermissionsController } from './GatorPermissionsController.js';
/**
* Fetches granted permissions from the gator permissions provider Snap and updates state.
diff --git a/packages/gator-permissions-controller/src/GatorPermissionsController.test.ts b/packages/gator-permissions-controller/src/GatorPermissionsController.test.ts
index 22c08aab8fb..bddd80635ff 100644
--- a/packages/gator-permissions-controller/src/GatorPermissionsController.test.ts
+++ b/packages/gator-permissions-controller/src/GatorPermissionsController.test.ts
@@ -25,22 +25,22 @@ import { TransactionStatus } from '@metamask/transaction-controller';
import { hexToBigInt, numberToHex } from '@metamask/utils';
import type { Hex } from '@metamask/utils';
-import { flushPromises } from '../../../tests/helpers';
+import { flushPromises } from '../../../tests/helpers.js';
import {
mockGatorPermissionsStorageEntriesFactory,
mockNativeTokenStreamStorageEntry,
-} from '../tests/mocks';
-import { DELEGATION_FRAMEWORK_VERSION } from './constants';
-import { GatorPermissionsFetchError } from './errors';
-import type { GatorPermissionsControllerMessenger } from './GatorPermissionsController';
-import { GatorPermissionsController } from './GatorPermissionsController';
+} from '../tests/mocks.js';
+import { DELEGATION_FRAMEWORK_VERSION } from './constants.js';
+import { GatorPermissionsFetchError } from './errors.js';
+import type { GatorPermissionsControllerMessenger } from './GatorPermissionsController.js';
+import { GatorPermissionsController } from './GatorPermissionsController.js';
import type {
PermissionInfoWithMetadata,
GatorPermissionStatus,
StoredGatorPermission,
RevocationParams,
SupportedPermissionType,
-} from './types';
+} from './types.js';
const PERMISSION_STATUSES: GatorPermissionStatus[] = [
'Active',
diff --git a/packages/gator-permissions-controller/src/GatorPermissionsController.ts b/packages/gator-permissions-controller/src/GatorPermissionsController.ts
index 652513bdf97..6906cb39fb4 100644
--- a/packages/gator-permissions-controller/src/GatorPermissionsController.ts
+++ b/packages/gator-permissions-controller/src/GatorPermissionsController.ts
@@ -27,25 +27,25 @@ import type {
} from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
-import { DELEGATION_FRAMEWORK_VERSION } from './constants';
-import type { DecodedPermission } from './decodePermission';
+import { DELEGATION_FRAMEWORK_VERSION } from './constants.js';
+import type { DecodedPermission } from './decodePermission.js';
import {
createPermissionDecodersForContracts,
findDecodersWithMatchingCaveatAddresses,
reconstructDecodedPermission,
selectUniqueDecoderAndDecodedPermission,
-} from './decodePermission';
+} from './decodePermission.js';
import {
GatorPermissionsFetchError,
GatorPermissionsProviderError,
OriginNotAllowedError,
PermissionDecodingError,
-} from './errors';
-import type { GatorPermissionsControllerMethodActions } from './GatorPermissionsController-method-action-types';
-import { controllerLog } from './logger';
-import { updateGrantedPermissionsStatus } from './permissionOnChainStatus';
-import type { PermissionStatusEip1193Provider } from './permissionOnChainStatus';
-import { GatorPermissionsSnapRpcMethod } from './types';
+} from './errors.js';
+import type { GatorPermissionsControllerMethodActions } from './GatorPermissionsController-method-action-types.js';
+import { controllerLog } from './logger.js';
+import { updateGrantedPermissionsStatus } from './permissionOnChainStatus.js';
+import type { PermissionStatusEip1193Provider } from './permissionOnChainStatus.js';
+import { GatorPermissionsSnapRpcMethod } from './types.js';
import type {
StoredGatorPermission,
PermissionInfoWithMetadata,
@@ -54,8 +54,8 @@ import type {
DelegationDetails,
RevocationParams,
PendingRevocationParams,
-} from './types';
-import { executeSnapRpc } from './utils';
+} from './types.js';
+import { executeSnapRpc } from './utils.js';
// === GENERAL ===
diff --git a/packages/gator-permissions-controller/src/decodePermission/decodePermission.test.ts b/packages/gator-permissions-controller/src/decodePermission/decodePermission.test.ts
index 40762254890..3316ec68f22 100644
--- a/packages/gator-permissions-controller/src/decodePermission/decodePermission.test.ts
+++ b/packages/gator-permissions-controller/src/decodePermission/decodePermission.test.ts
@@ -10,14 +10,14 @@ import {
findDecodersWithMatchingCaveatAddresses,
reconstructDecodedPermission,
selectUniqueDecoderAndDecodedPermission,
-} from './decodePermission';
-import { createPermissionDecodersForContracts } from './decoders';
+} from './decodePermission.js';
+import { createPermissionDecodersForContracts } from './decoders.js';
import type {
DecodedPermission,
DeployedContractsByName,
PermissionDecoder,
-} from './types';
-import { getChecksumEnforcersByChainId } from './utils';
+} from './types.js';
+import { getChecksumEnforcersByChainId } from './utils.js';
// These tests use the live deployments table for version 1.3.0 to
// construct deterministic caveat address sets for a known chain.
diff --git a/packages/gator-permissions-controller/src/decodePermission/decodePermission.ts b/packages/gator-permissions-controller/src/decodePermission/decodePermission.ts
index 949b1a4096e..63c22021177 100644
--- a/packages/gator-permissions-controller/src/decodePermission/decodePermission.ts
+++ b/packages/gator-permissions-controller/src/decodePermission/decodePermission.ts
@@ -7,7 +7,7 @@ import type {
PermissionType,
PermissionDecoder,
ValidateAndDecodeResult,
-} from './types';
+} from './types.js';
/**
* Returns every permission decoder whose caveat-address pattern matches the
diff --git a/packages/gator-permissions-controller/src/decodePermission/decoders/erc20PayeeRule.test.ts b/packages/gator-permissions-controller/src/decodePermission/decoders/erc20PayeeRule.test.ts
index 9d0acec9120..f4b448b8cb9 100644
--- a/packages/gator-permissions-controller/src/decodePermission/decoders/erc20PayeeRule.test.ts
+++ b/packages/gator-permissions-controller/src/decodePermission/decoders/erc20PayeeRule.test.ts
@@ -6,9 +6,9 @@ import {
import { getChecksumAddress } from '@metamask/utils';
import type { Hex } from '@metamask/utils';
-import type { ChecksumCaveat } from '../types';
-import { getChecksumEnforcersByChainId } from '../utils';
-import { erc20PayeeRule } from './erc20PayeeRule';
+import type { ChecksumCaveat } from '../types.js';
+import { getChecksumEnforcersByChainId } from '../utils.js';
+import { erc20PayeeRule } from './erc20PayeeRule.js';
describe('erc20PayeeRule', () => {
const contracts = DELEGATOR_CONTRACTS['1.3.0'][CHAIN_ID.sepolia];
diff --git a/packages/gator-permissions-controller/src/decodePermission/decoders/erc20PayeeRule.ts b/packages/gator-permissions-controller/src/decodePermission/decoders/erc20PayeeRule.ts
index 6e1f24a6226..2f2ad4227cb 100644
--- a/packages/gator-permissions-controller/src/decodePermission/decoders/erc20PayeeRule.ts
+++ b/packages/gator-permissions-controller/src/decodePermission/decoders/erc20PayeeRule.ts
@@ -2,9 +2,9 @@ import { decodeAllowedCalldataTerms } from '@metamask/delegation-core';
import { getChecksumAddress } from '@metamask/utils';
import type { Hex } from '@metamask/utils';
-import { EXECUTION_PERMISSION_PAYEE_RULE_TYPE } from '../../constants';
-import type { RuleDecoder } from '../types';
-import { getByteLength } from '../utils';
+import { EXECUTION_PERMISSION_PAYEE_RULE_TYPE } from '../../constants.js';
+import type { RuleDecoder } from '../types.js';
+import { getByteLength } from '../utils.js';
const ERC20_TRANSFER_PAYEE_START_INDEX = 4;
const ERC20_PAYEE_VALUE_BYTE_LENGTH = 32;
diff --git a/packages/gator-permissions-controller/src/decodePermission/decoders/erc20TokenAllowance.test.ts b/packages/gator-permissions-controller/src/decodePermission/decoders/erc20TokenAllowance.test.ts
index c09e8caa4f3..29f03fccc13 100644
--- a/packages/gator-permissions-controller/src/decodePermission/decoders/erc20TokenAllowance.test.ts
+++ b/packages/gator-permissions-controller/src/decodePermission/decoders/erc20TokenAllowance.test.ts
@@ -5,8 +5,8 @@ import {
DELEGATOR_CONTRACTS,
} from '@metamask/delegation-deployments';
-import { createPermissionDecodersForContracts } from '.';
-import { ZERO_32_BYTES } from '../utils';
+import { ZERO_32_BYTES } from '../utils.js';
+import { createPermissionDecodersForContracts } from './..js';
describe('erc20-token-allowance decoder', () => {
const chainId = CHAIN_ID.sepolia;
diff --git a/packages/gator-permissions-controller/src/decodePermission/decoders/erc20TokenAllowance.ts b/packages/gator-permissions-controller/src/decodePermission/decoders/erc20TokenAllowance.ts
index 26e342cb676..5c96763f40b 100644
--- a/packages/gator-permissions-controller/src/decodePermission/decoders/erc20TokenAllowance.ts
+++ b/packages/gator-permissions-controller/src/decodePermission/decoders/erc20TokenAllowance.ts
@@ -4,18 +4,18 @@ import type {
ChecksumCaveat,
ChecksumEnforcersByChainId,
DecodedPermission,
-} from '../types';
+} from '../types.js';
import {
getByteLength,
getTermsByEnforcer,
splitHex,
UINT256_MAX,
ZERO_32_BYTES,
-} from '../utils';
-import { erc20PayeeRule } from './erc20PayeeRule';
-import { expiryRule } from './expiryRule';
-import type { MakePermissionDecoderConfig } from './makePermissionDecoder';
-import { redeemerRule } from './redeemerRule';
+} from '../utils.js';
+import { erc20PayeeRule } from './erc20PayeeRule.js';
+import { expiryRule } from './expiryRule.js';
+import type { MakePermissionDecoderConfig } from './makePermissionDecoder.js';
+import { redeemerRule } from './redeemerRule.js';
/**
* Builds the configuration for the erc20-token-allowance permission decoder.
diff --git a/packages/gator-permissions-controller/src/decodePermission/decoders/erc20TokenPeriodic.test.ts b/packages/gator-permissions-controller/src/decodePermission/decoders/erc20TokenPeriodic.test.ts
index e77c5cd4543..028fdde69c6 100644
--- a/packages/gator-permissions-controller/src/decodePermission/decoders/erc20TokenPeriodic.test.ts
+++ b/packages/gator-permissions-controller/src/decodePermission/decoders/erc20TokenPeriodic.test.ts
@@ -8,8 +8,8 @@ import {
DELEGATOR_CONTRACTS,
} from '@metamask/delegation-deployments';
-import { createPermissionDecodersForContracts } from '.';
-import { MAX_PERIOD_DURATION, ZERO_32_BYTES } from '../utils';
+import { MAX_PERIOD_DURATION, ZERO_32_BYTES } from '../utils.js';
+import { createPermissionDecodersForContracts } from './..js';
describe('erc20-token-periodic decoder', () => {
const chainId = CHAIN_ID.sepolia;
diff --git a/packages/gator-permissions-controller/src/decodePermission/decoders/erc20TokenPeriodic.ts b/packages/gator-permissions-controller/src/decodePermission/decoders/erc20TokenPeriodic.ts
index 52614cae437..1ab4c1eb6f2 100644
--- a/packages/gator-permissions-controller/src/decodePermission/decoders/erc20TokenPeriodic.ts
+++ b/packages/gator-permissions-controller/src/decodePermission/decoders/erc20TokenPeriodic.ts
@@ -4,18 +4,18 @@ import type {
ChecksumCaveat,
ChecksumEnforcersByChainId,
DecodedPermission,
-} from '../types';
+} from '../types.js';
import {
getByteLength,
getTermsByEnforcer,
MAX_PERIOD_DURATION,
splitHex,
ZERO_32_BYTES,
-} from '../utils';
-import { erc20PayeeRule } from './erc20PayeeRule';
-import { expiryRule } from './expiryRule';
-import type { MakePermissionDecoderConfig } from './makePermissionDecoder';
-import { redeemerRule } from './redeemerRule';
+} from '../utils.js';
+import { erc20PayeeRule } from './erc20PayeeRule.js';
+import { expiryRule } from './expiryRule.js';
+import type { MakePermissionDecoderConfig } from './makePermissionDecoder.js';
+import { redeemerRule } from './redeemerRule.js';
/**
* Builds the configuration for the erc20-token-periodic permission decoder.
diff --git a/packages/gator-permissions-controller/src/decodePermission/decoders/erc20TokenRevocation.test.ts b/packages/gator-permissions-controller/src/decodePermission/decoders/erc20TokenRevocation.test.ts
index d23bb16a76e..1937673df25 100644
--- a/packages/gator-permissions-controller/src/decodePermission/decoders/erc20TokenRevocation.test.ts
+++ b/packages/gator-permissions-controller/src/decodePermission/decoders/erc20TokenRevocation.test.ts
@@ -5,7 +5,7 @@ import {
} from '@metamask/delegation-deployments';
import { getChecksumAddress } from '@metamask/utils';
-import { createPermissionDecodersForContracts } from '.';
+import { createPermissionDecodersForContracts } from './..js';
describe('erc20-token-revocation decoder', () => {
const chainId = CHAIN_ID.sepolia;
diff --git a/packages/gator-permissions-controller/src/decodePermission/decoders/erc20TokenRevocation.ts b/packages/gator-permissions-controller/src/decodePermission/decoders/erc20TokenRevocation.ts
index 1021fa6f0e2..0e933dd0fea 100644
--- a/packages/gator-permissions-controller/src/decodePermission/decoders/erc20TokenRevocation.ts
+++ b/packages/gator-permissions-controller/src/decodePermission/decoders/erc20TokenRevocation.ts
@@ -2,16 +2,16 @@ import type {
ChecksumCaveat,
ChecksumEnforcersByChainId,
DecodedPermission,
-} from '../types';
+} from '../types.js';
import {
ERC20_APPROVE_SELECTOR_TERMS,
ERC20_APPROVE_ZERO_AMOUNT_TERMS,
getTermsByEnforcer,
ZERO_32_BYTES,
-} from '../utils';
-import { expiryRule } from './expiryRule';
-import type { MakePermissionDecoderConfig } from './makePermissionDecoder';
-import { redeemerRule } from './redeemerRule';
+} from '../utils.js';
+import { expiryRule } from './expiryRule.js';
+import type { MakePermissionDecoderConfig } from './makePermissionDecoder.js';
+import { redeemerRule } from './redeemerRule.js';
/**
* Builds the configuration for the erc20-token-revocation permission decoder.
diff --git a/packages/gator-permissions-controller/src/decodePermission/decoders/erc20TokenStream.test.ts b/packages/gator-permissions-controller/src/decodePermission/decoders/erc20TokenStream.test.ts
index 19304a8c440..41f9505207d 100644
--- a/packages/gator-permissions-controller/src/decodePermission/decoders/erc20TokenStream.test.ts
+++ b/packages/gator-permissions-controller/src/decodePermission/decoders/erc20TokenStream.test.ts
@@ -8,8 +8,8 @@ import {
DELEGATOR_CONTRACTS,
} from '@metamask/delegation-deployments';
-import { createPermissionDecodersForContracts } from '.';
-import { ZERO_32_BYTES } from '../utils';
+import { ZERO_32_BYTES } from '../utils.js';
+import { createPermissionDecodersForContracts } from './..js';
describe('erc20-token-stream decoder', () => {
const chainId = CHAIN_ID.sepolia;
diff --git a/packages/gator-permissions-controller/src/decodePermission/decoders/erc20TokenStream.ts b/packages/gator-permissions-controller/src/decodePermission/decoders/erc20TokenStream.ts
index 75478391393..314bbbae932 100644
--- a/packages/gator-permissions-controller/src/decodePermission/decoders/erc20TokenStream.ts
+++ b/packages/gator-permissions-controller/src/decodePermission/decoders/erc20TokenStream.ts
@@ -4,17 +4,17 @@ import type {
ChecksumCaveat,
ChecksumEnforcersByChainId,
DecodedPermission,
-} from '../types';
+} from '../types.js';
import {
getByteLength,
getTermsByEnforcer,
splitHex,
ZERO_32_BYTES,
-} from '../utils';
-import { erc20PayeeRule } from './erc20PayeeRule';
-import { expiryRule } from './expiryRule';
-import type { MakePermissionDecoderConfig } from './makePermissionDecoder';
-import { redeemerRule } from './redeemerRule';
+} from '../utils.js';
+import { erc20PayeeRule } from './erc20PayeeRule.js';
+import { expiryRule } from './expiryRule.js';
+import type { MakePermissionDecoderConfig } from './makePermissionDecoder.js';
+import { redeemerRule } from './redeemerRule.js';
/**
* Builds the configuration for the erc20-token-stream permission decoder.
diff --git a/packages/gator-permissions-controller/src/decodePermission/decoders/expiryRule.test.ts b/packages/gator-permissions-controller/src/decodePermission/decoders/expiryRule.test.ts
index 6966a6694a1..8ead3bcf3e5 100644
--- a/packages/gator-permissions-controller/src/decodePermission/decoders/expiryRule.test.ts
+++ b/packages/gator-permissions-controller/src/decodePermission/decoders/expiryRule.test.ts
@@ -5,9 +5,9 @@ import {
} from '@metamask/delegation-deployments';
import type { Hex } from '@metamask/utils';
-import type { ChecksumCaveat } from '../types';
-import { getChecksumEnforcersByChainId } from '../utils';
-import { expiryRule } from './expiryRule';
+import type { ChecksumCaveat } from '../types.js';
+import { getChecksumEnforcersByChainId } from '../utils.js';
+import { expiryRule } from './expiryRule.js';
describe('expiryRule', () => {
const contracts = DELEGATOR_CONTRACTS['1.3.0'][CHAIN_ID.sepolia];
diff --git a/packages/gator-permissions-controller/src/decodePermission/decoders/expiryRule.ts b/packages/gator-permissions-controller/src/decodePermission/decoders/expiryRule.ts
index 14b7127966f..c9c2b4f8116 100644
--- a/packages/gator-permissions-controller/src/decodePermission/decoders/expiryRule.ts
+++ b/packages/gator-permissions-controller/src/decodePermission/decoders/expiryRule.ts
@@ -1,6 +1,6 @@
-import { EXECUTION_PERMISSION_EXPIRY_RULE_TYPE } from '../../constants';
-import type { RuleDecoder } from '../types';
-import { extractExpiryFromCaveatTerms, getTermsByEnforcer } from '../utils';
+import { EXECUTION_PERMISSION_EXPIRY_RULE_TYPE } from '../../constants.js';
+import type { RuleDecoder } from '../types.js';
+import { extractExpiryFromCaveatTerms, getTermsByEnforcer } from '../utils.js';
/**
* Rule decoder that extracts the expiry timestamp from a TimestampEnforcer
diff --git a/packages/gator-permissions-controller/src/decodePermission/decoders/index.ts b/packages/gator-permissions-controller/src/decodePermission/decoders/index.ts
index 58d818b8a80..ed2bf230934 100644
--- a/packages/gator-permissions-controller/src/decodePermission/decoders/index.ts
+++ b/packages/gator-permissions-controller/src/decodePermission/decoders/index.ts
@@ -1,14 +1,14 @@
-import type { DeployedContractsByName, PermissionDecoder } from '../types';
-import { getChecksumEnforcersByChainId } from '../utils';
-import { makeErc20TokenAllowanceDecoderConfig } from './erc20TokenAllowance';
-import { makeErc20TokenPeriodicDecoderConfig } from './erc20TokenPeriodic';
-import { makeErc20TokenRevocationDecoderConfig } from './erc20TokenRevocation';
-import { makeErc20TokenStreamDecoderConfig } from './erc20TokenStream';
-import { makePermissionDecoder } from './makePermissionDecoder';
-import { makeNativeTokenAllowanceDecoderConfig } from './nativeTokenAllowance';
-import { makeNativeTokenPeriodicDecoderConfig } from './nativeTokenPeriodic';
-import { makeNativeTokenStreamDecoderConfig } from './nativeTokenStream';
-import { makeTokenApprovalRevocationDecoderConfig } from './tokenApprovalRevocation';
+import type { DeployedContractsByName, PermissionDecoder } from '../types.js';
+import { getChecksumEnforcersByChainId } from '../utils.js';
+import { makeErc20TokenAllowanceDecoderConfig } from './erc20TokenAllowance.js';
+import { makeErc20TokenPeriodicDecoderConfig } from './erc20TokenPeriodic.js';
+import { makeErc20TokenRevocationDecoderConfig } from './erc20TokenRevocation.js';
+import { makeErc20TokenStreamDecoderConfig } from './erc20TokenStream.js';
+import { makePermissionDecoder } from './makePermissionDecoder.js';
+import { makeNativeTokenAllowanceDecoderConfig } from './nativeTokenAllowance.js';
+import { makeNativeTokenPeriodicDecoderConfig } from './nativeTokenPeriodic.js';
+import { makeNativeTokenStreamDecoderConfig } from './nativeTokenStream.js';
+import { makeTokenApprovalRevocationDecoderConfig } from './tokenApprovalRevocation.js';
/**
* Builds the canonical set of permission decoders for a chain.
diff --git a/packages/gator-permissions-controller/src/decodePermission/decoders/makePermissionDecoder.test.ts b/packages/gator-permissions-controller/src/decodePermission/decoders/makePermissionDecoder.test.ts
index 817b2cf7ef0..75ffc9480f4 100644
--- a/packages/gator-permissions-controller/src/decodePermission/decoders/makePermissionDecoder.test.ts
+++ b/packages/gator-permissions-controller/src/decodePermission/decoders/makePermissionDecoder.test.ts
@@ -10,12 +10,12 @@ import {
import { getChecksumAddress } from '@metamask/utils';
import type { Hex } from '@metamask/utils';
-import { getChecksumEnforcersByChainId } from '../utils';
-import { erc20PayeeRule } from './erc20PayeeRule';
-import { expiryRule } from './expiryRule';
-import { makePermissionDecoder } from './makePermissionDecoder';
-import { nativePayeeRule } from './nativePayeeRule';
-import { redeemerRule } from './redeemerRule';
+import { getChecksumEnforcersByChainId } from '../utils.js';
+import { erc20PayeeRule } from './erc20PayeeRule.js';
+import { expiryRule } from './expiryRule.js';
+import { makePermissionDecoder } from './makePermissionDecoder.js';
+import { nativePayeeRule } from './nativePayeeRule.js';
+import { redeemerRule } from './redeemerRule.js';
describe('makePermissionDecoder', () => {
const contracts = DELEGATOR_CONTRACTS['1.3.0'][CHAIN_ID.sepolia];
diff --git a/packages/gator-permissions-controller/src/decodePermission/decoders/makePermissionDecoder.ts b/packages/gator-permissions-controller/src/decodePermission/decoders/makePermissionDecoder.ts
index bb15e243f11..7d2b9bb993f 100644
--- a/packages/gator-permissions-controller/src/decodePermission/decoders/makePermissionDecoder.ts
+++ b/packages/gator-permissions-controller/src/decodePermission/decoders/makePermissionDecoder.ts
@@ -3,7 +3,7 @@ import type { Caveat } from '@metamask/delegation-core';
import { getChecksumAddress, isStrictHexString } from '@metamask/utils';
import type { Hex } from '@metamask/utils';
-import { EXECUTION_PERMISSION_EXPIRY_RULE_TYPE } from '../../constants';
+import { EXECUTION_PERMISSION_EXPIRY_RULE_TYPE } from '../../constants.js';
import type {
ChecksumCaveat,
ChecksumEnforcersByChainId,
@@ -12,8 +12,8 @@ import type {
PermissionType,
RuleDecoder,
ValidateAndDecodeResult,
-} from '../types';
-import { buildEnforcerCountsAndSet, enforcersMatchRule } from '../utils';
+} from '../types.js';
+import { buildEnforcerCountsAndSet, enforcersMatchRule } from '../utils.js';
/**
* Configuration object describing how to decode a single permission type.
diff --git a/packages/gator-permissions-controller/src/decodePermission/decoders/nativePayeeRule.test.ts b/packages/gator-permissions-controller/src/decodePermission/decoders/nativePayeeRule.test.ts
index d7e29cef562..c5c720d2f5c 100644
--- a/packages/gator-permissions-controller/src/decodePermission/decoders/nativePayeeRule.test.ts
+++ b/packages/gator-permissions-controller/src/decodePermission/decoders/nativePayeeRule.test.ts
@@ -6,9 +6,9 @@ import {
import { getChecksumAddress } from '@metamask/utils';
import type { Hex } from '@metamask/utils';
-import type { ChecksumCaveat } from '../types';
-import { getChecksumEnforcersByChainId } from '../utils';
-import { nativePayeeRule } from './nativePayeeRule';
+import type { ChecksumCaveat } from '../types.js';
+import { getChecksumEnforcersByChainId } from '../utils.js';
+import { nativePayeeRule } from './nativePayeeRule.js';
describe('nativePayeeRule', () => {
const contracts = DELEGATOR_CONTRACTS['1.3.0'][CHAIN_ID.sepolia];
diff --git a/packages/gator-permissions-controller/src/decodePermission/decoders/nativePayeeRule.ts b/packages/gator-permissions-controller/src/decodePermission/decoders/nativePayeeRule.ts
index c30279deee3..77d444ad8e4 100644
--- a/packages/gator-permissions-controller/src/decodePermission/decoders/nativePayeeRule.ts
+++ b/packages/gator-permissions-controller/src/decodePermission/decoders/nativePayeeRule.ts
@@ -1,8 +1,8 @@
import { decodeAllowedTargetsTerms } from '@metamask/delegation-core';
import { getChecksumAddress } from '@metamask/utils';
-import { EXECUTION_PERMISSION_PAYEE_RULE_TYPE } from '../../constants';
-import type { RuleDecoder } from '../types';
+import { EXECUTION_PERMISSION_PAYEE_RULE_TYPE } from '../../constants.js';
+import type { RuleDecoder } from '../types.js';
/**
* Rule decoder for native-token style payees, where the payee address(es) are
diff --git a/packages/gator-permissions-controller/src/decodePermission/decoders/nativeTokenAllowance.test.ts b/packages/gator-permissions-controller/src/decodePermission/decoders/nativeTokenAllowance.test.ts
index 383428beedd..c696756b7a3 100644
--- a/packages/gator-permissions-controller/src/decodePermission/decoders/nativeTokenAllowance.test.ts
+++ b/packages/gator-permissions-controller/src/decodePermission/decoders/nativeTokenAllowance.test.ts
@@ -5,7 +5,7 @@ import {
DELEGATOR_CONTRACTS,
} from '@metamask/delegation-deployments';
-import { createPermissionDecodersForContracts } from '.';
+import { createPermissionDecodersForContracts } from './..js';
describe('native-token-allowance decoder', () => {
const chainId = CHAIN_ID.sepolia;
diff --git a/packages/gator-permissions-controller/src/decodePermission/decoders/nativeTokenAllowance.ts b/packages/gator-permissions-controller/src/decodePermission/decoders/nativeTokenAllowance.ts
index 5683910071e..9345709a87e 100644
--- a/packages/gator-permissions-controller/src/decodePermission/decoders/nativeTokenAllowance.ts
+++ b/packages/gator-permissions-controller/src/decodePermission/decoders/nativeTokenAllowance.ts
@@ -4,18 +4,18 @@ import type {
ChecksumCaveat,
ChecksumEnforcersByChainId,
DecodedPermission,
-} from '../types';
+} from '../types.js';
import {
getByteLength,
getTermsByEnforcer,
splitHex,
UINT256_MAX,
ZERO_32_BYTES,
-} from '../utils';
-import { expiryRule } from './expiryRule';
-import type { MakePermissionDecoderConfig } from './makePermissionDecoder';
-import { nativePayeeRule } from './nativePayeeRule';
-import { redeemerRule } from './redeemerRule';
+} from '../utils.js';
+import { expiryRule } from './expiryRule.js';
+import type { MakePermissionDecoderConfig } from './makePermissionDecoder.js';
+import { nativePayeeRule } from './nativePayeeRule.js';
+import { redeemerRule } from './redeemerRule.js';
/**
* Builds the configuration for the native-token-allowance permission decoder.
diff --git a/packages/gator-permissions-controller/src/decodePermission/decoders/nativeTokenPeriodic.test.ts b/packages/gator-permissions-controller/src/decodePermission/decoders/nativeTokenPeriodic.test.ts
index 677f0fdcc99..de155077e43 100644
--- a/packages/gator-permissions-controller/src/decodePermission/decoders/nativeTokenPeriodic.test.ts
+++ b/packages/gator-permissions-controller/src/decodePermission/decoders/nativeTokenPeriodic.test.ts
@@ -8,8 +8,8 @@ import {
DELEGATOR_CONTRACTS,
} from '@metamask/delegation-deployments';
-import { createPermissionDecodersForContracts } from '.';
-import { MAX_PERIOD_DURATION } from '../utils';
+import { MAX_PERIOD_DURATION } from '../utils.js';
+import { createPermissionDecodersForContracts } from './..js';
describe('native-token-periodic decoder', () => {
const chainId = CHAIN_ID.sepolia;
diff --git a/packages/gator-permissions-controller/src/decodePermission/decoders/nativeTokenPeriodic.ts b/packages/gator-permissions-controller/src/decodePermission/decoders/nativeTokenPeriodic.ts
index 23d2d098adf..7632af05f54 100644
--- a/packages/gator-permissions-controller/src/decodePermission/decoders/nativeTokenPeriodic.ts
+++ b/packages/gator-permissions-controller/src/decodePermission/decoders/nativeTokenPeriodic.ts
@@ -4,17 +4,17 @@ import type {
ChecksumCaveat,
ChecksumEnforcersByChainId,
DecodedPermission,
-} from '../types';
+} from '../types.js';
import {
getByteLength,
getTermsByEnforcer,
MAX_PERIOD_DURATION,
splitHex,
-} from '../utils';
-import { expiryRule } from './expiryRule';
-import type { MakePermissionDecoderConfig } from './makePermissionDecoder';
-import { nativePayeeRule } from './nativePayeeRule';
-import { redeemerRule } from './redeemerRule';
+} from '../utils.js';
+import { expiryRule } from './expiryRule.js';
+import type { MakePermissionDecoderConfig } from './makePermissionDecoder.js';
+import { nativePayeeRule } from './nativePayeeRule.js';
+import { redeemerRule } from './redeemerRule.js';
/**
* Builds the configuration for the native-token-periodic permission decoder.
diff --git a/packages/gator-permissions-controller/src/decodePermission/decoders/nativeTokenStream.test.ts b/packages/gator-permissions-controller/src/decodePermission/decoders/nativeTokenStream.test.ts
index 28edc4be5bc..0cb7e23546b 100644
--- a/packages/gator-permissions-controller/src/decodePermission/decoders/nativeTokenStream.test.ts
+++ b/packages/gator-permissions-controller/src/decodePermission/decoders/nativeTokenStream.test.ts
@@ -8,7 +8,7 @@ import {
DELEGATOR_CONTRACTS,
} from '@metamask/delegation-deployments';
-import { createPermissionDecodersForContracts } from '.';
+import { createPermissionDecodersForContracts } from './..js';
describe('native-token-stream decoder', () => {
const chainId = CHAIN_ID.sepolia;
diff --git a/packages/gator-permissions-controller/src/decodePermission/decoders/nativeTokenStream.ts b/packages/gator-permissions-controller/src/decodePermission/decoders/nativeTokenStream.ts
index b2dbffa8d45..0f9fcecfef1 100644
--- a/packages/gator-permissions-controller/src/decodePermission/decoders/nativeTokenStream.ts
+++ b/packages/gator-permissions-controller/src/decodePermission/decoders/nativeTokenStream.ts
@@ -4,12 +4,12 @@ import type {
ChecksumCaveat,
ChecksumEnforcersByChainId,
DecodedPermission,
-} from '../types';
-import { getByteLength, getTermsByEnforcer, splitHex } from '../utils';
-import { expiryRule } from './expiryRule';
-import type { MakePermissionDecoderConfig } from './makePermissionDecoder';
-import { nativePayeeRule } from './nativePayeeRule';
-import { redeemerRule } from './redeemerRule';
+} from '../types.js';
+import { getByteLength, getTermsByEnforcer, splitHex } from '../utils.js';
+import { expiryRule } from './expiryRule.js';
+import type { MakePermissionDecoderConfig } from './makePermissionDecoder.js';
+import { nativePayeeRule } from './nativePayeeRule.js';
+import { redeemerRule } from './redeemerRule.js';
/**
* Builds the configuration for the native-token-stream permission decoder.
diff --git a/packages/gator-permissions-controller/src/decodePermission/decoders/redeemerRule.test.ts b/packages/gator-permissions-controller/src/decodePermission/decoders/redeemerRule.test.ts
index c397fccf608..0ae564ae915 100644
--- a/packages/gator-permissions-controller/src/decodePermission/decoders/redeemerRule.test.ts
+++ b/packages/gator-permissions-controller/src/decodePermission/decoders/redeemerRule.test.ts
@@ -6,9 +6,9 @@ import {
import { getChecksumAddress } from '@metamask/utils';
import type { Hex } from '@metamask/utils';
-import type { ChecksumCaveat } from '../types';
-import { getChecksumEnforcersByChainId } from '../utils';
-import { redeemerRule } from './redeemerRule';
+import type { ChecksumCaveat } from '../types.js';
+import { getChecksumEnforcersByChainId } from '../utils.js';
+import { redeemerRule } from './redeemerRule.js';
describe('redeemerRule', () => {
const contracts = DELEGATOR_CONTRACTS['1.3.0'][CHAIN_ID.sepolia];
diff --git a/packages/gator-permissions-controller/src/decodePermission/decoders/redeemerRule.ts b/packages/gator-permissions-controller/src/decodePermission/decoders/redeemerRule.ts
index f7f283a8958..2c3aa94f6ee 100644
--- a/packages/gator-permissions-controller/src/decodePermission/decoders/redeemerRule.ts
+++ b/packages/gator-permissions-controller/src/decodePermission/decoders/redeemerRule.ts
@@ -1,9 +1,9 @@
import { decodeRedeemerTerms } from '@metamask/delegation-core';
import { getChecksumAddress } from '@metamask/utils';
-import { EXECUTION_PERMISSION_REDEEMER_RULE_TYPE } from '../../constants';
-import type { RuleDecoder } from '../types';
-import { getTermsByEnforcer } from '../utils';
+import { EXECUTION_PERMISSION_REDEEMER_RULE_TYPE } from '../../constants.js';
+import type { RuleDecoder } from '../types.js';
+import { getTermsByEnforcer } from '../utils.js';
/**
* Rule decoder that extracts a redeemer allowlist from a RedeemerEnforcer
diff --git a/packages/gator-permissions-controller/src/decodePermission/decoders/tokenApprovalRevocation.test.ts b/packages/gator-permissions-controller/src/decodePermission/decoders/tokenApprovalRevocation.test.ts
index 0d8b48a99a0..e685717a746 100644
--- a/packages/gator-permissions-controller/src/decodePermission/decoders/tokenApprovalRevocation.test.ts
+++ b/packages/gator-permissions-controller/src/decodePermission/decoders/tokenApprovalRevocation.test.ts
@@ -4,8 +4,8 @@ import {
DELEGATOR_CONTRACTS,
} from '@metamask/delegation-deployments';
-import { createPermissionDecodersForContracts } from '.';
-import { getChecksumEnforcersByChainId } from '../utils';
+import { getChecksumEnforcersByChainId } from '../utils.js';
+import { createPermissionDecodersForContracts } from './..js';
describe('token-approval-revocation decoder', () => {
const chainId = CHAIN_ID.sepolia;
diff --git a/packages/gator-permissions-controller/src/decodePermission/decoders/tokenApprovalRevocation.ts b/packages/gator-permissions-controller/src/decodePermission/decoders/tokenApprovalRevocation.ts
index 0b4758148d0..62d6344300d 100644
--- a/packages/gator-permissions-controller/src/decodePermission/decoders/tokenApprovalRevocation.ts
+++ b/packages/gator-permissions-controller/src/decodePermission/decoders/tokenApprovalRevocation.ts
@@ -5,10 +5,10 @@ import type {
ChecksumCaveat,
ChecksumEnforcersByChainId,
DecodedPermission,
-} from '../types';
-import { getTermsByEnforcer } from '../utils';
-import { expiryRule } from './expiryRule';
-import type { MakePermissionDecoderConfig } from './makePermissionDecoder';
+} from '../types.js';
+import { getTermsByEnforcer } from '../utils.js';
+import { expiryRule } from './expiryRule.js';
+import type { MakePermissionDecoderConfig } from './makePermissionDecoder.js';
enum ApprovalRevocationFlag {
Erc20Approve = 0x01,
diff --git a/packages/gator-permissions-controller/src/decodePermission/index.ts b/packages/gator-permissions-controller/src/decodePermission/index.ts
index 696f123f69d..cc86a11556e 100644
--- a/packages/gator-permissions-controller/src/decodePermission/index.ts
+++ b/packages/gator-permissions-controller/src/decodePermission/index.ts
@@ -2,11 +2,11 @@ export {
findDecodersWithMatchingCaveatAddresses,
reconstructDecodedPermission,
selectUniqueDecoderAndDecodedPermission,
-} from './decodePermission';
-export { createPermissionDecodersForContracts } from './decoders';
+} from './decodePermission.js';
+export { createPermissionDecodersForContracts } from './decoders.js';
export type {
DecodedPermission,
PermissionDecoder,
ValidateAndDecodeResult,
-} from './types';
+} from './types.js';
diff --git a/packages/gator-permissions-controller/src/decodePermission/utils.test.ts b/packages/gator-permissions-controller/src/decodePermission/utils.test.ts
index d28bc61de4b..26fd381f8c0 100644
--- a/packages/gator-permissions-controller/src/decodePermission/utils.test.ts
+++ b/packages/gator-permissions-controller/src/decodePermission/utils.test.ts
@@ -2,13 +2,13 @@ import type { Caveat } from '@metamask/delegation-core';
import { getChecksumAddress } from '@metamask/utils';
import type { Hex } from '@metamask/utils';
-import { createPermissionDecodersForContracts } from './decoders';
-import type { DeployedContractsByName } from './types';
+import { createPermissionDecodersForContracts } from './decoders.js';
+import type { DeployedContractsByName } from './types.js';
import {
getChecksumEnforcersByChainId,
getTermsByEnforcer,
splitHex,
-} from './utils';
+} from './utils.js';
// Helper to build a contracts map with lowercase addresses
const buildContracts = (): DeployedContractsByName => ({
diff --git a/packages/gator-permissions-controller/src/decodePermission/utils.ts b/packages/gator-permissions-controller/src/decodePermission/utils.ts
index a1dac594723..9492c6ac75f 100644
--- a/packages/gator-permissions-controller/src/decodePermission/utils.ts
+++ b/packages/gator-permissions-controller/src/decodePermission/utils.ts
@@ -5,7 +5,7 @@ import type { Hex } from '@metamask/utils';
import type {
ChecksumEnforcersByChainId,
DeployedContractsByName,
-} from './types';
+} from './types.js';
/**
* The names of the enforcer contracts for each permission type.
diff --git a/packages/gator-permissions-controller/src/errors.test.ts b/packages/gator-permissions-controller/src/errors.test.ts
index f7be32427fc..b1874474126 100644
--- a/packages/gator-permissions-controller/src/errors.test.ts
+++ b/packages/gator-permissions-controller/src/errors.test.ts
@@ -4,11 +4,11 @@ import {
GatorPermissionsProviderError,
OriginNotAllowedError,
PermissionDecodingError,
-} from './errors';
+} from './errors.js';
import {
GatorPermissionsControllerErrorCode,
GatorPermissionsSnapRpcMethod,
-} from './types';
+} from './types.js';
describe('errors', () => {
describe('GatorPermissionsControllerError', () => {
diff --git a/packages/gator-permissions-controller/src/errors.ts b/packages/gator-permissions-controller/src/errors.ts
index 4bd806742f7..45e1ccc3c6f 100644
--- a/packages/gator-permissions-controller/src/errors.ts
+++ b/packages/gator-permissions-controller/src/errors.ts
@@ -1,5 +1,5 @@
-import type { GatorPermissionsSnapRpcMethod } from './types';
-import { GatorPermissionsControllerErrorCode } from './types';
+import type { GatorPermissionsSnapRpcMethod } from './types.js';
+import { GatorPermissionsControllerErrorCode } from './types.js';
/**
* Represents a base gator permissions error.
diff --git a/packages/gator-permissions-controller/src/index.ts b/packages/gator-permissions-controller/src/index.ts
index b424cad0005..2a2765c7d65 100644
--- a/packages/gator-permissions-controller/src/index.ts
+++ b/packages/gator-permissions-controller/src/index.ts
@@ -1,10 +1,10 @@
-export { default as GatorPermissionsController } from './GatorPermissionsController';
+export { default as GatorPermissionsController } from './GatorPermissionsController.js';
export {
DELEGATION_FRAMEWORK_VERSION,
EXECUTION_PERMISSION_EXPIRY_RULE_TYPE,
EXECUTION_PERMISSION_PAYEE_RULE_TYPE,
EXECUTION_PERMISSION_REDEEMER_RULE_TYPE,
-} from './constants';
+} from './constants.js';
export type {
GatorPermissionsControllerFetchAndUpdateGatorPermissionsAction,
GatorPermissionsControllerAddPendingRevocationAction,
@@ -13,7 +13,7 @@ export type {
GatorPermissionsControllerIsPendingRevocationAction,
GatorPermissionsControllerSubmitDirectRevocationAction,
GatorPermissionsControllerSubmitRevocationAction,
-} from './GatorPermissionsController-method-action-types';
+} from './GatorPermissionsController-method-action-types.js';
export type {
GatorPermissionsControllerState,
GatorPermissionsControllerConfig,
@@ -22,8 +22,8 @@ export type {
GatorPermissionsControllerActions,
GatorPermissionsControllerEvents,
GatorPermissionsControllerStateChangeEvent,
-} from './GatorPermissionsController';
-export type { DecodedPermission } from './decodePermission';
+} from './GatorPermissionsController.js';
+export type { DecodedPermission } from './decodePermission.js';
export type {
GatorPermissionsControllerErrorCode,
GatorPermissionsSnapRpcMethod,
@@ -37,10 +37,10 @@ export type {
RevocationParams,
RevocationMetadata,
SupportedPermissionType,
-} from './types';
+} from './types.js';
-export type { PayeeRule } from './payeeRule';
-export type { RedeemerRule } from './redeemerRule';
+export type { PayeeRule } from './payeeRule.js';
+export type { RedeemerRule } from './redeemerRule.js';
export type {
NativeTokenStreamPermission,
NativeTokenPeriodicPermission,
diff --git a/packages/gator-permissions-controller/src/permissionOnChainStatus.test.ts b/packages/gator-permissions-controller/src/permissionOnChainStatus.test.ts
index 2b7eb658394..1d65e01bfa0 100644
--- a/packages/gator-permissions-controller/src/permissionOnChainStatus.test.ts
+++ b/packages/gator-permissions-controller/src/permissionOnChainStatus.test.ts
@@ -12,7 +12,7 @@ import {
import { hexToBigInt, numberToHex } from '@metamask/utils';
import type { Hex } from '@metamask/utils';
-import { DELEGATION_FRAMEWORK_VERSION } from './constants';
+import { DELEGATION_FRAMEWORK_VERSION } from './constants.js';
import {
encodeDisabledDelegationsCalldata,
getExpiryFromDelegation,
@@ -20,8 +20,8 @@ import {
readLatestBlockTimestampSeconds,
resolveGrantedPermissionOnChainStatus,
updateGrantedPermissionsStatus,
-} from './permissionOnChainStatus';
-import type { PermissionInfoWithMetadata } from './types';
+} from './permissionOnChainStatus.js';
+import type { PermissionInfoWithMetadata } from './types.js';
const contracts =
DELEGATOR_CONTRACTS[DELEGATION_FRAMEWORK_VERSION][CHAIN_ID.sepolia];
diff --git a/packages/gator-permissions-controller/src/permissionOnChainStatus.ts b/packages/gator-permissions-controller/src/permissionOnChainStatus.ts
index 6ac35cfde3a..91c04b3f9d4 100644
--- a/packages/gator-permissions-controller/src/permissionOnChainStatus.ts
+++ b/packages/gator-permissions-controller/src/permissionOnChainStatus.ts
@@ -4,16 +4,16 @@ import type { Delegation } from '@metamask/delegation-core';
import { bytesToHex, getChecksumAddress, hexToNumber } from '@metamask/utils';
import type { Hex } from '@metamask/utils';
-import type { DeployedContractsByName } from './decodePermission/types';
+import type { DeployedContractsByName } from './decodePermission/types.js';
import {
extractExpiryFromCaveatTerms,
getChecksumEnforcersByChainId,
-} from './decodePermission/utils';
-import { controllerLog } from './logger';
+} from './decodePermission/utils.js';
+import { controllerLog } from './logger.js';
import type {
PermissionInfoWithMetadata,
GatorPermissionStatus,
-} from './types';
+} from './types.js';
/** Function selector for `DelegationManager.disabledDelegations(bytes32)`. */
const DISABLED_DELEGATIONS_SELECTOR = '0x2d40d052';
diff --git a/packages/gator-permissions-controller/src/utils.test.ts b/packages/gator-permissions-controller/src/utils.test.ts
index d97067d5814..de5d1c2d45b 100644
--- a/packages/gator-permissions-controller/src/utils.test.ts
+++ b/packages/gator-permissions-controller/src/utils.test.ts
@@ -1,10 +1,10 @@
import type { SnapId } from '@metamask/snaps-sdk';
import { HandlerType } from '@metamask/snaps-utils';
-import { GatorPermissionsProviderError } from './errors';
-import type { GatorPermissionsControllerMessenger } from './GatorPermissionsController';
-import { GatorPermissionsSnapRpcMethod } from './types';
-import { executeSnapRpc } from './utils';
+import { GatorPermissionsProviderError } from './errors.js';
+import type { GatorPermissionsControllerMessenger } from './GatorPermissionsController.js';
+import { GatorPermissionsSnapRpcMethod } from './types.js';
+import { executeSnapRpc } from './utils.js';
describe('executeSnapRpc', () => {
const mockSnapId = 'npm:@metamask/test-snap' as SnapId;
diff --git a/packages/gator-permissions-controller/src/utils.ts b/packages/gator-permissions-controller/src/utils.ts
index d0de1d7c229..27336d82e51 100644
--- a/packages/gator-permissions-controller/src/utils.ts
+++ b/packages/gator-permissions-controller/src/utils.ts
@@ -2,10 +2,10 @@ import type { SnapId } from '@metamask/snaps-sdk';
import { HandlerType } from '@metamask/snaps-utils';
import type { Json } from '@metamask/utils';
-import { GatorPermissionsProviderError } from './errors';
-import { GatorPermissionsControllerMessenger } from './GatorPermissionsController';
-import { utilsLog } from './logger';
-import type { GatorPermissionsSnapRpcMethod } from './types';
+import { GatorPermissionsProviderError } from './errors.js';
+import { GatorPermissionsControllerMessenger } from './GatorPermissionsController.js';
+import { utilsLog } from './logger.js';
+import type { GatorPermissionsSnapRpcMethod } from './types.js';
/**
* Executes an RPC request against a Snap and returns the typed response.
diff --git a/packages/gator-permissions-controller/tests/mock.test.ts b/packages/gator-permissions-controller/tests/mock.test.ts
index 65e965ed921..fe5c446a683 100644
--- a/packages/gator-permissions-controller/tests/mock.test.ts
+++ b/packages/gator-permissions-controller/tests/mock.test.ts
@@ -1,5 +1,5 @@
-import { mockGatorPermissionsStorageEntriesFactory } from './mocks';
-import type { MockGatorPermissionsStorageEntriesConfig } from './mocks';
+import { mockGatorPermissionsStorageEntriesFactory } from './mocks.js';
+import type { MockGatorPermissionsStorageEntriesConfig } from './mocks.js';
describe('mockGatorPermissionsStorageEntriesFactory', () => {
it('should create mock storage entries for all permission types', () => {
diff --git a/packages/gator-permissions-controller/tests/mocks.ts b/packages/gator-permissions-controller/tests/mocks.ts
index 7d9f13c4e6d..5d62cce3b57 100644
--- a/packages/gator-permissions-controller/tests/mocks.ts
+++ b/packages/gator-permissions-controller/tests/mocks.ts
@@ -6,7 +6,7 @@ import type {
} from '@metamask/7715-permission-types';
import type { Hex } from '@metamask/utils';
-import type { StoredGatorPermission } from '../src/types';
+import type { StoredGatorPermission } from '../src/types.js';
/**
* Mock stored gator permission: native-token-stream (as returned by the Snap).
diff --git a/packages/geolocation-controller/jest.config.js b/packages/geolocation-controller/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/geolocation-controller/jest.config.js
+++ b/packages/geolocation-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/geolocation-controller/package.json b/packages/geolocation-controller/package.json
index 80fbb426a28..659d6ab2674 100644
--- a/packages/geolocation-controller/package.json
+++ b/packages/geolocation-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/geolocation-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/geolocation-controller",
@@ -60,8 +53,8 @@
"@metamask/messenger": "^2.0.0"
},
"devDependencies": {
+ "@jest/globals": "^30.4.1",
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/geolocation-controller/src/GeolocationController-method-action-types.ts b/packages/geolocation-controller/src/GeolocationController-method-action-types.ts
index 400d6477e18..d330e47b25a 100644
--- a/packages/geolocation-controller/src/GeolocationController-method-action-types.ts
+++ b/packages/geolocation-controller/src/GeolocationController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { GeolocationController } from './GeolocationController';
+import type { GeolocationController } from './GeolocationController.js';
/**
* Returns the geolocation code. Delegates to the
diff --git a/packages/geolocation-controller/src/GeolocationController.test.ts b/packages/geolocation-controller/src/GeolocationController.test.ts
index 37c8a560347..3fa484afd20 100644
--- a/packages/geolocation-controller/src/GeolocationController.test.ts
+++ b/packages/geolocation-controller/src/GeolocationController.test.ts
@@ -1,3 +1,4 @@
+import { jest } from '@jest/globals';
import { deriveStateFromMetadata } from '@metamask/base-controller';
import { Messenger, MOCK_ANY_NAMESPACE } from '@metamask/messenger';
import type {
@@ -6,12 +7,12 @@ import type {
MessengerEvents,
} from '@metamask/messenger';
-import { UNKNOWN_LOCATION } from './geolocation-api-service/geolocation-api-service';
-import type { GeolocationControllerMessenger } from './GeolocationController';
+import { UNKNOWN_LOCATION } from './geolocation-api-service/geolocation-api-service.js';
+import type { GeolocationControllerMessenger } from './GeolocationController.js';
import {
GeolocationController,
getDefaultGeolocationControllerState,
-} from './GeolocationController';
+} from './GeolocationController.js';
describe('GeolocationController', () => {
describe('constructor', () => {
diff --git a/packages/geolocation-controller/src/GeolocationController.ts b/packages/geolocation-controller/src/GeolocationController.ts
index 4965a7afda8..cd1ba1a53c3 100644
--- a/packages/geolocation-controller/src/GeolocationController.ts
+++ b/packages/geolocation-controller/src/GeolocationController.ts
@@ -6,10 +6,10 @@ import type {
import { BaseController } from '@metamask/base-controller';
import type { Messenger } from '@metamask/messenger';
-import { UNKNOWN_LOCATION } from './geolocation-api-service/geolocation-api-service';
-import type { GeolocationApiServiceFetchGeolocationAction } from './geolocation-api-service/geolocation-api-service-method-action-types';
-import type { GeolocationControllerMethodActions } from './GeolocationController-method-action-types';
-import type { GeolocationRequestStatus } from './types';
+import type { GeolocationApiServiceFetchGeolocationAction } from './geolocation-api-service/geolocation-api-service-method-action-types.js';
+import { UNKNOWN_LOCATION } from './geolocation-api-service/geolocation-api-service.js';
+import type { GeolocationControllerMethodActions } from './GeolocationController-method-action-types.js';
+import type { GeolocationRequestStatus } from './types.js';
/**
* The name of the {@link GeolocationController}, used to namespace the
diff --git a/packages/geolocation-controller/src/geolocation-api-service/geolocation-api-service-method-action-types.ts b/packages/geolocation-controller/src/geolocation-api-service/geolocation-api-service-method-action-types.ts
index 9757ab999b2..68efa407e78 100644
--- a/packages/geolocation-controller/src/geolocation-api-service/geolocation-api-service-method-action-types.ts
+++ b/packages/geolocation-controller/src/geolocation-api-service/geolocation-api-service-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { GeolocationApiService } from './geolocation-api-service';
+import type { GeolocationApiService } from './geolocation-api-service.js';
/**
* Returns the geolocation code. Serves from cache when the TTL has not
diff --git a/packages/geolocation-controller/src/geolocation-api-service/geolocation-api-service.test.ts b/packages/geolocation-controller/src/geolocation-api-service/geolocation-api-service.test.ts
index 0aac0d8c06a..ab4555e4c31 100644
--- a/packages/geolocation-controller/src/geolocation-api-service/geolocation-api-service.test.ts
+++ b/packages/geolocation-controller/src/geolocation-api-service/geolocation-api-service.test.ts
@@ -1,3 +1,4 @@
+import { jest } from '@jest/globals';
import { HttpError } from '@metamask/controller-utils';
import { Messenger, MOCK_ANY_NAMESPACE } from '@metamask/messenger';
import type {
@@ -6,12 +7,12 @@ import type {
MessengerEvents,
} from '@metamask/messenger';
-import { Env } from '../types';
-import type { GeolocationApiServiceMessenger } from './geolocation-api-service';
+import { Env } from '../types.js';
+import type { GeolocationApiServiceMessenger } from './geolocation-api-service.js';
import {
GeolocationApiService,
UNKNOWN_LOCATION,
-} from './geolocation-api-service';
+} from './geolocation-api-service.js';
describe('GeolocationApiService', () => {
beforeEach(() => {
diff --git a/packages/geolocation-controller/src/geolocation-api-service/geolocation-api-service.ts b/packages/geolocation-controller/src/geolocation-api-service/geolocation-api-service.ts
index 23c1798d4c2..c74a215d2b5 100644
--- a/packages/geolocation-controller/src/geolocation-api-service/geolocation-api-service.ts
+++ b/packages/geolocation-controller/src/geolocation-api-service/geolocation-api-service.ts
@@ -6,8 +6,8 @@ import { createServicePolicy, HttpError } from '@metamask/controller-utils';
import type { Messenger } from '@metamask/messenger';
import type { IDisposable } from 'cockatiel';
-import { Env } from '../types';
-import type { GeolocationApiServiceMethodActions } from './geolocation-api-service-method-action-types';
+import { Env } from '../types.js';
+import type { GeolocationApiServiceMethodActions } from './geolocation-api-service-method-action-types.js';
const DEFAULT_TTL_MS = 5 * 60 * 1000;
diff --git a/packages/geolocation-controller/src/index.ts b/packages/geolocation-controller/src/index.ts
index 05d773eaa65..d92ae556e3a 100644
--- a/packages/geolocation-controller/src/index.ts
+++ b/packages/geolocation-controller/src/index.ts
@@ -6,25 +6,25 @@ export type {
GeolocationControllerEvents,
GeolocationControllerMessenger,
GeolocationControllerOptions,
-} from './GeolocationController';
+} from './GeolocationController.js';
export type {
GeolocationControllerGetGeolocationAction,
GeolocationControllerRefreshGeolocationAction,
-} from './GeolocationController-method-action-types';
-export type { GeolocationRequestStatus } from './types';
-export { Env } from './types';
+} from './GeolocationController-method-action-types.js';
+export type { GeolocationRequestStatus } from './types.js';
+export { Env } from './types.js';
export {
GeolocationController,
getDefaultGeolocationControllerState,
-} from './GeolocationController';
+} from './GeolocationController.js';
export {
GeolocationApiService,
UNKNOWN_LOCATION,
-} from './geolocation-api-service/geolocation-api-service';
+} from './geolocation-api-service/geolocation-api-service.js';
export type {
GeolocationApiServiceMessenger,
GeolocationApiServiceActions,
GeolocationApiServiceEvents,
FetchGeolocationOptions,
-} from './geolocation-api-service/geolocation-api-service';
-export type { GeolocationApiServiceFetchGeolocationAction } from './geolocation-api-service/geolocation-api-service-method-action-types';
+} from './geolocation-api-service/geolocation-api-service.js';
+export type { GeolocationApiServiceFetchGeolocationAction } from './geolocation-api-service/geolocation-api-service-method-action-types.js';
diff --git a/packages/java-tron-up/jest.config.js b/packages/java-tron-up/jest.config.js
index e29b7194b97..930b58aee5c 100644
--- a/packages/java-tron-up/jest.config.js
+++ b/packages/java-tron-up/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/java-tron-up/package.json b/packages/java-tron-up/package.json
index 75aa4d3d436..a61e2377dbb 100644
--- a/packages/java-tron-up/package.json
+++ b/packages/java-tron-up/package.json
@@ -19,19 +19,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -40,8 +33,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/java-tron-up",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/java-tron-up",
@@ -60,7 +53,6 @@
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/java-tron-up/src/bin/java-tron-up.ts b/packages/java-tron-up/src/bin/java-tron-up.ts
index a32b97bc7fe..5f73d89d154 100644
--- a/packages/java-tron-up/src/bin/java-tron-up.ts
+++ b/packages/java-tron-up/src/bin/java-tron-up.ts
@@ -5,7 +5,7 @@ import {
installJavaTron,
parseJavaTronInstallCliOptions,
readJavaTronInstallOptionsFromPackageJson,
-} from '../install';
+} from '../install.js';
async function main(): Promise {
const [command, ...args] = process.argv.slice(2);
diff --git a/packages/java-tron-up/src/index.ts b/packages/java-tron-up/src/index.ts
index 12992703cdd..cd1263803fc 100644
--- a/packages/java-tron-up/src/index.ts
+++ b/packages/java-tron-up/src/index.ts
@@ -7,7 +7,7 @@ export {
installJavaTron,
parseJavaTronInstallCliOptions,
readJavaTronInstallOptionsFromPackageJson,
-} from './install';
+} from './install.js';
export type {
JavaTronArtifactConfig,
JavaTronArtifactPlatformConfig,
@@ -15,4 +15,4 @@ export type {
JavaTronInstallOptions,
JavaTronInstallResult,
JavaTronJavaRuntimeConfig,
-} from './install';
+} from './install.js';
diff --git a/packages/java-tron-up/src/install.test.ts b/packages/java-tron-up/src/install.test.ts
index f593685a6dd..3a1c17394de 100644
--- a/packages/java-tron-up/src/install.test.ts
+++ b/packages/java-tron-up/src/install.test.ts
@@ -23,8 +23,8 @@ import {
installJavaTron,
parseJavaTronInstallCliOptions,
readJavaTronInstallOptionsFromPackageJson,
-} from './install';
-import type { JavaTronInstallDependencies } from './install';
+} from './install.js';
+import type { JavaTronInstallDependencies } from './install.js';
describe('java-tron-up installer', () => {
let tempDirs: string[] = [];
diff --git a/packages/json-rpc-engine/jest.config.js b/packages/json-rpc-engine/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/json-rpc-engine/jest.config.js
+++ b/packages/json-rpc-engine/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/json-rpc-engine/package.json b/packages/json-rpc-engine/package.json
index 5afee23ac6e..dcef9179448 100644
--- a/packages/json-rpc-engine/package.json
+++ b/packages/json-rpc-engine/package.json
@@ -19,32 +19,18 @@
"test": "test"
},
"files": [
- "dist/",
- "v2.js"
+ "dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./v2": {
- "import": {
- "types": "./dist/v2/index.d.mts",
- "default": "./dist/v2/index.mjs"
- },
- "require": {
- "types": "./dist/v2/index.d.cts",
- "default": "./dist/v2/index.cjs"
- }
+ "types": "./dist/v2/index.d.ts",
+ "import": "./dist/v2/index.js"
},
"./package.json": "./package.json"
},
@@ -53,8 +39,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/json-rpc-engine --tag-prefix-before-package-rename json-rpc-engine@ --version-before-package-rename 6.1.0",
@@ -69,17 +55,17 @@
"dependencies": {
"@metamask/messenger": "^2.0.0",
"@metamask/rpc-errors": "^7.0.2",
- "@metamask/safe-event-emitter": "^3.0.0",
+ "@metamask/safe-event-emitter": "patch:@metamask/safe-event-emitter@npm%3A3.1.1#~/.yarn/patches/@metamask-safe-event-emitter-npm-3.1.1-a7872b1f5a.patch",
"@metamask/utils": "^11.11.0",
"@types/deep-freeze-strict": "^1.1.0",
"deep-freeze-strict": "^1.1.1",
"klona": "^2.0.6"
},
"devDependencies": {
+ "@jest/globals": "^30.4.1",
"@lavamoat/allow-scripts": "^3.0.4",
"@lavamoat/preinstall-always-fail": "^2.1.0",
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/json-rpc-engine/src/JsonRpcEngine.test.ts b/packages/json-rpc-engine/src/JsonRpcEngine.test.ts
index eef05d2e4ee..791943b6340 100644
--- a/packages/json-rpc-engine/src/JsonRpcEngine.test.ts
+++ b/packages/json-rpc-engine/src/JsonRpcEngine.test.ts
@@ -1,3 +1,4 @@
+import { jest } from '@jest/globals';
import { rpcErrors } from '@metamask/rpc-errors';
import type { JsonRpcParams, Json } from '@metamask/utils';
import {
@@ -7,8 +8,8 @@ import {
isJsonRpcSuccess,
} from '@metamask/utils';
-import type { JsonRpcMiddleware } from '.';
-import { JsonRpcEngine } from '.';
+import type { JsonRpcMiddleware } from './..js';
+import { JsonRpcEngine } from './..js';
const jsonrpc = '2.0' as const;
diff --git a/packages/json-rpc-engine/src/JsonRpcEngine.ts b/packages/json-rpc-engine/src/JsonRpcEngine.ts
index 7d728b1b1a4..12bee48d0d1 100644
--- a/packages/json-rpc-engine/src/JsonRpcEngine.ts
+++ b/packages/json-rpc-engine/src/JsonRpcEngine.ts
@@ -15,7 +15,7 @@ import {
isJsonRpcRequest,
} from '@metamask/utils';
-import { stringify } from './v2/utils';
+import { stringify } from './v2/utils.js';
export type JsonRpcEngineCallbackError = Error | SerializedJsonRpcError | null;
diff --git a/packages/json-rpc-engine/src/asMiddleware.test.ts b/packages/json-rpc-engine/src/asMiddleware.test.ts
index f914677d63f..e9996ec2878 100644
--- a/packages/json-rpc-engine/src/asMiddleware.test.ts
+++ b/packages/json-rpc-engine/src/asMiddleware.test.ts
@@ -1,7 +1,7 @@
import type { JsonRpcRequest } from '@metamask/utils';
import { assertIsJsonRpcSuccess, isJsonRpcSuccess } from '@metamask/utils';
-import { JsonRpcEngine } from '.';
+import { JsonRpcEngine } from './..js';
const jsonrpc = '2.0' as const;
@@ -42,8 +42,8 @@ describe('asMiddleware', () => {
subengine.push(function (request, response, _next, end) {
originalRequest = request;
// TODO: Replace `any` with type
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- (response as any).xyz = true;
+
+ response.xyz = true;
response.result = true;
end();
});
@@ -59,8 +59,8 @@ describe('asMiddleware', () => {
expect(originalRequest.id).toStrictEqual(response.id);
expect(originalRequest.jsonrpc).toStrictEqual(response.jsonrpc);
// TODO: Replace `any` with type
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- expect((response as any).xyz).toBe(true);
+
+ expect(response.xyz).toBe(true);
resolve();
});
});
@@ -74,11 +74,11 @@ describe('asMiddleware', () => {
subengine.push(function (request, response, _next, end) {
originalRequest = request;
// TODO: Replace `any` with type
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- (request as any).xyz = true;
+
+ request.xyz = true;
// TODO: Replace `any` with type
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- (response as any).xyz = true;
+
+ response.xyz = true;
response.result = true;
end();
});
@@ -131,8 +131,8 @@ describe('asMiddleware', () => {
subengine.push((_request, response, next, _end) => {
next((callback) => {
// TODO: Replace `any` with type
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- (response as any).copy = response.result;
+
+ response.copy = response.result;
callback();
});
});
@@ -166,8 +166,8 @@ describe('asMiddleware', () => {
subengine.push((_request, response, next, _end) => {
next((callback) => {
// TODO: Replace `any` with type
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- (response as any).copy = response.result;
+
+ response.copy = response.result;
callback();
});
});
@@ -211,8 +211,8 @@ describe('asMiddleware', () => {
engine.handle(payload, function (error, response) {
expect(error).toBeDefined();
// TODO: Replace `any` with type
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- expect((error as any).message).toBe('foo');
+
+ expect(error.message).toBe('foo');
expect(isJsonRpcSuccess(response)).toBe(false);
resolve();
});
@@ -240,8 +240,8 @@ describe('asMiddleware', () => {
engine.handle(payload, function (error, response) {
expect(error).toBeDefined();
// TODO: Replace `any` with type
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- expect((error as any).message).toBe('foo');
+
+ expect(error.message).toBe('foo');
expect(isJsonRpcSuccess(response)).toBe(false);
resolve();
});
@@ -270,8 +270,8 @@ describe('asMiddleware', () => {
engine.handle(payload, function (error, response) {
expect(error).toBeDefined();
// TODO: Replace `any` with type
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- expect((error as any).message).toBe('foo');
+
+ expect(error.message).toBe('foo');
expect(isJsonRpcSuccess(response)).toBe(false);
resolve();
});
diff --git a/packages/json-rpc-engine/src/asV2Middleware.test.ts b/packages/json-rpc-engine/src/asV2Middleware.test.ts
index 927f9901ee2..d33bdfd9bee 100644
--- a/packages/json-rpc-engine/src/asV2Middleware.test.ts
+++ b/packages/json-rpc-engine/src/asV2Middleware.test.ts
@@ -1,16 +1,17 @@
+import { jest } from '@jest/globals';
import { rpcErrors } from '@metamask/rpc-errors';
import type { Json, JsonRpcRequest } from '@metamask/utils';
-import { JsonRpcEngine } from '.';
import {
getExtraneousKeys,
makeNullMiddleware,
makeRequest,
-} from '../tests/utils';
-import { asV2Middleware } from './asV2Middleware';
-import { JsonRpcEngineV2 } from './v2/JsonRpcEngineV2';
-import type { JsonRpcMiddleware as V2Middleware } from './v2/JsonRpcEngineV2';
-import type { MiddlewareContext } from './v2/MiddlewareContext';
+} from '../tests/utils.js';
+import { JsonRpcEngine } from './..js';
+import { asV2Middleware } from './asV2Middleware.js';
+import { JsonRpcEngineV2 } from './v2/JsonRpcEngineV2.js';
+import type { JsonRpcMiddleware as V2Middleware } from './v2/JsonRpcEngineV2.js';
+import type { MiddlewareContext } from './v2/MiddlewareContext.js';
describe('asV2Middleware', () => {
it('converts a legacy engine to a v2 middleware', () => {
diff --git a/packages/json-rpc-engine/src/asV2Middleware.ts b/packages/json-rpc-engine/src/asV2Middleware.ts
index d6c8512e0d7..f877f9212b5 100644
--- a/packages/json-rpc-engine/src/asV2Middleware.ts
+++ b/packages/json-rpc-engine/src/asV2Middleware.ts
@@ -12,24 +12,24 @@ import type {
JsonRpcEngine,
JsonRpcEngineEndCallback,
JsonRpcEngineNextCallback,
-} from './JsonRpcEngine';
-import type { JsonRpcMiddleware as LegacyMiddleware } from './JsonRpcEngine';
-import { mergeMiddleware } from './mergeMiddleware';
-import type { ContextConstraint, MiddlewareContext } from './v2';
+} from './JsonRpcEngine.js';
+import type { JsonRpcMiddleware as LegacyMiddleware } from './JsonRpcEngine.js';
+import { mergeMiddleware } from './mergeMiddleware.js';
import {
deepClone,
fromLegacyRequest,
propagateToContext,
propagateToRequest,
deserializeError,
-} from './v2/compatibility-utils';
+} from './v2/compatibility-utils.js';
+import type { ContextConstraint, MiddlewareContext } from './v2/index.js';
import type {
// Used in docs.
// eslint-disable-next-line @typescript-eslint/no-unused-vars
JsonRpcEngineV2,
JsonRpcMiddleware,
ResultConstraint,
-} from './v2/JsonRpcEngineV2';
+} from './v2/JsonRpcEngineV2.js';
/**
* Convert a legacy {@link JsonRpcEngine} into a {@link JsonRpcEngineV2} middleware.
diff --git a/packages/json-rpc-engine/src/createAsyncMiddleware.test.ts b/packages/json-rpc-engine/src/createAsyncMiddleware.test.ts
index 491fe238795..2992013bda4 100644
--- a/packages/json-rpc-engine/src/createAsyncMiddleware.test.ts
+++ b/packages/json-rpc-engine/src/createAsyncMiddleware.test.ts
@@ -1,6 +1,6 @@
import { assertIsJsonRpcSuccess } from '@metamask/utils';
-import { JsonRpcEngine, createAsyncMiddleware } from '.';
+import { JsonRpcEngine, createAsyncMiddleware } from './..js';
const jsonrpc = '2.0' as const;
@@ -115,7 +115,6 @@ describe('createAsyncMiddleware', () => {
engine.push(
createAsyncMiddleware(async (_request, _response, next) => {
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
next();
}),
);
diff --git a/packages/json-rpc-engine/src/createAsyncMiddleware.ts b/packages/json-rpc-engine/src/createAsyncMiddleware.ts
index 2a254c48597..f09a98ef8a7 100644
--- a/packages/json-rpc-engine/src/createAsyncMiddleware.ts
+++ b/packages/json-rpc-engine/src/createAsyncMiddleware.ts
@@ -8,7 +8,7 @@ import type {
import type {
JsonRpcEngineReturnHandler,
JsonRpcMiddleware,
-} from './JsonRpcEngine';
+} from './JsonRpcEngine.js';
export type AsyncJsonRpcEngineNextCallback = () => Promise;
diff --git a/packages/json-rpc-engine/src/createMethodMiddleware.test.ts b/packages/json-rpc-engine/src/createMethodMiddleware.test.ts
index 9e5f60563a1..915f5e2e022 100644
--- a/packages/json-rpc-engine/src/createMethodMiddleware.test.ts
+++ b/packages/json-rpc-engine/src/createMethodMiddleware.test.ts
@@ -1,3 +1,4 @@
+import { jest } from '@jest/globals';
import { Messenger, MOCK_ANY_NAMESPACE } from '@metamask/messenger';
import {
assertIsJsonRpcFailure,
@@ -11,8 +12,8 @@ import {
MethodHandler,
MethodHandlerImplementation,
createMethodMiddleware,
-} from './createMethodMiddleware';
-import { JsonRpcEngine, JsonRpcMiddleware } from './JsonRpcEngine';
+} from './createMethodMiddleware.js';
+import { JsonRpcEngine, JsonRpcMiddleware } from './JsonRpcEngine.js';
type AllHooks = {
hook1: () => number;
diff --git a/packages/json-rpc-engine/src/createMethodMiddleware.ts b/packages/json-rpc-engine/src/createMethodMiddleware.ts
index 5425fcec67d..8dfac30fce4 100644
--- a/packages/json-rpc-engine/src/createMethodMiddleware.ts
+++ b/packages/json-rpc-engine/src/createMethodMiddleware.ts
@@ -12,13 +12,13 @@ import type {
JsonRpcEngineEndCallback,
JsonRpcEngineNextCallback,
JsonRpcMiddleware,
-} from './JsonRpcEngine';
+} from './JsonRpcEngine.js';
import {
assertExpectedHooks,
createHandlerMessenger,
selectHooks,
UnionToIntersection,
-} from './v2/utils';
+} from './v2/utils.js';
type HandlerActions = Handler extends {
implementation: (...args: infer Args) => unknown;
diff --git a/packages/json-rpc-engine/src/createOriginMiddleware.test.ts b/packages/json-rpc-engine/src/createOriginMiddleware.test.ts
index 5c441e977d4..568b2363861 100644
--- a/packages/json-rpc-engine/src/createOriginMiddleware.test.ts
+++ b/packages/json-rpc-engine/src/createOriginMiddleware.test.ts
@@ -1,8 +1,8 @@
import { JsonRpcRequest } from '@metamask/utils';
-import { makeRequest } from '../tests/utils';
-import { createOriginMiddleware } from './createOriginMiddleware';
-import { JsonRpcEngine } from './JsonRpcEngine';
+import { makeRequest } from '../tests/utils.js';
+import { createOriginMiddleware } from './createOriginMiddleware.js';
+import { JsonRpcEngine } from './JsonRpcEngine.js';
describe('createOriginMiddleware', () => {
it('adds the origin property to the request', async () => {
diff --git a/packages/json-rpc-engine/src/createOriginMiddleware.ts b/packages/json-rpc-engine/src/createOriginMiddleware.ts
index e2100aa4fa0..c615f7996e3 100644
--- a/packages/json-rpc-engine/src/createOriginMiddleware.ts
+++ b/packages/json-rpc-engine/src/createOriginMiddleware.ts
@@ -1,6 +1,6 @@
import { Json, JsonRpcRequest } from '@metamask/utils';
-import { JsonRpcMiddleware } from './JsonRpcEngine';
+import { JsonRpcMiddleware } from './JsonRpcEngine.js';
/**
* Create a middleware function that adds `origin` to the request object.
diff --git a/packages/json-rpc-engine/src/createScaffoldMiddleware.test.ts b/packages/json-rpc-engine/src/createScaffoldMiddleware.test.ts
index 0900ec870de..eaea5aa5a7a 100644
--- a/packages/json-rpc-engine/src/createScaffoldMiddleware.test.ts
+++ b/packages/json-rpc-engine/src/createScaffoldMiddleware.test.ts
@@ -5,8 +5,8 @@ import {
assertIsJsonRpcFailure,
} from '@metamask/utils';
-import type { JsonRpcMiddleware } from '.';
-import { JsonRpcEngine, createScaffoldMiddleware } from '.';
+import type { JsonRpcMiddleware } from './..js';
+import { JsonRpcEngine, createScaffoldMiddleware } from './..js';
describe('createScaffoldMiddleware', () => {
it('basic middleware test', async () => {
diff --git a/packages/json-rpc-engine/src/createScaffoldMiddleware.ts b/packages/json-rpc-engine/src/createScaffoldMiddleware.ts
index eac2a66667a..612b08ca082 100644
--- a/packages/json-rpc-engine/src/createScaffoldMiddleware.ts
+++ b/packages/json-rpc-engine/src/createScaffoldMiddleware.ts
@@ -1,6 +1,6 @@
import type { Json, JsonRpcParams, JsonRpcSuccess } from '@metamask/utils';
-import type { JsonRpcMiddleware } from './JsonRpcEngine';
+import type { JsonRpcMiddleware } from './JsonRpcEngine.js';
type ScaffoldMiddlewareHandler<
Params extends JsonRpcParams,
diff --git a/packages/json-rpc-engine/src/idRemapMiddleware.test.ts b/packages/json-rpc-engine/src/idRemapMiddleware.test.ts
index 5e1e6341d80..16b6d8a980a 100644
--- a/packages/json-rpc-engine/src/idRemapMiddleware.test.ts
+++ b/packages/json-rpc-engine/src/idRemapMiddleware.test.ts
@@ -1,6 +1,6 @@
/* eslint-disable @typescript-eslint/no-non-null-assertion */
-import { JsonRpcEngine, createIdRemapMiddleware } from '.';
+import { JsonRpcEngine, createIdRemapMiddleware } from './..js';
describe('idRemapMiddleware', () => {
it('basic middleware test', async () => {
diff --git a/packages/json-rpc-engine/src/idRemapMiddleware.ts b/packages/json-rpc-engine/src/idRemapMiddleware.ts
index 6ec22b81d92..f966f623ced 100644
--- a/packages/json-rpc-engine/src/idRemapMiddleware.ts
+++ b/packages/json-rpc-engine/src/idRemapMiddleware.ts
@@ -1,7 +1,7 @@
import type { Json, JsonRpcParams } from '@metamask/utils';
-import { getUniqueId } from './getUniqueId';
-import type { JsonRpcMiddleware } from './JsonRpcEngine';
+import { getUniqueId } from './getUniqueId.js';
+import type { JsonRpcMiddleware } from './JsonRpcEngine.js';
/**
* Returns a middleware function that overwrites the `id` property of each
diff --git a/packages/json-rpc-engine/src/index.test.ts b/packages/json-rpc-engine/src/index.test.ts
index 071d71fa360..72cd299882a 100644
--- a/packages/json-rpc-engine/src/index.test.ts
+++ b/packages/json-rpc-engine/src/index.test.ts
@@ -1,17 +1,17 @@
-import * as allExports from '.';
+import * as allExports from './..js';
describe('@metamask/json-rpc-engine', () => {
it('has expected JavaScript exports', () => {
expect(Object.keys(allExports)).toMatchInlineSnapshot(`
[
+ "JsonRpcEngine",
"asV2Middleware",
"createAsyncMiddleware",
+ "createIdRemapMiddleware",
"createMethodMiddleware",
"createOriginMiddleware",
"createScaffoldMiddleware",
"getUniqueId",
- "createIdRemapMiddleware",
- "JsonRpcEngine",
"mergeMiddleware",
]
`);
diff --git a/packages/json-rpc-engine/src/index.ts b/packages/json-rpc-engine/src/index.ts
index 1960fe5e3f5..e5d6faccbda 100644
--- a/packages/json-rpc-engine/src/index.ts
+++ b/packages/json-rpc-engine/src/index.ts
@@ -1,19 +1,19 @@
-export { asV2Middleware } from './asV2Middleware';
+export { asV2Middleware } from './asV2Middleware.js';
export type {
AsyncJsonRpcEngineNextCallback,
AsyncJsonrpcMiddleware,
-} from './createAsyncMiddleware';
-export { createAsyncMiddleware } from './createAsyncMiddleware';
+} from './createAsyncMiddleware.js';
+export { createAsyncMiddleware } from './createAsyncMiddleware.js';
export type {
CreateMethodMiddlewareOptions,
MethodHandler,
MethodHandlerImplementation,
-} from './createMethodMiddleware';
-export { createMethodMiddleware } from './createMethodMiddleware';
-export { createOriginMiddleware } from './createOriginMiddleware';
-export { createScaffoldMiddleware } from './createScaffoldMiddleware';
-export { getUniqueId } from './getUniqueId';
-export { createIdRemapMiddleware } from './idRemapMiddleware';
+} from './createMethodMiddleware.js';
+export { createMethodMiddleware } from './createMethodMiddleware.js';
+export { createOriginMiddleware } from './createOriginMiddleware.js';
+export { createScaffoldMiddleware } from './createScaffoldMiddleware.js';
+export { getUniqueId } from './getUniqueId.js';
+export { createIdRemapMiddleware } from './idRemapMiddleware.js';
export type {
JsonRpcEngineCallbackError,
JsonRpcEngineReturnHandler,
@@ -21,6 +21,6 @@ export type {
JsonRpcEngineEndCallback,
JsonRpcMiddleware,
JsonRpcNotificationHandler,
-} from './JsonRpcEngine';
-export { JsonRpcEngine } from './JsonRpcEngine';
-export { mergeMiddleware } from './mergeMiddleware';
+} from './JsonRpcEngine.js';
+export { JsonRpcEngine } from './JsonRpcEngine.js';
+export { mergeMiddleware } from './mergeMiddleware.js';
diff --git a/packages/json-rpc-engine/src/mergeMiddleware.test.ts b/packages/json-rpc-engine/src/mergeMiddleware.test.ts
index 8a6df71a7c3..838e0979549 100644
--- a/packages/json-rpc-engine/src/mergeMiddleware.test.ts
+++ b/packages/json-rpc-engine/src/mergeMiddleware.test.ts
@@ -1,7 +1,7 @@
import type { JsonRpcRequest } from '@metamask/utils';
import { assertIsJsonRpcSuccess, hasProperty } from '@metamask/utils';
-import { JsonRpcEngine, mergeMiddleware } from '.';
+import { JsonRpcEngine, mergeMiddleware } from './..js';
const jsonrpc = '2.0' as const;
@@ -42,8 +42,8 @@ describe('mergeMiddleware', () => {
(_request, response, next, _end): void => {
next((callback) => {
// TODO: Replace `any` with type
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- (response as any).copy = response.result;
+
+ response.copy = response.result;
callback();
});
},
@@ -79,8 +79,8 @@ describe('mergeMiddleware', () => {
function (request, response, _next, end): void {
originalRequest = request;
// TODO: Replace `any` with type
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- (response as any).xyz = true;
+
+ response.xyz = true;
response.result = true;
end();
},
@@ -96,8 +96,8 @@ describe('mergeMiddleware', () => {
expect(originalRequest.id).toStrictEqual(res.id);
expect(originalRequest.jsonrpc).toStrictEqual(res.jsonrpc);
// TODO: Replace `any` with type
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- expect((res as any).xyz).toBe(true);
+
+ expect(res.xyz).toBe(true);
resolve();
});
});
@@ -112,8 +112,8 @@ describe('mergeMiddleware', () => {
function (request, response, _next, end): void {
originalRequest = request;
// TODO: Replace `any` with type
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- (request as any).xyz = true;
+
+ request.xyz = true;
response.result = true;
end();
},
@@ -166,8 +166,8 @@ describe('mergeMiddleware', () => {
(_request, response, next, _end): void => {
next((callback) => {
// TODO: Replace `any` with type
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- (response as any).copy = response.result;
+
+ response.copy = response.result;
callback();
});
},
diff --git a/packages/json-rpc-engine/src/mergeMiddleware.ts b/packages/json-rpc-engine/src/mergeMiddleware.ts
index b1396ea761e..7928dfb1b10 100644
--- a/packages/json-rpc-engine/src/mergeMiddleware.ts
+++ b/packages/json-rpc-engine/src/mergeMiddleware.ts
@@ -1,7 +1,7 @@
import type { Json, JsonRpcParams } from '@metamask/utils';
-import type { JsonRpcMiddleware } from './JsonRpcEngine';
-import { JsonRpcEngine } from './JsonRpcEngine';
+import type { JsonRpcMiddleware } from './JsonRpcEngine.js';
+import { JsonRpcEngine } from './JsonRpcEngine.js';
/**
* Takes a stack of middleware and joins them into a single middleware function.
diff --git a/packages/json-rpc-engine/src/v2/JsonRpcEngineV2.test.ts b/packages/json-rpc-engine/src/v2/JsonRpcEngineV2.test.ts
index c83775df2f2..e2769a984c4 100644
--- a/packages/json-rpc-engine/src/v2/JsonRpcEngineV2.test.ts
+++ b/packages/json-rpc-engine/src/v2/JsonRpcEngineV2.test.ts
@@ -1,3 +1,4 @@
+import { jest } from '@jest/globals';
/* eslint-disable n/callback-return */ // next() is not a Node.js callback.
import type { Json, JsonRpcId } from '@metamask/utils';
import { createDeferredPromise } from '@metamask/utils';
@@ -8,13 +9,17 @@ import {
makeNullMiddleware,
makeRequest,
makeRequestMiddleware,
-} from '../../tests/utils';
-import type { JsonRpcMiddleware, ResultConstraint } from './JsonRpcEngineV2';
-import { JsonRpcEngineV2 } from './JsonRpcEngineV2';
-import type { EmptyContext } from './MiddlewareContext';
-import { MiddlewareContext } from './MiddlewareContext';
-import { isRequest, JsonRpcEngineError, stringify } from './utils';
-import type { JsonRpcCall, JsonRpcNotification, JsonRpcRequest } from './utils';
+} from '../../tests/utils.js';
+import type { JsonRpcMiddleware, ResultConstraint } from './JsonRpcEngineV2.js';
+import { JsonRpcEngineV2 } from './JsonRpcEngineV2.js';
+import type { EmptyContext } from './MiddlewareContext.js';
+import { MiddlewareContext } from './MiddlewareContext.js';
+import { isRequest, JsonRpcEngineError, stringify } from './utils.js';
+import type {
+ JsonRpcCall,
+ JsonRpcNotification,
+ JsonRpcRequest,
+} from './utils.js';
const jsonrpc = '2.0' as const;
diff --git a/packages/json-rpc-engine/src/v2/JsonRpcEngineV2.ts b/packages/json-rpc-engine/src/v2/JsonRpcEngineV2.ts
index 5808fc5942d..b0c54f3eb67 100644
--- a/packages/json-rpc-engine/src/v2/JsonRpcEngineV2.ts
+++ b/packages/json-rpc-engine/src/v2/JsonRpcEngineV2.ts
@@ -7,20 +7,20 @@ import type {
} from '@metamask/utils';
import deepFreeze from 'deep-freeze-strict';
-import { deepClone } from './compatibility-utils';
+import { deepClone } from './compatibility-utils.js';
import type {
ContextConstraint,
InferKeyValues,
MergeContexts,
-} from './MiddlewareContext';
-import { MiddlewareContext } from './MiddlewareContext';
+} from './MiddlewareContext.js';
+import { MiddlewareContext } from './MiddlewareContext.js';
import {
isNotification,
isRequest,
JsonRpcEngineError,
stringify,
-} from './utils';
-import type { JsonRpcCall } from './utils';
+} from './utils.js';
+import type { JsonRpcCall } from './utils.js';
// Helper to forbid `id` on notifications
type WithoutId = Request & { id?: never };
@@ -226,9 +226,7 @@ export class JsonRpcEngineV2<
return new JsonRpcEngineV2({
middleware: mw,
- }) as MergedContext extends never
- ? InvalidEngine<'Some middleware have incompatible context types'>
- : JsonRpcEngineV2;
+ }) as never;
}
/**
diff --git a/packages/json-rpc-engine/src/v2/JsonRpcServer.test.ts b/packages/json-rpc-engine/src/v2/JsonRpcServer.test.ts
index 7f61826afb4..5c8fa3c3d7c 100644
--- a/packages/json-rpc-engine/src/v2/JsonRpcServer.test.ts
+++ b/packages/json-rpc-engine/src/v2/JsonRpcServer.test.ts
@@ -1,12 +1,13 @@
+import { jest } from '@jest/globals';
import { rpcErrors } from '@metamask/rpc-errors';
import { Json } from '@metamask/utils';
-import type { JsonRpcMiddleware } from './JsonRpcEngineV2';
-import { JsonRpcEngineV2 } from './JsonRpcEngineV2';
-import { JsonRpcServer } from './JsonRpcServer';
-import type { MiddlewareContext } from './MiddlewareContext';
-import type { JsonRpcNotification, JsonRpcRequest } from './utils';
-import { isRequest, JsonRpcEngineError, stringify } from './utils';
+import type { JsonRpcMiddleware } from './JsonRpcEngineV2.js';
+import { JsonRpcEngineV2 } from './JsonRpcEngineV2.js';
+import { JsonRpcServer } from './JsonRpcServer.js';
+import type { MiddlewareContext } from './MiddlewareContext.js';
+import type { JsonRpcNotification, JsonRpcRequest } from './utils.js';
+import { isRequest, JsonRpcEngineError, stringify } from './utils.js';
const jsonrpc = '2.0' as const;
diff --git a/packages/json-rpc-engine/src/v2/JsonRpcServer.ts b/packages/json-rpc-engine/src/v2/JsonRpcServer.ts
index 4edfc205955..b27d7086c6b 100644
--- a/packages/json-rpc-engine/src/v2/JsonRpcServer.ts
+++ b/packages/json-rpc-engine/src/v2/JsonRpcServer.ts
@@ -8,16 +8,16 @@ import type {
} from '@metamask/utils';
import { hasProperty, isObject } from '@metamask/utils';
-import { getUniqueId } from '../getUniqueId';
+import { getUniqueId } from '../getUniqueId.js';
import type {
HandleOptions,
JsonRpcMiddleware,
MergedContextOf,
MiddlewareConstraint,
RequestOf,
-} from './JsonRpcEngineV2';
-import { JsonRpcEngineV2 } from './JsonRpcEngineV2';
-import type { JsonRpcCall } from './utils';
+} from './JsonRpcEngineV2.js';
+import { JsonRpcEngineV2 } from './JsonRpcEngineV2.js';
+import type { JsonRpcCall } from './utils.js';
type OnError = (error: unknown) => void;
diff --git a/packages/json-rpc-engine/src/v2/MiddlewareContext.test.ts b/packages/json-rpc-engine/src/v2/MiddlewareContext.test.ts
index b88f8421c3d..c8dfa0ea631 100644
--- a/packages/json-rpc-engine/src/v2/MiddlewareContext.test.ts
+++ b/packages/json-rpc-engine/src/v2/MiddlewareContext.test.ts
@@ -1,4 +1,4 @@
-import { MiddlewareContext } from './MiddlewareContext';
+import { MiddlewareContext } from './MiddlewareContext.js';
describe('MiddlewareContext', () => {
it('can be constructed with entries', () => {
diff --git a/packages/json-rpc-engine/src/v2/MiddlewareContext.ts b/packages/json-rpc-engine/src/v2/MiddlewareContext.ts
index 4727e5d5de1..4286d4eee85 100644
--- a/packages/json-rpc-engine/src/v2/MiddlewareContext.ts
+++ b/packages/json-rpc-engine/src/v2/MiddlewareContext.ts
@@ -1,5 +1,5 @@
-import { isInstance } from './utils';
-import type { UnionToIntersection } from './utils';
+import { isInstance } from './utils.js';
+import type { UnionToIntersection } from './utils.js';
const MiddlewareContextSymbol = Symbol.for('json-rpc-engine#MiddlewareContext');
diff --git a/packages/json-rpc-engine/src/v2/asLegacyMiddleware.test.ts b/packages/json-rpc-engine/src/v2/asLegacyMiddleware.test.ts
index 1e74ca7fcb5..73f40489d81 100644
--- a/packages/json-rpc-engine/src/v2/asLegacyMiddleware.test.ts
+++ b/packages/json-rpc-engine/src/v2/asLegacyMiddleware.test.ts
@@ -1,3 +1,4 @@
+import { jest } from '@jest/globals';
import type {
Json,
JsonRpcFailure,
@@ -9,11 +10,11 @@ import {
getExtraneousKeys,
makeRequest,
makeRequestMiddleware,
-} from '../../tests/utils';
-import { JsonRpcEngine } from '../JsonRpcEngine';
-import { asLegacyMiddleware } from './asLegacyMiddleware';
-import type { JsonRpcMiddleware, ResultConstraint } from './JsonRpcEngineV2';
-import { JsonRpcEngineV2 } from './JsonRpcEngineV2';
+} from '../../tests/utils.js';
+import { JsonRpcEngine } from '../JsonRpcEngine.js';
+import { asLegacyMiddleware } from './asLegacyMiddleware.js';
+import type { JsonRpcMiddleware, ResultConstraint } from './JsonRpcEngineV2.js';
+import { JsonRpcEngineV2 } from './JsonRpcEngineV2.js';
describe('asLegacyMiddleware', () => {
it('converts a v2 engine to a legacy middleware', () => {
diff --git a/packages/json-rpc-engine/src/v2/asLegacyMiddleware.ts b/packages/json-rpc-engine/src/v2/asLegacyMiddleware.ts
index 51ed5404dbb..72c38d75688 100644
--- a/packages/json-rpc-engine/src/v2/asLegacyMiddleware.ts
+++ b/packages/json-rpc-engine/src/v2/asLegacyMiddleware.ts
@@ -1,15 +1,15 @@
import type { JsonRpcParams, JsonRpcRequest } from '@metamask/utils';
-import { createAsyncMiddleware } from '..';
-import type { JsonRpcMiddleware as LegacyMiddleware } from '..';
+import { createAsyncMiddleware } from '../index.js';
+import type { JsonRpcMiddleware as LegacyMiddleware } from '../index.js';
import {
deepClone,
fromLegacyRequest,
makeContext,
propagateToRequest,
-} from './compatibility-utils';
-import type { JsonRpcMiddleware, ResultConstraint } from './JsonRpcEngineV2';
-import { JsonRpcEngineV2 } from './JsonRpcEngineV2';
+} from './compatibility-utils.js';
+import type { JsonRpcMiddleware, ResultConstraint } from './JsonRpcEngineV2.js';
+import { JsonRpcEngineV2 } from './JsonRpcEngineV2.js';
/**
* Convert a {@link JsonRpcEngineV2} into a legacy middleware.
diff --git a/packages/json-rpc-engine/src/v2/compatibility-utils.test.ts b/packages/json-rpc-engine/src/v2/compatibility-utils.test.ts
index 4930367260b..94a0e3964ad 100644
--- a/packages/json-rpc-engine/src/v2/compatibility-utils.test.ts
+++ b/packages/json-rpc-engine/src/v2/compatibility-utils.test.ts
@@ -1,3 +1,4 @@
+import { jest } from '@jest/globals';
import { JsonRpcError } from '@metamask/rpc-errors';
import type { Json } from '@metamask/utils';
@@ -8,9 +9,9 @@ import {
propagateToContext,
propagateToRequest,
deserializeError,
-} from './compatibility-utils';
-import { MiddlewareContext } from './MiddlewareContext';
-import { stringify } from './utils';
+} from './compatibility-utils.js';
+import { MiddlewareContext } from './MiddlewareContext.js';
+import { stringify } from './utils.js';
const jsonrpc = '2.0' as const;
diff --git a/packages/json-rpc-engine/src/v2/compatibility-utils.ts b/packages/json-rpc-engine/src/v2/compatibility-utils.ts
index 93899cc92d1..421c195454e 100644
--- a/packages/json-rpc-engine/src/v2/compatibility-utils.ts
+++ b/packages/json-rpc-engine/src/v2/compatibility-utils.ts
@@ -5,9 +5,9 @@ import { hasProperty, isObject, isValidJson } from '@metamask/utils';
// ATTN: We must NOT use 'klona/full' here because it freezes properties on the clone.
import { klona } from 'klona';
-import { MiddlewareContext } from './MiddlewareContext';
-import { stringify } from './utils';
-import type { JsonRpcRequest } from './utils';
+import { MiddlewareContext } from './MiddlewareContext.js';
+import { stringify } from './utils.js';
+import type { JsonRpcRequest } from './utils.js';
// Legacy engine compatibility utils
diff --git a/packages/json-rpc-engine/src/v2/createMethodMiddleware.test.ts b/packages/json-rpc-engine/src/v2/createMethodMiddleware.test.ts
index 7b11bc47d88..c9535b1be64 100644
--- a/packages/json-rpc-engine/src/v2/createMethodMiddleware.test.ts
+++ b/packages/json-rpc-engine/src/v2/createMethodMiddleware.test.ts
@@ -1,12 +1,12 @@
import { Messenger, MOCK_ANY_NAMESPACE } from '@metamask/messenger';
-import { makeRequest } from '../../tests/utils';
+import { makeRequest } from '../../tests/utils.js';
import {
createMethodMiddleware,
MethodHandler,
-} from './createMethodMiddleware';
-import { JsonRpcEngineV2 } from './JsonRpcEngineV2';
-import { JsonRpcRequest } from './utils';
+} from './createMethodMiddleware.js';
+import { JsonRpcEngineV2 } from './JsonRpcEngineV2.js';
+import { JsonRpcRequest } from './utils.js';
type TestAction = {
type: 'Example:TestAction';
diff --git a/packages/json-rpc-engine/src/v2/createMethodMiddleware.ts b/packages/json-rpc-engine/src/v2/createMethodMiddleware.ts
index d1310b9c1bd..3a6213a6e12 100644
--- a/packages/json-rpc-engine/src/v2/createMethodMiddleware.ts
+++ b/packages/json-rpc-engine/src/v2/createMethodMiddleware.ts
@@ -1,7 +1,7 @@
import { ActionConstraint, Messenger } from '@metamask/messenger';
-import { JsonRpcMiddleware, Next } from './JsonRpcEngineV2';
-import { ContextConstraint } from './MiddlewareContext';
+import { JsonRpcMiddleware, Next } from './JsonRpcEngineV2.js';
+import { ContextConstraint } from './MiddlewareContext.js';
import {
assertExpectedHooks,
createHandlerMessenger,
@@ -10,7 +10,7 @@ import {
JsonRpcParams,
JsonRpcRequest,
UnionToIntersection,
-} from './utils';
+} from './utils.js';
type HandlerActions = Handler extends {
implementation: (options: infer Options) => unknown;
diff --git a/packages/json-rpc-engine/src/v2/createOriginMiddleware.test.ts b/packages/json-rpc-engine/src/v2/createOriginMiddleware.test.ts
index 1b7fb15ba8d..18f9b97aee4 100644
--- a/packages/json-rpc-engine/src/v2/createOriginMiddleware.test.ts
+++ b/packages/json-rpc-engine/src/v2/createOriginMiddleware.test.ts
@@ -1,6 +1,6 @@
-import { makeRequest } from '../../tests/utils';
-import { createOriginMiddleware } from './createOriginMiddleware';
-import { JsonRpcEngineV2 } from './JsonRpcEngineV2';
+import { makeRequest } from '../../tests/utils.js';
+import { createOriginMiddleware } from './createOriginMiddleware.js';
+import { JsonRpcEngineV2 } from './JsonRpcEngineV2.js';
describe('createOriginMiddleware', () => {
it('sets the origin on the context object', async () => {
diff --git a/packages/json-rpc-engine/src/v2/createOriginMiddleware.ts b/packages/json-rpc-engine/src/v2/createOriginMiddleware.ts
index 16234c6dc3f..4a2ff9856ba 100644
--- a/packages/json-rpc-engine/src/v2/createOriginMiddleware.ts
+++ b/packages/json-rpc-engine/src/v2/createOriginMiddleware.ts
@@ -1,6 +1,6 @@
-import { JsonRpcMiddleware } from './JsonRpcEngineV2';
-import { MiddlewareContext } from './MiddlewareContext';
-import { Json, JsonRpcRequest } from './utils';
+import { JsonRpcMiddleware } from './JsonRpcEngineV2.js';
+import { MiddlewareContext } from './MiddlewareContext.js';
+import { Json, JsonRpcRequest } from './utils.js';
/**
* Create a middleware function that adds `origin` to the middleware context.
diff --git a/packages/json-rpc-engine/src/v2/createScaffoldMiddleware.test.ts b/packages/json-rpc-engine/src/v2/createScaffoldMiddleware.test.ts
index c71eb7a6e44..bacc464f132 100644
--- a/packages/json-rpc-engine/src/v2/createScaffoldMiddleware.test.ts
+++ b/packages/json-rpc-engine/src/v2/createScaffoldMiddleware.test.ts
@@ -1,9 +1,9 @@
import { rpcErrors } from '@metamask/rpc-errors';
-import { makeRequest } from '../../tests/utils';
-import type { MiddlewareScaffold } from './createScaffoldMiddleware';
-import { createScaffoldMiddleware } from './createScaffoldMiddleware';
-import { JsonRpcEngineV2 } from './JsonRpcEngineV2';
+import { makeRequest } from '../../tests/utils.js';
+import type { MiddlewareScaffold } from './createScaffoldMiddleware.js';
+import { createScaffoldMiddleware } from './createScaffoldMiddleware.js';
+import { JsonRpcEngineV2 } from './JsonRpcEngineV2.js';
describe('createScaffoldMiddleware', () => {
it('basic middleware test', async () => {
diff --git a/packages/json-rpc-engine/src/v2/createScaffoldMiddleware.ts b/packages/json-rpc-engine/src/v2/createScaffoldMiddleware.ts
index 6eaf1bdc450..7d145ffe4bf 100644
--- a/packages/json-rpc-engine/src/v2/createScaffoldMiddleware.ts
+++ b/packages/json-rpc-engine/src/v2/createScaffoldMiddleware.ts
@@ -1,7 +1,10 @@
import type { Json, JsonRpcParams, JsonRpcRequest } from '@metamask/utils';
-import type { JsonRpcMiddleware } from './JsonRpcEngineV2';
-import type { ContextConstraint, MiddlewareContext } from './MiddlewareContext';
+import type { JsonRpcMiddleware } from './JsonRpcEngineV2.js';
+import type {
+ ContextConstraint,
+ MiddlewareContext,
+} from './MiddlewareContext.js';
// Only permit primitive values as hard-coded scaffold middleware results.
type JsonPrimitive = string | number | boolean | null;
diff --git a/packages/json-rpc-engine/src/v2/index.test.ts b/packages/json-rpc-engine/src/v2/index.test.ts
index 43a989a1f8d..5536a58475e 100644
--- a/packages/json-rpc-engine/src/v2/index.test.ts
+++ b/packages/json-rpc-engine/src/v2/index.test.ts
@@ -1,4 +1,4 @@
-import * as allExports from '.';
+import * as allExports from './..js';
describe('@metamask/json-rpc-engine/v2', () => {
it('has expected JavaScript exports', () => {
diff --git a/packages/json-rpc-engine/src/v2/index.ts b/packages/json-rpc-engine/src/v2/index.ts
index be91113a343..8ae58ba4415 100644
--- a/packages/json-rpc-engine/src/v2/index.ts
+++ b/packages/json-rpc-engine/src/v2/index.ts
@@ -1,10 +1,10 @@
-export { asLegacyMiddleware } from './asLegacyMiddleware';
-export { getUniqueId } from '../getUniqueId';
-export { createMethodMiddleware } from './createMethodMiddleware';
-export type { MethodHandler } from './createMethodMiddleware';
-export { createOriginMiddleware } from './createOriginMiddleware';
-export { createScaffoldMiddleware } from './createScaffoldMiddleware';
-export { JsonRpcEngineV2 } from './JsonRpcEngineV2';
+export { asLegacyMiddleware } from './asLegacyMiddleware.js';
+export { getUniqueId } from '../getUniqueId.js';
+export { createMethodMiddleware } from './createMethodMiddleware.js';
+export type { MethodHandler } from './createMethodMiddleware.js';
+export { createOriginMiddleware } from './createOriginMiddleware.js';
+export { createScaffoldMiddleware } from './createScaffoldMiddleware.js';
+export { JsonRpcEngineV2 } from './JsonRpcEngineV2.js';
export type {
JsonRpcMiddleware,
HandleOptions,
@@ -14,17 +14,17 @@ export type {
Next,
RequestOf,
ResultConstraint,
-} from './JsonRpcEngineV2';
-export { JsonRpcServer } from './JsonRpcServer';
-export { MiddlewareContext } from './MiddlewareContext';
-export type { EmptyContext, ContextConstraint } from './MiddlewareContext';
+} from './JsonRpcEngineV2.js';
+export { JsonRpcServer } from './JsonRpcServer.js';
+export { MiddlewareContext } from './MiddlewareContext.js';
+export type { EmptyContext, ContextConstraint } from './MiddlewareContext.js';
export {
isNotification,
isRequest,
JsonRpcEngineError,
selectHooks,
assertExpectedHooks,
-} from './utils';
+} from './utils.js';
export type {
Json,
JsonRpcCall,
@@ -32,4 +32,4 @@ export type {
JsonRpcParams,
JsonRpcRequest,
UnionToIntersection,
-} from './utils';
+} from './utils.js';
diff --git a/packages/json-rpc-engine/src/v2/utils.test.ts b/packages/json-rpc-engine/src/v2/utils.test.ts
index 5a6c1bf8327..d86987d82a3 100644
--- a/packages/json-rpc-engine/src/v2/utils.test.ts
+++ b/packages/json-rpc-engine/src/v2/utils.test.ts
@@ -4,7 +4,7 @@ import {
stringify,
JsonRpcEngineError,
isInstance,
-} from './utils';
+} from './utils.js';
const jsonrpc = '2.0' as const;
diff --git a/packages/json-rpc-engine/tests/utils.ts b/packages/json-rpc-engine/tests/utils.ts
index eee712c50f4..40a6a5b0370 100644
--- a/packages/json-rpc-engine/tests/utils.ts
+++ b/packages/json-rpc-engine/tests/utils.ts
@@ -1,8 +1,8 @@
import type { JsonRpcRequest } from '@metamask/utils';
import type { JsonRpcMiddleware } from 'src/v2/JsonRpcEngineV2';
-import { requestProps } from '../src/v2/compatibility-utils';
-import type { JsonRpcNotification } from '../src/v2/utils';
+import { requestProps } from '../src/v2/compatibility-utils.js';
+import type { JsonRpcNotification } from '../src/v2/utils.js';
const jsonrpc = '2.0' as const;
diff --git a/packages/json-rpc-engine/v2.js b/packages/json-rpc-engine/v2.js
deleted file mode 100644
index faf7abd236a..00000000000
--- a/packages/json-rpc-engine/v2.js
+++ /dev/null
@@ -1,3 +0,0 @@
-// Re-exported for compatibility with Browserify.
-// eslint-disable-next-line
-module.exports = require('./dist/v2/index.cjs');
diff --git a/packages/json-rpc-middleware-stream/jest.config.js b/packages/json-rpc-middleware-stream/jest.config.js
index 3544112ae56..a51cabfa761 100644
--- a/packages/json-rpc-middleware-stream/jest.config.js
+++ b/packages/json-rpc-middleware-stream/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/json-rpc-middleware-stream/package.json b/packages/json-rpc-middleware-stream/package.json
index b7eb1cf3950..4bc02d2c451 100644
--- a/packages/json-rpc-middleware-stream/package.json
+++ b/packages/json-rpc-middleware-stream/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/json-rpc-middleware-stream --tag-prefix-before-package-rename json-rpc-middleware-stream@ --version-before-package-rename 5.0.1",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/json-rpc-middleware-stream --tag-prefix-before-package-rename json-rpc-middleware-stream@ --version-before-package-rename 5.0.1",
@@ -54,13 +47,12 @@
},
"dependencies": {
"@metamask/json-rpc-engine": "^10.5.0",
- "@metamask/safe-event-emitter": "^3.0.0",
+ "@metamask/safe-event-emitter": "patch:@metamask/safe-event-emitter@npm%3A3.1.1#~/.yarn/patches/@metamask-safe-event-emitter-npm-3.1.1-a7872b1f5a.patch",
"@metamask/utils": "^11.11.0",
"readable-stream": "^3.6.2"
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"@types/readable-stream": "^2.3.0",
"deepmerge": "^4.2.2",
diff --git a/packages/json-rpc-middleware-stream/src/createStreamMiddleware.ts b/packages/json-rpc-middleware-stream/src/createStreamMiddleware.ts
index c9d0c55dcac..0038ce56bd3 100644
--- a/packages/json-rpc-middleware-stream/src/createStreamMiddleware.ts
+++ b/packages/json-rpc-middleware-stream/src/createStreamMiddleware.ts
@@ -125,7 +125,7 @@ export default function createStreamMiddleware(options: Options = {}): {
Object.assign(context.res, res);
// run callback on empty stack,
// prevent internal stream-handler from catching errors
- setTimeout(context.end);
+ setTimeout(() => context.end());
}
/**
diff --git a/packages/json-rpc-middleware-stream/src/index.test.ts b/packages/json-rpc-middleware-stream/src/index.test.ts
index ca172a0085a..68571b6de52 100644
--- a/packages/json-rpc-middleware-stream/src/index.test.ts
+++ b/packages/json-rpc-middleware-stream/src/index.test.ts
@@ -3,7 +3,7 @@ import PortStream from 'extension-port-stream';
import type { Duplex } from 'stream';
import type { Runtime } from 'webextension-polyfill-ts';
-import { createStreamMiddleware, createEngineStream } from '.';
+import { createStreamMiddleware, createEngineStream } from './..js';
const artificialDelay = async (time = 0): Promise =>
new Promise((resolve) => setTimeout(resolve, time));
@@ -181,7 +181,7 @@ describe('retry logic in middleware connected to a port', () => {
// Initially sent once
const responsePromise1 = engineA?.handle(req1);
// intentionally not awaited
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
+
engineA?.handle(req2);
await artificialDelay();
@@ -217,7 +217,7 @@ describe('retry logic in middleware connected to a port', () => {
// Initially sent once, message count at 1
// intentionally not awaited
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
+
engineA?.handle(req);
await artificialDelay();
expect(messages).toHaveLength(1);
@@ -268,7 +268,7 @@ describe('retry logic in middleware connected to a port', () => {
// Initially sent once, message count at 1
// intentionally not awaited
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
+
engineA?.handle(req);
await artificialDelay();
expect(messages).toHaveLength(1);
diff --git a/packages/json-rpc-middleware-stream/src/index.ts b/packages/json-rpc-middleware-stream/src/index.ts
index e53b25d9024..2a824d162d5 100644
--- a/packages/json-rpc-middleware-stream/src/index.ts
+++ b/packages/json-rpc-middleware-stream/src/index.ts
@@ -1,4 +1,4 @@
-import createEngineStream from './createEngineStream';
-import createStreamMiddleware from './createStreamMiddleware';
+import createEngineStream from './createEngineStream.js';
+import createStreamMiddleware from './createStreamMiddleware.js';
export { createEngineStream, createStreamMiddleware };
diff --git a/packages/keyring-controller/jest.config.js b/packages/keyring-controller/jest.config.js
index b1b83b31073..12c2923914a 100644
--- a/packages/keyring-controller/jest.config.js
+++ b/packages/keyring-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/keyring-controller/package.json b/packages/keyring-controller/package.json
index 6397b7f2ddf..f69f1e8bf77 100644
--- a/packages/keyring-controller/package.json
+++ b/packages/keyring-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/keyring-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/keyring-controller",
@@ -69,18 +62,18 @@
"async-mutex": "^0.5.0",
"ethereumjs-wallet": "^1.0.1",
"immer": "^9.0.6",
- "lodash": "^4.17.21",
+ "lodash-es": "^4.17.21",
"ulid": "^2.3.0"
},
"devDependencies": {
"@ethereumjs/common": "^4.4.0",
"@ethereumjs/tx": "^5.4.0",
+ "@jest/globals": "^30.4.1",
"@lavamoat/allow-scripts": "^3.0.4",
"@lavamoat/preinstall-always-fail": "^2.1.0",
"@metamask/auto-changelog": "^6.1.0",
"@metamask/keyring-utils": "^3.3.1",
"@metamask/scure-bip39": "^2.1.1",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/keyring-controller/src/KeyringController-method-action-types.ts b/packages/keyring-controller/src/KeyringController-method-action-types.ts
index b469bc643db..8b8bf1d764f 100644
--- a/packages/keyring-controller/src/KeyringController-method-action-types.ts
+++ b/packages/keyring-controller/src/KeyringController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { KeyringController } from './KeyringController';
+import type { KeyringController } from './KeyringController.js';
/**
* Adds a new account to the default (first) HD seed phrase keyring.
diff --git a/packages/keyring-controller/src/KeyringController.test.ts b/packages/keyring-controller/src/KeyringController.test.ts
index 1052dd7b082..e19e0f66e27 100644
--- a/packages/keyring-controller/src/KeyringController.test.ts
+++ b/packages/keyring-controller/src/KeyringController.test.ts
@@ -1,6 +1,7 @@
import { Chain, Common, Hardfork } from '@ethereumjs/common';
import type { TypedTxData } from '@ethereumjs/tx';
import { TransactionFactory } from '@ethereumjs/tx';
+import { jest } from '@jest/globals';
import { deriveStateFromMetadata } from '@metamask/base-controller';
import { HdKeyring } from '@metamask/eth-hd-keyring';
import {
@@ -30,17 +31,17 @@ import MockEncryptor, {
DECRYPTION_ERROR,
MOCK_ENCRYPTION_KEY,
SALT,
-} from '../tests/mocks/mockEncryptor';
-import { MockErc4337Keyring } from '../tests/mocks/mockErc4337Keyring';
+} from '../tests/mocks/mockEncryptor.js';
+import { MockErc4337Keyring } from '../tests/mocks/mockErc4337Keyring.js';
import {
HardwareWalletError,
MockHardwareKeyring,
-} from '../tests/mocks/mockHardwareKeyring';
-import { MockKeyring } from '../tests/mocks/mockKeyring';
-import MockShallowKeyring from '../tests/mocks/mockShallowKeyring';
-import { buildMockTransaction } from '../tests/mocks/mockTransaction';
-import { KeyringControllerErrorMessage } from './constants';
-import { KeyringControllerError } from './errors';
+} from '../tests/mocks/mockHardwareKeyring.js';
+import { MockKeyring } from '../tests/mocks/mockKeyring.js';
+import MockShallowKeyring from '../tests/mocks/mockShallowKeyring.js';
+import { buildMockTransaction } from '../tests/mocks/mockTransaction.js';
+import { KeyringControllerErrorMessage } from './constants.js';
+import { KeyringControllerError } from './errors.js';
import type {
KeyringControllerEvents,
KeyringControllerMessenger,
@@ -51,14 +52,14 @@ import type {
SerializedKeyring,
KeyringSelector,
KeyringSelectorV2,
-} from './KeyringController';
+} from './KeyringController.js';
import {
AccountImportStrategy,
KeyringController,
KeyringTypes,
isCustodyKeyring,
keyringBuilderFactory,
-} from './KeyringController';
+} from './KeyringController.js';
type AllKeyringControllerActions = MessengerActions;
@@ -1326,8 +1327,7 @@ describe('KeyringController', () => {
const normalizedInitialAccounts =
controller.state.keyrings[0].accounts.map(normalize);
const keyring = (await controller.getKeyringForAccount(
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- normalizedInitialAccounts[0]!,
+ normalizedInitialAccounts[0],
)) as EthKeyring;
expect(keyring.type).toBe('HD Key Tree');
expect(await keyring.getAccounts()).toStrictEqual(
diff --git a/packages/keyring-controller/src/KeyringController.ts b/packages/keyring-controller/src/KeyringController.ts
index a16ce8802bf..370cb14a432 100644
--- a/packages/keyring-controller/src/KeyringController.ts
+++ b/packages/keyring-controller/src/KeyringController.ts
@@ -39,19 +39,19 @@ import { Mutex } from 'async-mutex';
import type { MutexInterface } from 'async-mutex';
import Wallet, { thirdparty as importers } from 'ethereumjs-wallet';
import type { Patch } from 'immer';
-import { cloneDeep } from 'lodash';
+import { cloneDeep } from 'lodash-es';
// When generating a ULID within the same millisecond, monotonicFactory provides some guarantees regarding sort order.
import { ulid } from 'ulid';
-import { KeyringControllerErrorMessage } from './constants';
-import { KeyringControllerError } from './errors';
-import type { KeyringControllerMethodActions } from './KeyringController-method-action-types';
+import { KeyringControllerErrorMessage } from './constants.js';
+import { KeyringControllerError } from './errors.js';
+import type { KeyringControllerMethodActions } from './KeyringController-method-action-types.js';
import type {
Eip7702AuthorizationParams,
Credentials,
PersonalMessageParams,
TypedMessageParams,
-} from './types';
+} from './types.js';
const name = 'KeyringController';
@@ -1376,7 +1376,8 @@ export class KeyringController<
try {
wallet = importers.fromEtherWallet(input, password);
} catch {
- wallet = wallet ?? (await Wallet.fromV3(input, password, true));
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call
+ wallet = wallet ?? (await (Wallet as unknown as typeof Wallet.default).fromV3(input, password, true));
}
privateKey = bytesToHex(new Uint8Array(wallet.getPrivateKey()));
break;
diff --git a/packages/keyring-controller/src/errors.test.ts b/packages/keyring-controller/src/errors.test.ts
index bfa8f41cdfb..21426f3d5dc 100644
--- a/packages/keyring-controller/src/errors.test.ts
+++ b/packages/keyring-controller/src/errors.test.ts
@@ -1,9 +1,9 @@
-import { KeyringControllerErrorMessage } from './constants';
+import { KeyringControllerErrorMessage } from './constants.js';
import {
isKeyringControllerError,
isKeyringNotFoundError,
KeyringControllerError,
-} from './errors';
+} from './errors.js';
describe('isKeyringControllerError', () => {
it('returns true for a KeyringControllerError', () => {
diff --git a/packages/keyring-controller/src/errors.ts b/packages/keyring-controller/src/errors.ts
index 3d81c18618f..e080719aa15 100644
--- a/packages/keyring-controller/src/errors.ts
+++ b/packages/keyring-controller/src/errors.ts
@@ -1,4 +1,4 @@
-import { KeyringControllerErrorMessage } from './constants';
+import { KeyringControllerErrorMessage } from './constants.js';
/**
* Options for creating a KeyringControllerError.
diff --git a/packages/keyring-controller/src/index.ts b/packages/keyring-controller/src/index.ts
index 4c90ec97036..f1394113e80 100644
--- a/packages/keyring-controller/src/index.ts
+++ b/packages/keyring-controller/src/index.ts
@@ -1,4 +1,4 @@
-export * from './KeyringController';
+export * from './KeyringController.js';
export type {
KeyringControllerAddNewAccountAction,
KeyringControllerCreateNewVaultAndRestoreAction,
@@ -35,7 +35,7 @@ export type {
KeyringControllerExportEncryptionKeyAction,
KeyringControllerSubmitPasswordAction,
KeyringControllerGetAccountKeyringTypeAction,
-} from './KeyringController-method-action-types';
-export type * from './types';
-export * from './errors';
-export { KeyringControllerErrorMessage } from './constants';
+} from './KeyringController-method-action-types.js';
+export type * from './types.js';
+export * from './errors.js';
+export { KeyringControllerErrorMessage } from './constants.js';
diff --git a/packages/keyring-controller/tests/mocks/mockEncryptor.ts b/packages/keyring-controller/tests/mocks/mockEncryptor.ts
index 4b075f2b056..92e3acd7382 100644
--- a/packages/keyring-controller/tests/mocks/mockEncryptor.ts
+++ b/packages/keyring-controller/tests/mocks/mockEncryptor.ts
@@ -6,9 +6,9 @@ import type {
EncryptionResult,
} from '@metamask/browser-passworder';
import type { Json } from '@metamask/utils';
-import { isEqual } from 'lodash';
+import { isEqual } from 'lodash-es';
-import type { Encryptor } from '../../src/KeyringController';
+import type { Encryptor } from '../../src/KeyringController.js';
export const PASSWORD = 'password123';
export const SALT = 'salt';
diff --git a/packages/local-node-utils/jest.config.js b/packages/local-node-utils/jest.config.js
index 29b89ed0923..b1e9e60fd79 100644
--- a/packages/local-node-utils/jest.config.js
+++ b/packages/local-node-utils/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/local-node-utils/package.json b/packages/local-node-utils/package.json
index 058f66dc708..15b420f2353 100644
--- a/packages/local-node-utils/package.json
+++ b/packages/local-node-utils/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/local-node-utils",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/local-node-utils",
@@ -59,7 +52,6 @@
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/local-node-utils/src/archive.ts b/packages/local-node-utils/src/archive.ts
index c7310feffd8..81fc6bf86b6 100644
--- a/packages/local-node-utils/src/archive.ts
+++ b/packages/local-node-utils/src/archive.ts
@@ -1,4 +1,4 @@
-import { runCommand } from './command';
+import { runCommand } from './command.js';
export async function extractTarGzArchive(
archivePath: string,
diff --git a/packages/local-node-utils/src/artifact.ts b/packages/local-node-utils/src/artifact.ts
index 85b2d9a4cbc..4a7093ff081 100644
--- a/packages/local-node-utils/src/artifact.ts
+++ b/packages/local-node-utils/src/artifact.ts
@@ -1,7 +1,7 @@
/* eslint-disable import-x/no-nodejs-modules */
import { createHash } from 'node:crypto';
-import type { ArtifactConfig, ArtifactPlatformConfig } from './types';
+import type { ArtifactConfig, ArtifactPlatformConfig } from './types.js';
export function mergeArtifactConfig(
defaults: ArtifactConfig,
diff --git a/packages/local-node-utils/src/cache-directory.ts b/packages/local-node-utils/src/cache-directory.ts
index 0bfd0215bcf..be720afddd1 100644
--- a/packages/local-node-utils/src/cache-directory.ts
+++ b/packages/local-node-utils/src/cache-directory.ts
@@ -4,7 +4,7 @@ import { homedir } from 'node:os';
import { join } from 'node:path';
import { parse as parseYaml } from 'yaml';
-import { isFileMissingError } from './errors';
+import { isFileMissingError } from './errors.js';
export function getMetamaskCacheDirectory({
cwd = process.cwd(),
diff --git a/packages/local-node-utils/src/command.test.ts b/packages/local-node-utils/src/command.test.ts
index 1b4f94c0b6a..5319ab59479 100644
--- a/packages/local-node-utils/src/command.test.ts
+++ b/packages/local-node-utils/src/command.test.ts
@@ -1,7 +1,7 @@
/* eslint-disable jest/expect-expect */
import assert from 'node:assert/strict';
-import { runCommand } from './command';
+import { runCommand } from './command.js';
describe('runCommand', () => {
it('runs a successful command', async () => {
diff --git a/packages/local-node-utils/src/executable-wrapper.ts b/packages/local-node-utils/src/executable-wrapper.ts
index f01b3dd612b..4b6a76722ae 100644
--- a/packages/local-node-utils/src/executable-wrapper.ts
+++ b/packages/local-node-utils/src/executable-wrapper.ts
@@ -2,7 +2,7 @@
import { chmod, mkdir, unlink, writeFile } from 'node:fs/promises';
import { join, relative, resolve } from 'node:path';
-import { isFileMissingError } from './errors';
+import { isFileMissingError } from './errors.js';
export type ExecutableWrapperPathResolution = 'absolute' | 'relative';
diff --git a/packages/local-node-utils/src/index.test.ts b/packages/local-node-utils/src/index.test.ts
index 285994c62b5..beb4e0864ed 100644
--- a/packages/local-node-utils/src/index.test.ts
+++ b/packages/local-node-utils/src/index.test.ts
@@ -10,11 +10,11 @@ import {
mergeArtifactConfig,
requireCompletePlatformConfig,
resolvePlatformConfig,
-} from './artifact';
-import { getMetamaskCacheDirectory } from './cache-directory';
-import { readCliValue } from './cli';
-import { readPackageJsonToolConfig } from './package-json';
-import type { ArtifactConfig } from './types';
+} from './artifact.js';
+import { getMetamaskCacheDirectory } from './cache-directory.js';
+import { readCliValue } from './cli.js';
+import { readPackageJsonToolConfig } from './package-json.js';
+import type { ArtifactConfig } from './types.js';
describe('artifact helpers', () => {
const defaults: ArtifactConfig = {
diff --git a/packages/local-node-utils/src/index.ts b/packages/local-node-utils/src/index.ts
index 5209ae45993..c68ea6b9033 100644
--- a/packages/local-node-utils/src/index.ts
+++ b/packages/local-node-utils/src/index.ts
@@ -2,23 +2,23 @@ export type {
ArtifactConfig,
ArtifactPlatformConfig,
InstallDependencies,
-} from './types';
+} from './types.js';
export {
getCacheKey,
mergeArtifactConfig,
requireCompletePlatformConfig,
resolvePlatformConfig,
-} from './artifact';
-export { cleanInstallerCache } from './cache';
-export { getMetamaskCacheDirectory } from './cache-directory';
-export { verifyFileChecksum } from './checksum';
-export { readCliValue } from './cli';
-export { runCommand } from './command';
-export { isFileMissingError } from './errors';
-export { extractTarBz2Archive, extractTarGzArchive } from './archive';
-export { downloadFileFromUrl } from './download';
-export { installExecutableWrapper } from './executable-wrapper';
-export type { ExecutableWrapperPathResolution } from './executable-wrapper';
-export { findExecutable, isDirectory, isFile } from './filesystem';
-export { getPlatformKey, normalizeSystemArchitecture } from './platform';
-export { readPackageJsonToolConfig } from './package-json';
+} from './artifact.js';
+export { cleanInstallerCache } from './cache.js';
+export { getMetamaskCacheDirectory } from './cache-directory.js';
+export { verifyFileChecksum } from './checksum.js';
+export { readCliValue } from './cli.js';
+export { runCommand } from './command.js';
+export { isFileMissingError } from './errors.js';
+export { extractTarBz2Archive, extractTarGzArchive } from './archive.js';
+export { downloadFileFromUrl } from './download.js';
+export { installExecutableWrapper } from './executable-wrapper.js';
+export type { ExecutableWrapperPathResolution } from './executable-wrapper.js';
+export { findExecutable, isDirectory, isFile } from './filesystem.js';
+export { getPlatformKey, normalizeSystemArchitecture } from './platform.js';
+export { readPackageJsonToolConfig } from './package-json.js';
diff --git a/packages/local-node-utils/src/integration.test.ts b/packages/local-node-utils/src/integration.test.ts
index 5d94b2d8559..03ecb5a14f2 100644
--- a/packages/local-node-utils/src/integration.test.ts
+++ b/packages/local-node-utils/src/integration.test.ts
@@ -12,16 +12,16 @@ import {
import { tmpdir } from 'node:os';
import { join } from 'node:path';
-import { extractTarBz2Archive, extractTarGzArchive } from './archive';
-import { cleanInstallerCache } from './cache';
-import { getMetamaskCacheDirectory } from './cache-directory';
-import { verifyFileChecksum } from './checksum';
-import { runCommand } from './command';
-import { downloadFileFromUrl, openDownloadStream } from './download';
-import { isFileMissingError } from './errors';
-import { installExecutableWrapper } from './executable-wrapper';
-import { findExecutable, isDirectory, isFile } from './filesystem';
-import { getPlatformKey, normalizeSystemArchitecture } from './platform';
+import { extractTarBz2Archive, extractTarGzArchive } from './archive.js';
+import { getMetamaskCacheDirectory } from './cache-directory.js';
+import { cleanInstallerCache } from './cache.js';
+import { verifyFileChecksum } from './checksum.js';
+import { runCommand } from './command.js';
+import { downloadFileFromUrl, openDownloadStream } from './download.js';
+import { isFileMissingError } from './errors.js';
+import { installExecutableWrapper } from './executable-wrapper.js';
+import { findExecutable, isDirectory, isFile } from './filesystem.js';
+import { getPlatformKey, normalizeSystemArchitecture } from './platform.js';
jest.mock('./command', () => ({
runCommand: jest.fn(),
diff --git a/packages/local-node-utils/src/package-json.ts b/packages/local-node-utils/src/package-json.ts
index ab9a55eff2f..cd5abf3fa9a 100644
--- a/packages/local-node-utils/src/package-json.ts
+++ b/packages/local-node-utils/src/package-json.ts
@@ -2,7 +2,7 @@
import { readFileSync } from 'node:fs';
import { join } from 'node:path';
-import { isFileMissingError } from './errors';
+import { isFileMissingError } from './errors.js';
export function readPackageJsonToolConfig({
cwd = process.cwd(),
diff --git a/packages/logging-controller/jest.config.js b/packages/logging-controller/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/logging-controller/jest.config.js
+++ b/packages/logging-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/logging-controller/package.json b/packages/logging-controller/package.json
index aa6510dac9c..90cce76cfd8 100644
--- a/packages/logging-controller/package.json
+++ b/packages/logging-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/logging-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/logging-controller",
@@ -61,8 +54,8 @@
"uuid": "^8.3.2"
},
"devDependencies": {
+ "@jest/globals": "^30.4.1",
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/logging-controller/src/LoggingController-method-action-types.ts b/packages/logging-controller/src/LoggingController-method-action-types.ts
index 74d41e3e6e7..3e2fd71b6aa 100644
--- a/packages/logging-controller/src/LoggingController-method-action-types.ts
+++ b/packages/logging-controller/src/LoggingController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { LoggingController } from './LoggingController';
+import type { LoggingController } from './LoggingController.js';
/**
* Add log to the state.
diff --git a/packages/logging-controller/src/LoggingController.test.ts b/packages/logging-controller/src/LoggingController.test.ts
index 43fd99d7a7c..f44ee459713 100644
--- a/packages/logging-controller/src/LoggingController.test.ts
+++ b/packages/logging-controller/src/LoggingController.test.ts
@@ -1,3 +1,4 @@
+import { jest } from '@jest/globals';
import { deriveStateFromMetadata } from '@metamask/base-controller';
import { Messenger, MOCK_ANY_NAMESPACE } from '@metamask/messenger';
import type {
@@ -7,10 +8,10 @@ import type {
} from '@metamask/messenger';
import * as uuid from 'uuid';
-import type { LoggingControllerMessenger } from './LoggingController';
-import { LoggingController } from './LoggingController';
-import { LogType } from './logTypes';
-import { SigningMethod, SigningStage } from './logTypes/EthSignLog';
+import type { LoggingControllerMessenger } from './LoggingController.js';
+import { LoggingController } from './LoggingController.js';
+import { LogType } from './logTypes.js';
+import { SigningMethod, SigningStage } from './logTypes/EthSignLog.js';
jest.mock('uuid', () => {
return {
diff --git a/packages/logging-controller/src/LoggingController.ts b/packages/logging-controller/src/LoggingController.ts
index 55c4a7bbb3b..f950cba141a 100644
--- a/packages/logging-controller/src/LoggingController.ts
+++ b/packages/logging-controller/src/LoggingController.ts
@@ -7,8 +7,8 @@ import { BaseController } from '@metamask/base-controller';
import type { Messenger } from '@metamask/messenger';
import { v1 as random } from 'uuid';
-import type { LoggingControllerMethodActions } from './LoggingController-method-action-types';
-import type { Log } from './logTypes';
+import type { LoggingControllerMethodActions } from './LoggingController-method-action-types.js';
+import type { Log } from './logTypes/index.js';
/**
* LogEntry is the entry that will be added to the logging controller state.
diff --git a/packages/logging-controller/src/index.ts b/packages/logging-controller/src/index.ts
index aaf85b45b3b..70307ac953c 100644
--- a/packages/logging-controller/src/index.ts
+++ b/packages/logging-controller/src/index.ts
@@ -1,6 +1,6 @@
-export * from './LoggingController';
+export * from './LoggingController.js';
export type {
LoggingControllerAddAction,
LoggingControllerClearAction,
-} from './LoggingController-method-action-types';
-export * from './logTypes';
+} from './LoggingController-method-action-types.js';
+export type * from './logTypes/index.js';
diff --git a/packages/logging-controller/src/logTypes/EthSignLog.ts b/packages/logging-controller/src/logTypes/EthSignLog.ts
index 4c90e49ce46..7c58744c12c 100644
--- a/packages/logging-controller/src/logTypes/EthSignLog.ts
+++ b/packages/logging-controller/src/logTypes/EthSignLog.ts
@@ -1,4 +1,4 @@
-import type { LogType } from './LogType';
+import type { LogType } from './LogType.js';
/**
* An enum of the signing method types that we are interested in logging.
diff --git a/packages/logging-controller/src/logTypes/GenericLog.ts b/packages/logging-controller/src/logTypes/GenericLog.ts
index 9a6e7870cad..2f398143658 100644
--- a/packages/logging-controller/src/logTypes/GenericLog.ts
+++ b/packages/logging-controller/src/logTypes/GenericLog.ts
@@ -1,4 +1,4 @@
-import type { LogType } from './LogType';
+import type { LogType } from './LogType.js';
/*
* The logging controller can handle any kind of log statement that may benefit
diff --git a/packages/logging-controller/src/logTypes/index.ts b/packages/logging-controller/src/logTypes/index.ts
index e34adbc63a8..c8dc8436593 100644
--- a/packages/logging-controller/src/logTypes/index.ts
+++ b/packages/logging-controller/src/logTypes/index.ts
@@ -1,5 +1,5 @@
-import type { EthSignLog } from './EthSignLog';
-import type { GenericLog } from './GenericLog';
+import type { EthSignLog } from './EthSignLog.js';
+import type { GenericLog } from './GenericLog.js';
/**
* Union of all possible log data structures.
@@ -9,6 +9,6 @@ export type Log = EthSignLog | GenericLog;
/**
* Export all other types from these files for usage by clients
*/
-export * from './EthSignLog';
-export type * from './GenericLog';
-export * from './LogType';
+export * from './EthSignLog.js';
+export type * from './GenericLog.js';
+export * from './LogType.js';
diff --git a/packages/message-manager/jest.config.js b/packages/message-manager/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/message-manager/jest.config.js
+++ b/packages/message-manager/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/message-manager/package.json b/packages/message-manager/package.json
index 2c1c6f1c0a2..34033bd0ad0 100644
--- a/packages/message-manager/package.json
+++ b/packages/message-manager/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/message-manager",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/message-manager",
@@ -63,8 +56,8 @@
"uuid": "^8.3.2"
},
"devDependencies": {
+ "@jest/globals": "^30.4.1",
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/message-manager/src/AbstractMessageManager.test.ts b/packages/message-manager/src/AbstractMessageManager.test.ts
index bd12258372f..a4f0f684d0b 100644
--- a/packages/message-manager/src/AbstractMessageManager.test.ts
+++ b/packages/message-manager/src/AbstractMessageManager.test.ts
@@ -1,3 +1,4 @@
+import { jest } from '@jest/globals';
import { deriveStateFromMetadata } from '@metamask/base-controller';
import type {
ControllerGetStateAction,
@@ -6,14 +7,14 @@ import type {
import { ApprovalType } from '@metamask/controller-utils';
import type { Messenger } from '@metamask/messenger';
-import { AbstractMessageManager } from './AbstractMessageManager';
+import { AbstractMessageManager } from './AbstractMessageManager.js';
import type {
AbstractMessage,
AbstractMessageParams,
MessageManagerState,
MessageRequest,
SecurityProviderRequest,
-} from './AbstractMessageManager';
+} from './AbstractMessageManager.js';
type ConcreteMessage = AbstractMessage & {
messageParams: ConcreteMessageParams;
diff --git a/packages/message-manager/src/DecryptMessageManager.test.ts b/packages/message-manager/src/DecryptMessageManager.test.ts
index 1e59533ae5f..c125cb57bca 100644
--- a/packages/message-manager/src/DecryptMessageManager.test.ts
+++ b/packages/message-manager/src/DecryptMessageManager.test.ts
@@ -1,5 +1,7 @@
-import { DecryptMessageManager } from './DecryptMessageManager';
-import type { DecryptMessageManagerMessenger } from './DecryptMessageManager';
+import { jest } from '@jest/globals';
+
+import { DecryptMessageManager } from './DecryptMessageManager.js';
+import type { DecryptMessageManagerMessenger } from './DecryptMessageManager.js';
const mockMessenger = {
registerActionHandler: jest.fn(),
diff --git a/packages/message-manager/src/DecryptMessageManager.ts b/packages/message-manager/src/DecryptMessageManager.ts
index 11c48f3941d..0292ba1726c 100644
--- a/packages/message-manager/src/DecryptMessageManager.ts
+++ b/packages/message-manager/src/DecryptMessageManager.ts
@@ -13,9 +13,9 @@ import type {
MessageManagerState,
MessageRequest,
SecurityProviderRequest,
-} from './AbstractMessageManager';
-import { AbstractMessageManager } from './AbstractMessageManager';
-import { normalizeMessageData, validateDecryptedMessageData } from './utils';
+} from './AbstractMessageManager.js';
+import { AbstractMessageManager } from './AbstractMessageManager.js';
+import { normalizeMessageData, validateDecryptedMessageData } from './utils.js';
const managerName = 'DecryptMessageManager';
diff --git a/packages/message-manager/src/EncryptionPublicKeyManager.test.ts b/packages/message-manager/src/EncryptionPublicKeyManager.test.ts
index 81735a5fdaa..53a3d13a885 100644
--- a/packages/message-manager/src/EncryptionPublicKeyManager.test.ts
+++ b/packages/message-manager/src/EncryptionPublicKeyManager.test.ts
@@ -1,5 +1,7 @@
-import { EncryptionPublicKeyManager } from './EncryptionPublicKeyManager';
-import type { EncryptionPublicKeyManagerMessenger } from './EncryptionPublicKeyManager';
+import { jest } from '@jest/globals';
+
+import { EncryptionPublicKeyManager } from './EncryptionPublicKeyManager.js';
+import type { EncryptionPublicKeyManagerMessenger } from './EncryptionPublicKeyManager.js';
const mockMessenger = {
registerActionHandler: jest.fn(),
diff --git a/packages/message-manager/src/EncryptionPublicKeyManager.ts b/packages/message-manager/src/EncryptionPublicKeyManager.ts
index 371747725f2..c3464096dfb 100644
--- a/packages/message-manager/src/EncryptionPublicKeyManager.ts
+++ b/packages/message-manager/src/EncryptionPublicKeyManager.ts
@@ -12,9 +12,9 @@ import type {
MessageManagerState,
MessageRequest,
SecurityProviderRequest,
-} from './AbstractMessageManager';
-import { AbstractMessageManager } from './AbstractMessageManager';
-import { validateEncryptionPublicKeyMessageData } from './utils';
+} from './AbstractMessageManager.js';
+import { AbstractMessageManager } from './AbstractMessageManager.js';
+import { validateEncryptionPublicKeyMessageData } from './utils.js';
const managerName = 'EncryptionPublicKeyManager';
diff --git a/packages/message-manager/src/index.ts b/packages/message-manager/src/index.ts
index bdcd9e46a88..0ab01d5a3a0 100644
--- a/packages/message-manager/src/index.ts
+++ b/packages/message-manager/src/index.ts
@@ -1,4 +1,4 @@
-export * from './AbstractMessageManager';
-export * from './EncryptionPublicKeyManager';
-export * from './DecryptMessageManager';
-export type * from './types';
+export * from './AbstractMessageManager.js';
+export * from './EncryptionPublicKeyManager.js';
+export * from './DecryptMessageManager.js';
+export type * from './types.js';
diff --git a/packages/message-manager/src/types.ts b/packages/message-manager/src/types.ts
index dc580bd61d5..81726bbcf7f 100644
--- a/packages/message-manager/src/types.ts
+++ b/packages/message-manager/src/types.ts
@@ -1,6 +1,6 @@
import type { SIWEMessage } from '@metamask/controller-utils';
-import type { AbstractMessageParams } from './AbstractMessageManager';
+import type { AbstractMessageParams } from './AbstractMessageManager.js';
// Below types are have been moved into KeyringController, but are still exported here for backwards compatibility.
diff --git a/packages/message-manager/src/utils.test.ts b/packages/message-manager/src/utils.test.ts
index 01ac1327e08..936dab2c751 100644
--- a/packages/message-manager/src/utils.test.ts
+++ b/packages/message-manager/src/utils.test.ts
@@ -1,4 +1,4 @@
-import * as util from './utils';
+import * as util from './utils.js';
describe('utils', () => {
it('normalizeMessageData', () => {
diff --git a/packages/message-manager/src/utils.ts b/packages/message-manager/src/utils.ts
index caa3aed7459..3fafade1e81 100644
--- a/packages/message-manager/src/utils.ts
+++ b/packages/message-manager/src/utils.ts
@@ -1,8 +1,8 @@
import { isValidHexAddress } from '@metamask/controller-utils';
import { add0x, bytesToHex, remove0x } from '@metamask/utils';
-import type { DecryptMessageParams } from './DecryptMessageManager';
-import type { EncryptionPublicKeyParams } from './EncryptionPublicKeyManager';
+import type { DecryptMessageParams } from './DecryptMessageManager.js';
+import type { EncryptionPublicKeyParams } from './EncryptionPublicKeyManager.js';
const hexRe = /^[0-9A-Fa-f]+$/gu;
/**
diff --git a/packages/messenger-cli/jest.config.js b/packages/messenger-cli/jest.config.js
index 2056ce9cc2d..9731a6dd540 100644
--- a/packages/messenger-cli/jest.config.js
+++ b/packages/messenger-cli/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/messenger-cli/package.json b/packages/messenger-cli/package.json
index 1bb3a659376..061f636a511 100644
--- a/packages/messenger-cli/package.json
+++ b/packages/messenger-cli/package.json
@@ -21,14 +21,15 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
"publishConfig": {
"access": "public",
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"changelog:update": "../../scripts/update-changelog.sh @metamask/messenger-cli",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/messenger-cli",
"lint:tsconfigs": "tsx ../../scripts/lint-tsconfigs/lint-tsconfigs.mts",
@@ -45,7 +46,6 @@
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"@types/yargs": "^17.0.32",
"deepmerge": "^4.2.2",
diff --git a/packages/messenger-cli/src/check.test.ts b/packages/messenger-cli/src/check.test.ts
index c7232738c1f..ea212269438 100644
--- a/packages/messenger-cli/src/check.test.ts
+++ b/packages/messenger-cli/src/check.test.ts
@@ -2,9 +2,9 @@ import { createSandbox } from '@metamask/utils/node';
import * as fs from 'node:fs';
import * as path from 'node:path';
-import { checkActionTypesFiles } from './check';
-import { generateActionTypesContent } from './generate-content';
-import type { SourceInfo } from './parse-source';
+import { checkActionTypesFiles } from './check.js';
+import { generateActionTypesContent } from './generate-content.js';
+import type { SourceInfo } from './parse-source.js';
const { withinSandbox } = createSandbox('messenger/check-action-types');
diff --git a/packages/messenger-cli/src/check.ts b/packages/messenger-cli/src/check.ts
index 46009ff8b58..20903d4a875 100644
--- a/packages/messenger-cli/src/check.ts
+++ b/packages/messenger-cli/src/check.ts
@@ -1,9 +1,9 @@
import * as fs from 'node:fs';
import * as path from 'node:path';
-import { generateActionTypesContent } from './generate-content';
-import type { SourceInfo } from './parse-source';
-import { Formatter } from './types';
+import { generateActionTypesContent } from './generate-content.js';
+import type { SourceInfo } from './parse-source.js';
+import { Formatter } from './types.js';
/**
* Checks if generated action types files are up to date.
diff --git a/packages/messenger-cli/src/cli.test.ts b/packages/messenger-cli/src/cli.test.ts
index dc5216dbfa4..4b189086d1d 100644
--- a/packages/messenger-cli/src/cli.test.ts
+++ b/packages/messenger-cli/src/cli.test.ts
@@ -3,7 +3,7 @@ import execa from 'execa';
import * as fs from 'node:fs';
import * as path from 'node:path';
-const ROOT_DIR = path.resolve(__dirname, '..', '..', '..');
+const ROOT_DIR = path.resolve(import.meta.dirname, '..', '..', '..');
const TSX_PATH = path.join(ROOT_DIR, 'node_modules', '.bin', 'tsx');
const CLI_PATH = path.join(
ROOT_DIR,
diff --git a/packages/messenger-cli/src/cli.ts b/packages/messenger-cli/src/cli.ts
index 27073853b96..b94cb59c0f3 100644
--- a/packages/messenger-cli/src/cli.ts
+++ b/packages/messenger-cli/src/cli.ts
@@ -2,10 +2,10 @@
import yargs from 'yargs';
-import { checkActionTypesFiles } from './check';
-import { generateAllActionTypesFiles } from './fix';
-import { findSourcesWithExposedMethods } from './parse-source';
-import { Formatter } from './types';
+import { checkActionTypesFiles } from './check.js';
+import { generateAllActionTypesFiles } from './fix.js';
+import { findSourcesWithExposedMethods } from './parse-source.js';
+import { Formatter } from './types.js';
type CommandLineArguments = {
check: boolean;
diff --git a/packages/messenger-cli/src/fix.test.ts b/packages/messenger-cli/src/fix.test.ts
index dfd207dd5a6..dd436ca363b 100644
--- a/packages/messenger-cli/src/fix.test.ts
+++ b/packages/messenger-cli/src/fix.test.ts
@@ -2,9 +2,9 @@ import { createSandbox } from '@metamask/utils/node';
import * as fs from 'node:fs';
import * as path from 'node:path';
-import { generateAllActionTypesFiles } from './fix';
-import { generateActionTypesContent } from './generate-content';
-import type { SourceInfo } from './parse-source';
+import { generateAllActionTypesFiles } from './fix.js';
+import { generateActionTypesContent } from './generate-content.js';
+import type { SourceInfo } from './parse-source.js';
const { withinSandbox } = createSandbox('messenger/fix-action-types');
diff --git a/packages/messenger-cli/src/fix.ts b/packages/messenger-cli/src/fix.ts
index 46b5860cf3d..63d99034647 100644
--- a/packages/messenger-cli/src/fix.ts
+++ b/packages/messenger-cli/src/fix.ts
@@ -1,9 +1,9 @@
import * as fs from 'node:fs';
import * as path from 'node:path';
-import { generateActionTypesContent } from './generate-content';
-import type { SourceInfo } from './parse-source';
-import type { Formatter } from './types';
+import { generateActionTypesContent } from './generate-content.js';
+import type { SourceInfo } from './parse-source.js';
+import type { Formatter } from './types.js';
/**
* Generates action types files for all controllers/services.
diff --git a/packages/messenger-cli/src/generate-content.test.ts b/packages/messenger-cli/src/generate-content.test.ts
index 1e939a9b5fb..85519348f06 100644
--- a/packages/messenger-cli/src/generate-content.test.ts
+++ b/packages/messenger-cli/src/generate-content.test.ts
@@ -1,5 +1,5 @@
-import { generateActionTypesContent } from './generate-content';
-import type { SourceInfo } from './parse-source';
+import { generateActionTypesContent } from './generate-content.js';
+import type { SourceInfo } from './parse-source.js';
describe('generateActionTypesContent', () => {
it('generates action types for a controller with one method', async () => {
diff --git a/packages/messenger-cli/src/generate-content.ts b/packages/messenger-cli/src/generate-content.ts
index 3bfc3017771..76e4fef242b 100644
--- a/packages/messenger-cli/src/generate-content.ts
+++ b/packages/messenger-cli/src/generate-content.ts
@@ -1,8 +1,8 @@
import { assertExhaustive, getErrorMessage } from '@metamask/utils';
import * as path from 'node:path';
-import type { SourceInfo } from './parse-source';
-import { Formatter } from './types';
+import type { SourceInfo } from './parse-source.js';
+import { Formatter } from './types.js';
/**
* The default options used by Oxfmt and Prettier when formatting the generated
diff --git a/packages/messenger-cli/src/parse-source.test.ts b/packages/messenger-cli/src/parse-source.test.ts
index 80366d4994a..5ab649e6bef 100644
--- a/packages/messenger-cli/src/parse-source.test.ts
+++ b/packages/messenger-cli/src/parse-source.test.ts
@@ -2,7 +2,10 @@ import { createSandbox } from '@metamask/utils/node';
import * as fs from 'node:fs';
import * as path from 'node:path';
-import { findSourcesWithExposedMethods, parseSourceFile } from './parse-source';
+import {
+ findSourcesWithExposedMethods,
+ parseSourceFile,
+} from './parse-source.js';
const { withinSandbox: withinParseSourceSandbox } = createSandbox(
'messenger/parse-source',
diff --git a/packages/messenger-cli/src/parse-source.ts b/packages/messenger-cli/src/parse-source.ts
index 133ad6ce361..afda5b13c4a 100644
--- a/packages/messenger-cli/src/parse-source.ts
+++ b/packages/messenger-cli/src/parse-source.ts
@@ -10,7 +10,12 @@ import type {
SourceFile,
Type,
} from 'typescript';
-import {
+import typescript from 'typescript';
+
+// Older versions of TypeScript break when importing directly in ESM. This is a
+// temporary workaround
+/* eslint-disable import-x/no-named-as-default-member */
+const {
ScriptTarget,
createProgram,
createSourceFile,
@@ -28,7 +33,8 @@ import {
parseJsonConfigFileContent,
readConfigFile,
sys,
-} from 'typescript';
+} = typescript;
+/* eslint-enable import-x/no-named-as-default-member */
export type MethodInfo = {
name: string;
diff --git a/packages/messenger/jest.config.js b/packages/messenger/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/messenger/jest.config.js
+++ b/packages/messenger/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/messenger/package.json b/packages/messenger/package.json
index 7aa3291ebaf..970c5792bc8 100644
--- a/packages/messenger/package.json
+++ b/packages/messenger/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/messenger",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/messenger",
@@ -56,8 +49,8 @@
"@metamask/utils": "^11.11.0"
},
"devDependencies": {
+ "@jest/globals": "^30.4.1",
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"immer": "^9.0.6",
diff --git a/packages/messenger/src/Messenger.test.ts b/packages/messenger/src/Messenger.test.ts
index e197495cd2e..c0a109ca396 100644
--- a/packages/messenger/src/Messenger.test.ts
+++ b/packages/messenger/src/Messenger.test.ts
@@ -1,8 +1,9 @@
+import { jest } from '@jest/globals';
import type { Patch } from 'immer';
-import { Messenger, MOCK_ANY_NAMESPACE } from './Messenger';
-import type { ActionConstraint } from './Messenger';
-import type { MockAnyNamespace } from './Messenger';
+import { Messenger, MOCK_ANY_NAMESPACE } from './Messenger.js';
+import type { ActionConstraint } from './Messenger.js';
+import type { MockAnyNamespace } from './Messenger.js';
describe('Messenger', () => {
describe('registerActionHandler and call', () => {
diff --git a/packages/messenger/src/index.test.ts b/packages/messenger/src/index.test.ts
index 159ada030d1..86f27a87c64 100644
--- a/packages/messenger/src/index.test.ts
+++ b/packages/messenger/src/index.test.ts
@@ -1,4 +1,4 @@
-import * as allExports from '.';
+import * as allExports from './..js';
describe('@metamask/messenger', () => {
it('has expected JavaScript exports', () => {
diff --git a/packages/messenger/src/index.ts b/packages/messenger/src/index.ts
index 6fb7aaefeda..345e6615af6 100644
--- a/packages/messenger/src/index.ts
+++ b/packages/messenger/src/index.ts
@@ -14,5 +14,5 @@ export type {
NamespacedBy,
NotNamespacedBy,
NamespacedName,
-} from './Messenger';
-export { MOCK_ANY_NAMESPACE, Messenger } from './Messenger';
+} from './Messenger.js';
+export { MOCK_ANY_NAMESPACE, Messenger } from './Messenger.js';
diff --git a/packages/money-account-api-data-service/jest.config.js b/packages/money-account-api-data-service/jest.config.js
index c17efa251af..e062d82dd98 100644
--- a/packages/money-account-api-data-service/jest.config.js
+++ b/packages/money-account-api-data-service/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
displayName,
coverageThreshold: {
diff --git a/packages/money-account-api-data-service/package.json b/packages/money-account-api-data-service/package.json
index d4d9703dd03..cd8d99fe89e 100644
--- a/packages/money-account-api-data-service/package.json
+++ b/packages/money-account-api-data-service/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/money-account-api-data-service",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/money-account-api-data-service",
@@ -64,7 +57,6 @@
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/money-account-api-data-service/src/index.ts b/packages/money-account-api-data-service/src/index.ts
index 780facd0ac0..bba02920461 100644
--- a/packages/money-account-api-data-service/src/index.ts
+++ b/packages/money-account-api-data-service/src/index.ts
@@ -1,15 +1,15 @@
-export { MoneyAccountApiDataService } from './money-account-api-data-service';
+export { MoneyAccountApiDataService } from './money-account-api-data-service.js';
export type {
MoneyAccountApiDataServiceActions,
MoneyAccountApiDataServiceEvents,
MoneyAccountApiDataServiceMessenger,
-} from './money-account-api-data-service';
+} from './money-account-api-data-service.js';
export type {
MoneyAccountApiDataServiceFetchPositionsAction,
MoneyAccountApiDataServiceFetchInterestAction,
MoneyAccountApiDataServiceFetchHistoryAction,
MoneyAccountApiDataServiceFetchRateHistoryAction,
-} from './money-account-api-data-service-method-action-types';
+} from './money-account-api-data-service-method-action-types.js';
export type {
PositionResponse,
InterestResponse,
@@ -21,12 +21,12 @@ export type {
DataFreshness,
CashFlowType,
CashFlowSource,
-} from './response.types';
+} from './response.types.js';
export type {
InterestWindow,
InterestOptions,
HistoryOptions,
RateHistoryOptions,
-} from './types';
-export { Env } from './constants';
-export { MoneyAccountApiResponseValidationError } from './errors';
+} from './types.js';
+export { Env } from './constants.js';
+export { MoneyAccountApiResponseValidationError } from './errors.js';
diff --git a/packages/money-account-api-data-service/src/money-account-api-data-service-method-action-types.ts b/packages/money-account-api-data-service/src/money-account-api-data-service-method-action-types.ts
index a969d0b4d37..d3773dc11e4 100644
--- a/packages/money-account-api-data-service/src/money-account-api-data-service-method-action-types.ts
+++ b/packages/money-account-api-data-service/src/money-account-api-data-service-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { MoneyAccountApiDataService } from './money-account-api-data-service';
+import type { MoneyAccountApiDataService } from './money-account-api-data-service.js';
/**
* Fetches the current vault positions for a given user address.
diff --git a/packages/money-account-api-data-service/src/money-account-api-data-service.test.ts b/packages/money-account-api-data-service/src/money-account-api-data-service.test.ts
index f396130de6f..19bee8b74dd 100644
--- a/packages/money-account-api-data-service/src/money-account-api-data-service.test.ts
+++ b/packages/money-account-api-data-service/src/money-account-api-data-service.test.ts
@@ -7,13 +7,13 @@ import type {
} from '@metamask/messenger';
import nock, { cleanAll as nockCleanAll } from 'nock';
-import { Env, MONEY_ACCOUNT_API_URL_MAP } from './constants';
-import { MoneyAccountApiResponseValidationError } from './errors';
-import type { MoneyAccountApiDataServiceMessenger } from './money-account-api-data-service';
+import { Env, MONEY_ACCOUNT_API_URL_MAP } from './constants.js';
+import { MoneyAccountApiResponseValidationError } from './errors.js';
+import type { MoneyAccountApiDataServiceMessenger } from './money-account-api-data-service.js';
import {
MoneyAccountApiDataService,
serviceName,
-} from './money-account-api-data-service';
+} from './money-account-api-data-service.js';
// ============================================================
// Fixtures
diff --git a/packages/money-account-api-data-service/src/money-account-api-data-service.ts b/packages/money-account-api-data-service/src/money-account-api-data-service.ts
index 2f216249d06..7b65ee5c1ed 100644
--- a/packages/money-account-api-data-service/src/money-account-api-data-service.ts
+++ b/packages/money-account-api-data-service/src/money-account-api-data-service.ts
@@ -16,27 +16,27 @@ import {
Env,
MONEY_ACCOUNT_API_URL_MAP,
RATE_HISTORY_STALE_TIME_MS,
-} from './constants';
-import { MoneyAccountApiResponseValidationError } from './errors';
-import { projectLogger, createModuleLogger } from './logger';
-import type { MoneyAccountApiDataServiceMethodActions } from './money-account-api-data-service-method-action-types';
+} from './constants.js';
+import { MoneyAccountApiResponseValidationError } from './errors.js';
+import { projectLogger, createModuleLogger } from './logger.js';
+import type { MoneyAccountApiDataServiceMethodActions } from './money-account-api-data-service-method-action-types.js';
import type {
HistoryResponse,
InterestResponse,
PositionResponse,
RateHistoryResponse,
-} from './response.types';
+} from './response.types.js';
import {
HistoryResponseStruct,
InterestResponseStruct,
PositionResponseStruct,
RateHistoryResponseStruct,
-} from './structs';
+} from './structs.js';
import type {
HistoryOptions,
InterestOptions,
RateHistoryOptions,
-} from './types';
+} from './types.js';
// === GENERAL ===
@@ -200,7 +200,7 @@ export class MoneyAccountApiDataService extends BaseDataService<
);
}
- return validated as unknown as PositionResponse;
+ return validated as PositionResponse;
},
});
}
@@ -258,7 +258,7 @@ export class MoneyAccountApiDataService extends BaseDataService<
);
}
- return validated as unknown as InterestResponse;
+ return validated as InterestResponse;
},
});
}
@@ -331,7 +331,7 @@ export class MoneyAccountApiDataService extends BaseDataService<
);
}
- return validated as unknown as HistoryResponse;
+ return validated as HistoryResponse;
},
},
options?.cursor ?? undefined,
@@ -391,7 +391,7 @@ export class MoneyAccountApiDataService extends BaseDataService<
);
}
- return validated as unknown as RateHistoryResponse;
+ return validated as RateHistoryResponse;
},
});
}
diff --git a/packages/money-account-api-data-service/src/response.types.ts b/packages/money-account-api-data-service/src/response.types.ts
index ff779e24b2b..8f188a99ee8 100644
--- a/packages/money-account-api-data-service/src/response.types.ts
+++ b/packages/money-account-api-data-service/src/response.types.ts
@@ -5,7 +5,7 @@ import type {
InterestResponseStruct,
PositionResponseStruct,
RateHistoryResponseStruct,
-} from './structs';
+} from './structs.js';
// All types in this file mirror the external Money Account API's snake_case
// JSON contract verbatim to maintain 1:1 parity with API responses.
diff --git a/packages/money-account-balance-service/jest.config.js b/packages/money-account-balance-service/jest.config.js
index c17efa251af..e062d82dd98 100644
--- a/packages/money-account-balance-service/jest.config.js
+++ b/packages/money-account-balance-service/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
displayName,
coverageThreshold: {
diff --git a/packages/money-account-balance-service/package.json b/packages/money-account-balance-service/package.json
index edd0ebc6184..bb93aa8679d 100644
--- a/packages/money-account-balance-service/package.json
+++ b/packages/money-account-balance-service/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/money-account-balance-service",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/money-account-balance-service",
@@ -68,7 +61,6 @@
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/money-account-balance-service/src/index.ts b/packages/money-account-balance-service/src/index.ts
index 1b25bbd7738..b9bb9ccbb55 100644
--- a/packages/money-account-balance-service/src/index.ts
+++ b/packages/money-account-balance-service/src/index.ts
@@ -1,4 +1,4 @@
-export { MoneyAccountBalanceService } from './money-account-balance-service';
+export { MoneyAccountBalanceService } from './money-account-balance-service.js';
export type {
MoneyAccountBalanceServiceActions,
MoneyAccountBalanceServiceEvents,
@@ -6,7 +6,7 @@ export type {
MoneyAccountBalanceServiceOptions,
MoneyAccountBalanceServiceTraceCallback,
MoneyAccountBalanceServiceTraceRequest,
-} from './money-account-balance-service';
+} from './money-account-balance-service.js';
export type {
MoneyAccountBalanceServiceGetMoneyAccountBalanceAction,
MoneyAccountBalanceServiceGetMusdBalanceAction,
@@ -14,7 +14,7 @@ export type {
MoneyAccountBalanceServiceGetExchangeRateAction,
MoneyAccountBalanceServiceGetMusdEquivalentValueAction,
MoneyAccountBalanceServiceGetVaultApyAction,
-} from './money-account-balance-service-method-action-types';
+} from './money-account-balance-service-method-action-types.js';
export type {
ExchangeRateResponse,
MoneyAccountBalanceResponse,
@@ -24,5 +24,5 @@ export type {
export {
VaultConfigNotAvailableError,
VaultConfigValidationError,
-} from './errors';
-export type { VaultConfig } from './types';
+} from './errors.js';
+export type { VaultConfig } from './types.js';
diff --git a/packages/money-account-balance-service/src/money-account-balance-service-method-action-types.ts b/packages/money-account-balance-service/src/money-account-balance-service-method-action-types.ts
index 1c5493a4799..a146aefb51e 100644
--- a/packages/money-account-balance-service/src/money-account-balance-service-method-action-types.ts
+++ b/packages/money-account-balance-service/src/money-account-balance-service-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { MoneyAccountBalanceService } from './money-account-balance-service';
+import type { MoneyAccountBalanceService } from './money-account-balance-service.js';
/**
* Fetches the mUSD ERC-20 balance for the given account address via RPC.
diff --git a/packages/money-account-balance-service/src/money-account-balance-service.test.ts b/packages/money-account-balance-service/src/money-account-balance-service.test.ts
index c2d9897d2e5..ccb635833a3 100644
--- a/packages/money-account-balance-service/src/money-account-balance-service.test.ts
+++ b/packages/money-account-balance-service/src/money-account-balance-service.test.ts
@@ -21,17 +21,17 @@ import {
MONEY_ACCOUNT_BALANCE_STALETIME_FEATURE_FLAG_KEY,
MULTICALL3_ADDRESS_BY_CHAIN_ID,
VAULT_CONFIG_FEATURE_FLAG_KEY,
-} from './constants';
+} from './constants.js';
import {
VaultConfigNotAvailableError,
VaultConfigValidationError,
VedaResponseValidationError,
-} from './errors';
-import type { MoneyAccountBalanceServiceMessenger } from './money-account-balance-service';
+} from './errors.js';
+import type { MoneyAccountBalanceServiceMessenger } from './money-account-balance-service.js';
import {
MoneyAccountBalanceService,
serviceName,
-} from './money-account-balance-service';
+} from './money-account-balance-service.js';
jest.mock('@ethersproject/contracts');
jest.mock('@ethersproject/providers');
diff --git a/packages/money-account-balance-service/src/money-account-balance-service.ts b/packages/money-account-balance-service/src/money-account-balance-service.ts
index 955ce61e5cc..937dfde0157 100644
--- a/packages/money-account-balance-service/src/money-account-balance-service.ts
+++ b/packages/money-account-balance-service/src/money-account-balance-service.ts
@@ -36,23 +36,23 @@ import {
VAULT_CONFIG_FEATURE_FLAG_KEY,
VEDA_API_NETWORK_NAMES,
VEDA_PERFORMANCE_API_BASE_URL,
-} from './constants';
+} from './constants.js';
import {
VaultConfigNotAvailableError,
VaultConfigValidationError,
VedaResponseValidationError,
-} from './errors';
-import { projectLogger, createModuleLogger } from './logger';
-import type { MoneyAccountBalanceServiceMethodActions } from './money-account-balance-service-method-action-types';
-import { normalizeVaultApyResponse } from './requestNormalization';
+} from './errors.js';
+import { projectLogger, createModuleLogger } from './logger.js';
+import type { MoneyAccountBalanceServiceMethodActions } from './money-account-balance-service-method-action-types.js';
+import { normalizeVaultApyResponse } from './requestNormalization.js';
import type {
ExchangeRateResponse,
MoneyAccountBalanceResponse,
MusdEquivalentValueResponse,
NormalizedVaultApyResponse,
} from './response.types';
-import { VaultApyRawResponseStruct, VaultConfigStruct } from './structs';
-import type { VaultConfig } from './types';
+import { VaultApyRawResponseStruct, VaultConfigStruct } from './structs.js';
+import type { VaultConfig } from './types.js';
// === GENERAL ===
@@ -422,7 +422,7 @@ export class MoneyAccountBalanceService extends BaseDataService<
'Vault config cleared — flag key absent; cache invalidated',
previousConfig,
);
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
+
this.invalidateQueries();
} else {
configLogger(
@@ -443,7 +443,7 @@ export class MoneyAccountBalanceService extends BaseDataService<
'Vault config validation failed — previous config cleared; cache invalidated',
{ previousConfig, error },
);
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
+
this.invalidateQueries();
} else {
configLogger(
@@ -464,7 +464,7 @@ export class MoneyAccountBalanceService extends BaseDataService<
previous: previousConfig,
next: newConfig,
});
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
+
this.invalidateQueries();
} else {
configLogger('Vault config loaded', newConfig);
diff --git a/packages/money-account-balance-service/src/requestNormalization.ts b/packages/money-account-balance-service/src/requestNormalization.ts
index 2a8238dfcad..e324eddbe0b 100644
--- a/packages/money-account-balance-service/src/requestNormalization.ts
+++ b/packages/money-account-balance-service/src/requestNormalization.ts
@@ -1,7 +1,7 @@
import { Infer } from '@metamask/superstruct';
import type { NormalizedVaultApyResponse } from './response.types';
-import { VaultApyRawResponseStruct } from './structs';
+import { VaultApyRawResponseStruct } from './structs.js';
/**
* Normalizes the raw response from the Veda performance API into the expected
diff --git a/packages/money-account-controller/jest.config.js b/packages/money-account-controller/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/money-account-controller/jest.config.js
+++ b/packages/money-account-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/money-account-controller/package.json b/packages/money-account-controller/package.json
index b2615c4481d..1d141a7755e 100644
--- a/packages/money-account-controller/package.json
+++ b/packages/money-account-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/money-account-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/money-account-controller",
@@ -67,7 +60,6 @@
"@metamask/auto-changelog": "^6.1.0",
"@metamask/keyring-utils": "^3.3.1",
"@metamask/utils": "^11.11.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/money-account-controller/src/MoneyAccountController-method-action-types.ts b/packages/money-account-controller/src/MoneyAccountController-method-action-types.ts
index 5edf280cef7..a0e8d1fb519 100644
--- a/packages/money-account-controller/src/MoneyAccountController-method-action-types.ts
+++ b/packages/money-account-controller/src/MoneyAccountController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { MoneyAccountController } from './MoneyAccountController';
+import type { MoneyAccountController } from './MoneyAccountController.js';
/**
* Initializes the controller by creating a money account for the primary
diff --git a/packages/money-account-controller/src/MoneyAccountController.test.ts b/packages/money-account-controller/src/MoneyAccountController.test.ts
index 701b6ceea9b..ce6a6adc0b9 100644
--- a/packages/money-account-controller/src/MoneyAccountController.test.ts
+++ b/packages/money-account-controller/src/MoneyAccountController.test.ts
@@ -10,11 +10,11 @@ import type {
MessengerEvents,
} from '@metamask/messenger';
-import type { MoneyAccount, MoneyAccountControllerMessenger } from '.';
+import type { MoneyAccount, MoneyAccountControllerMessenger } from './..js';
import {
MoneyAccountController,
getDefaultMoneyAccountControllerState,
-} from '.';
+} from './..js';
const MOCK_ENTROPY_SOURCE_ID = 'entropy-source-1';
const MOCK_OTHER_ENTROPY_SOURCE_ID = 'entropy-source-2';
diff --git a/packages/money-account-controller/src/MoneyAccountController.ts b/packages/money-account-controller/src/MoneyAccountController.ts
index 3898debb25f..ae1fd3fc155 100644
--- a/packages/money-account-controller/src/MoneyAccountController.ts
+++ b/packages/money-account-controller/src/MoneyAccountController.ts
@@ -27,10 +27,10 @@ import { EthKeyring } from '@metamask/keyring-utils';
import type { Messenger } from '@metamask/messenger';
import { Mutex } from 'async-mutex';
-import { projectLogger as log } from './logger';
-import type { MoneyAccountControllerMethodActions } from './MoneyAccountController-method-action-types';
-import type { MoneyAccount } from './types';
-import { isMoneyKeyring } from './utils';
+import { projectLogger as log } from './logger.js';
+import type { MoneyAccountControllerMethodActions } from './MoneyAccountController-method-action-types.js';
+import type { MoneyAccount } from './types.js';
+import { isMoneyKeyring } from './utils.js';
export const controllerName = 'MoneyAccountController';
diff --git a/packages/money-account-controller/src/index.ts b/packages/money-account-controller/src/index.ts
index 6ad8e5fe97b..d8ab43a19a9 100644
--- a/packages/money-account-controller/src/index.ts
+++ b/packages/money-account-controller/src/index.ts
@@ -1,10 +1,10 @@
-export type { MoneyAccount } from './types';
-export { isMoneyKeyring } from './utils';
+export type { MoneyAccount } from './types.js';
+export { isMoneyKeyring } from './utils.js';
export {
MoneyAccountController,
controllerName,
getDefaultMoneyAccountControllerState,
-} from './MoneyAccountController';
+} from './MoneyAccountController.js';
export type {
MoneyAccountControllerState,
MoneyAccountControllerGetStateAction,
@@ -12,10 +12,10 @@ export type {
MoneyAccountControllerStateChangeEvent,
MoneyAccountControllerEvents,
MoneyAccountControllerMessenger,
-} from './MoneyAccountController';
+} from './MoneyAccountController.js';
export type {
MoneyAccountControllerClearStateAction,
MoneyAccountControllerCreateMoneyAccountAction,
MoneyAccountControllerGetMoneyAccountAction,
MoneyAccountControllerInitAction,
-} from './MoneyAccountController-method-action-types';
+} from './MoneyAccountController-method-action-types.js';
diff --git a/packages/money-account-controller/src/utils.test.ts b/packages/money-account-controller/src/utils.test.ts
index 3ee2accba51..b3fa2459282 100644
--- a/packages/money-account-controller/src/utils.test.ts
+++ b/packages/money-account-controller/src/utils.test.ts
@@ -1,7 +1,7 @@
import { KeyringTypes } from '@metamask/keyring-controller';
import { EthKeyring } from '@metamask/keyring-utils';
-import { isMoneyKeyring } from './utils';
+import { isMoneyKeyring } from './utils.js';
describe('isMoneyKeyring', () => {
it('returns true for a Money Keyring', () => {
diff --git a/packages/money-account-upgrade-controller/jest.config.js b/packages/money-account-upgrade-controller/jest.config.js
index 1c5314007e1..a111ce68439 100644
--- a/packages/money-account-upgrade-controller/jest.config.js
+++ b/packages/money-account-upgrade-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
displayName,
coverageThreshold: {
global: {
diff --git a/packages/money-account-upgrade-controller/package.json b/packages/money-account-upgrade-controller/package.json
index 7d6dd2b981f..3c673c394de 100644
--- a/packages/money-account-upgrade-controller/package.json
+++ b/packages/money-account-upgrade-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,15 +32,15 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/money-account-upgrade-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/money-account-upgrade-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 --check",
- "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate",
+ "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",
"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",
@@ -68,7 +61,6 @@
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/money-account-upgrade-controller/src/MoneyAccountUpgradeController-method-action-types.ts b/packages/money-account-upgrade-controller/src/MoneyAccountUpgradeController-method-action-types.ts
index 23d5c723629..001f6a6ccef 100644
--- a/packages/money-account-upgrade-controller/src/MoneyAccountUpgradeController-method-action-types.ts
+++ b/packages/money-account-upgrade-controller/src/MoneyAccountUpgradeController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { MoneyAccountUpgradeController } from './MoneyAccountUpgradeController';
+import type { MoneyAccountUpgradeController } from './MoneyAccountUpgradeController.js';
/**
* Runs each step in the upgrade sequence in order. A step that reports
diff --git a/packages/money-account-upgrade-controller/src/MoneyAccountUpgradeController.test.ts b/packages/money-account-upgrade-controller/src/MoneyAccountUpgradeController.test.ts
index 7a08f3a60fa..f05425e3cc3 100644
--- a/packages/money-account-upgrade-controller/src/MoneyAccountUpgradeController.test.ts
+++ b/packages/money-account-upgrade-controller/src/MoneyAccountUpgradeController.test.ts
@@ -11,11 +11,11 @@ import type { Hex } from '@metamask/utils';
import type {
MoneyAccountUpgradeControllerMessenger,
MoneyAccountUpgradeStepError,
-} from '.';
+} from './..js';
import {
MoneyAccountUpgradeController,
isMoneyAccountUpgradeStepError,
-} from '.';
+} from './..js';
const MOCK_CHAIN_ID = '0x1' as Hex; // mainnet, supported in delegation-deployments@1.3.0
const UNSUPPORTED_CHAIN_ID = '0x539' as Hex; // 1337 — local dev, not in registry
diff --git a/packages/money-account-upgrade-controller/src/MoneyAccountUpgradeController.ts b/packages/money-account-upgrade-controller/src/MoneyAccountUpgradeController.ts
index b38e095b474..e11598ddfc7 100644
--- a/packages/money-account-upgrade-controller/src/MoneyAccountUpgradeController.ts
+++ b/packages/money-account-upgrade-controller/src/MoneyAccountUpgradeController.ts
@@ -31,14 +31,14 @@ import type {
import { hexToNumber } from '@metamask/utils';
import type { Hex } from '@metamask/utils';
-import { MoneyAccountUpgradeStepError } from './errors';
-import type { MoneyAccountUpgradeControllerMethodActions } from './MoneyAccountUpgradeController-method-action-types';
-import { associateAddressStep } from './steps/associate-address';
-import { buildDelegationStep } from './steps/build-delegations';
-import { eip7702AuthorizationStep } from './steps/eip-7702-authorization';
-import { registerIntentsStep } from './steps/register-intents';
-import type { Step } from './steps/step';
-import type { UpgradeConfig } from './types';
+import { MoneyAccountUpgradeStepError } from './errors.js';
+import type { MoneyAccountUpgradeControllerMethodActions } from './MoneyAccountUpgradeController-method-action-types.js';
+import { associateAddressStep } from './steps/associate-address.js';
+import { buildDelegationStep } from './steps/build-delegations.js';
+import { eip7702AuthorizationStep } from './steps/eip-7702-authorization.js';
+import { registerIntentsStep } from './steps/register-intents.js';
+import type { Step } from './steps/step.js';
+import type { UpgradeConfig } from './types.js';
/**
* The Delegation Framework deployment version we resolve contract addresses
diff --git a/packages/money-account-upgrade-controller/src/errors.test.ts b/packages/money-account-upgrade-controller/src/errors.test.ts
index 53b3f1a885f..a886ee39a2f 100644
--- a/packages/money-account-upgrade-controller/src/errors.test.ts
+++ b/packages/money-account-upgrade-controller/src/errors.test.ts
@@ -1,7 +1,7 @@
import {
MoneyAccountUpgradeStepError,
isMoneyAccountUpgradeStepError,
-} from './errors';
+} from './errors.js';
describe('MoneyAccountUpgradeStepError', () => {
it('records the step name and preserves an Error cause', () => {
diff --git a/packages/money-account-upgrade-controller/src/index.ts b/packages/money-account-upgrade-controller/src/index.ts
index 784e62cfd50..e2bd2c62553 100644
--- a/packages/money-account-upgrade-controller/src/index.ts
+++ b/packages/money-account-upgrade-controller/src/index.ts
@@ -1,9 +1,9 @@
-export type { UpgradeConfig } from './types';
+export type { UpgradeConfig } from './types.js';
export {
MoneyAccountUpgradeStepError,
isMoneyAccountUpgradeStepError,
-} from './errors';
-export { MoneyAccountUpgradeController } from './MoneyAccountUpgradeController';
+} from './errors.js';
+export { MoneyAccountUpgradeController } from './MoneyAccountUpgradeController.js';
export type {
MoneyAccountUpgradeControllerState,
MoneyAccountUpgradeControllerGetStateAction,
@@ -11,5 +11,5 @@ export type {
MoneyAccountUpgradeControllerStateChangedEvent,
MoneyAccountUpgradeControllerEvents,
MoneyAccountUpgradeControllerMessenger,
-} from './MoneyAccountUpgradeController';
-export type { MoneyAccountUpgradeControllerUpgradeAccountAction } from './MoneyAccountUpgradeController-method-action-types';
+} from './MoneyAccountUpgradeController.js';
+export type { MoneyAccountUpgradeControllerUpgradeAccountAction } from './MoneyAccountUpgradeController-method-action-types.js';
diff --git a/packages/money-account-upgrade-controller/src/steps/associate-address.test.ts b/packages/money-account-upgrade-controller/src/steps/associate-address.test.ts
index c1fafd7bd87..f5ee6d8988a 100644
--- a/packages/money-account-upgrade-controller/src/steps/associate-address.test.ts
+++ b/packages/money-account-upgrade-controller/src/steps/associate-address.test.ts
@@ -6,8 +6,8 @@ import type {
} from '@metamask/messenger';
import type { Hex } from '@metamask/utils';
-import type { MoneyAccountUpgradeControllerMessenger } from '../MoneyAccountUpgradeController';
-import { associateAddressStep } from './associate-address';
+import type { MoneyAccountUpgradeControllerMessenger } from '../MoneyAccountUpgradeController.js';
+import { associateAddressStep } from './associate-address.js';
const MOCK_ADDRESS = '0xAbCdEf1234567890AbCdEf1234567890AbCdEf12' as Hex;
const MOCK_ADDRESS_LOWERCASE = MOCK_ADDRESS.toLowerCase() as Hex;
diff --git a/packages/money-account-upgrade-controller/src/steps/associate-address.ts b/packages/money-account-upgrade-controller/src/steps/associate-address.ts
index 4bb9c3fec09..bba2715962c 100644
--- a/packages/money-account-upgrade-controller/src/steps/associate-address.ts
+++ b/packages/money-account-upgrade-controller/src/steps/associate-address.ts
@@ -1,8 +1,8 @@
import type { Hex } from '@metamask/utils';
import { hasProperty } from '@metamask/utils';
-import { equalsIgnoreCase } from './delegation-matchers';
-import type { Step } from './step';
+import { equalsIgnoreCase } from './delegation-matchers.js';
+import type { Step } from './step.js';
/**
* Determines whether an error is a CHOMP conflict (HTTP 409) response.
diff --git a/packages/money-account-upgrade-controller/src/steps/build-delegations.test.ts b/packages/money-account-upgrade-controller/src/steps/build-delegations.test.ts
index dc383b4c1d2..7b06ae1729a 100644
--- a/packages/money-account-upgrade-controller/src/steps/build-delegations.test.ts
+++ b/packages/money-account-upgrade-controller/src/steps/build-delegations.test.ts
@@ -14,8 +14,8 @@ import type {
} from '@metamask/messenger';
import type { Hex } from '@metamask/utils';
-import type { MoneyAccountUpgradeControllerMessenger } from '../MoneyAccountUpgradeController';
-import { buildDelegationStep } from './build-delegations';
+import type { MoneyAccountUpgradeControllerMessenger } from '../MoneyAccountUpgradeController.js';
+import { buildDelegationStep } from './build-delegations.js';
jest.mock('@metamask/delegation-core', () => ({
ROOT_AUTHORITY:
diff --git a/packages/money-account-upgrade-controller/src/steps/build-delegations.ts b/packages/money-account-upgrade-controller/src/steps/build-delegations.ts
index 3edf32fe292..6663c1de4d9 100644
--- a/packages/money-account-upgrade-controller/src/steps/build-delegations.ts
+++ b/packages/money-account-upgrade-controller/src/steps/build-delegations.ts
@@ -9,12 +9,12 @@ import {
import { add0x, bytesToHex } from '@metamask/utils';
import type { Hex } from '@metamask/utils';
-import type { MoneyAccountUpgradeControllerMessenger } from '../MoneyAccountUpgradeController';
+import type { MoneyAccountUpgradeControllerMessenger } from '../MoneyAccountUpgradeController.js';
import {
equalsIgnoreCase,
makeHasVedaRedeemerCaveat,
-} from './delegation-matchers';
-import type { Step } from './step';
+} from './delegation-matchers.js';
+import type { Step } from './step.js';
const MAX_UINT256 = 2n ** 256n - 1n;
const MAX_UINT256_HEX: Hex = add0x(MAX_UINT256.toString(16));
diff --git a/packages/money-account-upgrade-controller/src/steps/eip-7702-authorization.test.ts b/packages/money-account-upgrade-controller/src/steps/eip-7702-authorization.test.ts
index e1c179fc8fb..5cf12cd301f 100644
--- a/packages/money-account-upgrade-controller/src/steps/eip-7702-authorization.test.ts
+++ b/packages/money-account-upgrade-controller/src/steps/eip-7702-authorization.test.ts
@@ -6,8 +6,8 @@ import type {
} from '@metamask/messenger';
import type { Hex } from '@metamask/utils';
-import type { MoneyAccountUpgradeControllerMessenger } from '../MoneyAccountUpgradeController';
-import { eip7702AuthorizationStep } from './eip-7702-authorization';
+import type { MoneyAccountUpgradeControllerMessenger } from '../MoneyAccountUpgradeController.js';
+import { eip7702AuthorizationStep } from './eip-7702-authorization.js';
const MOCK_ADDRESS = '0xabcdef1234567890abcdef1234567890abcdef12' as Hex;
const MOCK_CHAIN_ID = '0xaa36a7' as Hex; // 11155111 (Sepolia) — non-trivial decimal
diff --git a/packages/money-account-upgrade-controller/src/steps/eip-7702-authorization.ts b/packages/money-account-upgrade-controller/src/steps/eip-7702-authorization.ts
index f494a679452..2a2f29f25bc 100644
--- a/packages/money-account-upgrade-controller/src/steps/eip-7702-authorization.ts
+++ b/packages/money-account-upgrade-controller/src/steps/eip-7702-authorization.ts
@@ -2,7 +2,7 @@ import type { Provider } from '@metamask/network-controller';
import { add0x, isStrictHexString } from '@metamask/utils';
import type { Hex } from '@metamask/utils';
-import type { Step, StepContext } from './step';
+import type { Step, StepContext } from './step.js';
const EIP_7702_DELEGATION_PREFIX = '0xef0100';
// '0x' (2) + 'ef0100' (6) + 20-byte address (40) = 48 characters.
diff --git a/packages/money-account-upgrade-controller/src/steps/register-intents.test.ts b/packages/money-account-upgrade-controller/src/steps/register-intents.test.ts
index 2d67e1498d6..87cf94993dd 100644
--- a/packages/money-account-upgrade-controller/src/steps/register-intents.test.ts
+++ b/packages/money-account-upgrade-controller/src/steps/register-intents.test.ts
@@ -12,8 +12,8 @@ import type {
} from '@metamask/messenger';
import type { Hex } from '@metamask/utils';
-import type { MoneyAccountUpgradeControllerMessenger } from '../MoneyAccountUpgradeController';
-import { registerIntentsStep } from './register-intents';
+import type { MoneyAccountUpgradeControllerMessenger } from '../MoneyAccountUpgradeController.js';
+import { registerIntentsStep } from './register-intents.js';
jest.mock('@metamask/delegation-core', () => ({
createRedeemerTerms: jest.fn(),
diff --git a/packages/money-account-upgrade-controller/src/steps/register-intents.ts b/packages/money-account-upgrade-controller/src/steps/register-intents.ts
index f3a3fe434d3..eda4b0d0b9d 100644
--- a/packages/money-account-upgrade-controller/src/steps/register-intents.ts
+++ b/packages/money-account-upgrade-controller/src/steps/register-intents.ts
@@ -7,8 +7,8 @@ import type {
import {
equalsIgnoreCase,
makeHasVedaRedeemerCaveat,
-} from './delegation-matchers';
-import type { Step } from './step';
+} from './delegation-matchers.js';
+import type { Step } from './step.js';
type IntentMetadataType = SendIntentParams['metadata']['type'];
diff --git a/packages/money-account-upgrade-controller/src/steps/step.ts b/packages/money-account-upgrade-controller/src/steps/step.ts
index 9537119d8ab..70e2855380e 100644
--- a/packages/money-account-upgrade-controller/src/steps/step.ts
+++ b/packages/money-account-upgrade-controller/src/steps/step.ts
@@ -1,6 +1,6 @@
import type { Hex } from '@metamask/utils';
-import type { MoneyAccountUpgradeControllerMessenger } from '../MoneyAccountUpgradeController';
+import type { MoneyAccountUpgradeControllerMessenger } from '../MoneyAccountUpgradeController.js';
/**
* Context supplied to each step when it is run.
diff --git a/packages/multichain-account-service/jest.config.js b/packages/multichain-account-service/jest.config.js
index 760546caa63..b218e56edef 100644
--- a/packages/multichain-account-service/jest.config.js
+++ b/packages/multichain-account-service/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/multichain-account-service/package.json b/packages/multichain-account-service/package.json
index 237e8cb721d..e09444930ec 100644
--- a/packages/multichain-account-service/package.json
+++ b/packages/multichain-account-service/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/multichain-account-service",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/multichain-account-service",
@@ -81,7 +74,6 @@
"@metamask/controller-utils": "^12.3.0",
"@metamask/eth-hd-keyring": "^14.1.1",
"@metamask/providers": "^22.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"@types/uuid": "^8.3.0",
"deepmerge": "^4.2.2",
diff --git a/packages/multichain-account-service/src/MultichainAccountGroup.test.ts b/packages/multichain-account-service/src/MultichainAccountGroup.test.ts
index 927b6d6e764..3cb3dcb20d1 100644
--- a/packages/multichain-account-service/src/MultichainAccountGroup.test.ts
+++ b/packages/multichain-account-service/src/MultichainAccountGroup.test.ts
@@ -8,10 +8,10 @@ import {
import { EthScope, SolScope } from '@metamask/keyring-api';
import type { InternalAccount } from '@metamask/keyring-internal-api';
-import type { GroupState } from './MultichainAccountGroup';
-import { MultichainAccountGroup } from './MultichainAccountGroup';
-import { MultichainAccountWallet } from './MultichainAccountWallet';
-import type { RootMessenger, MockAccountProvider } from './tests';
+import type { GroupState } from './MultichainAccountGroup.js';
+import { MultichainAccountGroup } from './MultichainAccountGroup.js';
+import { MultichainAccountWallet } from './MultichainAccountWallet.js';
+import type { RootMessenger, MockAccountProvider } from './tests.js';
import {
MOCK_SNAP_ACCOUNT_2,
MOCK_WALLET_1_BTC_P2TR_ACCOUNT,
@@ -22,8 +22,8 @@ import {
setupBip44AccountProvider,
getMultichainAccountServiceMessenger,
getRootMessenger,
-} from './tests';
-import type { MultichainAccountServiceMessenger } from './types';
+} from './tests.js';
+import type { MultichainAccountServiceMessenger } from './types.js';
function setup({
groupIndex = 0,
diff --git a/packages/multichain-account-service/src/MultichainAccountGroup.ts b/packages/multichain-account-service/src/MultichainAccountGroup.ts
index 992dd1e0159..c0acb116c61 100644
--- a/packages/multichain-account-service/src/MultichainAccountGroup.ts
+++ b/packages/multichain-account-service/src/MultichainAccountGroup.ts
@@ -8,12 +8,12 @@ import type { Bip44Account } from '@metamask/account-api';
import type { AccountSelector } from '@metamask/account-api';
import type { KeyringAccount } from '@metamask/keyring-api';
-import type { Logger } from './logger';
-import { projectLogger as log, createModuleLogger } from './logger';
-import type { ServiceState, StateKeys } from './MultichainAccountService';
-import type { MultichainAccountWallet } from './MultichainAccountWallet';
-import type { Bip44AccountProvider } from './providers';
-import type { MultichainAccountServiceMessenger } from './types';
+import type { Logger } from './logger.js';
+import { projectLogger as log, createModuleLogger } from './logger.js';
+import type { ServiceState, StateKeys } from './MultichainAccountService.js';
+import type { MultichainAccountWallet } from './MultichainAccountWallet.js';
+import type { Bip44AccountProvider } from './providers.js';
+import type { MultichainAccountServiceMessenger } from './types.js';
export type GroupState =
ServiceState[StateKeys['entropySource']][StateKeys['groupIndex']];
diff --git a/packages/multichain-account-service/src/MultichainAccountService-method-action-types.ts b/packages/multichain-account-service/src/MultichainAccountService-method-action-types.ts
index 7d998dd7610..24a2ee83aaa 100644
--- a/packages/multichain-account-service/src/MultichainAccountService-method-action-types.ts
+++ b/packages/multichain-account-service/src/MultichainAccountService-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { MultichainAccountService } from './MultichainAccountService';
+import type { MultichainAccountService } from './MultichainAccountService.js';
/**
* Initialize the service and constructs the internal reprensentation of
diff --git a/packages/multichain-account-service/src/MultichainAccountService.test.ts b/packages/multichain-account-service/src/MultichainAccountService.test.ts
index a9b2dc0fd7a..030195bc449 100644
--- a/packages/multichain-account-service/src/MultichainAccountService.test.ts
+++ b/packages/multichain-account-service/src/MultichainAccountService.test.ts
@@ -15,33 +15,33 @@ import type { Keyring } from '@metamask/keyring-api/v2';
import { KeyringType } from '@metamask/keyring-api/v2';
import type { KeyringObject } from '@metamask/keyring-controller';
-import { traceFallback } from './analytics';
-import { isPerfEnabled, withLocalPerfTrace } from './analytics/perf';
+import { traceFallback } from './analytics.js';
+import { isPerfEnabled, withLocalPerfTrace } from './analytics/perf.js';
import type {
MultichainAccountServiceOptions,
RemoveMultichainAccountWalletFailureContext,
-} from './MultichainAccountService';
-import { MultichainAccountService } from './MultichainAccountService';
-import type { Bip44AccountProvider } from './providers';
-import { TimeoutError } from './providers';
-import { AccountProviderWrapper } from './providers/AccountProviderWrapper';
+} from './MultichainAccountService.js';
+import { MultichainAccountService } from './MultichainAccountService.js';
+import type { Bip44AccountProvider } from './providers.js';
+import { TimeoutError } from './providers.js';
+import { AccountProviderWrapper } from './providers/AccountProviderWrapper.js';
import {
BTC_ACCOUNT_PROVIDER_NAME,
BtcAccountProvider,
-} from './providers/BtcAccountProvider';
+} from './providers/BtcAccountProvider.js';
import {
EVM_ACCOUNT_PROVIDER_NAME,
EvmAccountProvider,
-} from './providers/EvmAccountProvider';
+} from './providers/EvmAccountProvider.js';
import {
SOL_ACCOUNT_PROVIDER_NAME,
SolAccountProvider,
-} from './providers/SolAccountProvider';
+} from './providers/SolAccountProvider.js';
import {
TRX_ACCOUNT_PROVIDER_NAME,
TrxAccountProvider,
-} from './providers/TrxAccountProvider';
-import type { RootMessenger, MockAccountProvider } from './tests';
+} from './providers/TrxAccountProvider.js';
+import type { RootMessenger, MockAccountProvider } from './tests.js';
import {
MOCK_HARDWARE_ACCOUNT_1,
MOCK_HD_ACCOUNT_1,
@@ -51,7 +51,7 @@ import {
MOCK_SNAP_ACCOUNT_2,
MOCK_SOL_ACCOUNT_1,
MockAccountBuilder,
-} from './tests';
+} from './tests.js';
import {
MOCK_HD_KEYRING_1,
MOCK_HD_KEYRING_2,
@@ -59,9 +59,9 @@ import {
getRootMessenger,
makeMockAccountProvider,
setupBip44AccountProvider,
-} from './tests';
-import type { MultichainAccountServiceMessenger } from './types';
-import type { SentryError } from './utils';
+} from './tests.js';
+import type { MultichainAccountServiceMessenger } from './types.js';
+import type { SentryError } from './utils.js';
// Mock perf helpers so tests can control isPerfEnabled() without setting DEBUG env var.
jest.mock('./analytics/perf', () => ({
diff --git a/packages/multichain-account-service/src/MultichainAccountService.ts b/packages/multichain-account-service/src/MultichainAccountService.ts
index c3eb45eb33a..b0b1388dd14 100644
--- a/packages/multichain-account-service/src/MultichainAccountService.ts
+++ b/packages/multichain-account-service/src/MultichainAccountService.ts
@@ -13,12 +13,12 @@ import { KeyringTypes } from '@metamask/keyring-controller';
import type { InternalAccount } from '@metamask/keyring-internal-api';
import { areUint8ArraysEqual, assert } from '@metamask/utils';
-import { traceFallback } from './analytics';
-import { isPerfEnabled, withLocalPerfTrace } from './analytics/perf';
-import { reportError } from './errors';
-import { projectLogger as log } from './logger';
-import type { MultichainAccountGroup } from './MultichainAccountGroup';
-import { MultichainAccountWallet } from './MultichainAccountWallet';
+import { traceFallback } from './analytics.js';
+import { isPerfEnabled, withLocalPerfTrace } from './analytics/perf.js';
+import { reportError } from './errors.js';
+import { projectLogger as log } from './logger.js';
+import type { MultichainAccountGroup } from './MultichainAccountGroup.js';
+import { MultichainAccountWallet } from './MultichainAccountWallet.js';
import {
EvmAccountProviderConfig,
Bip44AccountProvider,
@@ -29,22 +29,22 @@ import {
TRX_ACCOUNT_PROVIDER_NAME,
BtcAccountProvider,
TrxAccountProvider,
-} from './providers';
+} from './providers.js';
import {
AccountProviderWrapper,
isAccountProviderWrapper,
-} from './providers/AccountProviderWrapper';
-import { EvmAccountProvider } from './providers/EvmAccountProvider';
-import { SolAccountProvider } from './providers/SolAccountProvider';
+} from './providers/AccountProviderWrapper.js';
+import { EvmAccountProvider } from './providers/EvmAccountProvider.js';
+import { SolAccountProvider } from './providers/SolAccountProvider.js';
import {
SOL_ACCOUNT_PROVIDER_NAME,
SolAccountProviderConfig,
-} from './providers/SolAccountProvider';
+} from './providers/SolAccountProvider.js';
import type {
MultichainAccountServiceConfig,
MultichainAccountServiceMessenger,
-} from './types';
-import { toErrorMessage } from './utils';
+} from './types.js';
+import { toErrorMessage } from './utils.js';
/**
* Per-account failure detail attached to the aggregated Sentry report
diff --git a/packages/multichain-account-service/src/MultichainAccountWallet.test.ts b/packages/multichain-account-service/src/MultichainAccountWallet.test.ts
index a91654ce4d7..e1a891d6988 100644
--- a/packages/multichain-account-service/src/MultichainAccountWallet.test.ts
+++ b/packages/multichain-account-service/src/MultichainAccountWallet.test.ts
@@ -16,10 +16,10 @@ import {
import type { InternalAccount } from '@metamask/keyring-internal-api';
import { createDeferredPromise } from '@metamask/utils';
-import type { WalletState } from './MultichainAccountWallet';
-import { MultichainAccountWallet } from './MultichainAccountWallet';
-import { TimeoutError } from './providers';
-import type { MockAccountProvider, RootMessenger } from './tests';
+import type { WalletState } from './MultichainAccountWallet.js';
+import { MultichainAccountWallet } from './MultichainAccountWallet.js';
+import { TimeoutError } from './providers.js';
+import type { MockAccountProvider, RootMessenger } from './tests.js';
import {
MOCK_HD_ACCOUNT_1,
MOCK_HD_KEYRING_1,
@@ -35,8 +35,8 @@ import {
setupBip44AccountProvider,
getMultichainAccountServiceMessenger,
getRootMessenger,
-} from './tests';
-import type { MultichainAccountServiceMessenger } from './types';
+} from './tests.js';
+import type { MultichainAccountServiceMessenger } from './types.js';
function setup({
entropySource = MOCK_WALLET_1_ENTROPY_SOURCE,
diff --git a/packages/multichain-account-service/src/MultichainAccountWallet.ts b/packages/multichain-account-service/src/MultichainAccountWallet.ts
index 0018b987b31..d1acbe960e0 100644
--- a/packages/multichain-account-service/src/MultichainAccountWallet.ts
+++ b/packages/multichain-account-service/src/MultichainAccountWallet.ts
@@ -18,27 +18,27 @@ import type { EntropySourceId, KeyringAccount } from '@metamask/keyring-api';
import { assert } from '@metamask/utils';
import { Mutex } from 'async-mutex';
-import { toProviderDataTraces, traceFallback, TraceName } from './analytics';
-import { reportError } from './errors';
-import type { Logger } from './logger';
+import { toProviderDataTraces, traceFallback, TraceName } from './analytics.js';
+import { reportError } from './errors.js';
+import type { Logger } from './logger.js';
import {
createModuleLogger,
ERROR_PREFIX,
projectLogger as log,
WARNING_PREFIX,
-} from './logger';
-import type { GroupState } from './MultichainAccountGroup';
-import { MultichainAccountGroup } from './MultichainAccountGroup';
-import type { ServiceState, StateKeys } from './MultichainAccountService';
-import type { Bip44AccountProvider } from './providers';
-import { EvmAccountProvider } from './providers/EvmAccountProvider';
-import type { MultichainAccountServiceMessenger } from './types';
+} from './logger.js';
+import type { GroupState } from './MultichainAccountGroup.js';
+import { MultichainAccountGroup } from './MultichainAccountGroup.js';
+import type { ServiceState, StateKeys } from './MultichainAccountService.js';
+import type { Bip44AccountProvider } from './providers.js';
+import { EvmAccountProvider } from './providers/EvmAccountProvider.js';
+import type { MultichainAccountServiceMessenger } from './types.js';
import {
assertGroupIndexIsValid,
assertGroupIndexRangeIsValid,
GroupIndexRange,
toErrorMessage,
-} from './utils';
+} from './utils.js';
/**
* The context for a provider discovery.
@@ -758,7 +758,6 @@ export class MultichainAccountWallet<
this.#log('Aligned accounts! (post)');
};
- // eslint-disable-next-line no-void
void alignOtherAccounts().catch((error) => {
const errorMessage = `Unable to align non-EVM accounts from group index ${from} to ${to}`;
this.#log(
diff --git a/packages/multichain-account-service/src/analytics/index.ts b/packages/multichain-account-service/src/analytics/index.ts
index bc9f922b435..ad422446927 100644
--- a/packages/multichain-account-service/src/analytics/index.ts
+++ b/packages/multichain-account-service/src/analytics/index.ts
@@ -1 +1 @@
-export * from './traces';
+export * from './traces.js';
diff --git a/packages/multichain-account-service/src/analytics/perf.test.ts b/packages/multichain-account-service/src/analytics/perf.test.ts
index eeb6cc7c807..730be4b9734 100644
--- a/packages/multichain-account-service/src/analytics/perf.test.ts
+++ b/packages/multichain-account-service/src/analytics/perf.test.ts
@@ -1,13 +1,13 @@
import type { TraceCallback, TraceRequest } from '@metamask/controller-utils';
-import { projectLogger } from '../logger';
+import { projectLogger } from '../logger.js';
import {
isPerfEnabled,
log as perfLog,
tick,
withLocalPerfTrace,
-} from './perf';
-import { now } from './timer';
+} from './perf.js';
+import { now } from './timer.js';
jest.mock('./timer', () => ({
now: jest.fn(),
diff --git a/packages/multichain-account-service/src/analytics/perf.ts b/packages/multichain-account-service/src/analytics/perf.ts
index 4f31af7d151..62e7fd7938d 100644
--- a/packages/multichain-account-service/src/analytics/perf.ts
+++ b/packages/multichain-account-service/src/analytics/perf.ts
@@ -4,8 +4,8 @@ import type {
TraceRequest,
} from '@metamask/controller-utils';
-import { createModuleLogger, projectLogger } from '../logger';
-import { now } from './timer';
+import { createModuleLogger, projectLogger } from '../logger.js';
+import { now } from './timer.js';
export const log = createModuleLogger(projectLogger, 'perf');
diff --git a/packages/multichain-account-service/src/analytics/traces.test.ts b/packages/multichain-account-service/src/analytics/traces.test.ts
index b669d8aebbb..6a5eb46cbae 100644
--- a/packages/multichain-account-service/src/analytics/traces.test.ts
+++ b/packages/multichain-account-service/src/analytics/traces.test.ts
@@ -2,13 +2,13 @@ import type { TraceRequest } from '@metamask/controller-utils';
import { AccountCreationType } from '@metamask/keyring-api';
import type { CreateAccountOptions } from '@metamask/keyring-api';
-import type { Bip44AccountProvider } from '../providers';
+import type { Bip44AccountProvider } from '../providers.js';
import {
toCreateAccountsV2DataTraces,
toProviderDataTraces,
traceFallback,
TraceName,
-} from './traces';
+} from './traces.js';
describe('MultichainAccountService - Traces', () => {
describe('traceFallback', () => {
diff --git a/packages/multichain-account-service/src/analytics/traces.ts b/packages/multichain-account-service/src/analytics/traces.ts
index eca4f03b3cc..d6e1be0b810 100644
--- a/packages/multichain-account-service/src/analytics/traces.ts
+++ b/packages/multichain-account-service/src/analytics/traces.ts
@@ -6,7 +6,7 @@ import type {
import { CreateAccountOptions } from '@metamask/keyring-api';
// Explicit import to avoid circular dependency between `analytics` and `providers`.
-import type { Bip44AccountProvider } from '../providers/BaseBip44AccountProvider';
+import type { Bip44AccountProvider } from '../providers/BaseBip44AccountProvider.js';
/**
* Fallback function for tracing.
diff --git a/packages/multichain-account-service/src/errors.test.ts b/packages/multichain-account-service/src/errors.test.ts
index fdcf21a823a..986a35e123b 100644
--- a/packages/multichain-account-service/src/errors.test.ts
+++ b/packages/multichain-account-service/src/errors.test.ts
@@ -3,9 +3,9 @@ import {
KeyringControllerErrorMessage,
} from '@metamask/keyring-controller';
-import { reportError } from './errors';
-import { logErrorAs } from './logger';
-import { TimeoutError } from './providers/utils';
+import { reportError } from './errors.js';
+import { logErrorAs } from './logger.js';
+import { TimeoutError } from './providers/utils.js';
jest.mock('./logger', () => ({
logErrorAs: jest.fn(),
diff --git a/packages/multichain-account-service/src/errors.ts b/packages/multichain-account-service/src/errors.ts
index 3cf130f0c81..425a882591c 100644
--- a/packages/multichain-account-service/src/errors.ts
+++ b/packages/multichain-account-service/src/errors.ts
@@ -1,9 +1,9 @@
-import { logErrorAs } from './logger';
+import { logErrorAs } from './logger.js';
import {
isKeyringControllerLockedError,
isTimeoutError,
-} from './providers/utils';
-import { createSentryError } from './utils';
+} from './providers/utils.js';
+import { createSentryError } from './utils.js';
/**
* Reports an error by logging it and optionally capturing it in Sentry.
diff --git a/packages/multichain-account-service/src/index.ts b/packages/multichain-account-service/src/index.ts
index 512c5c0801e..8a0e4df8926 100644
--- a/packages/multichain-account-service/src/index.ts
+++ b/packages/multichain-account-service/src/index.ts
@@ -5,7 +5,7 @@ export type {
MultichainAccountServiceMultichainAccountGroupCreatedEvent,
MultichainAccountServiceMultichainAccountGroupUpdatedEvent,
MultichainAccountServiceWalletStatusChangeEvent,
-} from './types';
+} from './types.js';
export type {
MultichainAccountServiceResyncAccountsAction,
MultichainAccountServiceGetMultichainAccountWalletAction,
@@ -21,7 +21,7 @@ export type {
MultichainAccountServiceAlignWalletsAction,
MultichainAccountServiceAlignWalletAction,
MultichainAccountServiceInitAction,
-} from './MultichainAccountService-method-action-types';
+} from './MultichainAccountService-method-action-types.js';
export {
AccountProviderWrapper,
BaseBip44AccountProvider,
@@ -37,7 +37,7 @@ export {
TrxAccountProvider,
XLM_ACCOUNT_PROVIDER_NAME,
XlmAccountProvider,
-} from './providers';
-export { MultichainAccountWallet } from './MultichainAccountWallet';
-export { MultichainAccountGroup } from './MultichainAccountGroup';
-export { MultichainAccountService } from './MultichainAccountService';
+} from './providers.js';
+export { MultichainAccountWallet } from './MultichainAccountWallet.js';
+export { MultichainAccountGroup } from './MultichainAccountGroup.js';
+export { MultichainAccountService } from './MultichainAccountService.js';
diff --git a/packages/multichain-account-service/src/logger.ts b/packages/multichain-account-service/src/logger.ts
index 76dc8f6592f..98049e7d3d9 100644
--- a/packages/multichain-account-service/src/logger.ts
+++ b/packages/multichain-account-service/src/logger.ts
@@ -1,6 +1,6 @@
import { createProjectLogger, createModuleLogger } from '@metamask/utils';
-import { toErrorMessage } from './utils';
+import { toErrorMessage } from './utils.js';
export const projectLogger = createProjectLogger('multichain-account-service');
diff --git a/packages/multichain-account-service/src/providers/AccountProviderWrapper.test.ts b/packages/multichain-account-service/src/providers/AccountProviderWrapper.test.ts
index dddb9f9a4ed..86a66a127c1 100644
--- a/packages/multichain-account-service/src/providers/AccountProviderWrapper.test.ts
+++ b/packages/multichain-account-service/src/providers/AccountProviderWrapper.test.ts
@@ -2,9 +2,9 @@ import {
getMultichainAccountServiceMessenger,
getRootMessenger,
MOCK_WALLET_1_ENTROPY_SOURCE,
-} from '../tests';
-import { AccountProviderWrapper } from './AccountProviderWrapper';
-import { EvmAccountProvider } from './EvmAccountProvider';
+} from '../tests.js';
+import { AccountProviderWrapper } from './AccountProviderWrapper.js';
+import { EvmAccountProvider } from './EvmAccountProvider.js';
function setup(): {
wrapper: AccountProviderWrapper;
diff --git a/packages/multichain-account-service/src/providers/AccountProviderWrapper.ts b/packages/multichain-account-service/src/providers/AccountProviderWrapper.ts
index f973cab3dea..af9aae270cb 100644
--- a/packages/multichain-account-service/src/providers/AccountProviderWrapper.ts
+++ b/packages/multichain-account-service/src/providers/AccountProviderWrapper.ts
@@ -7,8 +7,8 @@ import type {
import type { KeyringCapabilities } from '@metamask/keyring-api/v2';
import type { InternalAccount } from '@metamask/keyring-internal-api';
-import type { MultichainAccountServiceMessenger } from '../types';
-import { BaseBip44AccountProvider } from './BaseBip44AccountProvider';
+import type { MultichainAccountServiceMessenger } from '../types.js';
+import { BaseBip44AccountProvider } from './BaseBip44AccountProvider.js';
/**
* A simple wrapper that adds disable functionality to any BaseBip44AccountProvider.
diff --git a/packages/multichain-account-service/src/providers/BaseBip44AccountProvider.ts b/packages/multichain-account-service/src/providers/BaseBip44AccountProvider.ts
index 18846f59146..5d2bccf63c1 100644
--- a/packages/multichain-account-service/src/providers/BaseBip44AccountProvider.ts
+++ b/packages/multichain-account-service/src/providers/BaseBip44AccountProvider.ts
@@ -15,7 +15,7 @@ import type {
} from '@metamask/keyring-controller';
import type { InternalAccount } from '@metamask/keyring-internal-api';
-import type { MultichainAccountServiceMessenger } from '../types';
+import type { MultichainAccountServiceMessenger } from '../types.js';
/**
* Asserts a keyring account is BIP-44 compatible.
diff --git a/packages/multichain-account-service/src/providers/BtcAccountProvider.test.ts b/packages/multichain-account-service/src/providers/BtcAccountProvider.test.ts
index eb1325206ef..ff24e1b1b28 100644
--- a/packages/multichain-account-service/src/providers/BtcAccountProvider.test.ts
+++ b/packages/multichain-account-service/src/providers/BtcAccountProvider.test.ts
@@ -6,7 +6,7 @@ import type { InternalAccount } from '@metamask/keyring-internal-api';
import { SnapControllerState } from '@metamask/snaps-controllers';
import deepmerge from 'deepmerge';
-import { TraceName } from '../analytics/traces';
+import { TraceName } from '../analytics/traces.js';
import {
getMultichainAccountServiceMessenger,
getRootMessenger,
@@ -17,23 +17,20 @@ import {
MOCK_HD_KEYRING_1,
MockAccountBuilder,
toGroupIndexRangeArray,
-} from '../tests';
-import type { RootMessenger, DeepPartial } from '../tests';
-import { AccountProviderWrapper } from './AccountProviderWrapper';
+} from '../tests.js';
+import type { RootMessenger, DeepPartial } from '../tests.js';
+import { AccountProviderWrapper } from './AccountProviderWrapper.js';
import {
BTC_ACCOUNT_PROVIDER_DEFAULT_CONFIG,
BTC_ACCOUNT_PROVIDER_NAME,
BtcAccountProvider,
-} from './BtcAccountProvider';
-import type { SnapAccountProviderConfig } from './SnapAccountProvider';
+} from './BtcAccountProvider.js';
+import type { SnapAccountProviderConfig } from './SnapAccountProvider.js';
function asConfig(
partial: DeepPartial,
): SnapAccountProviderConfig {
- return deepmerge(
- BTC_ACCOUNT_PROVIDER_DEFAULT_CONFIG,
- partial,
- ) as SnapAccountProviderConfig;
+ return deepmerge(BTC_ACCOUNT_PROVIDER_DEFAULT_CONFIG, partial);
}
/**
diff --git a/packages/multichain-account-service/src/providers/BtcAccountProvider.ts b/packages/multichain-account-service/src/providers/BtcAccountProvider.ts
index 1095d54935b..f48546752cc 100644
--- a/packages/multichain-account-service/src/providers/BtcAccountProvider.ts
+++ b/packages/multichain-account-service/src/providers/BtcAccountProvider.ts
@@ -5,10 +5,10 @@ import type { InternalAccount } from '@metamask/keyring-internal-api';
import type { SnapId } from '@metamask/snaps-sdk';
import type { CaipChainId } from '@metamask/utils';
-import { traceFallback } from '../analytics';
-import type { MultichainAccountServiceMessenger } from '../types';
-import { SnapAccountProvider } from './SnapAccountProvider';
-import type { SnapAccountProviderConfig } from './SnapAccountProvider';
+import { traceFallback } from '../analytics.js';
+import type { MultichainAccountServiceMessenger } from '../types.js';
+import { SnapAccountProvider } from './SnapAccountProvider.js';
+import type { SnapAccountProviderConfig } from './SnapAccountProvider.js';
export type BtcAccountProviderConfig = SnapAccountProviderConfig;
diff --git a/packages/multichain-account-service/src/providers/EvmAccountProvider.test.ts b/packages/multichain-account-service/src/providers/EvmAccountProvider.test.ts
index 7b74221d331..74435a2dfef 100644
--- a/packages/multichain-account-service/src/providers/EvmAccountProvider.test.ts
+++ b/packages/multichain-account-service/src/providers/EvmAccountProvider.test.ts
@@ -16,7 +16,7 @@ import type {
} from '@metamask/network-controller';
import { add0x, bytesToHex } from '@metamask/utils';
-import { TraceName } from '../analytics/traces';
+import { TraceName } from '../analytics/traces.js';
import {
asKeyringAccount,
getMultichainAccountServiceMessenger,
@@ -28,14 +28,14 @@ import {
MockAccountBuilder,
mockAsInternalAccount,
RootMessenger,
-} from '../tests';
+} from '../tests.js';
import {
EVM_ACCOUNT_PROVIDER_DEFAULT_CONFIG,
EVM_ACCOUNT_PROVIDER_NAME,
EvmAccountProvider,
EvmAccountProviderConfig,
-} from './EvmAccountProvider';
-import { TimeoutError } from './utils';
+} from './EvmAccountProvider.js';
+import { TimeoutError } from './utils.js';
// Real HD root rooted at a valid BIP-39 test mnemonic so the address peeked via
// `keyring.root.deriveChild(groupIndex)` matches the address that the mock's
diff --git a/packages/multichain-account-service/src/providers/EvmAccountProvider.ts b/packages/multichain-account-service/src/providers/EvmAccountProvider.ts
index b6a588af07a..e91aa87d27b 100644
--- a/packages/multichain-account-service/src/providers/EvmAccountProvider.ts
+++ b/packages/multichain-account-service/src/providers/EvmAccountProvider.ts
@@ -21,16 +21,16 @@ import type { Provider } from '@metamask/network-controller';
import { add0x, assert, bytesToHex, isStrictHexString } from '@metamask/utils';
import type { Hex } from '@metamask/utils';
-import { traceFallback } from '../analytics';
-import { TraceName } from '../analytics/traces';
-import { projectLogger as log, WARNING_PREFIX } from '../logger';
-import type { MultichainAccountServiceMessenger } from '../types';
+import { traceFallback } from '../analytics.js';
+import { TraceName } from '../analytics/traces.js';
+import { projectLogger as log, WARNING_PREFIX } from '../logger.js';
+import type { MultichainAccountServiceMessenger } from '../types.js';
import {
assertAreBip44Accounts,
assertIsBip44Account,
BaseBip44AccountProvider,
-} from './BaseBip44AccountProvider';
-import { withRetry, withTimeout } from './utils';
+} from './BaseBip44AccountProvider.js';
+import { withRetry, withTimeout } from './utils.js';
const ETH_MAINNET_CHAIN_ID = '0x1';
diff --git a/packages/multichain-account-service/src/providers/SnapAccountProvider.test.ts b/packages/multichain-account-service/src/providers/SnapAccountProvider.test.ts
index 68a21b1db85..8f85af1d0d9 100644
--- a/packages/multichain-account-service/src/providers/SnapAccountProvider.test.ts
+++ b/packages/multichain-account-service/src/providers/SnapAccountProvider.test.ts
@@ -21,8 +21,8 @@ import type { InternalAccount } from '@metamask/keyring-internal-api';
import type { JsonRpcRequest, SnapId } from '@metamask/snaps-sdk';
import deepmerge from 'deepmerge';
-import { traceFallback } from '../analytics';
-import type { DeepPartial, RootMessenger } from '../tests';
+import { traceFallback } from '../analytics.js';
+import type { DeepPartial, RootMessenger } from '../tests.js';
import {
asKeyringAccount,
getMultichainAccountServiceMessenger,
@@ -30,17 +30,17 @@ import {
MOCK_HD_ACCOUNT_1,
MOCK_HD_ACCOUNT_2,
MockAccountBuilder,
-} from '../tests';
-import type { MultichainAccountServiceMessenger } from '../types';
-import { BtcAccountProvider } from './BtcAccountProvider';
-import type { SnapAccountProviderConfig } from './SnapAccountProvider';
+} from '../tests.js';
+import type { MultichainAccountServiceMessenger } from '../types.js';
+import { BtcAccountProvider } from './BtcAccountProvider.js';
+import type { SnapAccountProviderConfig } from './SnapAccountProvider.js';
import {
isSnapAccountProvider,
SnapAccountProvider,
-} from './SnapAccountProvider';
-import { SolAccountProvider } from './SolAccountProvider';
-import { TrxAccountProvider } from './TrxAccountProvider';
-import { TimeoutError } from './utils';
+} from './SnapAccountProvider.js';
+import { SolAccountProvider } from './SolAccountProvider.js';
+import { TrxAccountProvider } from './TrxAccountProvider.js';
+import { TimeoutError } from './utils.js';
jest.mock('../analytics', () => {
const actual = jest.requireActual('../analytics');
diff --git a/packages/multichain-account-service/src/providers/SnapAccountProvider.ts b/packages/multichain-account-service/src/providers/SnapAccountProvider.ts
index d6feec01cc9..65d86b1c7cf 100644
--- a/packages/multichain-account-service/src/providers/SnapAccountProvider.ts
+++ b/packages/multichain-account-service/src/providers/SnapAccountProvider.ts
@@ -30,14 +30,14 @@ import {
toCreateAccountsV2DataTraces,
traceFallback,
TraceName,
-} from '../analytics';
-import { reportError } from '../errors';
-import { projectLogger as log, WARNING_PREFIX } from '../logger';
-import type { MultichainAccountServiceMessenger } from '../types';
-import { BaseBip44AccountProvider } from './BaseBip44AccountProvider';
-import { createSnapKeyringClient } from './SnapKeyringClient';
-import type { Sender, SnapKeyringClient } from './SnapKeyringClient';
-import { withRetry, withTimeout } from './utils';
+} from '../analytics.js';
+import { reportError } from '../errors.js';
+import { projectLogger as log, WARNING_PREFIX } from '../logger.js';
+import type { MultichainAccountServiceMessenger } from '../types.js';
+import { BaseBip44AccountProvider } from './BaseBip44AccountProvider.js';
+import { createSnapKeyringClient } from './SnapKeyringClient.js';
+import type { Sender, SnapKeyringClient } from './SnapKeyringClient.js';
+import { withRetry, withTimeout } from './utils.js';
/**
* A proxy to the Snap's keyring operations that routes every call through the
diff --git a/packages/multichain-account-service/src/providers/SnapKeyringClient.test.ts b/packages/multichain-account-service/src/providers/SnapKeyringClient.test.ts
index 7c3d5fc6a44..1d10d3e36ff 100644
--- a/packages/multichain-account-service/src/providers/SnapKeyringClient.test.ts
+++ b/packages/multichain-account-service/src/providers/SnapKeyringClient.test.ts
@@ -1,7 +1,7 @@
import { SolScope } from '@metamask/keyring-api';
-import { createSnapKeyringClient } from './SnapKeyringClient';
-import type { Sender } from './SnapKeyringClient';
+import { createSnapKeyringClient } from './SnapKeyringClient.js';
+import type { Sender } from './SnapKeyringClient.js';
/**
* Builds a mock {@link Sender} whose `send` resolves to the given response.
diff --git a/packages/multichain-account-service/src/providers/SolAccountProvider.test.ts b/packages/multichain-account-service/src/providers/SolAccountProvider.test.ts
index cdbf7a14d3b..333e35518c2 100644
--- a/packages/multichain-account-service/src/providers/SolAccountProvider.test.ts
+++ b/packages/multichain-account-service/src/providers/SolAccountProvider.test.ts
@@ -6,7 +6,7 @@ import type { InternalAccount } from '@metamask/keyring-internal-api';
import { SnapControllerState } from '@metamask/snaps-controllers';
import deepmerge from 'deepmerge';
-import { TraceName } from '../analytics/traces';
+import { TraceName } from '../analytics/traces.js';
import {
getMultichainAccountServiceMessenger,
getRootMessenger,
@@ -16,23 +16,20 @@ import {
MOCK_SOL_ACCOUNT_1,
MOCK_SOL_DISCOVERED_ACCOUNT_1,
MockAccountBuilder,
-} from '../tests';
-import type { RootMessenger, DeepPartial } from '../tests';
-import { AccountProviderWrapper } from './AccountProviderWrapper';
-import type { SnapAccountProviderConfig } from './SnapAccountProvider';
+} from '../tests.js';
+import type { RootMessenger, DeepPartial } from '../tests.js';
+import { AccountProviderWrapper } from './AccountProviderWrapper.js';
+import type { SnapAccountProviderConfig } from './SnapAccountProvider.js';
import {
SOL_ACCOUNT_PROVIDER_DEFAULT_CONFIG,
SOL_ACCOUNT_PROVIDER_NAME,
SolAccountProvider,
-} from './SolAccountProvider';
+} from './SolAccountProvider.js';
function asConfig(
partial: DeepPartial,
): SnapAccountProviderConfig {
- return deepmerge(
- SOL_ACCOUNT_PROVIDER_DEFAULT_CONFIG,
- partial,
- ) as SnapAccountProviderConfig;
+ return deepmerge(SOL_ACCOUNT_PROVIDER_DEFAULT_CONFIG, partial);
}
/**
diff --git a/packages/multichain-account-service/src/providers/SolAccountProvider.ts b/packages/multichain-account-service/src/providers/SolAccountProvider.ts
index 208b25d03a7..c40e6f3129f 100644
--- a/packages/multichain-account-service/src/providers/SolAccountProvider.ts
+++ b/packages/multichain-account-service/src/providers/SolAccountProvider.ts
@@ -12,10 +12,10 @@ import type { InternalAccount } from '@metamask/keyring-internal-api';
import type { SnapId } from '@metamask/snaps-sdk';
import type { CaipChainId } from '@metamask/utils';
-import { traceFallback } from '../analytics';
-import type { MultichainAccountServiceMessenger } from '../types';
-import { SnapAccountProvider } from './SnapAccountProvider';
-import type { SnapAccountProviderConfig } from './SnapAccountProvider';
+import { traceFallback } from '../analytics.js';
+import type { MultichainAccountServiceMessenger } from '../types.js';
+import { SnapAccountProvider } from './SnapAccountProvider.js';
+import type { SnapAccountProviderConfig } from './SnapAccountProvider.js';
export type SolAccountProviderConfig = SnapAccountProviderConfig;
diff --git a/packages/multichain-account-service/src/providers/TrxAccountProvider.test.ts b/packages/multichain-account-service/src/providers/TrxAccountProvider.test.ts
index a8fbf169e75..59841431ab2 100644
--- a/packages/multichain-account-service/src/providers/TrxAccountProvider.test.ts
+++ b/packages/multichain-account-service/src/providers/TrxAccountProvider.test.ts
@@ -6,7 +6,7 @@ import type { InternalAccount } from '@metamask/keyring-internal-api';
import { SnapControllerState } from '@metamask/snaps-controllers';
import deepmerge from 'deepmerge';
-import { TraceName } from '../analytics/traces';
+import { TraceName } from '../analytics/traces.js';
import {
getMultichainAccountServiceMessenger,
getRootMessenger,
@@ -16,23 +16,20 @@ import {
MOCK_TRX_DISCOVERED_ACCOUNT_1,
MockAccountBuilder,
toGroupIndexRangeArray,
-} from '../tests';
-import type { RootMessenger, DeepPartial } from '../tests';
-import { AccountProviderWrapper } from './AccountProviderWrapper';
-import type { SnapAccountProviderConfig } from './SnapAccountProvider';
+} from '../tests.js';
+import type { RootMessenger, DeepPartial } from '../tests.js';
+import { AccountProviderWrapper } from './AccountProviderWrapper.js';
+import type { SnapAccountProviderConfig } from './SnapAccountProvider.js';
import {
TRX_ACCOUNT_PROVIDER_DEFAULT_CONFIG,
TRX_ACCOUNT_PROVIDER_NAME,
TrxAccountProvider,
-} from './TrxAccountProvider';
+} from './TrxAccountProvider.js';
function asConfig(
partial: DeepPartial,
): SnapAccountProviderConfig {
- return deepmerge(
- TRX_ACCOUNT_PROVIDER_DEFAULT_CONFIG,
- partial,
- ) as SnapAccountProviderConfig;
+ return deepmerge(TRX_ACCOUNT_PROVIDER_DEFAULT_CONFIG, partial);
}
/**
diff --git a/packages/multichain-account-service/src/providers/TrxAccountProvider.ts b/packages/multichain-account-service/src/providers/TrxAccountProvider.ts
index d232ac1582c..8648d1a2b8d 100644
--- a/packages/multichain-account-service/src/providers/TrxAccountProvider.ts
+++ b/packages/multichain-account-service/src/providers/TrxAccountProvider.ts
@@ -6,10 +6,10 @@ import type { InternalAccount } from '@metamask/keyring-internal-api';
import type { SnapId } from '@metamask/snaps-sdk';
import type { CaipChainId } from '@metamask/utils';
-import { traceFallback } from '../analytics';
-import type { MultichainAccountServiceMessenger } from '../types';
-import { SnapAccountProvider } from './SnapAccountProvider';
-import type { SnapAccountProviderConfig } from './SnapAccountProvider';
+import { traceFallback } from '../analytics.js';
+import type { MultichainAccountServiceMessenger } from '../types.js';
+import { SnapAccountProvider } from './SnapAccountProvider.js';
+import type { SnapAccountProviderConfig } from './SnapAccountProvider.js';
export type TrxAccountProviderConfig = SnapAccountProviderConfig;
diff --git a/packages/multichain-account-service/src/providers/XlmAccountProvider.test.ts b/packages/multichain-account-service/src/providers/XlmAccountProvider.test.ts
index d876920e35f..8e4b20a7d9a 100644
--- a/packages/multichain-account-service/src/providers/XlmAccountProvider.test.ts
+++ b/packages/multichain-account-service/src/providers/XlmAccountProvider.test.ts
@@ -16,23 +16,20 @@ import {
MOCK_XLM_DISCOVERED_ACCOUNT_1,
MockAccountBuilder,
toGroupIndexRangeArray,
-} from '../tests';
-import type { RootMessenger, DeepPartial } from '../tests';
-import { AccountProviderWrapper } from './AccountProviderWrapper';
-import type { SnapAccountProviderConfig } from './SnapAccountProvider';
+} from '../tests.js';
+import type { RootMessenger, DeepPartial } from '../tests.js';
+import { AccountProviderWrapper } from './AccountProviderWrapper.js';
+import type { SnapAccountProviderConfig } from './SnapAccountProvider.js';
import {
XLM_ACCOUNT_PROVIDER_DEFAULT_CONFIG,
XLM_ACCOUNT_PROVIDER_NAME,
XlmAccountProvider,
-} from './XlmAccountProvider';
+} from './XlmAccountProvider.js';
function asConfig(
partial: DeepPartial,
): SnapAccountProviderConfig {
- return deepmerge(
- XLM_ACCOUNT_PROVIDER_DEFAULT_CONFIG,
- partial,
- ) as SnapAccountProviderConfig;
+ return deepmerge(XLM_ACCOUNT_PROVIDER_DEFAULT_CONFIG, partial);
}
/**
diff --git a/packages/multichain-account-service/src/providers/XlmAccountProvider.ts b/packages/multichain-account-service/src/providers/XlmAccountProvider.ts
index 677db57fb52..c84a8f35f1c 100644
--- a/packages/multichain-account-service/src/providers/XlmAccountProvider.ts
+++ b/packages/multichain-account-service/src/providers/XlmAccountProvider.ts
@@ -6,10 +6,10 @@ import type { InternalAccount } from '@metamask/keyring-internal-api';
import type { SnapId } from '@metamask/snaps-sdk';
import type { CaipChainId } from '@metamask/utils';
-import { traceFallback } from '../analytics';
-import type { MultichainAccountServiceMessenger } from '../types';
-import { SnapAccountProvider } from './SnapAccountProvider';
-import type { SnapAccountProviderConfig } from './SnapAccountProvider';
+import { traceFallback } from '../analytics.js';
+import type { MultichainAccountServiceMessenger } from '../types.js';
+import { SnapAccountProvider } from './SnapAccountProvider.js';
+import type { SnapAccountProviderConfig } from './SnapAccountProvider.js';
export type XlmAccountProviderConfig = SnapAccountProviderConfig;
diff --git a/packages/multichain-account-service/src/providers/index.ts b/packages/multichain-account-service/src/providers/index.ts
index 51f20af248b..3098194fcb6 100644
--- a/packages/multichain-account-service/src/providers/index.ts
+++ b/packages/multichain-account-service/src/providers/index.ts
@@ -1,13 +1,13 @@
-export * from './BaseBip44AccountProvider';
-export * from './SnapAccountProvider';
-export * from './AccountProviderWrapper';
+export * from './BaseBip44AccountProvider.js';
+export * from './SnapAccountProvider.js';
+export * from './AccountProviderWrapper.js';
// Errors that can bubble up outside of provider calls.
-export { TimeoutError, isTimeoutError } from './utils';
+export { TimeoutError, isTimeoutError } from './utils.js';
// Concrete providers:
-export * from './SolAccountProvider';
-export * from './EvmAccountProvider';
-export * from './BtcAccountProvider';
-export * from './TrxAccountProvider';
-export * from './XlmAccountProvider';
+export * from './SolAccountProvider.js';
+export * from './EvmAccountProvider.js';
+export * from './BtcAccountProvider.js';
+export * from './TrxAccountProvider.js';
+export * from './XlmAccountProvider.js';
diff --git a/packages/multichain-account-service/src/providers/utils.test.ts b/packages/multichain-account-service/src/providers/utils.test.ts
index 5a0c55f053f..b47d20e6226 100644
--- a/packages/multichain-account-service/src/providers/utils.test.ts
+++ b/packages/multichain-account-service/src/providers/utils.test.ts
@@ -9,7 +9,7 @@ import {
isTimeoutError,
withRetry,
withTimeout,
-} from './utils';
+} from './utils.js';
describe('utils', () => {
it('retries RPC request up to 3 times if it fails and throws the last error', async () => {
diff --git a/packages/multichain-account-service/src/tests/index.ts b/packages/multichain-account-service/src/tests/index.ts
index f7f84be2207..2ecfc9d02d3 100644
--- a/packages/multichain-account-service/src/tests/index.ts
+++ b/packages/multichain-account-service/src/tests/index.ts
@@ -1,4 +1,4 @@
-export type * from './types';
-export * from './accounts';
-export * from './messenger';
-export * from './providers';
+export type * from './types.js';
+export * from './accounts.js';
+export * from './messenger.js';
+export * from './providers.js';
diff --git a/packages/multichain-account-service/src/tests/messenger.ts b/packages/multichain-account-service/src/tests/messenger.ts
index a50cdda77db..2380ac2a194 100644
--- a/packages/multichain-account-service/src/tests/messenger.ts
+++ b/packages/multichain-account-service/src/tests/messenger.ts
@@ -5,7 +5,7 @@ import type {
MockAnyNamespace,
} from '@metamask/messenger';
-import type { MultichainAccountServiceMessenger } from '../types';
+import type { MultichainAccountServiceMessenger } from '../types.js';
export type AllMultichainAccountServiceActions =
MessengerActions;
diff --git a/packages/multichain-account-service/src/tests/providers.ts b/packages/multichain-account-service/src/tests/providers.ts
index 56ce85a79ee..b5215664b04 100644
--- a/packages/multichain-account-service/src/tests/providers.ts
+++ b/packages/multichain-account-service/src/tests/providers.ts
@@ -9,8 +9,8 @@ import {
import type { KeyringAccount } from '@metamask/keyring-api';
import type { KeyringCapabilities } from '@metamask/keyring-api/v2';
-import { AccountProviderWrapper, EvmAccountProvider } from '../providers';
-import { GroupIndexRange } from '../utils';
+import { AccountProviderWrapper, EvmAccountProvider } from '../providers.js';
+import { GroupIndexRange } from '../utils.js';
export type MockAccountProvider = {
mockAccounts: KeyringAccount[];
diff --git a/packages/multichain-account-service/src/types.ts b/packages/multichain-account-service/src/types.ts
index 5d86323ca8c..d5d30c85a0f 100644
--- a/packages/multichain-account-service/src/types.ts
+++ b/packages/multichain-account-service/src/types.ts
@@ -35,8 +35,8 @@ import type {
} from '@metamask/snap-account-service';
import type { SnapControllerHandleRequestAction } from '@metamask/snaps-controllers';
-import type { serviceName } from './MultichainAccountService';
-import type { MultichainAccountServiceMethodActions } from './MultichainAccountService-method-action-types';
+import type { MultichainAccountServiceMethodActions } from './MultichainAccountService-method-action-types.js';
+import type { serviceName } from './MultichainAccountService.js';
/**
* All actions that {@link MultichainAccountService} registers so that other
diff --git a/packages/multichain-account-service/src/utils.test.ts b/packages/multichain-account-service/src/utils.test.ts
index 45de314ac4c..c6975c98c90 100644
--- a/packages/multichain-account-service/src/utils.test.ts
+++ b/packages/multichain-account-service/src/utils.test.ts
@@ -2,7 +2,7 @@ import {
toErrorMessage,
assertGroupIndexRangeIsValid,
assertGroupIndexIsValid,
-} from './utils';
+} from './utils.js';
describe('toErrorMessage', () => {
it('returns the message of an Error instance', () => {
diff --git a/packages/multichain-api-middleware/jest.config.js b/packages/multichain-api-middleware/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/multichain-api-middleware/jest.config.js
+++ b/packages/multichain-api-middleware/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/multichain-api-middleware/package.json b/packages/multichain-api-middleware/package.json
index 61bcaf97d6f..b4f5495df25 100644
--- a/packages/multichain-api-middleware/package.json
+++ b/packages/multichain-api-middleware/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/multichain-api-middleware",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/multichain-api-middleware",
@@ -71,8 +64,7 @@
"@metamask/auto-changelog": "^6.1.0",
"@metamask/eth-json-rpc-filters": "^9.0.0",
"@metamask/multichain-transactions-controller": "^7.1.1",
- "@metamask/safe-event-emitter": "^3.0.0",
- "@ts-bridge/cli": "^0.6.4",
+ "@metamask/safe-event-emitter": "patch:@metamask/safe-event-emitter@npm%3A3.1.1#~/.yarn/patches/@metamask-safe-event-emitter-npm-3.1.1-a7872b1f5a.patch",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/multichain-api-middleware/src/handlers/index.test.ts b/packages/multichain-api-middleware/src/handlers/index.test.ts
index cafe8f5d83f..6d28da99732 100644
--- a/packages/multichain-api-middleware/src/handlers/index.test.ts
+++ b/packages/multichain-api-middleware/src/handlers/index.test.ts
@@ -1,10 +1,10 @@
import { createMethodMiddleware } from '@metamask/json-rpc-engine';
-import { methodHandlers } from '.';
-import type { WalletCreateSessionHooks } from './wallet-createSession';
-import type { WalletGetSessionHooks } from './wallet-getSession';
-import type { WalletInvokeMethodHooks } from './wallet-invokeMethod';
-import type { WalletRevokeSessionHooks } from './wallet-revokeSession';
+import { methodHandlers } from './..js';
+import type { WalletCreateSessionHooks } from './wallet-createSession.js';
+import type { WalletGetSessionHooks } from './wallet-getSession.js';
+import type { WalletInvokeMethodHooks } from './wallet-invokeMethod.js';
+import type { WalletRevokeSessionHooks } from './wallet-revokeSession.js';
type Hooks = WalletCreateSessionHooks &
WalletGetSessionHooks &
diff --git a/packages/multichain-api-middleware/src/handlers/index.ts b/packages/multichain-api-middleware/src/handlers/index.ts
index ab8ad4ea991..aa35e794397 100644
--- a/packages/multichain-api-middleware/src/handlers/index.ts
+++ b/packages/multichain-api-middleware/src/handlers/index.ts
@@ -1,13 +1,13 @@
import type { UnionToIntersection } from '@metamask/json-rpc-engine/v2';
-import type { WalletCreateSessionHooks } from './wallet-createSession';
-import { walletCreateSessionHandler } from './wallet-createSession';
-import type { WalletGetSessionHooks } from './wallet-getSession';
-import { walletGetSessionHandler } from './wallet-getSession';
-import type { WalletInvokeMethodHooks } from './wallet-invokeMethod';
-import { walletInvokeMethodHandler } from './wallet-invokeMethod';
-import type { WalletRevokeSessionHooks } from './wallet-revokeSession';
-import { walletRevokeSessionHandler } from './wallet-revokeSession';
+import type { WalletCreateSessionHooks } from './wallet-createSession.js';
+import { walletCreateSessionHandler } from './wallet-createSession.js';
+import type { WalletGetSessionHooks } from './wallet-getSession.js';
+import { walletGetSessionHandler } from './wallet-getSession.js';
+import type { WalletInvokeMethodHooks } from './wallet-invokeMethod.js';
+import { walletInvokeMethodHandler } from './wallet-invokeMethod.js';
+import type { WalletRevokeSessionHooks } from './wallet-revokeSession.js';
+import { walletRevokeSessionHandler } from './wallet-revokeSession.js';
export type MethodHandlerHooks = UnionToIntersection<
| WalletCreateSessionHooks
diff --git a/packages/multichain-api-middleware/src/handlers/wallet-createSession.test.ts b/packages/multichain-api-middleware/src/handlers/wallet-createSession.test.ts
index 2b4b6510bc8..e016f7ee3fc 100644
--- a/packages/multichain-api-middleware/src/handlers/wallet-createSession.test.ts
+++ b/packages/multichain-api-middleware/src/handlers/wallet-createSession.test.ts
@@ -18,7 +18,7 @@ import type {
JsonRpcSuccess,
} from '@metamask/utils';
-import { walletCreateSessionHandler } from './wallet-createSession';
+import { walletCreateSessionHandler } from './wallet-createSession.js';
jest.mock('@metamask/rpc-errors', () => ({
...jest.requireActual('@metamask/rpc-errors'),
diff --git a/packages/multichain-api-middleware/src/handlers/wallet-createSession.ts b/packages/multichain-api-middleware/src/handlers/wallet-createSession.ts
index 53c57048840..79d374b42c0 100644
--- a/packages/multichain-api-middleware/src/handlers/wallet-createSession.ts
+++ b/packages/multichain-api-middleware/src/handlers/wallet-createSession.ts
@@ -50,7 +50,7 @@ import type {
GetCapabilitiesHook,
GetNonEvmSupportedMethodsHook,
SortAccountIdsByLastSelectedHook,
-} from './types';
+} from './types.js';
const SOLANA_CAIP_CHAIN_ID = 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp';
@@ -128,7 +128,7 @@ async function handleWalletCreateSession(
try {
const { normalizedRequiredScopes, normalizedOptionalScopes } =
- validateAndNormalizeScopes(requiredScopes || {}, optionalScopes || {});
+ validateAndNormalizeScopes(requiredScopes ?? {}, optionalScopes ?? {});
const requiredScopesWithSupportedMethodsAndNotifications =
getSupportedScopeObjects(normalizedRequiredScopes, {
@@ -153,7 +153,7 @@ async function handleWalletCreateSession(
isNamespaceInScopesObject(
requiredScopesWithSupportedMethodsAndNotifications,
KnownCaipNamespace.Solana,
- ) ||
+ ) ??
isNamespaceInScopesObject(
optionalScopesWithSupportedMethodsAndNotifications,
KnownCaipNamespace.Solana,
diff --git a/packages/multichain-api-middleware/src/handlers/wallet-getSession.test.ts b/packages/multichain-api-middleware/src/handlers/wallet-getSession.test.ts
index 788377dd1d2..9ced5262239 100644
--- a/packages/multichain-api-middleware/src/handlers/wallet-getSession.test.ts
+++ b/packages/multichain-api-middleware/src/handlers/wallet-getSession.test.ts
@@ -1,7 +1,7 @@
import * as chainAgnosticPermissionModule from '@metamask/chain-agnostic-permission';
import type { JsonRpcRequest } from '@metamask/utils';
-import { walletGetSessionHandler } from './wallet-getSession';
+import { walletGetSessionHandler } from './wallet-getSession.js';
jest.mock('@metamask/chain-agnostic-permission', () => ({
...jest.requireActual('@metamask/chain-agnostic-permission'),
diff --git a/packages/multichain-api-middleware/src/handlers/wallet-getSession.ts b/packages/multichain-api-middleware/src/handlers/wallet-getSession.ts
index 84cf51ed9c7..109269f76d7 100644
--- a/packages/multichain-api-middleware/src/handlers/wallet-getSession.ts
+++ b/packages/multichain-api-middleware/src/handlers/wallet-getSession.ts
@@ -23,7 +23,7 @@ import type {
GetCaveatForOriginHook,
GetNonEvmSupportedMethodsHook,
SortAccountIdsByLastSelectedHook,
-} from './types';
+} from './types.js';
type WalletGetSessionResult = {
sessionScopes: NormalizedScopesObject;
@@ -64,7 +64,7 @@ async function handleWalletGetSession(
caveat = hooks.getCaveatForOrigin(
Caip25EndowmentPermissionName,
Caip25CaveatType,
- ) as Caip25Caveat | undefined;
+ );
} catch {
// noop
}
diff --git a/packages/multichain-api-middleware/src/handlers/wallet-invokeMethod.test.ts b/packages/multichain-api-middleware/src/handlers/wallet-invokeMethod.test.ts
index ad4f83f9e78..442c90f3ae2 100644
--- a/packages/multichain-api-middleware/src/handlers/wallet-invokeMethod.test.ts
+++ b/packages/multichain-api-middleware/src/handlers/wallet-invokeMethod.test.ts
@@ -1,8 +1,8 @@
import * as chainAgnosticPermissionModule from '@metamask/chain-agnostic-permission';
import { providerErrors, rpcErrors } from '@metamask/rpc-errors';
-import type { WalletInvokeMethodRequest } from './wallet-invokeMethod';
-import { walletInvokeMethodHandler } from './wallet-invokeMethod';
+import type { WalletInvokeMethodRequest } from './wallet-invokeMethod.js';
+import { walletInvokeMethodHandler } from './wallet-invokeMethod.js';
// Allow individual modules to be mocked
jest.mock('@metamask/chain-agnostic-permission', () => ({
diff --git a/packages/multichain-api-middleware/src/handlers/wallet-invokeMethod.ts b/packages/multichain-api-middleware/src/handlers/wallet-invokeMethod.ts
index 1305d43ae87..4abcf9fa7c9 100644
--- a/packages/multichain-api-middleware/src/handlers/wallet-invokeMethod.ts
+++ b/packages/multichain-api-middleware/src/handlers/wallet-invokeMethod.ts
@@ -31,7 +31,7 @@ import type {
GetCaveatForOriginHook,
GetNonEvmSupportedMethodsHook,
SortAccountIdsByLastSelectedHook,
-} from './types';
+} from './types.js';
export type WalletInvokeMethodParams = {
scope: ExternalScopeString;
@@ -92,7 +92,7 @@ async function handleWalletInvokeMethod(
caveat = hooks.getCaveatForOrigin(
Caip25EndowmentPermissionName,
Caip25CaveatType,
- ) as Caip25Caveat | undefined;
+ );
} catch {
// noop
}
diff --git a/packages/multichain-api-middleware/src/handlers/wallet-revokeSession.test.ts b/packages/multichain-api-middleware/src/handlers/wallet-revokeSession.test.ts
index 9c14f205366..d4f5035d42d 100644
--- a/packages/multichain-api-middleware/src/handlers/wallet-revokeSession.test.ts
+++ b/packages/multichain-api-middleware/src/handlers/wallet-revokeSession.test.ts
@@ -9,7 +9,7 @@ import {
import { rpcErrors } from '@metamask/rpc-errors';
import type { JsonRpcRequest } from '@metamask/utils';
-import { walletRevokeSessionHandler } from './wallet-revokeSession';
+import { walletRevokeSessionHandler } from './wallet-revokeSession.js';
const baseRequest: JsonRpcRequest & {
origin: string;
diff --git a/packages/multichain-api-middleware/src/handlers/wallet-revokeSession.ts b/packages/multichain-api-middleware/src/handlers/wallet-revokeSession.ts
index ce22f546a68..44c1a4b2242 100644
--- a/packages/multichain-api-middleware/src/handlers/wallet-revokeSession.ts
+++ b/packages/multichain-api-middleware/src/handlers/wallet-revokeSession.ts
@@ -24,7 +24,7 @@ import type {
PendingJsonRpcResponse,
} from '@metamask/utils';
-import type { Caip25Caveat, GetCaveatForOriginHook } from './types';
+import type { GetCaveatForOriginHook } from './types.js';
export type WalletRevokeSessionHooks = GetCaveatForOriginHook & {
revokePermissionForOrigin: (
@@ -77,7 +77,7 @@ function partialRevokePermissions(
const caveat = hooks.getCaveatForOrigin(
Caip25EndowmentPermissionName,
Caip25CaveatType,
- ) as Caip25Caveat | undefined;
+ );
if (!caveat) {
return;
}
diff --git a/packages/multichain-api-middleware/src/index.test.ts b/packages/multichain-api-middleware/src/index.test.ts
index 58bef74e359..79c74ddde42 100644
--- a/packages/multichain-api-middleware/src/index.test.ts
+++ b/packages/multichain-api-middleware/src/index.test.ts
@@ -1,4 +1,4 @@
-import * as allExports from '.';
+import * as allExports from './..js';
describe('@metamask/multichain-api-middleware', () => {
it('has expected JavaScript exports', () => {
diff --git a/packages/multichain-api-middleware/src/index.ts b/packages/multichain-api-middleware/src/index.ts
index d126c158795..f619daab208 100644
--- a/packages/multichain-api-middleware/src/index.ts
+++ b/packages/multichain-api-middleware/src/index.ts
@@ -1,7 +1,7 @@
-export { methodHandlers } from './handlers';
-export type { MethodHandlerHooks } from './handlers';
+export { methodHandlers } from './handlers.js';
+export type { MethodHandlerHooks } from './handlers.js';
-export { multichainMethodCallValidatorMiddleware } from './middlewares/multichainMethodCallValidatorMiddleware';
-export { MultichainMiddlewareManager } from './middlewares/MultichainMiddlewareManager';
-export { MultichainSubscriptionManager } from './middlewares/MultichainSubscriptionManager';
-export { MultichainApiNotifications } from './handlers/types';
+export { multichainMethodCallValidatorMiddleware } from './middlewares/multichainMethodCallValidatorMiddleware.js';
+export { MultichainMiddlewareManager } from './middlewares/MultichainMiddlewareManager.js';
+export { MultichainSubscriptionManager } from './middlewares/MultichainSubscriptionManager.js';
+export { MultichainApiNotifications } from './handlers/types.js';
diff --git a/packages/multichain-api-middleware/src/middlewares/MultichainMiddlewareManager.test.ts b/packages/multichain-api-middleware/src/middlewares/MultichainMiddlewareManager.test.ts
index cfc9e90f3ed..50f6ca186d4 100644
--- a/packages/multichain-api-middleware/src/middlewares/MultichainMiddlewareManager.test.ts
+++ b/packages/multichain-api-middleware/src/middlewares/MultichainMiddlewareManager.test.ts
@@ -1,7 +1,7 @@
import { rpcErrors } from '@metamask/rpc-errors';
-import type { ExtendedJsonRpcMiddleware } from './MultichainMiddlewareManager';
-import { MultichainMiddlewareManager } from './MultichainMiddlewareManager';
+import type { ExtendedJsonRpcMiddleware } from './MultichainMiddlewareManager.js';
+import { MultichainMiddlewareManager } from './MultichainMiddlewareManager.js';
const scope = 'eip155:1';
const origin = 'example.com';
diff --git a/packages/multichain-api-middleware/src/middlewares/MultichainSubscriptionManager.test.ts b/packages/multichain-api-middleware/src/middlewares/MultichainSubscriptionManager.test.ts
index 811de8bbe2b..59f5390d37d 100644
--- a/packages/multichain-api-middleware/src/middlewares/MultichainSubscriptionManager.test.ts
+++ b/packages/multichain-api-middleware/src/middlewares/MultichainSubscriptionManager.test.ts
@@ -1,8 +1,8 @@
import createSubscriptionManager from '@metamask/eth-json-rpc-filters/subscriptionManager';
import type SafeEventEmitter from '@metamask/safe-event-emitter';
-import { MultichainApiNotifications } from '../handlers/types';
-import { MultichainSubscriptionManager } from './MultichainSubscriptionManager';
+import { MultichainApiNotifications } from '../handlers/types.js';
+import { MultichainSubscriptionManager } from './MultichainSubscriptionManager.js';
jest.mock('@metamask/eth-json-rpc-filters/subscriptionManager', () =>
jest.fn(),
diff --git a/packages/multichain-api-middleware/src/middlewares/MultichainSubscriptionManager.ts b/packages/multichain-api-middleware/src/middlewares/MultichainSubscriptionManager.ts
index 2f819128da4..6d3e8c0958f 100644
--- a/packages/multichain-api-middleware/src/middlewares/MultichainSubscriptionManager.ts
+++ b/packages/multichain-api-middleware/src/middlewares/MultichainSubscriptionManager.ts
@@ -6,8 +6,8 @@ import SafeEventEmitter from '@metamask/safe-event-emitter';
import type { CaipChainId, Hex } from '@metamask/utils';
import { parseCaipChainId } from '@metamask/utils';
-import { MultichainApiNotifications } from '../handlers/types';
-import type { ExtendedJsonRpcMiddleware } from './MultichainMiddlewareManager';
+import { MultichainApiNotifications } from '../handlers/types.js';
+import type { ExtendedJsonRpcMiddleware } from './MultichainMiddlewareManager.js';
export type SubscriptionManager = {
events: SafeEventEmitter;
diff --git a/packages/multichain-api-middleware/src/middlewares/multichainMethodCallValidatorMiddleware.test.ts b/packages/multichain-api-middleware/src/middlewares/multichainMethodCallValidatorMiddleware.test.ts
index eb68c8b1c27..d795a686576 100644
--- a/packages/multichain-api-middleware/src/middlewares/multichainMethodCallValidatorMiddleware.test.ts
+++ b/packages/multichain-api-middleware/src/middlewares/multichainMethodCallValidatorMiddleware.test.ts
@@ -4,8 +4,8 @@ import type {
JsonRpcResponse,
} from '@metamask/utils';
-import { MultichainApiNotifications } from '../handlers/types';
-import { multichainMethodCallValidatorMiddleware } from './multichainMethodCallValidatorMiddleware';
+import { MultichainApiNotifications } from '../handlers/types.js';
+import { multichainMethodCallValidatorMiddleware } from './multichainMethodCallValidatorMiddleware.js';
describe('multichainMethodCallValidatorMiddleware', () => {
const mockNext = jest.fn();
@@ -34,7 +34,7 @@ describe('multichainMethodCallValidatorMiddleware', () => {
response,
mockNext,
(error) => {
- reject(error);
+ reject(error instanceof Error ? error : new Error(String(error)));
},
);
@@ -246,7 +246,7 @@ describe('multichainMethodCallValidatorMiddleware', () => {
response,
mockNext,
(error) => {
- reject(error);
+ reject(error instanceof Error ? error : new Error(String(error)));
},
);
@@ -336,7 +336,7 @@ describe('multichainMethodCallValidatorMiddleware', () => {
response,
mockNext,
(error) => {
- reject(error);
+ reject(error instanceof Error ? error : new Error(String(error)));
},
);
@@ -368,7 +368,7 @@ describe('multichainMethodCallValidatorMiddleware', () => {
response,
mockNext,
(error) => {
- reject(error);
+ reject(error instanceof Error ? error : new Error(String(error)));
},
);
diff --git a/packages/multichain-network-controller/jest.config.js b/packages/multichain-network-controller/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/multichain-network-controller/jest.config.js
+++ b/packages/multichain-network-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/multichain-network-controller/package.json b/packages/multichain-network-controller/package.json
index c170fdc706e..34052858a19 100644
--- a/packages/multichain-network-controller/package.json
+++ b/packages/multichain-network-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/multichain-network-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/multichain-network-controller",
@@ -65,12 +58,11 @@
"@metamask/superstruct": "^3.1.0",
"@metamask/utils": "^11.11.0",
"@solana/addresses": "^2.0.0",
- "lodash": "^4.17.21"
+ "lodash-es": "^4.17.21"
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
"@metamask/keyring-controller": "^27.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"@types/lodash": "^4.14.191",
"@types/uuid": "^8.3.0",
diff --git a/packages/multichain-network-controller/src/MultichainNetworkController/MultichainNetworkController-method-action-types.ts b/packages/multichain-network-controller/src/MultichainNetworkController/MultichainNetworkController-method-action-types.ts
index 98bbc935663..8096059f4e8 100644
--- a/packages/multichain-network-controller/src/MultichainNetworkController/MultichainNetworkController-method-action-types.ts
+++ b/packages/multichain-network-controller/src/MultichainNetworkController/MultichainNetworkController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { MultichainNetworkController } from './MultichainNetworkController';
+import type { MultichainNetworkController } from './MultichainNetworkController.js';
/**
* Sets the active network.
diff --git a/packages/multichain-network-controller/src/MultichainNetworkController/MultichainNetworkController.test.ts b/packages/multichain-network-controller/src/MultichainNetworkController/MultichainNetworkController.test.ts
index fefd952ca6b..e2fb848a6c2 100644
--- a/packages/multichain-network-controller/src/MultichainNetworkController/MultichainNetworkController.test.ts
+++ b/packages/multichain-network-controller/src/MultichainNetworkController/MultichainNetworkController.test.ts
@@ -31,12 +31,12 @@ import type {
import { KnownCaipNamespace } from '@metamask/utils';
import type { CaipAccountId } from '@metamask/utils';
-import { createMockInternalAccount } from '../../tests/utils';
-import type { ActiveNetworksResponse } from '../api/accounts-api';
-import { getDefaultMultichainNetworkControllerState } from '../constants';
-import type { AbstractMultichainNetworkService } from '../MultichainNetworkService/AbstractMultichainNetworkService';
-import type { MultichainNetworkControllerMessenger } from '../types';
-import { MultichainNetworkController } from './MultichainNetworkController';
+import { createMockInternalAccount } from '../../tests/utils.js';
+import type { ActiveNetworksResponse } from '../api/accounts-api.js';
+import { getDefaultMultichainNetworkControllerState } from '../constants.js';
+import type { AbstractMultichainNetworkService } from '../MultichainNetworkService/AbstractMultichainNetworkService.js';
+import type { MultichainNetworkControllerMessenger } from '../types.js';
+import { MultichainNetworkController } from './MultichainNetworkController.js';
// We exclude the generic account type, since it's used for testing purposes.
type TestKeyringAccountType = Exclude<
diff --git a/packages/multichain-network-controller/src/MultichainNetworkController/MultichainNetworkController.ts b/packages/multichain-network-controller/src/MultichainNetworkController/MultichainNetworkController.ts
index d70612ddba1..f3c1aa8620c 100644
--- a/packages/multichain-network-controller/src/MultichainNetworkController/MultichainNetworkController.ts
+++ b/packages/multichain-network-controller/src/MultichainNetworkController/MultichainNetworkController.ts
@@ -8,26 +8,26 @@ import type { CaipChainId } from '@metamask/utils';
import {
toAllowedCaipAccountIds,
toActiveNetworksByAddress,
-} from '../api/accounts-api';
-import type { ActiveNetworksByAddress } from '../api/accounts-api';
+} from '../api/accounts-api.js';
+import type { ActiveNetworksByAddress } from '../api/accounts-api.js';
import {
AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS,
MULTICHAIN_NETWORK_CONTROLLER_METADATA,
getDefaultMultichainNetworkControllerState,
-} from '../constants';
-import type { AbstractMultichainNetworkService } from '../MultichainNetworkService/AbstractMultichainNetworkService';
-import { MULTICHAIN_NETWORK_CONTROLLER_NAME } from '../types';
+} from '../constants.js';
+import type { AbstractMultichainNetworkService } from '../MultichainNetworkService/AbstractMultichainNetworkService.js';
+import { MULTICHAIN_NETWORK_CONTROLLER_NAME } from '../types.js';
import type {
MultichainNetworkControllerState,
MultichainNetworkControllerMessenger,
SupportedCaipChainId,
-} from '../types';
+} from '../types.js';
import {
checkIfSupportedCaipChainId,
getChainIdForNonEvm,
convertEvmCaipToHexChainId,
isEvmCaipChainId,
-} from '../utils';
+} from '../utils.js';
const MESSENGER_EXPOSED_METHODS = [
'setActiveNetwork',
diff --git a/packages/multichain-network-controller/src/MultichainNetworkService/AbstractMultichainNetworkService.ts b/packages/multichain-network-controller/src/MultichainNetworkService/AbstractMultichainNetworkService.ts
index 951b8c28d9f..fd1ead65f1d 100644
--- a/packages/multichain-network-controller/src/MultichainNetworkService/AbstractMultichainNetworkService.ts
+++ b/packages/multichain-network-controller/src/MultichainNetworkService/AbstractMultichainNetworkService.ts
@@ -1,6 +1,6 @@
import type { PublicInterface } from '@metamask/utils';
-import type { MultichainNetworkService } from './MultichainNetworkService';
+import type { MultichainNetworkService } from './MultichainNetworkService.js';
/**
* A service object which is responsible for fetching network activity data.
diff --git a/packages/multichain-network-controller/src/MultichainNetworkService/MultichainNetworkService.test.ts b/packages/multichain-network-controller/src/MultichainNetworkService/MultichainNetworkService.test.ts
index 44798ce53ea..9b1743a7bac 100644
--- a/packages/multichain-network-controller/src/MultichainNetworkService/MultichainNetworkService.test.ts
+++ b/packages/multichain-network-controller/src/MultichainNetworkService/MultichainNetworkService.test.ts
@@ -1,14 +1,14 @@
import { KnownCaipNamespace } from '@metamask/utils';
import type { CaipAccountId } from '@metamask/utils';
-import { chunk } from 'lodash';
+import { chunk } from 'lodash-es';
import {
MULTICHAIN_ACCOUNTS_CLIENT_HEADER,
MULTICHAIN_ACCOUNTS_CLIENT_ID,
MULTICHAIN_ACCOUNTS_BASE_URL,
-} from '../api/accounts-api';
-import type { ActiveNetworksResponse } from '../api/accounts-api';
-import { MultichainNetworkService } from './MultichainNetworkService';
+} from '../api/accounts-api.js';
+import type { ActiveNetworksResponse } from '../api/accounts-api.js';
+import { MultichainNetworkService } from './MultichainNetworkService.js';
describe('MultichainNetworkService', () => {
beforeEach(() => {
diff --git a/packages/multichain-network-controller/src/MultichainNetworkService/MultichainNetworkService.ts b/packages/multichain-network-controller/src/MultichainNetworkService/MultichainNetworkService.ts
index 0feccc9c404..801b0cef9df 100644
--- a/packages/multichain-network-controller/src/MultichainNetworkService/MultichainNetworkService.ts
+++ b/packages/multichain-network-controller/src/MultichainNetworkService/MultichainNetworkService.ts
@@ -1,14 +1,14 @@
import { assert } from '@metamask/superstruct';
import type { CaipAccountId } from '@metamask/utils';
-import { chunk } from 'lodash';
+import { chunk } from 'lodash-es';
import {
ActiveNetworksResponseStruct,
buildActiveNetworksUrl,
MULTICHAIN_ACCOUNTS_CLIENT_HEADER,
MULTICHAIN_ACCOUNTS_CLIENT_ID,
-} from '../api/accounts-api';
-import type { ActiveNetworksResponse } from '../api/accounts-api';
+} from '../api/accounts-api.js';
+import type { ActiveNetworksResponse } from '../api/accounts-api.js';
/**
* Service responsible for fetching network activity data from the API.
diff --git a/packages/multichain-network-controller/src/api/accounts-api.test.ts b/packages/multichain-network-controller/src/api/accounts-api.test.ts
index 7dd66745a40..c9bab8bbc58 100644
--- a/packages/multichain-network-controller/src/api/accounts-api.test.ts
+++ b/packages/multichain-network-controller/src/api/accounts-api.test.ts
@@ -21,8 +21,8 @@ import {
toActiveNetworksByAddress,
buildActiveNetworksUrl,
MULTICHAIN_ACCOUNTS_BASE_URL,
-} from './accounts-api';
-import type { ActiveNetworksResponse } from './accounts-api';
+} from './accounts-api.js';
+import type { ActiveNetworksResponse } from './accounts-api.js';
const MOCK_ADDRESSES = {
evm: '0x1234567890123456789012345678901234567890',
diff --git a/packages/multichain-network-controller/src/constants.ts b/packages/multichain-network-controller/src/constants.ts
index 8fe82058815..860978370d4 100644
--- a/packages/multichain-network-controller/src/constants.ts
+++ b/packages/multichain-network-controller/src/constants.ts
@@ -8,7 +8,7 @@ import type {
MultichainNetworkControllerState,
MultichainNetworkMetadata,
SupportedCaipChainId,
-} from './types';
+} from './types.js';
export const BTC_NATIVE_ASSET = `${BtcScope.Mainnet}/slip44:0`;
export const BTC_TESTNET_NATIVE_ASSET = `${BtcScope.Testnet}/slip44:0`;
diff --git a/packages/multichain-network-controller/src/index.ts b/packages/multichain-network-controller/src/index.ts
index 7301513e968..82bc27a28a6 100644
--- a/packages/multichain-network-controller/src/index.ts
+++ b/packages/multichain-network-controller/src/index.ts
@@ -1,12 +1,12 @@
-export { MultichainNetworkController } from './MultichainNetworkController/MultichainNetworkController';
-export { MultichainNetworkService } from './MultichainNetworkService/MultichainNetworkService';
+export { MultichainNetworkController } from './MultichainNetworkController/MultichainNetworkController.js';
+export { MultichainNetworkService } from './MultichainNetworkService/MultichainNetworkService.js';
export {
getDefaultMultichainNetworkControllerState,
NON_EVM_TESTNET_IDS,
MULTICHAIN_NETWORK_TICKER,
MULTICHAIN_NETWORK_DECIMAL_PLACES,
AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS,
-} from './constants';
+} from './constants.js';
export type {
MultichainNetworkMetadata,
SupportedCaipChainId,
@@ -21,15 +21,15 @@ export type {
MultichainNetworkControllerActions,
MultichainNetworkControllerEvents,
MultichainNetworkControllerMessenger,
-} from './types';
+} from './types.js';
export type {
MultichainNetworkControllerSetActiveNetworkAction,
MultichainNetworkControllerGetNetworksWithTransactionActivityByAccountsAction,
-} from './MultichainNetworkController/MultichainNetworkController-method-action-types';
+} from './MultichainNetworkController/MultichainNetworkController-method-action-types.js';
export {
checkIfSupportedCaipChainId,
toMultichainNetworkConfiguration,
toMultichainNetworkConfigurationsByChainId,
toEvmCaipChainId,
-} from './utils';
-export type { ActiveNetworksByAddress } from './api/accounts-api';
+} from './utils.js';
+export type { ActiveNetworksByAddress } from './api/accounts-api.js';
diff --git a/packages/multichain-network-controller/src/types.ts b/packages/multichain-network-controller/src/types.ts
index 4b4b42b6d4c..827eab28348 100644
--- a/packages/multichain-network-controller/src/types.ts
+++ b/packages/multichain-network-controller/src/types.ts
@@ -23,8 +23,8 @@ import type {
NetworkClientId,
} from '@metamask/network-controller';
-import type { ActiveNetworksByAddress } from './api/accounts-api';
-import type { MultichainNetworkControllerMethodActions } from './MultichainNetworkController/MultichainNetworkController-method-action-types';
+import type { ActiveNetworksByAddress } from './api/accounts-api.js';
+import type { MultichainNetworkControllerMethodActions } from './MultichainNetworkController/MultichainNetworkController-method-action-types.js';
export const MULTICHAIN_NETWORK_CONTROLLER_NAME = 'MultichainNetworkController';
diff --git a/packages/multichain-network-controller/src/utils.test.ts b/packages/multichain-network-controller/src/utils.test.ts
index 83ceaacb05e..01b001dfc46 100644
--- a/packages/multichain-network-controller/src/utils.test.ts
+++ b/packages/multichain-network-controller/src/utils.test.ts
@@ -12,7 +12,7 @@ import {
toMultichainNetworkConfiguration,
toMultichainNetworkConfigurationsByChainId,
isKnownCaipNamespace,
-} from './utils';
+} from './utils.js';
describe('utils', () => {
describe('getChainIdForNonEvm', () => {
diff --git a/packages/multichain-network-controller/src/utils.ts b/packages/multichain-network-controller/src/utils.ts
index 2cd868fac4f..cb36bff10c4 100644
--- a/packages/multichain-network-controller/src/utils.ts
+++ b/packages/multichain-network-controller/src/utils.ts
@@ -8,11 +8,11 @@ import {
} from '@metamask/utils';
import type { Hex, CaipChainId } from '@metamask/utils';
-import { AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS } from './constants';
+import { AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS } from './constants.js';
import type {
SupportedCaipChainId,
MultichainNetworkConfiguration,
-} from './types';
+} from './types.js';
/**
* Checks if the chain ID is EVM.
@@ -105,7 +105,7 @@ export const toMultichainNetworkConfiguration = (
return {
chainId: toEvmCaipChainId(chainId),
isEvm: true,
- name: name || rpcEndpoints[defaultRpcEndpointIndex].url,
+ name: name ?? rpcEndpoints[defaultRpcEndpointIndex].url,
nativeCurrency,
blockExplorerUrls,
defaultBlockExplorerUrlIndex,
diff --git a/packages/multichain-transactions-controller/jest.config.js b/packages/multichain-transactions-controller/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/multichain-transactions-controller/jest.config.js
+++ b/packages/multichain-transactions-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/multichain-transactions-controller/package.json b/packages/multichain-transactions-controller/package.json
index 18eec58c531..57d9c1b242c 100644
--- a/packages/multichain-transactions-controller/package.json
+++ b/packages/multichain-transactions-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/multichain-transactions-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/multichain-transactions-controller",
@@ -73,7 +66,6 @@
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
"@metamask/keyring-controller": "^27.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/multichain-transactions-controller/src/MultichainTransactionsController-method-action-types.ts b/packages/multichain-transactions-controller/src/MultichainTransactionsController-method-action-types.ts
index 6a825efeec0..ca9e32605d6 100644
--- a/packages/multichain-transactions-controller/src/MultichainTransactionsController-method-action-types.ts
+++ b/packages/multichain-transactions-controller/src/MultichainTransactionsController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { MultichainTransactionsController } from './MultichainTransactionsController';
+import type { MultichainTransactionsController } from './MultichainTransactionsController.js';
/**
* Updates transactions for a specific account. This is used for the initial fetch
diff --git a/packages/multichain-transactions-controller/src/MultichainTransactionsController.test.ts b/packages/multichain-transactions-controller/src/MultichainTransactionsController.test.ts
index cf1ac2319d2..1de285b33de 100644
--- a/packages/multichain-transactions-controller/src/MultichainTransactionsController.test.ts
+++ b/packages/multichain-transactions-controller/src/MultichainTransactionsController.test.ts
@@ -24,15 +24,15 @@ import type {
import type { CaipChainId } from '@metamask/utils';
import { v4 as uuidv4 } from 'uuid';
-import { MultichainNetwork } from './constants';
+import { MultichainNetwork } from './constants.js';
import {
MultichainTransactionsController,
getDefaultMultichainTransactionsControllerState,
-} from './MultichainTransactionsController';
+} from './MultichainTransactionsController.js';
import type {
MultichainTransactionsControllerState,
MultichainTransactionsControllerMessenger,
-} from './MultichainTransactionsController';
+} from './MultichainTransactionsController.js';
const mockBtcAccount = {
address: 'bc1qssdcp5kvwh6nghzg9tuk99xsflwkdv4hgvq58q',
diff --git a/packages/multichain-transactions-controller/src/MultichainTransactionsController.ts b/packages/multichain-transactions-controller/src/MultichainTransactionsController.ts
index d51575beb8b..d8a96a16dd1 100644
--- a/packages/multichain-transactions-controller/src/MultichainTransactionsController.ts
+++ b/packages/multichain-transactions-controller/src/MultichainTransactionsController.ts
@@ -24,7 +24,7 @@ import { HandlerType } from '@metamask/snaps-utils';
import type { CaipChainId, Json, JsonRpcRequest } from '@metamask/utils';
import type { Draft } from 'immer';
-import type { MultichainTransactionsControllerMethodActions } from './MultichainTransactionsController-method-action-types';
+import type { MultichainTransactionsControllerMethodActions } from './MultichainTransactionsController-method-action-types.js';
const controllerName = 'MultichainTransactionsController';
@@ -451,9 +451,7 @@ export class MultichainTransactionsController extends BaseController<
this.update((state) => {
Object.entries(updatedTransactions).forEach(([accountId, chainsData]) => {
- if (!state.nonEvmTransactions[accountId]) {
- state.nonEvmTransactions[accountId] = {};
- }
+ state.nonEvmTransactions[accountId] ??= {};
Object.entries(chainsData).forEach(([chain, transactions]) => {
state.nonEvmTransactions[accountId][chain as CaipChainId] = {
diff --git a/packages/multichain-transactions-controller/src/index.ts b/packages/multichain-transactions-controller/src/index.ts
index ed5c590d95f..f9e781a0ec1 100644
--- a/packages/multichain-transactions-controller/src/index.ts
+++ b/packages/multichain-transactions-controller/src/index.ts
@@ -1,4 +1,4 @@
-export { MultichainTransactionsController } from './MultichainTransactionsController';
+export { MultichainTransactionsController } from './MultichainTransactionsController.js';
export type {
MultichainTransactionsControllerState,
PaginationOptions,
@@ -10,6 +10,6 @@ export type {
MultichainTransactionsControllerMessenger,
MultichainTransactionsControllerTransactionSubmittedEvent,
MultichainTransactionsControllerTransactionConfirmedEvent,
-} from './MultichainTransactionsController';
-export type { MultichainTransactionsControllerUpdateTransactionsForAccountAction } from './MultichainTransactionsController-method-action-types';
-export { MultichainNetwork, MultichainNativeAsset } from './constants';
+} from './MultichainTransactionsController.js';
+export type { MultichainTransactionsControllerUpdateTransactionsForAccountAction } from './MultichainTransactionsController-method-action-types.js';
+export { MultichainNetwork, MultichainNativeAsset } from './constants.js';
diff --git a/packages/name-controller/jest.config.js b/packages/name-controller/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/name-controller/jest.config.js
+++ b/packages/name-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/name-controller/package.json b/packages/name-controller/package.json
index 741eb1c7ffe..1b4f7523385 100644
--- a/packages/name-controller/package.json
+++ b/packages/name-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/name-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/name-controller",
@@ -63,8 +56,8 @@
"async-mutex": "^0.5.0"
},
"devDependencies": {
+ "@jest/globals": "^30.4.1",
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/name-controller/src/NameController-method-action-types.ts b/packages/name-controller/src/NameController-method-action-types.ts
index d7a91815569..13f91e9c04d 100644
--- a/packages/name-controller/src/NameController-method-action-types.ts
+++ b/packages/name-controller/src/NameController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { NameController } from './NameController';
+import type { NameController } from './NameController.js';
/**
* Set the user specified name for a value.
diff --git a/packages/name-controller/src/NameController.test.ts b/packages/name-controller/src/NameController.test.ts
index 403688fd249..832d118eed8 100644
--- a/packages/name-controller/src/NameController.test.ts
+++ b/packages/name-controller/src/NameController.test.ts
@@ -1,18 +1,19 @@
+import { jest } from '@jest/globals';
import { deriveStateFromMetadata } from '@metamask/base-controller';
import type {
SetNameRequest,
UpdateProposedNamesRequest,
NameControllerState,
-} from './NameController';
+} from './NameController.js';
import {
FALLBACK_VARIATION,
NameController,
NameOrigin,
PROPOSED_NAME_EXPIRE_DURATION,
-} from './NameController';
-import type { NameProvider } from './types';
-import { NameType } from './types';
+} from './NameController.js';
+import type { NameProvider } from './types.js';
+import { NameType } from './types.js';
const NAME_MOCK = 'TestName';
const PROPOSED_NAME_MOCK = 'TestProposedName';
diff --git a/packages/name-controller/src/NameController.ts b/packages/name-controller/src/NameController.ts
index 1d9cb25c087..b6612cd8a42 100644
--- a/packages/name-controller/src/NameController.ts
+++ b/packages/name-controller/src/NameController.ts
@@ -6,14 +6,14 @@ import { BaseController } from '@metamask/base-controller';
import { isSafeDynamicKey } from '@metamask/controller-utils';
import type { Messenger } from '@metamask/messenger';
-import type { NameControllerMethodActions } from './NameController-method-action-types';
+import type { NameControllerMethodActions } from './NameController-method-action-types.js';
import type {
NameProvider,
NameProviderRequest,
NameProviderResult,
NameProviderSourceResult,
-} from './types';
-import { NameType } from './types';
+} from './types.js';
+import { NameType } from './types.js';
export const FALLBACK_VARIATION = '*';
export const PROPOSED_NAME_EXPIRE_DURATION = 60 * 60 * 24; // 24 hours
@@ -469,10 +469,10 @@ export class NameController extends BaseController<
}
this.update((state) => {
- const typeEntries = state.names[type] || {};
+ const typeEntries = state.names[type] ?? {};
state.names[type] = typeEntries;
- const variationEntries = typeEntries[normalizedValue] || {};
+ const variationEntries = typeEntries[normalizedValue] ?? {};
typeEntries[normalizedValue] = variationEntries;
const entry = variationEntries[normalizedVariation] ?? {
diff --git a/packages/name-controller/src/index.ts b/packages/name-controller/src/index.ts
index 7a9bdceff5e..918c77eeb28 100644
--- a/packages/name-controller/src/index.ts
+++ b/packages/name-controller/src/index.ts
@@ -1,10 +1,10 @@
-export * from './NameController';
+export * from './NameController.js';
export type {
NameControllerSetNameAction,
NameControllerUpdateProposedNamesAction,
-} from './NameController-method-action-types';
-export * from './types';
-export * from './providers/ens';
-export * from './providers/etherscan';
-export * from './providers/token';
-export * from './providers/lens';
+} from './NameController-method-action-types.js';
+export * from './types.js';
+export * from './providers/ens.js';
+export * from './providers/etherscan.js';
+export * from './providers/token.js';
+export * from './providers/lens.js';
diff --git a/packages/name-controller/src/providers/ens.test.ts b/packages/name-controller/src/providers/ens.test.ts
index 126fb0cdcd7..4a96cf274a9 100644
--- a/packages/name-controller/src/providers/ens.test.ts
+++ b/packages/name-controller/src/providers/ens.test.ts
@@ -1,5 +1,7 @@
-import { NameType } from '../types';
-import { ENSNameProvider } from './ens';
+import { jest } from '@jest/globals';
+
+import { NameType } from '../types.js';
+import { ENSNameProvider } from './ens.js';
jest.mock('../util');
diff --git a/packages/name-controller/src/providers/ens.ts b/packages/name-controller/src/providers/ens.ts
index 84f7df329df..7f96fc7bb33 100644
--- a/packages/name-controller/src/providers/ens.ts
+++ b/packages/name-controller/src/providers/ens.ts
@@ -1,11 +1,11 @@
-import { projectLogger, createModuleLogger } from '../logger';
+import { projectLogger, createModuleLogger } from '../logger.js';
import type {
NameProvider,
NameProviderMetadata,
NameProviderRequest,
NameProviderResult,
-} from '../types';
-import { NameType } from '../types';
+} from '../types.js';
+import { NameType } from '../types.js';
export type ReverseLookupCallback = (
address: string,
diff --git a/packages/name-controller/src/providers/etherscan.test.ts b/packages/name-controller/src/providers/etherscan.test.ts
index 78ae2d42e41..caeacaacb5c 100644
--- a/packages/name-controller/src/providers/etherscan.test.ts
+++ b/packages/name-controller/src/providers/etherscan.test.ts
@@ -1,7 +1,9 @@
-import { CHAIN_IDS } from '../constants';
-import { NameType } from '../types';
-import { handleFetch } from '../util';
-import { EtherscanNameProvider } from './etherscan';
+import { jest } from '@jest/globals';
+
+import { CHAIN_IDS } from '../constants.js';
+import { NameType } from '../types.js';
+import { handleFetch } from '../util.js';
+import { EtherscanNameProvider } from './etherscan.js';
jest.mock('../util');
diff --git a/packages/name-controller/src/providers/etherscan.ts b/packages/name-controller/src/providers/etherscan.ts
index 9d26e5db03b..bb0a81134e2 100644
--- a/packages/name-controller/src/providers/etherscan.ts
+++ b/packages/name-controller/src/providers/etherscan.ts
@@ -1,15 +1,15 @@
import { Mutex } from 'async-mutex';
-import { ETHERSCAN_SUPPORTED_NETWORKS } from '../constants';
-import { createModuleLogger, projectLogger } from '../logger';
+import { ETHERSCAN_SUPPORTED_NETWORKS } from '../constants.js';
+import { createModuleLogger, projectLogger } from '../logger.js';
import type {
NameProvider,
NameProviderMetadata,
NameProviderRequest,
NameProviderResult,
-} from '../types';
-import { NameType } from '../types';
-import { handleFetch, assertIsError } from '../util';
+} from '../types.js';
+import { NameType } from '../types.js';
+import { handleFetch, assertIsError } from '../util.js';
const ID = 'etherscan';
const LABEL = 'Etherscan (Verified Contract Name)';
diff --git a/packages/name-controller/src/providers/lens.test.ts b/packages/name-controller/src/providers/lens.test.ts
index dc22770dbf3..68efeaddda2 100644
--- a/packages/name-controller/src/providers/lens.test.ts
+++ b/packages/name-controller/src/providers/lens.test.ts
@@ -1,6 +1,8 @@
-import { NameType } from '../types';
-import { graphQL } from '../util';
-import { LensNameProvider } from './lens';
+import { jest } from '@jest/globals';
+
+import { NameType } from '../types.js';
+import { graphQL } from '../util.js';
+import { LensNameProvider } from './lens.js';
jest.mock('../util');
diff --git a/packages/name-controller/src/providers/lens.ts b/packages/name-controller/src/providers/lens.ts
index b3560c1e7f5..483d1c23705 100644
--- a/packages/name-controller/src/providers/lens.ts
+++ b/packages/name-controller/src/providers/lens.ts
@@ -1,12 +1,12 @@
-import { createModuleLogger, projectLogger } from '../logger';
+import { createModuleLogger, projectLogger } from '../logger.js';
import type {
NameProvider,
NameProviderMetadata,
NameProviderRequest,
NameProviderResult,
-} from '../types';
-import { NameType } from '../types';
-import { graphQL } from '../util';
+} from '../types.js';
+import { NameType } from '../types.js';
+import { graphQL } from '../util.js';
const ID = 'lens';
const LABEL = 'Lens Protocol';
diff --git a/packages/name-controller/src/providers/token.test.ts b/packages/name-controller/src/providers/token.test.ts
index 4215e2dfe51..d5074a2cdc2 100644
--- a/packages/name-controller/src/providers/token.test.ts
+++ b/packages/name-controller/src/providers/token.test.ts
@@ -1,6 +1,8 @@
-import { NameType } from '../types';
-import { handleFetch } from '../util';
-import { TokenNameProvider } from './token';
+import { jest } from '@jest/globals';
+
+import { NameType } from '../types.js';
+import { handleFetch } from '../util.js';
+import { TokenNameProvider } from './token.js';
jest.mock('../util');
diff --git a/packages/name-controller/src/providers/token.ts b/packages/name-controller/src/providers/token.ts
index b082439caba..9ca9760acc4 100644
--- a/packages/name-controller/src/providers/token.ts
+++ b/packages/name-controller/src/providers/token.ts
@@ -1,12 +1,12 @@
-import { createModuleLogger, projectLogger } from '../logger';
+import { createModuleLogger, projectLogger } from '../logger.js';
import type {
NameProvider,
NameProviderMetadata,
NameProviderRequest,
NameProviderResult,
-} from '../types';
-import { NameType } from '../types';
-import { handleFetch } from '../util';
+} from '../types.js';
+import { NameType } from '../types.js';
+import { handleFetch } from '../util.js';
const ID = 'token';
const LABEL = 'Blockchain (Token Name)';
diff --git a/packages/name-controller/src/utils.test.ts b/packages/name-controller/src/utils.test.ts
index 44b498c6c7b..6ad33a1046f 100644
--- a/packages/name-controller/src/utils.test.ts
+++ b/packages/name-controller/src/utils.test.ts
@@ -1,4 +1,6 @@
-import { assertIsError, graphQL } from './util';
+import { jest } from '@jest/globals';
+
+import { assertIsError, graphQL } from './util.js';
describe('Utils', () => {
describe('graphQL', () => {
diff --git a/packages/network-connection-banner-controller/jest.config.js b/packages/network-connection-banner-controller/jest.config.js
index f6a03b68807..8ee4e1bde6e 100644
--- a/packages/network-connection-banner-controller/jest.config.js
+++ b/packages/network-connection-banner-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/network-connection-banner-controller/package.json b/packages/network-connection-banner-controller/package.json
index 01590bede2d..c3a0d7fa886 100644
--- a/packages/network-connection-banner-controller/package.json
+++ b/packages/network-connection-banner-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/network-connection-banner-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/network-connection-banner-controller",
@@ -67,7 +60,6 @@
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/network-connection-banner-controller/src/NetworkConnectionBannerController-method-action-types.ts b/packages/network-connection-banner-controller/src/NetworkConnectionBannerController-method-action-types.ts
index 9cbda05c26b..980b79d2f9e 100644
--- a/packages/network-connection-banner-controller/src/NetworkConnectionBannerController-method-action-types.ts
+++ b/packages/network-connection-banner-controller/src/NetworkConnectionBannerController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { NetworkConnectionBannerController } from './NetworkConnectionBannerController';
+import type { NetworkConnectionBannerController } from './NetworkConnectionBannerController.js';
/**
* Clears the banner state such that the banner will be hidden.
diff --git a/packages/network-connection-banner-controller/src/NetworkConnectionBannerController.test.ts b/packages/network-connection-banner-controller/src/NetworkConnectionBannerController.test.ts
index c1488bd93e5..9e127055029 100644
--- a/packages/network-connection-banner-controller/src/NetworkConnectionBannerController.test.ts
+++ b/packages/network-connection-banner-controller/src/NetworkConnectionBannerController.test.ts
@@ -18,8 +18,8 @@ import type { NetworkEnablementControllerState } from '@metamask/network-enablem
import { KnownCaipNamespace } from '@metamask/utils';
import type { Hex } from '@metamask/utils';
-import type { NetworkConnectionBannerControllerMessenger } from './NetworkConnectionBannerController';
-import { NetworkConnectionBannerController } from './NetworkConnectionBannerController';
+import type { NetworkConnectionBannerControllerMessenger } from './NetworkConnectionBannerController.js';
+import { NetworkConnectionBannerController } from './NetworkConnectionBannerController.js';
const TEST_INFURA_PROJECT_ID = 'test-infura-project-id';
const MAINNET_CLIENT_ID = 'mainnet' satisfies BuiltInNetworkClientId;
@@ -1783,7 +1783,7 @@ async function withController(
rootMessenger.registerActionHandler(
'NetworkController:getState',
- () => currentState.NetworkController as NetworkState,
+ () => currentState.NetworkController,
);
rootMessenger.registerActionHandler(
'NetworkController:getNetworkConfigurationByChainId',
@@ -1879,7 +1879,7 @@ async function withController(
};
rootMessenger.publish(
'NetworkController:stateChange',
- currentState.NetworkController as NetworkState,
+ currentState.NetworkController,
[],
);
};
@@ -1911,7 +1911,7 @@ async function withController(
};
rootMessenger.publish(
'NetworkController:stateChange',
- currentState.NetworkController as NetworkState,
+ currentState.NetworkController,
[],
);
rootMessenger.publish(
diff --git a/packages/network-connection-banner-controller/src/NetworkConnectionBannerController.ts b/packages/network-connection-banner-controller/src/NetworkConnectionBannerController.ts
index 5dfdb6528c1..f3cc67e8079 100644
--- a/packages/network-connection-banner-controller/src/NetworkConnectionBannerController.ts
+++ b/packages/network-connection-banner-controller/src/NetworkConnectionBannerController.ts
@@ -41,8 +41,8 @@ import type { Hex } from '@metamask/utils';
import { KnownCaipNamespace } from '@metamask/utils';
import { createSelector } from 'reselect';
-import type { NetworkConnectionBannerControllerMethodActions } from './NetworkConnectionBannerController-method-action-types';
-import { getIsInfuraEndpoint } from './url-utils';
+import type { NetworkConnectionBannerControllerMethodActions } from './NetworkConnectionBannerController-method-action-types.js';
+import { getIsInfuraEndpoint } from './url-utils.js';
/**
* The name of the {@link NetworkConnectionBannerController}, used to namespace
diff --git a/packages/network-connection-banner-controller/src/index.ts b/packages/network-connection-banner-controller/src/index.ts
index 825f079000f..08b47d81af6 100644
--- a/packages/network-connection-banner-controller/src/index.ts
+++ b/packages/network-connection-banner-controller/src/index.ts
@@ -8,15 +8,15 @@ export type {
NetworkConnectionBannerControllerOptions,
FailedNetwork,
NetworkConnectionBannerStatus,
-} from './NetworkConnectionBannerController';
+} from './NetworkConnectionBannerController.js';
export type {
NetworkConnectionBannerControllerDismissBannerAction,
NetworkConnectionBannerControllerSwitchToDefaultInfuraRpcEndpointAction,
-} from './NetworkConnectionBannerController-method-action-types';
+} from './NetworkConnectionBannerController-method-action-types.js';
export {
NetworkConnectionBannerController,
getDefaultNetworkConnectionBannerControllerState,
DEFAULT_DEGRADED_BANNER_TIMEOUT,
DEFAULT_UNAVAILABLE_BANNER_TIMEOUT,
-} from './NetworkConnectionBannerController';
-export { networkConnectionBannerControllerSelectors } from './selectors';
+} from './NetworkConnectionBannerController.js';
+export { networkConnectionBannerControllerSelectors } from './selectors.js';
diff --git a/packages/network-connection-banner-controller/src/selectors.test.ts b/packages/network-connection-banner-controller/src/selectors.test.ts
index 1f6c8fa5985..b51be9af5af 100644
--- a/packages/network-connection-banner-controller/src/selectors.test.ts
+++ b/packages/network-connection-banner-controller/src/selectors.test.ts
@@ -1,8 +1,8 @@
import type {
NetworkConnectionBannerControllerState,
FailedNetwork,
-} from './NetworkConnectionBannerController';
-import { networkConnectionBannerControllerSelectors } from './selectors';
+} from './NetworkConnectionBannerController.js';
+import { networkConnectionBannerControllerSelectors } from './selectors.js';
const failedNetwork: FailedNetwork = {
chainId: '0x1',
diff --git a/packages/network-connection-banner-controller/src/selectors.ts b/packages/network-connection-banner-controller/src/selectors.ts
index 4f17e6292b6..4e15222d572 100644
--- a/packages/network-connection-banner-controller/src/selectors.ts
+++ b/packages/network-connection-banner-controller/src/selectors.ts
@@ -4,7 +4,7 @@ import type {
NetworkConnectionBannerControllerState,
FailedNetwork,
NetworkConnectionBannerStatus,
-} from './NetworkConnectionBannerController';
+} from './NetworkConnectionBannerController.js';
/**
* Selects the banner status from the controller state.
diff --git a/packages/network-connection-banner-controller/src/url-utils.test.ts b/packages/network-connection-banner-controller/src/url-utils.test.ts
index c6e1c121abb..304afcad3c0 100644
--- a/packages/network-connection-banner-controller/src/url-utils.test.ts
+++ b/packages/network-connection-banner-controller/src/url-utils.test.ts
@@ -1,4 +1,4 @@
-import { getIsInfuraEndpoint } from './url-utils';
+import { getIsInfuraEndpoint } from './url-utils.js';
const INFURA_PROJECT_ID = 'abc123def456';
diff --git a/packages/network-controller/jest.config.js b/packages/network-controller/jest.config.js
index 621e01529f5..d88606f7828 100644
--- a/packages/network-controller/jest.config.js
+++ b/packages/network-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/network-controller/package.json b/packages/network-controller/package.json
index adc52a427f5..2a18d7ccabc 100644
--- a/packages/network-controller/package.json
+++ b/packages/network-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/network-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/network-controller",
@@ -79,7 +72,6 @@
"devDependencies": {
"@json-rpc-specification/meta-schema": "^1.0.6",
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/deep-freeze-strict": "^1.1.0",
"@types/jest": "^29.5.14",
"@types/jest-when": "^2.7.3",
@@ -91,7 +83,7 @@
"jest": "^29.7.0",
"jest-environment-jsdom": "^29.7.0",
"jest-when": "^3.4.2",
- "lodash": "^4.17.21",
+ "lodash-es": "^4.17.21",
"nock": "^13.3.1",
"node-fetch": "^2.7.0",
"ts-jest": "^29.2.5",
diff --git a/packages/network-controller/src/NetworkController-method-action-types.ts b/packages/network-controller/src/NetworkController-method-action-types.ts
index 019b6b225cd..793f944e68f 100644
--- a/packages/network-controller/src/NetworkController-method-action-types.ts
+++ b/packages/network-controller/src/NetworkController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { NetworkController } from './NetworkController';
+import type { NetworkController } from './NetworkController.js';
/**
* Returns the EthQuery instance for the currently selected network.
diff --git a/packages/network-controller/src/NetworkController.ts b/packages/network-controller/src/NetworkController.ts
index 5ad7b5443c1..83585c1b171 100644
--- a/packages/network-controller/src/NetworkController.ts
+++ b/packages/network-controller/src/NetworkController.ts
@@ -36,7 +36,7 @@ import { hasProperty, isPlainObject, isStrictHexString } from '@metamask/utils';
import deepEqual from 'fast-deep-equal';
import type { Draft } from 'immer';
import { produce } from 'immer';
-import { cloneDeep } from 'lodash';
+import { cloneDeep } from 'lodash-es';
import type { Logger } from 'loglevel';
import { createSelector } from 'reselect';
import * as URI from 'uri-js';
@@ -46,26 +46,29 @@ import {
DEPRECATED_NETWORKS,
INFURA_BLOCKED_KEY,
NetworkStatus,
-} from './constants';
+} from './constants.js';
import type {
AutoManagedNetworkClient,
ProxyWithAccessibleTarget,
-} from './create-auto-managed-network-client';
-import { createAutoManagedNetworkClient } from './create-auto-managed-network-client';
-import type { DegradedEventType, RetryReason } from './create-network-client';
-import { projectLogger, createModuleLogger } from './logger';
-import type { NetworkControllerMethodActions } from './NetworkController-method-action-types';
-import type { RpcServiceOptionsWithDefaults } from './rpc-service/rpc-service';
-import { getRpcFailoverMode } from './selectors';
-import type { RpcFailoverMode } from './selectors';
-import { NetworkClientType } from './types';
+} from './create-auto-managed-network-client.js';
+import { createAutoManagedNetworkClient } from './create-auto-managed-network-client.js';
+import type {
+ DegradedEventType,
+ RetryReason,
+} from './create-network-client.js';
+import { projectLogger, createModuleLogger } from './logger.js';
+import type { NetworkControllerMethodActions } from './NetworkController-method-action-types.js';
+import type { RpcServiceOptionsWithDefaults } from './rpc-service/rpc-service.js';
+import { getRpcFailoverMode } from './selectors.js';
+import type { RpcFailoverMode } from './selectors.js';
+import { NetworkClientType } from './types.js';
import type {
BlockTracker,
Provider,
CustomNetworkClientConfiguration,
InfuraNetworkClientConfiguration,
NetworkClientConfiguration,
-} from './types';
+} from './types.js';
const debugLog = createModuleLogger(projectLogger, 'NetworkController');
@@ -2471,7 +2474,7 @@ export class NetworkController extends BaseController<
* In-progress requests will not be aborted.
*/
// We're intentionally changing the signature of an extended method.
- // eslint-disable-next-line @typescript-eslint/no-misused-promises
+
async destroy(): Promise {
await this.#blockTrackerProxy?.destroy();
}
diff --git a/packages/network-controller/src/create-auto-managed-network-client.test.ts b/packages/network-controller/src/create-auto-managed-network-client.test.ts
index d7e3c16def1..8f040abab29 100644
--- a/packages/network-controller/src/create-auto-managed-network-client.test.ts
+++ b/packages/network-controller/src/create-auto-managed-network-client.test.ts
@@ -1,16 +1,16 @@
import { BUILT_IN_NETWORKS, NetworkType } from '@metamask/controller-utils';
import { PollingBlockTrackerOptions } from '@metamask/eth-block-tracker';
-import { mockNetwork } from '../../../tests/mock-network';
-import { buildNetworkControllerMessenger } from '../tests/helpers';
-import { createAutoManagedNetworkClient } from './create-auto-managed-network-client';
-import * as createNetworkClientModule from './create-network-client';
-import { RpcServiceOptions } from './rpc-service/rpc-service';
+import { mockNetwork } from '../../../tests/mock-network.js';
+import { buildNetworkControllerMessenger } from '../tests/helpers.js';
+import { createAutoManagedNetworkClient } from './create-auto-managed-network-client.js';
+import * as createNetworkClientModule from './create-network-client.js';
+import { RpcServiceOptions } from './rpc-service/rpc-service.js';
import type {
CustomNetworkClientConfiguration,
InfuraNetworkClientConfiguration,
-} from './types';
-import { NetworkClientType } from './types';
+} from './types.js';
+import { NetworkClientType } from './types.js';
describe('createAutoManagedNetworkClient', () => {
const networkClientConfigurations: [
diff --git a/packages/network-controller/src/create-auto-managed-network-client.ts b/packages/network-controller/src/create-auto-managed-network-client.ts
index fe826186cf4..458fee625d3 100644
--- a/packages/network-controller/src/create-auto-managed-network-client.ts
+++ b/packages/network-controller/src/create-auto-managed-network-client.ts
@@ -2,19 +2,19 @@ import type { PollingBlockTrackerOptions } from '@metamask/eth-block-tracker';
import { Json } from '@metamask/utils';
import type { Logger } from 'loglevel';
-import type { NetworkClient } from './create-network-client';
-import { createNetworkClient } from './create-network-client';
+import type { NetworkClient } from './create-network-client.js';
+import { createNetworkClient } from './create-network-client.js';
import type {
NetworkClientId,
NetworkControllerMessenger,
-} from './NetworkController';
-import type { RpcServiceOptionsWithDefaults } from './rpc-service/rpc-service';
-import type { RpcFailoverMode } from './selectors';
+} from './NetworkController.js';
+import type { RpcServiceOptionsWithDefaults } from './rpc-service/rpc-service.js';
+import type { RpcFailoverMode } from './selectors.js';
import type {
BlockTracker,
NetworkClientConfiguration,
Provider,
-} from './types';
+} from './types.js';
/**
* The name of the method on both the provider and block tracker proxy which can
diff --git a/packages/network-controller/src/create-network-client-tests/classify-retry-reason.test.ts b/packages/network-controller/src/create-network-client-tests/classify-retry-reason.test.ts
index 1a4e25f32d9..2521aeaba96 100644
--- a/packages/network-controller/src/create-network-client-tests/classify-retry-reason.test.ts
+++ b/packages/network-controller/src/create-network-client-tests/classify-retry-reason.test.ts
@@ -1,7 +1,7 @@
import { HttpError } from '@metamask/controller-utils';
import { FetchError } from 'node-fetch';
-import { classifyRetryReason } from '../create-network-client';
+import { classifyRetryReason } from '../create-network-client.js';
describe('classifyRetryReason', () => {
it('returns "connection_failed" for FetchError connection failures', () => {
diff --git a/packages/network-controller/src/create-network-client-tests/ethereum-spec/block-hash-in-response.test.ts b/packages/network-controller/src/create-network-client-tests/ethereum-spec/block-hash-in-response.test.ts
index caab1b529b8..72d0783427c 100644
--- a/packages/network-controller/src/create-network-client-tests/ethereum-spec/block-hash-in-response.test.ts
+++ b/packages/network-controller/src/create-network-client-tests/ethereum-spec/block-hash-in-response.test.ts
@@ -1,5 +1,5 @@
-import { testsForRpcMethodsThatCheckForBlockHashInResponse } from '../../../tests/network-client/block-hash-in-response';
-import { NetworkClientType } from '../../types';
+import { testsForRpcMethodsThatCheckForBlockHashInResponse } from '../../../tests/network-client/block-hash-in-response.js';
+import { NetworkClientType } from '../../types.js';
describe('createNetworkClient - methods included in the Ethereum JSON-RPC spec - methods with block hashes in their result', () => {
for (const networkClientType of Object.values(NetworkClientType)) {
diff --git a/packages/network-controller/src/create-network-client-tests/ethereum-spec/block-param.test.ts b/packages/network-controller/src/create-network-client-tests/ethereum-spec/block-param.test.ts
index 503397aec8a..a92213abe1c 100644
--- a/packages/network-controller/src/create-network-client-tests/ethereum-spec/block-param.test.ts
+++ b/packages/network-controller/src/create-network-client-tests/ethereum-spec/block-param.test.ts
@@ -1,5 +1,5 @@
-import { testsForRpcMethodSupportingBlockParam } from '../../../tests/network-client/block-param';
-import { NetworkClientType } from '../../types';
+import { testsForRpcMethodSupportingBlockParam } from '../../../tests/network-client/block-param.js';
+import { NetworkClientType } from '../../types.js';
describe('createNetworkClient - methods included in the Ethereum JSON-RPC spec - methods that have a param to specify the block', () => {
for (const networkClientType of Object.values(NetworkClientType)) {
diff --git a/packages/network-controller/src/create-network-client-tests/ethereum-spec/no-block-param.test.ts b/packages/network-controller/src/create-network-client-tests/ethereum-spec/no-block-param.test.ts
index 0ef4fb4b55a..ef78a00fa2f 100644
--- a/packages/network-controller/src/create-network-client-tests/ethereum-spec/no-block-param.test.ts
+++ b/packages/network-controller/src/create-network-client-tests/ethereum-spec/no-block-param.test.ts
@@ -1,5 +1,5 @@
-import { testsForRpcMethodAssumingNoBlockParam } from '../../../tests/network-client/no-block-param';
-import { NetworkClientType } from '../../types';
+import { testsForRpcMethodAssumingNoBlockParam } from '../../../tests/network-client/no-block-param.js';
+import { NetworkClientType } from '../../types.js';
describe('createNetworkClient - methods included in the Ethereum JSON-RPC spec - methods that assume there is no block param', () => {
for (const networkClientType of Object.values(NetworkClientType)) {
diff --git a/packages/network-controller/src/create-network-client-tests/ethereum-spec/not-handled-by-middleware.test.ts b/packages/network-controller/src/create-network-client-tests/ethereum-spec/not-handled-by-middleware.test.ts
index f3b799f3f18..3b1597fe3ca 100644
--- a/packages/network-controller/src/create-network-client-tests/ethereum-spec/not-handled-by-middleware.test.ts
+++ b/packages/network-controller/src/create-network-client-tests/ethereum-spec/not-handled-by-middleware.test.ts
@@ -1,5 +1,5 @@
-import { testsForRpcMethodNotHandledByMiddleware } from '../../../tests/network-client/not-handled-by-middleware';
-import { NetworkClientType } from '../../types';
+import { testsForRpcMethodNotHandledByMiddleware } from '../../../tests/network-client/not-handled-by-middleware.js';
+import { NetworkClientType } from '../../types.js';
describe('createNetworkClient - methods included in the Ethereum JSON-RPC spec - methods not handled by middleware', () => {
for (const networkClientType of Object.values(NetworkClientType)) {
diff --git a/packages/network-controller/src/create-network-client-tests/ethereum-spec/other-methods.test.ts b/packages/network-controller/src/create-network-client-tests/ethereum-spec/other-methods.test.ts
index fa412274e67..aee90938e77 100644
--- a/packages/network-controller/src/create-network-client-tests/ethereum-spec/other-methods.test.ts
+++ b/packages/network-controller/src/create-network-client-tests/ethereum-spec/other-methods.test.ts
@@ -1,8 +1,8 @@
import {
withMockedCommunications,
withNetworkClient,
-} from '../../../tests/network-client/helpers';
-import { NetworkClientType } from '../../types';
+} from '../../../tests/network-client/helpers.js';
+import { NetworkClientType } from '../../types.js';
describe('createNetworkClient - methods included in the Ethereum JSON-RPC spec - other methods', () => {
for (const networkClientType of Object.values(NetworkClientType)) {
diff --git a/packages/network-controller/src/create-network-client-tests/ex-ethereum-spec/no-block-param.test.ts b/packages/network-controller/src/create-network-client-tests/ex-ethereum-spec/no-block-param.test.ts
index 0819318602e..c575356ad7c 100644
--- a/packages/network-controller/src/create-network-client-tests/ex-ethereum-spec/no-block-param.test.ts
+++ b/packages/network-controller/src/create-network-client-tests/ex-ethereum-spec/no-block-param.test.ts
@@ -1,5 +1,5 @@
-import { testsForRpcMethodAssumingNoBlockParam } from '../../../tests/network-client/no-block-param';
-import { NetworkClientType } from '../../types';
+import { testsForRpcMethodAssumingNoBlockParam } from '../../../tests/network-client/no-block-param.js';
+import { NetworkClientType } from '../../types.js';
describe('createNetworkClient - methods not included in the Ethereum JSON-RPC spec - methods that assume there is no block param', () => {
for (const networkClientType of Object.values(NetworkClientType)) {
diff --git a/packages/network-controller/src/create-network-client-tests/ex-ethereum-spec/not-handled-by-middleware.test.ts b/packages/network-controller/src/create-network-client-tests/ex-ethereum-spec/not-handled-by-middleware.test.ts
index 42fee0efd37..3d5a2513369 100644
--- a/packages/network-controller/src/create-network-client-tests/ex-ethereum-spec/not-handled-by-middleware.test.ts
+++ b/packages/network-controller/src/create-network-client-tests/ex-ethereum-spec/not-handled-by-middleware.test.ts
@@ -1,5 +1,5 @@
-import { testsForRpcMethodNotHandledByMiddleware } from '../../../tests/network-client/not-handled-by-middleware';
-import { NetworkClientType } from '../../types';
+import { testsForRpcMethodNotHandledByMiddleware } from '../../../tests/network-client/not-handled-by-middleware.js';
+import { NetworkClientType } from '../../types.js';
describe('createNetworkClient - methods not included in the Ethereum JSON-RPC spec - methods not handled by middleware', () => {
for (const networkClientType of Object.values(NetworkClientType)) {
diff --git a/packages/network-controller/src/create-network-client-tests/ex-ethereum-spec/other-methods.test.ts b/packages/network-controller/src/create-network-client-tests/ex-ethereum-spec/other-methods.test.ts
index 50c7363ffb4..7091a2f6203 100644
--- a/packages/network-controller/src/create-network-client-tests/ex-ethereum-spec/other-methods.test.ts
+++ b/packages/network-controller/src/create-network-client-tests/ex-ethereum-spec/other-methods.test.ts
@@ -1,9 +1,9 @@
-import { TESTNET } from '../../../tests/helpers';
+import { TESTNET } from '../../../tests/helpers.js';
import {
withMockedCommunications,
withNetworkClient,
-} from '../../../tests/network-client/helpers';
-import { NetworkClientType } from '../../types';
+} from '../../../tests/network-client/helpers.js';
+import { NetworkClientType } from '../../types.js';
describe('createNetworkClient - methods not included in the Ethereum JSON-RPC spec - other methods', () => {
for (const networkClientType of Object.values(NetworkClientType)) {
diff --git a/packages/network-controller/src/create-network-client-tests/rpc-endpoint-events.test.ts b/packages/network-controller/src/create-network-client-tests/rpc-endpoint-events.test.ts
index 3c50a39f399..4822ddbabf6 100644
--- a/packages/network-controller/src/create-network-client-tests/rpc-endpoint-events.test.ts
+++ b/packages/network-controller/src/create-network-client-tests/rpc-endpoint-events.test.ts
@@ -6,13 +6,13 @@ import {
} from '@metamask/controller-utils';
import { errorCodes } from '@metamask/rpc-errors';
-import { buildRootMessenger } from '../../tests/helpers';
+import { buildRootMessenger } from '../../tests/helpers.js';
import {
withMockedCommunications,
withNetworkClient,
-} from '../../tests/network-client/helpers';
-import { DEFAULT_MAX_CONSECUTIVE_FAILURES } from '../rpc-service/rpc-service';
-import { NetworkClientType } from '../types';
+} from '../../tests/network-client/helpers.js';
+import { DEFAULT_MAX_CONSECUTIVE_FAILURES } from '../rpc-service/rpc-service.js';
+import { NetworkClientType } from '../types.js';
describe('createNetworkClient - RPC endpoint events', () => {
for (const networkClientType of Object.values(NetworkClientType)) {
diff --git a/packages/network-controller/src/create-network-client-tests/rpc-endpoint-failover.test.ts b/packages/network-controller/src/create-network-client-tests/rpc-endpoint-failover.test.ts
index 865f78f93af..fa6f9d5e0c0 100644
--- a/packages/network-controller/src/create-network-client-tests/rpc-endpoint-failover.test.ts
+++ b/packages/network-controller/src/create-network-client-tests/rpc-endpoint-failover.test.ts
@@ -1,8 +1,8 @@
-import { buildRootMessenger } from '../../tests/helpers';
+import { buildRootMessenger } from '../../tests/helpers.js';
import {
withMockedCommunications,
withNetworkClient,
-} from '../../tests/network-client/helpers';
+} from '../../tests/network-client/helpers.js';
describe('createNetworkClient - RPC endpoint failover (forced)', () => {
describe('when rpcFailoverMode is forced and providerType is infura', () => {
diff --git a/packages/network-controller/src/create-network-client.ts b/packages/network-controller/src/create-network-client.ts
index f79ef7b2cad..99d1222a813 100644
--- a/packages/network-controller/src/create-network-client.ts
+++ b/packages/network-controller/src/create-network-client.ts
@@ -38,23 +38,23 @@ import type { Logger } from 'loglevel';
import type {
NetworkClientId,
NetworkControllerMessenger,
-} from './NetworkController';
-import type { RpcServiceOptionsWithDefaults } from './rpc-service/rpc-service';
+} from './NetworkController.js';
+import { RpcServiceChain } from './rpc-service/rpc-service-chain.js';
+import type { RpcServiceOptionsWithDefaults } from './rpc-service/rpc-service.js';
import {
isConnectionError,
isConnectionResetError,
isJsonParseError,
isHttpServerError,
isTimeoutError,
-} from './rpc-service/rpc-service';
-import { RpcServiceChain } from './rpc-service/rpc-service-chain';
-import type { RpcFailoverMode } from './selectors';
+} from './rpc-service/rpc-service.js';
+import type { RpcFailoverMode } from './selectors.js';
import type {
BlockTracker,
NetworkClientConfiguration,
Provider,
-} from './types';
-import { NetworkClientType } from './types';
+} from './types.js';
+import { NetworkClientType } from './types.js';
const SECOND = 1000;
@@ -218,7 +218,7 @@ export function createNetworkClient({
const destroy = (): void => {
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
+
blockTracker.destroy();
};
diff --git a/packages/network-controller/src/index.ts b/packages/network-controller/src/index.ts
index f1f3a4ecc13..e850deda53c 100644
--- a/packages/network-controller/src/index.ts
+++ b/packages/network-controller/src/index.ts
@@ -1,4 +1,4 @@
-export type { AutoManagedNetworkClient } from './create-auto-managed-network-client';
+export type { AutoManagedNetworkClient } from './create-auto-managed-network-client.js';
export type {
Block,
NetworkMetadata,
@@ -32,28 +32,31 @@ export type {
NetworkControllerRpcEndpointDegradedEvent,
NetworkControllerRpcEndpointChainAvailableEvent,
NetworkControllerRpcEndpointRetriedEvent,
-} from './NetworkController';
+} from './NetworkController.js';
export {
getDefaultNetworkControllerState,
selectAvailableNetworkClientIds,
knownKeysOf,
NetworkController,
RpcEndpointType,
-} from './NetworkController';
-export * from './constants';
-export type { BlockTracker, Provider } from './types';
+} from './NetworkController.js';
+export * from './constants.js';
+export type { BlockTracker, Provider } from './types.js';
export type {
NetworkClientConfiguration,
InfuraNetworkClientConfiguration,
CustomNetworkClientConfiguration,
-} from './types';
-export { NetworkClientType } from './types';
-export type { NetworkClient } from './create-network-client';
-export type { AbstractRpcService } from './rpc-service/abstract-rpc-service';
-export type { RpcServiceRequestable } from './rpc-service/rpc-service-requestable';
-export type { DegradedEventType, RetryReason } from './create-network-client';
-export { classifyRetryReason } from './create-network-client';
-export { isConnectionError } from './rpc-service/rpc-service';
+} from './types.js';
+export { NetworkClientType } from './types.js';
+export type { NetworkClient } from './create-network-client.js';
+export type { AbstractRpcService } from './rpc-service/abstract-rpc-service.js';
+export type { RpcServiceRequestable } from './rpc-service/rpc-service-requestable.js';
+export type {
+ DegradedEventType,
+ RetryReason,
+} from './create-network-client.js';
+export { classifyRetryReason } from './create-network-client.js';
+export { isConnectionError } from './rpc-service/rpc-service.js';
export type {
NetworkControllerGetEthQueryAction,
NetworkControllerGetNetworkClientByIdAction,
@@ -76,4 +79,4 @@ export type {
NetworkControllerResetConnectionAction,
NetworkControllerRollbackToPreviousProviderAction,
NetworkControllerLoadBackupAction,
-} from './NetworkController-method-action-types';
+} from './NetworkController-method-action-types.js';
diff --git a/packages/network-controller/src/rpc-service/abstract-rpc-service.ts b/packages/network-controller/src/rpc-service/abstract-rpc-service.ts
index 7769f88c055..9a23d93bd0f 100644
--- a/packages/network-controller/src/rpc-service/abstract-rpc-service.ts
+++ b/packages/network-controller/src/rpc-service/abstract-rpc-service.ts
@@ -1,4 +1,4 @@
-import type { RpcServiceRequestable } from './rpc-service-requestable';
+import type { RpcServiceRequestable } from './rpc-service-requestable.js';
/**
* The interface for a service class responsible for making a request to an RPC
diff --git a/packages/network-controller/src/rpc-service/rpc-service-chain.test.ts b/packages/network-controller/src/rpc-service/rpc-service-chain.test.ts
index 5a8ffa37e87..702cf7f3f2e 100644
--- a/packages/network-controller/src/rpc-service/rpc-service-chain.test.ts
+++ b/packages/network-controller/src/rpc-service/rpc-service-chain.test.ts
@@ -6,11 +6,11 @@ import {
import { errorCodes } from '@metamask/rpc-errors';
import nock from 'nock';
+import { RpcServiceChain } from './rpc-service-chain.js';
import {
DEFAULT_MAX_CONSECUTIVE_FAILURES,
DEFAULT_MAX_RETRIES,
-} from './rpc-service';
-import { RpcServiceChain } from './rpc-service-chain';
+} from './rpc-service.js';
/**
* The number of fetch requests made for a single request to an RPC service, using default max
diff --git a/packages/network-controller/src/rpc-service/rpc-service-chain.ts b/packages/network-controller/src/rpc-service/rpc-service-chain.ts
index af5a69e2c9b..89f6ba5cd2c 100644
--- a/packages/network-controller/src/rpc-service/rpc-service-chain.ts
+++ b/packages/network-controller/src/rpc-service/rpc-service-chain.ts
@@ -10,15 +10,15 @@ import type {
} from '@metamask/utils';
import { IDisposable } from 'cockatiel';
-import { projectLogger, createModuleLogger } from '../logger';
-import { RpcService } from './rpc-service';
-import type { RpcServiceOptions } from './rpc-service';
+import { projectLogger, createModuleLogger } from '../logger.js';
+import { RpcService } from './rpc-service.js';
+import type { RpcServiceOptions } from './rpc-service.js';
import type {
CockatielEventToEventListenerWithData,
ExcludeCockatielEventData,
ExtractCockatielEventData,
FetchOptions,
-} from './shared';
+} from './shared.js';
const log = createModuleLogger(projectLogger, 'RpcServiceChain');
diff --git a/packages/network-controller/src/rpc-service/rpc-service-requestable.ts b/packages/network-controller/src/rpc-service/rpc-service-requestable.ts
index 6283a704736..7d8e2764d6c 100644
--- a/packages/network-controller/src/rpc-service/rpc-service-requestable.ts
+++ b/packages/network-controller/src/rpc-service/rpc-service-requestable.ts
@@ -12,7 +12,7 @@ import type {
ExtendCockatielEventData,
ExtractCockatielEventData,
FetchOptions,
-} from './shared';
+} from './shared.js';
/**
* The interface for a service class responsible for making a request to a
diff --git a/packages/network-controller/src/rpc-service/rpc-service.test.ts b/packages/network-controller/src/rpc-service/rpc-service.test.ts
index 309296cab77..2e98f9c8094 100644
--- a/packages/network-controller/src/rpc-service/rpc-service.test.ts
+++ b/packages/network-controller/src/rpc-service/rpc-service.test.ts
@@ -13,7 +13,7 @@ import {
CUSTOM_RPC_ERRORS,
DEFAULT_MAX_RETRIES,
RpcService,
-} from './rpc-service';
+} from './rpc-service.js';
describe('RpcService', () => {
beforeEach(() => {
diff --git a/packages/network-controller/src/rpc-service/rpc-service.ts b/packages/network-controller/src/rpc-service/rpc-service.ts
index 6e6cba3509e..1eef498ba30 100644
--- a/packages/network-controller/src/rpc-service/rpc-service.ts
+++ b/packages/network-controller/src/rpc-service/rpc-service.ts
@@ -20,14 +20,14 @@ import { CircuitState } from 'cockatiel';
import deepmerge from 'deepmerge';
import type { Logger } from 'loglevel';
-import { projectLogger, createModuleLogger } from '../logger';
+import { projectLogger, createModuleLogger } from '../logger.js';
import type {
CockatielEventToEventListenerWithData,
ExcludeCockatielEventData,
ExtendCockatielEventData,
ExtractCockatielEventData,
FetchOptions,
-} from './shared';
+} from './shared.js';
/**
* Options for the RpcService constructor with some properties omitted and made optional as they have defaults.
diff --git a/packages/network-controller/src/selectors.test.ts b/packages/network-controller/src/selectors.test.ts
index 9e934fdc9e4..0fed844f57e 100644
--- a/packages/network-controller/src/selectors.test.ts
+++ b/packages/network-controller/src/selectors.test.ts
@@ -1,4 +1,4 @@
-import { getRpcFailoverMode } from './selectors';
+import { getRpcFailoverMode } from './selectors.js';
/**
* Builds a remote feature flag controller state with the given failover mode.
diff --git a/packages/network-controller/tests/NetworkController.provider.test.ts b/packages/network-controller/tests/NetworkController.provider.test.ts
index 00e360b2e25..8456454907c 100644
--- a/packages/network-controller/tests/NetworkController.provider.test.ts
+++ b/packages/network-controller/tests/NetworkController.provider.test.ts
@@ -5,14 +5,14 @@ import {
import { Duration, inMilliseconds } from '@metamask/utils';
import nock from 'nock';
-import { NetworkStatus } from '../src/constants';
+import { NetworkStatus } from '../src/constants.js';
import {
buildCustomNetworkConfiguration,
buildCustomRpcEndpoint,
buildInfuraNetworkConfiguration,
buildInfuraRpcEndpoint,
withController,
-} from './helpers';
+} from './helpers.js';
describe('NetworkController provider tests', () => {
beforeEach(() => {
diff --git a/packages/network-controller/tests/NetworkController.test.ts b/packages/network-controller/tests/NetworkController.test.ts
index 35fa8fe8b09..3107edeb4c0 100644
--- a/packages/network-controller/tests/NetworkController.test.ts
+++ b/packages/network-controller/tests/NetworkController.test.ts
@@ -18,14 +18,14 @@ import { when, resetAllWhenMocks, WhenMock } from 'jest-when';
import { inspect, isDeepStrictEqual, promisify } from 'util';
import { v4 as uuidV4 } from 'uuid';
-import { FakeBlockTracker } from '../../../tests/fake-block-tracker';
-import type { FakeProviderStub } from '../../../tests/fake-provider';
-import { FakeProvider } from '../../../tests/fake-provider';
-import { NetworkStatus } from '../src/constants';
-import * as createAutoManagedNetworkClientModule from '../src/create-auto-managed-network-client';
-import type { AutoManagedNetworkClient } from '../src/create-auto-managed-network-client';
-import type { NetworkClient } from '../src/create-network-client';
-import { createNetworkClient } from '../src/create-network-client';
+import { FakeBlockTracker } from '../../../tests/fake-block-tracker.js';
+import type { FakeProviderStub } from '../../../tests/fake-provider.js';
+import { FakeProvider } from '../../../tests/fake-provider.js';
+import { NetworkStatus } from '../src/constants.js';
+import * as createAutoManagedNetworkClientModule from '../src/create-auto-managed-network-client.js';
+import type { AutoManagedNetworkClient } from '../src/create-auto-managed-network-client.js';
+import type { NetworkClient } from '../src/create-network-client.js';
+import { createNetworkClient } from '../src/create-network-client.js';
import type {
AutoManagedBuiltInNetworkClientRegistry,
AutoManagedCustomNetworkClientRegistry,
@@ -35,7 +35,7 @@ import type {
NetworkControllerEvents,
NetworkControllerStateChangeEvent,
NetworkState,
-} from '../src/NetworkController';
+} from '../src/NetworkController.js';
import {
getAvailableNetworkClientIds,
getDefaultNetworkControllerState,
@@ -44,10 +44,10 @@ import {
RpcEndpointType,
selectAvailableNetworkClientIds,
selectNetworkConfigurations,
-} from '../src/NetworkController';
-import type { RpcServiceOptions } from '../src/rpc-service/rpc-service';
-import type { NetworkClientConfiguration, Provider } from '../src/types';
-import { NetworkClientType } from '../src/types';
+} from '../src/NetworkController.js';
+import type { RpcServiceOptions } from '../src/rpc-service/rpc-service.js';
+import type { NetworkClientConfiguration, Provider } from '../src/types.js';
+import { NetworkClientType } from '../src/types.js';
import {
buildAddNetworkCustomRpcEndpointFields,
buildAddNetworkFields,
@@ -64,8 +64,8 @@ import {
INFURA_NETWORKS,
TESTNET,
withController,
-} from './helpers';
-import type { RootMessenger } from './helpers';
+} from './helpers.js';
+import type { RootMessenger } from './helpers.js';
jest.mock('../src/create-network-client');
@@ -2030,7 +2030,7 @@ describe('NetworkController', () => {
response: SUCCESSFUL_ETH_GET_BLOCK_BY_NUMBER_RESPONSE,
beforeCompleting: (): void => {
// We are purposefully not awaiting this promise.
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
+
controller.setActiveNetwork('AAAA-AAAA-AAAA-AAAA');
},
},
@@ -2122,7 +2122,7 @@ describe('NetworkController', () => {
},
beforeCompleting: (): void => {
// We are purposefully not awaiting this promise.
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
+
controller.setActiveNetwork('AAAA-AAAA-AAAA-AAAA');
},
},
@@ -2215,7 +2215,7 @@ describe('NetworkController', () => {
error: BLOCKED_INFURA_JSON_RPC_ERROR,
beforeCompleting: (): void => {
// We are purposefully not awaiting this promise.
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
+
controller.setActiveNetwork('AAAA-AAAA-AAAA-AAAA');
},
},
@@ -2525,7 +2525,7 @@ describe('NetworkController', () => {
response: SUCCESSFUL_ETH_GET_BLOCK_BY_NUMBER_RESPONSE,
beforeCompleting: (): void => {
// We are purposefully not awaiting this promise.
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
+
controller.setProviderType(TESTNET.networkType);
},
},
@@ -2620,7 +2620,7 @@ describe('NetworkController', () => {
},
beforeCompleting: (): void => {
// We are purposefully not awaiting this promise.
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
+
controller.setProviderType(TESTNET.networkType);
},
},
@@ -2718,7 +2718,7 @@ describe('NetworkController', () => {
response: SUCCESSFUL_ETH_GET_BLOCK_BY_NUMBER_RESPONSE,
beforeCompleting: (): void => {
// We are purposefully not awaiting this promise.
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
+
controller.setProviderType(TESTNET.networkType);
},
},
@@ -13505,7 +13505,7 @@ describe('NetworkController', () => {
operation: () => {
// Intentionally not awaited because we're capturing an event
// emitted partway through the operation
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
+
controller.rollbackToPreviousProvider();
},
});
@@ -13548,7 +13548,7 @@ describe('NetworkController', () => {
// Intentionally not awaited because we're capturing an event
// emitted partway through the operation
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
+
controller.rollbackToPreviousProvider();
},
});
@@ -13681,7 +13681,7 @@ describe('NetworkController', () => {
operation: () => {
// Intentionally not awaited because we want to check state
// while this operation is in-progress
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
+
controller.rollbackToPreviousProvider();
},
beforeResolving: () => {
@@ -14094,7 +14094,7 @@ describe('NetworkController', () => {
operation: () => {
// Intentionally not awaited because we're capturing an event
// emitted partway through the operation
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
+
controller.rollbackToPreviousProvider();
},
});
@@ -14139,7 +14139,7 @@ describe('NetworkController', () => {
operation: () => {
// Intentionally not awaited because we're capturing an event
// emitted partway through the operation
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
+
controller.rollbackToPreviousProvider();
},
});
@@ -14275,7 +14275,7 @@ describe('NetworkController', () => {
operation: () => {
// Intentionally not awaited because we want to check state
// while this operation is in-progress
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
+
controller.rollbackToPreviousProvider();
},
beforeResolving: () => {
diff --git a/packages/network-controller/tests/helpers.ts b/packages/network-controller/tests/helpers.ts
index a46c7cdf78b..d627c23bd85 100644
--- a/packages/network-controller/tests/helpers.ts
+++ b/packages/network-controller/tests/helpers.ts
@@ -17,11 +17,11 @@ import type {
import type { Hex } from '@metamask/utils';
import { v4 as uuidV4 } from 'uuid';
-import { FakeBlockTracker } from '../../../tests/fake-block-tracker';
-import { FakeProvider } from '../../../tests/fake-provider';
-import type { FakeProviderStub } from '../../../tests/fake-provider';
-import { buildTestObject } from '../../../tests/helpers';
-import { NetworkController } from '../src';
+import { FakeBlockTracker } from '../../../tests/fake-block-tracker.js';
+import { FakeProvider } from '../../../tests/fake-provider.js';
+import type { FakeProviderStub } from '../../../tests/fake-provider.js';
+import { buildTestObject } from '../../../tests/helpers.js';
+import { NetworkController } from '../src.js';
import type {
BuiltInNetworkClientId,
CustomNetworkClientId,
@@ -29,8 +29,8 @@ import type {
NetworkClientConfiguration,
NetworkClientId,
NetworkConfiguration,
-} from '../src';
-import type { AutoManagedNetworkClient } from '../src/create-auto-managed-network-client';
+} from '../src.js';
+import type { AutoManagedNetworkClient } from '../src/create-auto-managed-network-client.js';
import type {
AddNetworkCustomRpcEndpointFields,
AddNetworkFields,
@@ -39,15 +39,15 @@ import type {
NetworkControllerMessenger,
NetworkControllerOptions,
UpdateNetworkCustomRpcEndpointFields,
-} from '../src/NetworkController';
-import { RpcEndpointType } from '../src/NetworkController';
-import { RpcServiceOptions } from '../src/rpc-service/rpc-service';
-import type { RpcFailoverMode } from '../src/selectors';
+} from '../src/NetworkController.js';
+import { RpcEndpointType } from '../src/NetworkController.js';
+import { RpcServiceOptions } from '../src/rpc-service/rpc-service.js';
+import type { RpcFailoverMode } from '../src/selectors.js';
import type {
CustomNetworkClientConfiguration,
InfuraNetworkClientConfiguration,
-} from '../src/types';
-import { NetworkClientType } from '../src/types';
+} from '../src/types.js';
+import { NetworkClientType } from '../src/types.js';
export type AllNetworkControllerActions =
MessengerActions;
diff --git a/packages/network-controller/tests/network-client/block-hash-in-response.ts b/packages/network-controller/tests/network-client/block-hash-in-response.ts
index 160d93da280..aeaa641bbf2 100644
--- a/packages/network-controller/tests/network-client/block-hash-in-response.ts
+++ b/packages/network-controller/tests/network-client/block-hash-in-response.ts
@@ -1,14 +1,14 @@
import { errorCodes, rpcErrors } from '@metamask/rpc-errors';
-import { CUSTOM_RPC_ERRORS } from '../../src/rpc-service/rpc-service';
-import { NetworkClientType } from '../../src/types';
-import type { ProviderType } from './helpers';
+import { CUSTOM_RPC_ERRORS } from '../../src/rpc-service/rpc-service.js';
+import { NetworkClientType } from '../../src/types.js';
+import type { ProviderType } from './helpers.js';
import {
waitForPromiseToBeFulfilledAfterRunningAllTimers,
withMockedCommunications,
withNetworkClient,
-} from './helpers';
-import { testsForRpcFailoverBehavior } from './rpc-failover';
+} from './helpers.js';
+import { testsForRpcFailoverBehavior } from './rpc-failover.js';
type TestsForRpcMethodThatCheckForBlockHashInResponseOptions = {
providerType: ProviderType;
diff --git a/packages/network-controller/tests/network-client/block-param.ts b/packages/network-controller/tests/network-client/block-param.ts
index 2b8a6cf980e..5b0e206c7ee 100644
--- a/packages/network-controller/tests/network-client/block-param.ts
+++ b/packages/network-controller/tests/network-client/block-param.ts
@@ -1,17 +1,17 @@
import { errorCodes, rpcErrors } from '@metamask/rpc-errors';
import type { Hex } from '@metamask/utils';
-import { CUSTOM_RPC_ERRORS } from '../../src/rpc-service/rpc-service';
-import { NetworkClientType } from '../../src/types';
-import type { MockRequest, ProviderType } from './helpers';
+import { CUSTOM_RPC_ERRORS } from '../../src/rpc-service/rpc-service.js';
+import { NetworkClientType } from '../../src/types.js';
+import type { MockRequest, ProviderType } from './helpers.js';
import {
buildMockParams,
buildRequestWithReplacedBlockParam,
waitForPromiseToBeFulfilledAfterRunningAllTimers,
withMockedCommunications,
withNetworkClient,
-} from './helpers';
-import { testsForRpcFailoverBehavior } from './rpc-failover';
+} from './helpers.js';
+import { testsForRpcFailoverBehavior } from './rpc-failover.js';
type TestsForRpcMethodSupportingBlockParam = {
providerType: ProviderType;
diff --git a/packages/network-controller/tests/network-client/helpers.ts b/packages/network-controller/tests/network-client/helpers.ts
index 83bff9e1477..850026dc21c 100644
--- a/packages/network-controller/tests/network-client/helpers.ts
+++ b/packages/network-controller/tests/network-client/helpers.ts
@@ -10,20 +10,20 @@ import type { Hex, Json, JsonRpcRequest } from '@metamask/utils';
import nock, { isDone as nockIsDone } from 'nock';
import type { Scope as NockScope } from 'nock';
-import { createNetworkClient } from '../../src/create-network-client';
+import { createNetworkClient } from '../../src/create-network-client.js';
import type {
NetworkClientId,
NetworkControllerOptions,
-} from '../../src/NetworkController';
-import type { RpcServiceOptions } from '../../src/rpc-service/rpc-service';
-import type { RpcFailoverMode } from '../../src/selectors';
-import type { NetworkClientConfiguration, Provider } from '../../src/types';
-import { NetworkClientType } from '../../src/types';
-import type { RootMessenger } from '../helpers';
+} from '../../src/NetworkController.js';
+import type { RpcServiceOptions } from '../../src/rpc-service/rpc-service.js';
+import type { RpcFailoverMode } from '../../src/selectors.js';
+import type { NetworkClientConfiguration, Provider } from '../../src/types.js';
+import { NetworkClientType } from '../../src/types.js';
+import type { RootMessenger } from '../helpers.js';
import {
buildNetworkControllerMessenger,
buildRootMessenger,
-} from '../helpers';
+} from '../helpers.js';
/**
* A dummy value for the `infuraProjectId` option that `createInfuraClient`
diff --git a/packages/network-controller/tests/network-client/no-block-param.ts b/packages/network-controller/tests/network-client/no-block-param.ts
index d5e47951d71..14d5efb8fe2 100644
--- a/packages/network-controller/tests/network-client/no-block-param.ts
+++ b/packages/network-controller/tests/network-client/no-block-param.ts
@@ -1,14 +1,14 @@
import { errorCodes, rpcErrors } from '@metamask/rpc-errors';
-import { CUSTOM_RPC_ERRORS } from '../../src/rpc-service/rpc-service';
-import { NetworkClientType } from '../../src/types';
-import type { ProviderType } from './helpers';
+import { CUSTOM_RPC_ERRORS } from '../../src/rpc-service/rpc-service.js';
+import { NetworkClientType } from '../../src/types.js';
+import type { ProviderType } from './helpers.js';
import {
waitForPromiseToBeFulfilledAfterRunningAllTimers,
withMockedCommunications,
withNetworkClient,
-} from './helpers';
-import { testsForRpcFailoverBehavior } from './rpc-failover';
+} from './helpers.js';
+import { testsForRpcFailoverBehavior } from './rpc-failover.js';
type TestsForRpcMethodAssumingNoBlockParamOptions = {
providerType: ProviderType;
diff --git a/packages/network-controller/tests/network-client/not-handled-by-middleware.ts b/packages/network-controller/tests/network-client/not-handled-by-middleware.ts
index 2dee8f3e85b..e7af4e0f45e 100644
--- a/packages/network-controller/tests/network-client/not-handled-by-middleware.ts
+++ b/packages/network-controller/tests/network-client/not-handled-by-middleware.ts
@@ -1,7 +1,7 @@
-import { fill } from 'lodash';
+import { fill } from 'lodash-es';
-import type { ProviderType } from './helpers';
-import { withMockedCommunications, withNetworkClient } from './helpers';
+import type { ProviderType } from './helpers.js';
+import { withMockedCommunications, withNetworkClient } from './helpers.js';
type TestsForRpcMethodNotHandledByMiddlewareOptions = {
providerType: ProviderType;
diff --git a/packages/network-controller/tests/network-client/rpc-failover.ts b/packages/network-controller/tests/network-client/rpc-failover.ts
index ad4b9dd83ba..e0eec3c98ef 100644
--- a/packages/network-controller/tests/network-client/rpc-failover.ts
+++ b/packages/network-controller/tests/network-client/rpc-failover.ts
@@ -1,10 +1,10 @@
import { ConstantBackoff } from '@metamask/controller-utils';
import type { Hex } from '@metamask/utils';
-import { ignoreRejection } from '../../../../tests/helpers';
-import { buildRootMessenger } from '../helpers';
-import type { MockRequest, MockResponse, ProviderType } from './helpers';
-import { withMockedCommunications, withNetworkClient } from './helpers';
+import { ignoreRejection } from '../../../../tests/helpers.js';
+import { buildRootMessenger } from '../helpers.js';
+import type { MockRequest, MockResponse, ProviderType } from './helpers.js';
+import { withMockedCommunications, withNetworkClient } from './helpers.js';
/**
* Tests for RPC failover behavior.
diff --git a/packages/network-enablement-controller/jest.config.js b/packages/network-enablement-controller/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/network-enablement-controller/jest.config.js
+++ b/packages/network-enablement-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/network-enablement-controller/package.json b/packages/network-enablement-controller/package.json
index 77d0869cd33..2a178da0e4b 100644
--- a/packages/network-enablement-controller/package.json
+++ b/packages/network-enablement-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/network-enablement-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/network-enablement-controller",
@@ -68,7 +61,6 @@
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/network-enablement-controller/src/NetworkEnablementController-method-action-types.ts b/packages/network-enablement-controller/src/NetworkEnablementController-method-action-types.ts
index b3245a03936..4301ca30cad 100644
--- a/packages/network-enablement-controller/src/NetworkEnablementController-method-action-types.ts
+++ b/packages/network-enablement-controller/src/NetworkEnablementController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { NetworkEnablementController } from './NetworkEnablementController';
+import type { NetworkEnablementController } from './NetworkEnablementController.js';
/**
* Enables or disables a network for the user.
diff --git a/packages/network-enablement-controller/src/NetworkEnablementController.test.ts b/packages/network-enablement-controller/src/NetworkEnablementController.test.ts
index 410e68a089a..035579dc846 100644
--- a/packages/network-enablement-controller/src/NetworkEnablementController.test.ts
+++ b/packages/network-enablement-controller/src/NetworkEnablementController.test.ts
@@ -14,14 +14,14 @@ import type { TransactionMeta } from '@metamask/transaction-controller';
import { KnownCaipNamespace } from '@metamask/utils';
import type { CaipChainId, CaipNamespace, Hex } from '@metamask/utils';
-import { jestAdvanceTime } from '../../../tests/helpers';
-import { POPULAR_NETWORKS } from './constants';
-import { NetworkEnablementController } from './NetworkEnablementController';
+import { jestAdvanceTime } from '../../../tests/helpers.js';
+import { POPULAR_NETWORKS } from './constants.js';
+import { NetworkEnablementController } from './NetworkEnablementController.js';
import type {
NetworkEnablementControllerMessenger,
NativeAssetIdentifiersMap,
-} from './NetworkEnablementController';
-import { Slip44Service } from './services';
+} from './NetworkEnablementController.js';
+import { Slip44Service } from './services.js';
// Known chainId mappings from chainid.network for mocking
const chainIdToSlip44: Record = {
diff --git a/packages/network-enablement-controller/src/NetworkEnablementController.ts b/packages/network-enablement-controller/src/NetworkEnablementController.ts
index 844955887c5..5417b4d08de 100644
--- a/packages/network-enablement-controller/src/NetworkEnablementController.ts
+++ b/packages/network-enablement-controller/src/NetworkEnablementController.ts
@@ -18,14 +18,14 @@ import type { TransactionControllerTransactionSubmittedEvent } from '@metamask/t
import type { CaipChainId, CaipNamespace, Hex } from '@metamask/utils';
import { KnownCaipNamespace } from '@metamask/utils';
-import { POPULAR_NETWORKS } from './constants';
-import type { NetworkEnablementControllerMethodActions } from './NetworkEnablementController-method-action-types';
-import { Slip44Service } from './services';
+import { POPULAR_NETWORKS } from './constants.js';
+import type { NetworkEnablementControllerMethodActions } from './NetworkEnablementController-method-action-types.js';
+import { Slip44Service } from './services.js';
import {
deriveKeys,
isOnlyNetworkEnabledInNamespace,
isPopularNetwork,
-} from './utils';
+} from './utils.js';
const controllerName = 'NetworkEnablementController';
@@ -251,7 +251,6 @@ export class NetworkEnablementController extends BaseController<
messenger.registerMethodActionHandlers(this, MESSENGER_EXPOSED_METHODS);
messenger.subscribe('NetworkController:networkAdded', ({ chainId }) => {
- // eslint-disable-next-line no-void
void this.#onAddNetwork(chainId);
});
diff --git a/packages/network-enablement-controller/src/index.ts b/packages/network-enablement-controller/src/index.ts
index adf30c5d02b..9aeaa02ffb6 100644
--- a/packages/network-enablement-controller/src/index.ts
+++ b/packages/network-enablement-controller/src/index.ts
@@ -1,4 +1,4 @@
-export { NetworkEnablementController } from './NetworkEnablementController';
+export { NetworkEnablementController } from './NetworkEnablementController.js';
export type {
NetworkEnablementControllerState,
@@ -10,7 +10,7 @@ export type {
NativeAssetIdentifier,
NativeAssetIdentifiersMap,
NetworkConfig,
-} from './NetworkEnablementController';
+} from './NetworkEnablementController.js';
export type {
NetworkEnablementControllerEnableNetworkAction,
@@ -23,7 +23,7 @@ export type {
NetworkEnablementControllerListPopularEvmNetworksAction,
NetworkEnablementControllerListPopularMultichainNetworksAction,
NetworkEnablementControllerListPopularNetworksAction,
-} from './NetworkEnablementController-method-action-types';
+} from './NetworkEnablementController-method-action-types.js';
export {
selectEnabledNetworkMap,
@@ -33,6 +33,6 @@ export {
selectEnabledNetworksCount,
selectEnabledEvmNetworks,
selectEnabledSolanaNetworks,
-} from './selectors';
+} from './selectors.js';
-export { Slip44Service, getEvmSlip44, getSlip44BySymbol } from './services';
+export { Slip44Service, getEvmSlip44, getSlip44BySymbol } from './services.js';
diff --git a/packages/network-enablement-controller/src/selectors.test.ts b/packages/network-enablement-controller/src/selectors.test.ts
index 1410080bb47..ad6cda8fab2 100644
--- a/packages/network-enablement-controller/src/selectors.test.ts
+++ b/packages/network-enablement-controller/src/selectors.test.ts
@@ -1,6 +1,6 @@
import { KnownCaipNamespace } from '@metamask/utils';
-import type { NetworkEnablementControllerState } from './NetworkEnablementController';
+import type { NetworkEnablementControllerState } from './NetworkEnablementController.js';
import {
selectEnabledNetworkMap,
selectIsNetworkEnabled,
@@ -9,7 +9,7 @@ import {
selectEnabledNetworksCount,
selectEnabledEvmNetworks,
selectEnabledSolanaNetworks,
-} from './selectors';
+} from './selectors.js';
describe('NetworkEnablementController Selectors', () => {
const mockState: NetworkEnablementControllerState = {
diff --git a/packages/network-enablement-controller/src/selectors.ts b/packages/network-enablement-controller/src/selectors.ts
index dae9938a419..553940e6d5e 100644
--- a/packages/network-enablement-controller/src/selectors.ts
+++ b/packages/network-enablement-controller/src/selectors.ts
@@ -2,8 +2,8 @@ import type { CaipChainId, CaipNamespace, Hex } from '@metamask/utils';
import { KnownCaipNamespace } from '@metamask/utils';
import { createSelector } from 'reselect';
-import type { NetworkEnablementControllerState } from './NetworkEnablementController';
-import { deriveKeys } from './utils';
+import type { NetworkEnablementControllerState } from './NetworkEnablementController.js';
+import { deriveKeys } from './utils.js';
/**
* Base selector to get the enabled network map from the controller state.
diff --git a/packages/network-enablement-controller/src/services/Slip44Service.test.ts b/packages/network-enablement-controller/src/services/Slip44Service.test.ts
index 1263cb59a52..0f60a7afe8d 100644
--- a/packages/network-enablement-controller/src/services/Slip44Service.test.ts
+++ b/packages/network-enablement-controller/src/services/Slip44Service.test.ts
@@ -1,6 +1,6 @@
import { fetchWithErrorHandling } from '@metamask/controller-utils';
-import { Slip44Service } from './Slip44Service';
+import { Slip44Service } from './Slip44Service.js';
jest.mock('@metamask/controller-utils', () => ({
fetchWithErrorHandling: jest.fn(),
diff --git a/packages/network-enablement-controller/src/services/index.ts b/packages/network-enablement-controller/src/services/index.ts
index 5d87168f7ff..72bc55b9a5e 100644
--- a/packages/network-enablement-controller/src/services/index.ts
+++ b/packages/network-enablement-controller/src/services/index.ts
@@ -1,4 +1,4 @@
-import { Slip44Service } from './Slip44Service';
+import { Slip44Service } from './Slip44Service.js';
export { Slip44Service };
diff --git a/packages/network-enablement-controller/src/utils.test.ts b/packages/network-enablement-controller/src/utils.test.ts
index ed975ab5641..40844e326b3 100644
--- a/packages/network-enablement-controller/src/utils.test.ts
+++ b/packages/network-enablement-controller/src/utils.test.ts
@@ -1,11 +1,11 @@
import { KnownCaipNamespace } from '@metamask/utils';
-import type { NetworkEnablementControllerState } from './NetworkEnablementController';
+import type { NetworkEnablementControllerState } from './NetworkEnablementController.js';
import {
deriveKeys,
isOnlyNetworkEnabledInNamespace,
isPopularNetwork,
-} from './utils';
+} from './utils.js';
describe('Utils', () => {
describe('deriveKeys', () => {
diff --git a/packages/network-enablement-controller/src/utils.ts b/packages/network-enablement-controller/src/utils.ts
index 09973e01120..c7534f9ad90 100644
--- a/packages/network-enablement-controller/src/utils.ts
+++ b/packages/network-enablement-controller/src/utils.ts
@@ -8,8 +8,8 @@ import {
parseCaipChainId,
} from '@metamask/utils';
-import { POPULAR_NETWORKS } from './constants';
-import type { NetworkEnablementControllerState } from './NetworkEnablementController';
+import { POPULAR_NETWORKS } from './constants.js';
+import type { NetworkEnablementControllerState } from './NetworkEnablementController.js';
/**
* Represents the parsed keys derived from a chain ID.
diff --git a/packages/notification-services-controller/jest.config.js b/packages/notification-services-controller/jest.config.js
index 91dccc79ab3..7036fa5bb41 100644
--- a/packages/notification-services-controller/jest.config.js
+++ b/packages/notification-services-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/notification-services-controller/package.json b/packages/notification-services-controller/package.json
index 8447fc1d8b6..dddd4a67f85 100644
--- a/packages/notification-services-controller/package.json
+++ b/packages/notification-services-controller/package.json
@@ -20,69 +20,32 @@
"notification-services/",
"push-services/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./notification-services": {
- "import": {
- "types": "./dist/NotificationServicesController/index.d.mts",
- "default": "./dist/NotificationServicesController/index.mjs"
- },
- "require": {
- "types": "./dist/NotificationServicesController/index.d.cts",
- "default": "./dist/NotificationServicesController/index.cjs"
- }
+ "types": "./dist/NotificationServicesController/index.d.ts",
+ "import": "./dist/NotificationServicesController/index.js"
},
"./notification-services/mocks": {
- "import": {
- "types": "./dist/NotificationServicesController/mocks/index.d.mts",
- "default": "./dist/NotificationServicesController/mocks/index.mjs"
- },
- "require": {
- "types": "./dist/NotificationServicesController/mocks/index.d.cts",
- "default": "./dist/NotificationServicesController/mocks/index.cjs"
- }
+ "types": "./dist/NotificationServicesController/mocks/index.d.ts",
+ "import": "./dist/NotificationServicesController/mocks/index.js"
},
"./push-services": {
- "import": {
- "types": "./dist/NotificationServicesPushController/index.d.mts",
- "default": "./dist/NotificationServicesPushController/index.mjs"
- },
- "require": {
- "types": "./dist/NotificationServicesPushController/index.d.cts",
- "default": "./dist/NotificationServicesPushController/index.cjs"
- }
+ "types": "./dist/NotificationServicesPushController/index.d.ts",
+ "import": "./dist/NotificationServicesPushController/index.js"
},
"./push-services/web": {
- "import": {
- "types": "./dist/NotificationServicesPushController/web/index.d.mts",
- "default": "./dist/NotificationServicesPushController/web/index.mjs"
- },
- "require": {
- "types": "./dist/NotificationServicesPushController/web/index.d.cts",
- "default": "./dist/NotificationServicesPushController/web/index.cjs"
- }
+ "types": "./dist/NotificationServicesPushController/web/index.d.ts",
+ "import": "./dist/NotificationServicesPushController/web/index.js"
},
"./push-services/mocks": {
- "import": {
- "types": "./dist/NotificationServicesPushController/mocks/index.d.mts",
- "default": "./dist/NotificationServicesPushController/mocks/index.mjs"
- },
- "require": {
- "types": "./dist/NotificationServicesPushController/mocks/index.d.cts",
- "default": "./dist/NotificationServicesPushController/mocks/index.cjs"
- }
+ "types": "./dist/NotificationServicesPushController/mocks/index.d.ts",
+ "import": "./dist/NotificationServicesPushController/mocks/index.js"
},
"./package.json": "./package.json"
},
@@ -91,8 +54,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/notification-services-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/notification-services-controller",
@@ -117,7 +80,7 @@
"@metamask/utils": "^11.11.0",
"bignumber.js": "^9.1.2",
"firebase": "^11.2.0",
- "lodash": "^4.17.21",
+ "lodash-es": "^4.17.21",
"loglevel": "^1.8.1",
"semver": "^7.6.3",
"uuid": "^8.3.2"
@@ -126,7 +89,6 @@
"@lavamoat/allow-scripts": "^3.0.4",
"@lavamoat/preinstall-always-fail": "^2.1.0",
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"@types/lodash": "^4.14.191",
"@types/readable-stream": "^2.3.0",
diff --git a/packages/notification-services-controller/src/NotificationServicesController/NotificationServicesController-method-action-types.ts b/packages/notification-services-controller/src/NotificationServicesController/NotificationServicesController-method-action-types.ts
index 92eeee08c5e..c4f85cec6cb 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/NotificationServicesController-method-action-types.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/NotificationServicesController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { NotificationServicesController } from './NotificationServicesController';
+import type { NotificationServicesController } from './NotificationServicesController.js';
export type NotificationServicesControllerInitAction = {
type: `NotificationServicesController:init`;
diff --git a/packages/notification-services-controller/src/NotificationServicesController/NotificationServicesController.test.ts b/packages/notification-services-controller/src/NotificationServicesController/NotificationServicesController.test.ts
index 8409d8c6ada..ae40cde18ab 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/NotificationServicesController.test.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/NotificationServicesController.test.ts
@@ -26,23 +26,27 @@ import type {
NotificationServicesPushControllerDeletePushNotificationLinksAction,
NotificationServicesPushControllerEnablePushNotificationsAction,
NotificationServicesPushControllerSubscribeToPushNotificationsAction,
-} from '../NotificationServicesPushController';
-import { ADDRESS_1, ADDRESS_2, ADDRESS_3 } from './__fixtures__/mockAddresses';
+} from '../NotificationServicesPushController.js';
+import {
+ ADDRESS_1,
+ ADDRESS_2,
+ ADDRESS_3,
+} from './__fixtures__/mockAddresses.js';
import {
mockGetOnChainNotificationsConfig,
mockGetAPINotifications,
mockFetchFeatureAnnouncementNotifications,
mockMarkNotificationsAsRead,
mockCreatePerpNotification,
-} from './__fixtures__/mockServices';
-import { waitFor } from './__fixtures__/test-utils';
-import { TRIGGER_TYPES } from './constants';
-import { createMockSnapNotification } from './mocks';
+} from './__fixtures__/mockServices.js';
+import { waitFor } from './__fixtures__/test-utils.js';
+import { TRIGGER_TYPES } from './constants.js';
+import { createMockSnapNotification } from './mocks.js';
import {
createMockFeatureAnnouncementAPIResult,
createMockFeatureAnnouncementRaw,
-} from './mocks/mock-feature-announcements';
-import { createMockNotificationEthSent } from './mocks/mock-raw-notifications';
+} from './mocks/mock-feature-announcements.js';
+import { createMockNotificationEthSent } from './mocks/mock-raw-notifications.js';
import {
DEFAULT_AGENTIC_CLI_PREFERENCES,
DEFAULT_PERPS_PREFERENCES,
@@ -51,16 +55,16 @@ import {
NotificationServicesController,
ACCOUNTS_UPDATE_DEBOUNCE_TIME_MS,
defaultState,
-} from './NotificationServicesController';
+} from './NotificationServicesController.js';
import type {
NotificationServicesControllerMessenger,
NotificationServicesControllerState,
-} from './NotificationServicesController';
-import { processFeatureAnnouncement } from './processors';
-import { processNotification } from './processors/process-notifications';
-import { processSnapNotification } from './processors/process-snap-notifications';
-import { notificationsConfigCache } from './services/notification-config-cache';
-import type { INotification, OrderInput } from './types';
+} from './NotificationServicesController.js';
+import { processFeatureAnnouncement } from './processors.js';
+import { processNotification } from './processors/process-notifications.js';
+import { processSnapNotification } from './processors/process-snap-notifications.js';
+import { notificationsConfigCache } from './services/notification-config-cache.js';
+import type { INotification, OrderInput } from './types.js';
// Mock type used for testing purposes
// eslint-disable-next-line @typescript-eslint/no-explicit-any
diff --git a/packages/notification-services-controller/src/NotificationServicesController/NotificationServicesController.ts b/packages/notification-services-controller/src/NotificationServicesController/NotificationServicesController.ts
index f973d76d06b..81d606c1e43 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/NotificationServicesController.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/NotificationServicesController.ts
@@ -31,34 +31,34 @@ import type { Messenger } from '@metamask/messenger';
import type { AuthenticationController } from '@metamask/profile-sync-controller';
import type { Hex } from '@metamask/utils';
import { assert } from '@metamask/utils';
-import { debounce } from 'lodash';
+import { debounce } from 'lodash-es';
import log from 'loglevel';
-import type { NormalisedAPINotification } from '.';
import type {
NotificationServicesPushControllerStateChangeEvent,
NotificationServicesPushControllerOnNewNotificationEvent,
-} from '../NotificationServicesPushController';
-import type { NotificationServicesPushControllerMethodActions } from '../NotificationServicesPushController/NotificationServicesPushController-method-action-types';
-import { TRIGGER_TYPES } from './constants/notification-schema';
-import type { NotificationServicesControllerMethodActions } from './NotificationServicesController-method-action-types';
+} from '../NotificationServicesPushController.js';
+import type { NotificationServicesPushControllerMethodActions } from '../NotificationServicesPushController/NotificationServicesPushController-method-action-types.js';
+import type { NormalisedAPINotification } from './..js';
+import { TRIGGER_TYPES } from './constants/notification-schema.js';
+import type { NotificationServicesControllerMethodActions } from './NotificationServicesController-method-action-types.js';
import {
processAndFilterNotifications,
safeProcessNotification,
-} from './processors/process-notifications';
-import type { ENV } from './services/api-notifications';
+} from './processors/process-notifications.js';
+import type { ENV } from './services/api-notifications.js';
import {
getAPINotifications,
getNotificationsApiConfigCached,
markNotificationsAsRead,
-} from './services/api-notifications';
-import { getFeatureAnnouncementNotifications } from './services/feature-announcements';
-import { createPerpOrderNotification } from './services/perp-notifications';
+} from './services/api-notifications.js';
+import { getFeatureAnnouncementNotifications } from './services/feature-announcements.js';
+import { createPerpOrderNotification } from './services/perp-notifications.js';
import type {
INotification,
MarkAsReadNotificationsParam,
-} from './types/notification/notification';
-import type { OrderInput } from './types/perps';
+} from './types/notification/notification.js';
+import type { OrderInput } from './types/perps.js';
// Unique name for the controller
const controllerName = 'NotificationServicesController';
@@ -692,7 +692,7 @@ export class NotificationServicesController extends BaseController<
this.messenger.subscribe(
'KeyringController:stateChange',
// Using void return for async callback - result is intentionally ignored
- // eslint-disable-next-line @typescript-eslint/no-misused-promises
+
debouncedUpdateAccountNotifications,
(state: KeyringControllerState): number => {
return (
diff --git a/packages/notification-services-controller/src/NotificationServicesController/__fixtures__/mockServices.ts b/packages/notification-services-controller/src/NotificationServicesController/__fixtures__/mockServices.ts
index 449383d1921..bdab54c3f6d 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/__fixtures__/mockServices.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/__fixtures__/mockServices.ts
@@ -6,7 +6,7 @@ import {
getMockListNotificationsResponse,
getMockMarkNotificationsAsReadResponse,
getMockCreatePerpOrderNotification,
-} from '../mocks/mockResponses';
+} from '../mocks/mockResponses.js';
type MockReply = {
status: nock.StatusCode;
diff --git a/packages/notification-services-controller/src/NotificationServicesController/constants/index.ts b/packages/notification-services-controller/src/NotificationServicesController/constants/index.ts
index f4c592754f1..4d8d6f37b13 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/constants/index.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/constants/index.ts
@@ -1 +1 @@
-export * from './notification-schema';
+export * from './notification-schema.js';
diff --git a/packages/notification-services-controller/src/NotificationServicesController/index.ts b/packages/notification-services-controller/src/NotificationServicesController/index.ts
index 745d6f723eb..60beff139e0 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/index.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/index.ts
@@ -1,17 +1,17 @@
-import { NotificationServicesController } from './NotificationServicesController';
+import { NotificationServicesController } from './NotificationServicesController.js';
export { NotificationServicesController as Controller };
export default NotificationServicesController;
-export * from './NotificationServicesController';
-export type * as Types from './types';
-export type * from './types';
-export * as Processors from './processors';
-export * from './processors';
-export * as Constants from './constants';
-export * from './constants';
-export * as Mocks from './mocks';
-export * from '../shared';
-export { isVersionInBounds } from './utils/isVersionInBounds';
+export * from './NotificationServicesController.js';
+export type * as Types from './types.js';
+export type * from './types.js';
+export type * as Processors from './processors.js';
+export type * from './processors.js';
+export * as Constants from './constants.js';
+export * from './constants.js';
+export * as Mocks from './mocks.js';
+export type * from '../shared.js';
+export { isVersionInBounds } from './utils/isVersionInBounds.js';
export type {
NotificationServicesControllerInitAction,
@@ -31,4 +31,4 @@ export type {
NotificationServicesControllerMarkMetamaskNotificationsAsReadAction,
NotificationServicesControllerUpdateMetamaskNotificationsListAction,
NotificationServicesControllerSendPerpPlaceOrderNotificationAction,
-} from './NotificationServicesController-method-action-types';
+} from './NotificationServicesController-method-action-types.js';
diff --git a/packages/notification-services-controller/src/NotificationServicesController/mocks/index.ts b/packages/notification-services-controller/src/NotificationServicesController/mocks/index.ts
index fbd22ca1f50..7d3df3199ff 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/mocks/index.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/mocks/index.ts
@@ -1,4 +1,4 @@
-export * from './mock-feature-announcements';
-export * from './mock-raw-notifications';
-export * from './mockResponses';
-export * from './mock-snap-notification';
+export * from './mock-feature-announcements.js';
+export * from './mock-raw-notifications.js';
+export * from './mockResponses.js';
+export * from './mock-snap-notification.js';
diff --git a/packages/notification-services-controller/src/NotificationServicesController/mocks/mock-feature-announcements.ts b/packages/notification-services-controller/src/NotificationServicesController/mocks/mock-feature-announcements.ts
index 63c6258964b..21e56537a2e 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/mocks/mock-feature-announcements.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/mocks/mock-feature-announcements.ts
@@ -1,6 +1,6 @@
-import { TRIGGER_TYPES } from '../constants/notification-schema';
-import type { ContentfulResult } from '../services/feature-announcements';
-import type { FeatureAnnouncementRawNotification } from '../types/feature-announcement/feature-announcement';
+import { TRIGGER_TYPES } from '../constants/notification-schema.js';
+import type { ContentfulResult } from '../services/feature-announcements.js';
+import type { FeatureAnnouncementRawNotification } from '../types/feature-announcement/feature-announcement.js';
/**
* Mocking Utility - create a mock normalized feature announcement
diff --git a/packages/notification-services-controller/src/NotificationServicesController/mocks/mock-raw-notifications.ts b/packages/notification-services-controller/src/NotificationServicesController/mocks/mock-raw-notifications.ts
index 01f2bb33968..5e493fe25c7 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/mocks/mock-raw-notifications.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/mocks/mock-raw-notifications.ts
@@ -1,5 +1,5 @@
-import { TRIGGER_TYPES } from '../constants/notification-schema';
-import type { NormalisedAPINotification } from '../types/notification-api/notification-api';
+import { TRIGGER_TYPES } from '../constants/notification-schema.js';
+import type { NormalisedAPINotification } from '../types/notification-api/notification-api.js';
/**
* Mocking Utility - create a mock Eth sent notification
diff --git a/packages/notification-services-controller/src/NotificationServicesController/mocks/mock-snap-notification.ts b/packages/notification-services-controller/src/NotificationServicesController/mocks/mock-snap-notification.ts
index d6d694179f2..fe6b4969e61 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/mocks/mock-snap-notification.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/mocks/mock-snap-notification.ts
@@ -1,5 +1,5 @@
-import { TRIGGER_TYPES } from '../constants';
-import type { RawSnapNotification } from '../types/snaps';
+import { TRIGGER_TYPES } from '../constants.js';
+import type { RawSnapNotification } from '../types/snaps.js';
/**
* Mocking Utility - create a mock raw snap notification
diff --git a/packages/notification-services-controller/src/NotificationServicesController/mocks/mockResponses.ts b/packages/notification-services-controller/src/NotificationServicesController/mocks/mockResponses.ts
index f6bd4773013..279067a5f0b 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/mocks/mockResponses.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/mocks/mockResponses.ts
@@ -2,11 +2,11 @@ import {
NOTIFICATION_API_LIST_ENDPOINT,
NOTIFICATION_API_MARK_ALL_AS_READ_ENDPOINT,
TRIGGER_API_NOTIFICATIONS_QUERY_ENDPOINT,
-} from '../services/api-notifications';
-import { FEATURE_ANNOUNCEMENT_API } from '../services/feature-announcements';
-import { PERPS_API_CREATE_ORDERS } from '../services/perp-notifications';
-import { createMockFeatureAnnouncementAPIResult } from './mock-feature-announcements';
-import { createMockRawOnChainNotifications } from './mock-raw-notifications';
+} from '../services/api-notifications.js';
+import { FEATURE_ANNOUNCEMENT_API } from '../services/feature-announcements.js';
+import { PERPS_API_CREATE_ORDERS } from '../services/perp-notifications.js';
+import { createMockFeatureAnnouncementAPIResult } from './mock-feature-announcements.js';
+import { createMockRawOnChainNotifications } from './mock-raw-notifications.js';
type MockResponse = {
url: string;
diff --git a/packages/notification-services-controller/src/NotificationServicesController/processors/index.ts b/packages/notification-services-controller/src/NotificationServicesController/processors/index.ts
index fdd06a7c4b9..2848622e294 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/processors/index.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/processors/index.ts
@@ -1,3 +1,3 @@
-export * from './process-feature-announcement';
-export * from './process-notifications';
-export * from './process-api-notifications';
+export * from './process-feature-announcement.js';
+export * from './process-notifications.js';
+export * from './process-api-notifications.js';
diff --git a/packages/notification-services-controller/src/NotificationServicesController/processors/process-api-notifications.test.ts b/packages/notification-services-controller/src/NotificationServicesController/processors/process-api-notifications.test.ts
index 44eb12139ae..7cc7d06633a 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/processors/process-api-notifications.test.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/processors/process-api-notifications.test.ts
@@ -15,8 +15,8 @@ import {
createMockNotificationLidoWithdrawalCompleted,
createMockNotificationLidoReadyToBeWithdrawn,
createMockPlatformNotification,
-} from '../mocks/mock-raw-notifications';
-import { processAPINotifications } from './process-api-notifications';
+} from '../mocks/mock-raw-notifications.js';
+import { processAPINotifications } from './process-api-notifications.js';
const rawNotifications = [
createMockNotificationEthSent(),
diff --git a/packages/notification-services-controller/src/NotificationServicesController/processors/process-api-notifications.ts b/packages/notification-services-controller/src/NotificationServicesController/processors/process-api-notifications.ts
index dac4f2ed38a..fa2283f1d51 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/processors/process-api-notifications.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/processors/process-api-notifications.ts
@@ -1,6 +1,6 @@
-import type { NormalisedAPINotification } from '../types/notification-api/notification-api';
-import type { INotification } from '../types/notification/notification';
-import { shouldAutoExpire } from '../utils/should-auto-expire';
+import type { NormalisedAPINotification } from '../types/notification-api/notification-api.js';
+import type { INotification } from '../types/notification/notification.js';
+import { shouldAutoExpire } from '../utils/should-auto-expire.js';
/**
* Processes API notifications to a normalized INotification shape
diff --git a/packages/notification-services-controller/src/NotificationServicesController/processors/process-feature-announcement.test.ts b/packages/notification-services-controller/src/NotificationServicesController/processors/process-feature-announcement.test.ts
index a9777c7f734..499d85fa9fc 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/processors/process-feature-announcement.test.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/processors/process-feature-announcement.test.ts
@@ -1,10 +1,10 @@
-import type { INotification } from '..';
-import { TRIGGER_TYPES } from '../constants/notification-schema';
-import { createMockFeatureAnnouncementRaw } from '../mocks/mock-feature-announcements';
+import { TRIGGER_TYPES } from '../constants/notification-schema.js';
+import { createMockFeatureAnnouncementRaw } from '../mocks/mock-feature-announcements.js';
+import type { INotification } from './...js';
import {
isFeatureAnnouncementRead,
processFeatureAnnouncement,
-} from './process-feature-announcement';
+} from './process-feature-announcement.js';
describe('process-feature-announcement - isFeatureAnnouncementRead()', () => {
const MOCK_NOTIFICATION_ID = 'MOCK_NOTIFICATION_ID';
diff --git a/packages/notification-services-controller/src/NotificationServicesController/processors/process-feature-announcement.ts b/packages/notification-services-controller/src/NotificationServicesController/processors/process-feature-announcement.ts
index 7033e0451f6..68fb7892733 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/processors/process-feature-announcement.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/processors/process-feature-announcement.ts
@@ -1,6 +1,6 @@
-import type { FeatureAnnouncementRawNotification } from '../types/feature-announcement/feature-announcement';
-import type { INotification } from '../types/notification/notification';
-import { shouldAutoExpire } from '../utils/should-auto-expire';
+import type { FeatureAnnouncementRawNotification } from '../types/feature-announcement/feature-announcement.js';
+import type { INotification } from '../types/notification/notification.js';
+import { shouldAutoExpire } from '../utils/should-auto-expire.js';
/**
* Checks if a feature announcement should be read.
diff --git a/packages/notification-services-controller/src/NotificationServicesController/processors/process-notifications.test.ts b/packages/notification-services-controller/src/NotificationServicesController/processors/process-notifications.test.ts
index 190e0f9f715..62b29605e3b 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/processors/process-notifications.test.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/processors/process-notifications.test.ts
@@ -1,14 +1,14 @@
-import type { TRIGGER_TYPES } from '../constants/notification-schema';
-import { createMockFeatureAnnouncementRaw } from '../mocks/mock-feature-announcements';
+import type { TRIGGER_TYPES } from '../constants/notification-schema.js';
+import { createMockFeatureAnnouncementRaw } from '../mocks/mock-feature-announcements.js';
import {
createMockNotificationEthSent,
createMockPlatformNotification,
-} from '../mocks/mock-raw-notifications';
-import { createMockSnapNotification } from '../mocks/mock-snap-notification';
+} from '../mocks/mock-raw-notifications.js';
+import { createMockSnapNotification } from '../mocks/mock-snap-notification.js';
import {
processNotification,
safeProcessNotification,
-} from './process-notifications';
+} from './process-notifications.js';
describe('process-notifications - processNotification()', () => {
// More thorough tests are found in the specific process
diff --git a/packages/notification-services-controller/src/NotificationServicesController/processors/process-notifications.ts b/packages/notification-services-controller/src/NotificationServicesController/processors/process-notifications.ts
index 6e2bcd66a5f..1d322492be6 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/processors/process-notifications.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/processors/process-notifications.ts
@@ -1,20 +1,20 @@
import {
TRIGGER_TYPES,
NOTIFICATION_API_TRIGGER_TYPES_SET,
-} from '../constants/notification-schema';
-import type { FeatureAnnouncementRawNotification } from '../types/feature-announcement/feature-announcement';
-import type { NormalisedAPINotification } from '../types/notification-api/notification-api';
+} from '../constants/notification-schema.js';
+import type { FeatureAnnouncementRawNotification } from '../types/feature-announcement/feature-announcement.js';
+import type { NormalisedAPINotification } from '../types/notification-api/notification-api.js';
import type {
INotification,
RawNotificationUnion,
-} from '../types/notification/notification';
-import type { RawSnapNotification } from '../types/snaps';
-import { processAPINotifications } from './process-api-notifications';
+} from '../types/notification/notification.js';
+import type { RawSnapNotification } from '../types/snaps.js';
+import { processAPINotifications } from './process-api-notifications.js';
import {
isFeatureAnnouncementRead,
processFeatureAnnouncement,
-} from './process-feature-announcement';
-import { processSnapNotification } from './process-snap-notifications';
+} from './process-feature-announcement.js';
+import { processSnapNotification } from './process-snap-notifications.js';
const isOnChainNotification = (
notification: RawNotificationUnion,
diff --git a/packages/notification-services-controller/src/NotificationServicesController/processors/process-snap-notifications.test.ts b/packages/notification-services-controller/src/NotificationServicesController/processors/process-snap-notifications.test.ts
index 2c486691098..ee07c772db7 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/processors/process-snap-notifications.test.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/processors/process-snap-notifications.test.ts
@@ -1,7 +1,7 @@
-import type { INotification } from '..';
-import { TRIGGER_TYPES } from '../constants';
-import { createMockSnapNotification } from '../mocks';
-import { processSnapNotification } from './process-snap-notifications';
+import { TRIGGER_TYPES } from '../constants.js';
+import { createMockSnapNotification } from '../mocks.js';
+import type { INotification } from './...js';
+import { processSnapNotification } from './process-snap-notifications.js';
describe('process-snap-notifications - processSnapNotification()', () => {
it('processes a Raw Snap Notification to a shared Notification Type', () => {
diff --git a/packages/notification-services-controller/src/NotificationServicesController/processors/process-snap-notifications.ts b/packages/notification-services-controller/src/NotificationServicesController/processors/process-snap-notifications.ts
index 17227edaa67..ad2a77e76eb 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/processors/process-snap-notifications.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/processors/process-snap-notifications.ts
@@ -1,7 +1,7 @@
import { v4 as uuid } from 'uuid';
-import type { INotification } from '../types';
-import type { RawSnapNotification } from '../types/snaps';
+import type { INotification } from '../types.js';
+import type { RawSnapNotification } from '../types/snaps.js';
/**
* Processes a snap notification into a normalized shape.
diff --git a/packages/notification-services-controller/src/NotificationServicesController/services/api-notifications.test.ts b/packages/notification-services-controller/src/NotificationServicesController/services/api-notifications.test.ts
index 0fb4c9d5660..da1c63915bb 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/services/api-notifications.test.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/services/api-notifications.test.ts
@@ -2,12 +2,12 @@ import {
mockGetOnChainNotificationsConfig,
mockGetAPINotifications,
mockMarkNotificationsAsRead,
-} from '../__fixtures__/mockServices';
+} from '../__fixtures__/mockServices.js';
import {
createMockNotificationERC20Sent,
createMockPlatformNotification,
-} from '../mocks';
-import * as OnChainNotifications from './api-notifications';
+} from '../mocks.js';
+import * as OnChainNotifications from './api-notifications.js';
const MOCK_BEARER_TOKEN = 'MOCK_BEARER_TOKEN';
const MOCK_ADDRESSES = ['0x123', '0x456', '0x789'];
diff --git a/packages/notification-services-controller/src/NotificationServicesController/services/api-notifications.ts b/packages/notification-services-controller/src/NotificationServicesController/services/api-notifications.ts
index f4cedf54353..b76ade11f6f 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/services/api-notifications.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/services/api-notifications.ts
@@ -1,13 +1,13 @@
import log from 'loglevel';
-import { toRawAPINotification } from '../../shared/to-raw-notification';
+import { toRawAPINotification } from '../../shared/to-raw-notification.js';
import type {
NormalisedAPINotification,
Schema,
UnprocessedRawNotification,
-} from '../types/notification-api';
-import { makeApiCall } from '../utils/utils';
-import { notificationsConfigCache } from './notification-config-cache';
+} from '../types/notification-api.js';
+import { makeApiCall } from '../utils/utils.js';
+import { notificationsConfigCache } from './notification-config-cache.js';
export type ENV = 'prd' | 'uat' | 'dev';
diff --git a/packages/notification-services-controller/src/NotificationServicesController/services/feature-announcements.test.ts b/packages/notification-services-controller/src/NotificationServicesController/services/feature-announcements.test.ts
index 27c9dc4c3ea..16b5820131a 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/services/feature-announcements.test.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/services/feature-announcements.test.ts
@@ -1,12 +1,12 @@
-import type { INotification } from '..';
-import { mockFetchFeatureAnnouncementNotifications } from '../__fixtures__/mockServices';
-import { TRIGGER_TYPES } from '../constants/notification-schema';
-import { createMockFeatureAnnouncementAPIResult } from '../mocks/mock-feature-announcements';
+import { mockFetchFeatureAnnouncementNotifications } from '../__fixtures__/mockServices.js';
+import { TRIGGER_TYPES } from '../constants/notification-schema.js';
+import { createMockFeatureAnnouncementAPIResult } from '../mocks/mock-feature-announcements.js';
+import type { INotification } from './...js';
import {
ContentfulResult,
getFeatureAnnouncementNotifications,
getFeatureAnnouncementUrl,
-} from './feature-announcements';
+} from './feature-announcements.js';
// Mocked type for testing, allows overwriting TS to test erroneous values
// eslint-disable-next-line @typescript-eslint/no-explicit-any
diff --git a/packages/notification-services-controller/src/NotificationServicesController/services/feature-announcements.ts b/packages/notification-services-controller/src/NotificationServicesController/services/feature-announcements.ts
index bd84e3ebe41..caddc8e8001 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/services/feature-announcements.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/services/feature-announcements.ts
@@ -1,21 +1,21 @@
import { documentToHtmlString } from '@contentful/rich-text-html-renderer';
import type { Entry, Asset, EntryCollection } from 'contentful';
-import { TRIGGER_TYPES } from '../constants/notification-schema';
-import { processFeatureAnnouncement } from '../processors/process-feature-announcement';
-import type { FeatureAnnouncementRawNotification } from '../types/feature-announcement/feature-announcement';
+import { TRIGGER_TYPES } from '../constants/notification-schema.js';
+import { processFeatureAnnouncement } from '../processors/process-feature-announcement.js';
+import type { FeatureAnnouncementRawNotification } from '../types/feature-announcement/feature-announcement.js';
import type {
ImageFields,
TypeFeatureAnnouncement,
-} from '../types/feature-announcement/type-feature-announcement';
+} from '../types/feature-announcement/type-feature-announcement.js';
import type {
TypeExternalLinkFields,
TypePortfolioLinkFields,
TypeExtensionLinkFields,
TypeMobileLinkFields,
-} from '../types/feature-announcement/type-links';
-import type { INotification } from '../types/notification/notification';
-import { isVersionInBounds } from '../utils/isVersionInBounds';
+} from '../types/feature-announcement/type-links.js';
+import type { INotification } from '../types/notification/notification.js';
+import { isVersionInBounds } from '../utils/isVersionInBounds.js';
// Feature announcements older than this (by sys.updatedAt) are excluded from the feed.
const FEATURE_ANNOUNCEMENT_MAX_AGE_MONTHS = 3;
diff --git a/packages/notification-services-controller/src/NotificationServicesController/services/notification-config-cache.test.ts b/packages/notification-services-controller/src/NotificationServicesController/services/notification-config-cache.test.ts
index 0cc3f590ba2..9abe67f64f8 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/services/notification-config-cache.test.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/services/notification-config-cache.test.ts
@@ -1,7 +1,7 @@
import {
OnChainNotificationsCache,
NotificationConfigCacheTTL,
-} from './notification-config-cache';
+} from './notification-config-cache.js';
describe('OnChainNotificationsCache', () => {
// Create a fresh instance for each test to avoid interference
diff --git a/packages/notification-services-controller/src/NotificationServicesController/services/perp-notifications.test.ts b/packages/notification-services-controller/src/NotificationServicesController/services/perp-notifications.test.ts
index 15202f43704..1e848128ae3 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/services/perp-notifications.test.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/services/perp-notifications.test.ts
@@ -1,6 +1,6 @@
-import { mockCreatePerpNotification } from '../__fixtures__/mockServices';
-import type { OrderInput } from '../types/perps';
-import { createPerpOrderNotification } from './perp-notifications';
+import { mockCreatePerpNotification } from '../__fixtures__/mockServices.js';
+import type { OrderInput } from '../types/perps.js';
+import { createPerpOrderNotification } from './perp-notifications.js';
const mockOrderInput = (): OrderInput => ({
user_id: '0x111', // User Address
diff --git a/packages/notification-services-controller/src/NotificationServicesController/services/perp-notifications.ts b/packages/notification-services-controller/src/NotificationServicesController/services/perp-notifications.ts
index 8ada9b65fcf..2d432424d22 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/services/perp-notifications.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/services/perp-notifications.ts
@@ -3,7 +3,7 @@ import {
successfulFetch,
} from '@metamask/controller-utils';
-import type { OrderInput } from '../types';
+import type { OrderInput } from '../types.js';
export const PERPS_API = 'https://perps.api.cx.metamask.io';
export const PERPS_API_CREATE_ORDERS = `${PERPS_API}/api/v1/orders`;
diff --git a/packages/notification-services-controller/src/NotificationServicesController/types/feature-announcement/feature-announcement.ts b/packages/notification-services-controller/src/NotificationServicesController/types/feature-announcement/feature-announcement.ts
index a1d6acb019a..fb125814f69 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/types/feature-announcement/feature-announcement.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/types/feature-announcement/feature-announcement.ts
@@ -1,5 +1,5 @@
-import type { TRIGGER_TYPES } from '../../constants/notification-schema';
-import type { TypeFeatureAnnouncement } from './type-feature-announcement';
+import type { TRIGGER_TYPES } from '../../constants/notification-schema.js';
+import type { TypeFeatureAnnouncement } from './type-feature-announcement.js';
export type FeatureAnnouncementRawNotificationData = Omit<
TypeFeatureAnnouncement['fields'],
diff --git a/packages/notification-services-controller/src/NotificationServicesController/types/feature-announcement/index.ts b/packages/notification-services-controller/src/NotificationServicesController/types/feature-announcement/index.ts
index a726f8d07fc..4f0811d8fcf 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/types/feature-announcement/index.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/types/feature-announcement/index.ts
@@ -1,3 +1,3 @@
-export type * from './feature-announcement';
-export type * from './type-links';
-export type * from './type-feature-announcement';
+export type * from './feature-announcement.js';
+export type * from './type-links.js';
+export type * from './type-feature-announcement.js';
diff --git a/packages/notification-services-controller/src/NotificationServicesController/types/feature-announcement/type-feature-announcement.ts b/packages/notification-services-controller/src/NotificationServicesController/types/feature-announcement/type-feature-announcement.ts
index a354987061c..7a5a518f608 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/types/feature-announcement/type-feature-announcement.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/types/feature-announcement/type-feature-announcement.ts
@@ -5,7 +5,7 @@ import type {
TypeExtensionLinkFields,
TypePortfolioLinkFields,
TypeMobileLinkFields,
-} from './type-links';
+} from './type-links.js';
export type ImageFields = {
fields: {
diff --git a/packages/notification-services-controller/src/NotificationServicesController/types/index.ts b/packages/notification-services-controller/src/NotificationServicesController/types/index.ts
index d2e18d1c996..ad9213eb5ee 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/types/index.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/types/index.ts
@@ -1,5 +1,5 @@
-export type * from './feature-announcement';
-export type * from './notification-api';
-export type * from './notification';
-export type * from './snaps/snaps';
-export type * from './perps';
+export type * from './feature-announcement.js';
+export type * from './notification-api.js';
+export type * from './notification.js';
+export type * from './snaps/snaps.js';
+export type * from './perps.js';
diff --git a/packages/notification-services-controller/src/NotificationServicesController/types/notification-api/index.ts b/packages/notification-services-controller/src/NotificationServicesController/types/notification-api/index.ts
index 1eea6328c95..8aa21282dd7 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/types/notification-api/index.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/types/notification-api/index.ts
@@ -1,2 +1,2 @@
-export type * from './notification-api';
-export type * as Schema from './schema';
+export type * from './notification-api.js';
+export type * as Schema from './schema.js';
diff --git a/packages/notification-services-controller/src/NotificationServicesController/types/notification-api/notification-api.ts b/packages/notification-services-controller/src/NotificationServicesController/types/notification-api/notification-api.ts
index 238bc3d5740..08fd046f4f3 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/types/notification-api/notification-api.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/types/notification-api/notification-api.ts
@@ -1,8 +1,8 @@
-import { TRIGGER_TYPES } from '../../constants/notification-schema';
-import type { Compute } from '../type-utils';
+import { TRIGGER_TYPES } from '../../constants/notification-schema.js';
+import type { Compute } from '../type-utils.js';
// Types derived from external Notification API schema - naming follows API conventions
/* eslint-disable @typescript-eslint/naming-convention */
-import type { components } from './schema';
+import type { components } from './schema.js';
export type Data_MetamaskSwapCompleted =
components['schemas']['Data_MetamaskSwapCompleted'];
diff --git a/packages/notification-services-controller/src/NotificationServicesController/types/notification/index.ts b/packages/notification-services-controller/src/NotificationServicesController/types/notification/index.ts
index 43cd6dff02b..99762f3a1c6 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/types/notification/index.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/types/notification/index.ts
@@ -1 +1 @@
-export type * from './notification';
+export type * from './notification.js';
diff --git a/packages/notification-services-controller/src/NotificationServicesController/types/notification/notification.ts b/packages/notification-services-controller/src/NotificationServicesController/types/notification/notification.ts
index aa7102aa278..8f82b75ec60 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/types/notification/notification.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/types/notification/notification.ts
@@ -1,7 +1,7 @@
-import type { FeatureAnnouncementRawNotification } from '../feature-announcement/feature-announcement';
-import type { NormalisedAPINotification } from '../notification-api/notification-api';
-import type { RawSnapNotification } from '../snaps';
-import type { Compute } from '../type-utils';
+import type { FeatureAnnouncementRawNotification } from '../feature-announcement/feature-announcement.js';
+import type { NormalisedAPINotification } from '../notification-api/notification-api.js';
+import type { RawSnapNotification } from '../snaps.js';
+import type { Compute } from '../type-utils.js';
export type BaseNotification = {
id: string;
diff --git a/packages/notification-services-controller/src/NotificationServicesController/types/perps/index.ts b/packages/notification-services-controller/src/NotificationServicesController/types/perps/index.ts
index f99d0e8bf5e..38f4e234987 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/types/perps/index.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/types/perps/index.ts
@@ -1 +1 @@
-export type * from './perp-types';
+export type * from './perp-types.js';
diff --git a/packages/notification-services-controller/src/NotificationServicesController/types/perps/perp-types.ts b/packages/notification-services-controller/src/NotificationServicesController/types/perps/perp-types.ts
index 66d0cbe1164..2396105a341 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/types/perps/perp-types.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/types/perps/perp-types.ts
@@ -1,3 +1,3 @@
-import type { components } from './schema';
+import type { components } from './schema.js';
export type OrderInput = components['schemas']['OrderInput'];
diff --git a/packages/notification-services-controller/src/NotificationServicesController/types/snaps/index.ts b/packages/notification-services-controller/src/NotificationServicesController/types/snaps/index.ts
index 1e307f3779a..e5d6174dff5 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/types/snaps/index.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/types/snaps/index.ts
@@ -1 +1 @@
-export type * from './snaps';
+export type * from './snaps.js';
diff --git a/packages/notification-services-controller/src/NotificationServicesController/types/snaps/snaps.ts b/packages/notification-services-controller/src/NotificationServicesController/types/snaps/snaps.ts
index 3438a83f5cf..1d0884657d9 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/types/snaps/snaps.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/types/snaps/snaps.ts
@@ -1,4 +1,4 @@
-import type { TRIGGER_TYPES } from '../../constants';
+import type { TRIGGER_TYPES } from '../../constants.js';
export type ExpandedView = {
title: string;
diff --git a/packages/notification-services-controller/src/NotificationServicesController/utils/isVersionInBounds.test.ts b/packages/notification-services-controller/src/NotificationServicesController/utils/isVersionInBounds.test.ts
index 8ce34444bf7..8bda023ecc1 100644
--- a/packages/notification-services-controller/src/NotificationServicesController/utils/isVersionInBounds.test.ts
+++ b/packages/notification-services-controller/src/NotificationServicesController/utils/isVersionInBounds.test.ts
@@ -1,4 +1,4 @@
-import { isVersionInBounds } from './isVersionInBounds';
+import { isVersionInBounds } from './isVersionInBounds.js';
describe('isVersionInBounds', () => {
const version = '7.57.0';
diff --git a/packages/notification-services-controller/src/NotificationServicesPushController/NotificationServicesPushController-method-action-types.ts b/packages/notification-services-controller/src/NotificationServicesPushController/NotificationServicesPushController-method-action-types.ts
index 9e02cc6b730..156391eca31 100644
--- a/packages/notification-services-controller/src/NotificationServicesPushController/NotificationServicesPushController-method-action-types.ts
+++ b/packages/notification-services-controller/src/NotificationServicesPushController/NotificationServicesPushController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { NotificationServicesPushController } from './NotificationServicesPushController';
+import type { NotificationServicesPushController } from './NotificationServicesPushController.js';
export type NotificationServicesPushControllerSubscribeToPushNotificationsAction =
{
diff --git a/packages/notification-services-controller/src/NotificationServicesPushController/NotificationServicesPushController.test.ts b/packages/notification-services-controller/src/NotificationServicesPushController/NotificationServicesPushController.test.ts
index bbe4a748273..7739e488f4e 100644
--- a/packages/notification-services-controller/src/NotificationServicesPushController/NotificationServicesPushController.test.ts
+++ b/packages/notification-services-controller/src/NotificationServicesPushController/NotificationServicesPushController.test.ts
@@ -2,14 +2,14 @@ import { deriveStateFromMetadata } from '@metamask/base-controller';
import type { AuthenticationController } from '@metamask/profile-sync-controller';
import log from 'loglevel';
-import { buildPushPlatformNotificationsControllerMessenger } from './__fixtures__/mockMessenger';
-import { NotificationServicesPushController } from './NotificationServicesPushController';
+import { buildPushPlatformNotificationsControllerMessenger } from './__fixtures__/mockMessenger.js';
+import { NotificationServicesPushController } from './NotificationServicesPushController.js';
import type {
ControllerConfig,
NotificationServicesPushControllerMessenger,
-} from './NotificationServicesPushController';
-import * as services from './services/services';
-import type { PushNotificationEnv } from './types';
+} from './NotificationServicesPushController.js';
+import * as services from './services/services.js';
+import type { PushNotificationEnv } from './types.js';
const MOCK_JWT = 'mockJwt';
const MOCK_FCM_TOKEN = 'mockFcmToken';
diff --git a/packages/notification-services-controller/src/NotificationServicesPushController/NotificationServicesPushController.ts b/packages/notification-services-controller/src/NotificationServicesPushController/NotificationServicesPushController.ts
index 44842609fa2..4fb0f9d327a 100644
--- a/packages/notification-services-controller/src/NotificationServicesPushController/NotificationServicesPushController.ts
+++ b/packages/notification-services-controller/src/NotificationServicesPushController/NotificationServicesPushController.ts
@@ -8,18 +8,18 @@ import type { Messenger } from '@metamask/messenger';
import type { AuthenticationController } from '@metamask/profile-sync-controller';
import log from 'loglevel';
-import type { Types } from '../NotificationServicesController';
-import type { NotificationServicesPushControllerMethodActions } from './NotificationServicesPushController-method-action-types';
-import type { ENV } from './services/endpoints';
-import type { RegToken } from './services/services';
+import type { Types } from '../NotificationServicesController.js';
+import type { NotificationServicesPushControllerMethodActions } from './NotificationServicesPushController-method-action-types.js';
+import type { ENV } from './services/endpoints.js';
+import type { RegToken } from './services/services.js';
import {
activatePushNotifications,
deleteLinksAPI,
deactivatePushNotifications,
updateLinksAPI,
-} from './services/services';
-import type { PushNotificationEnv } from './types';
-import type { PushService } from './types/push-service-interface';
+} from './services/services.js';
+import type { PushNotificationEnv } from './types.js';
+import type { PushService } from './types/push-service-interface.js';
const controllerName = 'NotificationServicesPushController';
diff --git a/packages/notification-services-controller/src/NotificationServicesPushController/__fixtures__/mockMessenger.ts b/packages/notification-services-controller/src/NotificationServicesPushController/__fixtures__/mockMessenger.ts
index 283eff5eee6..a968cd63e0f 100644
--- a/packages/notification-services-controller/src/NotificationServicesPushController/__fixtures__/mockMessenger.ts
+++ b/packages/notification-services-controller/src/NotificationServicesPushController/__fixtures__/mockMessenger.ts
@@ -5,7 +5,7 @@ import type {
MockAnyNamespace,
} from '@metamask/messenger';
-import type { NotificationServicesPushControllerMessenger } from '..';
+import type { NotificationServicesPushControllerMessenger } from './...js';
const controllerName = 'NotificationServicesPushController';
diff --git a/packages/notification-services-controller/src/NotificationServicesPushController/__fixtures__/mockServices.ts b/packages/notification-services-controller/src/NotificationServicesPushController/__fixtures__/mockServices.ts
index 36037340276..2e448161946 100644
--- a/packages/notification-services-controller/src/NotificationServicesPushController/__fixtures__/mockServices.ts
+++ b/packages/notification-services-controller/src/NotificationServicesPushController/__fixtures__/mockServices.ts
@@ -3,7 +3,7 @@ import nock from 'nock';
import {
getMockDeletePushNotificationLinksResponse,
getMockUpdatePushNotificationLinksResponse,
-} from '../mocks/mockResponse';
+} from '../mocks/mockResponse.js';
type MockReply = {
status: nock.StatusCode;
diff --git a/packages/notification-services-controller/src/NotificationServicesPushController/index.ts b/packages/notification-services-controller/src/NotificationServicesPushController/index.ts
index 63f13a47367..d0f92e9a3d1 100644
--- a/packages/notification-services-controller/src/NotificationServicesPushController/index.ts
+++ b/packages/notification-services-controller/src/NotificationServicesPushController/index.ts
@@ -1,13 +1,13 @@
-import { NotificationServicesPushController } from './NotificationServicesPushController';
+import { NotificationServicesPushController } from './NotificationServicesPushController.js';
export { NotificationServicesPushController as Controller };
export default NotificationServicesPushController;
-export * from './NotificationServicesPushController';
-export type * as Types from './types';
-export type * from './types';
-export * as Utils from './utils';
-export * from './utils';
-export * as Mocks from './mocks';
+export * from './NotificationServicesPushController.js';
+export type * as Types from './types.js';
+export type * from './types.js';
+export type * as Utils from './utils.js';
+export type * from './utils.js';
+export type * as Mocks from './mocks.js';
export type {
NotificationServicesPushControllerSubscribeToPushNotificationsAction,
@@ -17,4 +17,4 @@ export type {
NotificationServicesPushControllerUpdateTriggerPushNotificationsAction,
NotificationServicesPushControllerDeletePushNotificationLinksAction,
NotificationServicesPushControllerMethodActions,
-} from './NotificationServicesPushController-method-action-types';
+} from './NotificationServicesPushController-method-action-types.js';
diff --git a/packages/notification-services-controller/src/NotificationServicesPushController/mocks/index.ts b/packages/notification-services-controller/src/NotificationServicesPushController/mocks/index.ts
index a5eb2c4a3ee..090815e2482 100644
--- a/packages/notification-services-controller/src/NotificationServicesPushController/mocks/index.ts
+++ b/packages/notification-services-controller/src/NotificationServicesPushController/mocks/index.ts
@@ -1 +1 @@
-export * from './mockResponse';
+export * from './mockResponse.js';
diff --git a/packages/notification-services-controller/src/NotificationServicesPushController/mocks/mockResponse.ts b/packages/notification-services-controller/src/NotificationServicesPushController/mocks/mockResponse.ts
index f180c48522a..6f8f2011dbd 100644
--- a/packages/notification-services-controller/src/NotificationServicesPushController/mocks/mockResponse.ts
+++ b/packages/notification-services-controller/src/NotificationServicesPushController/mocks/mockResponse.ts
@@ -1,4 +1,4 @@
-import { REGISTRATION_TOKENS_ENDPOINT } from '../services/endpoints';
+import { REGISTRATION_TOKENS_ENDPOINT } from '../services/endpoints.js';
type MockResponse = {
url: string | RegExp;
diff --git a/packages/notification-services-controller/src/NotificationServicesPushController/services/services.test.ts b/packages/notification-services-controller/src/NotificationServicesPushController/services/services.test.ts
index f45494d3121..efef3b2aaca 100644
--- a/packages/notification-services-controller/src/NotificationServicesPushController/services/services.test.ts
+++ b/packages/notification-services-controller/src/NotificationServicesPushController/services/services.test.ts
@@ -3,15 +3,15 @@ import log from 'loglevel';
import {
mockEndpointDeletePushNotificationLinks,
mockEndpointUpdatePushNotificationLinks,
-} from '../__fixtures__/mockServices';
-import type { PushNotificationEnv } from '../types/firebase';
+} from '../__fixtures__/mockServices.js';
+import type { PushNotificationEnv } from '../types/firebase.js';
import {
activatePushNotifications,
deactivatePushNotifications,
deleteLinksAPI,
updateLinksAPI,
-} from './services';
-import type { RegToken } from './services';
+} from './services.js';
+import type { RegToken } from './services.js';
// Testing util to clean up verbose logs when testing errors
const mockErrorLog = (): jest.SpyInstance =>
diff --git a/packages/notification-services-controller/src/NotificationServicesPushController/services/services.ts b/packages/notification-services-controller/src/NotificationServicesPushController/services/services.ts
index 95067488ead..c9f482fc407 100644
--- a/packages/notification-services-controller/src/NotificationServicesPushController/services/services.ts
+++ b/packages/notification-services-controller/src/NotificationServicesPushController/services/services.ts
@@ -1,10 +1,10 @@
-import type { PushNotificationEnv } from '../types';
+import type { PushNotificationEnv } from '../types.js';
import type {
CreateRegToken,
DeleteRegToken,
-} from '../types/push-service-interface';
-import type { ENV } from './endpoints';
-import * as endpoints from './endpoints';
+} from '../types/push-service-interface.js';
+import type { ENV } from './endpoints.js';
+import * as endpoints from './endpoints.js';
export type RegToken = {
token: string;
diff --git a/packages/notification-services-controller/src/NotificationServicesPushController/types/index.ts b/packages/notification-services-controller/src/NotificationServicesPushController/types/index.ts
index 693b8999cbc..d47ad66d98c 100644
--- a/packages/notification-services-controller/src/NotificationServicesPushController/types/index.ts
+++ b/packages/notification-services-controller/src/NotificationServicesPushController/types/index.ts
@@ -1,2 +1,2 @@
-export type * from './firebase';
-export type * from './push-service-interface';
+export type * from './firebase.js';
+export type * from './push-service-interface.js';
diff --git a/packages/notification-services-controller/src/NotificationServicesPushController/types/push-service-interface.ts b/packages/notification-services-controller/src/NotificationServicesPushController/types/push-service-interface.ts
index 1dc37620c80..219cf71adee 100644
--- a/packages/notification-services-controller/src/NotificationServicesPushController/types/push-service-interface.ts
+++ b/packages/notification-services-controller/src/NotificationServicesPushController/types/push-service-interface.ts
@@ -1,4 +1,4 @@
-import type { PushNotificationEnv } from '.';
+import type { PushNotificationEnv } from './..js';
type Unsubscribe = () => void;
diff --git a/packages/notification-services-controller/src/NotificationServicesPushController/utils/get-notification-data.test.ts b/packages/notification-services-controller/src/NotificationServicesPushController/utils/get-notification-data.test.ts
index 4017150927e..c6659584bfc 100644
--- a/packages/notification-services-controller/src/NotificationServicesPushController/utils/get-notification-data.test.ts
+++ b/packages/notification-services-controller/src/NotificationServicesPushController/utils/get-notification-data.test.ts
@@ -2,7 +2,7 @@ import {
formatAmount,
getAmount,
getLeadingZeroCount,
-} from './get-notification-data';
+} from './get-notification-data.js';
describe('getNotificationData - formatAmount() tests', () => {
it('should format large numbers', () => {
diff --git a/packages/notification-services-controller/src/NotificationServicesPushController/utils/get-notification-message.test.ts b/packages/notification-services-controller/src/NotificationServicesPushController/utils/get-notification-message.test.ts
index 15c79478381..dff835ce528 100644
--- a/packages/notification-services-controller/src/NotificationServicesPushController/utils/get-notification-message.test.ts
+++ b/packages/notification-services-controller/src/NotificationServicesPushController/utils/get-notification-message.test.ts
@@ -1,4 +1,4 @@
-import { Processors } from '../../NotificationServicesController';
+import { Processors } from '../../NotificationServicesController.js';
import {
createMockNotificationERC1155Received,
createMockNotificationERC1155Sent,
@@ -15,9 +15,9 @@ import {
createMockNotificationMetaMaskSwapsCompleted,
createMockNotificationRocketPoolStakeCompleted,
createMockNotificationRocketPoolUnStakeCompleted,
-} from '../../NotificationServicesController/mocks';
-import type { TranslationKeys } from './get-notification-message';
-import { createOnChainPushNotificationMessage } from './get-notification-message';
+} from '../../NotificationServicesController/mocks.js';
+import type { TranslationKeys } from './get-notification-message.js';
+import { createOnChainPushNotificationMessage } from './get-notification-message.js';
const mockTranslations: TranslationKeys = {
pushPlatformNotificationsFundsSentTitle: () => 'Funds sent',
diff --git a/packages/notification-services-controller/src/NotificationServicesPushController/utils/get-notification-message.ts b/packages/notification-services-controller/src/NotificationServicesPushController/utils/get-notification-message.ts
index 69a0a4641ba..ac1243beafa 100644
--- a/packages/notification-services-controller/src/NotificationServicesPushController/utils/get-notification-message.ts
+++ b/packages/notification-services-controller/src/NotificationServicesPushController/utils/get-notification-message.ts
@@ -1,6 +1,6 @@
-import type { Types } from '../../NotificationServicesController';
-import type { Constants } from '../../NotificationServicesController';
-import { getAmount, formatAmount } from './get-notification-data';
+import type { Types } from '../../NotificationServicesController.js';
+import type { Constants } from '../../NotificationServicesController.js';
+import { getAmount, formatAmount } from './get-notification-data.js';
export type TranslationKeys = {
pushPlatformNotificationsFundsSentTitle: () => string;
@@ -287,20 +287,16 @@ export function createOnChainPushNotificationMessage(
let description: string | null = null;
try {
description =
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- notificationMessage?.getDescription?.(notification as any) ??
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- notificationMessage.defaultDescription?.(notification as any) ??
+ notificationMessage?.getDescription?.(notification) ??
+ notificationMessage.defaultDescription?.(notification) ??
null;
} catch {
description =
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- notificationMessage.defaultDescription?.(notification as any) ?? null;
+ notificationMessage.defaultDescription?.(notification) ?? null;
}
return {
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- title: notificationMessage?.title?.(notification as any) ?? '', // Ensure title is always a string
+ title: notificationMessage?.title?.(notification) ?? '', // Ensure title is always a string
description: description ?? '', // Fallback to empty string if null
};
}
diff --git a/packages/notification-services-controller/src/NotificationServicesPushController/utils/index.ts b/packages/notification-services-controller/src/NotificationServicesPushController/utils/index.ts
index be95219f07e..9ad21d1e303 100644
--- a/packages/notification-services-controller/src/NotificationServicesPushController/utils/index.ts
+++ b/packages/notification-services-controller/src/NotificationServicesPushController/utils/index.ts
@@ -1,2 +1,2 @@
-export * from './get-notification-data';
-export * from './get-notification-message';
+export * from './get-notification-data.js';
+export * from './get-notification-message.js';
diff --git a/packages/notification-services-controller/src/NotificationServicesPushController/web/index.ts b/packages/notification-services-controller/src/NotificationServicesPushController/web/index.ts
index 5da7ef3239a..041670781d9 100644
--- a/packages/notification-services-controller/src/NotificationServicesPushController/web/index.ts
+++ b/packages/notification-services-controller/src/NotificationServicesPushController/web/index.ts
@@ -2,4 +2,4 @@ export {
createRegToken,
deleteRegToken,
createSubscribeToPushNotifications,
-} from './push-utils';
+} from './push-utils.js';
diff --git a/packages/notification-services-controller/src/NotificationServicesPushController/web/push-utils.test.ts b/packages/notification-services-controller/src/NotificationServicesPushController/web/push-utils.test.ts
index 6a09cbccc09..d9103688357 100644
--- a/packages/notification-services-controller/src/NotificationServicesPushController/web/push-utils.test.ts
+++ b/packages/notification-services-controller/src/NotificationServicesPushController/web/push-utils.test.ts
@@ -2,15 +2,15 @@ import * as FirebaseAppModule from 'firebase/app';
import * as FirebaseMessagingModule from 'firebase/messaging';
import * as FirebaseMessagingSWModule from 'firebase/messaging/sw';
-import { processNotification } from '../../NotificationServicesController';
-import { createMockNotificationEthSent } from '../../NotificationServicesController/mocks/mock-raw-notifications';
-import { buildPushPlatformNotificationsControllerMessenger } from '../__fixtures__/mockMessenger';
+import { processNotification } from '../../NotificationServicesController.js';
+import { createMockNotificationEthSent } from '../../NotificationServicesController/mocks/mock-raw-notifications.js';
+import { buildPushPlatformNotificationsControllerMessenger } from '../__fixtures__/mockMessenger.js';
import {
createRegToken,
deleteRegToken,
createSubscribeToPushNotifications,
-} from './push-utils';
-import * as PushWebModule from './push-utils';
+} from './push-utils.js';
+import * as PushWebModule from './push-utils.js';
jest.mock('firebase/app');
jest.mock('firebase/messaging');
diff --git a/packages/notification-services-controller/src/NotificationServicesPushController/web/push-utils.ts b/packages/notification-services-controller/src/NotificationServicesPushController/web/push-utils.ts
index f3c0257df68..6fa028c224c 100644
--- a/packages/notification-services-controller/src/NotificationServicesPushController/web/push-utils.ts
+++ b/packages/notification-services-controller/src/NotificationServicesPushController/web/push-utils.ts
@@ -12,14 +12,14 @@ import {
import type { Messaging, MessagePayload } from 'firebase/messaging/sw';
import log from 'loglevel';
-import type { Types } from '../../NotificationServicesController';
+import type { Types } from '../../NotificationServicesController.js';
import {
isOnChainRawNotification,
safeProcessNotification,
-} from '../../NotificationServicesController';
-import { toRawAPINotification } from '../../shared/to-raw-notification';
-import type { NotificationServicesPushControllerMessenger } from '../NotificationServicesPushController';
-import type { PushNotificationEnv } from '../types/firebase';
+} from '../../NotificationServicesController.js';
+import { toRawAPINotification } from '../../shared/to-raw-notification.js';
+import type { NotificationServicesPushControllerMessenger } from '../NotificationServicesPushController.js';
+import type { PushNotificationEnv } from '../types/firebase.js';
declare const self: ServiceWorkerGlobalScope;
diff --git a/packages/notification-services-controller/src/index.ts b/packages/notification-services-controller/src/index.ts
index bf95c249af8..069c321a382 100644
--- a/packages/notification-services-controller/src/index.ts
+++ b/packages/notification-services-controller/src/index.ts
@@ -1,8 +1,8 @@
-export * as NotificationServicesController from './NotificationServicesController';
-export * as NotificationServicesPushController from './NotificationServicesPushController';
+export * as NotificationServicesController from './NotificationServicesController.js';
+export * as NotificationServicesPushController from './NotificationServicesPushController.js';
export {
DEFAULT_AGENTIC_CLI_PREFERENCES,
DEFAULT_PERPS_PREFERENCES,
DEFAULT_PRICE_ALERT_PREFERENCES,
DEFAULT_SOCIAL_AI_PREFERENCES,
-} from './NotificationServicesController';
+} from './NotificationServicesController.js';
diff --git a/packages/notification-services-controller/src/shared/index.ts b/packages/notification-services-controller/src/shared/index.ts
index 342d8287ed9..76c4ceac70a 100644
--- a/packages/notification-services-controller/src/shared/index.ts
+++ b/packages/notification-services-controller/src/shared/index.ts
@@ -1,3 +1,3 @@
-export * from './is-onchain-notification';
-export * from './notification-api-type-guards';
-export * from './to-raw-notification';
+export * from './is-onchain-notification.js';
+export * from './notification-api-type-guards.js';
+export * from './to-raw-notification.js';
diff --git a/packages/notification-services-controller/src/shared/is-onchain-notification.test.ts b/packages/notification-services-controller/src/shared/is-onchain-notification.test.ts
index c44e15a6b13..486d028b9d2 100644
--- a/packages/notification-services-controller/src/shared/is-onchain-notification.test.ts
+++ b/packages/notification-services-controller/src/shared/is-onchain-notification.test.ts
@@ -1,9 +1,9 @@
-import { isOnChainRawNotification } from '.';
import {
createMockFeatureAnnouncementRaw,
createMockPlatformNotification,
createMockNotificationEthSent,
-} from '../NotificationServicesController/mocks';
+} from '../NotificationServicesController/mocks.js';
+import { isOnChainRawNotification } from './..js';
describe('is-onchain-notification - isOnChainRawNotification()', () => {
it('returns true if OnChainRawNotification', () => {
diff --git a/packages/notification-services-controller/src/shared/is-onchain-notification.ts b/packages/notification-services-controller/src/shared/is-onchain-notification.ts
index a2518828850..504e6e0ccf2 100644
--- a/packages/notification-services-controller/src/shared/is-onchain-notification.ts
+++ b/packages/notification-services-controller/src/shared/is-onchain-notification.ts
@@ -1,8 +1,8 @@
import type {
UnprocessedRawNotification,
OnChainNotification,
-} from '../NotificationServicesController/types/notification-api';
-import { isOnChainNotification } from './notification-api-type-guards';
+} from '../NotificationServicesController/types/notification-api.js';
+import { isOnChainNotification } from './notification-api-type-guards.js';
/**
* Checks if the given value is an on-chain notification using the v4 `notification_type` discriminator.
diff --git a/packages/notification-services-controller/src/shared/notification-api-type-guards.ts b/packages/notification-services-controller/src/shared/notification-api-type-guards.ts
index f587ef8443b..a7ff016a1e6 100644
--- a/packages/notification-services-controller/src/shared/notification-api-type-guards.ts
+++ b/packages/notification-services-controller/src/shared/notification-api-type-guards.ts
@@ -2,7 +2,7 @@ import type {
UnprocessedRawNotification,
OnChainNotification,
PlatformNotification,
-} from '../NotificationServicesController/types/notification-api';
+} from '../NotificationServicesController/types/notification-api.js';
/**
* Narrows a v4 API notification to an on-chain notification.
diff --git a/packages/notification-services-controller/src/shared/to-raw-notification.ts b/packages/notification-services-controller/src/shared/to-raw-notification.ts
index d19418911da..9363964500a 100644
--- a/packages/notification-services-controller/src/shared/to-raw-notification.ts
+++ b/packages/notification-services-controller/src/shared/to-raw-notification.ts
@@ -5,8 +5,8 @@ import type {
PlatformRawNotification,
} from 'src/NotificationServicesController/types/notification-api';
-import { TRIGGER_TYPES } from '../NotificationServicesController/constants/notification-schema';
-import { isOnChainNotification } from './notification-api-type-guards';
+import { TRIGGER_TYPES } from '../NotificationServicesController/constants/notification-schema.js';
+import { isOnChainNotification } from './notification-api-type-guards.js';
/**
* A true "raw notification" does not have some fields that exist on this type. E.g. the `type` field.
diff --git a/packages/passkey-controller/jest.config.js b/packages/passkey-controller/jest.config.js
index cc62e89c35e..ee598d66a3e 100644
--- a/packages/passkey-controller/jest.config.js
+++ b/packages/passkey-controller/jest.config.js
@@ -1,11 +1,11 @@
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
displayName,
coverageThreshold: {
global: { branches: 100, functions: 100, lines: 100, statements: 100 },
diff --git a/packages/passkey-controller/package.json b/packages/passkey-controller/package.json
index 1c6fcd24d1f..87b26475417 100644
--- a/packages/passkey-controller/package.json
+++ b/packages/passkey-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/passkey-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/passkey-controller",
@@ -65,8 +58,8 @@
"@noble/hashes": "^1.8.0"
},
"devDependencies": {
+ "@jest/globals": "^30.4.1",
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/passkey-controller/src/PasskeyController-method-action-types.ts b/packages/passkey-controller/src/PasskeyController-method-action-types.ts
index fbf2b329ea6..be36cd986db 100644
--- a/packages/passkey-controller/src/PasskeyController-method-action-types.ts
+++ b/packages/passkey-controller/src/PasskeyController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { PasskeyController } from './PasskeyController';
+import type { PasskeyController } from './PasskeyController.js';
/**
* Whether a passkey is enrolled and vault key material is stored.
diff --git a/packages/passkey-controller/src/PasskeyController.test.ts b/packages/passkey-controller/src/PasskeyController.test.ts
index 75d6698b5a3..61bdf38eb4d 100644
--- a/packages/passkey-controller/src/PasskeyController.test.ts
+++ b/packages/passkey-controller/src/PasskeyController.test.ts
@@ -1,26 +1,30 @@
+import { jest } from '@jest/globals';
import { Messenger } from '@metamask/messenger';
-import { CEREMONY_MAX_AGE_MS, WEBAUTHN_TIMEOUT_MS } from './ceremony-manager';
+import {
+ CEREMONY_MAX_AGE_MS,
+ WEBAUTHN_TIMEOUT_MS,
+} from './ceremony-manager.js';
import {
PasskeyControllerErrorCode,
PasskeyControllerErrorMessage,
-} from './constants';
-import { PasskeyControllerError } from './errors';
+} from './constants.js';
+import { PasskeyControllerError } from './errors.js';
import {
getDefaultPasskeyControllerState,
passkeyControllerSelectors,
PasskeyController,
-} from './PasskeyController';
+} from './PasskeyController.js';
import type {
PasskeyControllerMessenger,
PasskeyControllerState,
-} from './PasskeyController';
-import type { PasskeyRecord, PrfClientExtensionResults } from './types';
-import * as passkeyCrypto from './utils/crypto';
+} from './PasskeyController.js';
+import type { PasskeyRecord, PrfClientExtensionResults } from './types.js';
+import * as passkeyCrypto from './utils/crypto.js';
import type {
PasskeyRegistrationResponse,
PasskeyAuthenticationResponse,
-} from './webauthn/types';
+} from './webauthn/types.js';
type ExtOutputsWithPrf = Record & PrfClientExtensionResults;
diff --git a/packages/passkey-controller/src/PasskeyController.ts b/packages/passkey-controller/src/PasskeyController.ts
index 6104d56a5e5..0ac0733f3d5 100644
--- a/packages/passkey-controller/src/PasskeyController.ts
+++ b/packages/passkey-controller/src/PasskeyController.ts
@@ -7,39 +7,39 @@ import { BaseController } from '@metamask/base-controller';
import type { Messenger } from '@metamask/messenger';
import { areUint8ArraysEqual, stringToBytes } from '@metamask/utils';
-import { WEBAUTHN_TIMEOUT_MS, CeremonyManager } from './ceremony-manager';
+import { WEBAUTHN_TIMEOUT_MS, CeremonyManager } from './ceremony-manager.js';
import {
controllerName,
PasskeyControllerErrorCode,
PasskeyControllerErrorMessage,
-} from './constants';
-import { PasskeyControllerError } from './errors';
-import { deriveKeyFromAuthenticationResponse } from './key-derivation';
-import { createModuleLogger, projectLogger } from './logger';
-import { PasskeyControllerMethodActions } from './PasskeyController-method-action-types';
+} from './constants.js';
+import { PasskeyControllerError } from './errors.js';
+import { deriveKeyFromAuthenticationResponse } from './key-derivation.js';
+import { createModuleLogger, projectLogger } from './logger.js';
+import { PasskeyControllerMethodActions } from './PasskeyController-method-action-types.js';
import type {
AuthenticatorTransportFuture,
PasskeyCredentialInfo,
PasskeyKeyDerivation,
PasskeyRecord,
PrfClientExtensionResults,
-} from './types';
+} from './types.js';
import {
decryptWithKey,
encryptWithKey,
randomBytesToBase64URL,
-} from './utils/crypto';
-import { base64URLToBytes, bytesToBase64URL } from './utils/encoding';
-import { COSEALG } from './webauthn/constants';
-import { decodeClientDataJSON } from './webauthn/decode-client-data-json';
+} from './utils/crypto.js';
+import { base64URLToBytes, bytesToBase64URL } from './utils/encoding.js';
+import { COSEALG } from './webauthn/constants.js';
+import { decodeClientDataJSON } from './webauthn/decode-client-data-json.js';
import type {
PasskeyAuthenticationOptions,
PasskeyAuthenticationResponse,
PasskeyRegistrationOptions,
PasskeyRegistrationResponse,
-} from './webauthn/types';
-import { verifyAuthenticationResponse } from './webauthn/verify-authentication-response';
-import { verifyRegistrationResponse } from './webauthn/verify-registration-response';
+} from './webauthn/types.js';
+import { verifyAuthenticationResponse } from './webauthn/verify-authentication-response.js';
+import { verifyRegistrationResponse } from './webauthn/verify-registration-response.js';
export type PasskeyControllerState = {
passkeyRecord: PasskeyRecord | null;
diff --git a/packages/passkey-controller/src/ceremony-manager.test.ts b/packages/passkey-controller/src/ceremony-manager.test.ts
index 8043eb5f7a5..13866b510be 100644
--- a/packages/passkey-controller/src/ceremony-manager.test.ts
+++ b/packages/passkey-controller/src/ceremony-manager.test.ts
@@ -1,8 +1,10 @@
+import { jest } from '@jest/globals';
+
import {
CEREMONY_MAX_AGE_MS,
CeremonyManager,
MAX_CONCURRENT_PASSKEY_CEREMONIES,
-} from './ceremony-manager';
+} from './ceremony-manager.js';
describe('CeremonyManager', () => {
const baseReg = { userHandle: 'u' };
diff --git a/packages/passkey-controller/src/ceremony-manager.ts b/packages/passkey-controller/src/ceremony-manager.ts
index 2e9aa5f368c..71bce5f686f 100644
--- a/packages/passkey-controller/src/ceremony-manager.ts
+++ b/packages/passkey-controller/src/ceremony-manager.ts
@@ -1,7 +1,7 @@
import type {
PasskeyAuthenticationCeremony,
PasskeyRegistrationCeremony,
-} from './types';
+} from './types.js';
/** WebAuthn `timeout` for credential creation and assertion (ms). */
export const WEBAUTHN_TIMEOUT_MS = 60_000;
diff --git a/packages/passkey-controller/src/errors.test.ts b/packages/passkey-controller/src/errors.test.ts
index ccd249f4d01..ccc06f504ab 100644
--- a/packages/passkey-controller/src/errors.test.ts
+++ b/packages/passkey-controller/src/errors.test.ts
@@ -1,8 +1,8 @@
import {
PasskeyControllerErrorCode,
PasskeyControllerErrorMessage,
-} from './constants';
-import { PasskeyControllerError } from './errors';
+} from './constants.js';
+import { PasskeyControllerError } from './errors.js';
describe('PasskeyControllerError', () => {
it('sets code and cause from options', () => {
diff --git a/packages/passkey-controller/src/errors.ts b/packages/passkey-controller/src/errors.ts
index e0bbf6ebbe4..f6c08c25abb 100644
--- a/packages/passkey-controller/src/errors.ts
+++ b/packages/passkey-controller/src/errors.ts
@@ -1,4 +1,4 @@
-import type { PasskeyControllerErrorCode as PasskeyControllerErrorCodeType } from './constants';
+import type { PasskeyControllerErrorCode as PasskeyControllerErrorCodeType } from './constants.js';
/**
* Options for creating a {@link PasskeyControllerError}.
diff --git a/packages/passkey-controller/src/index.ts b/packages/passkey-controller/src/index.ts
index d128b64b320..59d0e80dd7d 100644
--- a/packages/passkey-controller/src/index.ts
+++ b/packages/passkey-controller/src/index.ts
@@ -1,13 +1,13 @@
export {
PasskeyControllerErrorCode,
PasskeyControllerErrorMessage,
-} from './constants';
-export { PasskeyControllerError } from './errors';
+} from './constants.js';
+export { PasskeyControllerError } from './errors.js';
export {
PasskeyController,
getDefaultPasskeyControllerState,
passkeyControllerSelectors,
-} from './PasskeyController';
+} from './PasskeyController.js';
export type {
PasskeyControllerState,
PasskeyControllerMessenger,
@@ -15,7 +15,7 @@ export type {
PasskeyControllerActions,
PasskeyControllerStateChangedEvent,
PasskeyControllerEvents,
-} from './PasskeyController';
+} from './PasskeyController.js';
export type {
PasskeyCredentialInfo,
PasskeyDerivationMethod,
@@ -23,13 +23,13 @@ export type {
PasskeyRecord,
PrfEvalExtension,
PrfClientExtensionResults,
-} from './types';
+} from './types.js';
export type {
PasskeyRegistrationOptions,
PasskeyRegistrationResponse,
PasskeyAuthenticationOptions,
PasskeyAuthenticationResponse,
-} from './webauthn/types';
+} from './webauthn/types.js';
export type {
PasskeyControllerIsPasskeyEnrolledAction,
PasskeyControllerGenerateRegistrationOptionsAction,
@@ -42,4 +42,4 @@ export type {
PasskeyControllerRemovePasskeyAction,
PasskeyControllerClearStateAction,
PasskeyControllerDestroyAction,
-} from './PasskeyController-method-action-types';
+} from './PasskeyController-method-action-types.js';
diff --git a/packages/passkey-controller/src/key-derivation.test.ts b/packages/passkey-controller/src/key-derivation.test.ts
index 50cc9129191..d8b89b205df 100644
--- a/packages/passkey-controller/src/key-derivation.test.ts
+++ b/packages/passkey-controller/src/key-derivation.test.ts
@@ -1,9 +1,9 @@
-import { PasskeyControllerErrorMessage } from './constants';
-import { deriveKeyFromAuthenticationResponse } from './key-derivation';
-import { PasskeyRecord } from './types';
-import { deriveEncryptionKey } from './utils/crypto';
-import { base64URLToBytes } from './utils/encoding';
-import type { PasskeyAuthenticationResponse } from './webauthn/types';
+import { PasskeyControllerErrorMessage } from './constants.js';
+import { deriveKeyFromAuthenticationResponse } from './key-derivation.js';
+import { PasskeyRecord } from './types.js';
+import { deriveEncryptionKey } from './utils/crypto.js';
+import { base64URLToBytes } from './utils/encoding.js';
+import type { PasskeyAuthenticationResponse } from './webauthn/types.js';
function b64url(str: string): string {
return btoa(str)
diff --git a/packages/passkey-controller/src/key-derivation.ts b/packages/passkey-controller/src/key-derivation.ts
index 5224f70f4ec..b9381d7ec56 100644
--- a/packages/passkey-controller/src/key-derivation.ts
+++ b/packages/passkey-controller/src/key-derivation.ts
@@ -1,12 +1,12 @@
import {
PasskeyControllerErrorCode,
PasskeyControllerErrorMessage,
-} from './constants';
-import { PasskeyControllerError } from './errors';
-import type { PasskeyRecord, PrfClientExtensionResults } from './types';
-import { deriveEncryptionKey } from './utils/crypto';
-import { base64URLToBytes } from './utils/encoding';
-import type { PasskeyAuthenticationResponse } from './webauthn/types';
+} from './constants.js';
+import { PasskeyControllerError } from './errors.js';
+import type { PasskeyRecord, PrfClientExtensionResults } from './types.js';
+import { deriveEncryptionKey } from './utils/crypto.js';
+import { base64URLToBytes } from './utils/encoding.js';
+import type { PasskeyAuthenticationResponse } from './webauthn/types.js';
/**
* Derives an AES-256 wrapping key from a WebAuthn authentication ceremony
diff --git a/packages/passkey-controller/src/logger.ts b/packages/passkey-controller/src/logger.ts
index 81fa93678f7..daf14c8fe3d 100644
--- a/packages/passkey-controller/src/logger.ts
+++ b/packages/passkey-controller/src/logger.ts
@@ -2,7 +2,7 @@
import { createProjectLogger, createModuleLogger } from '@metamask/utils';
-import { controllerName } from './constants';
+import { controllerName } from './constants.js';
export const projectLogger = createProjectLogger(controllerName);
diff --git a/packages/passkey-controller/src/utils/crypto.test.ts b/packages/passkey-controller/src/utils/crypto.test.ts
index 1b5908a6fcd..fe40d1165a3 100644
--- a/packages/passkey-controller/src/utils/crypto.test.ts
+++ b/packages/passkey-controller/src/utils/crypto.test.ts
@@ -3,8 +3,8 @@ import {
deriveEncryptionKey,
encryptWithKey,
randomBytesToBase64URL,
-} from './crypto';
-import { base64URLToBytes } from './encoding';
+} from './crypto.js';
+import { base64URLToBytes } from './encoding.js';
describe('crypto', () => {
describe('randomBytesToBase64URL', () => {
diff --git a/packages/passkey-controller/src/utils/crypto.ts b/packages/passkey-controller/src/utils/crypto.ts
index 17280b0512e..69dab28e277 100644
--- a/packages/passkey-controller/src/utils/crypto.ts
+++ b/packages/passkey-controller/src/utils/crypto.ts
@@ -4,7 +4,7 @@ import { randomBytes } from '@noble/ciphers/webcrypto';
import { hkdf } from '@noble/hashes/hkdf';
import { sha256 } from '@noble/hashes/sha2';
-import { bytesToBase64URL } from './encoding';
+import { bytesToBase64URL } from './encoding.js';
const PASSKEY_HKDF_INFO = 'metamask:passkey:encryption-key:v1';
diff --git a/packages/passkey-controller/src/utils/encoding.test.ts b/packages/passkey-controller/src/utils/encoding.test.ts
index beed5b7a572..cf670000943 100644
--- a/packages/passkey-controller/src/utils/encoding.test.ts
+++ b/packages/passkey-controller/src/utils/encoding.test.ts
@@ -1,4 +1,4 @@
-import { bytesToBase64URL, base64URLToBytes } from './encoding';
+import { bytesToBase64URL, base64URLToBytes } from './encoding.js';
describe('encoding', () => {
describe('bytesToBase64URL', () => {
diff --git a/packages/passkey-controller/src/webauthn/decode-attestation-object.test.ts b/packages/passkey-controller/src/webauthn/decode-attestation-object.test.ts
index f4532c505a4..fdabcb05c84 100644
--- a/packages/passkey-controller/src/webauthn/decode-attestation-object.test.ts
+++ b/packages/passkey-controller/src/webauthn/decode-attestation-object.test.ts
@@ -1,5 +1,5 @@
-import { base64URLToBytes } from '../utils/encoding';
-import { decodeAttestationObject } from './decode-attestation-object';
+import { base64URLToBytes } from '../utils/encoding.js';
+import { decodeAttestationObject } from './decode-attestation-object.js';
describe('decodeAttestationObject', () => {
it('decodes base64url-encoded indirect attestationObject', () => {
diff --git a/packages/passkey-controller/src/webauthn/decode-attestation-object.ts b/packages/passkey-controller/src/webauthn/decode-attestation-object.ts
index 21c3a4da218..d7c06418217 100644
--- a/packages/passkey-controller/src/webauthn/decode-attestation-object.ts
+++ b/packages/passkey-controller/src/webauthn/decode-attestation-object.ts
@@ -1,6 +1,6 @@
import { decodePartialCBOR } from '@levischuck/tiny-cbor';
-import type { AttestationObject } from './types';
+import type { AttestationObject } from './types.js';
/**
* CBOR-decode an attestationObject buffer into a Map with `fmt`, `attStmt`,
diff --git a/packages/passkey-controller/src/webauthn/decode-client-data-json.test.ts b/packages/passkey-controller/src/webauthn/decode-client-data-json.test.ts
index 7c6e72404f4..81837f6a7b4 100644
--- a/packages/passkey-controller/src/webauthn/decode-client-data-json.test.ts
+++ b/packages/passkey-controller/src/webauthn/decode-client-data-json.test.ts
@@ -1,4 +1,4 @@
-import { decodeClientDataJSON } from './decode-client-data-json';
+import { decodeClientDataJSON } from './decode-client-data-json.js';
describe('decodeClientDataJSON', () => {
it('converts base64url-encoded attestation clientDataJSON to JSON', () => {
diff --git a/packages/passkey-controller/src/webauthn/decode-client-data-json.ts b/packages/passkey-controller/src/webauthn/decode-client-data-json.ts
index e3881b30331..204246a2efb 100644
--- a/packages/passkey-controller/src/webauthn/decode-client-data-json.ts
+++ b/packages/passkey-controller/src/webauthn/decode-client-data-json.ts
@@ -1,5 +1,5 @@
-import { base64URLToBytes } from '../utils/encoding';
-import type { ClientDataJSON } from './types';
+import { base64URLToBytes } from '../utils/encoding.js';
+import type { ClientDataJSON } from './types.js';
/**
* Decode an authenticator's base64url-encoded clientDataJSON to JSON.
diff --git a/packages/passkey-controller/src/webauthn/match-expected-rp-id.test.ts b/packages/passkey-controller/src/webauthn/match-expected-rp-id.test.ts
index c746504d2c6..95e8232a22a 100644
--- a/packages/passkey-controller/src/webauthn/match-expected-rp-id.test.ts
+++ b/packages/passkey-controller/src/webauthn/match-expected-rp-id.test.ts
@@ -1,6 +1,6 @@
import { sha256 } from '@noble/hashes/sha2';
-import { matchExpectedRPID } from './match-expected-rp-id';
+import { matchExpectedRPID } from './match-expected-rp-id.js';
describe('matchExpectedRPID', () => {
it('throws when no RP ID matches', () => {
diff --git a/packages/passkey-controller/src/webauthn/match-expected-rp-id.ts b/packages/passkey-controller/src/webauthn/match-expected-rp-id.ts
index 8faba44d6d5..e7930abc6f8 100644
--- a/packages/passkey-controller/src/webauthn/match-expected-rp-id.ts
+++ b/packages/passkey-controller/src/webauthn/match-expected-rp-id.ts
@@ -1,7 +1,7 @@
import { areUint8ArraysEqual } from '@metamask/utils';
import { sha256 } from '@noble/hashes/sha2';
-import { bytesToHex } from '../utils/encoding';
+import { bytesToHex } from '../utils/encoding.js';
/**
* Verify that an authenticator data rpIdHash matches one of the expected
diff --git a/packages/passkey-controller/src/webauthn/parse-authenticator-data.test.ts b/packages/passkey-controller/src/webauthn/parse-authenticator-data.test.ts
index 825215db4e7..2d1083beed9 100644
--- a/packages/passkey-controller/src/webauthn/parse-authenticator-data.test.ts
+++ b/packages/passkey-controller/src/webauthn/parse-authenticator-data.test.ts
@@ -2,8 +2,8 @@ import { encodeCBOR } from '@levischuck/tiny-cbor';
import { base64ToBytes, bytesToBase64 } from '@metamask/utils';
import { sha256 } from '@noble/hashes/sha2';
-import { bytesToBase64URL } from '../utils/encoding';
-import { parseAuthenticatorData } from './parse-authenticator-data';
+import { bytesToBase64URL } from '../utils/encoding.js';
+import { parseAuthenticatorData } from './parse-authenticator-data.js';
/**
* Conformance vectors from SimpleWebAuthn `parseAuthenticatorData.test.ts`
diff --git a/packages/passkey-controller/src/webauthn/parse-authenticator-data.ts b/packages/passkey-controller/src/webauthn/parse-authenticator-data.ts
index a60840690c1..d88c71b83e7 100644
--- a/packages/passkey-controller/src/webauthn/parse-authenticator-data.ts
+++ b/packages/passkey-controller/src/webauthn/parse-authenticator-data.ts
@@ -1,6 +1,9 @@
import { decodePartialCBOR } from '@levischuck/tiny-cbor';
-import type { ParsedAuthenticatorData, AuthenticatorDataFlags } from './types';
+import type {
+ ParsedAuthenticatorData,
+ AuthenticatorDataFlags,
+} from './types.js';
/* eslint-disable no-bitwise */
diff --git a/packages/passkey-controller/src/webauthn/types.ts b/packages/passkey-controller/src/webauthn/types.ts
index ae91e045168..5a294fe2805 100644
--- a/packages/passkey-controller/src/webauthn/types.ts
+++ b/packages/passkey-controller/src/webauthn/types.ts
@@ -1,7 +1,7 @@
import type {
AuthenticatorTransportFuture,
Base64URLString as Base64URL,
-} from '../types';
+} from '../types.js';
export type PublicKeyCredentialDescriptorJSON = {
id: Base64URL;
diff --git a/packages/passkey-controller/src/webauthn/verify-authentication-response.test.ts b/packages/passkey-controller/src/webauthn/verify-authentication-response.test.ts
index b7fa7bd73b7..fefd25f2f62 100644
--- a/packages/passkey-controller/src/webauthn/verify-authentication-response.test.ts
+++ b/packages/passkey-controller/src/webauthn/verify-authentication-response.test.ts
@@ -1,7 +1,7 @@
-import { bytesToBase64URL, base64URLToBytes } from '../utils/encoding';
-import { decodeClientDataJSON } from './decode-client-data-json';
-import type { PasskeyAuthenticationResponse } from './types';
-import { verifyAuthenticationResponse } from './verify-authentication-response';
+import { bytesToBase64URL, base64URLToBytes } from '../utils/encoding.js';
+import { decodeClientDataJSON } from './decode-client-data-json.js';
+import type { PasskeyAuthenticationResponse } from './types.js';
+import { verifyAuthenticationResponse } from './verify-authentication-response.js';
const EXPECTED_ORIGIN = 'https://dev.dontneeda.pw';
const EXPECTED_RP_ID = 'dev.dontneeda.pw';
diff --git a/packages/passkey-controller/src/webauthn/verify-authentication-response.ts b/packages/passkey-controller/src/webauthn/verify-authentication-response.ts
index a0c99d0a735..67db9d9c368 100644
--- a/packages/passkey-controller/src/webauthn/verify-authentication-response.ts
+++ b/packages/passkey-controller/src/webauthn/verify-authentication-response.ts
@@ -2,14 +2,14 @@ import { decodePartialCBOR } from '@levischuck/tiny-cbor';
import { concatBytes } from '@metamask/utils';
import { sha256 } from '@noble/hashes/sha2';
-import type { AuthenticatorTransportFuture } from '../types';
-import { base64URLToBytes } from '../utils/encoding';
-import { decodeClientDataJSON } from './decode-client-data-json';
-import { matchExpectedRPID } from './match-expected-rp-id';
-import { parseAuthenticatorData } from './parse-authenticator-data';
-import type { ParsedAuthenticatorData } from './types';
-import type { PasskeyAuthenticationResponse } from './types';
-import { verifySignature } from './verify-signature';
+import type { AuthenticatorTransportFuture } from '../types.js';
+import { base64URLToBytes } from '../utils/encoding.js';
+import { decodeClientDataJSON } from './decode-client-data-json.js';
+import { matchExpectedRPID } from './match-expected-rp-id.js';
+import { parseAuthenticatorData } from './parse-authenticator-data.js';
+import type { ParsedAuthenticatorData } from './types.js';
+import type { PasskeyAuthenticationResponse } from './types.js';
+import { verifySignature } from './verify-signature.js';
export type VerifiedAuthenticationResponse =
| { verified: false; authenticationInfo?: never }
diff --git a/packages/passkey-controller/src/webauthn/verify-registration-response.test.ts b/packages/passkey-controller/src/webauthn/verify-registration-response.test.ts
index 8b8e8024aec..9b86c188d00 100644
--- a/packages/passkey-controller/src/webauthn/verify-registration-response.test.ts
+++ b/packages/passkey-controller/src/webauthn/verify-registration-response.test.ts
@@ -2,13 +2,13 @@ import { encodeCBOR } from '@levischuck/tiny-cbor';
import { p256 } from '@noble/curves/p256';
import { sha256 } from '@noble/hashes/sha2';
-import { base64URLToBytes } from '../utils/encoding';
-import { bytesToBase64URL } from '../utils/encoding';
-import { COSEALG, COSECRV, COSEKEYS, COSEKTY } from './constants';
-import { decodeClientDataJSON } from './decode-client-data-json';
-import * as parseAuthenticatorDataModule from './parse-authenticator-data';
-import type { PasskeyRegistrationResponse } from './types';
-import { verifyRegistrationResponse } from './verify-registration-response';
+import { base64URLToBytes } from '../utils/encoding.js';
+import { bytesToBase64URL } from '../utils/encoding.js';
+import { COSEALG, COSECRV, COSEKEYS, COSEKTY } from './constants.js';
+import { decodeClientDataJSON } from './decode-client-data-json.js';
+import * as parseAuthenticatorDataModule from './parse-authenticator-data.js';
+import type { PasskeyRegistrationResponse } from './types.js';
+import { verifyRegistrationResponse } from './verify-registration-response.js';
const EXPECTED_ORIGIN = 'https://dev.dontneeda.pw';
const EXPECTED_RP_ID = 'dev.dontneeda.pw';
diff --git a/packages/passkey-controller/src/webauthn/verify-registration-response.ts b/packages/passkey-controller/src/webauthn/verify-registration-response.ts
index a225a9e0827..904fe7341e6 100644
--- a/packages/passkey-controller/src/webauthn/verify-registration-response.ts
+++ b/packages/passkey-controller/src/webauthn/verify-registration-response.ts
@@ -2,19 +2,19 @@ import { decodePartialCBOR } from '@levischuck/tiny-cbor';
import { concatBytes } from '@metamask/utils';
import { sha256 } from '@noble/hashes/sha2';
-import type { AuthenticatorTransportFuture } from '../types';
+import type { AuthenticatorTransportFuture } from '../types.js';
import {
base64URLToBytes,
bytesToBase64URL,
bytesToHex,
-} from '../utils/encoding';
-import { COSEALG, COSEKEYS } from './constants';
-import { decodeAttestationObject } from './decode-attestation-object';
-import { decodeClientDataJSON } from './decode-client-data-json';
-import { matchExpectedRPID } from './match-expected-rp-id';
-import { parseAuthenticatorData } from './parse-authenticator-data';
-import type { PasskeyRegistrationResponse } from './types';
-import { verifySignature } from './verify-signature';
+} from '../utils/encoding.js';
+import { COSEALG, COSEKEYS } from './constants.js';
+import { decodeAttestationObject } from './decode-attestation-object.js';
+import { decodeClientDataJSON } from './decode-client-data-json.js';
+import { matchExpectedRPID } from './match-expected-rp-id.js';
+import { parseAuthenticatorData } from './parse-authenticator-data.js';
+import type { PasskeyRegistrationResponse } from './types.js';
+import { verifySignature } from './verify-signature.js';
export type VerifiedRegistrationResponse =
| { verified: false; registrationInfo?: never }
diff --git a/packages/passkey-controller/src/webauthn/verify-signature.test.ts b/packages/passkey-controller/src/webauthn/verify-signature.test.ts
index 3632ec93cdc..67b68caa274 100644
--- a/packages/passkey-controller/src/webauthn/verify-signature.test.ts
+++ b/packages/passkey-controller/src/webauthn/verify-signature.test.ts
@@ -3,9 +3,9 @@ import { p384, p521 } from '@noble/curves/nist';
import { sha384, sha512 } from '@noble/hashes/sha2';
import { webcrypto } from 'node:crypto';
-import { base64URLToBytes } from '../utils/encoding';
-import { COSEALG, COSECRV, COSEKEYS, COSEKTY } from './constants';
-import { verifySignature } from './verify-signature';
+import { base64URLToBytes } from '../utils/encoding.js';
+import { COSEALG, COSECRV, COSEKEYS, COSEKTY } from './constants.js';
+import { verifySignature } from './verify-signature.js';
function decodeJwkBase64Url(value: string): Uint8Array {
return Uint8Array.from(
diff --git a/packages/passkey-controller/src/webauthn/verify-signature.ts b/packages/passkey-controller/src/webauthn/verify-signature.ts
index b7e1b6f50b8..558d51724f5 100644
--- a/packages/passkey-controller/src/webauthn/verify-signature.ts
+++ b/packages/passkey-controller/src/webauthn/verify-signature.ts
@@ -3,8 +3,8 @@ import { ed25519 } from '@noble/curves/ed25519';
import { p256, p384, p521 } from '@noble/curves/nist';
import { sha256, sha384, sha512 } from '@noble/hashes/sha2';
-import { bytesToBase64URL } from '../utils/encoding';
-import { COSEALG, COSECRV, COSEKEYS, COSEKTY } from './constants';
+import { bytesToBase64URL } from '../utils/encoding.js';
+import { COSEALG, COSECRV, COSEKEYS, COSEKTY } from './constants.js';
type COSEPublicKey = Map;
diff --git a/packages/permission-controller/jest.config.js b/packages/permission-controller/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/permission-controller/jest.config.js
+++ b/packages/permission-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/permission-controller/package.json b/packages/permission-controller/package.json
index 6beb9a9d7b0..047329952b8 100644
--- a/packages/permission-controller/package.json
+++ b/packages/permission-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/permission-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/permission-controller",
@@ -68,8 +61,8 @@
"nanoid": "^3.3.8"
},
"devDependencies": {
+ "@jest/globals": "^30.4.1",
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/permission-controller/src/Caveat.test.ts b/packages/permission-controller/src/Caveat.test.ts
index 7d4e0c5e443..1fee7f4dbf2 100644
--- a/packages/permission-controller/src/Caveat.test.ts
+++ b/packages/permission-controller/src/Caveat.test.ts
@@ -1,6 +1,6 @@
-import type { Caveat, PermissionConstraint } from '.';
-import { decorateWithCaveats, PermissionType } from '.';
-import * as errors from './errors';
+import type { Caveat, PermissionConstraint } from './..js';
+import { decorateWithCaveats, PermissionType } from './..js';
+import * as errors from './errors.js';
describe('decorateWithCaveats', () => {
it('decorates a method with caveat', async () => {
diff --git a/packages/permission-controller/src/Caveat.ts b/packages/permission-controller/src/Caveat.ts
index 40ec5894a90..f79ded41b35 100644
--- a/packages/permission-controller/src/Caveat.ts
+++ b/packages/permission-controller/src/Caveat.ts
@@ -4,16 +4,16 @@ import { hasProperty } from '@metamask/utils';
import {
CaveatSpecificationMismatchError,
UnrecognizedCaveatTypeError,
-} from './errors';
+} from './errors.js';
import type {
AsyncRestrictedMethod,
RestrictedMethod,
PermissionConstraint,
RestrictedMethodParameters,
-} from './Permission';
-import { PermissionType } from './Permission';
+} from './Permission.js';
+import { PermissionType } from './Permission.js';
// eslint-disable-next-line @typescript-eslint/no-unused-vars
-import type { PermissionController } from './PermissionController';
+import type { PermissionController } from './PermissionController.js';
export type CaveatConstraint = {
/**
diff --git a/packages/permission-controller/src/Permission.test.ts b/packages/permission-controller/src/Permission.test.ts
index a7fdf7a631c..237dc5d8bf9 100644
--- a/packages/permission-controller/src/Permission.test.ts
+++ b/packages/permission-controller/src/Permission.test.ts
@@ -5,10 +5,10 @@ import type {
PermissionConstraint,
PermissionSpecificationBuilder,
RestrictedMethodSpecificationConstraint,
-} from '.';
-import { constructPermission, PermissionType } from '.';
-import { createRestrictedMethodMessenger } from './createRestrictedMethodMessenger';
-import { findCaveat } from './Permission';
+} from './..js';
+import { constructPermission, PermissionType } from './..js';
+import { createRestrictedMethodMessenger } from './createRestrictedMethodMessenger.js';
+import { findCaveat } from './Permission.js';
describe('constructPermission', () => {
it('constructs a permission', () => {
diff --git a/packages/permission-controller/src/Permission.ts b/packages/permission-controller/src/Permission.ts
index 02bb2a507ca..fcf4a171b87 100644
--- a/packages/permission-controller/src/Permission.ts
+++ b/packages/permission-controller/src/Permission.ts
@@ -4,14 +4,14 @@ import type { Json } from '@metamask/utils';
import { nanoid } from 'nanoid';
// eslint-disable-next-line @typescript-eslint/no-unused-vars
-import type { CaveatConstraint, Caveat } from './Caveat';
+import type { CaveatConstraint, Caveat } from './Caveat.js';
import type {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
PermissionController,
PermissionsRequest,
SideEffectMessenger,
-} from './PermissionController';
-import type { SubjectType } from './SubjectMetadataController';
+} from './PermissionController.js';
+import type { SubjectType } from './SubjectMetadataController.js';
/**
* The origin of a subject.
diff --git a/packages/permission-controller/src/PermissionController-method-action-types.ts b/packages/permission-controller/src/PermissionController-method-action-types.ts
index 75305e05abb..db60cd68d80 100644
--- a/packages/permission-controller/src/PermissionController-method-action-types.ts
+++ b/packages/permission-controller/src/PermissionController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { PermissionController } from './PermissionController';
+import type { PermissionController } from './PermissionController.js';
/**
* Checks whether the given method was declared as unrestricted at
diff --git a/packages/permission-controller/src/PermissionController.test.ts b/packages/permission-controller/src/PermissionController.test.ts
index b90e4f3e7ac..5494f33ab6b 100644
--- a/packages/permission-controller/src/PermissionController.test.ts
+++ b/packages/permission-controller/src/PermissionController.test.ts
@@ -1,3 +1,4 @@
+import { jest } from '@jest/globals';
import { deriveStateFromMetadata } from '@metamask/base-controller';
import { isPlainObject } from '@metamask/controller-utils';
import { JsonRpcEngine } from '@metamask/json-rpc-engine';
@@ -33,7 +34,7 @@ import {
RestrictedMethodOptions,
RestrictedMethodParameters,
ValidPermission,
-} from '.';
+} from './..js';
import {
CaveatMutatorOperation,
constructPermission,
@@ -42,10 +43,10 @@ import {
MethodNames,
PermissionController,
PermissionType,
-} from '.';
-import * as errors from './errors';
-import type { EndowmentGetterParams } from './Permission';
-import { SubjectType } from './SubjectMetadataController';
+} from './..js';
+import * as errors from './errors.js';
+import type { EndowmentGetterParams } from './Permission.js';
+import { SubjectType } from './SubjectMetadataController.js';
// Caveat types and specifications
@@ -5907,8 +5908,7 @@ describe('PermissionController', () => {
expect(
Object.keys(
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- messenger.call('PermissionController:getPermissions', 'foo')!,
+ messenger.call('PermissionController:getPermissions', 'foo'),
),
).toStrictEqual(['wallet_getSecretArray']);
diff --git a/packages/permission-controller/src/PermissionController.ts b/packages/permission-controller/src/PermissionController.ts
index 70fe65b6368..82b7a8eb72f 100644
--- a/packages/permission-controller/src/PermissionController.ts
+++ b/packages/permission-controller/src/PermissionController.ts
@@ -38,11 +38,11 @@ import type {
ExtractCaveat,
ExtractCaveats,
ExtractCaveatValue,
-} from './Caveat';
+} from './Caveat.js';
import {
decorateWithCaveats,
isRestrictedMethodCaveatSpecification,
-} from './Caveat';
+} from './Caveat.js';
import {
CaveatAlreadyExistsError,
CaveatDoesNotExistError,
@@ -70,7 +70,7 @@ import {
UnrecognizedCaveatTypeError,
UnrecognizedSubjectError,
userRejectedRequest,
-} from './errors';
+} from './errors.js';
import type {
EndowmentSpecificationConstraint,
ExtractAllowedCaveatTypes,
@@ -86,16 +86,16 @@ import type {
SideEffectHandler,
ValidPermission,
ValidPermissionSpecification,
-} from './Permission';
+} from './Permission.js';
import {
constructPermission,
findCaveat,
hasSpecificationType,
PermissionType,
-} from './Permission';
-import type { PermissionControllerMethodActions } from './PermissionController-method-action-types';
-import type { SubjectMetadataControllerGetSubjectMetadataAction } from './SubjectMetadataController-method-action-types';
-import { collectUniqueAndPairedCaveats, MethodNames } from './utils';
+} from './Permission.js';
+import type { PermissionControllerMethodActions } from './PermissionController-method-action-types.js';
+import type { SubjectMetadataControllerGetSubjectMetadataAction } from './SubjectMetadataController-method-action-types.js';
+import { collectUniqueAndPairedCaveats, MethodNames } from './utils.js';
/**
* Flags for controlling the validation behavior of certain internal methods.
@@ -1895,9 +1895,7 @@ export class PermissionController<
>,
): void {
this.update((draftState) => {
- if (!draftState.subjects[origin]) {
- draftState.subjects[origin] = { origin, permissions: {} };
- }
+ draftState.subjects[origin] ??= { origin, permissions: {} };
draftState.subjects[origin].permissions = castDraft(permissions);
});
diff --git a/packages/permission-controller/src/SubjectMetadataController-method-action-types.ts b/packages/permission-controller/src/SubjectMetadataController-method-action-types.ts
index 7857132236d..1c0ceca3998 100644
--- a/packages/permission-controller/src/SubjectMetadataController-method-action-types.ts
+++ b/packages/permission-controller/src/SubjectMetadataController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { SubjectMetadataController } from './SubjectMetadataController';
+import type { SubjectMetadataController } from './SubjectMetadataController.js';
/**
* Clears the state of this controller. Also resets the cache of subjects
diff --git a/packages/permission-controller/src/SubjectMetadataController.test.ts b/packages/permission-controller/src/SubjectMetadataController.test.ts
index b58532db3f5..1e1e8b6eb3e 100644
--- a/packages/permission-controller/src/SubjectMetadataController.test.ts
+++ b/packages/permission-controller/src/SubjectMetadataController.test.ts
@@ -1,3 +1,4 @@
+import { jest } from '@jest/globals';
import { deriveStateFromMetadata } from '@metamask/base-controller';
import { Messenger, MOCK_ANY_NAMESPACE } from '@metamask/messenger';
import type {
@@ -10,11 +11,11 @@ import type { Json } from '@metamask/utils';
import type {
SubjectMetadata,
SubjectMetadataControllerMessenger,
-} from './SubjectMetadataController';
+} from './SubjectMetadataController.js';
import {
SubjectMetadataController,
SubjectType,
-} from './SubjectMetadataController';
+} from './SubjectMetadataController.js';
const controllerName = 'SubjectMetadataController';
diff --git a/packages/permission-controller/src/SubjectMetadataController.ts b/packages/permission-controller/src/SubjectMetadataController.ts
index 19a3e516601..dc781c6d9c2 100644
--- a/packages/permission-controller/src/SubjectMetadataController.ts
+++ b/packages/permission-controller/src/SubjectMetadataController.ts
@@ -6,12 +6,12 @@ import { BaseController } from '@metamask/base-controller';
import type { Messenger } from '@metamask/messenger';
import type { Json } from '@metamask/utils';
+import type { PermissionControllerHasPermissionsAction } from './PermissionController-method-action-types.js';
import type {
GenericPermissionController,
PermissionSubjectMetadata,
-} from './PermissionController';
-import type { PermissionControllerHasPermissionsAction } from './PermissionController-method-action-types';
-import type { SubjectMetadataControllerMethodActions } from './SubjectMetadataController-method-action-types';
+} from './PermissionController.js';
+import type { SubjectMetadataControllerMethodActions } from './SubjectMetadataController-method-action-types.js';
const controllerName = 'SubjectMetadataController';
diff --git a/packages/permission-controller/src/createRestrictedMethodMessenger.test.ts b/packages/permission-controller/src/createRestrictedMethodMessenger.test.ts
index 0cf75cee098..62aeba55f14 100644
--- a/packages/permission-controller/src/createRestrictedMethodMessenger.test.ts
+++ b/packages/permission-controller/src/createRestrictedMethodMessenger.test.ts
@@ -1,6 +1,6 @@
import { Messenger } from '@metamask/messenger';
-import { createRestrictedMethodMessenger } from './createRestrictedMethodMessenger';
+import { createRestrictedMethodMessenger } from './createRestrictedMethodMessenger.js';
type FooAction = {
type: 'Foo:ping';
diff --git a/packages/permission-controller/src/errors.test.ts b/packages/permission-controller/src/errors.test.ts
index a10d1416b96..80263036e3b 100644
--- a/packages/permission-controller/src/errors.test.ts
+++ b/packages/permission-controller/src/errors.test.ts
@@ -1,7 +1,7 @@
import {
CaveatMergeTypeMismatchError,
EndowmentPermissionDoesNotExistError,
-} from './errors';
+} from './errors.js';
describe('error', () => {
describe('CaveatMergeTypeMismatchError', () => {
diff --git a/packages/permission-controller/src/errors.ts b/packages/permission-controller/src/errors.ts
index 9c0d9ed65cc..37bc6b7853f 100644
--- a/packages/permission-controller/src/errors.ts
+++ b/packages/permission-controller/src/errors.ts
@@ -10,9 +10,9 @@ import {
JsonRpcError,
} from '@metamask/rpc-errors';
-import type { CaveatConstraint } from './Caveat';
-import type { PermissionType } from './Permission';
-import type { PermissionDiffMap } from './PermissionController';
+import type { CaveatConstraint } from './Caveat.js';
+import type { PermissionType } from './Permission.js';
+import type { PermissionDiffMap } from './PermissionController.js';
type UnauthorizedArg = {
data?: Record;
diff --git a/packages/permission-controller/src/index.ts b/packages/permission-controller/src/index.ts
index 962b7921ad2..9781a532965 100644
--- a/packages/permission-controller/src/index.ts
+++ b/packages/permission-controller/src/index.ts
@@ -1,8 +1,8 @@
-export * from './Caveat';
-export { createRestrictedMethodMessenger } from './createRestrictedMethodMessenger';
-export * from './errors';
-export * from './Permission';
-export * from './PermissionController';
+export * from './Caveat.js';
+export { createRestrictedMethodMessenger } from './createRestrictedMethodMessenger.js';
+export * from './errors.js';
+export * from './Permission.js';
+export * from './PermissionController.js';
export type {
PermissionControllerClearStateAction,
PermissionControllerExecuteRestrictedMethodAction,
@@ -26,18 +26,18 @@ export type {
PermissionControllerUpdatePermissionsByCaveatAction,
PermissionControllerAcceptPermissionsRequestAction,
PermissionControllerRejectPermissionsRequestAction,
-} from './PermissionController-method-action-types';
+} from './PermissionController-method-action-types.js';
export {
createPermissionMiddleware,
createPermissionMiddlewareV2,
type PermissionMiddlewareActions,
-} from './permission-middleware';
-export type { ExtractSpecifications } from './utils';
-export { MethodNames } from './utils';
-export * from './SubjectMetadataController';
+} from './permission-middleware.js';
+export type { ExtractSpecifications } from './utils.js';
+export { MethodNames } from './utils.js';
+export * from './SubjectMetadataController.js';
export type {
SubjectMetadataControllerClearStateAction,
SubjectMetadataControllerAddSubjectMetadataAction,
SubjectMetadataControllerGetSubjectMetadataAction,
SubjectMetadataControllerTrimMetadataStateAction,
-} from './SubjectMetadataController-method-action-types';
+} from './SubjectMetadataController-method-action-types.js';
diff --git a/packages/permission-controller/src/permission-middleware.ts b/packages/permission-controller/src/permission-middleware.ts
index 6fbb954465a..9915f96ec6e 100644
--- a/packages/permission-controller/src/permission-middleware.ts
+++ b/packages/permission-controller/src/permission-middleware.ts
@@ -7,11 +7,11 @@ import type { JsonRpcMiddleware as JsonRpcMiddlewareV2 } from '@metamask/json-rp
import type { Messenger } from '@metamask/messenger';
import type { Json } from '@metamask/utils';
-import type { RestrictedMethodParameters } from './Permission';
+import type { RestrictedMethodParameters } from './Permission.js';
import type {
PermissionControllerExecuteRestrictedMethodAction,
PermissionControllerHasUnrestrictedMethodAction,
-} from './PermissionController-method-action-types';
+} from './PermissionController-method-action-types.js';
/**
* The set of messenger actions required by the permission middleware.
diff --git a/packages/permission-controller/src/utils.ts b/packages/permission-controller/src/utils.ts
index d576924ad6d..7d229f97446 100644
--- a/packages/permission-controller/src/utils.ts
+++ b/packages/permission-controller/src/utils.ts
@@ -2,12 +2,12 @@ import type {
CaveatConstraint,
CaveatSpecificationConstraint,
CaveatSpecificationMap,
-} from './Caveat';
+} from './Caveat.js';
import type {
PermissionConstraint,
PermissionSpecificationConstraint,
PermissionSpecificationMap,
-} from './Permission';
+} from './Permission.js';
export enum MethodNames {
RequestPermissions = 'wallet_requestPermissions',
diff --git a/packages/permission-log-controller/jest.config.js b/packages/permission-log-controller/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/permission-log-controller/jest.config.js
+++ b/packages/permission-log-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/permission-log-controller/package.json b/packages/permission-log-controller/package.json
index 4855571b3c6..b27f983960f 100644
--- a/packages/permission-log-controller/package.json
+++ b/packages/permission-log-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/permission-log-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/permission-log-controller",
@@ -62,7 +55,6 @@
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/deep-freeze-strict": "^1.1.0",
"@types/jest": "^29.5.14",
"deep-freeze-strict": "^1.1.1",
diff --git a/packages/permission-log-controller/src/PermissionLogController-method-action-types.ts b/packages/permission-log-controller/src/PermissionLogController-method-action-types.ts
index b68e61affa2..362445e3e70 100644
--- a/packages/permission-log-controller/src/PermissionLogController-method-action-types.ts
+++ b/packages/permission-log-controller/src/PermissionLogController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { PermissionLogController } from './PermissionLogController';
+import type { PermissionLogController } from './PermissionLogController.js';
/**
* Updates the exposed account history for the given origin.
diff --git a/packages/permission-log-controller/src/PermissionLogController.ts b/packages/permission-log-controller/src/PermissionLogController.ts
index 24a71602715..f62831e3bcd 100644
--- a/packages/permission-log-controller/src/PermissionLogController.ts
+++ b/packages/permission-log-controller/src/PermissionLogController.ts
@@ -19,8 +19,8 @@ import {
LOG_METHOD_TYPES,
WALLET_PREFIX,
CAVEAT_TYPES,
-} from './enums';
-import type { PermissionLogControllerMethodActions } from './PermissionLogController-method-action-types';
+} from './enums.js';
+import type { PermissionLogControllerMethodActions } from './PermissionLogController-method-action-types.js';
export type JsonRpcRequestWithOrigin<
Params extends JsonRpcParams = JsonRpcParams,
diff --git a/packages/permission-log-controller/src/index.ts b/packages/permission-log-controller/src/index.ts
index edf1e9e47c5..ea689446ece 100644
--- a/packages/permission-log-controller/src/index.ts
+++ b/packages/permission-log-controller/src/index.ts
@@ -1,8 +1,8 @@
-export { PermissionLogController } from './PermissionLogController';
+export { PermissionLogController } from './PermissionLogController.js';
export type {
PermissionLogControllerUpdateAccountsHistoryAction,
PermissionLogControllerCreateMiddlewareAction,
-} from './PermissionLogController-method-action-types';
+} from './PermissionLogController-method-action-types.js';
export type {
JsonRpcRequestWithOrigin,
Caveat,
@@ -18,4 +18,4 @@ export type {
PermissionLogControllerMessenger,
PermissionLogControllerState,
PermissionLogControllerOptions,
-} from './PermissionLogController';
+} from './PermissionLogController.js';
diff --git a/packages/permission-log-controller/tests/PermissionLogController.test.ts b/packages/permission-log-controller/tests/PermissionLogController.test.ts
index 96e87463dd6..26948d9673f 100644
--- a/packages/permission-log-controller/tests/PermissionLogController.test.ts
+++ b/packages/permission-log-controller/tests/PermissionLogController.test.ts
@@ -13,14 +13,14 @@ import { PendingJsonRpcResponseStruct } from '@metamask/utils';
import type { PendingJsonRpcResponse, JsonRpcRequest } from '@metamask/utils';
import { nanoid } from 'nanoid';
-import { LOG_LIMIT, LOG_METHOD_TYPES } from '../src/enums';
-import { PermissionLogController } from '../src/PermissionLogController';
+import { LOG_LIMIT, LOG_METHOD_TYPES } from '../src/enums.js';
+import { PermissionLogController } from '../src/PermissionLogController.js';
import type {
Permission,
PermissionLogControllerState,
PermissionLogControllerMessenger,
-} from '../src/PermissionLogController';
-import { constants, getters, noop } from './helpers';
+} from '../src/PermissionLogController.js';
+import { constants, getters, noop } from './helpers.js';
const { PERMS, RPC_REQUESTS } = getters;
const { ACCOUNTS, EXPECTED_HISTORIES, SUBJECTS, PERM_NAMES, REQUEST_IDS } =
diff --git a/packages/permission-log-controller/tests/helpers.ts b/packages/permission-log-controller/tests/helpers.ts
index 28a1b2e293e..b39f310124a 100644
--- a/packages/permission-log-controller/tests/helpers.ts
+++ b/packages/permission-log-controller/tests/helpers.ts
@@ -7,7 +7,7 @@ import { JsonRpcRequestStruct } from '@metamask/utils';
import type { Json } from '@metamask/utils';
import deepFreeze from 'deep-freeze-strict';
-import { CAVEAT_TYPES } from '../src/enums';
+import { CAVEAT_TYPES } from '../src/enums.js';
/**
* This file contains mocks for the PermissionLogController tests.
diff --git a/packages/permission-log-controller/tests/index.test.ts b/packages/permission-log-controller/tests/index.test.ts
index c33564c9c2b..ef6a8fdbc9a 100644
--- a/packages/permission-log-controller/tests/index.test.ts
+++ b/packages/permission-log-controller/tests/index.test.ts
@@ -1,4 +1,4 @@
-import * as allExports from '../src';
+import * as allExports from '../src.js';
describe('Package exports', () => {
it('has expected exports', () => {
diff --git a/packages/perps-controller/jest.config.js b/packages/perps-controller/jest.config.js
index 1f804fe6868..6a9872c0c5a 100644
--- a/packages/perps-controller/jest.config.js
+++ b/packages/perps-controller/jest.config.js
@@ -3,12 +3,12 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
module.exports = {
...merge(baseConfig, {
diff --git a/packages/perps-controller/package.json b/packages/perps-controller/package.json
index 21fc9a52fea..863ee519fd9 100644
--- a/packages/perps-controller/package.json
+++ b/packages/perps-controller/package.json
@@ -21,59 +21,28 @@
"!dist/services/MYXClientService*",
"!dist/services/MYXWalletService*"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./constants": {
- "import": {
- "types": "./dist/constants/index.d.mts",
- "default": "./dist/constants/index.mjs"
- },
- "require": {
- "types": "./dist/constants/index.d.cts",
- "default": "./dist/constants/index.cjs"
- }
+ "types": "./dist/constants/index.d.ts",
+ "import": "./dist/constants/index.js"
},
"./constants/*": {
- "import": {
- "types": "./dist/constants/*.d.mts",
- "default": "./dist/constants/*.mjs"
- },
- "require": {
- "types": "./dist/constants/*.d.cts",
- "default": "./dist/constants/*.cjs"
- }
+ "types": "./dist/constants/*.d.ts",
+ "import": "./dist/constants/*.js"
},
"./types": {
- "import": {
- "types": "./dist/types/index.d.mts",
- "default": "./dist/types/index.mjs"
- },
- "require": {
- "types": "./dist/types/index.d.cts",
- "default": "./dist/types/index.cjs"
- }
+ "types": "./dist/types/index.d.ts",
+ "import": "./dist/types/index.js"
},
"./utils/*": {
- "import": {
- "types": "./dist/utils/*.d.mts",
- "default": "./dist/utils/*.mjs"
- },
- "require": {
- "types": "./dist/utils/*.d.cts",
- "default": "./dist/utils/*.cjs"
- }
+ "types": "./dist/utils/*.d.ts",
+ "import": "./dist/utils/*.js"
},
"./package.json": "./package.json"
},
@@ -82,8 +51,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/perps-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/perps-controller",
@@ -120,7 +89,6 @@
"@metamask/profile-sync-controller": "^28.3.0",
"@metamask/remote-feature-flag-controller": "^4.2.2",
"@metamask/transaction-controller": "^69.0.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"@types/uuid": "^8.3.0",
"deepmerge": "^4.2.2",
diff --git a/packages/perps-controller/src/PerpsController-method-action-types.ts b/packages/perps-controller/src/PerpsController-method-action-types.ts
index bd9abaa38c8..6297e2b79f6 100644
--- a/packages/perps-controller/src/PerpsController-method-action-types.ts
+++ b/packages/perps-controller/src/PerpsController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { PerpsController } from './PerpsController';
+import type { PerpsController } from './PerpsController.js';
/**
* Read cached market data for the currently active provider (or aggregated).
diff --git a/packages/perps-controller/src/PerpsController.ts b/packages/perps-controller/src/PerpsController.ts
index a7689aed4d0..5ebbdbe8c9d 100644
--- a/packages/perps-controller/src/PerpsController.ts
+++ b/packages/perps-controller/src/PerpsController.ts
@@ -14,14 +14,14 @@ import type { Messenger } from '@metamask/messenger';
import type { Json } from '@metamask/utils';
import { v4 as uuidv4 } from 'uuid';
-import { CandlePeriod } from './constants/chartConfig';
+import { CandlePeriod } from './constants/chartConfig.js';
import {
PERPS_EVENT_PROPERTY,
PERPS_EVENT_VALUE,
-} from './constants/eventNames';
-import { USDC_SYMBOL } from './constants/hyperLiquidConfig';
-import { PerpsMeasurementName } from './constants/performanceMetrics';
-import type { SortOptionId } from './constants/perpsConfig';
+} from './constants/eventNames.js';
+import { USDC_SYMBOL } from './constants/hyperLiquidConfig.js';
+import { PerpsMeasurementName } from './constants/performanceMetrics.js';
+import type { SortOptionId } from './constants/perpsConfig.js';
import {
PERPS_CONSTANTS,
MARKET_SORTING_CONFIG,
@@ -29,21 +29,21 @@ import {
PERPS_DISK_CACHE_USER_DATA,
buildProviderCacheKey,
MAX_SLIPPAGE_BOUNDS,
-} from './constants/perpsConfig';
-import type { PerpsControllerMethodActions } from './PerpsController-method-action-types';
-import { PERPS_ERROR_CODES } from './perpsErrorCodes';
-import { AggregatedPerpsProvider } from './providers/AggregatedPerpsProvider';
-import { HyperLiquidProvider } from './providers/HyperLiquidProvider';
-import { AccountService } from './services/AccountService';
-import { DataLakeService } from './services/DataLakeService';
-import { DepositService } from './services/DepositService';
-import { EligibilityService } from './services/EligibilityService';
-import { FeatureFlagConfigurationService } from './services/FeatureFlagConfigurationService';
-import { MarketDataService } from './services/MarketDataService';
-import { RewardsIntegrationService } from './services/RewardsIntegrationService';
-import type { ServiceContext } from './services/ServiceContext';
-import { TerminalMarketService } from './services/TerminalMarketService';
-import { TradingService } from './services/TradingService';
+} from './constants/perpsConfig.js';
+import type { PerpsControllerMethodActions } from './PerpsController-method-action-types.js';
+import { PERPS_ERROR_CODES } from './perpsErrorCodes.js';
+import { AggregatedPerpsProvider } from './providers/AggregatedPerpsProvider.js';
+import { HyperLiquidProvider } from './providers/HyperLiquidProvider.js';
+import { AccountService } from './services/AccountService.js';
+import { DataLakeService } from './services/DataLakeService.js';
+import { DepositService } from './services/DepositService.js';
+import { EligibilityService } from './services/EligibilityService.js';
+import { FeatureFlagConfigurationService } from './services/FeatureFlagConfigurationService.js';
+import { MarketDataService } from './services/MarketDataService.js';
+import { RewardsIntegrationService } from './services/RewardsIntegrationService.js';
+import type { ServiceContext } from './services/ServiceContext.js';
+import { TerminalMarketService } from './services/TerminalMarketService.js';
+import { TradingService } from './services/TradingService.js';
// PerpsStreamChannelKey removed: using string for channel keys (PerpsStreamManager.pauseChannel takes string)
import {
WebSocketConnectionState,
@@ -53,7 +53,7 @@ import {
isVersionGatedFeatureFlag,
MARKET_CATEGORIES,
// Platform dependencies interface for core migration (bundles all platform-specific deps)
-} from './types';
+} from './types.js';
import type {
AccountState,
AssetRoute,
@@ -120,28 +120,31 @@ import type {
PerpsAddTransactionOptions,
MarketTypeFilter,
MYXCredentials,
-} from './types';
-import type { SortDirection } from './types';
+} from './types.js';
+import type { SortDirection } from './types.js';
import type {
PerpsControllerAllowedActions,
PerpsControllerAllowedEvents,
-} from './types/messenger';
-import type { CandleData } from './types/perps-types';
+} from './types/messenger.js';
+import type { CandleData } from './types/perps-types.js';
import {
LastTransactionResult,
TransactionStatus,
-} from './types/transactionTypes';
-import { getSelectedEvmAccountFromMessenger } from './utils/accountUtils';
-import { ensureError } from './utils/errorUtils';
-import { parseAssetName } from './utils/hyperLiquidAdapter';
-import { compileMarketPattern, shouldIncludeMarket } from './utils/marketUtils';
-import type { CompiledMarketPattern } from './utils/marketUtils';
+} from './types/transactionTypes.js';
+import { getSelectedEvmAccountFromMessenger } from './utils/accountUtils.js';
+import { ensureError } from './utils/errorUtils.js';
+import { parseAssetName } from './utils/hyperLiquidAdapter.js';
+import {
+ compileMarketPattern,
+ shouldIncludeMarket,
+} from './utils/marketUtils.js';
+import type { CompiledMarketPattern } from './utils/marketUtils.js';
import {
hydrateFromDiskSync,
persistMarketEntriesToDisk,
persistUserEntriesToDisk,
-} from './utils/perpsDiskPersistence';
-import { wait } from './utils/wait';
+} from './utils/perpsDiskPersistence.js';
+import { wait } from './utils/wait.js';
/** Derived type for logger options from PerpsLogger interface */
type PerpsLoggerOptions = Parameters[1];
@@ -222,7 +225,7 @@ export type SelectedPaymentTokenSnapshot = {
};
// Re-export error codes from separate file to avoid circular dependencies
-export { PERPS_ERROR_CODES, type PerpsErrorCode } from './perpsErrorCodes';
+export { PERPS_ERROR_CODES, type PerpsErrorCode } from './perpsErrorCodes.js';
/**
* Initialization state enum for state machine tracking
diff --git a/packages/perps-controller/src/aggregation/SubscriptionMultiplexer.ts b/packages/perps-controller/src/aggregation/SubscriptionMultiplexer.ts
index 3822072ca79..2a520cd9e3c 100644
--- a/packages/perps-controller/src/aggregation/SubscriptionMultiplexer.ts
+++ b/packages/perps-controller/src/aggregation/SubscriptionMultiplexer.ts
@@ -8,7 +8,7 @@
* - Cache latest updates per provider per symbol for aggregation
*/
-import { PERPS_CONSTANTS } from '../constants/perpsConfig';
+import { PERPS_CONSTANTS } from '../constants/perpsConfig.js';
import type {
PerpsProviderType,
PerpsProvider,
@@ -23,8 +23,8 @@ import type {
SubscribeOrderFillsParams,
SubscribeOrdersParams,
SubscribeAccountParams,
-} from '../types';
-import { ensureError } from '../utils/errorUtils';
+} from '../types.js';
+import { ensureError } from '../utils/errorUtils.js';
/**
* Options for constructing SubscriptionMultiplexer
diff --git a/packages/perps-controller/src/aggregation/index.ts b/packages/perps-controller/src/aggregation/index.ts
index 00b4fbfec0f..bc4b3e19c38 100644
--- a/packages/perps-controller/src/aggregation/index.ts
+++ b/packages/perps-controller/src/aggregation/index.ts
@@ -1,7 +1,7 @@
/**
* Provider aggregation module exports
*/
-export { SubscriptionMultiplexer } from './SubscriptionMultiplexer';
+export { SubscriptionMultiplexer } from './SubscriptionMultiplexer.js';
export type {
PriceAggregationMode,
MultiplexedPricesParams,
@@ -9,4 +9,4 @@ export type {
MultiplexedOrderFillsParams,
MultiplexedOrdersParams,
MultiplexedAccountParams,
-} from './SubscriptionMultiplexer';
+} from './SubscriptionMultiplexer.js';
diff --git a/packages/perps-controller/src/constants/hyperLiquidConfig.ts b/packages/perps-controller/src/constants/hyperLiquidConfig.ts
index 667598b3548..a8fc9927c15 100644
--- a/packages/perps-controller/src/constants/hyperLiquidConfig.ts
+++ b/packages/perps-controller/src/constants/hyperLiquidConfig.ts
@@ -1,7 +1,7 @@
import type { CaipAssetId, CaipChainId, Hex } from '@metamask/utils';
-import { MarketCategory } from '../types';
-import type { MarketType } from '../types';
+import { MarketCategory } from '../types.js';
+import type { MarketType } from '../types.js';
import type {
HyperLiquidNetwork,
HyperLiquidEndpoints,
@@ -11,7 +11,7 @@ import type {
HyperLiquidTransportConfig,
TradingDefaultsConfig,
FeeRatesConfig,
-} from '../types/perps-types';
+} from '../types/perps-types.js';
// Network constants
export const ARBITRUM_MAINNET_CHAIN_ID_HEX = '0xa4b1' as const;
diff --git a/packages/perps-controller/src/constants/index.ts b/packages/perps-controller/src/constants/index.ts
index aedcaaec560..cd510d8579c 100644
--- a/packages/perps-controller/src/constants/index.ts
+++ b/packages/perps-controller/src/constants/index.ts
@@ -1,11 +1,11 @@
/**
* Barrel re-export for all portable constants in controllers/
*/
-export * from './chartConfig';
-export * from './eventNames';
-export * from './hyperLiquidConfig';
-export * from './orderTypes';
-export * from './perpsConfig';
-export * from './transactionsHistoryConfig';
-export * from './performanceMetrics';
-export * from './myxConfig';
+export * from './chartConfig.js';
+export * from './eventNames.js';
+export * from './hyperLiquidConfig.js';
+export * from './orderTypes.js';
+export * from './perpsConfig.js';
+export * from './transactionsHistoryConfig.js';
+export * from './performanceMetrics.js';
+export * from './myxConfig.js';
diff --git a/packages/perps-controller/src/constants/myxConfig.ts b/packages/perps-controller/src/constants/myxConfig.ts
index 5c0abacaa5a..3eaf86976b1 100644
--- a/packages/perps-controller/src/constants/myxConfig.ts
+++ b/packages/perps-controller/src/constants/myxConfig.ts
@@ -12,7 +12,7 @@ import type {
MYXNetwork,
MYXEndpoints,
MYXAssetConfigs,
-} from '../types/myx-types';
+} from '../types/myx-types.js';
// ============================================================================
// Network Constants
diff --git a/packages/perps-controller/src/index.ts b/packages/perps-controller/src/index.ts
index 6e3e15352a5..bab97d648cd 100644
--- a/packages/perps-controller/src/index.ts
+++ b/packages/perps-controller/src/index.ts
@@ -32,7 +32,7 @@ export {
PerpsController,
getDefaultPerpsControllerState,
InitializationState,
-} from './PerpsController';
+} from './PerpsController.js';
export type {
PerpsControllerState,
PerpsControllerOptions,
@@ -40,7 +40,7 @@ export type {
PerpsControllerGetStateAction,
PerpsControllerActions,
PerpsControllerEvents,
-} from './PerpsController';
+} from './PerpsController.js';
export type {
PerpsControllerCalculateFeesAction,
PerpsControllerCalculateLiquidationPriceAction,
@@ -132,10 +132,10 @@ export type {
PerpsControllerValidateOrderAction,
PerpsControllerValidateWithdrawalAction,
PerpsControllerWithdrawAction,
-} from './PerpsController-method-action-types';
+} from './PerpsController-method-action-types.js';
// Provider interfaces and implementations
-export { HyperLiquidProvider } from './providers/HyperLiquidProvider';
+export { HyperLiquidProvider } from './providers/HyperLiquidProvider.js';
// Type definitions (explicit named exports)
export {
@@ -143,7 +143,7 @@ export {
PerpsAnalyticsEvent,
MARKET_CATEGORIES,
MarketCategory,
-} from './types';
+} from './types.js';
export type {
RawLedgerUpdate,
UserHistoryItem,
@@ -259,12 +259,12 @@ export type {
PaymentToken,
PerpsSelectedPaymentToken,
VersionGatedFeatureFlag,
-} from './types';
+} from './types.js';
export {
PerpsTraceNames,
PerpsTraceOperations,
isVersionGatedFeatureFlag,
-} from './types';
+} from './types.js';
// Types from sub-modules (re-exported via types/index.ts)
export type {
@@ -279,14 +279,14 @@ export type {
ReconnectOptions,
ExtendedAssetMeta,
ExtendedPerpDex,
-} from './types';
+} from './types.js';
export type {
BaseTransactionResult,
LastTransactionResult,
TransactionStatus,
TransactionRecord,
-} from './types';
-export { isTransactionRecord, isLastTransactionResult } from './types';
+} from './types.js';
+export { isTransactionRecord, isLastTransactionResult } from './types.js';
export type {
AssetPosition,
SpotBalance,
@@ -303,7 +303,7 @@ export type {
MetaAndAssetCtxsResponse,
PredictedFundingsResponse,
SpotMetaResponse,
-} from './types';
+} from './types.js';
export type {
HyperLiquidEndpoints,
AssetNetworkConfig,
@@ -317,8 +317,8 @@ export type {
TradingDefaultsConfig,
FeeRatesConfig,
HyperLiquidNetwork,
-} from './types';
-export type { PerpsToken } from './types';
+} from './types.js';
+export type { PerpsToken } from './types.js';
// Constants (explicit named exports)
export {
@@ -332,10 +332,10 @@ export {
getCandlePeriodsForDuration,
getDefaultCandlePeriodForDuration,
calculateCandleCount,
-} from './constants';
-export { PERPS_EVENT_PROPERTY, PERPS_EVENT_VALUE } from './constants';
-export { DETAILED_ORDER_TYPES, isTPSLOrder } from './constants';
-export { PERPS_TRANSACTIONS_HISTORY_CONSTANTS } from './constants';
+} from './constants.js';
+export { PERPS_EVENT_PROPERTY, PERPS_EVENT_VALUE } from './constants.js';
+export { DETAILED_ORDER_TYPES, isTPSLOrder } from './constants.js';
+export { PERPS_TRANSACTIONS_HISTORY_CONSTANTS } from './constants.js';
export {
ARBITRUM_MAINNET_CHAIN_ID_HEX,
ARBITRUM_MAINNET_CHAIN_ID,
@@ -389,9 +389,9 @@ export {
INITIAL_AMOUNT_UI_PROGRESS,
WITHDRAWAL_PROGRESS_STAGES,
PROGRESS_BAR_COMPLETION_DELAY_MS,
-} from './constants';
-export type { SupportedAsset } from './constants';
-export { PerpsMeasurementName } from './constants';
+} from './constants.js';
+export type { SupportedAsset } from './constants.js';
+export { PerpsMeasurementName } from './constants.js';
export {
MYX_MAINNET_CHAIN_ID,
MYX_TESTNET_CHAIN_ID,
@@ -420,7 +420,7 @@ export {
MYX_DEFAULT_SLIPPAGE_BPS,
MYX_MINIMUM_ORDER_SIZE_USD,
MYX_EXECUTION_FEE_TOKEN,
-} from './constants';
+} from './constants.js';
export {
PERPS_CONSTANTS,
WITHDRAWAL_CONSTANTS,
@@ -437,8 +437,8 @@ export {
MARKET_SORTING_CONFIG,
PROVIDER_CONFIG,
FUNDING_RATE_CONFIG,
-} from './constants';
-export type { SortOptionId } from './constants';
+} from './constants.js';
+export type { SortOptionId } from './constants.js';
// Utilities (explicit named exports)
export {
@@ -447,16 +447,16 @@ export {
getSelectedEvmAccount,
calculateWeightedReturnOnEquity,
aggregateAccountStates,
-} from './utils';
-export type { ReturnOnEquityInput } from './utils';
-export { ensureError, isAbortError } from './utils';
+} from './utils.js';
+export type { ReturnOnEquityInput } from './utils.js';
+export { ensureError, isAbortError } from './utils.js';
export type {
OrderBookCacheEntry,
ProcessL2BookDataParams,
ProcessBboDataParams,
-} from './utils';
-export { processL2BookData, processBboData } from './utils';
-export type { ValidationDebugLogger } from './utils';
+} from './utils.js';
+export { processL2BookData, processBboData } from './utils.js';
+export type { ValidationDebugLogger } from './utils.js';
export {
createErrorResult,
validateWithdrawalParams,
@@ -468,26 +468,26 @@ export {
getMaxOrderValue,
validateOrderParams,
validateCoinExists,
-} from './utils';
+} from './utils.js';
export {
generatePerpsId,
generateDepositId,
generateWithdrawalId,
generateOrderId,
generateTransactionId,
-} from './utils';
+} from './utils.js';
export {
calculateOpenInterestUSD,
isMarketTradable,
transformMarketData,
formatChange,
-} from './utils';
-export type { HyperLiquidMarketData } from './utils';
+} from './utils.js';
+export type { HyperLiquidMarketData } from './utils.js';
export {
getPerpsConnectionAttemptContext,
withPerpsConnectionAttemptContext,
-} from './utils/perpsConnectionAttemptContext';
-export type { PerpsConnectionAttemptContext } from './utils/perpsConnectionAttemptContext';
+} from './utils/perpsConnectionAttemptContext.js';
+export type { PerpsConnectionAttemptContext } from './utils/perpsConnectionAttemptContext.js';
export {
MAX_MARKET_PATTERN_LENGTH,
escapeRegex,
@@ -506,9 +506,9 @@ export {
isHip3Market,
rankMarketsByQuery,
getMarketMatchRank,
-} from './utils';
-export { MarketMatchRank } from './utils';
-export type { MarketPatternMatcher, CompiledMarketPattern } from './utils';
+} from './utils.js';
+export { MarketMatchRank } from './utils.js';
+export type { MarketPatternMatcher, CompiledMarketPattern } from './utils.js';
export type {
OrderCalculationsDebugLogger,
CalculateFinalPositionSizeParams,
@@ -517,7 +517,7 @@ export type {
CalculateOrderPriceAndSizeResult,
BuildOrdersArrayParams,
BuildOrdersArrayResult,
-} from './utils';
+} from './utils.js';
export {
calculatePositionSize,
calculateMarginRequired,
@@ -525,28 +525,28 @@ export {
calculateFinalPositionSize,
calculateOrderPriceAndSize,
buildOrdersArray,
-} from './utils';
+} from './utils.js';
export {
formatAccountToCaipAccountId,
isCaipAccountId,
handleRewardsError,
-} from './utils';
+} from './utils.js';
export {
countSignificantFigures,
hasExceededSignificantFigures,
roundToSignificantFigures,
-} from './utils';
-export type { SortMarketsParams } from './utils';
-export { parseVolume, sortMarkets } from './utils';
-export type { StandaloneInfoClientOptions } from './utils';
+} from './utils.js';
+export type { SortMarketsParams } from './utils.js';
+export { parseVolume, sortMarkets } from './utils.js';
+export type { StandaloneInfoClientOptions } from './utils.js';
export {
createStandaloneInfoClient,
queryStandaloneClearinghouseStates,
queryStandaloneOpenOrders,
-} from './utils';
-export { stripQuotes, parseCommaSeparatedString } from './utils';
-export { generateERC20TransferData } from './utils';
-export { wait } from './utils';
+} from './utils.js';
+export { stripQuotes, parseCommaSeparatedString } from './utils.js';
+export { generateERC20TransferData } from './utils.js';
+export { wait } from './utils.js';
export {
adaptOrderToSDK,
adaptPositionFromSDK,
@@ -559,9 +559,9 @@ export {
calculateHip3AssetId,
parseAssetName,
adaptHyperLiquidLedgerUpdateToUserHistoryItem,
-} from './utils';
-export { getEnvironment } from './utils';
-export type { FiatRangeConfig } from './utils';
+} from './utils.js';
+export { getEnvironment } from './utils.js';
+export type { FiatRangeConfig } from './utils.js';
export {
PRICE_THRESHOLD,
formatWithSignificantDigits,
@@ -572,11 +572,11 @@ export {
formatPnl,
formatPercentage,
formatFundingRate,
-} from './utils';
+} from './utils.js';
// Error codes (explicit named exports)
-export { PERPS_ERROR_CODES } from './perpsErrorCodes';
-export type { PerpsErrorCode } from './perpsErrorCodes';
+export { PERPS_ERROR_CODES } from './perpsErrorCodes.js';
+export type { PerpsErrorCode } from './perpsErrorCodes.js';
// Selectors (explicit named exports)
export {
@@ -589,11 +589,11 @@ export {
selectPendingTradeConfiguration,
selectMarketFilterPreferences,
selectOrderBookGrouping,
-} from './selectors';
+} from './selectors.js';
// Services (only externally consumed items)
-export { TradingReadinessCache } from './services/TradingReadinessCache';
-export type { ServiceContext } from './services/ServiceContext';
+export { TradingReadinessCache } from './services/TradingReadinessCache.js';
+export type { ServiceContext } from './services/ServiceContext.js';
// Removed with Live Market Prices component:
// - usePerpsPrices
diff --git a/packages/perps-controller/src/providers/AggregatedPerpsProvider.ts b/packages/perps-controller/src/providers/AggregatedPerpsProvider.ts
index 1235af2f6da..3f842e3d257 100644
--- a/packages/perps-controller/src/providers/AggregatedPerpsProvider.ts
+++ b/packages/perps-controller/src/providers/AggregatedPerpsProvider.ts
@@ -16,9 +16,9 @@
import type { CaipAccountId } from '@metamask/utils';
-import { SubscriptionMultiplexer } from '../aggregation/SubscriptionMultiplexer';
-import { ProviderRouter } from '../routing/ProviderRouter';
-import { WebSocketConnectionState } from '../types';
+import { SubscriptionMultiplexer } from '../aggregation/SubscriptionMultiplexer.js';
+import { ProviderRouter } from '../routing/ProviderRouter.js';
+import { WebSocketConnectionState } from '../types.js';
import type {
AccountState,
AggregatedProviderConfig,
@@ -80,7 +80,7 @@ import type {
WithdrawResult,
RawLedgerUpdate,
PerpsReadOptions,
-} from '../types';
+} from '../types.js';
/**
* AggregatedPerpsProvider implements PerpsProvider by coordinating
diff --git a/packages/perps-controller/src/providers/HyperLiquidProvider.ts b/packages/perps-controller/src/providers/HyperLiquidProvider.ts
index aecd3627e03..062e6599e26 100644
--- a/packages/perps-controller/src/providers/HyperLiquidProvider.ts
+++ b/packages/perps-controller/src/providers/HyperLiquidProvider.ts
@@ -6,11 +6,11 @@ import type {
} from '@nktkas/hyperliquid';
import { v4 as uuidv4 } from 'uuid';
-import type { CandlePeriod } from '../constants/chartConfig';
+import type { CandlePeriod } from '../constants/chartConfig.js';
import {
PERPS_EVENT_PROPERTY,
PERPS_EVENT_VALUE,
-} from '../constants/eventNames';
+} from '../constants/eventNames.js';
import {
BASIS_POINTS_DIVISOR,
BUILDER_FEE_CONFIG,
@@ -28,28 +28,28 @@ import {
TRADING_DEFAULTS,
USDC_DECIMALS,
USDH_CONFIG,
-} from '../constants/hyperLiquidConfig';
+} from '../constants/hyperLiquidConfig.js';
import {
ORDER_SLIPPAGE_CONFIG,
PERFORMANCE_CONFIG,
PERPS_CONSTANTS,
TP_SL_CONFIG,
WITHDRAWAL_CONSTANTS,
-} from '../constants/perpsConfig';
-import { PERPS_TRANSACTIONS_HISTORY_CONSTANTS } from '../constants/transactionsHistoryConfig';
-import { PERPS_ERROR_CODES } from '../perpsErrorCodes';
-import { DexDiscoveryCacheManager } from '../services/DexDiscoveryCacheManager';
+} from '../constants/perpsConfig.js';
+import { PERPS_TRANSACTIONS_HISTORY_CONSTANTS } from '../constants/transactionsHistoryConfig.js';
+import { PERPS_ERROR_CODES } from '../perpsErrorCodes.js';
+import { DexDiscoveryCacheManager } from '../services/DexDiscoveryCacheManager.js';
import {
HyperLiquidClientService,
WebSocketConnectionState,
-} from '../services/HyperLiquidClientService';
-import { HyperLiquidSubscriptionService } from '../services/HyperLiquidSubscriptionService';
-import { HyperLiquidWalletService } from '../services/HyperLiquidWalletService';
+} from '../services/HyperLiquidClientService.js';
+import { HyperLiquidSubscriptionService } from '../services/HyperLiquidSubscriptionService.js';
+import { HyperLiquidWalletService } from '../services/HyperLiquidWalletService.js';
import {
TradingReadinessCache,
PerpsSigningCache,
-} from '../services/TradingReadinessCache';
-import { PerpsAnalyticsEvent } from '../types';
+} from '../services/TradingReadinessCache.js';
+import { PerpsAnalyticsEvent } from '../types.js';
import type {
AccountState,
AssetRoute,
@@ -111,30 +111,33 @@ import type {
WithdrawResult,
RawLedgerUpdate,
PerpsReadOptions,
-} from '../types';
+} from '../types.js';
import type {
SDKOrderParams,
MetaResponse,
PerpsAssetCtx,
SpotMetaResponse,
-} from '../types/hyperliquid-types';
+} from '../types/hyperliquid-types.js';
import {
HL_ABSTRACTION_WIRE,
HL_UNIFIED_ACCOUNT_MODE,
hyperLiquidModeFoldsSpot,
-} from '../types/hyperliquid-types';
-import type { PerpsControllerMessengerBase } from '../types/messenger';
-import type { ExtendedAssetMeta, ExtendedPerpDex } from '../types/perps-types';
+} from '../types/hyperliquid-types.js';
+import type { PerpsControllerMessengerBase } from '../types/messenger.js';
+import type {
+ ExtendedAssetMeta,
+ ExtendedPerpDex,
+} from '../types/perps-types.js';
import {
addSpotBalanceToAccountState,
aggregateAccountStates,
-} from '../utils/accountUtils';
+} from '../utils/accountUtils.js';
import {
ensureError,
isHyperLiquidUserNotFoundError,
isKeyringLockedError,
-} from '../utils/errorUtils';
-import { shouldDeferUnifiedAccountSetup } from '../utils/hyperLiquidAbstraction';
+} from '../utils/errorUtils.js';
+import { shouldDeferUnifiedAccountSetup } from '../utils/hyperLiquidAbstraction.js';
import {
adaptAccountStateFromSDK,
adaptHyperLiquidLedgerUpdateToUserHistoryItem,
@@ -145,7 +148,7 @@ import {
formatHyperLiquidPrice,
formatHyperLiquidSize,
parseAssetName,
-} from '../utils/hyperLiquidAdapter';
+} from '../utils/hyperLiquidAdapter.js';
import {
createErrorResult,
getMaxOrderValue,
@@ -156,23 +159,23 @@ import {
validateDepositParams,
validateOrderParams,
validateWithdrawalParams,
-} from '../utils/hyperLiquidValidation';
-import { transformMarketData } from '../utils/marketDataTransform';
+} from '../utils/hyperLiquidValidation.js';
+import { transformMarketData } from '../utils/marketDataTransform.js';
import {
compileMarketPattern,
shouldIncludeMarket,
-} from '../utils/marketUtils';
-import type { CompiledMarketPattern } from '../utils/marketUtils';
+} from '../utils/marketUtils.js';
+import type { CompiledMarketPattern } from '../utils/marketUtils.js';
import {
buildOrdersArray,
calculateFinalPositionSize,
calculateOrderPriceAndSize,
-} from '../utils/orderCalculations';
+} from '../utils/orderCalculations.js';
import {
createStandaloneInfoClient,
queryStandaloneClearinghouseStates,
queryStandaloneOpenOrders,
-} from '../utils/standaloneInfoClient';
+} from '../utils/standaloneInfoClient.js';
// getStreamManagerInstance removed: use this.#deps.streamManager instead
/**
@@ -3946,7 +3949,7 @@ export class HyperLiquidProvider implements PerpsProvider {
this.#deps.debugLogger.log('Editing order:', params);
// Validate size is positive (validateOrderParams no longer validates size)
- const size = parseFloat(params.newOrder.size || '0');
+ const size = parseFloat(params.newOrder.size ?? '0');
if (size <= 0) {
return {
success: false,
@@ -4581,6 +4584,7 @@ export class HyperLiquidProvider implements PerpsProvider {
order.isPositionTpsl ===
Boolean(TP_SL_CONFIG.UsePositionBoundTpsl) &&
order.detailedOrderType &&
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
(order.detailedOrderType.includes('Take Profit') ||
order.detailedOrderType.includes('Stop')),
);
@@ -6907,7 +6911,7 @@ export class HyperLiquidProvider implements PerpsProvider {
);
} else {
// Fallback: Calculate from size × price
- const size = parseFloat(params.size || '0');
+ const size = parseFloat(params.size ?? '0');
let priceForValidation = params.currentPrice;
// For limit orders without currentPrice, use limit price as fallback
@@ -7419,8 +7423,8 @@ export class HyperLiquidProvider implements PerpsProvider {
this.#deps.debugLogger.log(
'HyperLiquidProvider: CALLING SEND_ASSET API',
{
- sourceDex: params.sourceDex || '(main)',
- destinationDex: params.destinationDex || '(main)',
+ sourceDex: params.sourceDex ?? '(main)',
+ destinationDex: params.destinationDex ?? '(main)',
amount: params.amount,
},
);
diff --git a/packages/perps-controller/src/providers/MYXProvider.ts b/packages/perps-controller/src/providers/MYXProvider.ts
index 47845cac67a..4cf40bdccb1 100644
--- a/packages/perps-controller/src/providers/MYXProvider.ts
+++ b/packages/perps-controller/src/providers/MYXProvider.ts
@@ -14,17 +14,17 @@
import type { CaipAccountId } from '@metamask/utils';
import type { KlineResolution } from '@myx-trade/sdk';
-import { calculateCandleCount } from '../constants/chartConfig';
+import { calculateCandleCount } from '../constants/chartConfig.js';
import {
MYX_MAX_LEVERAGE,
MYX_FEE_RATE,
MYX_PROTOCOL_FEE_RATE,
-} from '../constants/myxConfig';
-import { PERPS_CONSTANTS } from '../constants/perpsConfig';
-import type { PerpsControllerMessenger } from '../PerpsController';
-import { MYXClientService } from '../services/MYXClientService';
-import { MYXWalletService } from '../services/MYXWalletService';
-import { WebSocketConnectionState } from '../types';
+} from '../constants/myxConfig.js';
+import { PERPS_CONSTANTS } from '../constants/perpsConfig.js';
+import type { PerpsControllerMessenger } from '../PerpsController.js';
+import { MYXClientService } from '../services/MYXClientService.js';
+import { MYXWalletService } from '../services/MYXWalletService.js';
+import { WebSocketConnectionState } from '../types.js';
import type {
AccountState,
AssetRoute,
@@ -83,16 +83,16 @@ import type {
WithdrawResult,
RawLedgerUpdate,
PerpsReadOptions,
-} from '../types';
-import { MYXOrderStatusEnum } from '../types/myx-types';
+} from '../types.js';
+import { MYXOrderStatusEnum } from '../types/myx-types.js';
import type {
MYXAuthConfig,
MYXKlineDataResponse,
MYXPoolSymbol,
MYXTicker,
-} from '../types/myx-types';
-import type { CandleData } from '../types/perps-types';
-import { ensureError } from '../utils/errorUtils';
+} from '../types/myx-types.js';
+import type { CandleData } from '../types/perps-types.js';
+import { ensureError } from '../utils/errorUtils.js';
import {
adaptMarketFromMYX,
adaptMarketDataFromMYX,
@@ -108,7 +108,7 @@ import {
filterMYXExclusiveMarkets,
buildPoolSymbolMap,
toMYXKlineResolution,
-} from '../utils/myxAdapter';
+} from '../utils/myxAdapter.js';
// ============================================================================
// Constants
diff --git a/packages/perps-controller/src/routing/ProviderRouter.ts b/packages/perps-controller/src/routing/ProviderRouter.ts
index 2693d078071..099538c51d8 100644
--- a/packages/perps-controller/src/routing/ProviderRouter.ts
+++ b/packages/perps-controller/src/routing/ProviderRouter.ts
@@ -9,7 +9,7 @@
* are deferred to Phase 3.
*/
-import type { PerpsProviderType, RoutingStrategy } from '../types';
+import type { PerpsProviderType, RoutingStrategy } from '../types.js';
/**
* Parameters for selecting a provider for an operation
diff --git a/packages/perps-controller/src/routing/index.ts b/packages/perps-controller/src/routing/index.ts
index e918f93fd85..12b69c6d5ea 100644
--- a/packages/perps-controller/src/routing/index.ts
+++ b/packages/perps-controller/src/routing/index.ts
@@ -1,5 +1,5 @@
/**
* Provider routing module exports
*/
-export { ProviderRouter } from './ProviderRouter';
-export type { RouterSelectParams } from './ProviderRouter';
+export { ProviderRouter } from './ProviderRouter.js';
+export type { RouterSelectParams } from './ProviderRouter.js';
diff --git a/packages/perps-controller/src/selectors.ts b/packages/perps-controller/src/selectors.ts
index 9f3813c531e..965680da6e5 100644
--- a/packages/perps-controller/src/selectors.ts
+++ b/packages/perps-controller/src/selectors.ts
@@ -4,9 +4,9 @@ import {
MARKET_SORTING_CONFIG,
PERPS_CONSTANTS,
SortOptionId,
-} from './constants/perpsConfig';
-import type { PerpsControllerState } from './PerpsController';
-import type { PerpsSelectedPaymentToken, SortDirection } from './types';
+} from './constants/perpsConfig.js';
+import type { PerpsControllerState } from './PerpsController.js';
+import type { PerpsSelectedPaymentToken, SortDirection } from './types.js';
/**
* Select whether the user is a first-time perps user
diff --git a/packages/perps-controller/src/services/AccountService.ts b/packages/perps-controller/src/services/AccountService.ts
index 105beaab8f8..7abf0ed5cba 100644
--- a/packages/perps-controller/src/services/AccountService.ts
+++ b/packages/perps-controller/src/services/AccountService.ts
@@ -3,29 +3,29 @@ import { v4 as uuidv4 } from 'uuid';
import {
PERPS_EVENT_PROPERTY,
PERPS_EVENT_VALUE,
-} from '../constants/eventNames';
-import { USDC_SYMBOL } from '../constants/hyperLiquidConfig';
+} from '../constants/eventNames.js';
+import { USDC_SYMBOL } from '../constants/hyperLiquidConfig.js';
import {
PERPS_CONSTANTS,
WITHDRAWAL_CONSTANTS,
-} from '../constants/perpsConfig';
-import { PERPS_ERROR_CODES } from '../perpsErrorCodes';
+} from '../constants/perpsConfig.js';
+import { PERPS_ERROR_CODES } from '../perpsErrorCodes.js';
import {
PerpsAnalyticsEvent,
PerpsTraceNames,
PerpsTraceOperations,
-} from '../types';
+} from '../types.js';
import type {
PerpsProvider,
WithdrawParams,
WithdrawResult,
PerpsPlatformDependencies,
-} from '../types';
-import type { PerpsControllerMessengerBase } from '../types/messenger';
-import type { TransactionStatus } from '../types/transactionTypes';
-import { getSelectedEvmAccountFromMessenger } from '../utils/accountUtils';
-import { ensureError } from '../utils/errorUtils';
-import type { ServiceContext } from './ServiceContext';
+} from '../types.js';
+import type { PerpsControllerMessengerBase } from '../types/messenger.js';
+import type { TransactionStatus } from '../types/transactionTypes.js';
+import { getSelectedEvmAccountFromMessenger } from '../utils/accountUtils.js';
+import { ensureError } from '../utils/errorUtils.js';
+import type { ServiceContext } from './ServiceContext.js';
/**
* AccountService
diff --git a/packages/perps-controller/src/services/DataLakeService.ts b/packages/perps-controller/src/services/DataLakeService.ts
index 67ad5115c5a..e926581edaf 100644
--- a/packages/perps-controller/src/services/DataLakeService.ts
+++ b/packages/perps-controller/src/services/DataLakeService.ts
@@ -1,16 +1,16 @@
import { v4 as uuidv4 } from 'uuid';
-import { PerpsMeasurementName } from '../constants/performanceMetrics';
+import { PerpsMeasurementName } from '../constants/performanceMetrics.js';
import {
DATA_LAKE_API_CONFIG,
PERPS_CONSTANTS,
-} from '../constants/perpsConfig';
-import { PerpsTraceNames, PerpsTraceOperations } from '../types';
-import type { PerpsPlatformDependencies } from '../types';
-import type { PerpsControllerMessengerBase } from '../types/messenger';
-import { getSelectedEvmAccountFromMessenger } from '../utils/accountUtils';
-import { ensureError } from '../utils/errorUtils';
-import type { ServiceContext } from './ServiceContext';
+} from '../constants/perpsConfig.js';
+import { PerpsTraceNames, PerpsTraceOperations } from '../types.js';
+import type { PerpsPlatformDependencies } from '../types.js';
+import type { PerpsControllerMessengerBase } from '../types/messenger.js';
+import { getSelectedEvmAccountFromMessenger } from '../utils/accountUtils.js';
+import { ensureError } from '../utils/errorUtils.js';
+import type { ServiceContext } from './ServiceContext.js';
/**
* DataLakeService
diff --git a/packages/perps-controller/src/services/DepositService.ts b/packages/perps-controller/src/services/DepositService.ts
index d1feadcf475..ad22ebde834 100644
--- a/packages/perps-controller/src/services/DepositService.ts
+++ b/packages/perps-controller/src/services/DepositService.ts
@@ -2,16 +2,16 @@ import { toHex } from '@metamask/controller-utils';
import { parseCaipAssetId } from '@metamask/utils';
import type { Hex } from '@metamask/utils';
-import { DEPOSIT_CONFIG } from '../constants/hyperLiquidConfig';
+import { DEPOSIT_CONFIG } from '../constants/hyperLiquidConfig.js';
import type {
PerpsProvider,
PerpsPlatformDependencies,
PerpsTransactionParams,
-} from '../types';
-import type { PerpsControllerMessengerBase } from '../types/messenger';
-import { getSelectedEvmAccountFromMessenger } from '../utils/accountUtils';
-import { generateDepositId } from '../utils/idUtils';
-import { generateERC20TransferData } from '../utils/transferData';
+} from '../types.js';
+import type { PerpsControllerMessengerBase } from '../types/messenger.js';
+import { getSelectedEvmAccountFromMessenger } from '../utils/accountUtils.js';
+import { generateDepositId } from '../utils/idUtils.js';
+import { generateERC20TransferData } from '../utils/transferData.js';
// Temporary to avoid estimation failures due to insufficient balance
const DEPOSIT_GAS_LIMIT = toHex(DEPOSIT_CONFIG.EstimatedGasLimit);
diff --git a/packages/perps-controller/src/services/DexDiscoveryCacheManager.ts b/packages/perps-controller/src/services/DexDiscoveryCacheManager.ts
index 4413ffa8992..3ed2a912489 100644
--- a/packages/perps-controller/src/services/DexDiscoveryCacheManager.ts
+++ b/packages/perps-controller/src/services/DexDiscoveryCacheManager.ts
@@ -1,8 +1,11 @@
import {
MAINNET_HIP3_CONFIG,
TESTNET_HIP3_CONFIG,
-} from '../constants/hyperLiquidConfig';
-import type { DexDiscoveryState, ExtendedPerpDex } from '../types/perps-types';
+} from '../constants/hyperLiquidConfig.js';
+import type {
+ DexDiscoveryState,
+ ExtendedPerpDex,
+} from '../types/perps-types.js';
type DexDiscoveryDeps = {
isTestnetMode: () => boolean;
diff --git a/packages/perps-controller/src/services/EligibilityService.ts b/packages/perps-controller/src/services/EligibilityService.ts
index 2e6770ba25b..c175c265cf8 100644
--- a/packages/perps-controller/src/services/EligibilityService.ts
+++ b/packages/perps-controller/src/services/EligibilityService.ts
@@ -1,9 +1,9 @@
-import { PERPS_CONSTANTS } from '../constants/perpsConfig';
+import { PERPS_CONSTANTS } from '../constants/perpsConfig.js';
import type {
PerpsPlatformDependencies,
CheckEligibilityParams,
-} from '../types';
-import { ensureError } from '../utils/errorUtils';
+} from '../types.js';
+import { ensureError } from '../utils/errorUtils.js';
/**
* EligibilityService
diff --git a/packages/perps-controller/src/services/FeatureFlagConfigurationService.ts b/packages/perps-controller/src/services/FeatureFlagConfigurationService.ts
index 6b1cbb6fa3d..2a0b62045a9 100644
--- a/packages/perps-controller/src/services/FeatureFlagConfigurationService.ts
+++ b/packages/perps-controller/src/services/FeatureFlagConfigurationService.ts
@@ -1,18 +1,18 @@
import { hasProperty } from '@metamask/utils';
-import { PERPS_CONSTANTS } from '../constants/perpsConfig';
-import { isVersionGatedFeatureFlag } from '../types';
+import { PERPS_CONSTANTS } from '../constants/perpsConfig.js';
+import { isVersionGatedFeatureFlag } from '../types.js';
import type {
PerpsPlatformDependencies,
PerpsRemoteFeatureFlagState,
-} from '../types';
-import { ensureError } from '../utils/errorUtils';
-import { validateMarketPattern } from '../utils/marketUtils';
+} from '../types.js';
+import { ensureError } from '../utils/errorUtils.js';
+import { validateMarketPattern } from '../utils/marketUtils.js';
import {
parseCommaSeparatedString,
stripQuotes,
-} from '../utils/stringParseUtils';
-import type { ServiceContext } from './ServiceContext';
+} from '../utils/stringParseUtils.js';
+import type { ServiceContext } from './ServiceContext.js';
/**
* FeatureFlagConfigurationService
diff --git a/packages/perps-controller/src/services/HyperLiquidClientService.ts b/packages/perps-controller/src/services/HyperLiquidClientService.ts
index e668e938eb4..c9ba9b59da7 100644
--- a/packages/perps-controller/src/services/HyperLiquidClientService.ts
+++ b/packages/perps-controller/src/services/HyperLiquidClientService.ts
@@ -8,20 +8,26 @@ import {
} from '@nktkas/hyperliquid';
import type { HistoricalOrdersResponse } from '@nktkas/hyperliquid';
-import { CandlePeriod, calculateCandleCount } from '../constants/chartConfig';
-import { HYPERLIQUID_TRANSPORT_CONFIG } from '../constants/hyperLiquidConfig';
-import { PERFORMANCE_CONFIG, PERPS_CONSTANTS } from '../constants/perpsConfig';
-import { PERPS_ERROR_CODES } from '../perpsErrorCodes';
-import { WebSocketConnectionState } from '../types';
+import {
+ CandlePeriod,
+ calculateCandleCount,
+} from '../constants/chartConfig.js';
+import { HYPERLIQUID_TRANSPORT_CONFIG } from '../constants/hyperLiquidConfig.js';
+import {
+ PERFORMANCE_CONFIG,
+ PERPS_CONSTANTS,
+} from '../constants/perpsConfig.js';
+import { PERPS_ERROR_CODES } from '../perpsErrorCodes.js';
+import { WebSocketConnectionState } from '../types.js';
import type {
SubscribeCandlesParams,
PerpsPlatformDependencies,
-} from '../types';
-import type { HyperLiquidNetwork } from '../types/config';
-import type { CandleData } from '../types/perps-types';
-import { coalescePerpsRestRequest } from '../utils/coalescePerpsRestRequest';
-import { ensureError, isAbortError } from '../utils/errorUtils';
-import { getPerpsConnectionAttemptContext } from '../utils/perpsConnectionAttemptContext';
+} from '../types.js';
+import type { HyperLiquidNetwork } from '../types/config.js';
+import type { CandleData } from '../types/perps-types.js';
+import { coalescePerpsRestRequest } from '../utils/coalescePerpsRestRequest.js';
+import { ensureError, isAbortError } from '../utils/errorUtils.js';
+import { getPerpsConnectionAttemptContext } from '../utils/perpsConnectionAttemptContext.js';
/**
* Maximum number of reconnection attempts before giving up.
@@ -57,7 +63,7 @@ export type HyperLiquidWalletParams = {
// WebSocketConnectionState is now imported from controllers/types
// Re-export for backward compatibility with existing consumers
-export { WebSocketConnectionState } from '../types';
+export { WebSocketConnectionState } from '../types.js';
/**
* Service for managing HyperLiquid SDK clients
diff --git a/packages/perps-controller/src/services/HyperLiquidSubscriptionService.ts b/packages/perps-controller/src/services/HyperLiquidSubscriptionService.ts
index 533ce74f1e8..d9c76a01796 100644
--- a/packages/perps-controller/src/services/HyperLiquidSubscriptionService.ts
+++ b/packages/perps-controller/src/services/HyperLiquidSubscriptionService.ts
@@ -16,13 +16,13 @@ import type {
SpotStateWsEvent,
} from '@nktkas/hyperliquid';
-import { HYPERLIQUID_CONFIG } from '../constants/hyperLiquidConfig';
+import { HYPERLIQUID_CONFIG } from '../constants/hyperLiquidConfig.js';
import {
TP_SL_CONFIG,
PERPS_CONSTANTS,
ABSTRACTION_MODE_REFRESH_THROTTLE_MS,
-} from '../constants/perpsConfig';
-import { WebSocketConnectionState } from '../types';
+} from '../constants/perpsConfig.js';
+import { WebSocketConnectionState } from '../types.js';
import type {
PriceUpdate,
Position,
@@ -40,32 +40,32 @@ import type {
OrderBookLevel,
PerpsPlatformDependencies,
PerpsLogger,
-} from '../types';
+} from '../types.js';
import type {
SpotClearinghouseStateResponse,
HyperLiquidAbstractionMode,
UserAbstractionResponse,
-} from '../types/hyperliquid-types';
-import { hyperLiquidModeFoldsSpot } from '../types/hyperliquid-types';
+} from '../types/hyperliquid-types.js';
+import { hyperLiquidModeFoldsSpot } from '../types/hyperliquid-types.js';
import {
addSpotBalanceToAccountState,
calculateWeightedReturnOnEquity,
-} from '../utils/accountUtils';
-import type { AddSpotBalanceOptions } from '../utils/accountUtils';
-import { ensureError } from '../utils/errorUtils';
+} from '../utils/accountUtils.js';
+import type { AddSpotBalanceOptions } from '../utils/accountUtils.js';
+import { ensureError } from '../utils/errorUtils.js';
import {
adaptPositionFromSDK,
adaptOrderFromSDK,
adaptAccountStateFromSDK,
parseAssetName,
-} from '../utils/hyperLiquidAdapter';
-import { processBboData } from '../utils/hyperLiquidOrderBookProcessor';
+} from '../utils/hyperLiquidAdapter.js';
+import { processBboData } from '../utils/hyperLiquidOrderBookProcessor.js';
import {
calculateOpenInterestUSD,
isMarketTradable,
-} from '../utils/marketDataTransform';
-import type { HyperLiquidClientService } from './HyperLiquidClientService';
-import type { HyperLiquidWalletService } from './HyperLiquidWalletService';
+} from '../utils/marketDataTransform.js';
+import type { HyperLiquidClientService } from './HyperLiquidClientService.js';
+import type { HyperLiquidWalletService } from './HyperLiquidWalletService.js';
/**
* Service for managing HyperLiquid WebSocket subscriptions
@@ -781,7 +781,7 @@ export class HyperLiquidSubscriptionService {
pos.takeProfitPrice ?? ''
}:${pos.stopLossPrice ?? ''}:${pos.takeProfitCount}:${pos.stopLossCount}:${
pos.unrealizedPnl
- }:${pos.returnOnEquity}:${pos.liquidationPrice ?? ''}:${pos.marginUsed || ''}`,
+ }:${pos.returnOnEquity}:${pos.liquidationPrice ?? ''}:${pos.marginUsed ?? ''}`,
)
.join('|');
}
@@ -872,7 +872,7 @@ export class HyperLiquidSubscriptionService {
// Fallback: determine based on trigger price vs entry price
// This handles orders with ambiguous type 'Trigger'
const triggerPrice = parseFloat(tpslPrice);
- const entryPrice = parseFloat(matchingPosition.entryPrice || '0');
+ const entryPrice = parseFloat(matchingPosition.entryPrice ?? '0');
const isLong = parseFloat(matchingPosition.size) > 0;
if (isLong) {
@@ -961,7 +961,7 @@ export class HyperLiquidSubscriptionService {
// Fallback: determine based on trigger price vs entry price
// This handles orders with ambiguous type 'Trigger'
const triggerPrice = parseFloat(order.triggerPx);
- const entryPrice = parseFloat(position.entryPrice || '0');
+ const entryPrice = parseFloat(position.entryPrice ?? '0');
const isLong = parseFloat(position.size) > 0;
if (isLong) {
diff --git a/packages/perps-controller/src/services/HyperLiquidWalletService.ts b/packages/perps-controller/src/services/HyperLiquidWalletService.ts
index ee6688609db..636ceb2d1ee 100644
--- a/packages/perps-controller/src/services/HyperLiquidWalletService.ts
+++ b/packages/perps-controller/src/services/HyperLiquidWalletService.ts
@@ -5,17 +5,17 @@ import {
} from '@metamask/utils';
import type { CaipAccountId, Hex } from '@metamask/utils';
-import { getChainId } from '../constants/hyperLiquidConfig';
-import { PERPS_ERROR_CODES } from '../perpsErrorCodes';
+import { getChainId } from '../constants/hyperLiquidConfig.js';
+import { PERPS_ERROR_CODES } from '../perpsErrorCodes.js';
import type {
PerpsPlatformDependencies,
PerpsTypedMessageParams,
-} from '../types';
-import type { PerpsControllerMessengerBase } from '../types/messenger';
+} from '../types.js';
+import type { PerpsControllerMessengerBase } from '../types/messenger.js';
import {
getSelectedEvmAccountDetailsFromMessenger,
getSelectedEvmAccountFromMessenger,
-} from '../utils/accountUtils';
+} from '../utils/accountUtils.js';
// Mirrors KeyringTypes from @metamask/keyring-controller. Inlined to keep this
// service portable between mobile and the core monorepo.
diff --git a/packages/perps-controller/src/services/MYXClientService.ts b/packages/perps-controller/src/services/MYXClientService.ts
index e8bbbc47328..e6c5b29bf23 100644
--- a/packages/perps-controller/src/services/MYXClientService.ts
+++ b/packages/perps-controller/src/services/MYXClientService.ts
@@ -19,9 +19,9 @@ import {
MYX_PRICE_POLLING_INTERVAL_MS,
getMYXChainId,
getMYXHttpEndpoint,
-} from '../constants/myxConfig';
-import { PERPS_CONSTANTS, ZERO_ADDRESS } from '../constants/perpsConfig';
-import type { PerpsPlatformDependencies } from '../types';
+} from '../constants/myxConfig.js';
+import { PERPS_CONSTANTS, ZERO_ADDRESS } from '../constants/perpsConfig.js';
+import type { PerpsPlatformDependencies } from '../types.js';
import type {
MYXAuthConfig,
MYXPoolSymbol,
@@ -31,8 +31,8 @@ import type {
MYXPositionHistoryItem,
MYXTradeFlowItem,
MYXGetHistoryOrdersParams,
-} from '../types/myx-types';
-import { ensureError } from '../utils/errorUtils';
+} from '../types/myx-types.js';
+import { ensureError } from '../utils/errorUtils.js';
// ============================================================================
// Types
diff --git a/packages/perps-controller/src/services/MYXWalletService.ts b/packages/perps-controller/src/services/MYXWalletService.ts
index a2720fab7f7..3f96a97d027 100644
--- a/packages/perps-controller/src/services/MYXWalletService.ts
+++ b/packages/perps-controller/src/services/MYXWalletService.ts
@@ -22,11 +22,11 @@ import {
getMYXChainId,
MYX_TESTNET_CHAIN_ID,
MYX_MAINNET_CHAIN_ID,
-} from '../constants/myxConfig';
-import type { PerpsControllerMessenger } from '../PerpsController';
-import { PERPS_ERROR_CODES } from '../perpsErrorCodes';
-import type { PerpsPlatformDependencies } from '../types';
-import { getSelectedEvmAccountFromMessenger } from '../utils/accountUtils';
+} from '../constants/myxConfig.js';
+import type { PerpsControllerMessenger } from '../PerpsController.js';
+import { PERPS_ERROR_CODES } from '../perpsErrorCodes.js';
+import type { PerpsPlatformDependencies } from '../types.js';
+import { getSelectedEvmAccountFromMessenger } from '../utils/accountUtils.js';
export class MYXWalletService {
#isTestnet: boolean;
diff --git a/packages/perps-controller/src/services/MarketDataService.ts b/packages/perps-controller/src/services/MarketDataService.ts
index eeda1c8d2ba..d0a833748d9 100644
--- a/packages/perps-controller/src/services/MarketDataService.ts
+++ b/packages/perps-controller/src/services/MarketDataService.ts
@@ -1,10 +1,10 @@
import { v4 as uuidv4 } from 'uuid';
-import type { CandlePeriod } from '../constants/chartConfig';
-import { PerpsMeasurementName } from '../constants/performanceMetrics';
-import { PERPS_CONSTANTS } from '../constants/perpsConfig';
-import { PERPS_ERROR_CODES } from '../perpsErrorCodes';
-import { PerpsTraceNames, PerpsTraceOperations } from '../types';
+import type { CandlePeriod } from '../constants/chartConfig.js';
+import { PerpsMeasurementName } from '../constants/performanceMetrics.js';
+import { PERPS_CONSTANTS } from '../constants/perpsConfig.js';
+import { PERPS_ERROR_CODES } from '../perpsErrorCodes.js';
+import { PerpsTraceNames, PerpsTraceOperations } from '../types.js';
import type {
PerpsProvider,
Position,
@@ -33,12 +33,12 @@ import type {
PerpsPlatformDependencies,
PerpsMarketData,
TerminalAssetMetadata,
-} from '../types';
-import type { CandleData } from '../types/perps-types';
-import { coalescePerpsRestRequest } from '../utils/coalescePerpsRestRequest';
-import { ensureError, isAbortError } from '../utils/errorUtils';
-import { applyMarketFilters } from '../utils/marketUtils';
-import type { ServiceContext } from './ServiceContext';
+} from '../types.js';
+import type { CandleData } from '../types/perps-types.js';
+import { coalescePerpsRestRequest } from '../utils/coalescePerpsRestRequest.js';
+import { ensureError, isAbortError } from '../utils/errorUtils.js';
+import { applyMarketFilters } from '../utils/marketUtils.js';
+import type { ServiceContext } from './ServiceContext.js';
/**
* MarketDataService
diff --git a/packages/perps-controller/src/services/RewardsIntegrationService.ts b/packages/perps-controller/src/services/RewardsIntegrationService.ts
index 6717d5da976..0e501fdd207 100644
--- a/packages/perps-controller/src/services/RewardsIntegrationService.ts
+++ b/packages/perps-controller/src/services/RewardsIntegrationService.ts
@@ -1,13 +1,13 @@
import {
BASIS_POINTS_DIVISOR,
BUILDER_FEE_CONFIG,
-} from '../constants/hyperLiquidConfig';
-import { PERPS_CONSTANTS } from '../constants/perpsConfig';
-import type { PerpsPlatformDependencies } from '../types';
-import type { PerpsControllerMessengerBase } from '../types/messenger';
-import { getSelectedEvmAccountFromMessenger } from '../utils/accountUtils';
-import { ensureError } from '../utils/errorUtils';
-import { formatAccountToCaipAccountId } from '../utils/rewardsUtils';
+} from '../constants/hyperLiquidConfig.js';
+import { PERPS_CONSTANTS } from '../constants/perpsConfig.js';
+import type { PerpsPlatformDependencies } from '../types.js';
+import type { PerpsControllerMessengerBase } from '../types/messenger.js';
+import { getSelectedEvmAccountFromMessenger } from '../utils/accountUtils.js';
+import { ensureError } from '../utils/errorUtils.js';
+import { formatAccountToCaipAccountId } from '../utils/rewardsUtils.js';
/**
* RewardsIntegrationService
diff --git a/packages/perps-controller/src/services/ServiceContext.ts b/packages/perps-controller/src/services/ServiceContext.ts
index a14cd024b93..9f2f9aebcbf 100644
--- a/packages/perps-controller/src/services/ServiceContext.ts
+++ b/packages/perps-controller/src/services/ServiceContext.ts
@@ -1,5 +1,5 @@
-import type { PerpsControllerState } from '../PerpsController';
-import type { Order, Position } from '../types';
+import type { PerpsControllerState } from '../PerpsController.js';
+import type { Order, Position } from '../types.js';
/**
* ServiceContext
diff --git a/packages/perps-controller/src/services/TerminalMarketService.ts b/packages/perps-controller/src/services/TerminalMarketService.ts
index adbe5598b28..feaa6d98114 100644
--- a/packages/perps-controller/src/services/TerminalMarketService.ts
+++ b/packages/perps-controller/src/services/TerminalMarketService.ts
@@ -11,14 +11,17 @@ import {
union,
} from '@metamask/superstruct';
-import { PERPS_CONSTANTS, TERMINAL_API_CONFIG } from '../constants/perpsConfig';
+import {
+ PERPS_CONSTANTS,
+ TERMINAL_API_CONFIG,
+} from '../constants/perpsConfig.js';
import type {
MarketInfo,
PerpsPlatformDependencies,
TerminalAssetMetadata,
-} from '../types';
-import { MarketCategory } from '../types';
-import { ensureError } from '../utils/errorUtils';
+} from '../types.js';
+import { MarketCategory } from '../types.js';
+import { ensureError } from '../utils/errorUtils.js';
const VALID_MARKET_TYPES = new Set(Object.values(MarketCategory));
diff --git a/packages/perps-controller/src/services/TradingService.ts b/packages/perps-controller/src/services/TradingService.ts
index a5427bad03a..15efbd878ec 100644
--- a/packages/perps-controller/src/services/TradingService.ts
+++ b/packages/perps-controller/src/services/TradingService.ts
@@ -4,15 +4,15 @@ import { v4 as uuidv4 } from 'uuid';
import {
PERPS_EVENT_PROPERTY,
PERPS_EVENT_VALUE,
-} from '../constants/eventNames';
-import { isTPSLOrder } from '../constants/orderTypes';
-import { PerpsMeasurementName } from '../constants/performanceMetrics';
-import { PERPS_CONSTANTS } from '../constants/perpsConfig';
+} from '../constants/eventNames.js';
+import { isTPSLOrder } from '../constants/orderTypes.js';
+import { PerpsMeasurementName } from '../constants/performanceMetrics.js';
+import { PERPS_CONSTANTS } from '../constants/perpsConfig.js';
import {
PerpsAnalyticsEvent,
PerpsTraceNames,
PerpsTraceOperations,
-} from '../types';
+} from '../types.js';
import type {
PerpsProvider,
OrderParams,
@@ -30,10 +30,10 @@ import type {
UpdatePositionTPSLParams,
PerpsAnalyticsProperties,
PerpsPlatformDependencies,
-} from '../types';
-import { ensureError } from '../utils/errorUtils';
-import type { RewardsIntegrationService } from './RewardsIntegrationService';
-import type { ServiceContext } from './ServiceContext';
+} from '../types.js';
+import { ensureError } from '../utils/errorUtils.js';
+import type { RewardsIntegrationService } from './RewardsIntegrationService.js';
+import type { ServiceContext } from './ServiceContext.js';
/**
* Controller-level dependencies for TradingService.
@@ -2362,7 +2362,7 @@ export class TradingService {
? PERPS_EVENT_VALUE.DIRECTION.LONG
: PERPS_EVENT_VALUE.DIRECTION.SHORT,
[PERPS_EVENT_PROPERTY.ORDER_TYPE]: 'market',
- [PERPS_EVENT_PROPERTY.LEVERAGE]: position.leverage?.value || 1,
+ [PERPS_EVENT_PROPERTY.LEVERAGE]: position.leverage?.value ?? 1,
[PERPS_EVENT_PROPERTY.ORDER_SIZE]: positionSize,
[PERPS_EVENT_PROPERTY.ACTION]: flipAction,
...this.#buildAttributionProperties(trackingData),
@@ -2395,7 +2395,7 @@ export class TradingService {
? PERPS_EVENT_VALUE.DIRECTION.LONG
: PERPS_EVENT_VALUE.DIRECTION.SHORT,
[PERPS_EVENT_PROPERTY.ORDER_TYPE]: 'market',
- [PERPS_EVENT_PROPERTY.LEVERAGE]: position.leverage?.value || 1,
+ [PERPS_EVENT_PROPERTY.LEVERAGE]: position.leverage?.value ?? 1,
[PERPS_EVENT_PROPERTY.ORDER_SIZE]: positionSize,
[PERPS_EVENT_PROPERTY.COMPLETION_DURATION]: completionDuration,
[PERPS_EVENT_PROPERTY.ACTION]: flipAction,
diff --git a/packages/perps-controller/src/types/index.ts b/packages/perps-controller/src/types/index.ts
index 7e9bee75f06..75324414d64 100644
--- a/packages/perps-controller/src/types/index.ts
+++ b/packages/perps-controller/src/types/index.ts
@@ -6,8 +6,8 @@ import type {
Hex,
} from '@metamask/utils';
-import type { CandlePeriod, TimeDuration } from '../constants/chartConfig';
-import type { CandleData, OrderType } from './perps-types';
+import type { CandlePeriod, TimeDuration } from '../constants/chartConfig.js';
+import type { CandleData, OrderType } from './perps-types.js';
/**
* Connection states for WebSocket management.
@@ -1961,8 +1961,8 @@ export function isVersionGatedFeatureFlag(
// These types live in separate files within types/ and need to be accessible
// from the root barrel via `export * from './types'`.
// ============================================================================
-export type * from './perps-types';
-export * from './transactionTypes';
+export type * from './perps-types.js';
+export * from './transactionTypes.js';
// hyperliquid-types: selective export to avoid OrderType clash with main types
export type {
AssetPosition,
@@ -1980,4 +1980,4 @@ export type {
MetaAndAssetCtxsResponse,
PredictedFundingsResponse,
SpotMetaResponse,
-} from './hyperliquid-types';
+} from './hyperliquid-types.js';
diff --git a/packages/perps-controller/src/types/perps-types.ts b/packages/perps-controller/src/types/perps-types.ts
index c393ae46796..126ad9c31c0 100644
--- a/packages/perps-controller/src/types/perps-types.ts
+++ b/packages/perps-controller/src/types/perps-types.ts
@@ -1,7 +1,7 @@
/**
* Test result states for SDK validation
*/
-import { CandlePeriod } from '../constants/chartConfig';
+import { CandlePeriod } from '../constants/chartConfig.js';
// Order type enumeration
export type OrderType = 'market' | 'limit';
@@ -71,10 +71,10 @@ export type {
TradingDefaultsConfig,
FeeRatesConfig,
HyperLiquidNetwork,
-} from './config';
+} from './config.js';
// Token types
-export type { PerpsToken } from './token';
+export type { PerpsToken } from './token.js';
/**
* Order form state for the Perps order view
diff --git a/packages/perps-controller/src/utils/accountUtils.ts b/packages/perps-controller/src/utils/accountUtils.ts
index 2d50fffd2dc..de6bd52f6f9 100644
--- a/packages/perps-controller/src/utils/accountUtils.ts
+++ b/packages/perps-controller/src/utils/accountUtils.ts
@@ -4,9 +4,9 @@
*/
import type { InternalAccount } from '@metamask/keyring-internal-api';
-import { PERPS_CONSTANTS } from '../constants/perpsConfig';
-import type { AccountState, PerpsInternalAccount } from '../types';
-import type { SpotClearinghouseStateResponse } from '../types/hyperliquid-types';
+import { PERPS_CONSTANTS } from '../constants/perpsConfig.js';
+import type { AccountState, PerpsInternalAccount } from '../types.js';
+import type { SpotClearinghouseStateResponse } from '../types/hyperliquid-types.js';
const EVM_ACCOUNT_TYPES = new Set(['eip155:eoa', 'eip155:erc4337']);
diff --git a/packages/perps-controller/src/utils/coalescePerpsRestRequest.ts b/packages/perps-controller/src/utils/coalescePerpsRestRequest.ts
index 4632aa522fb..31d80c999d0 100644
--- a/packages/perps-controller/src/utils/coalescePerpsRestRequest.ts
+++ b/packages/perps-controller/src/utils/coalescePerpsRestRequest.ts
@@ -1,4 +1,4 @@
-import { PERFORMANCE_CONFIG } from '../constants/perpsConfig';
+import { PERFORMANCE_CONFIG } from '../constants/perpsConfig.js';
// Rapid perps market switching (candle bridge + activity tab burst) drives
// duplicate REST calls against api.hyperliquid.xyz and occasionally trips 429.
diff --git a/packages/perps-controller/src/utils/errorUtils.ts b/packages/perps-controller/src/utils/errorUtils.ts
index c0c6e6b1439..c3e7c581d9f 100644
--- a/packages/perps-controller/src/utils/errorUtils.ts
+++ b/packages/perps-controller/src/utils/errorUtils.ts
@@ -4,7 +4,7 @@
*/
import { hasProperty } from '@metamask/utils';
-import { PERPS_ERROR_CODES } from '../perpsErrorCodes';
+import { PERPS_ERROR_CODES } from '../perpsErrorCodes.js';
/**
* Detects expected cancellation/abort errors that should not be reported to Sentry.
diff --git a/packages/perps-controller/src/utils/hyperLiquidAbstraction.ts b/packages/perps-controller/src/utils/hyperLiquidAbstraction.ts
index 7f45768b26a..606befac4d4 100644
--- a/packages/perps-controller/src/utils/hyperLiquidAbstraction.ts
+++ b/packages/perps-controller/src/utils/hyperLiquidAbstraction.ts
@@ -1,4 +1,4 @@
-import type { HyperLiquidAbstractionMode } from '../types/hyperliquid-types';
+import type { HyperLiquidAbstractionMode } from '../types/hyperliquid-types.js';
const MIGRATABLE_ABSTRACTION_MODES = new Set([
'dexAbstraction',
diff --git a/packages/perps-controller/src/utils/hyperLiquidAdapter.ts b/packages/perps-controller/src/utils/hyperLiquidAdapter.ts
index ac4aafed9eb..191ae3002c2 100644
--- a/packages/perps-controller/src/utils/hyperLiquidAdapter.ts
+++ b/packages/perps-controller/src/utils/hyperLiquidAdapter.ts
@@ -1,7 +1,7 @@
import { hasProperty, Hex, isHexString } from '@metamask/utils';
-import { HIP3_ASSET_ID_CONFIG } from '../constants/hyperLiquidConfig';
-import { DECIMAL_PRECISION_CONFIG } from '../constants/perpsConfig';
+import { HIP3_ASSET_ID_CONFIG } from '../constants/hyperLiquidConfig.js';
+import { DECIMAL_PRECISION_CONFIG } from '../constants/perpsConfig.js';
import type {
AccountState,
MarketInfo,
@@ -10,18 +10,18 @@ import type {
Position,
RawLedgerUpdate,
UserHistoryItem,
-} from '../types';
+} from '../types.js';
import type {
AssetPosition,
FrontendOrder,
ClearinghouseStateResponse,
MetaResponse,
SDKOrderParams,
-} from '../types/hyperliquid-types';
+} from '../types/hyperliquid-types.js';
import {
countSignificantFigures,
roundToSignificantFigures,
-} from './significantFigures';
+} from './significantFigures.js';
type FrontendOrderWithParentTpsl = FrontendOrder & {
takeProfitPrice?: unknown;
diff --git a/packages/perps-controller/src/utils/hyperLiquidOrderBookProcessor.ts b/packages/perps-controller/src/utils/hyperLiquidOrderBookProcessor.ts
index c1fb1e1065f..c8946f2b578 100644
--- a/packages/perps-controller/src/utils/hyperLiquidOrderBookProcessor.ts
+++ b/packages/perps-controller/src/utils/hyperLiquidOrderBookProcessor.ts
@@ -1,6 +1,6 @@
import type { BboWsEvent, L2BookResponse } from '@nktkas/hyperliquid';
-import type { PriceUpdate } from '../types';
+import type { PriceUpdate } from '../types.js';
/**
* HyperLiquid Order Book Processor
diff --git a/packages/perps-controller/src/utils/hyperLiquidValidation.ts b/packages/perps-controller/src/utils/hyperLiquidValidation.ts
index cdd593c5b44..8d61e9742e3 100644
--- a/packages/perps-controller/src/utils/hyperLiquidValidation.ts
+++ b/packages/perps-controller/src/utils/hyperLiquidValidation.ts
@@ -5,10 +5,10 @@ import {
HYPERLIQUID_ASSET_CONFIGS,
getSupportedAssets,
TRADING_DEFAULTS,
-} from '../constants/hyperLiquidConfig';
-import { HYPERLIQUID_ORDER_LIMITS } from '../constants/perpsConfig';
-import { PERPS_ERROR_CODES } from '../perpsErrorCodes';
-import type { GetSupportedPathsParams, PerpsDebugLogger } from '../types';
+} from '../constants/hyperLiquidConfig.js';
+import { HYPERLIQUID_ORDER_LIMITS } from '../constants/perpsConfig.js';
+import { PERPS_ERROR_CODES } from '../perpsErrorCodes.js';
+import type { GetSupportedPathsParams, PerpsDebugLogger } from '../types.js';
/**
* Optional debug logger for validation functions.
diff --git a/packages/perps-controller/src/utils/index.ts b/packages/perps-controller/src/utils/index.ts
index 95e5e99cae3..079adb1abf9 100644
--- a/packages/perps-controller/src/utils/index.ts
+++ b/packages/perps-controller/src/utils/index.ts
@@ -4,8 +4,8 @@
* Note: hyperLiquidAdapter and orderCalculations both export calculatePositionSize.
* We use selective exports to avoid the name collision.
*/
-export * from './accountUtils';
-export * from './errorUtils';
+export * from './accountUtils.js';
+export * from './errorUtils.js';
// hyperLiquidAdapter: selective export to avoid calculatePositionSize clash with orderCalculations
export {
adaptOrderToSDK,
@@ -19,26 +19,26 @@ export {
calculateHip3AssetId,
parseAssetName,
adaptHyperLiquidLedgerUpdateToUserHistoryItem,
-} from './hyperLiquidAdapter';
-export * from './hyperLiquidOrderBookProcessor';
-export * from './hyperLiquidValidation';
-export * from './idUtils';
-export * from './marketDataTransform';
-export * from './marketSearch';
-export * from './marketUtils';
-export * from './orderCalculations';
-export * from './perpsDiskPersistence';
-export * from './rewardsUtils';
-export * from './significantFigures';
-export * from './sortMarkets';
-export * from './standaloneInfoClient';
-export * from './stringParseUtils';
-export * from './transferData';
-export * from './wait';
+} from './hyperLiquidAdapter.js';
+export * from './hyperLiquidOrderBookProcessor.js';
+export * from './hyperLiquidValidation.js';
+export * from './idUtils.js';
+export * from './marketDataTransform.js';
+export * from './marketSearch.js';
+export * from './marketUtils.js';
+export * from './orderCalculations.js';
+export * from './perpsDiskPersistence.js';
+export * from './rewardsUtils.js';
+export * from './significantFigures.js';
+export * from './sortMarkets.js';
+export * from './standaloneInfoClient.js';
+export * from './stringParseUtils.js';
+export * from './transferData.js';
+export * from './wait.js';
// Inline from former utils.ts (getEnvironment was previously at perps/utils.ts root)
export const getEnvironment = (): 'DEV' | 'PROD' => {
const env = globalThis.process?.env?.NODE_ENV ?? 'production';
return env === 'production' ? 'PROD' : 'DEV';
};
-export * from './perpsFormatters';
+export * from './perpsFormatters.js';
diff --git a/packages/perps-controller/src/utils/marketDataTransform.ts b/packages/perps-controller/src/utils/marketDataTransform.ts
index 8ac968d4d52..8ad8d030ef4 100644
--- a/packages/perps-controller/src/utils/marketDataTransform.ts
+++ b/packages/perps-controller/src/utils/marketDataTransform.ts
@@ -9,20 +9,20 @@ import { hasProperty } from '@metamask/utils';
import {
HYPERLIQUID_CONFIG,
getHyperLiquidAssetName,
-} from '../constants/hyperLiquidConfig';
-import { PERPS_CONSTANTS } from '../constants/perpsConfig';
+} from '../constants/hyperLiquidConfig.js';
+import { PERPS_CONSTANTS } from '../constants/perpsConfig.js';
import type {
PerpsMarketData,
MarketType,
MarketDataFormatters,
-} from '../types';
+} from '../types.js';
import type {
AllMidsResponse,
PerpsUniverse,
PerpsAssetCtx,
PredictedFunding,
-} from '../types/hyperliquid-types';
-import { parseAssetName } from './hyperLiquidAdapter';
+} from '../types/hyperliquid-types.js';
+import { parseAssetName } from './hyperLiquidAdapter.js';
/**
* Calculate open interest in USD
diff --git a/packages/perps-controller/src/utils/marketSearch.ts b/packages/perps-controller/src/utils/marketSearch.ts
index 95956f37289..74d47d170e7 100644
--- a/packages/perps-controller/src/utils/marketSearch.ts
+++ b/packages/perps-controller/src/utils/marketSearch.ts
@@ -14,7 +14,7 @@
*
* Portable: no platform-specific imports.
*/
-import type { PerpsMarketData } from '../types';
+import type { PerpsMarketData } from '../types.js';
/**
* Relevance tier for a market/query match. Lower values sort first.
diff --git a/packages/perps-controller/src/utils/marketUtils.ts b/packages/perps-controller/src/utils/marketUtils.ts
index 1e9d51b1d10..3d7df7d29d9 100644
--- a/packages/perps-controller/src/utils/marketUtils.ts
+++ b/packages/perps-controller/src/utils/marketUtils.ts
@@ -2,9 +2,9 @@ import type {
GetMarketDataWithPricesParams,
MarketTypeFilter,
PerpsMarketData,
-} from '../types';
-import type { CandleData, CandleStick } from '../types/perps-types';
-import { sortMarkets } from './sortMarkets';
+} from '../types.js';
+import type { CandleData, CandleStick } from '../types/perps-types.js';
+import { sortMarkets } from './sortMarkets.js';
// ============================================================================
// Market category classification (pure functions)
@@ -350,6 +350,7 @@ export const filterMarketsByQuery = (
return markets.filter(
(market) =>
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
market.symbol?.toLowerCase().includes(lowerQuery) ||
market.name?.toLowerCase().includes(lowerQuery),
);
diff --git a/packages/perps-controller/src/utils/myxAdapter.ts b/packages/perps-controller/src/utils/myxAdapter.ts
index 80659026ec4..ad9c6539ca7 100644
--- a/packages/perps-controller/src/utils/myxAdapter.ts
+++ b/packages/perps-controller/src/utils/myxAdapter.ts
@@ -20,7 +20,7 @@ import {
fromMYXCollateral,
MYX_MAX_LEVERAGE,
MYX_MINIMUM_ORDER_SIZE_USD,
-} from '../constants/myxConfig';
+} from '../constants/myxConfig.js';
import type {
AccountState,
CandleStick,
@@ -32,7 +32,7 @@ import type {
Position,
MarketDataFormatters,
UserHistoryItem,
-} from '../types';
+} from '../types.js';
import {
MYX_HL_OVERLAPPING_MARKETS,
MYXDirection,
@@ -42,7 +42,7 @@ import {
MYXOrderTypeEnum,
MYXExecTypeEnum,
MYXTradeFlowTypeEnum,
-} from '../types/myx-types';
+} from '../types/myx-types.js';
import type {
MYXPoolSymbol,
MYXTicker,
@@ -51,7 +51,7 @@ import type {
MYXTradeFlowItem,
MYXKlineData,
MYXKlineWsData,
-} from '../types/myx-types';
+} from '../types/myx-types.js';
/**
* Format a price change value with sign prefix.
diff --git a/packages/perps-controller/src/utils/orderCalculations.ts b/packages/perps-controller/src/utils/orderCalculations.ts
index b33d00c7ac5..d7395111b13 100644
--- a/packages/perps-controller/src/utils/orderCalculations.ts
+++ b/packages/perps-controller/src/utils/orderCalculations.ts
@@ -1,17 +1,17 @@
import type { Hex } from '@metamask/utils';
-import { BASIS_POINTS_DIVISOR } from '../constants/hyperLiquidConfig';
+import { BASIS_POINTS_DIVISOR } from '../constants/hyperLiquidConfig.js';
import {
MAX_ORDER_MARGIN_BUFFER,
ORDER_SLIPPAGE_CONFIG,
-} from '../constants/perpsConfig';
-import { PERPS_ERROR_CODES } from '../perpsErrorCodes';
-import type { PerpsDebugLogger } from '../types';
-import type { SDKOrderParams } from '../types/hyperliquid-types';
+} from '../constants/perpsConfig.js';
+import { PERPS_ERROR_CODES } from '../perpsErrorCodes.js';
+import type { PerpsDebugLogger } from '../types.js';
+import type { SDKOrderParams } from '../types/hyperliquid-types.js';
import {
formatHyperLiquidPrice,
formatHyperLiquidSize,
-} from './hyperLiquidAdapter';
+} from './hyperLiquidAdapter.js';
/**
* Optional debug logger for order calculation functions.
diff --git a/packages/perps-controller/src/utils/perpsDiskPersistence.ts b/packages/perps-controller/src/utils/perpsDiskPersistence.ts
index 6744e59629e..1f8ef0da9c7 100644
--- a/packages/perps-controller/src/utils/perpsDiskPersistence.ts
+++ b/packages/perps-controller/src/utils/perpsDiskPersistence.ts
@@ -4,8 +4,13 @@ import {
PERPS_DISK_CACHE_MARKETS,
PERPS_DISK_CACHE_USER_DATA,
PROVIDER_CONFIG,
-} from '../constants/perpsConfig';
-import type { AccountState, Order, PerpsMarketData, Position } from '../types';
+} from '../constants/perpsConfig.js';
+import type {
+ AccountState,
+ Order,
+ PerpsMarketData,
+ Position,
+} from '../types.js';
/**
* Multiplier applied to staleGuardMs (preloadGuardMs, currently 30s) to compute
diff --git a/packages/perps-controller/src/utils/perpsFormatters.ts b/packages/perps-controller/src/utils/perpsFormatters.ts
index 0ed9b9f5db5..335214c9526 100644
--- a/packages/perps-controller/src/utils/perpsFormatters.ts
+++ b/packages/perps-controller/src/utils/perpsFormatters.ts
@@ -12,7 +12,7 @@ import {
DECIMAL_PRECISION_CONFIG,
FUNDING_RATE_CONFIG,
PERPS_CONSTANTS,
-} from '../constants/perpsConfig';
+} from '../constants/perpsConfig.js';
// Module-level Intl.NumberFormat cache (keyed by serialized options).
const _fmtCache = new Map();
diff --git a/packages/perps-controller/src/utils/rewardsUtils.ts b/packages/perps-controller/src/utils/rewardsUtils.ts
index afb4f2c37aa..e8a20639b84 100644
--- a/packages/perps-controller/src/utils/rewardsUtils.ts
+++ b/packages/perps-controller/src/utils/rewardsUtils.ts
@@ -12,8 +12,8 @@ import {
parseCaipChainId,
} from '@metamask/utils';
-import type { PerpsLogger } from '../types';
-import { ensureError } from './errorUtils';
+import type { PerpsLogger } from '../types.js';
+import { ensureError } from './errorUtils.js';
/**
* Converts a numeric or hex chain ID to a CAIP-2 chain ID string.
diff --git a/packages/perps-controller/src/utils/significantFigures.ts b/packages/perps-controller/src/utils/significantFigures.ts
index b398397192e..4fe05c1f8f2 100644
--- a/packages/perps-controller/src/utils/significantFigures.ts
+++ b/packages/perps-controller/src/utils/significantFigures.ts
@@ -1,4 +1,4 @@
-import { DECIMAL_PRECISION_CONFIG } from '../constants/perpsConfig';
+import { DECIMAL_PRECISION_CONFIG } from '../constants/perpsConfig.js';
/**
* Count significant figures in a price string.
diff --git a/packages/perps-controller/src/utils/sortMarkets.ts b/packages/perps-controller/src/utils/sortMarkets.ts
index cb643c4a0de..cd3109e7e90 100644
--- a/packages/perps-controller/src/utils/sortMarkets.ts
+++ b/packages/perps-controller/src/utils/sortMarkets.ts
@@ -1,8 +1,8 @@
import {
MARKET_SORTING_CONFIG,
PERPS_CONSTANTS,
-} from '../constants/perpsConfig';
-import type { PerpsMarketData, SortDirection, SortField } from '../types';
+} from '../constants/perpsConfig.js';
+import type { PerpsMarketData, SortDirection, SortField } from '../types.js';
export type SortMarketsParams = {
markets: PerpsMarketData[];
@@ -87,9 +87,11 @@ export const sortMarkets = ({
case MARKET_SORTING_CONFIG.SortFields.PriceChange: {
const changeA = parseFloat(
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
a.change24hPercent?.replace(/[%+]/gu, '') || '0',
);
const changeB = parseFloat(
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
b.change24hPercent?.replace(/[%+]/gu, '') || '0',
);
compareValue = changeA - changeB;
diff --git a/packages/perps-controller/src/utils/standaloneInfoClient.ts b/packages/perps-controller/src/utils/standaloneInfoClient.ts
index 10eb6575841..66ac7541518 100644
--- a/packages/perps-controller/src/utils/standaloneInfoClient.ts
+++ b/packages/perps-controller/src/utils/standaloneInfoClient.ts
@@ -1,10 +1,10 @@
import { HttpTransport, InfoClient } from '@nktkas/hyperliquid';
-import { PERPS_CONSTANTS } from '../constants/perpsConfig';
+import { PERPS_CONSTANTS } from '../constants/perpsConfig.js';
import type {
ClearinghouseStateResponse,
FrontendOpenOrdersResponse,
-} from '../types/hyperliquid-types';
+} from '../types/hyperliquid-types.js';
export type StandaloneInfoClientOptions = {
/** Whether to use testnet API endpoint */
diff --git a/packages/perps-controller/tests/defer-eligibility.test.ts b/packages/perps-controller/tests/defer-eligibility.test.ts
index e41f035f160..e8ddf052666 100644
--- a/packages/perps-controller/tests/defer-eligibility.test.ts
+++ b/packages/perps-controller/tests/defer-eligibility.test.ts
@@ -5,9 +5,9 @@ import type {
MessengerEvents,
} from '@metamask/messenger';
-import { PerpsController } from '../src/PerpsController';
-import type { PerpsControllerMessenger } from '../src/PerpsController';
-import type { PerpsPlatformDependencies } from '../src/types';
+import { PerpsController } from '../src/PerpsController.js';
+import type { PerpsControllerMessenger } from '../src/PerpsController.js';
+import type { PerpsPlatformDependencies } from '../src/types.js';
jest.mock('@nktkas/hyperliquid', () => ({}));
jest.mock('@myx-trade/sdk', () => ({}));
diff --git a/packages/perps-controller/tests/placeholder.test.ts b/packages/perps-controller/tests/placeholder.test.ts
index 0a6ba41fd68..798b4c6ad30 100644
--- a/packages/perps-controller/tests/placeholder.test.ts
+++ b/packages/perps-controller/tests/placeholder.test.ts
@@ -8,7 +8,7 @@
// Remove this file when tests are migrated from Mobile to Core.
// Satisfies import-x/unambiguous (file must be an ES module).
-import type { PerpsControllerState } from '../src';
+import type { PerpsControllerState } from '../src.js';
describe('PerpsController', () => {
it('exports PerpsControllerState type', () => {
diff --git a/packages/perps-controller/tests/src/aggregation/SubscriptionMultiplexer.test.ts b/packages/perps-controller/tests/src/aggregation/SubscriptionMultiplexer.test.ts
index 08ad4a2f6dc..fa4ab1a4db4 100644
--- a/packages/perps-controller/tests/src/aggregation/SubscriptionMultiplexer.test.ts
+++ b/packages/perps-controller/tests/src/aggregation/SubscriptionMultiplexer.test.ts
@@ -1,4 +1,4 @@
-import { SubscriptionMultiplexer } from '../../../src/aggregation/SubscriptionMultiplexer';
+import { SubscriptionMultiplexer } from '../../../src/aggregation/SubscriptionMultiplexer.js';
/* eslint-disable */
import type {
PerpsProvider,
diff --git a/packages/perps-controller/tests/src/constants/eventNames.test.ts b/packages/perps-controller/tests/src/constants/eventNames.test.ts
index dde1c1a9986..08813b0638e 100644
--- a/packages/perps-controller/tests/src/constants/eventNames.test.ts
+++ b/packages/perps-controller/tests/src/constants/eventNames.test.ts
@@ -1,8 +1,8 @@
import {
PERPS_EVENT_PROPERTY,
PERPS_EVENT_VALUE,
-} from '../../../src/constants/eventNames';
-import { PerpsAnalyticsEvent } from '../../../src/types';
+} from '../../../src/constants/eventNames.js';
+import { PerpsAnalyticsEvent } from '../../../src/types.js';
describe('PERPS_EVENT_PROPERTY', () => {
describe('advanced chart analytics property keys', () => {
diff --git a/packages/perps-controller/tests/src/constants/hyperLiquidConfig.test.ts b/packages/perps-controller/tests/src/constants/hyperLiquidConfig.test.ts
index 79fe690ad29..6e285289150 100644
--- a/packages/perps-controller/tests/src/constants/hyperLiquidConfig.test.ts
+++ b/packages/perps-controller/tests/src/constants/hyperLiquidConfig.test.ts
@@ -1,6 +1,6 @@
-import { HIP3_ASSET_MARKET_TYPES } from '../../../src/constants/hyperLiquidConfig';
-import { MarketCategory, MARKET_CATEGORIES } from '../../../src/types';
-import type { MarketType, MarketTypeFilter } from '../../../src/types';
+import { HIP3_ASSET_MARKET_TYPES } from '../../../src/constants/hyperLiquidConfig.js';
+import { MarketCategory, MARKET_CATEGORIES } from '../../../src/types.js';
+import type { MarketType, MarketTypeFilter } from '../../../src/types.js';
describe('HIP3_ASSET_MARKET_TYPES', () => {
it('classifies known US stocks correctly', () => {
diff --git a/packages/perps-controller/tests/src/providers/AggregatedPerpsProvider.test.ts b/packages/perps-controller/tests/src/providers/AggregatedPerpsProvider.test.ts
index e3ef2186446..42dba8948c0 100644
--- a/packages/perps-controller/tests/src/providers/AggregatedPerpsProvider.test.ts
+++ b/packages/perps-controller/tests/src/providers/AggregatedPerpsProvider.test.ts
@@ -1,13 +1,13 @@
-import { CandlePeriod } from '../../../src/constants/chartConfig';
-import { AggregatedPerpsProvider } from '../../../src/providers/AggregatedPerpsProvider';
+import { CandlePeriod } from '../../../src/constants/chartConfig.js';
+import { AggregatedPerpsProvider } from '../../../src/providers/AggregatedPerpsProvider.js';
import type {
PerpsProvider,
PerpsProviderType,
Position,
MarketInfo,
Order,
-} from '../../../src/types';
-import { WebSocketConnectionState } from '../../../src/types';
+} from '../../../src/types.js';
+import { WebSocketConnectionState } from '../../../src/types.js';
/* eslint-disable */
import { createMockInfrastructure } from '../../helpers/serviceMocks';
diff --git a/packages/perps-controller/tests/src/services/AccountService.test.ts b/packages/perps-controller/tests/src/services/AccountService.test.ts
index 2f6bb9b7505..3352dbd7db2 100644
--- a/packages/perps-controller/tests/src/services/AccountService.test.ts
+++ b/packages/perps-controller/tests/src/services/AccountService.test.ts
@@ -1,13 +1,13 @@
-import type { PerpsControllerState } from '../../../src/PerpsController';
-import { AccountService } from '../../../src/services/AccountService';
-import type { ServiceContext } from '../../../src/services/ServiceContext';
-import { PerpsAnalyticsEvent } from '../../../src/types';
+import type { PerpsControllerState } from '../../../src/PerpsController.js';
+import { AccountService } from '../../../src/services/AccountService.js';
+import type { ServiceContext } from '../../../src/services/ServiceContext.js';
+import { PerpsAnalyticsEvent } from '../../../src/types.js';
import type {
PerpsProvider,
WithdrawParams,
WithdrawResult,
PerpsPlatformDependencies,
-} from '../../../src/types';
+} from '../../../src/types.js';
/* eslint-disable */
import { createMockHyperLiquidProvider } from '../../helpers/providerMocks';
import {
diff --git a/packages/perps-controller/tests/src/services/DataLakeService.test.ts b/packages/perps-controller/tests/src/services/DataLakeService.test.ts
index f51f0596a99..f321321052d 100644
--- a/packages/perps-controller/tests/src/services/DataLakeService.test.ts
+++ b/packages/perps-controller/tests/src/services/DataLakeService.test.ts
@@ -1,6 +1,6 @@
-import { DataLakeService } from '../../../src/services/DataLakeService';
-import type { ServiceContext } from '../../../src/services/ServiceContext';
-import type { PerpsPlatformDependencies } from '../../../src/types';
+import { DataLakeService } from '../../../src/services/DataLakeService.js';
+import type { ServiceContext } from '../../../src/services/ServiceContext.js';
+import type { PerpsPlatformDependencies } from '../../../src/types.js';
/* eslint-disable */
import {
createMockServiceContext,
diff --git a/packages/perps-controller/tests/src/services/EligibilityService.test.ts b/packages/perps-controller/tests/src/services/EligibilityService.test.ts
index ab162e1b226..be90725b5ff 100644
--- a/packages/perps-controller/tests/src/services/EligibilityService.test.ts
+++ b/packages/perps-controller/tests/src/services/EligibilityService.test.ts
@@ -1,6 +1,6 @@
-import { EligibilityService } from '../../../src/services/EligibilityService';
-import type { PerpsPlatformDependencies } from '../../../src/types';
-import { createMockInfrastructure } from '../../helpers/serviceMocks';
+import { EligibilityService } from '../../../src/services/EligibilityService.js';
+import type { PerpsPlatformDependencies } from '../../../src/types.js';
+import { createMockInfrastructure } from '../../helpers/serviceMocks.js';
describe('EligibilityService', () => {
let mockDeps: jest.Mocked;
diff --git a/packages/perps-controller/tests/src/services/MarketDataService.test.ts b/packages/perps-controller/tests/src/services/MarketDataService.test.ts
index 77dfea8a5d4..5fca481b9ad 100644
--- a/packages/perps-controller/tests/src/services/MarketDataService.test.ts
+++ b/packages/perps-controller/tests/src/services/MarketDataService.test.ts
@@ -1,6 +1,6 @@
-import type { CandlePeriod } from '../../../src/constants/chartConfig';
-import { MarketDataService } from '../../../src/services/MarketDataService';
-import type { ServiceContext } from '../../../src/services/ServiceContext';
+import type { CandlePeriod } from '../../../src/constants/chartConfig.js';
+import { MarketDataService } from '../../../src/services/MarketDataService.js';
+import type { ServiceContext } from '../../../src/services/ServiceContext.js';
import type {
PerpsProvider,
Position,
@@ -16,9 +16,9 @@ import type {
PerpsMarketData,
PerpsTerminalMarketService,
TerminalAssetMetadata,
-} from '../../../src/types';
-import type { CandleData } from '../../../src/types/perps-types';
-import { resetPerpsRestCacheForTests } from '../../../src/utils/coalescePerpsRestRequest';
+} from '../../../src/types.js';
+import type { CandleData } from '../../../src/types/perps-types.js';
+import { resetPerpsRestCacheForTests } from '../../../src/utils/coalescePerpsRestRequest.js';
/* eslint-disable */
import {
createMockHyperLiquidProvider,
diff --git a/packages/perps-controller/tests/src/services/RewardsIntegrationService.test.ts b/packages/perps-controller/tests/src/services/RewardsIntegrationService.test.ts
index f733177cb89..1d61b5a2644 100644
--- a/packages/perps-controller/tests/src/services/RewardsIntegrationService.test.ts
+++ b/packages/perps-controller/tests/src/services/RewardsIntegrationService.test.ts
@@ -1,5 +1,5 @@
-import { RewardsIntegrationService } from '../../../src/services/RewardsIntegrationService';
-import type { PerpsPlatformDependencies } from '../../../src/types';
+import { RewardsIntegrationService } from '../../../src/services/RewardsIntegrationService.js';
+import type { PerpsPlatformDependencies } from '../../../src/types.js';
/* eslint-disable */
import {
createMockEvmAccount,
diff --git a/packages/perps-controller/tests/src/services/TerminalMarketService.test.ts b/packages/perps-controller/tests/src/services/TerminalMarketService.test.ts
index d7b21620582..87201f956bb 100644
--- a/packages/perps-controller/tests/src/services/TerminalMarketService.test.ts
+++ b/packages/perps-controller/tests/src/services/TerminalMarketService.test.ts
@@ -1,7 +1,7 @@
-import { TERMINAL_API_CONFIG } from '../../../src/constants/perpsConfig';
-import { TerminalMarketService } from '../../../src/services/TerminalMarketService';
-import type { PerpsPlatformDependencies } from '../../../src/types';
-import { createMockInfrastructure } from '../../helpers/serviceMocks';
+import { TERMINAL_API_CONFIG } from '../../../src/constants/perpsConfig.js';
+import { TerminalMarketService } from '../../../src/services/TerminalMarketService.js';
+import type { PerpsPlatformDependencies } from '../../../src/types.js';
+import { createMockInfrastructure } from '../../helpers/serviceMocks.js';
describe('TerminalMarketService', () => {
let mockDeps: jest.Mocked;
diff --git a/packages/perps-controller/tests/src/services/TradingService.test.ts b/packages/perps-controller/tests/src/services/TradingService.test.ts
index 6065ce58d72..c4fae9d8d06 100644
--- a/packages/perps-controller/tests/src/services/TradingService.test.ts
+++ b/packages/perps-controller/tests/src/services/TradingService.test.ts
@@ -1,7 +1,7 @@
-import { PERPS_EVENT_VALUE } from '../../../src/constants/eventNames';
-import type { ServiceContext } from '../../../src/services/ServiceContext';
-import { TradingService } from '../../../src/services/TradingService';
-import { PerpsAnalyticsEvent } from '../../../src/types';
+import { PERPS_EVENT_VALUE } from '../../../src/constants/eventNames.js';
+import type { ServiceContext } from '../../../src/services/ServiceContext.js';
+import { TradingService } from '../../../src/services/TradingService.js';
+import { PerpsAnalyticsEvent } from '../../../src/types.js';
import type {
PerpsProvider,
OrderParams,
@@ -15,7 +15,7 @@ import type {
Order,
UpdatePositionTPSLParams,
PerpsPlatformDependencies,
-} from '../../../src/types';
+} from '../../../src/types.js';
/* eslint-disable */
import { createMockHyperLiquidProvider } from '../../helpers/providerMocks';
import {
diff --git a/packages/perps-controller/tests/src/types/hyperliquid-types.test.ts b/packages/perps-controller/tests/src/types/hyperliquid-types.test.ts
index f506659f41e..f1c7762a70d 100644
--- a/packages/perps-controller/tests/src/types/hyperliquid-types.test.ts
+++ b/packages/perps-controller/tests/src/types/hyperliquid-types.test.ts
@@ -1,4 +1,4 @@
-import { hyperLiquidModeFoldsSpot } from '../../../src/types/hyperliquid-types';
+import { hyperLiquidModeFoldsSpot } from '../../../src/types/hyperliquid-types.js';
describe('hyperLiquidModeFoldsSpot', () => {
it('folds for unifiedAccount', () => {
diff --git a/packages/perps-controller/tests/src/utils/coalescePerpsRestRequest.test.ts b/packages/perps-controller/tests/src/utils/coalescePerpsRestRequest.test.ts
index 63771180c39..e21b1da3e11 100644
--- a/packages/perps-controller/tests/src/utils/coalescePerpsRestRequest.test.ts
+++ b/packages/perps-controller/tests/src/utils/coalescePerpsRestRequest.test.ts
@@ -1,7 +1,7 @@
import {
coalescePerpsRestRequest,
resetPerpsRestCacheForTests,
-} from '../../../src/utils/coalescePerpsRestRequest';
+} from '../../../src/utils/coalescePerpsRestRequest.js';
describe('coalescePerpsRestRequest', () => {
beforeEach(() => {
diff --git a/packages/perps-controller/tests/src/utils/errorUtils.test.ts b/packages/perps-controller/tests/src/utils/errorUtils.test.ts
index b948e427685..cb52b7e57a2 100644
--- a/packages/perps-controller/tests/src/utils/errorUtils.test.ts
+++ b/packages/perps-controller/tests/src/utils/errorUtils.test.ts
@@ -2,7 +2,7 @@ import {
isAbortError,
ensureError,
isKeyringLockedError,
-} from '../../../src/utils/errorUtils';
+} from '../../../src/utils/errorUtils.js';
describe('errorUtils', () => {
describe('isAbortError', () => {
diff --git a/packages/perps-controller/tests/src/utils/hyperLiquidAbstraction.test.ts b/packages/perps-controller/tests/src/utils/hyperLiquidAbstraction.test.ts
index 7694db7165c..7ed3364ed91 100644
--- a/packages/perps-controller/tests/src/utils/hyperLiquidAbstraction.test.ts
+++ b/packages/perps-controller/tests/src/utils/hyperLiquidAbstraction.test.ts
@@ -1,4 +1,4 @@
-import { shouldDeferUnifiedAccountSetup } from '../../../src/utils/hyperLiquidAbstraction';
+import { shouldDeferUnifiedAccountSetup } from '../../../src/utils/hyperLiquidAbstraction.js';
describe('shouldDeferUnifiedAccountSetup', () => {
it.each(['dexAbstraction', 'default', 'disabled'] as const)(
diff --git a/packages/perps-controller/tests/src/utils/hyperLiquidAdapter.test.ts b/packages/perps-controller/tests/src/utils/hyperLiquidAdapter.test.ts
index ab9959ddb45..04ebe449fb5 100644
--- a/packages/perps-controller/tests/src/utils/hyperLiquidAdapter.test.ts
+++ b/packages/perps-controller/tests/src/utils/hyperLiquidAdapter.test.ts
@@ -1,5 +1,5 @@
-import type { FrontendOrder } from '../../../src/types/hyperliquid-types';
-import { adaptOrderFromSDK } from '../../../src/utils/hyperLiquidAdapter';
+import type { FrontendOrder } from '../../../src/types/hyperliquid-types.js';
+import { adaptOrderFromSDK } from '../../../src/utils/hyperLiquidAdapter.js';
/**
* Builds a minimal valid `FrontendOrder` fixture, overridable per test.
diff --git a/packages/perps-controller/tests/src/utils/marketDataTransform.test.ts b/packages/perps-controller/tests/src/utils/marketDataTransform.test.ts
index a2f31c55e0a..abd68af53e0 100644
--- a/packages/perps-controller/tests/src/utils/marketDataTransform.test.ts
+++ b/packages/perps-controller/tests/src/utils/marketDataTransform.test.ts
@@ -2,17 +2,17 @@ import {
HYPERLIQUID_ASSET_NAMES,
HYPERLIQUID_CONFIG,
getHyperLiquidAssetName,
-} from '../../../src/constants/hyperLiquidConfig';
-import type { MarketDataFormatters } from '../../../src/types';
+} from '../../../src/constants/hyperLiquidConfig.js';
+import type { MarketDataFormatters } from '../../../src/types.js';
import type {
AllMidsResponse,
PerpsAssetCtx,
PerpsUniverse,
-} from '../../../src/types/hyperliquid-types';
+} from '../../../src/types/hyperliquid-types.js';
import {
isMarketTradable,
transformMarketData,
-} from '../../../src/utils/marketDataTransform';
+} from '../../../src/utils/marketDataTransform.js';
// Mock formatters matching the MarketDataFormatters interface
const mockFormatters: MarketDataFormatters = {
diff --git a/packages/perps-controller/tests/src/utils/marketSearch.test.ts b/packages/perps-controller/tests/src/utils/marketSearch.test.ts
index bddbd76d145..b30e085fb4c 100644
--- a/packages/perps-controller/tests/src/utils/marketSearch.test.ts
+++ b/packages/perps-controller/tests/src/utils/marketSearch.test.ts
@@ -1,9 +1,9 @@
-import type { PerpsMarketData } from '../../../src/types';
+import type { PerpsMarketData } from '../../../src/types.js';
import {
MarketMatchRank,
getMarketMatchRank,
rankMarketsByQuery,
-} from '../../../src/utils/marketSearch';
+} from '../../../src/utils/marketSearch.js';
/**
* Build a minimal market fixture. Only `symbol`, `name`, and optional
diff --git a/packages/perps-controller/tests/src/utils/marketUtils.test.ts b/packages/perps-controller/tests/src/utils/marketUtils.test.ts
index 070f07803f2..2b480705d45 100644
--- a/packages/perps-controller/tests/src/utils/marketUtils.test.ts
+++ b/packages/perps-controller/tests/src/utils/marketUtils.test.ts
@@ -1,9 +1,9 @@
-import type { PerpsMarketData } from '../../../src/types';
+import type { PerpsMarketData } from '../../../src/types.js';
import {
getMarketTypeFilter,
isHip3Market,
matchesCategory,
-} from '../../../src/utils/marketUtils';
+} from '../../../src/utils/marketUtils.js';
const market = (overrides: Partial): PerpsMarketData =>
({
diff --git a/packages/perps-controller/tests/src/utils/rewardsUtils.test.ts b/packages/perps-controller/tests/src/utils/rewardsUtils.test.ts
index 88a5bcef568..b57bda8bb5e 100644
--- a/packages/perps-controller/tests/src/utils/rewardsUtils.test.ts
+++ b/packages/perps-controller/tests/src/utils/rewardsUtils.test.ts
@@ -1,4 +1,4 @@
-import type { PerpsLogger } from '../../../src/types';
+import type { PerpsLogger } from '../../../src/types.js';
/* eslint-disable */
import {
formatAccountToCaipAccountId,
diff --git a/packages/perps-controller/tests/src/utils/significantFigures.test.ts b/packages/perps-controller/tests/src/utils/significantFigures.test.ts
index 68256f14530..b9bac0cb973 100644
--- a/packages/perps-controller/tests/src/utils/significantFigures.test.ts
+++ b/packages/perps-controller/tests/src/utils/significantFigures.test.ts
@@ -2,7 +2,7 @@ import {
countSignificantFigures,
hasExceededSignificantFigures,
roundToSignificantFigures,
-} from '../../../src/utils/significantFigures';
+} from '../../../src/utils/significantFigures.js';
describe('significantFigures utilities', () => {
describe('countSignificantFigures', () => {
diff --git a/packages/perps-controller/tests/src/utils/sortMarkets.test.ts b/packages/perps-controller/tests/src/utils/sortMarkets.test.ts
index cc100510307..533d35c2c9d 100644
--- a/packages/perps-controller/tests/src/utils/sortMarkets.test.ts
+++ b/packages/perps-controller/tests/src/utils/sortMarkets.test.ts
@@ -1,6 +1,6 @@
-import { MARKET_SORTING_CONFIG } from '../../../src/constants/perpsConfig';
-import type { PerpsMarketData } from '../../../src/types';
-import { parseVolume, sortMarkets } from '../../../src/utils/sortMarkets';
+import { MARKET_SORTING_CONFIG } from '../../../src/constants/perpsConfig.js';
+import type { PerpsMarketData } from '../../../src/types.js';
+import { parseVolume, sortMarkets } from '../../../src/utils/sortMarkets.js';
const market = (overrides: Partial): PerpsMarketData =>
({
diff --git a/packages/perps-controller/tests/src/utils/transferData.test.ts b/packages/perps-controller/tests/src/utils/transferData.test.ts
index 87d14ca2a3d..7a4bb2074f4 100644
--- a/packages/perps-controller/tests/src/utils/transferData.test.ts
+++ b/packages/perps-controller/tests/src/utils/transferData.test.ts
@@ -1,4 +1,4 @@
-import { generateERC20TransferData } from '../../../src/utils/transferData';
+import { generateERC20TransferData } from '../../../src/utils/transferData.js';
describe('generateERC20TransferData', () => {
it('encodes ERC-20 transfer calldata', () => {
diff --git a/packages/phishing-controller/jest.config.js b/packages/phishing-controller/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/phishing-controller/jest.config.js
+++ b/packages/phishing-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/phishing-controller/package.json b/packages/phishing-controller/package.json
index 01bcb2c4ad2..9fd2ab623ec 100644
--- a/packages/phishing-controller/package.json
+++ b/packages/phishing-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/phishing-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/phishing-controller",
@@ -68,7 +61,6 @@
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
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;
diff --git a/packages/platform-api-docs/jest.config.js b/packages/platform-api-docs/jest.config.js
index d29f3f6c0db..b452a5f4011 100644
--- a/packages/platform-api-docs/jest.config.js
+++ b/packages/platform-api-docs/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/platform-api-docs/package.json b/packages/platform-api-docs/package.json
index 8900a19da50..b33d47cd4fb 100644
--- a/packages/platform-api-docs/package.json
+++ b/packages/platform-api-docs/package.json
@@ -20,14 +20,15 @@
"dist/",
"site/"
],
+ "type": "module",
"sideEffects": false,
"publishConfig": {
"access": "public",
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"changelog:update": "../../scripts/update-changelog.sh @metamask/platform-api-docs",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/platform-api-docs",
"cli": "tsx src/cli.ts",
@@ -59,7 +60,6 @@
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"@types/node": "^16.18.54",
"@types/npm-which": "^3",
diff --git a/packages/platform-api-docs/src/cli.test.ts b/packages/platform-api-docs/src/cli.test.ts
index bc084e33afe..4d45bd4d5d1 100644
--- a/packages/platform-api-docs/src/cli.test.ts
+++ b/packages/platform-api-docs/src/cli.test.ts
@@ -3,7 +3,7 @@ import execa from 'execa';
import * as fs from 'node:fs';
import * as path from 'node:path';
-const ROOT_DIR = path.resolve(__dirname, '..', '..', '..');
+const ROOT_DIR = path.resolve(import.meta.dirname, '..', '..', '..');
const TSX_PATH = path.join(ROOT_DIR, 'node_modules', '.bin', 'tsx');
const CLI_PATH = path.join(
ROOT_DIR,
diff --git a/packages/platform-api-docs/src/cli.ts b/packages/platform-api-docs/src/cli.ts
index fdc4f9bb37d..cbf609b8e52 100644
--- a/packages/platform-api-docs/src/cli.ts
+++ b/packages/platform-api-docs/src/cli.ts
@@ -6,7 +6,7 @@ import * as path from 'node:path';
import npmWhich from 'npm-which';
import yargs from 'yargs';
-import { generate, resolveRepoUrl } from './generate';
+import { generate, resolveRepoUrl } from './generate.js';
/**
* Locate the Docusaurus binary in this package's `node_modules/.bin`. Using
@@ -16,7 +16,7 @@ import { generate, resolveRepoUrl } from './generate';
* @returns Absolute path to the `docusaurus` executable.
*/
function resolveDocusaurus(): string {
- return npmWhich(__dirname).sync('docusaurus');
+ return npmWhich(import.meta.dirname).sync('docusaurus');
}
/**
@@ -51,7 +51,7 @@ async function runDocusaurus(
* @param outDir - The output directory to set up.
*/
async function setupSite(outDir: string): Promise {
- const packageDir = path.resolve(__dirname, '..');
+ const packageDir = path.resolve(import.meta.dirname, '..');
const siteDir = path.join(packageDir, 'site');
const packageNodeModules = path.join(packageDir, 'node_modules');
const skip = new Set(['node_modules', 'docs', 'tsconfig.json']);
diff --git a/packages/platform-api-docs/src/discovery.test.ts b/packages/platform-api-docs/src/discovery.test.ts
index 108d7bac009..0805d676459 100644
--- a/packages/platform-api-docs/src/discovery.test.ts
+++ b/packages/platform-api-docs/src/discovery.test.ts
@@ -2,7 +2,7 @@ import { createSandbox } from '@metamask/utils/node';
import * as fs from 'node:fs';
import * as path from 'node:path';
-import { findDtsFiles, findTsFiles } from './discovery';
+import { findDtsFiles, findTsFiles } from './discovery.js';
const { withinSandbox } = createSandbox('platform-api-docs/discovery');
diff --git a/packages/platform-api-docs/src/extraction.test.ts b/packages/platform-api-docs/src/extraction.test.ts
index 3ac351469c9..cf601e45c5f 100644
--- a/packages/platform-api-docs/src/extraction.test.ts
+++ b/packages/platform-api-docs/src/extraction.test.ts
@@ -2,8 +2,11 @@ import { createSandbox } from '@metamask/utils/node';
import * as fs from 'node:fs';
import * as path from 'node:path';
-import { createExtractionProject, extractFromSourceFile } from './extraction';
-import { MessengerCapabilityPacket } from './types';
+import {
+ createExtractionProject,
+ extractFromSourceFile,
+} from './extraction.js';
+import { MessengerCapabilityPacket } from './types.js';
const { withinSandbox } = createSandbox('platform-api-docs/extraction');
diff --git a/packages/platform-api-docs/src/extraction.ts b/packages/platform-api-docs/src/extraction.ts
index b3cba35d73b..bb81f0c2bc3 100644
--- a/packages/platform-api-docs/src/extraction.ts
+++ b/packages/platform-api-docs/src/extraction.ts
@@ -15,7 +15,10 @@ import type {
} from 'ts-morph';
import { Node as NodeGuards, Project, ts } from 'ts-morph';
-import type { MessengerCapabilityPacket, DocumentedParameter } from './types';
+import type {
+ MessengerCapabilityPacket,
+ DocumentedParameter,
+} from './types.js';
// ---------------------------------------------------------------------------
// NOTE: `ts-morph` is used heavily in this file to parse and extract
diff --git a/packages/platform-api-docs/src/generate.test.ts b/packages/platform-api-docs/src/generate.test.ts
index 6d7dafe69d2..bfc823e558c 100644
--- a/packages/platform-api-docs/src/generate.test.ts
+++ b/packages/platform-api-docs/src/generate.test.ts
@@ -3,7 +3,7 @@ import execa from 'execa';
import * as fs from 'node:fs';
import * as path from 'node:path';
-import { generate, resolveRepoUrl } from './generate';
+import { generate, resolveRepoUrl } from './generate.js';
const { withinSandbox } = createSandbox('platform-api-docs/generate');
diff --git a/packages/platform-api-docs/src/generate.ts b/packages/platform-api-docs/src/generate.ts
index 0e41f3e2082..11d336c59dd 100644
--- a/packages/platform-api-docs/src/generate.ts
+++ b/packages/platform-api-docs/src/generate.ts
@@ -5,14 +5,17 @@ import * as path from 'node:path';
import { promisify } from 'node:util';
import type { Project } from 'ts-morph';
-import { findDtsFiles, findTsFiles } from './discovery';
-import { createExtractionProject, extractFromSourceFile } from './extraction';
+import { findDtsFiles, findTsFiles } from './discovery.js';
+import {
+ createExtractionProject,
+ extractFromSourceFile,
+} from './extraction.js';
import {
generateIndexPage,
generateNamespacePage,
generateSidebars,
-} from './markdown';
-import type { MessengerCapabilityPacket, NamespaceGroup } from './types';
+} from './markdown.js';
+import type { MessengerCapabilityPacket, NamespaceGroup } from './types.js';
/**
* Compute a deduplication score for a messenger item, preferring items with
diff --git a/packages/platform-api-docs/src/markdown.test.ts b/packages/platform-api-docs/src/markdown.test.ts
index 85dd841363a..6881424d49c 100644
--- a/packages/platform-api-docs/src/markdown.test.ts
+++ b/packages/platform-api-docs/src/markdown.test.ts
@@ -3,8 +3,8 @@ import {
generateItemMarkdown,
generateNamespacePage,
generateSidebars,
-} from './markdown';
-import type { MessengerCapabilityPacket, NamespaceGroup } from './types';
+} from './markdown.js';
+import type { MessengerCapabilityPacket, NamespaceGroup } from './types.js';
const makeItem = (
overrides: Partial = {},
diff --git a/packages/platform-api-docs/src/markdown.ts b/packages/platform-api-docs/src/markdown.ts
index ff4ca208f2f..965bf2089c3 100644
--- a/packages/platform-api-docs/src/markdown.ts
+++ b/packages/platform-api-docs/src/markdown.ts
@@ -1,4 +1,4 @@
-import type { MessengerCapabilityPacket, NamespaceGroup } from './types';
+import type { MessengerCapabilityPacket, NamespaceGroup } from './types.js';
/**
* Convert backtick-quoted action/event names in text into links when they
diff --git a/packages/polling-controller/jest.config.js b/packages/polling-controller/jest.config.js
index 17db4cd31b6..29c9ecb62b9 100644
--- a/packages/polling-controller/jest.config.js
+++ b/packages/polling-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/polling-controller/package.json b/packages/polling-controller/package.json
index dd60ef12e2e..2288ae3a811 100644
--- a/packages/polling-controller/package.json
+++ b/packages/polling-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/polling-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/polling-controller",
@@ -63,7 +56,6 @@
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
"@metamask/messenger": "^2.0.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/polling-controller/src/AbstractPollingController.ts b/packages/polling-controller/src/AbstractPollingController.ts
index 3957ccb3f97..e87f4d27177 100644
--- a/packages/polling-controller/src/AbstractPollingController.ts
+++ b/packages/polling-controller/src/AbstractPollingController.ts
@@ -6,7 +6,7 @@ import type {
Constructor,
PollingTokenSetId,
IPollingController,
-} from './types';
+} from './types.js';
export const getKey = (input: PollingInput): PollingTokenSetId =>
stringify(input);
diff --git a/packages/polling-controller/src/BlockTrackerPollingController.test.ts b/packages/polling-controller/src/BlockTrackerPollingController.test.ts
index 803ef553075..b6eb5ea34e8 100644
--- a/packages/polling-controller/src/BlockTrackerPollingController.test.ts
+++ b/packages/polling-controller/src/BlockTrackerPollingController.test.ts
@@ -3,8 +3,8 @@ import type { MockAnyNamespace } from '@metamask/messenger';
import type { NetworkClient } from '@metamask/network-controller';
import EventEmitter from 'events';
-import type { BlockTrackerPollingInput } from './BlockTrackerPollingController';
-import { BlockTrackerPollingController } from './BlockTrackerPollingController';
+import type { BlockTrackerPollingInput } from './BlockTrackerPollingController.js';
+import { BlockTrackerPollingController } from './BlockTrackerPollingController.js';
const createExecutePollMock = () => {
const executePollMock = jest.fn().mockImplementation(async () => {
diff --git a/packages/polling-controller/src/BlockTrackerPollingController.ts b/packages/polling-controller/src/BlockTrackerPollingController.ts
index c01762a4ed3..70cecbc283b 100644
--- a/packages/polling-controller/src/BlockTrackerPollingController.ts
+++ b/packages/polling-controller/src/BlockTrackerPollingController.ts
@@ -8,8 +8,8 @@ import type { Json } from '@metamask/utils';
import {
AbstractPollingControllerBaseMixin,
getKey,
-} from './AbstractPollingController';
-import type { Constructor, PollingTokenSetId } from './types';
+} from './AbstractPollingController.js';
+import type { Constructor, PollingTokenSetId } from './types.js';
/**
* The minimum input required to start polling for a {@link BlockTrackerPollingController}.
@@ -54,7 +54,7 @@ function BlockTrackerPollingControllerMixin<
if (networkClient) {
const updateOnNewBlock = this._executePoll.bind(this, input);
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
- // eslint-disable-next-line @typescript-eslint/no-misused-promises
+
networkClient.blockTracker.addListener('latest', updateOnNewBlock);
this.#activeListeners[key] = updateOnNewBlock;
} else {
@@ -74,7 +74,7 @@ function BlockTrackerPollingControllerMixin<
const listener = this.#activeListeners[key];
if (listener) {
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
- // eslint-disable-next-line @typescript-eslint/no-misused-promises
+
networkClient.blockTracker.removeListener('latest', listener);
delete this.#activeListeners[key];
}
diff --git a/packages/polling-controller/src/StaticIntervalPollingController.test.ts b/packages/polling-controller/src/StaticIntervalPollingController.test.ts
index 1f83ac413c1..c7df1e6ab1f 100644
--- a/packages/polling-controller/src/StaticIntervalPollingController.test.ts
+++ b/packages/polling-controller/src/StaticIntervalPollingController.test.ts
@@ -2,8 +2,8 @@ import { MOCK_ANY_NAMESPACE, Messenger } from '@metamask/messenger';
import type { MockAnyNamespace } from '@metamask/messenger';
import { createDeferredPromise } from '@metamask/utils';
-import { jestAdvanceTime } from '../../../tests/helpers';
-import { StaticIntervalPollingController } from './StaticIntervalPollingController';
+import { jestAdvanceTime } from '../../../tests/helpers.js';
+import { StaticIntervalPollingController } from './StaticIntervalPollingController.js';
const TICK_TIME = 5;
diff --git a/packages/polling-controller/src/StaticIntervalPollingController.ts b/packages/polling-controller/src/StaticIntervalPollingController.ts
index dce38ce9195..4f57b6f760d 100644
--- a/packages/polling-controller/src/StaticIntervalPollingController.ts
+++ b/packages/polling-controller/src/StaticIntervalPollingController.ts
@@ -4,12 +4,12 @@ import type { Json } from '@metamask/utils';
import {
AbstractPollingControllerBaseMixin,
getKey,
-} from './AbstractPollingController';
+} from './AbstractPollingController.js';
import type {
Constructor,
IPollingController,
PollingTokenSetId,
-} from './types';
+} from './types.js';
/**
* StaticIntervalPollingControllerMixin
diff --git a/packages/polling-controller/src/index.ts b/packages/polling-controller/src/index.ts
index ba1758c443b..8ebd73b27fd 100644
--- a/packages/polling-controller/src/index.ts
+++ b/packages/polling-controller/src/index.ts
@@ -1,11 +1,11 @@
export {
BlockTrackerPollingControllerOnly,
BlockTrackerPollingController,
-} from './BlockTrackerPollingController';
+} from './BlockTrackerPollingController.js';
export {
StaticIntervalPollingControllerOnly,
StaticIntervalPollingController,
-} from './StaticIntervalPollingController';
+} from './StaticIntervalPollingController.js';
-export type { IPollingController } from './types';
+export type { IPollingController } from './types.js';
diff --git a/packages/preferences-controller/jest.config.js b/packages/preferences-controller/jest.config.js
index bbde231ebcf..cd3b6cf9b18 100644
--- a/packages/preferences-controller/jest.config.js
+++ b/packages/preferences-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/preferences-controller/package.json b/packages/preferences-controller/package.json
index cff68a246d7..e822f6f2f45 100644
--- a/packages/preferences-controller/package.json
+++ b/packages/preferences-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/preferences-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/preferences-controller",
@@ -61,7 +54,6 @@
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
"@metamask/utils": "^11.11.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/preferences-controller/src/PreferencesController-method-action-types.ts b/packages/preferences-controller/src/PreferencesController-method-action-types.ts
index 098c80d6bdd..0ca5ed1369a 100644
--- a/packages/preferences-controller/src/PreferencesController-method-action-types.ts
+++ b/packages/preferences-controller/src/PreferencesController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { PreferencesController } from './PreferencesController';
+import type { PreferencesController } from './PreferencesController.js';
/**
* Enable or disable a specific feature flag.
diff --git a/packages/preferences-controller/src/PreferencesController.test.ts b/packages/preferences-controller/src/PreferencesController.test.ts
index 9b6cc650df7..4894261d7b6 100644
--- a/packages/preferences-controller/src/PreferencesController.test.ts
+++ b/packages/preferences-controller/src/PreferencesController.test.ts
@@ -6,12 +6,12 @@ import type {
MockAnyNamespace,
} from '@metamask/messenger';
-import { ETHERSCAN_SUPPORTED_CHAIN_IDS } from './constants';
+import { ETHERSCAN_SUPPORTED_CHAIN_IDS } from './constants.js';
import type {
EtherscanSupportedHexChainId,
PreferencesControllerMessenger,
-} from './PreferencesController';
-import { PreferencesController } from './PreferencesController';
+} from './PreferencesController.js';
+import { PreferencesController } from './PreferencesController.js';
describe('PreferencesController', () => {
it('should set default state', () => {
@@ -31,12 +31,12 @@ describe('PreferencesController', () => {
showMultiRpcModal: false,
showIncomingTransactions: Object.values(
ETHERSCAN_SUPPORTED_CHAIN_IDS,
- ).reduce(
+ ).reduce<{ [chainId in EtherscanSupportedHexChainId]: boolean }>(
(acc, curr) => {
acc[curr] = true;
return acc;
},
- {} as { [chainId in EtherscanSupportedHexChainId]: boolean },
+ {},
),
smartTransactionsOptInStatus: true,
useSafeChainsListValidation: true,
diff --git a/packages/preferences-controller/src/PreferencesController.ts b/packages/preferences-controller/src/PreferencesController.ts
index 057da914783..665daf83b61 100644
--- a/packages/preferences-controller/src/PreferencesController.ts
+++ b/packages/preferences-controller/src/PreferencesController.ts
@@ -5,8 +5,8 @@ import type {
} from '@metamask/base-controller';
import type { Messenger } from '@metamask/messenger';
-import { ETHERSCAN_SUPPORTED_CHAIN_IDS } from './constants';
-import type { PreferencesControllerMethodActions } from './PreferencesController-method-action-types';
+import { ETHERSCAN_SUPPORTED_CHAIN_IDS } from './constants.js';
+import type { PreferencesControllerMethodActions } from './PreferencesController-method-action-types.js';
/**
* A type union of the name for each chain that is supported by Etherscan or
diff --git a/packages/preferences-controller/src/index.ts b/packages/preferences-controller/src/index.ts
index 41cfbb6e4ed..7a3db21766f 100644
--- a/packages/preferences-controller/src/index.ts
+++ b/packages/preferences-controller/src/index.ts
@@ -1,3 +1,3 @@
-export * from './PreferencesController';
-export type * from './PreferencesController-method-action-types';
-export { ETHERSCAN_SUPPORTED_CHAIN_IDS } from './constants';
+export * from './PreferencesController.js';
+export type * from './PreferencesController-method-action-types.js';
+export { ETHERSCAN_SUPPORTED_CHAIN_IDS } from './constants.js';
diff --git a/packages/profile-metrics-controller/jest.config.js b/packages/profile-metrics-controller/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/profile-metrics-controller/jest.config.js
+++ b/packages/profile-metrics-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/profile-metrics-controller/package.json b/packages/profile-metrics-controller/package.json
index c9e3d8430d7..bdad8505b86 100644
--- a/packages/profile-metrics-controller/package.json
+++ b/packages/profile-metrics-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/profile-metrics-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/profile-metrics-controller",
@@ -74,7 +67,6 @@
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
"@metamask/keyring-internal-api": "^11.0.1",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/profile-metrics-controller/src/ProfileMetricsController-method-action-types.ts b/packages/profile-metrics-controller/src/ProfileMetricsController-method-action-types.ts
index 8a98132f744..2b9faeec11c 100644
--- a/packages/profile-metrics-controller/src/ProfileMetricsController-method-action-types.ts
+++ b/packages/profile-metrics-controller/src/ProfileMetricsController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { ProfileMetricsController } from './ProfileMetricsController';
+import type { ProfileMetricsController } from './ProfileMetricsController.js';
/**
* Skip the initial delay period by setting the end timestamp to the current time.
diff --git a/packages/profile-metrics-controller/src/ProfileMetricsController.test.ts b/packages/profile-metrics-controller/src/ProfileMetricsController.test.ts
index 155d4a3a5b3..daac6019019 100644
--- a/packages/profile-metrics-controller/src/ProfileMetricsController.test.ts
+++ b/packages/profile-metrics-controller/src/ProfileMetricsController.test.ts
@@ -10,16 +10,16 @@ import type {
import {
DEFAULT_INITIAL_DELAY_DURATION,
ProfileMetricsController,
-} from './ProfileMetricsController';
-import type { ProfileMetricsControllerMessenger } from './ProfileMetricsController';
+} from './ProfileMetricsController.js';
+import type { ProfileMetricsControllerMessenger } from './ProfileMetricsController.js';
import type {
AccountOwnershipProof,
AccountWithScopes,
ProfileMetricsFetchNoncesRequest,
ProfileMetricsSubmitMetricsRequest,
-} from './ProfileMetricsService';
-import type { ProofOfOwnershipSignRequest } from './ProofOfOwnershipService';
-import { ProofUnsupportedNamespaceError } from './utils/canonicalize';
+} from './ProfileMetricsService.js';
+import type { ProofOfOwnershipSignRequest } from './ProofOfOwnershipService.js';
+import { ProofUnsupportedNamespaceError } from './utils/canonicalize.js';
/**
* Creates a mock InternalAccount object for testing purposes.
diff --git a/packages/profile-metrics-controller/src/ProfileMetricsController.ts b/packages/profile-metrics-controller/src/ProfileMetricsController.ts
index d53580dcbce..854b4e904ae 100644
--- a/packages/profile-metrics-controller/src/ProfileMetricsController.ts
+++ b/packages/profile-metrics-controller/src/ProfileMetricsController.ts
@@ -19,17 +19,17 @@ import { TransactionControllerTransactionSubmittedEvent } from '@metamask/transa
import { Duration, inMilliseconds, parseCaipChainId } from '@metamask/utils';
import { Mutex } from 'async-mutex';
-import type { ProfileMetricsControllerMethodActions } from './ProfileMetricsController-method-action-types';
+import type { ProfileMetricsControllerMethodActions } from './ProfileMetricsController-method-action-types.js';
+import type { ProfileMetricsServiceMethodActions } from './ProfileMetricsService-method-action-types.js';
import type {
AccountOwnershipProof,
AccountWithScopes,
-} from './ProfileMetricsService';
-import type { ProfileMetricsServiceMethodActions } from './ProfileMetricsService-method-action-types';
-import type { ProofOfOwnershipServiceMethodActions } from './ProofOfOwnershipService-method-action-types';
+} from './ProfileMetricsService.js';
+import type { ProofOfOwnershipServiceMethodActions } from './ProofOfOwnershipService-method-action-types.js';
import {
canonicalizeAddress,
ProofUnsupportedNamespaceError,
-} from './utils/canonicalize';
+} from './utils/canonicalize.js';
/**
* The name of the {@link ProfileMetricsController}, used to namespace the
@@ -259,6 +259,7 @@ export class ProfileMetricsController extends StaticIntervalPollingController()<
// it must have opted in during onboarding, or during a previous session.
this.skipInitialDelay();
}
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
this.#enqueueAccountsIfNeeded().catch(
this.messenger.captureException ?? console.error,
);
@@ -543,9 +544,7 @@ export class ProfileMetricsController extends StaticIntervalPollingController()<
await this.#mutex.runExclusive(async () => {
this.update((state) => {
const entropySourceId = getAccountEntropySourceId(account) ?? 'null';
- if (!state.syncQueue[entropySourceId]) {
- state.syncQueue[entropySourceId] = [];
- }
+ state.syncQueue[entropySourceId] ??= [];
state.syncQueue[entropySourceId].push({
address: account.address,
scopes: account.scopes,
diff --git a/packages/profile-metrics-controller/src/ProfileMetricsService-method-action-types.ts b/packages/profile-metrics-controller/src/ProfileMetricsService-method-action-types.ts
index 862d5afce90..e0dcf906916 100644
--- a/packages/profile-metrics-controller/src/ProfileMetricsService-method-action-types.ts
+++ b/packages/profile-metrics-controller/src/ProfileMetricsService-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { ProfileMetricsService } from './ProfileMetricsService';
+import type { ProfileMetricsService } from './ProfileMetricsService.js';
/**
* Fetch single-use nonces from the auth API, one per identifier.
diff --git a/packages/profile-metrics-controller/src/ProfileMetricsService.test.ts b/packages/profile-metrics-controller/src/ProfileMetricsService.test.ts
index ba6b30be880..4f588494f8d 100644
--- a/packages/profile-metrics-controller/src/ProfileMetricsService.test.ts
+++ b/packages/profile-metrics-controller/src/ProfileMetricsService.test.ts
@@ -8,12 +8,12 @@ import type {
import { SDK } from '@metamask/profile-sync-controller';
import nock from 'nock';
-import { ProfileMetricsService } from '.';
+import { ProfileMetricsService } from './..js';
import type {
ProfileMetricsSubmitMetricsRequest,
ProfileMetricsServiceMessenger,
-} from '.';
-import { getAuthUrl } from './ProfileMetricsService';
+} from './..js';
+import { getAuthUrl } from './ProfileMetricsService.js';
const defaultBaseEndpoint = getAuthUrl(SDK.Env.DEV);
diff --git a/packages/profile-metrics-controller/src/ProfileMetricsService.ts b/packages/profile-metrics-controller/src/ProfileMetricsService.ts
index 677a0a4f7d5..dd443167ff2 100644
--- a/packages/profile-metrics-controller/src/ProfileMetricsService.ts
+++ b/packages/profile-metrics-controller/src/ProfileMetricsService.ts
@@ -14,7 +14,7 @@ import {
} from '@metamask/superstruct';
import type { IDisposable } from 'cockatiel';
-import type { ProfileMetricsServiceMethodActions } from './ProfileMetricsService-method-action-types';
+import type { ProfileMetricsServiceMethodActions } from './ProfileMetricsService-method-action-types.js';
/**
* The shape of an entry in the `POST /api/v2/nonce/batch` response body.
diff --git a/packages/profile-metrics-controller/src/ProofOfOwnershipService-method-action-types.ts b/packages/profile-metrics-controller/src/ProofOfOwnershipService-method-action-types.ts
index 28436e645f2..650ecfe26e0 100644
--- a/packages/profile-metrics-controller/src/ProofOfOwnershipService-method-action-types.ts
+++ b/packages/profile-metrics-controller/src/ProofOfOwnershipService-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { ProofOfOwnershipService } from './ProofOfOwnershipService';
+import type { ProofOfOwnershipService } from './ProofOfOwnershipService.js';
/**
* Sign a proof of ownership for the given account and server-issued nonce.
diff --git a/packages/profile-metrics-controller/src/ProofOfOwnershipService.test.ts b/packages/profile-metrics-controller/src/ProofOfOwnershipService.test.ts
index 0238a59928d..3151d179f6b 100644
--- a/packages/profile-metrics-controller/src/ProofOfOwnershipService.test.ts
+++ b/packages/profile-metrics-controller/src/ProofOfOwnershipService.test.ts
@@ -6,10 +6,10 @@ import type {
MessengerEvents,
} from '@metamask/messenger';
-import { ProofOfOwnershipService } from '.';
-import type { ProofOfOwnershipServiceMessenger } from '.';
-import { SNAP_SIGN_PROOF_OF_OWNERSHIP_METHOD } from './ProofOfOwnershipService';
-import { ProofUnsupportedNamespaceError } from './utils/canonicalize';
+import { ProofOfOwnershipService } from './..js';
+import type { ProofOfOwnershipServiceMessenger } from './..js';
+import { SNAP_SIGN_PROOF_OF_OWNERSHIP_METHOD } from './ProofOfOwnershipService.js';
+import { ProofUnsupportedNamespaceError } from './utils/canonicalize.js';
/**
* Creates a mock InternalAccount with the given scopes. EVM accounts are
diff --git a/packages/profile-metrics-controller/src/ProofOfOwnershipService.ts b/packages/profile-metrics-controller/src/ProofOfOwnershipService.ts
index 65212651b33..1dd1b7e910c 100644
--- a/packages/profile-metrics-controller/src/ProofOfOwnershipService.ts
+++ b/packages/profile-metrics-controller/src/ProofOfOwnershipService.ts
@@ -8,12 +8,12 @@ import { string, type as structType } from '@metamask/superstruct';
import { KnownCaipNamespace, parseCaipChainId } from '@metamask/utils';
import { v4 as uuid } from 'uuid';
-import type { AccountOwnershipProof } from './ProfileMetricsService';
-import type { ProofOfOwnershipServiceMethodActions } from './ProofOfOwnershipService-method-action-types';
+import type { AccountOwnershipProof } from './ProfileMetricsService.js';
+import type { ProofOfOwnershipServiceMethodActions } from './ProofOfOwnershipService-method-action-types.js';
import {
canonicalizeAddress,
ProofUnsupportedNamespaceError,
-} from './utils/canonicalize';
+} from './utils/canonicalize.js';
// === GENERAL ===
diff --git a/packages/profile-metrics-controller/src/index.ts b/packages/profile-metrics-controller/src/index.ts
index 81c38273fa1..da42db0b33d 100644
--- a/packages/profile-metrics-controller/src/index.ts
+++ b/packages/profile-metrics-controller/src/index.ts
@@ -5,33 +5,33 @@ export type {
ProfileMetricsControllerMessenger,
ProfileMetricsControllerState,
ProfileMetricsControllerStateChangeEvent,
-} from './ProfileMetricsController';
+} from './ProfileMetricsController.js';
export {
ProfileMetricsController,
getDefaultProfileMetricsControllerState,
-} from './ProfileMetricsController';
+} from './ProfileMetricsController.js';
export type {
ProfileMetricsServiceActions,
ProfileMetricsServiceEvents,
ProfileMetricsServiceMessenger,
ProfileMetricsSubmitMetricsRequest,
-} from './ProfileMetricsService';
+} from './ProfileMetricsService.js';
export {
ProfileMetricsService,
serviceName,
serviceName as profileMetricsServiceName,
-} from './ProfileMetricsService';
-export type { ProfileMetricsServiceMethodActions } from './ProfileMetricsService-method-action-types';
+} from './ProfileMetricsService.js';
+export type { ProfileMetricsServiceMethodActions } from './ProfileMetricsService-method-action-types.js';
export type {
ProofOfOwnershipServiceActions,
ProofOfOwnershipServiceEvents,
ProofOfOwnershipServiceMessenger,
-} from './ProofOfOwnershipService';
+} from './ProofOfOwnershipService.js';
export {
ProofOfOwnershipService,
serviceName as proofOfOwnershipServiceName,
-} from './ProofOfOwnershipService';
+} from './ProofOfOwnershipService.js';
export type {
ProfileMetricsControllerMethodActions,
ProfileMetricsControllerSkipInitialDelayAction,
-} from './ProfileMetricsController-method-action-types';
+} from './ProfileMetricsController-method-action-types.js';
diff --git a/packages/profile-metrics-controller/src/utils/canonicalize.test.ts b/packages/profile-metrics-controller/src/utils/canonicalize.test.ts
index ed779fa4891..e6596d6a1f3 100644
--- a/packages/profile-metrics-controller/src/utils/canonicalize.test.ts
+++ b/packages/profile-metrics-controller/src/utils/canonicalize.test.ts
@@ -1,7 +1,7 @@
import {
canonicalizeAddress,
ProofUnsupportedNamespaceError,
-} from './canonicalize';
+} from './canonicalize.js';
describe('canonicalizeAddress', () => {
describe('eip155', () => {
diff --git a/packages/profile-sync-controller/jest.config.js b/packages/profile-sync-controller/jest.config.js
index 91dccc79ab3..7036fa5bb41 100644
--- a/packages/profile-sync-controller/jest.config.js
+++ b/packages/profile-sync-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/profile-sync-controller/package.json b/packages/profile-sync-controller/package.json
index 66b1c25f0a0..cc71e087724 100644
--- a/packages/profile-sync-controller/package.json
+++ b/packages/profile-sync-controller/package.json
@@ -21,69 +21,32 @@
"user-storage/",
"sdk/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./sdk": {
- "import": {
- "types": "./dist/sdk/index.d.mts",
- "default": "./dist/sdk/index.mjs"
- },
- "require": {
- "types": "./dist/sdk/index.d.cts",
- "default": "./dist/sdk/index.cjs"
- }
+ "types": "./dist/sdk/index.d.ts",
+ "import": "./dist/sdk/index.js"
},
"./auth": {
- "import": {
- "types": "./dist/controllers/authentication/index.d.mts",
- "default": "./dist/controllers/authentication/index.mjs"
- },
- "require": {
- "types": "./dist/controllers/authentication/index.d.cts",
- "default": "./dist/controllers/authentication/index.cjs"
- }
+ "types": "./dist/controllers/authentication/index.d.ts",
+ "import": "./dist/controllers/authentication/index.js"
},
"./auth/mocks": {
- "import": {
- "types": "./dist/controllers/authentication/mocks/index.d.mts",
- "default": "./dist/controllers/authentication/mocks/index.mjs"
- },
- "require": {
- "types": "./dist/controllers/authentication/mocks/index.d.cts",
- "default": "./dist/controllers/authentication/mocks/index.cjs"
- }
+ "types": "./dist/controllers/authentication/mocks/index.d.ts",
+ "import": "./dist/controllers/authentication/mocks/index.js"
},
"./user-storage": {
- "import": {
- "types": "./dist/controllers/user-storage/index.d.mts",
- "default": "./dist/controllers/user-storage/index.mjs"
- },
- "require": {
- "types": "./dist/controllers/user-storage/index.d.cts",
- "default": "./dist/controllers/user-storage/index.cjs"
- }
+ "types": "./dist/controllers/user-storage/index.d.ts",
+ "import": "./dist/controllers/user-storage/index.js"
},
"./user-storage/mocks": {
- "import": {
- "types": "./dist/controllers/user-storage/mocks/index.d.mts",
- "default": "./dist/controllers/user-storage/mocks/index.mjs"
- },
- "require": {
- "types": "./dist/controllers/user-storage/mocks/index.d.cts",
- "default": "./dist/controllers/user-storage/mocks/index.cjs"
- }
+ "types": "./dist/controllers/user-storage/mocks/index.d.ts",
+ "import": "./dist/controllers/user-storage/mocks/index.js"
},
"./package.json": "./package.json"
},
@@ -92,8 +55,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/profile-sync-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/profile-sync-controller",
@@ -129,7 +92,6 @@
"@metamask/keyring-api": "^23.5.0",
"@metamask/keyring-internal-api": "^11.0.1",
"@metamask/providers": "^22.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"ethers": "^6.12.0",
diff --git a/packages/profile-sync-controller/src/controllers/authentication/AuthenticationController-method-action-types.ts b/packages/profile-sync-controller/src/controllers/authentication/AuthenticationController-method-action-types.ts
index 221d5f67f80..29fadebb633 100644
--- a/packages/profile-sync-controller/src/controllers/authentication/AuthenticationController-method-action-types.ts
+++ b/packages/profile-sync-controller/src/controllers/authentication/AuthenticationController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { AuthenticationController } from './AuthenticationController';
+import type { AuthenticationController } from './AuthenticationController.js';
export type AuthenticationControllerPerformSignInAction = {
type: `AuthenticationController:performSignIn`;
diff --git a/packages/profile-sync-controller/src/controllers/authentication/AuthenticationController.test.ts b/packages/profile-sync-controller/src/controllers/authentication/AuthenticationController.test.ts
index 0351e8f10be..3d882ab4467 100644
--- a/packages/profile-sync-controller/src/controllers/authentication/AuthenticationController.test.ts
+++ b/packages/profile-sync-controller/src/controllers/authentication/AuthenticationController.test.ts
@@ -6,23 +6,23 @@ import type {
MockAnyNamespace,
} from '@metamask/messenger';
-import type { LoginResponse } from '../../sdk';
-import { Platform } from '../../sdk';
-import { arrangeAuthAPIs } from '../../sdk/__fixtures__/auth';
+import type { LoginResponse } from '../../sdk.js';
+import { Platform } from '../../sdk.js';
+import { arrangeAuthAPIs } from '../../sdk/__fixtures__/auth.js';
import {
MOCK_ACCESS_JWT,
MOCK_USER_PROFILE_LINEAGE_RESPONSE,
-} from '../../sdk/mocks/auth';
-import { AuthenticationController } from './AuthenticationController';
+} from '../../sdk/mocks/auth.js';
+import { AuthenticationController } from './AuthenticationController.js';
import type {
AuthenticationControllerMessenger,
AuthenticationControllerState,
ProfileSignInInfo,
-} from './AuthenticationController';
+} from './AuthenticationController.js';
import {
MOCK_LOGIN_RESPONSE,
MOCK_OATH_TOKEN_RESPONSE,
-} from './mocks/mockResponses';
+} from './mocks/mockResponses.js';
const MOCK_ENTROPY_SOURCE_IDS = [
'MOCK_ENTROPY_SOURCE_ID',
diff --git a/packages/profile-sync-controller/src/controllers/authentication/AuthenticationController.ts b/packages/profile-sync-controller/src/controllers/authentication/AuthenticationController.ts
index 1bc6c14ce57..b8d7cad7b50 100644
--- a/packages/profile-sync-controller/src/controllers/authentication/AuthenticationController.ts
+++ b/packages/profile-sync-controller/src/controllers/authentication/AuthenticationController.ts
@@ -19,20 +19,20 @@ import type {
SRPInterface,
UserProfile,
UserProfileLineage,
-} from '../../sdk';
+} from '../../sdk.js';
import {
assertMessageStartsWithMetamask,
AuthType,
Env,
JwtBearerAuth,
-} from '../../sdk';
-import type { MetaMetricsAuth } from '../../shared/types/services';
+} from '../../sdk.js';
+import type { MetaMetricsAuth } from '../../shared/types/services.js';
import {
createSnapPublicKeyRequest,
createSnapAllPublicKeysRequest,
createSnapSignMessageRequest,
-} from './auth-snap-requests';
-import { AuthenticationControllerMethodActions } from './AuthenticationController-method-action-types';
+} from './auth-snap-requests.js';
+import { AuthenticationControllerMethodActions } from './AuthenticationController-method-action-types.js';
const controllerName = 'AuthenticationController';
diff --git a/packages/profile-sync-controller/src/controllers/authentication/__fixtures__/mockServices.ts b/packages/profile-sync-controller/src/controllers/authentication/__fixtures__/mockServices.ts
index aec0aa08b5a..9b47a8abe76 100644
--- a/packages/profile-sync-controller/src/controllers/authentication/__fixtures__/mockServices.ts
+++ b/packages/profile-sync-controller/src/controllers/authentication/__fixtures__/mockServices.ts
@@ -4,7 +4,7 @@ import {
getMockAuthAccessTokenResponse,
getMockAuthLoginResponse,
getMockAuthNonceResponse,
-} from '../mocks/mockResponses';
+} from '../mocks/mockResponses.js';
type MockReply = {
status: nock.StatusCode;
diff --git a/packages/profile-sync-controller/src/controllers/authentication/index.ts b/packages/profile-sync-controller/src/controllers/authentication/index.ts
index 6198e0e2008..6bda2bffb20 100644
--- a/packages/profile-sync-controller/src/controllers/authentication/index.ts
+++ b/packages/profile-sync-controller/src/controllers/authentication/index.ts
@@ -1,9 +1,9 @@
-import { AuthenticationController } from './AuthenticationController';
+import { AuthenticationController } from './AuthenticationController.js';
export { AuthenticationController as Controller };
export default AuthenticationController;
-export * from './AuthenticationController';
-export * as Mocks from './mocks';
+export * from './AuthenticationController.js';
+export * as Mocks from './mocks.js';
export type {
AuthenticationControllerPerformSignInAction,
@@ -14,4 +14,4 @@ export type {
AuthenticationControllerGetUserProfileLineageAction,
AuthenticationControllerIsSignedInAction,
AuthenticationControllerRequestProfilePairingAction,
-} from './AuthenticationController-method-action-types';
+} from './AuthenticationController-method-action-types.js';
diff --git a/packages/profile-sync-controller/src/controllers/authentication/mocks/index.ts b/packages/profile-sync-controller/src/controllers/authentication/mocks/index.ts
index ae60f45b28d..9e1db815f4c 100644
--- a/packages/profile-sync-controller/src/controllers/authentication/mocks/index.ts
+++ b/packages/profile-sync-controller/src/controllers/authentication/mocks/index.ts
@@ -1 +1 @@
-export * from './mockResponses';
+export * from './mockResponses.js';
diff --git a/packages/profile-sync-controller/src/controllers/authentication/mocks/mockResponses.test.ts b/packages/profile-sync-controller/src/controllers/authentication/mocks/mockResponses.test.ts
index 8ae5e21883e..629448e97d3 100644
--- a/packages/profile-sync-controller/src/controllers/authentication/mocks/mockResponses.test.ts
+++ b/packages/profile-sync-controller/src/controllers/authentication/mocks/mockResponses.test.ts
@@ -4,7 +4,7 @@ import {
getE2EIdentifierFromJwt,
MOCK_CUSTOMER_SERVICE_TOKEN_RESPONSE,
MOCK_OATH_TOKEN_RESPONSE,
-} from './mockResponses';
+} from './mockResponses.js';
describe('getE2EIdentifierFromJwt()', () => {
it('extracts the sub claim from a valid mock JWT', () => {
diff --git a/packages/profile-sync-controller/src/controllers/authentication/mocks/mockResponses.ts b/packages/profile-sync-controller/src/controllers/authentication/mocks/mockResponses.ts
index 985d4f05fde..2350b2e2331 100644
--- a/packages/profile-sync-controller/src/controllers/authentication/mocks/mockResponses.ts
+++ b/packages/profile-sync-controller/src/controllers/authentication/mocks/mockResponses.ts
@@ -10,7 +10,7 @@ import {
MOCK_OIDC_TOKEN_URL,
MOCK_PAIR_PROFILES_URL,
MOCK_CUSTOMER_SERVICE_TOKEN_URL,
-} from '../../../sdk/mocks/auth';
+} from '../../../sdk/mocks/auth.js';
type MockResponse = {
url: string;
diff --git a/packages/profile-sync-controller/src/controllers/index.ts b/packages/profile-sync-controller/src/controllers/index.ts
index 2522528014b..f4b8b2dcdaa 100644
--- a/packages/profile-sync-controller/src/controllers/index.ts
+++ b/packages/profile-sync-controller/src/controllers/index.ts
@@ -1,2 +1,2 @@
-export * as Authentication from './authentication';
-export * as UserStorage from './user-storage';
+export * as Authentication from './authentication.js';
+export * as UserStorage from './user-storage.js';
diff --git a/packages/profile-sync-controller/src/controllers/user-storage/UserStorageController-method-action-types.ts b/packages/profile-sync-controller/src/controllers/user-storage/UserStorageController-method-action-types.ts
index 3715c2d562f..772dfa02794 100644
--- a/packages/profile-sync-controller/src/controllers/user-storage/UserStorageController-method-action-types.ts
+++ b/packages/profile-sync-controller/src/controllers/user-storage/UserStorageController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { UserStorageController } from './UserStorageController';
+import type { UserStorageController } from './UserStorageController.js';
/**
* Allows retrieval of stored data. Data stored is string formatted.
diff --git a/packages/profile-sync-controller/src/controllers/user-storage/UserStorageController.test.ts b/packages/profile-sync-controller/src/controllers/user-storage/UserStorageController.test.ts
index 1081690d8f1..d997f4e4d49 100644
--- a/packages/profile-sync-controller/src/controllers/user-storage/UserStorageController.test.ts
+++ b/packages/profile-sync-controller/src/controllers/user-storage/UserStorageController.test.ts
@@ -2,14 +2,14 @@ import { deriveStateFromMetadata } from '@metamask/base-controller';
import { KeyringTypes } from '@metamask/keyring-controller';
import nock from 'nock';
-import { Env, getEnvUrls } from '../../sdk';
-import { createSHA256Hash } from '../../shared/encryption';
-import type { UserStorageGenericPathWithFeatureAndKey } from '../../shared/storage-schema';
+import { Env, getEnvUrls } from '../../sdk.js';
+import { createSHA256Hash } from '../../shared/encryption.js';
+import type { UserStorageGenericPathWithFeatureAndKey } from '../../shared/storage-schema.js';
import {
createEntryPath,
USER_STORAGE_FEATURE_NAMES,
-} from '../../shared/storage-schema';
-import { mockUserStorageMessenger } from './__fixtures__/mockMessenger';
+} from '../../shared/storage-schema.js';
+import { mockUserStorageMessenger } from './__fixtures__/mockMessenger.js';
import {
mockEndpointBatchUpsertUserStorage,
mockEndpointGetUserStorage,
@@ -18,10 +18,13 @@ import {
mockEndpointDeleteUserStorageAllFeatureEntries,
mockEndpointDeleteUserStorage,
mockEndpointBatchDeleteUserStorage,
-} from './__fixtures__/mockServices';
-import { BACKUPANDSYNC_FEATURES } from './constants';
-import { MOCK_STORAGE_DATA, MOCK_STORAGE_KEY } from './mocks/mockStorage';
-import { UserStorageController, defaultState } from './UserStorageController';
+} from './__fixtures__/mockServices.js';
+import { BACKUPANDSYNC_FEATURES } from './constants.js';
+import { MOCK_STORAGE_DATA, MOCK_STORAGE_KEY } from './mocks/mockStorage.js';
+import {
+ UserStorageController,
+ defaultState,
+} from './UserStorageController.js';
describe('UserStorageController', () => {
describe('constructor', () => {
diff --git a/packages/profile-sync-controller/src/controllers/user-storage/UserStorageController.ts b/packages/profile-sync-controller/src/controllers/user-storage/UserStorageController.ts
index 2e4d74ea86b..acfc90ea991 100644
--- a/packages/profile-sync-controller/src/controllers/user-storage/UserStorageController.ts
+++ b/packages/profile-sync-controller/src/controllers/user-storage/UserStorageController.ts
@@ -30,21 +30,21 @@ import type {
UserStorageGenericFeatureKey,
UserStorageGenericPathWithFeatureAndKey,
UserStorageGenericPathWithFeatureOnly,
-} from '../../sdk';
-import { Env, UserStorage } from '../../sdk';
-import type { NativeScrypt } from '../../shared/types/encryption';
-import { EventQueue } from '../../shared/utils/event-queue';
-import { createSnapSignMessageRequest } from '../authentication/auth-snap-requests';
+} from '../../sdk.js';
+import { Env, UserStorage } from '../../sdk.js';
+import type { NativeScrypt } from '../../shared/types/encryption.js';
+import { EventQueue } from '../../shared/utils/event-queue.js';
+import { createSnapSignMessageRequest } from '../authentication/auth-snap-requests.js';
import type {
AuthenticationControllerGetBearerTokenAction,
AuthenticationControllerGetSessionProfileAction,
AuthenticationControllerIsSignedInAction,
AuthenticationControllerPerformSignInAction,
-} from '../authentication/AuthenticationController-method-action-types';
-import { BACKUPANDSYNC_FEATURES } from './constants';
-import { syncContactsWithUserStorage } from './contact-syncing/controller-integration';
-import { setupContactSyncingSubscriptions } from './contact-syncing/setup-subscriptions';
-import type { UserStorageControllerMethodActions } from './UserStorageController-method-action-types';
+} from '../authentication/AuthenticationController-method-action-types.js';
+import { BACKUPANDSYNC_FEATURES } from './constants.js';
+import { syncContactsWithUserStorage } from './contact-syncing/controller-integration.js';
+import { setupContactSyncingSubscriptions } from './contact-syncing/setup-subscriptions.js';
+import type { UserStorageControllerMethodActions } from './UserStorageController-method-action-types.js';
const controllerName = 'UserStorageController';
diff --git a/packages/profile-sync-controller/src/controllers/user-storage/__fixtures__/mockMessenger.ts b/packages/profile-sync-controller/src/controllers/user-storage/__fixtures__/mockMessenger.ts
index 74be400a3c4..ec2c6319027 100644
--- a/packages/profile-sync-controller/src/controllers/user-storage/__fixtures__/mockMessenger.ts
+++ b/packages/profile-sync-controller/src/controllers/user-storage/__fixtures__/mockMessenger.ts
@@ -7,13 +7,13 @@ import type {
NotNamespacedBy,
} from '@metamask/messenger';
+import { MOCK_LOGIN_RESPONSE } from '../../authentication/mocks.js';
+import { MOCK_STORAGE_KEY_SIGNATURE } from '../mocks.js';
import type {
AllowedActions,
AllowedEvents,
UserStorageControllerMessenger,
-} from '..';
-import { MOCK_LOGIN_RESPONSE } from '../../authentication/mocks';
-import { MOCK_STORAGE_KEY_SIGNATURE } from '../mocks';
+} from './...js';
const controllerName = 'UserStorageController';
diff --git a/packages/profile-sync-controller/src/controllers/user-storage/__fixtures__/mockServices.ts b/packages/profile-sync-controller/src/controllers/user-storage/__fixtures__/mockServices.ts
index dddac59d2b6..cfabc7b7d6d 100644
--- a/packages/profile-sync-controller/src/controllers/user-storage/__fixtures__/mockServices.ts
+++ b/packages/profile-sync-controller/src/controllers/user-storage/__fixtures__/mockServices.ts
@@ -1,10 +1,10 @@
import nock from 'nock';
-import { USER_STORAGE_FEATURE_NAMES } from '../../../shared/storage-schema';
+import { USER_STORAGE_FEATURE_NAMES } from '../../../shared/storage-schema.js';
import type {
UserStorageGenericPathWithFeatureAndKey,
UserStorageGenericPathWithFeatureOnly,
-} from '../../../shared/storage-schema';
+} from '../../../shared/storage-schema.js';
import {
getMockUserStorageGetResponse,
getMockUserStoragePutResponse,
@@ -13,7 +13,7 @@ import {
getMockUserStorageBatchDeleteResponse,
deleteMockUserStorageAllFeatureEntriesResponse,
deleteMockUserStorageResponse,
-} from '../mocks/mockResponses';
+} from '../mocks/mockResponses.js';
type MockReply = {
status: nock.StatusCode;
diff --git a/packages/profile-sync-controller/src/controllers/user-storage/__fixtures__/test-utils.ts b/packages/profile-sync-controller/src/controllers/user-storage/__fixtures__/test-utils.ts
index 340acef469e..eae66dd5c99 100644
--- a/packages/profile-sync-controller/src/controllers/user-storage/__fixtures__/test-utils.ts
+++ b/packages/profile-sync-controller/src/controllers/user-storage/__fixtures__/test-utils.ts
@@ -1,11 +1,11 @@
import type nock from 'nock';
-import encryption from '../../../shared/encryption/encryption';
-import { MOCK_STORAGE_KEY } from '../mocks/mockStorage';
+import encryption from '../../../shared/encryption/encryption.js';
+import { MOCK_STORAGE_KEY } from '../mocks/mockStorage.js';
import type {
GetUserStorageAllFeatureEntriesResponse,
GetUserStorageResponse,
-} from '../types';
+} from '../types.js';
/**
* Test Utility - creates a realistic mock user-storage entry
diff --git a/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/__fixtures__/mockContacts.ts b/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/__fixtures__/mockContacts.ts
index eaf6fe2f6ab..aa1677238fd 100644
--- a/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/__fixtures__/mockContacts.ts
+++ b/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/__fixtures__/mockContacts.ts
@@ -1,7 +1,10 @@
import type { AddressBookEntry } from '@metamask/address-book-controller';
-import { USER_STORAGE_VERSION, USER_STORAGE_VERSION_KEY } from '../constants';
-import type { UserStorageContactEntry } from '../types';
+import {
+ USER_STORAGE_VERSION,
+ USER_STORAGE_VERSION_KEY,
+} from '../constants.js';
+import type { UserStorageContactEntry } from '../types.js';
// Base timestamp for predictable testing
const NOW = 1657000000000;
diff --git a/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/__fixtures__/test-utils.ts b/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/__fixtures__/test-utils.ts
index 8a1ea37ab54..965c3d82fb1 100644
--- a/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/__fixtures__/test-utils.ts
+++ b/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/__fixtures__/test-utils.ts
@@ -12,7 +12,7 @@ import {
Messenger as MessengerImpl,
} from '@metamask/messenger';
-import { MOCK_LOCAL_CONTACTS } from './mockContacts';
+import { MOCK_LOCAL_CONTACTS } from './mockContacts.js';
/**
* Test Utility - create a mock user storage messenger for contact syncing tests
diff --git a/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/controller-integration.test.ts b/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/controller-integration.test.ts
index 214e55c1aae..63c07a9da2a 100644
--- a/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/controller-integration.test.ts
+++ b/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/controller-integration.test.ts
@@ -1,18 +1,18 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
import type { AddressBookEntry } from '@metamask/address-book-controller';
-import { USER_STORAGE_FEATURE_NAMES } from '../../../shared/storage-schema';
+import { USER_STORAGE_FEATURE_NAMES } from '../../../shared/storage-schema.js';
import {
MOCK_LOCAL_CONTACTS,
MOCK_REMOTE_CONTACTS,
-} from './__fixtures__/mockContacts';
+} from './__fixtures__/mockContacts.js';
import {
mockUserStorageMessengerForContactSyncing,
createMockUserStorageContacts,
-} from './__fixtures__/test-utils';
-import * as ContactSyncingControllerIntegrationModule from './controller-integration';
-import * as ContactSyncingUtils from './sync-utils';
-import type { ContactSyncingOptions } from './types';
+} from './__fixtures__/test-utils.js';
+import * as ContactSyncingControllerIntegrationModule from './controller-integration.js';
+import * as ContactSyncingUtils from './sync-utils.js';
+import type { ContactSyncingOptions } from './types.js';
// Mock UserStorageController to avoid json-rpc-engine dependency issues
class MockUserStorageController {
diff --git a/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/controller-integration.ts b/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/controller-integration.ts
index 08e0d05809b..3a2f40004d7 100644
--- a/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/controller-integration.ts
+++ b/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/controller-integration.ts
@@ -1,16 +1,16 @@
import type { AddressBookEntry } from '@metamask/address-book-controller';
-import { USER_STORAGE_FEATURE_NAMES } from '../../../shared/storage-schema';
-import { TraceName } from '../constants';
-import { canPerformContactSyncing } from './sync-utils';
-import type { ContactSyncingOptions } from './types';
-import type { UserStorageContactEntry } from './types';
-import type { SyncAddressBookEntry } from './utils';
+import { USER_STORAGE_FEATURE_NAMES } from '../../../shared/storage-schema.js';
+import { TraceName } from '../constants.js';
+import { canPerformContactSyncing } from './sync-utils.js';
+import type { ContactSyncingOptions } from './types.js';
+import type { UserStorageContactEntry } from './types.js';
+import type { SyncAddressBookEntry } from './utils.js';
import {
mapAddressBookEntryToUserStorageEntry,
mapUserStorageEntryToAddressBookEntry,
-} from './utils';
-import { isContactBridgedFromAccounts } from './utils';
+} from './utils.js';
+import { isContactBridgedFromAccounts } from './utils.js';
export type SyncContactsWithUserStorageConfig = {
onContactSyncErroneousSituation?: (
@@ -81,7 +81,7 @@ export async function syncContactsWithUserStorage(
.filter((contact) => !isContactBridgedFromAccounts(contact))
.filter(
(contact) => contact.address && contact.chainId && contact.name?.trim(),
- ) || [];
+ ) ?? [];
// Get remote contacts from user storage API
const remoteContacts = await getRemoteContacts(options);
@@ -90,7 +90,7 @@ export async function syncContactsWithUserStorage(
const validRemoteContacts =
remoteContacts?.filter(
(contact) => contact.address && contact.chainId && contact.name?.trim(),
- ) || [];
+ ) ?? [];
const performSync = async () => {
try {
@@ -140,8 +140,8 @@ export async function syncContactsWithUserStorage(
if (hasContentDifference) {
// Check timestamps to determine which version to keep
- const localTimestamp = localContact.lastUpdatedAt || 0;
- const remoteTimestamp = remoteContact.lastUpdatedAt || 0;
+ const localTimestamp = localContact.lastUpdatedAt ?? 0;
+ const remoteTimestamp = remoteContact.lastUpdatedAt ?? 0;
if (localTimestamp >= remoteTimestamp) {
// Local is newer (or same age) - use local version
@@ -192,9 +192,9 @@ export async function syncContactsWithUserStorage(
getMessenger().call(
'AddressBookController:set',
contact.address,
- contact.name || '',
+ contact.name ?? '',
contact.chainId,
- contact.memo || '',
+ contact.memo ?? '',
contact.addressType,
);
@@ -383,8 +383,8 @@ export async function updateContactInRemoteStorage(
// Create an updated entry with timestamp
const updatedEntry = {
...contact,
- lastUpdatedAt: contact.lastUpdatedAt || Date.now(),
- } as SyncAddressBookEntry;
+ lastUpdatedAt: contact.lastUpdatedAt ?? Date.now(),
+ };
const key = createContactKey(contact);
const storageEntry = mapAddressBookEntryToUserStorageEntry(updatedEntry);
@@ -461,7 +461,7 @@ export async function deleteContactInRemoteStorage(
...existingContact,
deletedAt: now,
lastUpdatedAt: now,
- } as SyncAddressBookEntry;
+ };
const deletedStorageEntry =
mapAddressBookEntryToUserStorageEntry(deletedContact);
diff --git a/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/setup-subscriptions.test.ts b/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/setup-subscriptions.test.ts
index 00475971500..f10c21b63ee 100644
--- a/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/setup-subscriptions.test.ts
+++ b/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/setup-subscriptions.test.ts
@@ -1,6 +1,6 @@
-import * as ControllerIntegration from './controller-integration';
-import { setupContactSyncingSubscriptions } from './setup-subscriptions';
-import * as SyncUtils from './sync-utils';
+import * as ControllerIntegration from './controller-integration.js';
+import { setupContactSyncingSubscriptions } from './setup-subscriptions.js';
+import * as SyncUtils from './sync-utils.js';
// Define a type for the contact data
type AddressBookContactData = {
diff --git a/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/setup-subscriptions.ts b/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/setup-subscriptions.ts
index c6d82a875e2..9613efba446 100644
--- a/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/setup-subscriptions.ts
+++ b/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/setup-subscriptions.ts
@@ -3,10 +3,10 @@ import type { AddressBookEntry } from '@metamask/address-book-controller';
import {
updateContactInRemoteStorage,
deleteContactInRemoteStorage,
-} from './controller-integration';
-import { canPerformContactSyncing } from './sync-utils';
-import type { ContactSyncingOptions } from './types';
-import { isContactBridgedFromAccounts } from './utils';
+} from './controller-integration.js';
+import { canPerformContactSyncing } from './sync-utils.js';
+import type { ContactSyncingOptions } from './types.js';
+import { isContactBridgedFromAccounts } from './utils.js';
/**
* Initialize and setup events to listen to for contact syncing
diff --git a/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/sync-utils.test.ts b/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/sync-utils.test.ts
index 989cb3be494..23e362b6ec2 100644
--- a/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/sync-utils.test.ts
+++ b/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/sync-utils.test.ts
@@ -1,5 +1,5 @@
-import { canPerformContactSyncing } from './sync-utils';
-import type { ContactSyncingOptions } from './types';
+import { canPerformContactSyncing } from './sync-utils.js';
+import type { ContactSyncingOptions } from './types.js';
describe('user-storage/contact-syncing/sync-utils', () => {
describe('canPerformContactSyncing', () => {
diff --git a/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/sync-utils.ts b/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/sync-utils.ts
index f5767356830..723cbe17128 100644
--- a/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/sync-utils.ts
+++ b/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/sync-utils.ts
@@ -1,4 +1,4 @@
-import type { ContactSyncingOptions } from './types';
+import type { ContactSyncingOptions } from './types.js';
/**
* Check if we can perform contact syncing
diff --git a/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/types.ts b/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/types.ts
index 9b0c9ff138b..e0bcbe3ed62 100644
--- a/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/types.ts
+++ b/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/types.ts
@@ -1,12 +1,12 @@
import type { TraceCallback } from '@metamask/controller-utils';
import type { Hex } from '@metamask/utils';
-import type { UserStorageControllerMessenger } from '../UserStorageController';
-import type { UserStorageController } from '../UserStorageController';
+import type { UserStorageControllerMessenger } from '../UserStorageController.js';
+import type { UserStorageController } from '../UserStorageController.js';
import type {
USER_STORAGE_VERSION_KEY,
USER_STORAGE_VERSION,
-} from './constants';
+} from './constants.js';
export type UserStorageContactEntry = {
/**
diff --git a/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/utils.test.ts b/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/utils.test.ts
index c0f2572337e..c40d195c4a8 100644
--- a/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/utils.test.ts
+++ b/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/utils.test.ts
@@ -1,12 +1,12 @@
import type { AddressBookEntry } from '@metamask/address-book-controller';
-import { USER_STORAGE_VERSION, USER_STORAGE_VERSION_KEY } from './constants';
-import type { UserStorageContactEntry } from './types';
+import { USER_STORAGE_VERSION, USER_STORAGE_VERSION_KEY } from './constants.js';
+import type { UserStorageContactEntry } from './types.js';
import {
mapAddressBookEntryToUserStorageEntry,
mapUserStorageEntryToAddressBookEntry,
-} from './utils';
-import type { SyncAddressBookEntry } from './utils';
+} from './utils.js';
+import type { SyncAddressBookEntry } from './utils.js';
describe('user-storage/contact-syncing/utils', () => {
// Use checksum address format for consistent testing
diff --git a/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/utils.ts b/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/utils.ts
index 889857b2017..15acd3e0c80 100644
--- a/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/utils.ts
+++ b/packages/profile-sync-controller/src/controllers/user-storage/contact-syncing/utils.ts
@@ -3,8 +3,8 @@ import type {
AddressType,
} from '@metamask/address-book-controller';
-import { USER_STORAGE_VERSION_KEY, USER_STORAGE_VERSION } from './constants';
-import type { UserStorageContactEntry } from './types';
+import { USER_STORAGE_VERSION_KEY, USER_STORAGE_VERSION } from './constants.js';
+import type { UserStorageContactEntry } from './types.js';
/**
* Extends AddressBookEntry with sync metadata
diff --git a/packages/profile-sync-controller/src/controllers/user-storage/index.ts b/packages/profile-sync-controller/src/controllers/user-storage/index.ts
index c6d746f502b..d9b62c04357 100644
--- a/packages/profile-sync-controller/src/controllers/user-storage/index.ts
+++ b/packages/profile-sync-controller/src/controllers/user-storage/index.ts
@@ -1,12 +1,12 @@
-import { UserStorageController } from './UserStorageController';
+import { UserStorageController } from './UserStorageController.js';
export { UserStorageController as Controller };
export default UserStorageController;
-export * from './UserStorageController';
-export * as Mocks from './mocks';
-export * from './constants';
-export * from '../../shared/encryption';
-export * from '../../shared/storage-schema';
+export * from './UserStorageController.js';
+export * as Mocks from './mocks.js';
+export * from './constants.js';
+export * from '../../shared/encryption.js';
+export * from '../../shared/storage-schema.js';
export type {
UserStorageControllerPerformGetStorageAction,
UserStorageControllerPerformGetStorageAllFeatureEntriesAction,
@@ -20,4 +20,4 @@ export type {
UserStorageControllerSetIsBackupAndSyncFeatureEnabledAction,
UserStorageControllerSetIsContactSyncingInProgressAction,
UserStorageControllerSyncContactsWithUserStorageAction,
-} from './UserStorageController-method-action-types';
+} from './UserStorageController-method-action-types.js';
diff --git a/packages/profile-sync-controller/src/controllers/user-storage/mocks/index.ts b/packages/profile-sync-controller/src/controllers/user-storage/mocks/index.ts
index bd3cb394f52..bf88958b315 100644
--- a/packages/profile-sync-controller/src/controllers/user-storage/mocks/index.ts
+++ b/packages/profile-sync-controller/src/controllers/user-storage/mocks/index.ts
@@ -1,2 +1,2 @@
-export * from './mockResponses';
-export * from './mockStorage';
+export * from './mockResponses.js';
+export * from './mockStorage.js';
diff --git a/packages/profile-sync-controller/src/controllers/user-storage/mocks/mockResponses.ts b/packages/profile-sync-controller/src/controllers/user-storage/mocks/mockResponses.ts
index ec85757566b..0e6480e09e1 100644
--- a/packages/profile-sync-controller/src/controllers/user-storage/mocks/mockResponses.ts
+++ b/packages/profile-sync-controller/src/controllers/user-storage/mocks/mockResponses.ts
@@ -1,21 +1,21 @@
-import { Env, getEnvUrls } from '../../../sdk';
+import { Env, getEnvUrls } from '../../../sdk.js';
import type {
UserStorageGenericPathWithFeatureAndKey,
UserStorageGenericPathWithFeatureOnly,
-} from '../../../shared/storage-schema';
+} from '../../../shared/storage-schema.js';
import {
createEntryPath,
USER_STORAGE_FEATURE_NAMES,
-} from '../../../shared/storage-schema';
+} from '../../../shared/storage-schema.js';
import type {
GetUserStorageAllFeatureEntriesResponse,
GetUserStorageResponse,
-} from '../types';
+} from '../types.js';
import {
MOCK_ENCRYPTED_STORAGE_DATA,
MOCK_STORAGE_DATA,
MOCK_STORAGE_KEY,
-} from './mockStorage';
+} from './mockStorage.js';
type MockResponse = {
url: string;
diff --git a/packages/profile-sync-controller/src/controllers/user-storage/mocks/mockStorage.ts b/packages/profile-sync-controller/src/controllers/user-storage/mocks/mockStorage.ts
index c6de9beeac0..f5ca9938de6 100644
--- a/packages/profile-sync-controller/src/controllers/user-storage/mocks/mockStorage.ts
+++ b/packages/profile-sync-controller/src/controllers/user-storage/mocks/mockStorage.ts
@@ -1,4 +1,4 @@
-import encryption, { createSHA256Hash } from '../../../shared/encryption';
+import encryption, { createSHA256Hash } from '../../../shared/encryption.js';
export const MOCK_STORAGE_KEY_SIGNATURE = 'mockStorageKey';
export const MOCK_STORAGE_KEY = createSHA256Hash(MOCK_STORAGE_KEY_SIGNATURE);
diff --git a/packages/profile-sync-controller/src/controllers/user-storage/types.ts b/packages/profile-sync-controller/src/controllers/user-storage/types.ts
index 1f38d86905b..923954cbc86 100644
--- a/packages/profile-sync-controller/src/controllers/user-storage/types.ts
+++ b/packages/profile-sync-controller/src/controllers/user-storage/types.ts
@@ -1,8 +1,8 @@
import type {
UserStorageGenericPathWithFeatureAndKey,
UserStorageGenericPathWithFeatureOnly,
-} from '../../shared/storage-schema';
-import type { NativeScrypt } from '../../shared/types/encryption';
+} from '../../shared/storage-schema.js';
+import type { NativeScrypt } from '../../shared/types/encryption.js';
export type UserStorageBaseOptions = {
bearerToken: string;
diff --git a/packages/profile-sync-controller/src/controllers/user-storage/utils.test.ts b/packages/profile-sync-controller/src/controllers/user-storage/utils.test.ts
index cecdf729f25..fd5e4e8171d 100644
--- a/packages/profile-sync-controller/src/controllers/user-storage/utils.test.ts
+++ b/packages/profile-sync-controller/src/controllers/user-storage/utils.test.ts
@@ -1,4 +1,4 @@
-import { setDifference, setIntersection } from './utils';
+import { setDifference, setIntersection } from './utils.js';
describe('utils - setDifference()', () => {
it('should return the difference between 2 sets', () => {
diff --git a/packages/profile-sync-controller/src/index.ts b/packages/profile-sync-controller/src/index.ts
index 0140b052cbe..91f6974258b 100644
--- a/packages/profile-sync-controller/src/index.ts
+++ b/packages/profile-sync-controller/src/index.ts
@@ -1,3 +1,3 @@
-export * as SDK from './sdk';
-export * as AuthenticationController from './controllers/authentication';
-export * as UserStorageController from './controllers/user-storage';
+export type * as SDK from './sdk.js';
+export * as AuthenticationController from './controllers/authentication.js';
+export * as UserStorageController from './controllers/user-storage.js';
diff --git a/packages/profile-sync-controller/src/sdk/__fixtures__/auth.ts b/packages/profile-sync-controller/src/sdk/__fixtures__/auth.ts
index 791d6658341..1879d580165 100644
--- a/packages/profile-sync-controller/src/sdk/__fixtures__/auth.ts
+++ b/packages/profile-sync-controller/src/sdk/__fixtures__/auth.ts
@@ -16,7 +16,7 @@ import {
MOCK_USER_PROFILE_LINEAGE_RESPONSE,
MOCK_CUSTOMER_SERVICE_TOKEN_URL,
MOCK_CUSTOMER_SERVICE_TOKEN_RESPONSE,
-} from '../mocks/auth';
+} from '../mocks/auth.js';
type MockReply = {
status: nock.StatusCode;
diff --git a/packages/profile-sync-controller/src/sdk/__fixtures__/test-utils.ts b/packages/profile-sync-controller/src/sdk/__fixtures__/test-utils.ts
index b8cd5f72f77..725b522e076 100644
--- a/packages/profile-sync-controller/src/sdk/__fixtures__/test-utils.ts
+++ b/packages/profile-sync-controller/src/sdk/__fixtures__/test-utils.ts
@@ -1,13 +1,13 @@
import type { Eip1193Provider } from 'ethers';
-import { Env, Platform } from '../../shared/env';
-import { JwtBearerAuth } from '../authentication';
+import { Env, Platform } from '../../shared/env.js';
import type {
AuthSigningOptions,
AuthStorageOptions,
-} from '../authentication-jwt-bearer/types';
-import { AuthType } from '../authentication-jwt-bearer/types';
-import { SNAP_ORIGIN } from '../utils/messaging-signing-snap-requests';
+} from '../authentication-jwt-bearer/types.js';
+import { AuthType } from '../authentication-jwt-bearer/types.js';
+import { JwtBearerAuth } from '../authentication.js';
+import { SNAP_ORIGIN } from '../utils/messaging-signing-snap-requests.js';
// Alias mocking variables with ANY to test runtime safety.
// eslint-disable-next-line @typescript-eslint/no-explicit-any
diff --git a/packages/profile-sync-controller/src/sdk/__fixtures__/userstorage.ts b/packages/profile-sync-controller/src/sdk/__fixtures__/userstorage.ts
index a5678ba6328..052c87b51ac 100644
--- a/packages/profile-sync-controller/src/sdk/__fixtures__/userstorage.ts
+++ b/packages/profile-sync-controller/src/sdk/__fixtures__/userstorage.ts
@@ -4,7 +4,7 @@ import {
MOCK_STORAGE_RESPONSE,
MOCK_STORAGE_URL,
MOCK_STORAGE_URL_ALL_FEATURE_ENTRIES,
-} from '../mocks/userstorage';
+} from '../mocks/userstorage.js';
type MockReply = {
status: nock.StatusCode;
diff --git a/packages/profile-sync-controller/src/sdk/authentication-jwt-bearer/flow-siwe.ts b/packages/profile-sync-controller/src/sdk/authentication-jwt-bearer/flow-siwe.ts
index 487e4f019b5..340a8d98a14 100644
--- a/packages/profile-sync-controller/src/sdk/authentication-jwt-bearer/flow-siwe.ts
+++ b/packages/profile-sync-controller/src/sdk/authentication-jwt-bearer/flow-siwe.ts
@@ -1,7 +1,7 @@
import { SiweMessage } from 'siwe';
-import { ValidationError } from '../errors';
-import { validateLoginResponse } from '../utils/validate-login-response';
+import { ValidationError } from '../errors.js';
+import { validateLoginResponse } from '../utils/validate-login-response.js';
import {
SIWE_LOGIN_URL,
authenticate,
@@ -9,7 +9,7 @@ import {
getCustomerServiceToken,
getNonce,
getUserProfileLineage,
-} from './services';
+} from './services.js';
import type {
AuthConfig,
AuthStorageOptions,
@@ -18,7 +18,7 @@ import type {
LoginResponse,
UserProfile,
UserProfileLineage,
-} from './types';
+} from './types.js';
type JwtBearerAuth_SIWE_Options = {
storage: AuthStorageOptions;
diff --git a/packages/profile-sync-controller/src/sdk/authentication-jwt-bearer/flow-srp.test.ts b/packages/profile-sync-controller/src/sdk/authentication-jwt-bearer/flow-srp.test.ts
index 47149e3d78c..07e7e0fb31f 100644
--- a/packages/profile-sync-controller/src/sdk/authentication-jwt-bearer/flow-srp.test.ts
+++ b/packages/profile-sync-controller/src/sdk/authentication-jwt-bearer/flow-srp.test.ts
@@ -1,9 +1,9 @@
-import { Env, Platform } from '../../shared/env';
-import { RateLimitedError } from '../errors';
-import { PAIR_DEDUPE_TTL_MS, SRPJwtBearerAuth } from './flow-srp';
-import { AuthType } from './types';
-import type { AuthConfig, LoginResponse, UserProfile } from './types';
-import * as timeUtils from './utils/time';
+import { Env, Platform } from '../../shared/env.js';
+import { RateLimitedError } from '../errors.js';
+import { PAIR_DEDUPE_TTL_MS, SRPJwtBearerAuth } from './flow-srp.js';
+import { AuthType } from './types.js';
+import type { AuthConfig, LoginResponse, UserProfile } from './types.js';
+import * as timeUtils from './utils/time.js';
jest.setTimeout(15000);
diff --git a/packages/profile-sync-controller/src/sdk/authentication-jwt-bearer/flow-srp.ts b/packages/profile-sync-controller/src/sdk/authentication-jwt-bearer/flow-srp.ts
index 5cd06ded822..b2685d70c11 100644
--- a/packages/profile-sync-controller/src/sdk/authentication-jwt-bearer/flow-srp.ts
+++ b/packages/profile-sync-controller/src/sdk/authentication-jwt-bearer/flow-srp.ts
@@ -1,15 +1,15 @@
import type { Eip1193Provider } from 'ethers';
-import type { MetaMetricsAuth } from '../../shared/types/services';
-import { ValidationError, RateLimitedError } from '../errors';
-import { getMetaMaskProviderEIP6963 } from '../utils/eip-6963-metamask-provider';
+import type { MetaMetricsAuth } from '../../shared/types/services.js';
+import { ValidationError, RateLimitedError } from '../errors.js';
+import { getMetaMaskProviderEIP6963 } from '../utils/eip-6963-metamask-provider.js';
import {
MESSAGE_SIGNING_SNAP,
assertMessageStartsWithMetamask,
connectSnap,
isSnapConnected,
-} from '../utils/messaging-signing-snap-requests';
-import { validateLoginResponse } from '../utils/validate-login-response';
+} from '../utils/messaging-signing-snap-requests.js';
+import { validateLoginResponse } from '../utils/validate-login-response.js';
import {
authenticate,
authorizeOIDC,
@@ -17,8 +17,8 @@ import {
getNonce,
getUserProfileLineage,
pairProfiles,
-} from './services';
-import type { PairProfilesResponse } from './services';
+} from './services.js';
+import type { PairProfilesResponse } from './services.js';
import type {
AuthConfig,
AuthSigningOptions,
@@ -28,9 +28,9 @@ import type {
LoginResponse,
UserProfile,
UserProfileLineage,
-} from './types';
-import { computeIdentifierId } from './utils/identifier';
-import * as timeUtils from './utils/time';
+} from './types.js';
+import { computeIdentifierId } from './utils/identifier.js';
+import * as timeUtils from './utils/time.js';
type JwtBearerAuth_SRP_Options = {
storage: AuthStorageOptions;
diff --git a/packages/profile-sync-controller/src/sdk/authentication-jwt-bearer/services.test.ts b/packages/profile-sync-controller/src/sdk/authentication-jwt-bearer/services.test.ts
index d027faf50dd..a34f2e40b5e 100644
--- a/packages/profile-sync-controller/src/sdk/authentication-jwt-bearer/services.test.ts
+++ b/packages/profile-sync-controller/src/sdk/authentication-jwt-bearer/services.test.ts
@@ -1,10 +1,10 @@
-import { Env, Platform } from '../../shared/env';
+import { Env, Platform } from '../../shared/env.js';
import {
NonceRetrievalError,
SignInError,
PairError,
RateLimitedError,
-} from '../errors';
+} from '../errors.js';
import {
getNonce,
authenticate,
@@ -21,8 +21,8 @@ import {
PAIR_PROFILES_URL,
PROFILE_LINEAGE_URL,
CUSTOMER_SERVICE_TOKEN_URL,
-} from './services';
-import { AuthType } from './types';
+} from './services.js';
+import { AuthType } from './types.js';
// Mock global fetch
const mockFetch = jest.fn();
diff --git a/packages/profile-sync-controller/src/sdk/authentication-jwt-bearer/services.ts b/packages/profile-sync-controller/src/sdk/authentication-jwt-bearer/services.ts
index 5c3a5be2249..28e00886599 100644
--- a/packages/profile-sync-controller/src/sdk/authentication-jwt-bearer/services.ts
+++ b/packages/profile-sync-controller/src/sdk/authentication-jwt-bearer/services.ts
@@ -1,23 +1,22 @@
-import type { Env, Platform } from '../../shared/env';
-import { getEnvUrls, getOidcClientId } from '../../shared/env';
-import type { MetaMetricsAuth } from '../../shared/types/services';
-import { HTTP_STATUS_CODES } from '../constants';
+import type { Env, Platform } from '../../shared/env.js';
+import { getEnvUrls, getOidcClientId } from '../../shared/env.js';
+import type { MetaMetricsAuth } from '../../shared/types/services.js';
+import { HTTP_STATUS_CODES } from '../constants.js';
import {
NonceRetrievalError,
PairError,
SignInError,
ValidationError,
RateLimitedError,
-} from '../errors';
-import { validatePairResponse } from '../utils/validate-pair-response';
+} from '../errors.js';
+import { validatePairResponse } from '../utils/validate-pair-response.js';
import type {
AccessToken,
- ErrorMessage,
ProfileAlias,
UserProfile,
UserProfileLineage,
-} from './types';
-import { AuthType } from './types';
+} from './types.js';
+import { AuthType } from './types.js';
/**
* Parse Retry-After header into milliseconds if possible.
@@ -56,10 +55,7 @@ async function getResponseErrorMessage(response: Response): Promise {
let error = 'unknown';
try {
- const responseBody = (await response.json()) as
- | ErrorMessage
- // eslint-disable-next-line @typescript-eslint/naming-convention
- | { error_description: string; error: string };
+ const responseBody = await response.json();
message =
'message' in responseBody
diff --git a/packages/profile-sync-controller/src/sdk/authentication-jwt-bearer/types.ts b/packages/profile-sync-controller/src/sdk/authentication-jwt-bearer/types.ts
index 2dae8fa502a..9d2e35fbb2d 100644
--- a/packages/profile-sync-controller/src/sdk/authentication-jwt-bearer/types.ts
+++ b/packages/profile-sync-controller/src/sdk/authentication-jwt-bearer/types.ts
@@ -1,4 +1,4 @@
-import type { Env, Platform } from '../../shared/env';
+import type { Env, Platform } from '../../shared/env.js';
export enum AuthType {
/* sign in using a private key derived from your secret recovery phrase (SRP).
diff --git a/packages/profile-sync-controller/src/sdk/authentication-jwt-bearer/utils/identifier.test.ts b/packages/profile-sync-controller/src/sdk/authentication-jwt-bearer/utils/identifier.test.ts
index b314092cd6d..7696fb392c3 100644
--- a/packages/profile-sync-controller/src/sdk/authentication-jwt-bearer/utils/identifier.test.ts
+++ b/packages/profile-sync-controller/src/sdk/authentication-jwt-bearer/utils/identifier.test.ts
@@ -1,6 +1,6 @@
-import { createSHA256Hash } from '../../../shared/encryption';
-import { Env } from '../../../shared/env';
-import { computeIdentifierId, IDENTIFIER_SALT } from './identifier';
+import { createSHA256Hash } from '../../../shared/encryption.js';
+import { Env } from '../../../shared/env.js';
+import { computeIdentifierId, IDENTIFIER_SALT } from './identifier.js';
describe('computeIdentifierId', () => {
const MOCK_PUBLIC_KEY =
diff --git a/packages/profile-sync-controller/src/sdk/authentication-jwt-bearer/utils/identifier.ts b/packages/profile-sync-controller/src/sdk/authentication-jwt-bearer/utils/identifier.ts
index 93bfaaf515b..d991e324171 100644
--- a/packages/profile-sync-controller/src/sdk/authentication-jwt-bearer/utils/identifier.ts
+++ b/packages/profile-sync-controller/src/sdk/authentication-jwt-bearer/utils/identifier.ts
@@ -1,5 +1,5 @@
-import { createSHA256Hash } from '../../../shared/encryption';
-import type { Env } from '../../../shared/env';
+import { createSHA256Hash } from '../../../shared/encryption.js';
+import type { Env } from '../../../shared/env.js';
export const IDENTIFIER_SALT: Record = {
dev: 'Baiche1eu8Oa2een5ieReul0Phooph4e',
diff --git a/packages/profile-sync-controller/src/sdk/authentication.test.ts b/packages/profile-sync-controller/src/sdk/authentication.test.ts
index f854e8ea776..f37623eb8be 100644
--- a/packages/profile-sync-controller/src/sdk/authentication.test.ts
+++ b/packages/profile-sync-controller/src/sdk/authentication.test.ts
@@ -1,21 +1,21 @@
import type { Eip1193Provider } from 'ethers';
-import { Env, Platform } from '../shared/env';
-import { arrangeAuthAPIs } from './__fixtures__/auth';
-import type { MockVariable } from './__fixtures__/test-utils';
-import { arrangeAuth, arrangeMockProvider } from './__fixtures__/test-utils';
-import { JwtBearerAuth } from './authentication';
-import * as AuthServices from './authentication-jwt-bearer/services';
-import type { LoginResponse, Pair } from './authentication-jwt-bearer/types';
+import { Env, Platform } from '../shared/env.js';
+import { arrangeAuthAPIs } from './__fixtures__/auth.js';
+import type { MockVariable } from './__fixtures__/test-utils.js';
+import { arrangeAuth, arrangeMockProvider } from './__fixtures__/test-utils.js';
+import * as AuthServices from './authentication-jwt-bearer/services.js';
+import type { LoginResponse, Pair } from './authentication-jwt-bearer/types.js';
+import { JwtBearerAuth } from './authentication.js';
import {
NonceRetrievalError,
PairError,
SignInError,
UnsupportedAuthTypeError,
ValidationError,
-} from './errors';
-import { MOCK_ACCESS_JWT, MOCK_SRP_LOGIN_RESPONSE } from './mocks/auth';
-import * as Eip6963MetamaskProvider from './utils/eip-6963-metamask-provider';
+} from './errors.js';
+import { MOCK_ACCESS_JWT, MOCK_SRP_LOGIN_RESPONSE } from './mocks/auth.js';
+import * as Eip6963MetamaskProvider from './utils/eip-6963-metamask-provider.js';
const MOCK_SRP = '0x6265617665726275696c642e6f7267';
const MOCK_ADDRESS = '0x68757d15a4d8d1421c17003512AFce15D3f3FaDa';
diff --git a/packages/profile-sync-controller/src/sdk/authentication.ts b/packages/profile-sync-controller/src/sdk/authentication.ts
index fdff9253a0a..5afeff8c5c3 100644
--- a/packages/profile-sync-controller/src/sdk/authentication.ts
+++ b/packages/profile-sync-controller/src/sdk/authentication.ts
@@ -1,20 +1,20 @@
import type { Eip1193Provider } from 'ethers';
-import type { Env } from '../shared/env';
-import { SIWEJwtBearerAuth } from './authentication-jwt-bearer/flow-siwe';
-import { SRPJwtBearerAuth } from './authentication-jwt-bearer/flow-srp';
+import type { Env } from '../shared/env.js';
+import { SIWEJwtBearerAuth } from './authentication-jwt-bearer/flow-siwe.js';
+import { SRPJwtBearerAuth } from './authentication-jwt-bearer/flow-srp.js';
import {
getNonce,
pairIdentifiers,
-} from './authentication-jwt-bearer/services';
-import type { PairProfilesResponse } from './authentication-jwt-bearer/services';
+} from './authentication-jwt-bearer/services.js';
+import type { PairProfilesResponse } from './authentication-jwt-bearer/services.js';
import type {
UserProfile,
Pair,
UserProfileLineage,
-} from './authentication-jwt-bearer/types';
-import { AuthType } from './authentication-jwt-bearer/types';
-import { PairError, UnsupportedAuthTypeError } from './errors';
+} from './authentication-jwt-bearer/types.js';
+import { AuthType } from './authentication-jwt-bearer/types.js';
+import { PairError, UnsupportedAuthTypeError } from './errors.js';
// Computing the Classes, so we only get back the public methods for the interface.
@@ -169,6 +169,6 @@ export class JwtBearerAuth implements SIWEInterface, SRPInterface {
}
}
-export { SIWEJwtBearerAuth } from './authentication-jwt-bearer/flow-siwe';
-export { SRPJwtBearerAuth } from './authentication-jwt-bearer/flow-srp';
-export * from './authentication-jwt-bearer/types';
+export { SIWEJwtBearerAuth } from './authentication-jwt-bearer/flow-siwe.js';
+export { SRPJwtBearerAuth } from './authentication-jwt-bearer/flow-srp.js';
+export * from './authentication-jwt-bearer/types.js';
diff --git a/packages/profile-sync-controller/src/sdk/errors.ts b/packages/profile-sync-controller/src/sdk/errors.ts
index ac2c0a7ee3a..38c056ea01b 100644
--- a/packages/profile-sync-controller/src/sdk/errors.ts
+++ b/packages/profile-sync-controller/src/sdk/errors.ts
@@ -1,4 +1,4 @@
-import { HTTP_STATUS_CODES } from './constants';
+import { HTTP_STATUS_CODES } from './constants.js';
export class NonceRetrievalError extends Error {
constructor(message: string) {
diff --git a/packages/profile-sync-controller/src/sdk/index.ts b/packages/profile-sync-controller/src/sdk/index.ts
index 21bedd22a7e..f0484fea2f4 100644
--- a/packages/profile-sync-controller/src/sdk/index.ts
+++ b/packages/profile-sync-controller/src/sdk/index.ts
@@ -1,7 +1,7 @@
-export * from './authentication';
-export * from './user-storage';
-export * from './errors';
-export * from './utils/messaging-signing-snap-requests';
-export * from '../shared/encryption';
-export * from '../shared/env';
-export * from '../shared/storage-schema';
+export * from './authentication.js';
+export * from './user-storage.js';
+export * from './errors.js';
+export * from './utils/messaging-signing-snap-requests.js';
+export * from '../shared/encryption.js';
+export * from '../shared/env.js';
+export * from '../shared/storage-schema.js';
diff --git a/packages/profile-sync-controller/src/sdk/mocks/auth.ts b/packages/profile-sync-controller/src/sdk/mocks/auth.ts
index 8d50ff88af8..774b53d4776 100644
--- a/packages/profile-sync-controller/src/sdk/mocks/auth.ts
+++ b/packages/profile-sync-controller/src/sdk/mocks/auth.ts
@@ -1,4 +1,4 @@
-import { Env, Platform } from '../../shared/env';
+import { Env, Platform } from '../../shared/env.js';
import {
NONCE_URL,
SIWE_LOGIN_URL,
@@ -8,7 +8,7 @@ import {
PAIR_PROFILES_URL,
PROFILE_LINEAGE_URL,
CUSTOMER_SERVICE_TOKEN_URL,
-} from '../authentication-jwt-bearer/services';
+} from '../authentication-jwt-bearer/services.js';
export const MOCK_NONCE_URL = NONCE_URL(Env.PRD);
export const MOCK_SRP_LOGIN_URL = SRP_LOGIN_URL(Env.PRD);
diff --git a/packages/profile-sync-controller/src/sdk/mocks/userstorage.ts b/packages/profile-sync-controller/src/sdk/mocks/userstorage.ts
index ecd341fc3bd..19737b11d53 100644
--- a/packages/profile-sync-controller/src/sdk/mocks/userstorage.ts
+++ b/packages/profile-sync-controller/src/sdk/mocks/userstorage.ts
@@ -1,7 +1,7 @@
-import encryption, { createSHA256Hash } from '../../shared/encryption';
-import { Env } from '../../shared/env';
-import { USER_STORAGE_FEATURE_NAMES } from '../../shared/storage-schema';
-import { STORAGE_URL } from '../user-storage';
+import encryption, { createSHA256Hash } from '../../shared/encryption.js';
+import { Env } from '../../shared/env.js';
+import { USER_STORAGE_FEATURE_NAMES } from '../../shared/storage-schema.js';
+import { STORAGE_URL } from '../user-storage.js';
// Example mock notifications storage entry (wildcard)
export const MOCK_STORAGE_URL = STORAGE_URL(
diff --git a/packages/profile-sync-controller/src/sdk/user-storage.test.ts b/packages/profile-sync-controller/src/sdk/user-storage.test.ts
index 397fcbd298c..7e70e023886 100644
--- a/packages/profile-sync-controller/src/sdk/user-storage.test.ts
+++ b/packages/profile-sync-controller/src/sdk/user-storage.test.ts
@@ -1,12 +1,12 @@
import nock from 'nock';
import type { UserStorageGenericFeatureKey } from 'src/shared/storage-schema';
-import encryption, { createSHA256Hash } from '../shared/encryption';
-import { SHARED_SALT } from '../shared/encryption/constants';
-import { Env } from '../shared/env';
-import { USER_STORAGE_FEATURE_NAMES } from '../shared/storage-schema';
-import { arrangeAuthAPIs } from './__fixtures__/auth';
-import { arrangeAuth, typedMockFn } from './__fixtures__/test-utils';
+import encryption, { createSHA256Hash } from '../shared/encryption.js';
+import { SHARED_SALT } from '../shared/encryption/constants.js';
+import { Env } from '../shared/env.js';
+import { USER_STORAGE_FEATURE_NAMES } from '../shared/storage-schema.js';
+import { arrangeAuthAPIs } from './__fixtures__/auth.js';
+import { arrangeAuth, typedMockFn } from './__fixtures__/test-utils.js';
import {
handleMockUserStorageGet,
handleMockUserStoragePut,
@@ -14,18 +14,18 @@ import {
handleMockUserStorageDeleteAllFeatureEntries,
handleMockUserStorageDelete,
handleMockUserStorageBatchDelete,
-} from './__fixtures__/userstorage';
-import type { IBaseAuth } from './authentication-jwt-bearer/types';
-import { NotFoundError, UserStorageError } from './errors';
+} from './__fixtures__/userstorage.js';
+import type { IBaseAuth } from './authentication-jwt-bearer/types.js';
+import { NotFoundError, UserStorageError } from './errors.js';
import {
MOCK_NOTIFICATIONS_DATA,
MOCK_STORAGE_KEY,
MOCK_STORAGE_RESPONSE,
MOCK_STORAGE_URL,
MOCK_STORAGE_URL_ALL_FEATURE_ENTRIES,
-} from './mocks/userstorage';
-import type { StorageOptions } from './user-storage';
-import { STORAGE_URL, UserStorage } from './user-storage';
+} from './mocks/userstorage.js';
+import type { StorageOptions } from './user-storage.js';
+import { STORAGE_URL, UserStorage } from './user-storage.js';
const MOCK_SRP = '0x6265617665726275696c642e6f7267';
const MOCK_ADDRESS = '0x68757d15a4d8d1421c17003512AFce15D3f3FaDa';
diff --git a/packages/profile-sync-controller/src/sdk/user-storage.ts b/packages/profile-sync-controller/src/sdk/user-storage.ts
index df3b59754f3..72002623a4b 100644
--- a/packages/profile-sync-controller/src/sdk/user-storage.ts
+++ b/packages/profile-sync-controller/src/sdk/user-storage.ts
@@ -1,17 +1,17 @@
-import encryption, { createSHA256Hash } from '../shared/encryption';
-import { SHARED_SALT } from '../shared/encryption/constants';
-import type { Env } from '../shared/env';
-import { getEnvUrls } from '../shared/env';
+import encryption, { createSHA256Hash } from '../shared/encryption.js';
+import { SHARED_SALT } from '../shared/encryption/constants.js';
+import type { Env } from '../shared/env.js';
+import { getEnvUrls } from '../shared/env.js';
import type {
UserStorageGenericFeatureKey,
UserStorageGenericFeatureName,
UserStorageGenericPathWithFeatureAndKey,
UserStorageGenericPathWithFeatureOnly,
-} from '../shared/storage-schema';
-import { createEntryPath } from '../shared/storage-schema';
-import type { NativeScrypt } from '../shared/types/encryption';
-import type { IBaseAuth } from './authentication-jwt-bearer/types';
-import { NotFoundError, UserStorageError } from './errors';
+} from '../shared/storage-schema.js';
+import { createEntryPath } from '../shared/storage-schema.js';
+import type { NativeScrypt } from '../shared/types/encryption.js';
+import type { IBaseAuth } from './authentication-jwt-bearer/types.js';
+import { NotFoundError, UserStorageError } from './errors.js';
export const STORAGE_URL = (env: Env, encryptedPath: string) =>
`${getEnvUrls(env).userStorageApiUrl}/api/v1/userstorage/${encryptedPath}`;
diff --git a/packages/profile-sync-controller/src/sdk/utils/eip-6963-metamask-provider.test.ts b/packages/profile-sync-controller/src/sdk/utils/eip-6963-metamask-provider.test.ts
index 5307131830e..db0c8608819 100644
--- a/packages/profile-sync-controller/src/sdk/utils/eip-6963-metamask-provider.test.ts
+++ b/packages/profile-sync-controller/src/sdk/utils/eip-6963-metamask-provider.test.ts
@@ -1,11 +1,11 @@
import type { Eip1193Provider } from 'ethers';
-import type { MockVariable } from '../__fixtures__/test-utils';
-import type { AnnounceProviderEvent } from './eip-6963-metamask-provider';
+import type { MockVariable } from '../__fixtures__/test-utils.js';
+import type { AnnounceProviderEvent } from './eip-6963-metamask-provider.js';
import {
getMetaMaskProviderEIP6963,
metamaskClientsRdns,
-} from './eip-6963-metamask-provider';
+} from './eip-6963-metamask-provider.js';
describe('getMetaMaskProviderEIP6963() tests', () => {
let unsubscribe: undefined | (() => void);
diff --git a/packages/profile-sync-controller/src/sdk/utils/messaging-signing-snap-requests.test.ts b/packages/profile-sync-controller/src/sdk/utils/messaging-signing-snap-requests.test.ts
index fb9e022890c..9861629c0e2 100644
--- a/packages/profile-sync-controller/src/sdk/utils/messaging-signing-snap-requests.test.ts
+++ b/packages/profile-sync-controller/src/sdk/utils/messaging-signing-snap-requests.test.ts
@@ -1,13 +1,13 @@
-import { arrangeMockProvider } from '../__fixtures__/test-utils';
-import type { MockVariable } from '../__fixtures__/test-utils';
-import type { Snap } from './messaging-signing-snap-requests';
+import { arrangeMockProvider } from '../__fixtures__/test-utils.js';
+import type { MockVariable } from '../__fixtures__/test-utils.js';
+import type { Snap } from './messaging-signing-snap-requests.js';
import {
MESSAGE_SIGNING_SNAP,
SNAP_ORIGIN,
connectSnap,
getSnaps,
isSnapConnected,
-} from './messaging-signing-snap-requests';
+} from './messaging-signing-snap-requests.js';
/**
* Most of these utilities are wrappers around making wallet requests,
diff --git a/packages/profile-sync-controller/src/sdk/utils/validate-login-response.test.ts b/packages/profile-sync-controller/src/sdk/utils/validate-login-response.test.ts
index 18a7bd914dd..cfe52492afb 100644
--- a/packages/profile-sync-controller/src/sdk/utils/validate-login-response.test.ts
+++ b/packages/profile-sync-controller/src/sdk/utils/validate-login-response.test.ts
@@ -1,5 +1,5 @@
-import type { LoginResponse } from '../authentication';
-import { validateLoginResponse } from './validate-login-response';
+import type { LoginResponse } from '../authentication.js';
+import { validateLoginResponse } from './validate-login-response.js';
/**
* Creates a minimal JWT string with the given payload claims.
diff --git a/packages/profile-sync-controller/src/sdk/utils/validate-login-response.ts b/packages/profile-sync-controller/src/sdk/utils/validate-login-response.ts
index c8ee45ca260..0346a9e7908 100644
--- a/packages/profile-sync-controller/src/sdk/utils/validate-login-response.ts
+++ b/packages/profile-sync-controller/src/sdk/utils/validate-login-response.ts
@@ -1,4 +1,4 @@
-import type { LoginResponse } from '../authentication';
+import type { LoginResponse } from '../authentication.js';
/**
* Validates that the input is a well-formed, non-expired LoginResponse.
diff --git a/packages/profile-sync-controller/src/sdk/utils/validate-pair-response.test.ts b/packages/profile-sync-controller/src/sdk/utils/validate-pair-response.test.ts
index 96fcaf89529..5b8899b83af 100644
--- a/packages/profile-sync-controller/src/sdk/utils/validate-pair-response.test.ts
+++ b/packages/profile-sync-controller/src/sdk/utils/validate-pair-response.test.ts
@@ -1,5 +1,5 @@
-import type { RawPairResponse } from './validate-pair-response';
-import { validatePairResponse } from './validate-pair-response';
+import type { RawPairResponse } from './validate-pair-response.js';
+import { validatePairResponse } from './validate-pair-response.js';
function createValidRawPairResponse(): RawPairResponse {
return {
diff --git a/packages/profile-sync-controller/src/shared/encryption/cache.ts b/packages/profile-sync-controller/src/shared/encryption/cache.ts
index 7552ef60d1a..10c55d90b3f 100644
--- a/packages/profile-sync-controller/src/shared/encryption/cache.ts
+++ b/packages/profile-sync-controller/src/shared/encryption/cache.ts
@@ -1,5 +1,5 @@
-import { SHARED_SALT } from './constants';
-import { byteArrayToBase64 } from './utils';
+import { SHARED_SALT } from './constants.js';
+import { byteArrayToBase64 } from './utils.js';
type CachedEntry = {
salt: Uint8Array;
diff --git a/packages/profile-sync-controller/src/shared/encryption/encryption.test.ts b/packages/profile-sync-controller/src/shared/encryption/encryption.test.ts
index 3517725ca3a..e83dd937c93 100644
--- a/packages/profile-sync-controller/src/shared/encryption/encryption.test.ts
+++ b/packages/profile-sync-controller/src/shared/encryption/encryption.test.ts
@@ -1,5 +1,5 @@
-import { MAX_KDF_PROMISE_CACHE_SIZE } from './constants';
-import encryption, { createSHA256Hash } from './encryption';
+import { MAX_KDF_PROMISE_CACHE_SIZE } from './constants.js';
+import encryption, { createSHA256Hash } from './encryption.js';
describe('encryption tests', () => {
const PASSWORD = '123';
diff --git a/packages/profile-sync-controller/src/shared/encryption/encryption.ts b/packages/profile-sync-controller/src/shared/encryption/encryption.ts
index 956a0fa4933..c96740b83d7 100644
--- a/packages/profile-sync-controller/src/shared/encryption/encryption.ts
+++ b/packages/profile-sync-controller/src/shared/encryption/encryption.ts
@@ -4,12 +4,12 @@ import { scryptAsync } from '@noble/hashes/scrypt';
import { sha256 } from '@noble/hashes/sha256';
import { utf8ToBytes, concatBytes, bytesToHex } from '@noble/hashes/utils';
-import type { NativeScrypt } from '../types/encryption';
+import type { NativeScrypt } from '../types/encryption.js';
import {
getCachedKeyBySalt,
getCachedKeyGeneratedWithSharedSalt,
setCachedKey,
-} from './cache';
+} from './cache.js';
import {
ALGORITHM_KEY_SIZE,
ALGORITHM_NONCE_SIZE,
@@ -19,13 +19,13 @@ import {
SCRYPT_r,
SCRYPT_SALT_SIZE,
SHARED_SALT,
-} from './constants';
+} from './constants.js';
import {
base64ToByteArray,
byteArrayToBase64,
bytesToUtf8,
stringToByteArray,
-} from './utils';
+} from './utils.js';
export type EncryptedPayload = {
// version
@@ -296,7 +296,7 @@ class EncryptorDecryptor {
this.#kdfPromiseCache.set(cacheKey, kdfPromise);
// Clean up the cache after completion (both success and failure)
- // eslint-disable-next-line no-void
+
void kdfPromise.finally(() => {
this.#kdfPromiseCache.delete(cacheKey);
});
diff --git a/packages/profile-sync-controller/src/shared/encryption/index.ts b/packages/profile-sync-controller/src/shared/encryption/index.ts
index 90cdb5f5f2e..d8341931f30 100644
--- a/packages/profile-sync-controller/src/shared/encryption/index.ts
+++ b/packages/profile-sync-controller/src/shared/encryption/index.ts
@@ -1,5 +1,5 @@
-import Encryption from './encryption';
+import Encryption from './encryption.js';
export { Encryption };
-export * from './encryption';
+export * from './encryption.js';
export default Encryption;
diff --git a/packages/profile-sync-controller/src/shared/env.test.ts b/packages/profile-sync-controller/src/shared/env.test.ts
index 4f9e1403abd..dbac8ed197c 100644
--- a/packages/profile-sync-controller/src/shared/env.test.ts
+++ b/packages/profile-sync-controller/src/shared/env.test.ts
@@ -1,5 +1,5 @@
-import type { MockVariable } from '../sdk/__fixtures__/test-utils';
-import { getEnvUrls, Env, Platform, getOidcClientId } from './env';
+import type { MockVariable } from '../sdk/__fixtures__/test-utils.js';
+import { getEnvUrls, Env, Platform, getOidcClientId } from './env.js';
describe('getEnvUrls', () => {
it('should return URLs if given a valid environment', () => {
diff --git a/packages/profile-sync-controller/src/shared/storage-schema.test.ts b/packages/profile-sync-controller/src/shared/storage-schema.test.ts
index ca2597b7777..d34d5fa21ed 100644
--- a/packages/profile-sync-controller/src/shared/storage-schema.test.ts
+++ b/packages/profile-sync-controller/src/shared/storage-schema.test.ts
@@ -2,7 +2,7 @@ import {
createEntryPath,
getFeatureAndKeyFromPath,
USER_STORAGE_FEATURE_NAMES,
-} from './storage-schema';
+} from './storage-schema.js';
// eslint-disable-next-line @typescript-eslint/no-explicit-any
type ErroneousUserStoragePath = any;
diff --git a/packages/profile-sync-controller/src/shared/storage-schema.ts b/packages/profile-sync-controller/src/shared/storage-schema.ts
index 90fb314d496..0b0e29b59ca 100644
--- a/packages/profile-sync-controller/src/shared/storage-schema.ts
+++ b/packages/profile-sync-controller/src/shared/storage-schema.ts
@@ -1,4 +1,4 @@
-import { createSHA256Hash } from './encryption';
+import { createSHA256Hash } from './encryption.js';
/**
* The User Storage Endpoint requires a feature name and a namespace key.
diff --git a/packages/profile-sync-controller/src/shared/types/services.ts b/packages/profile-sync-controller/src/shared/types/services.ts
index 49dbbb2b4fa..c20ca5d6128 100644
--- a/packages/profile-sync-controller/src/shared/types/services.ts
+++ b/packages/profile-sync-controller/src/shared/types/services.ts
@@ -1,4 +1,4 @@
-import type { Platform } from '../env';
+import type { Platform } from '../env.js';
export type ClientMetaMetrics = {
metametricsId: string;
diff --git a/packages/profile-sync-controller/src/shared/utils/event-queue.test.ts b/packages/profile-sync-controller/src/shared/utils/event-queue.test.ts
index d44a4f81bc1..0b0cd44c947 100644
--- a/packages/profile-sync-controller/src/shared/utils/event-queue.test.ts
+++ b/packages/profile-sync-controller/src/shared/utils/event-queue.test.ts
@@ -1,4 +1,4 @@
-import { EventQueue } from './event-queue';
+import { EventQueue } from './event-queue.js';
describe('EventQueue', () => {
let eventQueue: EventQueue;
diff --git a/packages/ramps-controller/dev-watch.js b/packages/ramps-controller/dev-watch.js
index 3d44c720b57..4959ba0f8b9 100644
--- a/packages/ramps-controller/dev-watch.js
+++ b/packages/ramps-controller/dev-watch.js
@@ -8,8 +8,8 @@ const path = require('path');
* Watches src/ directory and runs link script on changes
*/
-const srcDir = path.join(__dirname, 'src');
-const linkScript = path.join(__dirname, 'link-ramp-controller.js');
+const srcDir = path.join(import.meta.dirname, 'src');
+const linkScript = path.join(import.meta.dirname, 'link-ramp-controller.js');
console.log('👀 Watching ramps-controller src/ directory...');
console.log('📁 Press Ctrl+C to stop watching\n');
@@ -24,7 +24,7 @@ function runLinkScript() {
console.log('🔄 Changes detected, rebuilding and linking...');
const child = spawn('node', [linkScript], {
stdio: 'inherit',
- cwd: __dirname,
+ cwd: import.meta.dirname,
});
child.on('close', (code) => {
diff --git a/packages/ramps-controller/jest.config.js b/packages/ramps-controller/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/ramps-controller/jest.config.js
+++ b/packages/ramps-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/ramps-controller/link-ramp-controller.js b/packages/ramps-controller/link-ramp-controller.js
index 0646d418043..a9b14cb4465 100644
--- a/packages/ramps-controller/link-ramp-controller.js
+++ b/packages/ramps-controller/link-ramp-controller.js
@@ -18,9 +18,9 @@ function pathExistsSync(filePath) {
* This builds and copies the ramps-controller files to the mobile app's node_modules
*/
-const rampsControllerPath = __dirname;
+const rampsControllerPath = import.meta.dirname;
const mobileNodeModulesPath = path.join(
- __dirname,
+ import.meta.dirname,
'..',
'..',
'..',
@@ -56,7 +56,13 @@ try {
}
// Check if mobile app exists
-const mobilePath = path.join(__dirname, '..', '..', '..', 'metamask-mobile');
+const mobilePath = path.join(
+ import.meta.dirname,
+ '..',
+ '..',
+ '..',
+ 'metamask-mobile',
+);
if (!pathExistsSync(mobilePath)) {
console.error('❌ MetaMask mobile app not found at expected location.');
process.exit(1);
diff --git a/packages/ramps-controller/package.json b/packages/ramps-controller/package.json
index 1b4d8b1b888..690f406551f 100644
--- a/packages/ramps-controller/package.json
+++ b/packages/ramps-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/ramps-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/ramps-controller",
@@ -64,7 +57,6 @@
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/ramps-controller/src/RampsController-method-action-types.ts b/packages/ramps-controller/src/RampsController-method-action-types.ts
index 4792d073e03..6b42331b61c 100644
--- a/packages/ramps-controller/src/RampsController-method-action-types.ts
+++ b/packages/ramps-controller/src/RampsController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { RampsController } from './RampsController';
+import type { RampsController } from './RampsController.js';
/**
* Executes a request with caching, deduplication, and at most one in-flight
diff --git a/packages/ramps-controller/src/RampsController.test.ts b/packages/ramps-controller/src/RampsController.test.ts
index 517ff9b7e7e..421668dc1f5 100644
--- a/packages/ramps-controller/src/RampsController.test.ts
+++ b/packages/ramps-controller/src/RampsController.test.ts
@@ -10,19 +10,28 @@ import type { RemoteFeatureFlagControllerState } from '@metamask/remote-feature-
import * as fs from 'fs';
import * as path from 'path';
-import { MONEY_HEADLESS_ALL_PROVIDERS_FLAG_KEY } from './featureFlags';
+import { MONEY_HEADLESS_ALL_PROVIDERS_FLAG_KEY } from './featureFlags.js';
import type {
RampsControllerMessenger,
RampsControllerState,
ResourceState,
UserRegion,
-} from './RampsController';
+} from './RampsController.js';
import {
RampsController,
getDefaultRampsControllerState,
RAMPS_CONTROLLER_REQUIRED_SERVICE_ACTIONS,
-} from './RampsController';
-import { RAMPS_ERROR_CODES } from './rampsErrorCodes';
+} from './RampsController.js';
+import { RAMPS_ERROR_CODES } from './rampsErrorCodes.js';
+import type {
+ RampsServiceGetGeolocationAction,
+ RampsServiceGetCountriesAction,
+ RampsServiceGetTokensAction,
+ RampsServiceGetProvidersAction,
+ RampsServiceGetPaymentMethodsAction,
+ RampsServiceGetQuotesAction,
+ RampsServiceGetBuyWidgetUrlAction,
+} from './RampsService-method-action-types.js';
import type {
Country,
TokensResponse,
@@ -34,18 +43,9 @@ import type {
Quote,
RampsToken,
RampsOrder,
-} from './RampsService';
-import { RampsOrderStatus } from './RampsService';
-import type {
- RampsServiceGetGeolocationAction,
- RampsServiceGetCountriesAction,
- RampsServiceGetTokensAction,
- RampsServiceGetProvidersAction,
- RampsServiceGetPaymentMethodsAction,
- RampsServiceGetQuotesAction,
- RampsServiceGetBuyWidgetUrlAction,
-} from './RampsService-method-action-types';
-import { RequestStatus } from './RequestCache';
+} from './RampsService.js';
+import { RampsOrderStatus } from './RampsService.js';
+import { RequestStatus } from './RequestCache.js';
import type {
TransakAccessToken,
TransakUserDetails,
@@ -61,7 +61,7 @@ import type {
TransakOrder,
TransakOrderPaymentMethod,
PatchUserRequestBody,
-} from './TransakService';
+} from './TransakService.js';
describe('RampsController', () => {
const circuitBreakerOpenErrorMessage =
@@ -4630,8 +4630,7 @@ describe('RampsController', () => {
it('does not fetch getPaymentMethods on provider selection (React Query owns fetching)', async () => {
const providerWithoutField: Provider = { ...mockProvider };
- delete (providerWithoutField as Partial)
- .supportedCryptoCurrencies;
+ delete providerWithoutField.supportedCryptoCurrencies;
const getPaymentMethodsMock = jest.fn(async () => ({ payments: [] }));
diff --git a/packages/ramps-controller/src/RampsController.ts b/packages/ramps-controller/src/RampsController.ts
index 52a14fa12e8..b9cc0e31955 100644
--- a/packages/ramps-controller/src/RampsController.ts
+++ b/packages/ramps-controller/src/RampsController.ts
@@ -10,11 +10,22 @@ import type { RemoteFeatureFlagControllerGetStateAction } from '@metamask/remote
import type { Json } from '@metamask/utils';
import type { Draft } from 'immer';
-import { isHeadlessAllProvidersEnabled } from './featureFlags';
-import { getProvidersServingAsset } from './providerAvailability';
-import type { RampsControllerMethodActions } from './RampsController-method-action-types';
-import type { RampsErrorCode } from './rampsErrorCodes';
-import { RAMPS_ERROR_CODES } from './rampsErrorCodes';
+import { isHeadlessAllProvidersEnabled } from './featureFlags.js';
+import { getProvidersServingAsset } from './providerAvailability.js';
+import type { RampsControllerMethodActions } from './RampsController-method-action-types.js';
+import type { RampsErrorCode } from './rampsErrorCodes.js';
+import { RAMPS_ERROR_CODES } from './rampsErrorCodes.js';
+import type {
+ RampsServiceGetGeolocationAction,
+ RampsServiceGetCountriesAction,
+ RampsServiceGetTokensAction,
+ RampsServiceGetProvidersAction,
+ RampsServiceGetPaymentMethodsAction,
+ RampsServiceGetQuotesAction,
+ RampsServiceGetBuyWidgetUrlAction,
+ RampsServiceGetOrderAction,
+ RampsServiceGetOrderFromCallbackAction,
+} from './RampsService-method-action-types.js';
import type {
BuyWidget,
Country,
@@ -30,26 +41,15 @@ import type {
RampsToken,
RampsServiceActions,
RampsOrder,
-} from './RampsService';
-import { RampsOrderStatus } from './RampsService';
-import type {
- RampsServiceGetGeolocationAction,
- RampsServiceGetCountriesAction,
- RampsServiceGetTokensAction,
- RampsServiceGetProvidersAction,
- RampsServiceGetPaymentMethodsAction,
- RampsServiceGetQuotesAction,
- RampsServiceGetBuyWidgetUrlAction,
- RampsServiceGetOrderAction,
- RampsServiceGetOrderFromCallbackAction,
-} from './RampsService-method-action-types';
+} from './RampsService.js';
+import { RampsOrderStatus } from './RampsService.js';
import type {
RequestCache as RequestCacheType,
RequestState,
ExecuteRequestOptions,
PendingRequest,
ResourceType,
-} from './RequestCache';
+} from './RequestCache.js';
import {
DEFAULT_REQUEST_CACHE_TTL,
DEFAULT_REQUEST_CACHE_MAX_SIZE,
@@ -59,24 +59,7 @@ import {
createSuccessState,
createErrorState,
RequestStatus,
-} from './RequestCache';
-import type {
- TransakAccessToken,
- TransakUserDetails,
- TransakBuyQuote,
- TransakKycRequirement,
- TransakAdditionalRequirementsResponse,
- TransakDepositOrder,
- TransakUserLimits,
- TransakOttResponse,
- TransakQuoteTranslation,
- TransakTranslationRequest,
- TransakIdProofStatus,
- TransakOrderPaymentMethod,
- PatchUserRequestBody,
- TransakOrder,
-} from './TransakService';
-import type { TransakServiceActions } from './TransakService';
+} from './RequestCache.js';
import type {
TransakServiceSetApiKeyAction,
TransakServiceSetAccessTokenAction,
@@ -102,7 +85,24 @@ import type {
TransakServiceCancelOrderAction,
TransakServiceCancelAllActiveOrdersAction,
TransakServiceGetActiveOrdersAction,
-} from './TransakService-method-action-types';
+} from './TransakService-method-action-types.js';
+import type {
+ TransakAccessToken,
+ TransakUserDetails,
+ TransakBuyQuote,
+ TransakKycRequirement,
+ TransakAdditionalRequirementsResponse,
+ TransakDepositOrder,
+ TransakUserLimits,
+ TransakOttResponse,
+ TransakQuoteTranslation,
+ TransakTranslationRequest,
+ TransakIdProofStatus,
+ TransakOrderPaymentMethod,
+ PatchUserRequestBody,
+ TransakOrder,
+} from './TransakService.js';
+import type { TransakServiceActions } from './TransakService.js';
// === GENERAL ===
@@ -2338,12 +2338,12 @@ export class RampsController extends BaseController<
(existing) => getInternalOrderCode(existing) === internalOrderCode,
);
if (idx === -1) {
- state.orders.push(healedOrder as Draft);
+ state.orders.push(healedOrder);
} else {
state.orders[idx] = {
...state.orders[idx],
...healedOrder,
- } as Draft;
+ };
}
});
}
@@ -2601,7 +2601,7 @@ export class RampsController extends BaseController<
wallet,
);
- const healedWalletAddress = order.walletAddress || wallet;
+ const healedWalletAddress = order.walletAddress ?? wallet;
const internalOrderCode = getInternalOrderCode({
id: order.id,
providerOrderId: orderCode,
@@ -2618,12 +2618,12 @@ export class RampsController extends BaseController<
getInternalOrderCode(existing) === internalOrderCode,
);
if (idx === -1) {
- state.orders.push(healedOrder as Draft);
+ state.orders.push(healedOrder);
} else {
state.orders[idx] = {
...state.orders[idx],
...healedOrder,
- } as Draft;
+ };
}
});
diff --git a/packages/ramps-controller/src/RampsService-method-action-types.ts b/packages/ramps-controller/src/RampsService-method-action-types.ts
index f1ed33ab2e1..e4e3044b28a 100644
--- a/packages/ramps-controller/src/RampsService-method-action-types.ts
+++ b/packages/ramps-controller/src/RampsService-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { RampsService } from './RampsService';
+import type { RampsService } from './RampsService.js';
/**
* Makes a request to the API in order to retrieve the user's geolocation
diff --git a/packages/ramps-controller/src/RampsService.test.ts b/packages/ramps-controller/src/RampsService.test.ts
index ed4f5d10c99..d645d447456 100644
--- a/packages/ramps-controller/src/RampsService.test.ts
+++ b/packages/ramps-controller/src/RampsService.test.ts
@@ -6,10 +6,10 @@ import type {
} from '@metamask/messenger';
import nock, { cleanAll } from 'nock';
-import { flushPromises } from '../../../tests/helpers';
+import { flushPromises } from '../../../tests/helpers.js';
import packageJson from '../package.json';
-import type { RampsServiceMessenger } from './RampsService';
-import { RampsService, RampsEnvironment } from './RampsService';
+import type { RampsServiceMessenger } from './RampsService.js';
+import { RampsService, RampsEnvironment } from './RampsService.js';
const CONTROLLER_VERSION = packageJson.version;
diff --git a/packages/ramps-controller/src/RampsService.ts b/packages/ramps-controller/src/RampsService.ts
index 52af12bcfc3..819e95bcdc1 100644
--- a/packages/ramps-controller/src/RampsService.ts
+++ b/packages/ramps-controller/src/RampsService.ts
@@ -7,7 +7,7 @@ import type { Messenger } from '@metamask/messenger';
import type { AuthenticationController } from '@metamask/profile-sync-controller';
import packageJson from '../package.json';
-import type { RampsServiceMethodActions } from './RampsService-method-action-types';
+import type { RampsServiceMethodActions } from './RampsService-method-action-types.js';
/**
* Represents phone number information for a country.
diff --git a/packages/ramps-controller/src/RequestCache.test.ts b/packages/ramps-controller/src/RequestCache.test.ts
index 3319d27220d..6887f0f7695 100644
--- a/packages/ramps-controller/src/RequestCache.test.ts
+++ b/packages/ramps-controller/src/RequestCache.test.ts
@@ -6,7 +6,7 @@ import {
createSuccessState,
createErrorState,
DEFAULT_REQUEST_CACHE_TTL,
-} from './RequestCache';
+} from './RequestCache.js';
describe('RequestCache', () => {
describe('createCacheKey', () => {
diff --git a/packages/ramps-controller/src/RequestCache.ts b/packages/ramps-controller/src/RequestCache.ts
index 7cfc8e1e7e4..4a7a027a9f1 100644
--- a/packages/ramps-controller/src/RequestCache.ts
+++ b/packages/ramps-controller/src/RequestCache.ts
@@ -1,6 +1,6 @@
import type { Json } from '@metamask/utils';
-import type { RampsErrorCode } from './rampsErrorCodes';
+import type { RampsErrorCode } from './rampsErrorCodes.js';
/**
* Types of resources that can have loading/error states.
diff --git a/packages/ramps-controller/src/TransakService-method-action-types.ts b/packages/ramps-controller/src/TransakService-method-action-types.ts
index 38864df659c..77e1c53698e 100644
--- a/packages/ramps-controller/src/TransakService-method-action-types.ts
+++ b/packages/ramps-controller/src/TransakService-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { TransakService } from './TransakService';
+import type { TransakService } from './TransakService.js';
export type TransakServiceSetApiKeyAction = {
type: `TransakService:setApiKey`;
diff --git a/packages/ramps-controller/src/TransakService.test.ts b/packages/ramps-controller/src/TransakService.test.ts
index 922641a37c1..67d29a4cbd1 100644
--- a/packages/ramps-controller/src/TransakService.test.ts
+++ b/packages/ramps-controller/src/TransakService.test.ts
@@ -6,17 +6,17 @@ import type {
} from '@metamask/messenger';
import nock, { cleanAll, isDone } from 'nock';
-import { flushPromises } from '../../../tests/helpers';
+import { flushPromises } from '../../../tests/helpers.js';
import type {
TransakServiceMessenger,
TransakAccessToken,
-} from './TransakService';
+} from './TransakService.js';
import {
TransakService,
TransakEnvironment,
TransakOrderIdTransformer,
TransakApiError,
-} from './TransakService';
+} from './TransakService.js';
// === Test Constants ===
diff --git a/packages/ramps-controller/src/TransakService.ts b/packages/ramps-controller/src/TransakService.ts
index 515cfb55816..3330b6e5fcd 100644
--- a/packages/ramps-controller/src/TransakService.ts
+++ b/packages/ramps-controller/src/TransakService.ts
@@ -5,8 +5,8 @@ import type {
import { createServicePolicy, HttpError } from '@metamask/controller-utils';
import type { Messenger } from '@metamask/messenger';
-import { TRANSAK_ERROR_CODES } from './transakErrorCodes';
-import type { TransakServiceMethodActions } from './TransakService-method-action-types';
+import { TRANSAK_ERROR_CODES } from './transakErrorCodes.js';
+import type { TransakServiceMethodActions } from './TransakService-method-action-types.js';
// === TYPES ===
@@ -592,6 +592,7 @@ export class TransakService {
} catch {
// ignore body read/parse failures
}
+ // eslint-disable-next-line @typescript-eslint/only-throw-error
throw new TransakApiError(
fetchResponse.status,
`Fetching '${url.toString()}' failed with status '${fetchResponse.status}'${errorBody ? `: ${errorBody}` : ''}`,
diff --git a/packages/ramps-controller/src/errorNormalization.test.ts b/packages/ramps-controller/src/errorNormalization.test.ts
index f07abd93e4b..a14590585e9 100644
--- a/packages/ramps-controller/src/errorNormalization.test.ts
+++ b/packages/ramps-controller/src/errorNormalization.test.ts
@@ -2,7 +2,7 @@ import {
extractExplicitTypedError,
getErrorMessage,
normalizeToTypedError,
-} from './errorNormalization';
+} from './errorNormalization.js';
type Code = 'NO_QUOTES' | 'QUOTE_FAILED' | 'UNKNOWN';
diff --git a/packages/ramps-controller/src/featureFlags.test.ts b/packages/ramps-controller/src/featureFlags.test.ts
index 3485d2f59a0..920f454cd22 100644
--- a/packages/ramps-controller/src/featureFlags.test.ts
+++ b/packages/ramps-controller/src/featureFlags.test.ts
@@ -1,7 +1,7 @@
import {
MONEY_HEADLESS_ALL_PROVIDERS_FLAG_KEY,
isHeadlessAllProvidersEnabled,
-} from './featureFlags';
+} from './featureFlags.js';
describe('MONEY_HEADLESS_ALL_PROVIDERS_FLAG_KEY', () => {
it('matches the LaunchDarkly flag key', () => {
diff --git a/packages/ramps-controller/src/index.ts b/packages/ramps-controller/src/index.ts
index 3ebe6f39e43..1917725cee5 100644
--- a/packages/ramps-controller/src/index.ts
+++ b/packages/ramps-controller/src/index.ts
@@ -11,7 +11,7 @@ export type {
ResourceState,
TransakState,
NativeProvidersState,
-} from './RampsController';
+} from './RampsController.js';
export type {
RampsControllerExecuteRequestAction,
RampsControllerAbortRequestAction,
@@ -60,13 +60,13 @@ export type {
RampsControllerTransakCancelOrderAction,
RampsControllerTransakCancelAllActiveOrdersAction,
RampsControllerTransakGetActiveOrdersAction,
-} from './RampsController-method-action-types';
+} from './RampsController-method-action-types.js';
export {
RampsController,
getDefaultRampsControllerState,
getInternalOrderCode,
RAMPS_CONTROLLER_REQUIRED_SERVICE_ACTIONS,
-} from './RampsController';
+} from './RampsController.js';
export type {
RampsServiceActions,
RampsServiceEvents,
@@ -102,14 +102,14 @@ export type {
RampsOrderFiatCurrency,
RampsOrderPaymentMethod,
OrderPaymentDetail,
-} from './RampsService';
+} from './RampsService.js';
export {
RampsService,
RampsEnvironment,
RampsApiService,
RampsOrderStatus,
RAMPS_SDK_VERSION,
-} from './RampsService';
+} from './RampsService.js';
export type {
RampsServiceGetGeolocationAction,
RampsServiceGetCountriesAction,
@@ -118,15 +118,15 @@ export type {
RampsServiceGetBuyWidgetUrlAction,
RampsServiceGetOrderAction,
RampsServiceGetOrderFromCallbackAction,
-} from './RampsService-method-action-types';
+} from './RampsService-method-action-types.js';
export type {
RequestCache,
RequestState,
ExecuteRequestOptions,
PendingRequest,
ResourceType,
-} from './RequestCache';
-export type { RampsErrorCode } from './rampsErrorCodes';
+} from './RequestCache.js';
+export type { RampsErrorCode } from './rampsErrorCodes.js';
export {
RequestStatus,
DEFAULT_REQUEST_CACHE_TTL,
@@ -136,32 +136,32 @@ export {
createLoadingState,
createSuccessState,
createErrorState,
-} from './RequestCache';
-export { RAMPS_ERROR_CODES } from './rampsErrorCodes';
-export type { RequestSelectorResult } from './selectors';
-export { createRequestSelector } from './selectors';
-export type { HeadlessFeatureFlagsLookup } from './featureFlags';
+} from './RequestCache.js';
+export { RAMPS_ERROR_CODES } from './rampsErrorCodes.js';
+export type { RequestSelectorResult } from './selectors.js';
+export { createRequestSelector } from './selectors.js';
+export type { HeadlessFeatureFlagsLookup } from './featureFlags.js';
export {
MONEY_HEADLESS_ALL_PROVIDERS_FLAG_KEY,
isHeadlessAllProvidersEnabled,
-} from './featureFlags';
+} from './featureFlags.js';
export {
providerServesAsset,
getProvidersServingAsset,
regionHasProviderForAsset,
isFiatDepositAvailable,
-} from './providerAvailability';
+} from './providerAvailability.js';
export {
isExternalBrowserQuote,
isCustomActionQuote,
isInAppOnlyQuote,
-} from './quoteClassification';
-export type { TypedError } from './errorNormalization';
+} from './quoteClassification.js';
+export type { TypedError } from './errorNormalization.js';
export {
getErrorMessage,
extractExplicitTypedError,
normalizeToTypedError,
-} from './errorNormalization';
+} from './errorNormalization.js';
export type {
TransakServiceActions,
TransakServiceEvents,
@@ -187,17 +187,17 @@ export type {
TransakUserLimits,
TransakIdProofStatus,
PatchUserRequestBody as TransakPatchUserRequestBody,
-} from './TransakService';
+} from './TransakService.js';
export {
TransakApiError,
TransakService,
TransakEnvironment,
TransakOrderIdTransformer,
-} from './TransakService';
+} from './TransakService.js';
export {
getTransakApiMessage,
isTransakPhoneRegisteredError,
-} from './transakApiErrorUtils';
+} from './transakApiErrorUtils.js';
export type {
TransakServiceMethodActions,
TransakServiceSendUserOtpAction,
@@ -209,4 +209,4 @@ export type {
TransakServiceGetOrderAction,
TransakServiceRequestOttAction,
TransakServiceGeneratePaymentWidgetUrlAction,
-} from './TransakService-method-action-types';
+} from './TransakService-method-action-types.js';
diff --git a/packages/ramps-controller/src/providerAvailability.test.ts b/packages/ramps-controller/src/providerAvailability.test.ts
index 70612ecd11a..bcbd8434edb 100644
--- a/packages/ramps-controller/src/providerAvailability.test.ts
+++ b/packages/ramps-controller/src/providerAvailability.test.ts
@@ -3,8 +3,8 @@ import {
isFiatDepositAvailable,
providerServesAsset,
regionHasProviderForAsset,
-} from './providerAvailability';
-import type { Provider } from './RampsService';
+} from './providerAvailability.js';
+import type { Provider } from './RampsService.js';
const ASSET_ID = 'eip155:1/erc20:0xtoken';
diff --git a/packages/ramps-controller/src/providerAvailability.ts b/packages/ramps-controller/src/providerAvailability.ts
index d1e6345279c..59d6e2b4492 100644
--- a/packages/ramps-controller/src/providerAvailability.ts
+++ b/packages/ramps-controller/src/providerAvailability.ts
@@ -1,4 +1,4 @@
-import type { Provider } from './RampsService';
+import type { Provider } from './RampsService.js';
/**
* Whether a provider serves the given deposit asset.
diff --git a/packages/ramps-controller/src/quoteClassification.test.ts b/packages/ramps-controller/src/quoteClassification.test.ts
index b5908212522..de0d363dcc5 100644
--- a/packages/ramps-controller/src/quoteClassification.test.ts
+++ b/packages/ramps-controller/src/quoteClassification.test.ts
@@ -2,8 +2,8 @@ import {
isCustomActionQuote,
isExternalBrowserQuote,
isInAppOnlyQuote,
-} from './quoteClassification';
-import type { Quote } from './RampsService';
+} from './quoteClassification.js';
+import type { Quote } from './RampsService.js';
const buildQuote = (
overrides: {
diff --git a/packages/ramps-controller/src/quoteClassification.ts b/packages/ramps-controller/src/quoteClassification.ts
index dd0fbcf004b..5b1fe2c0565 100644
--- a/packages/ramps-controller/src/quoteClassification.ts
+++ b/packages/ramps-controller/src/quoteClassification.ts
@@ -1,4 +1,4 @@
-import type { Quote } from './RampsService';
+import type { Quote } from './RampsService.js';
/**
* Whether a quote's checkout runs in an external / system browser rather than
diff --git a/packages/ramps-controller/src/selectors.test.ts b/packages/ramps-controller/src/selectors.test.ts
index 86a9883d7e6..5ce72e189c0 100644
--- a/packages/ramps-controller/src/selectors.test.ts
+++ b/packages/ramps-controller/src/selectors.test.ts
@@ -1,11 +1,11 @@
-import type { RampsControllerState } from './RampsController';
-import { RAMPS_ERROR_CODES } from './rampsErrorCodes';
+import type { RampsControllerState } from './RampsController.js';
+import { RAMPS_ERROR_CODES } from './rampsErrorCodes.js';
import {
createLoadingState,
createSuccessState,
createErrorState,
-} from './RequestCache';
-import { createRequestSelector } from './selectors';
+} from './RequestCache.js';
+import { createRequestSelector } from './selectors.js';
type TestRootState = {
ramps: RampsControllerState;
diff --git a/packages/ramps-controller/src/selectors.ts b/packages/ramps-controller/src/selectors.ts
index fd8cc6a9fd6..1152ba5730d 100644
--- a/packages/ramps-controller/src/selectors.ts
+++ b/packages/ramps-controller/src/selectors.ts
@@ -1,7 +1,7 @@
-import type { RampsControllerState } from './RampsController';
-import type { RampsErrorCode } from './rampsErrorCodes';
-import type { RequestState } from './RequestCache';
-import { RequestStatus, createCacheKey } from './RequestCache';
+import type { RampsControllerState } from './RampsController.js';
+import type { RampsErrorCode } from './rampsErrorCodes.js';
+import type { RequestState } from './RequestCache.js';
+import { RequestStatus, createCacheKey } from './RequestCache.js';
/**
* Result shape returned by request selectors.
diff --git a/packages/ramps-controller/src/transakApiErrorUtils.test.ts b/packages/ramps-controller/src/transakApiErrorUtils.test.ts
index 418b88ea0a8..9c20ab6aa9e 100644
--- a/packages/ramps-controller/src/transakApiErrorUtils.test.ts
+++ b/packages/ramps-controller/src/transakApiErrorUtils.test.ts
@@ -1,9 +1,9 @@
import {
getTransakApiMessage,
isTransakPhoneRegisteredError,
-} from './transakApiErrorUtils';
-import { TRANSAK_ERROR_CODES } from './transakErrorCodes';
-import { TransakApiError } from './TransakService';
+} from './transakApiErrorUtils.js';
+import { TRANSAK_ERROR_CODES } from './transakErrorCodes.js';
+import { TransakApiError } from './TransakService.js';
describe('transakApiErrorUtils', () => {
const phoneRegisteredError = new TransakApiError(
diff --git a/packages/ramps-controller/src/transakApiErrorUtils.ts b/packages/ramps-controller/src/transakApiErrorUtils.ts
index dad971fc1e2..eeb032281b9 100644
--- a/packages/ramps-controller/src/transakApiErrorUtils.ts
+++ b/packages/ramps-controller/src/transakApiErrorUtils.ts
@@ -1,5 +1,5 @@
-import { TRANSAK_ERROR_CODES } from './transakErrorCodes';
-import { TransakApiError } from './TransakService';
+import { TRANSAK_ERROR_CODES } from './transakErrorCodes.js';
+import { TransakApiError } from './TransakService.js';
export function getTransakApiMessage(error: unknown): string | undefined {
return error instanceof TransakApiError ? error.apiMessage : undefined;
diff --git a/packages/rate-limit-controller/jest.config.js b/packages/rate-limit-controller/jest.config.js
index 9c2baf15aed..bbb74586034 100644
--- a/packages/rate-limit-controller/jest.config.js
+++ b/packages/rate-limit-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/rate-limit-controller/package.json b/packages/rate-limit-controller/package.json
index 2651ce4a417..4c198a7c066 100644
--- a/packages/rate-limit-controller/package.json
+++ b/packages/rate-limit-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/rate-limit-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/rate-limit-controller",
@@ -59,8 +52,8 @@
"@metamask/utils": "^11.11.0"
},
"devDependencies": {
+ "@jest/globals": "^30.4.1",
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/rate-limit-controller/src/RateLimitController.test.ts b/packages/rate-limit-controller/src/RateLimitController.test.ts
index 128259690e0..6019659e34c 100644
--- a/packages/rate-limit-controller/src/RateLimitController.test.ts
+++ b/packages/rate-limit-controller/src/RateLimitController.test.ts
@@ -1,3 +1,4 @@
+import { jest } from '@jest/globals';
import { deriveStateFromMetadata } from '@metamask/base-controller';
import { Messenger, MOCK_ANY_NAMESPACE } from '@metamask/messenger';
import type {
@@ -6,8 +7,8 @@ import type {
MockAnyNamespace,
} from '@metamask/messenger';
-import type { RateLimitMessenger } from './RateLimitController';
-import { RateLimitController } from './RateLimitController';
+import type { RateLimitMessenger } from './RateLimitController.js';
+import { RateLimitController } from './RateLimitController.js';
const controllerName = 'RateLimitController';
diff --git a/packages/rate-limit-controller/src/index.ts b/packages/rate-limit-controller/src/index.ts
index 97cbe8505e0..afaf7871aad 100644
--- a/packages/rate-limit-controller/src/index.ts
+++ b/packages/rate-limit-controller/src/index.ts
@@ -9,5 +9,5 @@ export type {
RateLimitControllerStateChangeEvent,
RateLimitMessenger,
RateLimitState,
-} from './RateLimitController';
-export { RateLimitController } from './RateLimitController';
+} from './RateLimitController.js';
+export { RateLimitController } from './RateLimitController.js';
diff --git a/packages/react-data-query/jest.config.js b/packages/react-data-query/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/react-data-query/jest.config.js
+++ b/packages/react-data-query/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/react-data-query/package.json b/packages/react-data-query/package.json
index 78ca08d9edb..202e202a324 100644
--- a/packages/react-data-query/package.json
+++ b/packages/react-data-query/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/react-data-query",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/react-data-query",
@@ -61,7 +54,6 @@
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
"@metamask/messenger": "^2.0.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/react-data-query/src/createUIQueryClient.test.ts b/packages/react-data-query/src/createUIQueryClient.test.ts
index ddfe6ab9ed6..f3d9bf24a63 100644
--- a/packages/react-data-query/src/createUIQueryClient.test.ts
+++ b/packages/react-data-query/src/createUIQueryClient.test.ts
@@ -14,13 +14,13 @@ import {
ExampleDataServiceEvents,
GetActivityResponse,
PageParam,
-} from '../../base-data-service/tests/ExampleDataService';
+} from '../../base-data-service/tests/ExampleDataService.js';
import {
mockAssets,
mockTransactionsPage1,
mockTransactionsPage2,
-} from '../../base-data-service/tests/mocks';
-import { createUIQueryClient } from './createUIQueryClient';
+} from '../../base-data-service/tests/mocks.js';
+import { createUIQueryClient } from './createUIQueryClient.js';
const DATA_SERVICES = ['ExampleDataService'];
diff --git a/packages/react-data-query/src/hooks.test.ts b/packages/react-data-query/src/hooks.test.ts
index 779bda9838d..0d1733bac4d 100644
--- a/packages/react-data-query/src/hooks.test.ts
+++ b/packages/react-data-query/src/hooks.test.ts
@@ -3,7 +3,7 @@ import {
useInfiniteQuery as useInfiniteQueryTanStack,
} from '@tanstack/react-query';
-import { useInfiniteQuery, useQuery } from './hooks';
+import { useInfiniteQuery, useQuery } from './hooks.js';
jest.mock('@tanstack/react-query', () => ({
useQuery: jest.fn(),
diff --git a/packages/react-data-query/src/index.ts b/packages/react-data-query/src/index.ts
index f121a7eed64..00a1a60ab4e 100644
--- a/packages/react-data-query/src/index.ts
+++ b/packages/react-data-query/src/index.ts
@@ -1,2 +1,2 @@
-export { createUIQueryClient } from './createUIQueryClient';
-export { useQuery, useInfiniteQuery } from './hooks';
+export { createUIQueryClient } from './createUIQueryClient.js';
+export { useQuery, useInfiniteQuery } from './hooks.js';
diff --git a/packages/remote-feature-flag-controller/jest.config.js b/packages/remote-feature-flag-controller/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/remote-feature-flag-controller/jest.config.js
+++ b/packages/remote-feature-flag-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/remote-feature-flag-controller/package.json b/packages/remote-feature-flag-controller/package.json
index e24e82558a2..303d8b14130 100644
--- a/packages/remote-feature-flag-controller/package.json
+++ b/packages/remote-feature-flag-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/remote-feature-flag-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/remote-feature-flag-controller",
@@ -62,9 +55,9 @@
"uuid": "^8.3.2"
},
"devDependencies": {
+ "@jest/globals": "^30.4.1",
"@lavamoat/allow-scripts": "^3.0.4",
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/remote-feature-flag-controller/src/client-config-api-service/abstract-client-config-api-service.ts b/packages/remote-feature-flag-controller/src/client-config-api-service/abstract-client-config-api-service.ts
index 7a07ed2db9b..e5f685b846e 100644
--- a/packages/remote-feature-flag-controller/src/client-config-api-service/abstract-client-config-api-service.ts
+++ b/packages/remote-feature-flag-controller/src/client-config-api-service/abstract-client-config-api-service.ts
@@ -1,6 +1,6 @@
import type { ServicePolicy } from '@metamask/controller-utils';
-import type { ServiceResponse } from '../remote-feature-flag-controller-types';
+import type { ServiceResponse } from '../remote-feature-flag-controller-types.js';
/**
* A service object responsible for fetching feature flags.
diff --git a/packages/remote-feature-flag-controller/src/client-config-api-service/client-config-api-service.test.ts b/packages/remote-feature-flag-controller/src/client-config-api-service/client-config-api-service.test.ts
index a3a4830e934..f3a25b34adc 100644
--- a/packages/remote-feature-flag-controller/src/client-config-api-service/client-config-api-service.test.ts
+++ b/packages/remote-feature-flag-controller/src/client-config-api-service/client-config-api-service.test.ts
@@ -1,14 +1,16 @@
-import { BASE_URL } from '../constants';
+import { jest } from '@jest/globals';
+
+import { BASE_URL } from '../constants.js';
import type {
ApiDataResponse,
FeatureFlags,
-} from '../remote-feature-flag-controller-types';
+} from '../remote-feature-flag-controller-types.js';
import {
ClientType,
DistributionType,
EnvironmentType,
-} from '../remote-feature-flag-controller-types';
-import { ClientConfigApiService } from './client-config-api-service';
+} from '../remote-feature-flag-controller-types.js';
+import { ClientConfigApiService } from './client-config-api-service.js';
import Mock = jest.Mock;
diff --git a/packages/remote-feature-flag-controller/src/client-config-api-service/client-config-api-service.ts b/packages/remote-feature-flag-controller/src/client-config-api-service/client-config-api-service.ts
index 787dedd2608..dcc33df79b5 100644
--- a/packages/remote-feature-flag-controller/src/client-config-api-service/client-config-api-service.ts
+++ b/packages/remote-feature-flag-controller/src/client-config-api-service/client-config-api-service.ts
@@ -7,7 +7,7 @@ import {
import type { ServicePolicy } from '@metamask/controller-utils';
import type { IDisposable } from 'cockatiel';
-import { BASE_URL } from '../constants';
+import { BASE_URL } from '../constants.js';
import type {
FeatureFlags,
ClientType,
@@ -15,8 +15,8 @@ import type {
EnvironmentType,
ServiceResponse,
ApiDataResponse,
-} from '../remote-feature-flag-controller-types';
-import type { AbstractClientConfigApiService } from './abstract-client-config-api-service';
+} from '../remote-feature-flag-controller-types.js';
+import type { AbstractClientConfigApiService } from './abstract-client-config-api-service.js';
/**
* This service is responsible for fetching feature flags from the ClientConfig API.
diff --git a/packages/remote-feature-flag-controller/src/index.ts b/packages/remote-feature-flag-controller/src/index.ts
index 00c1c1c2d12..54efe45eed2 100644
--- a/packages/remote-feature-flag-controller/src/index.ts
+++ b/packages/remote-feature-flag-controller/src/index.ts
@@ -1,4 +1,4 @@
-export { RemoteFeatureFlagController } from './remote-feature-flag-controller';
+export { RemoteFeatureFlagController } from './remote-feature-flag-controller.js';
export type {
RemoteFeatureFlagControllerState,
RemoteFeatureFlagControllerMessenger,
@@ -6,7 +6,7 @@ export type {
RemoteFeatureFlagControllerGetStateAction,
RemoteFeatureFlagControllerEvents,
RemoteFeatureFlagControllerStateChangeEvent,
-} from './remote-feature-flag-controller';
+} from './remote-feature-flag-controller.js';
export type {
RemoteFeatureFlagControllerClearAllFlagOverridesAction,
RemoteFeatureFlagControllerDisableAction,
@@ -15,14 +15,14 @@ export type {
RemoteFeatureFlagControllerRemoveFlagOverrideAction,
RemoteFeatureFlagControllerSetFlagOverrideAction,
RemoteFeatureFlagControllerUpdateRemoteFeatureFlagsAction,
-} from './remote-feature-flag-controller-method-action-types';
+} from './remote-feature-flag-controller-method-action-types.js';
export {
ClientType,
DistributionType,
EnvironmentType,
ThresholdVersion,
-} from './remote-feature-flag-controller-types';
+} from './remote-feature-flag-controller-types.js';
-export type { FeatureFlags } from './remote-feature-flag-controller-types';
-export { ClientConfigApiService } from './client-config-api-service/client-config-api-service';
-export { generateDeterministicRandomNumber } from './utils/user-segmentation-utils';
+export type { FeatureFlags } from './remote-feature-flag-controller-types.js';
+export { ClientConfigApiService } from './client-config-api-service/client-config-api-service.js';
+export { generateDeterministicRandomNumber } from './utils/user-segmentation-utils.js';
diff --git a/packages/remote-feature-flag-controller/src/remote-feature-flag-controller-method-action-types.ts b/packages/remote-feature-flag-controller/src/remote-feature-flag-controller-method-action-types.ts
index eb30efbf45d..ac47f7e41c1 100644
--- a/packages/remote-feature-flag-controller/src/remote-feature-flag-controller-method-action-types.ts
+++ b/packages/remote-feature-flag-controller/src/remote-feature-flag-controller-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { RemoteFeatureFlagController } from './remote-feature-flag-controller';
+import type { RemoteFeatureFlagController } from './remote-feature-flag-controller.js';
/**
* Retrieves the remote feature flags, fetching from the API if necessary.
diff --git a/packages/remote-feature-flag-controller/src/remote-feature-flag-controller.test.ts b/packages/remote-feature-flag-controller/src/remote-feature-flag-controller.test.ts
index 50f4f689028..7f78dd5b4e9 100644
--- a/packages/remote-feature-flag-controller/src/remote-feature-flag-controller.test.ts
+++ b/packages/remote-feature-flag-controller/src/remote-feature-flag-controller.test.ts
@@ -1,3 +1,4 @@
+import { jest } from '@jest/globals';
import { deriveStateFromMetadata } from '@metamask/base-controller';
import { Messenger, MOCK_ANY_NAMESPACE } from '@metamask/messenger';
import type {
@@ -6,20 +7,20 @@ import type {
MockAnyNamespace,
} from '@metamask/messenger';
-import { flushPromises } from '../../../tests/helpers';
-import type { AbstractClientConfigApiService } from './client-config-api-service/abstract-client-config-api-service';
+import { flushPromises } from '../../../tests/helpers.js';
+import type { AbstractClientConfigApiService } from './client-config-api-service/abstract-client-config-api-service.js';
+import { ThresholdVersion } from './remote-feature-flag-controller-types.js';
+import type { FeatureFlags } from './remote-feature-flag-controller-types.js';
import {
RemoteFeatureFlagController,
controllerName,
DEFAULT_CACHE_DURATION,
getDefaultRemoteFeatureFlagControllerState,
-} from './remote-feature-flag-controller';
+} from './remote-feature-flag-controller.js';
import type {
RemoteFeatureFlagControllerMessenger,
RemoteFeatureFlagControllerState,
-} from './remote-feature-flag-controller';
-import { ThresholdVersion } from './remote-feature-flag-controller-types';
-import type { FeatureFlags } from './remote-feature-flag-controller-types';
+} from './remote-feature-flag-controller.js';
const MOCK_FLAGS: FeatureFlags = {
feature1: true,
diff --git a/packages/remote-feature-flag-controller/src/remote-feature-flag-controller.ts b/packages/remote-feature-flag-controller/src/remote-feature-flag-controller.ts
index f04531a32bd..6bd6df6d66b 100644
--- a/packages/remote-feature-flag-controller/src/remote-feature-flag-controller.ts
+++ b/packages/remote-feature-flag-controller/src/remote-feature-flag-controller.ts
@@ -7,18 +7,18 @@ import type { Messenger } from '@metamask/messenger';
import { isValidSemVerVersion } from '@metamask/utils';
import type { Json, SemVerVersion } from '@metamask/utils';
-import type { AbstractClientConfigApiService } from './client-config-api-service/abstract-client-config-api-service';
-import type { RemoteFeatureFlagControllerMethodActions } from './remote-feature-flag-controller-method-action-types';
+import type { AbstractClientConfigApiService } from './client-config-api-service/abstract-client-config-api-service.js';
+import type { RemoteFeatureFlagControllerMethodActions } from './remote-feature-flag-controller-method-action-types.js';
import type {
FeatureFlags,
ServiceResponse,
FeatureFlagScopeValue,
-} from './remote-feature-flag-controller-types';
+} from './remote-feature-flag-controller-types.js';
import {
calculateThresholdForFlag,
isFeatureFlagWithScopeValue,
-} from './utils/user-segmentation-utils';
-import { isVersionFeatureFlag, getVersionData } from './utils/version';
+} from './utils/user-segmentation-utils.js';
+import { isVersionFeatureFlag, getVersionData } from './utils/version.js';
// === GENERAL ===
diff --git a/packages/remote-feature-flag-controller/src/utils/user-segmentation-utils.test.ts b/packages/remote-feature-flag-controller/src/utils/user-segmentation-utils.test.ts
index 44e0b10b321..aa11941462f 100644
--- a/packages/remote-feature-flag-controller/src/utils/user-segmentation-utils.test.ts
+++ b/packages/remote-feature-flag-controller/src/utils/user-segmentation-utils.test.ts
@@ -4,7 +4,7 @@ import {
calculateThresholdForFlag,
generateDeterministicRandomNumber,
isFeatureFlagWithScopeValue,
-} from './user-segmentation-utils';
+} from './user-segmentation-utils.js';
const MOCK_METRICS_IDS = {
MOBILE_VALID: '123e4567-e89b-4456-a456-426614174000',
diff --git a/packages/remote-feature-flag-controller/src/utils/user-segmentation-utils.ts b/packages/remote-feature-flag-controller/src/utils/user-segmentation-utils.ts
index f2f48773105..e41a721e4b0 100644
--- a/packages/remote-feature-flag-controller/src/utils/user-segmentation-utils.ts
+++ b/packages/remote-feature-flag-controller/src/utils/user-segmentation-utils.ts
@@ -2,7 +2,7 @@ import type { Json } from '@metamask/utils';
import { sha256, bytesToHex } from '@metamask/utils';
import { validate as uuidValidate, version as uuidVersion } from 'uuid';
-import type { FeatureFlagScopeValue } from '../remote-feature-flag-controller-types';
+import type { FeatureFlagScopeValue } from '../remote-feature-flag-controller-types.js';
/**
* Converts a UUID string to a BigInt by removing dashes and converting to hexadecimal.
diff --git a/packages/remote-feature-flag-controller/src/utils/version.test.ts b/packages/remote-feature-flag-controller/src/utils/version.test.ts
index e7133d34e08..682b0aa5fcd 100644
--- a/packages/remote-feature-flag-controller/src/utils/version.test.ts
+++ b/packages/remote-feature-flag-controller/src/utils/version.test.ts
@@ -1,6 +1,6 @@
import type { SemVerVersion } from '@metamask/utils';
-import { isVersionFeatureFlag, getVersionData } from './version';
+import { isVersionFeatureFlag, getVersionData } from './version.js';
describe('isVersionFeatureFlag', () => {
it('returns true for valid multi-version feature flag', () => {
diff --git a/packages/remote-feature-flag-controller/src/utils/version.ts b/packages/remote-feature-flag-controller/src/utils/version.ts
index 94a5c0dad74..11d565fb343 100644
--- a/packages/remote-feature-flag-controller/src/utils/version.ts
+++ b/packages/remote-feature-flag-controller/src/utils/version.ts
@@ -1,7 +1,7 @@
import { gtVersion, isValidSemVerVersion } from '@metamask/utils';
import type { Json, SemVerVersion } from '@metamask/utils';
-import type { MultiVersionFeatureFlagValue } from '../remote-feature-flag-controller-types';
+import type { MultiVersionFeatureFlagValue } from '../remote-feature-flag-controller-types.js';
/**
* Constants for MultiVersionFeatureFlagValue property names
diff --git a/packages/sample-controllers/jest.config.js b/packages/sample-controllers/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/sample-controllers/jest.config.js
+++ b/packages/sample-controllers/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/sample-controllers/package.json b/packages/sample-controllers/package.json
index c5782001fc1..314a0cce97e 100644
--- a/packages/sample-controllers/package.json
+++ b/packages/sample-controllers/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/sample-controllers",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/sample-controllers",
@@ -66,7 +59,6 @@
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
"@metamask/controller-utils": "^12.3.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/sample-controllers/src/index.ts b/packages/sample-controllers/src/index.ts
index 81777561bcf..c0b57222b8c 100644
--- a/packages/sample-controllers/src/index.ts
+++ b/packages/sample-controllers/src/index.ts
@@ -5,9 +5,9 @@ export type {
SampleGasPricesServiceGranularCacheUpdatedEvent,
SampleGasPricesServiceEvents,
SampleGasPricesServiceMessenger,
-} from './sample-gas-prices-service/sample-gas-prices-service';
-export type { SampleGasPricesServiceFetchGasPricesAction } from './sample-gas-prices-service/sample-gas-prices-service-method-action-types';
-export { SampleGasPricesService } from './sample-gas-prices-service/sample-gas-prices-service';
+} from './sample-gas-prices-service/sample-gas-prices-service.js';
+export type { SampleGasPricesServiceFetchGasPricesAction } from './sample-gas-prices-service/sample-gas-prices-service-method-action-types.js';
+export { SampleGasPricesService } from './sample-gas-prices-service/sample-gas-prices-service.js';
export type {
SampleGasPricesControllerActions,
SampleGasPricesControllerEvents,
@@ -15,12 +15,12 @@ export type {
SampleGasPricesControllerMessenger,
SampleGasPricesControllerState,
SampleGasPricesControllerStateChangeEvent,
-} from './sample-gas-prices-controller';
+} from './sample-gas-prices-controller.js';
export {
SampleGasPricesController,
getDefaultSampleGasPricesControllerState,
-} from './sample-gas-prices-controller';
-export type { SampleGasPricesControllerUpdateGasPricesAction } from './sample-gas-prices-controller-method-action-types';
+} from './sample-gas-prices-controller.js';
+export type { SampleGasPricesControllerUpdateGasPricesAction } from './sample-gas-prices-controller-method-action-types.js';
export type {
SamplePetnamesControllerActions,
SamplePetnamesControllerEvents,
@@ -28,9 +28,9 @@ export type {
SamplePetnamesControllerMessenger,
SamplePetnamesControllerState,
SamplePetnamesControllerStateChangeEvent,
-} from './sample-petnames-controller';
+} from './sample-petnames-controller.js';
export {
SamplePetnamesController,
getDefaultPetnamesControllerState,
-} from './sample-petnames-controller';
-export type { SamplePetnamesControllerAssignPetnameAction } from './sample-petnames-controller-method-action-types';
+} from './sample-petnames-controller.js';
+export type { SamplePetnamesControllerAssignPetnameAction } from './sample-petnames-controller-method-action-types.js';
diff --git a/packages/sample-controllers/src/sample-gas-prices-controller-method-action-types.ts b/packages/sample-controllers/src/sample-gas-prices-controller-method-action-types.ts
index fed4a95a7b7..bf47544440b 100644
--- a/packages/sample-controllers/src/sample-gas-prices-controller-method-action-types.ts
+++ b/packages/sample-controllers/src/sample-gas-prices-controller-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { SampleGasPricesController } from './sample-gas-prices-controller';
+import type { SampleGasPricesController } from './sample-gas-prices-controller.js';
/**
* Fetches the latest gas prices for the given chain and persists them to
diff --git a/packages/sample-controllers/src/sample-gas-prices-controller.test.ts b/packages/sample-controllers/src/sample-gas-prices-controller.test.ts
index 0d4eeff1a37..d0d345a034e 100644
--- a/packages/sample-controllers/src/sample-gas-prices-controller.test.ts
+++ b/packages/sample-controllers/src/sample-gas-prices-controller.test.ts
@@ -8,8 +8,8 @@ import type {
import { SampleGasPricesController } from '@metamask/sample-controllers';
import type { SampleGasPricesControllerMessenger } from '@metamask/sample-controllers';
-import { flushPromises } from '../../../tests/helpers';
-import { buildMockGetNetworkClientById } from '../../network-controller/tests/helpers';
+import { flushPromises } from '../../../tests/helpers.js';
+import { buildMockGetNetworkClientById } from '../../network-controller/tests/helpers.js';
describe('SampleGasPricesController', () => {
describe('constructor', () => {
diff --git a/packages/sample-controllers/src/sample-gas-prices-controller.ts b/packages/sample-controllers/src/sample-gas-prices-controller.ts
index c354c90da3f..267f77cfeaa 100644
--- a/packages/sample-controllers/src/sample-gas-prices-controller.ts
+++ b/packages/sample-controllers/src/sample-gas-prices-controller.ts
@@ -12,8 +12,8 @@ import type {
} from '@metamask/network-controller';
import type { Hex } from '@metamask/utils';
-import type { SampleGasPricesControllerMethodActions } from './sample-gas-prices-controller-method-action-types';
-import type { SampleGasPricesServiceFetchGasPricesAction } from './sample-gas-prices-service/sample-gas-prices-service-method-action-types';
+import type { SampleGasPricesControllerMethodActions } from './sample-gas-prices-controller-method-action-types.js';
+import type { SampleGasPricesServiceFetchGasPricesAction } from './sample-gas-prices-service/sample-gas-prices-service-method-action-types.js';
// === GENERAL ===
diff --git a/packages/sample-controllers/src/sample-gas-prices-service/sample-gas-prices-service-method-action-types.ts b/packages/sample-controllers/src/sample-gas-prices-service/sample-gas-prices-service-method-action-types.ts
index e96aaa704a1..f0959df0af8 100644
--- a/packages/sample-controllers/src/sample-gas-prices-service/sample-gas-prices-service-method-action-types.ts
+++ b/packages/sample-controllers/src/sample-gas-prices-service/sample-gas-prices-service-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { SampleGasPricesService } from './sample-gas-prices-service';
+import type { SampleGasPricesService } from './sample-gas-prices-service.js';
/**
* Makes a request to the API in order to retrieve gas prices for a particular
diff --git a/packages/sample-controllers/src/sample-gas-prices-service/sample-gas-prices-service.test.ts b/packages/sample-controllers/src/sample-gas-prices-service/sample-gas-prices-service.test.ts
index d360f5b36d4..54e394e8b77 100644
--- a/packages/sample-controllers/src/sample-gas-prices-service/sample-gas-prices-service.test.ts
+++ b/packages/sample-controllers/src/sample-gas-prices-service/sample-gas-prices-service.test.ts
@@ -7,8 +7,8 @@ import type {
} from '@metamask/messenger';
import nock from 'nock';
-import type { SampleGasPricesServiceMessenger } from './sample-gas-prices-service';
-import { SampleGasPricesService } from './sample-gas-prices-service';
+import type { SampleGasPricesServiceMessenger } from './sample-gas-prices-service.js';
+import { SampleGasPricesService } from './sample-gas-prices-service.js';
describe('SampleGasPricesService', () => {
describe('SampleGasPricesService:fetchGasPrices', () => {
diff --git a/packages/sample-controllers/src/sample-gas-prices-service/sample-gas-prices-service.ts b/packages/sample-controllers/src/sample-gas-prices-service/sample-gas-prices-service.ts
index 591f26e3625..9372f46d618 100644
--- a/packages/sample-controllers/src/sample-gas-prices-service/sample-gas-prices-service.ts
+++ b/packages/sample-controllers/src/sample-gas-prices-service/sample-gas-prices-service.ts
@@ -12,7 +12,7 @@ import { is, number, type } from '@metamask/superstruct';
import type { Hex } from '@metamask/utils';
import type { QueryClientConfig } from '@tanstack/query-core';
-import type { SampleGasPricesServiceMethodActions } from './sample-gas-prices-service-method-action-types';
+import type { SampleGasPricesServiceMethodActions } from './sample-gas-prices-service-method-action-types.js';
// === GENERAL ===
diff --git a/packages/sample-controllers/src/sample-petnames-controller-method-action-types.ts b/packages/sample-controllers/src/sample-petnames-controller-method-action-types.ts
index 33da8c281d5..fbfccf4eb9b 100644
--- a/packages/sample-controllers/src/sample-petnames-controller-method-action-types.ts
+++ b/packages/sample-controllers/src/sample-petnames-controller-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { SamplePetnamesController } from './sample-petnames-controller';
+import type { SamplePetnamesController } from './sample-petnames-controller.js';
/**
* Registers the given name with the given address (relative to the given
diff --git a/packages/sample-controllers/src/sample-petnames-controller.test.ts b/packages/sample-controllers/src/sample-petnames-controller.test.ts
index ae641c1c35b..68a4217779c 100644
--- a/packages/sample-controllers/src/sample-petnames-controller.test.ts
+++ b/packages/sample-controllers/src/sample-petnames-controller.test.ts
@@ -6,9 +6,9 @@ import type {
MessengerEvents,
} from '@metamask/messenger';
-import { PROTOTYPE_POLLUTION_BLOCKLIST } from '../../controller-utils/src/util';
-import type { SamplePetnamesControllerMessenger } from './sample-petnames-controller';
-import { SamplePetnamesController } from './sample-petnames-controller';
+import { PROTOTYPE_POLLUTION_BLOCKLIST } from '../../controller-utils/src/util.js';
+import type { SamplePetnamesControllerMessenger } from './sample-petnames-controller.js';
+import { SamplePetnamesController } from './sample-petnames-controller.js';
describe('SamplePetnamesController', () => {
describe('constructor', () => {
diff --git a/packages/sample-controllers/src/sample-petnames-controller.ts b/packages/sample-controllers/src/sample-petnames-controller.ts
index a8b18844537..84e6dfb5cf3 100644
--- a/packages/sample-controllers/src/sample-petnames-controller.ts
+++ b/packages/sample-controllers/src/sample-petnames-controller.ts
@@ -8,7 +8,7 @@ import { isSafeDynamicKey } from '@metamask/controller-utils';
import type { Messenger } from '@metamask/messenger';
import type { Hex } from '@metamask/utils';
-import type { SamplePetnamesControllerMethodActions } from './sample-petnames-controller-method-action-types';
+import type { SamplePetnamesControllerMethodActions } from './sample-petnames-controller-method-action-types.js';
// === GENERAL ===
diff --git a/packages/seedless-onboarding-controller/jest.config.js b/packages/seedless-onboarding-controller/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/seedless-onboarding-controller/jest.config.js
+++ b/packages/seedless-onboarding-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/seedless-onboarding-controller/package.json b/packages/seedless-onboarding-controller/package.json
index d27208fd90e..d13c45eb5e8 100644
--- a/packages/seedless-onboarding-controller/package.json
+++ b/packages/seedless-onboarding-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/seedless-onboarding-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/seedless-onboarding-controller",
@@ -71,7 +64,6 @@
"@lavamoat/allow-scripts": "^3.0.4",
"@lavamoat/preinstall-always-fail": "^2.1.0",
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/elliptic": "^6",
"@types/jest": "^29.5.14",
"@types/json-stable-stringify-without-jsonify": "^1.0.2",
diff --git a/packages/seedless-onboarding-controller/src/SecretMetadata.ts b/packages/seedless-onboarding-controller/src/SecretMetadata.ts
index 43c4897d22c..9b474097e1a 100644
--- a/packages/seedless-onboarding-controller/src/SecretMetadata.ts
+++ b/packages/seedless-onboarding-controller/src/SecretMetadata.ts
@@ -10,9 +10,9 @@ import {
import {
SeedlessOnboardingControllerErrorMessage,
SecretType,
-} from './constants';
-import type { SecretDataType } from './types';
-import { getSecretTypeFromDataType } from './utils';
+} from './constants.js';
+import type { SecretDataType } from './types.js';
+import { getSecretTypeFromDataType } from './utils.js';
type ISecretMetadata = {
data: DataType;
diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController-method-action-types.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController-method-action-types.ts
index 5e560ee7256..1281dd0c075 100644
--- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController-method-action-types.ts
+++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { SeedlessOnboardingController } from './SeedlessOnboardingController';
+import type { SeedlessOnboardingController } from './SeedlessOnboardingController.js';
export type SeedlessOnboardingControllerFetchMetadataAccessCredsAction = {
type: `SeedlessOnboardingController:fetchMetadataAccessCreds`;
diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts
index ff081033178..5704af247cc 100644
--- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts
+++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.test.ts
@@ -49,39 +49,39 @@ import type { webcrypto } from 'node:crypto';
import type {
MockKeyringControllerMessenger,
RootMessenger,
-} from '../tests/__fixtures__/mockMessenger';
-import { mockSeedlessOnboardingMessenger } from '../tests/__fixtures__/mockMessenger';
+} from '../tests/__fixtures__/mockMessenger.js';
+import { mockSeedlessOnboardingMessenger } from '../tests/__fixtures__/mockMessenger.js';
import {
handleMockSecretDataGet,
handleMockSecretDataAdd,
handleMockCommitment,
handleMockAuthenticate,
-} from '../tests/__fixtures__/topfClient';
+} from '../tests/__fixtures__/topfClient.js';
import {
createMockSecretDataGetResponse,
MULTIPLE_MOCK_SECRET_METADATA,
-} from '../tests/mocks/toprf';
-import { MockToprfEncryptorDecryptor } from '../tests/mocks/toprfEncryptor';
-import { createMockJWTToken } from '../tests/mocks/utils';
-import MockVaultEncryptor from '../tests/mocks/vaultEncryptor';
+} from '../tests/mocks/toprf.js';
+import { MockToprfEncryptorDecryptor } from '../tests/mocks/toprfEncryptor.js';
+import { createMockJWTToken } from '../tests/mocks/utils.js';
+import MockVaultEncryptor from '../tests/mocks/vaultEncryptor.js';
import {
Web3AuthNetwork,
SeedlessOnboardingControllerErrorMessage,
SeedlessOnboardingMigrationVersion,
AuthConnection,
SecretType,
-} from './constants';
-import { PasswordSyncError, RecoveryError } from './errors';
-import { SecretMetadata } from './SecretMetadata';
+} from './constants.js';
+import { PasswordSyncError, RecoveryError } from './errors.js';
+import { SecretMetadata } from './SecretMetadata.js';
import {
SeedlessOnboardingController,
getInitialSeedlessOnboardingControllerStateWithDefaults,
-} from './SeedlessOnboardingController';
+} from './SeedlessOnboardingController.js';
import type {
SeedlessOnboardingControllerMessenger,
SeedlessOnboardingControllerOptions,
-} from './SeedlessOnboardingController';
-import type { SeedlessOnboardingControllerState } from './types';
+} from './SeedlessOnboardingController.js';
+import type { SeedlessOnboardingControllerState } from './types.js';
const authConnection = AuthConnection.Google;
const socialLoginEmail = 'user-test@gmail.com';
@@ -239,7 +239,7 @@ async function withController(
// In the withController function, before creating the controller:
const originalFetchMetadataAccessCreds =
- // eslint-disable-next-line jest/unbound-method -- testing mock
+ // eslint-disable-next-line jest/unbound-method
SeedlessOnboardingController.prototype.fetchMetadataAccessCreds;
jest
diff --git a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts
index c778a1c613a..c0c351c187b 100644
--- a/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts
+++ b/packages/seedless-onboarding-controller/src/SeedlessOnboardingController.ts
@@ -42,8 +42,8 @@ import {
assertIsSeedlessOnboardingUserAuthenticated,
assertIsValidPassword,
assertIsValidVaultData,
-} from './assertions';
-import type { AuthConnection } from './constants';
+} from './assertions.js';
+import type { AuthConnection } from './constants.js';
import {
controllerName,
PASSWORD_OUTDATED_CACHE_TTL_MS,
@@ -51,15 +51,15 @@ import {
SeedlessOnboardingControllerErrorMessage,
SeedlessOnboardingMigrationVersion,
Web3AuthNetwork,
-} from './constants';
+} from './constants.js';
import {
PasswordSyncError,
RecoveryError,
SeedlessOnboardingError,
-} from './errors';
-import { projectLogger, createModuleLogger } from './logger';
-import { SecretMetadata } from './SecretMetadata';
-import type { SeedlessOnboardingControllerMethodActions } from './SeedlessOnboardingController-method-action-types';
+} from './errors.js';
+import { projectLogger, createModuleLogger } from './logger.js';
+import { SecretMetadata } from './SecretMetadata.js';
+import type { SeedlessOnboardingControllerMethodActions } from './SeedlessOnboardingController-method-action-types.js';
import type {
MutuallyExclusiveCallback,
SeedlessOnboardingControllerState,
@@ -71,14 +71,14 @@ import type {
VaultData,
DeserializedVaultData,
ToprfKeyDeriver,
-} from './types';
+} from './types.js';
import {
compareAndGetLatestToken,
decodeJWTToken,
decodeNodeAuthToken,
deserializeVaultData,
serializeVaultData,
-} from './utils';
+} from './utils.js';
const log = createModuleLogger(projectLogger, controllerName);
diff --git a/packages/seedless-onboarding-controller/src/assertions.test.ts b/packages/seedless-onboarding-controller/src/assertions.test.ts
index 270f53adc2f..bec8735444a 100644
--- a/packages/seedless-onboarding-controller/src/assertions.test.ts
+++ b/packages/seedless-onboarding-controller/src/assertions.test.ts
@@ -2,9 +2,9 @@ import {
assertIsPasswordOutdatedCacheValid,
assertIsValidPassword,
assertIsValidVaultData,
-} from './assertions';
-import { SeedlessOnboardingControllerErrorMessage } from './constants';
-import { VaultData } from './types';
+} from './assertions.js';
+import { SeedlessOnboardingControllerErrorMessage } from './constants.js';
+import { VaultData } from './types.js';
describe('assertIsValidPassword', () => {
it('should throw when password is not a string', () => {
diff --git a/packages/seedless-onboarding-controller/src/assertions.ts b/packages/seedless-onboarding-controller/src/assertions.ts
index c9929e1a2b4..cc7eddc4278 100644
--- a/packages/seedless-onboarding-controller/src/assertions.ts
+++ b/packages/seedless-onboarding-controller/src/assertions.ts
@@ -1,5 +1,5 @@
-import { SeedlessOnboardingControllerErrorMessage } from './constants';
-import type { AuthenticatedUserDetails, VaultData } from './types';
+import { SeedlessOnboardingControllerErrorMessage } from './constants.js';
+import type { AuthenticatedUserDetails, VaultData } from './types.js';
/**
* Assert that the provided password is a valid non-empty string.
diff --git a/packages/seedless-onboarding-controller/src/errors.test.ts b/packages/seedless-onboarding-controller/src/errors.test.ts
index e090e16a648..9dc4c40e24e 100644
--- a/packages/seedless-onboarding-controller/src/errors.test.ts
+++ b/packages/seedless-onboarding-controller/src/errors.test.ts
@@ -1,10 +1,10 @@
import { TOPRFErrorCode } from '@metamask/toprf-secure-backup';
-import { SeedlessOnboardingControllerErrorMessage } from './constants';
+import { SeedlessOnboardingControllerErrorMessage } from './constants.js';
import {
getErrorMessageFromTOPRFErrorCode,
SeedlessOnboardingError,
-} from './errors';
+} from './errors.js';
describe('getErrorMessageFromTOPRFErrorCode', () => {
it('returns TooManyLoginAttempts for RateLimitExceeded', () => {
diff --git a/packages/seedless-onboarding-controller/src/errors.ts b/packages/seedless-onboarding-controller/src/errors.ts
index 005a614cdb6..be950deaf8d 100644
--- a/packages/seedless-onboarding-controller/src/errors.ts
+++ b/packages/seedless-onboarding-controller/src/errors.ts
@@ -1,8 +1,8 @@
import { TOPRFError, TOPRFErrorCode } from '@metamask/toprf-secure-backup';
import type { RateLimitErrorData } from '@metamask/toprf-secure-backup';
-import { SeedlessOnboardingControllerErrorMessage } from './constants';
-import type { RecoveryErrorData } from './types';
+import { SeedlessOnboardingControllerErrorMessage } from './constants.js';
+import type { RecoveryErrorData } from './types.js';
/**
* Get the error message from the TOPRF error code.
diff --git a/packages/seedless-onboarding-controller/src/index.ts b/packages/seedless-onboarding-controller/src/index.ts
index 352ff7fe228..299e6b43cbb 100644
--- a/packages/seedless-onboarding-controller/src/index.ts
+++ b/packages/seedless-onboarding-controller/src/index.ts
@@ -1,7 +1,7 @@
export {
SeedlessOnboardingController,
getInitialSeedlessOnboardingControllerStateWithDefaults as getDefaultSeedlessOnboardingControllerState,
-} from './SeedlessOnboardingController';
+} from './SeedlessOnboardingController.js';
export type {
SeedlessOnboardingControllerOptions,
SeedlessOnboardingControllerMessenger,
@@ -9,7 +9,7 @@ export type {
SeedlessOnboardingControllerStateChangeEvent,
SeedlessOnboardingControllerActions,
SeedlessOnboardingControllerEvents,
-} from './SeedlessOnboardingController';
+} from './SeedlessOnboardingController.js';
export type {
SeedlessOnboardingControllerFetchMetadataAccessCredsAction,
SeedlessOnboardingControllerPreloadToprfNodeDetailsAction,
@@ -38,22 +38,22 @@ export type {
SeedlessOnboardingControllerCheckMetadataAccessTokenExpiredAction,
SeedlessOnboardingControllerCheckAccessTokenExpiredAction,
SeedlessOnboardingControllerRunMigrationsAction,
-} from './SeedlessOnboardingController-method-action-types';
+} from './SeedlessOnboardingController-method-action-types.js';
export type {
AuthenticatedUserDetails,
SocialBackupsMetadata,
SeedlessOnboardingControllerState,
ToprfKeyDeriver,
RecoveryErrorData,
-} from './types';
+} from './types.js';
export {
Web3AuthNetwork,
SeedlessOnboardingControllerErrorMessage,
SeedlessOnboardingMigrationVersion,
AuthConnection,
SecretType,
-} from './constants';
-export { SecretMetadata } from './SecretMetadata';
-export { RecoveryError, SeedlessOnboardingError } from './errors';
+} from './constants.js';
+export { SecretMetadata } from './SecretMetadata.js';
+export { RecoveryError, SeedlessOnboardingError } from './errors.js';
export { EncAccountDataType } from '@metamask/toprf-secure-backup';
diff --git a/packages/seedless-onboarding-controller/src/logger.ts b/packages/seedless-onboarding-controller/src/logger.ts
index ca017b5ba54..abd139116dc 100644
--- a/packages/seedless-onboarding-controller/src/logger.ts
+++ b/packages/seedless-onboarding-controller/src/logger.ts
@@ -1,6 +1,6 @@
import { createProjectLogger, createModuleLogger } from '@metamask/utils';
-import { controllerName } from './constants';
+import { controllerName } from './constants.js';
export const projectLogger = createProjectLogger(controllerName);
diff --git a/packages/seedless-onboarding-controller/src/types.ts b/packages/seedless-onboarding-controller/src/types.ts
index 39033b6feef..a09fb81b832 100644
--- a/packages/seedless-onboarding-controller/src/types.ts
+++ b/packages/seedless-onboarding-controller/src/types.ts
@@ -1,7 +1,7 @@
import type { KeyPair, NodeAuthTokens } from '@metamask/toprf-secure-backup';
import type { MutexInterface } from 'async-mutex';
-import type { AuthConnection, SecretType } from './constants';
+import type { AuthConnection, SecretType } from './constants.js';
/**
* The backup state of the secret data.
diff --git a/packages/seedless-onboarding-controller/src/utils.test.ts b/packages/seedless-onboarding-controller/src/utils.test.ts
index ecd047a0b82..9a0ff066351 100644
--- a/packages/seedless-onboarding-controller/src/utils.test.ts
+++ b/packages/seedless-onboarding-controller/src/utils.test.ts
@@ -2,14 +2,14 @@ import { EncAccountDataType } from '@metamask/toprf-secure-backup';
import { bytesToBase64 } from '@metamask/utils';
import { utf8ToBytes } from '@noble/ciphers/utils';
-import { createMockJWTToken } from '../tests/mocks/utils';
-import type { DecodedNodeAuthToken } from './types';
+import { createMockJWTToken } from '../tests/mocks/utils.js';
+import type { DecodedNodeAuthToken } from './types.js';
import {
decodeNodeAuthToken,
decodeJWTToken,
compareAndGetLatestToken,
getSecretTypeFromDataType,
-} from './utils';
+} from './utils.js';
describe('utils', () => {
describe('decodeNodeAuthToken', () => {
diff --git a/packages/seedless-onboarding-controller/src/utils.ts b/packages/seedless-onboarding-controller/src/utils.ts
index 149e689cd5c..d7bd9ac0176 100644
--- a/packages/seedless-onboarding-controller/src/utils.ts
+++ b/packages/seedless-onboarding-controller/src/utils.ts
@@ -8,13 +8,13 @@ import {
} from '@metamask/utils';
import { bytesToUtf8 } from '@noble/ciphers/utils';
-import { SecretType } from './constants';
+import { SecretType } from './constants.js';
import type {
DecodedBaseJWTToken,
DecodedNodeAuthToken,
DeserializedVaultData,
VaultData,
-} from './types';
+} from './types.js';
/**
* Decode the node auth token from base64 to json object.
diff --git a/packages/seedless-onboarding-controller/tests/__fixtures__/mockMessenger.ts b/packages/seedless-onboarding-controller/tests/__fixtures__/mockMessenger.ts
index 51a791e5d17..c0aa2e622b3 100644
--- a/packages/seedless-onboarding-controller/tests/__fixtures__/mockMessenger.ts
+++ b/packages/seedless-onboarding-controller/tests/__fixtures__/mockMessenger.ts
@@ -9,8 +9,8 @@ import type {
MessengerEvents,
} from '@metamask/messenger';
-import { controllerName } from '../../src/constants';
-import type { SeedlessOnboardingControllerMessenger } from '../../src/SeedlessOnboardingController';
+import { controllerName } from '../../src/constants.js';
+import type { SeedlessOnboardingControllerMessenger } from '../../src/SeedlessOnboardingController.js';
export type AllSeedlessOnboardingControllerActions =
MessengerActions;
diff --git a/packages/seedless-onboarding-controller/tests/__fixtures__/topfClient.ts b/packages/seedless-onboarding-controller/tests/__fixtures__/topfClient.ts
index 4062bc6dd2b..8e0b09c57ad 100644
--- a/packages/seedless-onboarding-controller/tests/__fixtures__/topfClient.ts
+++ b/packages/seedless-onboarding-controller/tests/__fixtures__/topfClient.ts
@@ -9,7 +9,7 @@ import {
MOCK_TOPRF_AUTHENTICATION_RESPONSE,
MOCK_TOPRF_COMMITMENT_RESPONSE,
TOPRF_BASE_URL,
-} from '../mocks/toprf';
+} from '../mocks/toprf.js';
type MockReply = {
status: nock.StatusCode;
diff --git a/packages/seedless-onboarding-controller/tests/mocks/toprf.ts b/packages/seedless-onboarding-controller/tests/mocks/toprf.ts
index 5766cb6867c..60822e83d06 100644
--- a/packages/seedless-onboarding-controller/tests/mocks/toprf.ts
+++ b/packages/seedless-onboarding-controller/tests/mocks/toprf.ts
@@ -1,7 +1,7 @@
import { EncAccountDataType } from '@metamask/toprf-secure-backup';
-import { SecretType } from '../../src/constants';
-import { MockToprfEncryptorDecryptor } from './toprfEncryptor';
+import { SecretType } from '../../src/constants.js';
+import { MockToprfEncryptorDecryptor } from './toprfEncryptor.js';
export const TOPRF_BASE_URL = /https:\/\/node-[1-5]\.dev-node\.web3auth\.io/u;
diff --git a/packages/seedless-onboarding-controller/tests/mocks/utils.ts b/packages/seedless-onboarding-controller/tests/mocks/utils.ts
index b49f719f42c..b779c8413de 100644
--- a/packages/seedless-onboarding-controller/tests/mocks/utils.ts
+++ b/packages/seedless-onboarding-controller/tests/mocks/utils.ts
@@ -1,4 +1,4 @@
-import type { DecodedBaseJWTToken } from '../../src/types';
+import type { DecodedBaseJWTToken } from '../../src/types.js';
/**
* Creates a mock JWT token for testing
diff --git a/packages/selected-network-controller/jest.config.js b/packages/selected-network-controller/jest.config.js
index 5806b6db61b..52a3957ee23 100644
--- a/packages/selected-network-controller/jest.config.js
+++ b/packages/selected-network-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/selected-network-controller/package.json b/packages/selected-network-controller/package.json
index 7b5782fc842..3718724288b 100644
--- a/packages/selected-network-controller/package.json
+++ b/packages/selected-network-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/selected-network-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/selected-network-controller",
@@ -65,7 +58,6 @@
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"immer": "^9.0.6",
diff --git a/packages/selected-network-controller/src/SelectedNetworkController-method-action-types.ts b/packages/selected-network-controller/src/SelectedNetworkController-method-action-types.ts
index 5798ce1b434..cc36282b9f2 100644
--- a/packages/selected-network-controller/src/SelectedNetworkController-method-action-types.ts
+++ b/packages/selected-network-controller/src/SelectedNetworkController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { SelectedNetworkController } from './SelectedNetworkController';
+import type { SelectedNetworkController } from './SelectedNetworkController.js';
export type SelectedNetworkControllerSetNetworkClientIdForDomainAction = {
type: `SelectedNetworkController:setNetworkClientIdForDomain`;
diff --git a/packages/selected-network-controller/src/SelectedNetworkController.ts b/packages/selected-network-controller/src/SelectedNetworkController.ts
index bc2e5093236..09d5db907c1 100644
--- a/packages/selected-network-controller/src/SelectedNetworkController.ts
+++ b/packages/selected-network-controller/src/SelectedNetworkController.ts
@@ -24,7 +24,7 @@ import {
} from '@metamask/swappable-obj-proxy';
import type { Hex } from '@metamask/utils';
-import type { SelectedNetworkControllerMethodActions } from './SelectedNetworkController-method-action-types';
+import type { SelectedNetworkControllerMethodActions } from './SelectedNetworkController-method-action-types.js';
const controllerName = 'SelectedNetworkController';
diff --git a/packages/selected-network-controller/src/SelectedNetworkMiddleware.ts b/packages/selected-network-controller/src/SelectedNetworkMiddleware.ts
index eb84a503e98..62bcdcc70b9 100644
--- a/packages/selected-network-controller/src/SelectedNetworkMiddleware.ts
+++ b/packages/selected-network-controller/src/SelectedNetworkMiddleware.ts
@@ -2,8 +2,8 @@ import type { JsonRpcMiddleware } from '@metamask/json-rpc-engine';
import type { NetworkClientId } from '@metamask/network-controller';
import type { Json, JsonRpcParams, JsonRpcRequest } from '@metamask/utils';
-import type { SelectedNetworkControllerMessenger } from './SelectedNetworkController';
-import { SelectedNetworkControllerActionTypes } from './SelectedNetworkController';
+import type { SelectedNetworkControllerMessenger } from './SelectedNetworkController.js';
+import { SelectedNetworkControllerActionTypes } from './SelectedNetworkController.js';
export type SelectedNetworkMiddlewareJsonRpcRequest = JsonRpcRequest & {
networkClientId?: NetworkClientId;
diff --git a/packages/selected-network-controller/src/index.ts b/packages/selected-network-controller/src/index.ts
index f07208bb983..946c94f531e 100644
--- a/packages/selected-network-controller/src/index.ts
+++ b/packages/selected-network-controller/src/index.ts
@@ -9,17 +9,17 @@ export type {
SelectedNetworkControllerOptions,
NetworkProxy,
Domain,
-} from './SelectedNetworkController';
+} from './SelectedNetworkController.js';
export {
SelectedNetworkControllerActionTypes,
SelectedNetworkControllerEventTypes,
SelectedNetworkController,
METAMASK_DOMAIN,
-} from './SelectedNetworkController';
+} from './SelectedNetworkController.js';
export type {
SelectedNetworkControllerSetNetworkClientIdForDomainAction,
SelectedNetworkControllerGetNetworkClientIdForDomainAction,
SelectedNetworkControllerGetProviderAndBlockTrackerAction,
-} from './SelectedNetworkController-method-action-types';
-export type { SelectedNetworkMiddlewareJsonRpcRequest } from './SelectedNetworkMiddleware';
-export { createSelectedNetworkMiddleware } from './SelectedNetworkMiddleware';
+} from './SelectedNetworkController-method-action-types.js';
+export type { SelectedNetworkMiddlewareJsonRpcRequest } from './SelectedNetworkMiddleware.js';
+export { createSelectedNetworkMiddleware } from './SelectedNetworkMiddleware.js';
diff --git a/packages/selected-network-controller/tests/SelectedNetworkController.test.ts b/packages/selected-network-controller/tests/SelectedNetworkController.test.ts
index f57aeebbb2f..35f55c4c2d4 100644
--- a/packages/selected-network-controller/tests/SelectedNetworkController.test.ts
+++ b/packages/selected-network-controller/tests/SelectedNetworkController.test.ts
@@ -25,11 +25,11 @@ import type {
Domain,
NetworkProxy,
SelectedNetworkControllerMessenger,
-} from '../src/SelectedNetworkController';
+} from '../src/SelectedNetworkController.js';
import {
METAMASK_DOMAIN,
SelectedNetworkController,
-} from '../src/SelectedNetworkController';
+} from '../src/SelectedNetworkController.js';
const controllerName = 'SelectedNetworkController';
diff --git a/packages/selected-network-controller/tests/SelectedNetworkMiddleware.test.ts b/packages/selected-network-controller/tests/SelectedNetworkMiddleware.test.ts
index c57deb36fce..d6a47f92017 100644
--- a/packages/selected-network-controller/tests/SelectedNetworkMiddleware.test.ts
+++ b/packages/selected-network-controller/tests/SelectedNetworkMiddleware.test.ts
@@ -7,10 +7,10 @@ import type {
} from '@metamask/messenger';
import type { JsonRpcResponse } from '@metamask/utils';
-import { SelectedNetworkControllerActionTypes } from '../src/SelectedNetworkController';
-import type { SelectedNetworkControllerMessenger } from '../src/SelectedNetworkController';
-import type { SelectedNetworkMiddlewareJsonRpcRequest } from '../src/SelectedNetworkMiddleware';
-import { createSelectedNetworkMiddleware } from '../src/SelectedNetworkMiddleware';
+import { SelectedNetworkControllerActionTypes } from '../src/SelectedNetworkController.js';
+import type { SelectedNetworkControllerMessenger } from '../src/SelectedNetworkController.js';
+import type { SelectedNetworkMiddlewareJsonRpcRequest } from '../src/SelectedNetworkMiddleware.js';
+import { createSelectedNetworkMiddleware } from '../src/SelectedNetworkMiddleware.js';
type AllSelectedNetworkControllerActions =
MessengerActions;
diff --git a/packages/sentinel-api-service/jest.config.js b/packages/sentinel-api-service/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/sentinel-api-service/jest.config.js
+++ b/packages/sentinel-api-service/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/sentinel-api-service/package.json b/packages/sentinel-api-service/package.json
index 973e2638674..32370a0ddd9 100644
--- a/packages/sentinel-api-service/package.json
+++ b/packages/sentinel-api-service/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/sentinel-api-service",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/sentinel-api-service",
@@ -64,7 +57,6 @@
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/sentinel-api-service/src/index.ts b/packages/sentinel-api-service/src/index.ts
index f3160e4f359..62b5fdaf971 100644
--- a/packages/sentinel-api-service/src/index.ts
+++ b/packages/sentinel-api-service/src/index.ts
@@ -1,5 +1,5 @@
-export { SentinelApiService } from './sentinel-api-service';
-export { SentinelEnvironment, serviceName } from './constants';
+export { SentinelApiService } from './sentinel-api-service.js';
+export { SentinelEnvironment, serviceName } from './constants.js';
export type {
SentinelApiServiceActions,
SentinelApiServiceEvents,
@@ -27,20 +27,20 @@ export type {
SentinelSmartTransactionRequest,
SentinelSmartTransactionResponse,
SentinelStateOverrides,
-} from './types';
+} from './types.js';
export {
SentinelFeature,
SentinelKind,
SentinelSmartTransactionStatus,
-} from './types';
+} from './types.js';
export type {
SentinelApiServiceGetNetworksAction,
SentinelApiServiceSimulateTransactionsAction,
SentinelApiServiceSubmitRelayTransactionAction,
SentinelApiServiceGetSmartTransactionAction,
-} from './sentinel-api-service-method-action-types';
+} from './sentinel-api-service-method-action-types.js';
export {
SentinelApiResponseValidationError,
SentinelChainNotSupportedError,
SentinelJsonRpcError,
-} from './errors';
+} from './errors.js';
diff --git a/packages/sentinel-api-service/src/sentinel-api-service-method-action-types.ts b/packages/sentinel-api-service/src/sentinel-api-service-method-action-types.ts
index 8fe319d6b8f..60ee169751d 100644
--- a/packages/sentinel-api-service/src/sentinel-api-service-method-action-types.ts
+++ b/packages/sentinel-api-service/src/sentinel-api-service-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { SentinelApiService } from './sentinel-api-service';
+import type { SentinelApiService } from './sentinel-api-service.js';
/**
* Fetches the Sentinel supported-network registry. The result is cached, as
diff --git a/packages/sentinel-api-service/src/sentinel-api-service.test.ts b/packages/sentinel-api-service/src/sentinel-api-service.test.ts
index 3066586c356..5778e0e5cda 100644
--- a/packages/sentinel-api-service/src/sentinel-api-service.test.ts
+++ b/packages/sentinel-api-service/src/sentinel-api-service.test.ts
@@ -16,23 +16,23 @@ import {
RPC_METHOD_SIMULATE,
SentinelEnvironment,
serviceName,
-} from './constants';
+} from './constants.js';
import {
SentinelApiResponseValidationError,
SentinelChainNotSupportedError,
SentinelJsonRpcError,
-} from './errors';
-import { SentinelApiService } from './sentinel-api-service';
+} from './errors.js';
+import { SentinelApiService } from './sentinel-api-service.js';
import {
SentinelFeature,
SentinelKind,
SentinelSmartTransactionStatus,
-} from './types';
+} from './types.js';
import type {
SentinelApiServiceMessenger,
SentinelRelaySubmitRequest,
SentinelSimulationRequest,
-} from './types';
+} from './types.js';
// ============================================================
// Fixtures
diff --git a/packages/sentinel-api-service/src/sentinel-api-service.ts b/packages/sentinel-api-service/src/sentinel-api-service.ts
index fe11b05ac7c..6e98281dd7c 100644
--- a/packages/sentinel-api-service/src/sentinel-api-service.ts
+++ b/packages/sentinel-api-service/src/sentinel-api-service.ts
@@ -14,19 +14,19 @@ import {
RPC_METHOD_SEND_RELAY,
RPC_METHOD_SIMULATE,
serviceName,
-} from './constants';
+} from './constants.js';
import {
SentinelApiResponseValidationError,
SentinelChainNotSupportedError,
SentinelJsonRpcError,
-} from './errors';
-import { projectLogger, createModuleLogger } from './logger';
+} from './errors.js';
+import { projectLogger, createModuleLogger } from './logger.js';
import {
SentinelSmartTransactionResponseStruct,
SentinelNetworkRegistryStruct,
SentinelRelaySubmitResponseStruct,
SentinelSimulationResponseStruct,
-} from './structs';
+} from './structs.js';
import type {
SentinelApiServiceMessenger,
SentinelApiServiceOptions,
@@ -38,7 +38,7 @@ import type {
SentinelSimulationResponse,
SentinelSmartTransactionRequest,
SentinelSmartTransactionResponse,
-} from './types';
+} from './types.js';
const log = createModuleLogger(projectLogger, serviceName);
diff --git a/packages/sentinel-api-service/src/types.ts b/packages/sentinel-api-service/src/types.ts
index bc6b89e6b30..63658e6e4b8 100644
--- a/packages/sentinel-api-service/src/types.ts
+++ b/packages/sentinel-api-service/src/types.ts
@@ -8,8 +8,8 @@ import type { Messenger } from '@metamask/messenger';
import type { Hex } from '@metamask/utils';
import type { QueryClientConfig } from '@tanstack/query-core';
-import type { SentinelEnvironment, serviceName } from './constants';
-import type { SentinelApiServiceMethodActions } from './sentinel-api-service-method-action-types';
+import type { SentinelEnvironment, serviceName } from './constants.js';
+import type { SentinelApiServiceMethodActions } from './sentinel-api-service-method-action-types.js';
/**
* Invalidates cached queries for {@link SentinelApiService}.
diff --git a/packages/shield-controller/jest.config.js b/packages/shield-controller/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/shield-controller/jest.config.js
+++ b/packages/shield-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/shield-controller/package.json b/packages/shield-controller/package.json
index 2d16f664424..a0261321c37 100644
--- a/packages/shield-controller/package.json
+++ b/packages/shield-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/shield-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/shield-controller",
@@ -68,11 +61,10 @@
"@lavamoat/allow-scripts": "^3.0.4",
"@lavamoat/preinstall-always-fail": "^2.1.0",
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
- "lodash": "^4.17.21",
+ "lodash-es": "^4.17.21",
"ts-jest": "^29.2.5",
"tsx": "^4.20.5",
"typedoc": "^0.25.13",
diff --git a/packages/shield-controller/src/ShieldController-method-action-types.ts b/packages/shield-controller/src/ShieldController-method-action-types.ts
index ca16c1baa92..423740dc44c 100644
--- a/packages/shield-controller/src/ShieldController-method-action-types.ts
+++ b/packages/shield-controller/src/ShieldController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { ShieldController } from './ShieldController';
+import type { ShieldController } from './ShieldController.js';
/**
* Start the ShieldController and subscribe to the transaction and signature controller state changes.
diff --git a/packages/shield-controller/src/ShieldController.test.ts b/packages/shield-controller/src/ShieldController.test.ts
index 4ae35f46b97..6b3e33c8f31 100644
--- a/packages/shield-controller/src/ShieldController.test.ts
+++ b/packages/shield-controller/src/ShieldController.test.ts
@@ -6,21 +6,24 @@ import { TransactionStatus } from '@metamask/transaction-controller';
import type { TransactionMeta } from '@metamask/transaction-controller';
import type { TransactionControllerState } from '@metamask/transaction-controller';
-import { TX_META_SIMULATION_DATA_MOCKS } from '../tests/data';
-import { createMockBackend, MOCK_COVERAGE_ID } from '../tests/mocks/backend';
-import { createMockMessenger, RootMessenger } from '../tests/mocks/messenger';
+import { TX_META_SIMULATION_DATA_MOCKS } from '../tests/data.js';
+import { createMockBackend, MOCK_COVERAGE_ID } from '../tests/mocks/backend.js';
+import {
+ createMockMessenger,
+ RootMessenger,
+} from '../tests/mocks/messenger.js';
import {
generateMockSignatureRequest,
generateMockTxMeta,
setupCoverageResultReceived,
-} from '../tests/utils';
+} from '../tests/utils.js';
import {
getDefaultShieldControllerState,
ShieldController,
ShieldControllerMessenger,
-} from './ShieldController';
-import type { ShieldControllerState } from './ShieldController';
-import type { NormalizeSignatureRequestFn, ShieldBackend } from './types';
+} from './ShieldController.js';
+import type { ShieldControllerState } from './ShieldController.js';
+import type { NormalizeSignatureRequestFn, ShieldBackend } from './types.js';
/**
* Sets up a ShieldController for testing.
diff --git a/packages/shield-controller/src/ShieldController.ts b/packages/shield-controller/src/ShieldController.ts
index e7109d6e941..14e7d967d60 100644
--- a/packages/shield-controller/src/ShieldController.ts
+++ b/packages/shield-controller/src/ShieldController.ts
@@ -14,16 +14,16 @@ import type {
TransactionControllerStateChangeEvent,
TransactionMeta,
} from '@metamask/transaction-controller';
-import { cloneDeep, isEqual } from 'lodash';
+import { cloneDeep, isEqual } from 'lodash-es';
-import { controllerName } from './constants';
-import { projectLogger, createModuleLogger } from './logger';
-import type { ShieldControllerMethodActions } from './ShieldController-method-action-types';
+import { controllerName } from './constants.js';
+import { projectLogger, createModuleLogger } from './logger.js';
+import type { ShieldControllerMethodActions } from './ShieldController-method-action-types.js';
import type {
CoverageResult,
NormalizeSignatureRequestFn,
ShieldBackend,
-} from './types';
+} from './types.js';
const log = createModuleLogger(projectLogger, 'ShieldController');
diff --git a/packages/shield-controller/src/backend.test.ts b/packages/shield-controller/src/backend.test.ts
index ab22c5d90b8..46f82e6a7c3 100644
--- a/packages/shield-controller/src/backend.test.ts
+++ b/packages/shield-controller/src/backend.test.ts
@@ -7,13 +7,13 @@ import {
generateMockSignatureRequest,
generateMockTxMeta,
getRandomCoverageResult,
-} from '../tests/utils';
+} from '../tests/utils.js';
import {
makeInitCoverageCheckBody,
parseSignatureRequestMethod,
ShieldRemoteBackend,
-} from './backend';
-import { SignTypedDataVersion } from './constants';
+} from './backend.js';
+import { SignTypedDataVersion } from './constants.js';
const mockCaptureException = jest.fn();
diff --git a/packages/shield-controller/src/backend.ts b/packages/shield-controller/src/backend.ts
index d6fd4788a5f..7cb091e9965 100644
--- a/packages/shield-controller/src/backend.ts
+++ b/packages/shield-controller/src/backend.ts
@@ -12,8 +12,8 @@ import type { TransactionMeta } from '@metamask/transaction-controller';
import type { AuthorizationList } from '@metamask/transaction-controller';
import type { Json } from '@metamask/utils';
-import { SignTypedDataVersion } from './constants';
-import { PollingWithCockatielPolicy } from './polling-with-policy';
+import { SignTypedDataVersion } from './constants.js';
+import { PollingWithCockatielPolicy } from './polling-with-policy.js';
import type {
CheckCoverageRequest,
CheckSignatureCoverageRequest,
@@ -22,7 +22,7 @@ import type {
LogSignatureRequest,
LogTransactionRequest,
ShieldBackend,
-} from './types';
+} from './types.js';
export type InitCoverageCheckRequest = {
txParams: [
diff --git a/packages/shield-controller/src/index.ts b/packages/shield-controller/src/index.ts
index 7747be50a42..8c7e2fcf292 100644
--- a/packages/shield-controller/src/index.ts
+++ b/packages/shield-controller/src/index.ts
@@ -3,7 +3,7 @@ export type {
LogSignatureRequest,
LogTransactionRequest,
NormalizeSignatureRequestFn,
-} from './types';
+} from './types.js';
export type {
ShieldControllerActions,
ShieldControllerEvents,
@@ -12,16 +12,16 @@ export type {
ShieldControllerGetStateAction,
ShieldControllerCoverageResultReceivedEvent,
ShieldControllerStateChangeEvent,
-} from './ShieldController';
+} from './ShieldController.js';
export type {
ShieldControllerStartAction,
ShieldControllerStopAction,
ShieldControllerClearStateAction,
ShieldControllerCheckCoverageAction,
ShieldControllerCheckSignatureCoverageAction,
-} from './ShieldController-method-action-types';
+} from './ShieldController-method-action-types.js';
export {
ShieldController,
getDefaultShieldControllerState,
-} from './ShieldController';
-export { ShieldRemoteBackend, parseSignatureRequestMethod } from './backend';
+} from './ShieldController.js';
+export { ShieldRemoteBackend, parseSignatureRequestMethod } from './backend.js';
diff --git a/packages/shield-controller/src/logger.ts b/packages/shield-controller/src/logger.ts
index ca017b5ba54..abd139116dc 100644
--- a/packages/shield-controller/src/logger.ts
+++ b/packages/shield-controller/src/logger.ts
@@ -1,6 +1,6 @@
import { createProjectLogger, createModuleLogger } from '@metamask/utils';
-import { controllerName } from './constants';
+import { controllerName } from './constants.js';
export const projectLogger = createProjectLogger(controllerName);
diff --git a/packages/shield-controller/src/polling-with-policy.test.ts b/packages/shield-controller/src/polling-with-policy.test.ts
index c62958a2d8f..99fc1d3f45d 100644
--- a/packages/shield-controller/src/polling-with-policy.test.ts
+++ b/packages/shield-controller/src/polling-with-policy.test.ts
@@ -1,7 +1,7 @@
import { HttpError } from '@metamask/controller-utils';
-import { delay } from '../tests/utils';
-import { PollingWithCockatielPolicy } from './polling-with-policy';
+import { delay } from '../tests/utils.js';
+import { PollingWithCockatielPolicy } from './polling-with-policy.js';
describe('PollingWithCockatielPolicy', () => {
it('should return the success result', async () => {
@@ -22,6 +22,7 @@ describe('PollingWithCockatielPolicy', () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (invocationCount < 3) {
+ // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
reject(new HttpError(412, 'Results are not available yet'));
}
resolve('test');
@@ -39,6 +40,7 @@ describe('PollingWithCockatielPolicy', () => {
.fn()
.mockImplementation(async (_abortSignal: AbortSignal) => {
return new Promise((_resolve, reject) => {
+ // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
reject(new HttpError(500, 'Internal server error'));
});
});
@@ -58,6 +60,7 @@ describe('PollingWithCockatielPolicy', () => {
.mockImplementation(async (_abortSignal: AbortSignal) => {
return new Promise((_resolve, reject) => {
setTimeout(() => {
+ // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
reject(new HttpError(412, 'Results are not available yet'));
}, 100);
});
@@ -82,6 +85,7 @@ describe('PollingWithCockatielPolicy', () => {
reject(new Error('test error'));
}
+ // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
reject(new HttpError(412, 'Results are not available yet'));
}, 100);
});
diff --git a/packages/shield-controller/tests/mocks/messenger.ts b/packages/shield-controller/tests/mocks/messenger.ts
index c977739c464..38ac76a1596 100644
--- a/packages/shield-controller/tests/mocks/messenger.ts
+++ b/packages/shield-controller/tests/mocks/messenger.ts
@@ -5,8 +5,8 @@ import type {
MockAnyNamespace,
} from '@metamask/messenger';
-import type { ShieldControllerMessenger } from '../../src';
-import { controllerName } from '../../src/constants';
+import type { ShieldControllerMessenger } from '../../src.js';
+import { controllerName } from '../../src/constants.js';
type AllShieldControllerActions = MessengerActions;
diff --git a/packages/shield-controller/tests/utils.ts b/packages/shield-controller/tests/utils.ts
index be83af87f96..94039c947cb 100644
--- a/packages/shield-controller/tests/utils.ts
+++ b/packages/shield-controller/tests/utils.ts
@@ -11,9 +11,9 @@ import type { TransactionMeta } from '@metamask/transaction-controller';
import type { SignTypedDataVersion } from 'src/constants';
import { v1 as random } from 'uuid';
-import { coverageStatuses } from '../src/types';
-import type { CoverageResult, CoverageStatus } from '../src/types';
-import type { createMockMessenger } from './mocks/messenger';
+import { coverageStatuses } from '../src/types.js';
+import type { CoverageResult, CoverageStatus } from '../src/types.js';
+import type { createMockMessenger } from './mocks/messenger.js';
/**
* Generate a mock transaction meta.
diff --git a/packages/signature-controller/jest.config.js b/packages/signature-controller/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/signature-controller/jest.config.js
+++ b/packages/signature-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/signature-controller/package.json b/packages/signature-controller/package.json
index d6264e7049d..454487509de 100644
--- a/packages/signature-controller/package.json
+++ b/packages/signature-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/signature-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/signature-controller",
@@ -72,7 +65,6 @@
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/signature-controller/src/SignatureController-method-action-types.ts b/packages/signature-controller/src/SignatureController-method-action-types.ts
index ca6aedcc146..3da10884974 100644
--- a/packages/signature-controller/src/SignatureController-method-action-types.ts
+++ b/packages/signature-controller/src/SignatureController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { SignatureController } from './SignatureController';
+import type { SignatureController } from './SignatureController.js';
/**
* Reset the controller state to the initial state.
diff --git a/packages/signature-controller/src/SignatureController.test.ts b/packages/signature-controller/src/SignatureController.test.ts
index 4f9d1d5349c..60d57b29b9f 100644
--- a/packages/signature-controller/src/SignatureController.test.ts
+++ b/packages/signature-controller/src/SignatureController.test.ts
@@ -5,26 +5,26 @@ import { SignTypedDataVersion } from '@metamask/keyring-controller';
import { LogType, SigningStage } from '@metamask/logging-controller';
import { v1 } from 'uuid';
-import { flushPromises } from '../../../tests/helpers';
+import { flushPromises } from '../../../tests/helpers.js';
import type {
SignatureControllerMessenger,
SignatureControllerOptions,
SignatureControllerState,
-} from './SignatureController';
-import { SignatureController } from './SignatureController';
+} from './SignatureController.js';
+import { SignatureController } from './SignatureController.js';
import type {
MessageParamsPersonal,
MessageParamsTyped,
OriginalRequest,
SignatureRequest,
-} from './types';
-import { SignatureRequestStatus, SignatureRequestType } from './types';
-import * as DecodingDataUtils from './utils/decoding-api';
+} from './types.js';
+import { SignatureRequestStatus, SignatureRequestType } from './types.js';
+import * as DecodingDataUtils from './utils/decoding-api.js';
import {
normalizePersonalMessageParams,
normalizeTypedMessageParams,
-} from './utils/normalize';
-import { validateTypedSignatureRequest } from './utils/validation';
+} from './utils/normalize.js';
+import { validateTypedSignatureRequest } from './utils/validation.js';
jest.mock('uuid');
jest.mock('./utils/validation');
diff --git a/packages/signature-controller/src/SignatureController.ts b/packages/signature-controller/src/SignatureController.ts
index c24b6bebe33..d5f2de6961e 100644
--- a/packages/signature-controller/src/SignatureController.ts
+++ b/packages/signature-controller/src/SignatureController.ts
@@ -39,9 +39,9 @@ import type { Hex, Json } from '@metamask/utils';
import EventEmitter from 'events';
import { v1 as random } from 'uuid';
-import { projectLogger as log } from './logger';
-import type { SignatureControllerMethodActions } from './SignatureController-method-action-types';
-import { SignatureRequestStatus, SignatureRequestType } from './types';
+import { projectLogger as log } from './logger.js';
+import type { SignatureControllerMethodActions } from './SignatureController-method-action-types.js';
+import { SignatureRequestStatus, SignatureRequestType } from './types.js';
import type {
MessageParamsPersonal,
MessageParamsTyped,
@@ -52,21 +52,21 @@ import type {
LegacyStateMessage,
StateSIWEMessage,
MessageParamsTypedData,
-} from './types';
-import { DECODING_API_ERRORS, decodeSignature } from './utils/decoding-api';
+} from './types.js';
+import { DECODING_API_ERRORS, decodeSignature } from './utils/decoding-api.js';
import {
decodePermissionFromRequest,
isDelegationRequest,
validateExecutionPermissionMetadata,
-} from './utils/delegations';
+} from './utils/delegations.js';
import {
normalizePersonalMessageParams,
normalizeTypedMessageParams,
-} from './utils/normalize';
+} from './utils/normalize.js';
import {
validatePersonalSignatureRequest,
validateTypedSignatureRequest,
-} from './utils/validation';
+} from './utils/validation.js';
const controllerName = 'SignatureController';
diff --git a/packages/signature-controller/src/index.ts b/packages/signature-controller/src/index.ts
index 82447289f46..46754d16adb 100644
--- a/packages/signature-controller/src/index.ts
+++ b/packages/signature-controller/src/index.ts
@@ -1,4 +1,4 @@
-export * from './SignatureController';
+export * from './SignatureController.js';
export type {
SignatureControllerResetStateAction,
SignatureControllerRejectUnapprovedAction,
@@ -10,5 +10,5 @@ export type {
SignatureControllerSetDeferredSignErrorAction,
SignatureControllerSetTypedMessageInProgressAction,
SignatureControllerSetPersonalMessageInProgressAction,
-} from './SignatureController-method-action-types';
-export * from './types';
+} from './SignatureController-method-action-types.js';
+export * from './types.js';
diff --git a/packages/signature-controller/src/utils/decoding-api.test.ts b/packages/signature-controller/src/utils/decoding-api.test.ts
index f9dbfa2a52d..c07cfafaef5 100644
--- a/packages/signature-controller/src/utils/decoding-api.test.ts
+++ b/packages/signature-controller/src/utils/decoding-api.test.ts
@@ -1,6 +1,6 @@
-import { EthMethod } from '../types';
-import type { OriginalRequest } from '../types';
-import { decodeSignature } from './decoding-api';
+import { EthMethod } from '../types.js';
+import type { OriginalRequest } from '../types.js';
+import { decodeSignature } from './decoding-api.js';
const PERMIT_REQUEST_MOCK = {
method: EthMethod.SignTypedDataV4,
diff --git a/packages/signature-controller/src/utils/decoding-api.ts b/packages/signature-controller/src/utils/decoding-api.ts
index b8ed5bc1a81..fde49e5562e 100644
--- a/packages/signature-controller/src/utils/decoding-api.ts
+++ b/packages/signature-controller/src/utils/decoding-api.ts
@@ -1,6 +1,6 @@
-import { EthMethod } from '../types';
-import type { OriginalRequest } from '../types';
-import { normalizeParam } from './normalize';
+import { EthMethod } from '../types.js';
+import type { OriginalRequest } from '../types.js';
+import { normalizeParam } from './normalize.js';
export const DECODING_API_ERRORS = {
UNSUPPORTED_SIGNATURE: 'UNSUPPORTED_SIGNATURE',
diff --git a/packages/signature-controller/src/utils/delegations.test.ts b/packages/signature-controller/src/utils/delegations.test.ts
index 4816956af4d..a8d2c2c8e88 100644
--- a/packages/signature-controller/src/utils/delegations.test.ts
+++ b/packages/signature-controller/src/utils/delegations.test.ts
@@ -1,13 +1,13 @@
import type { DecodedPermission } from '@metamask/gator-permissions-controller';
import type { Json } from '@metamask/utils';
-import type { SignatureControllerMessenger } from '../SignatureController';
-import type { MessageParamsTyped, MessageParamsTypedData } from '../types';
+import type { SignatureControllerMessenger } from '../SignatureController.js';
+import type { MessageParamsTyped, MessageParamsTypedData } from '../types.js';
import {
decodePermissionFromRequest,
isDelegationRequest,
validateExecutionPermissionMetadata,
-} from './delegations';
+} from './delegations.js';
describe('delegations utils', () => {
describe('isDelegationRequest', () => {
diff --git a/packages/signature-controller/src/utils/delegations.ts b/packages/signature-controller/src/utils/delegations.ts
index cf1b12c7179..28a36633fb1 100644
--- a/packages/signature-controller/src/utils/delegations.ts
+++ b/packages/signature-controller/src/utils/delegations.ts
@@ -4,11 +4,11 @@ import type {
} from '@metamask/gator-permissions-controller';
import { isHexAddress, isStrictHexString } from '@metamask/utils';
-import type { SignatureControllerMessenger } from '../SignatureController';
+import type { SignatureControllerMessenger } from '../SignatureController.js';
import type {
MessageParamsTypedData,
MessageParamsTypedDataWithMetadata,
-} from '../types';
+} from '../types.js';
const DELEGATION_PRIMARY_TYPE = 'Delegation';
diff --git a/packages/signature-controller/src/utils/normalize.test.ts b/packages/signature-controller/src/utils/normalize.test.ts
index 26b930f2d29..812cad765de 100644
--- a/packages/signature-controller/src/utils/normalize.test.ts
+++ b/packages/signature-controller/src/utils/normalize.test.ts
@@ -1,11 +1,11 @@
import { SignTypedDataVersion } from '@metamask/keyring-controller';
-import type { MessageParamsPersonal, MessageParamsTyped } from '../types';
+import type { MessageParamsPersonal, MessageParamsTyped } from '../types.js';
import {
normalizeParam,
normalizePersonalMessageParams,
normalizeTypedMessageParams,
-} from './normalize';
+} from './normalize.js';
describe('Normalize Utils', () => {
describe('normalizePersonalMessageParams', () => {
diff --git a/packages/signature-controller/src/utils/normalize.ts b/packages/signature-controller/src/utils/normalize.ts
index 4c06c439acb..9ff8c4ee6f5 100644
--- a/packages/signature-controller/src/utils/normalize.ts
+++ b/packages/signature-controller/src/utils/normalize.ts
@@ -2,7 +2,7 @@ import { SignTypedDataVersion } from '@metamask/keyring-controller';
import { add0x, bytesToHex, remove0x } from '@metamask/utils';
import type { Json } from '@metamask/utils';
-import type { MessageParamsPersonal, MessageParamsTyped } from '../types';
+import type { MessageParamsPersonal, MessageParamsTyped } from '../types.js';
/**
* Normalize personal message params.
diff --git a/packages/signature-controller/src/utils/validation.test.ts b/packages/signature-controller/src/utils/validation.test.ts
index 26f5b5ff1b7..fa1ccf7eadf 100644
--- a/packages/signature-controller/src/utils/validation.test.ts
+++ b/packages/signature-controller/src/utils/validation.test.ts
@@ -8,12 +8,12 @@ import type {
MessageParamsPersonal,
MessageParamsTyped,
OriginalRequest,
-} from '../types';
+} from '../types.js';
import {
PRIMARY_TYPE_DELEGATION,
validatePersonalSignatureRequest,
validateTypedSignatureRequest,
-} from './validation';
+} from './validation.js';
const CHAIN_ID_MOCK = '0x1';
const ORIGIN_MOCK = 'test.com';
diff --git a/packages/signature-controller/src/utils/validation.ts b/packages/signature-controller/src/utils/validation.ts
index 024d1d9c8af..f36cdb6b8c7 100644
--- a/packages/signature-controller/src/utils/validation.ts
+++ b/packages/signature-controller/src/utils/validation.ts
@@ -15,8 +15,8 @@ import type {
MessageParamsTyped,
MessageParamsTypedData,
OriginalRequest,
-} from '../types';
-import { isDelegationRequest } from './delegations';
+} from '../types.js';
+import { isDelegationRequest } from './delegations.js';
export const PRIMARY_TYPE_DELEGATION = 'Delegation';
export const DELEGATOR_FIELD = 'delegator';
@@ -87,9 +87,7 @@ export function validateTypedSignatureRequest({
function validateTypedSignatureRequestV1(messageData: MessageParamsTyped) {
if (!messageData.data || !Array.isArray(messageData.data)) {
throw new Error(
- // TODO: Either fix this lint violation or explain why it's necessary to ignore.
- // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
- `Invalid message "data": ${messageData.data} must be a valid array.`,
+ `Invalid message "data": ${JSON.stringify(messageData.data)} must be a valid array.`,
);
}
diff --git a/packages/smart-transactions-controller/jest.config.js b/packages/smart-transactions-controller/jest.config.js
index f4ec849294c..8697d417dcc 100644
--- a/packages/smart-transactions-controller/jest.config.js
+++ b/packages/smart-transactions-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/smart-transactions-controller/package.json b/packages/smart-transactions-controller/package.json
index eeba4d2f25d..3acc6f83797 100644
--- a/packages/smart-transactions-controller/package.json
+++ b/packages/smart-transactions-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/smart-transactions-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/smart-transactions-controller",
@@ -72,13 +65,12 @@
"@metamask/transaction-controller": "^69.0.0",
"@metamask/utils": "^11.11.0",
"bignumber.js": "^9.1.2",
- "lodash": "^4.17.21",
+ "lodash-es": "^4.17.21",
"reselect": "^5.1.1"
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
"@metamask/json-rpc-engine": "^10.5.0",
- "@ts-bridge/cli": "^0.6.4",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
"nock": "^13.3.1",
diff --git a/packages/smart-transactions-controller/src/SmartTransactionsController-method-action-types.ts b/packages/smart-transactions-controller/src/SmartTransactionsController-method-action-types.ts
index b8cae3c5db5..0abc024e10a 100644
--- a/packages/smart-transactions-controller/src/SmartTransactionsController-method-action-types.ts
+++ b/packages/smart-transactions-controller/src/SmartTransactionsController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { SmartTransactionsController } from './SmartTransactionsController';
+import type { SmartTransactionsController } from './SmartTransactionsController.js';
export type SmartTransactionsControllerCheckPollAction = {
type: `SmartTransactionsController:checkPoll`;
diff --git a/packages/smart-transactions-controller/src/SmartTransactionsController.test.ts b/packages/smart-transactions-controller/src/SmartTransactionsController.test.ts
index 6d921c3c256..0c63063e14f 100644
--- a/packages/smart-transactions-controller/src/SmartTransactionsController.test.ts
+++ b/packages/smart-transactions-controller/src/SmartTransactionsController.test.ts
@@ -26,21 +26,25 @@ import type { Hex } from '@metamask/utils';
import nock from 'nock';
import packageJson from '../package.json';
-import { advanceTime, flushPromises, getFakeProvider } from '../tests/helpers';
+import {
+ advanceTime,
+ flushPromises,
+ getFakeProvider,
+} from '../tests/helpers.js';
import {
API_BASE_URL,
SENTINEL_API_BASE_URL_MAP,
SmartTransactionsTraceName,
-} from './constants';
+} from './constants.js';
import {
DEFAULT_INTERVAL,
SmartTransactionsController,
getDefaultSmartTransactionsControllerState,
-} from './SmartTransactionsController';
-import type { SmartTransactionsControllerMessenger } from './SmartTransactionsController';
-import type { SmartTransaction, UnsignedTransaction } from './types';
-import { SmartTransactionStatuses, ClientId } from './types';
-import * as utils from './utils';
+} from './SmartTransactionsController.js';
+import type { SmartTransactionsControllerMessenger } from './SmartTransactionsController.js';
+import type { SmartTransaction, UnsignedTransaction } from './types.js';
+import { SmartTransactionStatuses, ClientId } from './types.js';
+import * as utils from './utils.js';
type AllActions = MessengerActions;
@@ -430,8 +434,7 @@ describe('SmartTransactionsController', () => {
}),
);
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
- controller.stop();
+ void controller.stop();
});
it('does not report error when feature flags are valid after state change', async () => {
@@ -530,8 +533,7 @@ describe('SmartTransactionsController', () => {
// Should not be called after state change with valid flags
expect(captureExceptionSpy).not.toHaveBeenCalled();
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
- controller.stop();
+ void controller.stop();
});
it('reports error when smartTransactionsNetworks flag is missing after state change', async () => {
@@ -632,8 +634,7 @@ describe('SmartTransactionsController', () => {
}),
);
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
- controller.stop();
+ void controller.stop();
});
it('reports error to ErrorReportingService when feature flags become invalid after state change', async () => {
@@ -743,8 +744,7 @@ describe('SmartTransactionsController', () => {
}),
);
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
- controller.stop();
+ void controller.stop();
});
it('reports multiple errors to ErrorReportingService when multiple chains are invalid after state change', async () => {
@@ -849,8 +849,7 @@ describe('SmartTransactionsController', () => {
// Should be called twice - once for each invalid chain
expect(captureExceptionSpy).toHaveBeenCalledTimes(2);
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
- controller.stop();
+ void controller.stop();
});
});
@@ -949,8 +948,7 @@ describe('SmartTransactionsController', () => {
controller.timeoutHandle = setTimeout(() => ({}));
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
- controller.poll(1000);
+ void controller.poll(1000);
expect(updateSmartTransactionsSpy).toHaveBeenCalled();
});
@@ -3377,8 +3375,7 @@ async function withController(
triggerNetworkStateChange,
});
} finally {
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
- controller.stop();
+ void controller.stop();
controller.stopAllPolling();
}
}
diff --git a/packages/smart-transactions-controller/src/SmartTransactionsController.ts b/packages/smart-transactions-controller/src/SmartTransactionsController.ts
index 5a7756fa067..2c9589dbff0 100644
--- a/packages/smart-transactions-controller/src/SmartTransactionsController.ts
+++ b/packages/smart-transactions-controller/src/SmartTransactionsController.ts
@@ -34,7 +34,7 @@ import type {
} from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
import { BigNumber } from 'bignumber.js';
-import cloneDeep from 'lodash/cloneDeep';
+import { cloneDeep } from 'lodash-es';
import {
API_BASE_URL,
@@ -43,13 +43,13 @@ import {
MetaMetricsEventName,
SENTINEL_API_BASE_URL_MAP,
SmartTransactionsTraceName,
-} from './constants';
+} from './constants.js';
import {
getSmartTransactionsFeatureFlags,
getSmartTransactionsFeatureFlagsForChain,
-} from './featureFlags/feature-flags';
-import { validateSmartTransactionsFeatureFlags } from './featureFlags/validators';
-import type { SmartTransactionsControllerMethodActions } from './SmartTransactionsController-method-action-types';
+} from './featureFlags/feature-flags.js';
+import { validateSmartTransactionsFeatureFlags } from './featureFlags/validators.js';
+import type { SmartTransactionsControllerMethodActions } from './SmartTransactionsController-method-action-types.js';
import type {
Fees,
IndividualTxFees,
@@ -62,8 +62,8 @@ import type {
MetaMetricsProps,
FeatureFlags,
ClientId,
-} from './types';
-import { APIType, SmartTransactionStatuses } from './types';
+} from './types.js';
+import { APIType, SmartTransactionStatuses } from './types.js';
import {
calculateStatus,
getAPIRequestURL,
@@ -76,7 +76,7 @@ import {
getSmartTransactionMetricsSensitiveProperties,
shouldMarkRegularTransactionsAsFailed,
markRegularTransactionsAsFailed,
-} from './utils';
+} from './utils.js';
const SECOND = 1000;
export const DEFAULT_INTERVAL = SECOND * 5;
diff --git a/packages/smart-transactions-controller/src/featureFlags/feature-flags.test.ts b/packages/smart-transactions-controller/src/featureFlags/feature-flags.test.ts
index bc89a602c28..8c31da42eec 100644
--- a/packages/smart-transactions-controller/src/featureFlags/feature-flags.test.ts
+++ b/packages/smart-transactions-controller/src/featureFlags/feature-flags.test.ts
@@ -1,10 +1,10 @@
-import { DEFAULT_DISABLED_SMART_TRANSACTIONS_FEATURE_FLAGS } from '../constants';
+import { DEFAULT_DISABLED_SMART_TRANSACTIONS_FEATURE_FLAGS } from '../constants.js';
import {
processSmartTransactionsFeatureFlags,
getSmartTransactionsFeatureFlags,
getSmartTransactionsFeatureFlagsForChain,
normalizeChainId,
-} from './feature-flags';
+} from './feature-flags.js';
describe('feature-flags', () => {
describe('processSmartTransactionsFeatureFlags', () => {
diff --git a/packages/smart-transactions-controller/src/featureFlags/feature-flags.ts b/packages/smart-transactions-controller/src/featureFlags/feature-flags.ts
index 43ac56f87cc..d70a8941c48 100644
--- a/packages/smart-transactions-controller/src/featureFlags/feature-flags.ts
+++ b/packages/smart-transactions-controller/src/featureFlags/feature-flags.ts
@@ -7,12 +7,12 @@ import {
parseCaipChainId,
} from '@metamask/utils';
-import { DEFAULT_DISABLED_SMART_TRANSACTIONS_FEATURE_FLAGS } from '../constants';
+import { DEFAULT_DISABLED_SMART_TRANSACTIONS_FEATURE_FLAGS } from '../constants.js';
import type {
SmartTransactionsFeatureFlagsConfig,
SmartTransactionsNetworkConfig,
-} from '../types';
-import { validateSmartTransactionsFeatureFlags } from './validators';
+} from '../types.js';
+import { validateSmartTransactionsFeatureFlags } from './validators.js';
/**
* Normalizes a chain ID to hex format for EVM chains.
diff --git a/packages/smart-transactions-controller/src/featureFlags/index.ts b/packages/smart-transactions-controller/src/featureFlags/index.ts
index 8d2fad6e105..464d44ab850 100644
--- a/packages/smart-transactions-controller/src/featureFlags/index.ts
+++ b/packages/smart-transactions-controller/src/featureFlags/index.ts
@@ -7,11 +7,11 @@ export {
type SmartTransactionsNetworkConfigFromSchema as SmartTransactionsNetworkConfig,
type SmartTransactionsFeatureFlagsConfigFromSchema,
type FeatureFlagsProcessResult,
-} from './validators';
+} from './validators.js';
export {
getSmartTransactionsFeatureFlags,
processSmartTransactionsFeatureFlags,
getSmartTransactionsFeatureFlagsForChain,
normalizeChainId,
-} from './feature-flags';
+} from './feature-flags.js';
diff --git a/packages/smart-transactions-controller/src/featureFlags/validators.test.ts b/packages/smart-transactions-controller/src/featureFlags/validators.test.ts
index 7672475a99f..d7e9ddfc407 100644
--- a/packages/smart-transactions-controller/src/featureFlags/validators.test.ts
+++ b/packages/smart-transactions-controller/src/featureFlags/validators.test.ts
@@ -1,7 +1,7 @@
import {
validateSmartTransactionsFeatureFlags,
validateSmartTransactionsNetworkConfig,
-} from './validators';
+} from './validators.js';
describe('validators', () => {
describe('validateSmartTransactionsNetworkConfig', () => {
diff --git a/packages/smart-transactions-controller/src/index.ts b/packages/smart-transactions-controller/src/index.ts
index eba2b414d0b..dcb6cf6a26b 100644
--- a/packages/smart-transactions-controller/src/index.ts
+++ b/packages/smart-transactions-controller/src/index.ts
@@ -1,4 +1,4 @@
-export { SmartTransactionsController } from './SmartTransactionsController';
+export { SmartTransactionsController } from './SmartTransactionsController.js';
export type {
SmartTransactionsControllerMessenger,
SmartTransactionsControllerState,
@@ -8,7 +8,7 @@ export type {
SmartTransactionsControllerSmartTransactionEvent,
SmartTransactionsControllerSmartTransactionConfirmationDoneEvent,
SmartTransactionsControllerEvents,
-} from './SmartTransactionsController';
+} from './SmartTransactionsController.js';
export type {
SmartTransactionsControllerCheckPollAction,
SmartTransactionsControllerInitializeSmartTransactionsForChainIdAction,
@@ -29,7 +29,7 @@ export type {
SmartTransactionsControllerGetTransactionsAction,
SmartTransactionsControllerGetSmartTransactionByMinedTxHashAction,
SmartTransactionsControllerWipeSmartTransactionsAction,
-} from './SmartTransactionsController-method-action-types';
+} from './SmartTransactionsController-method-action-types.js';
export {
type Fee,
type Fees,
@@ -47,16 +47,16 @@ export {
ClientId,
Feature,
Kind,
-} from './types';
-export { MetaMetricsEventName, MetaMetricsEventCategory } from './constants';
+} from './types.js';
+export { MetaMetricsEventName, MetaMetricsEventCategory } from './constants.js';
export {
getSmartTransactionMetricsProperties,
getSmartTransactionMetricsSensitiveProperties,
-} from './utils';
+} from './utils.js';
// Feature flag selectors
export {
selectSmartTransactionsFeatureFlags,
selectSmartTransactionsFeatureFlagsForChain,
type SmartTransactionsFeatureFlagsState,
-} from './selectors';
+} from './selectors.js';
diff --git a/packages/smart-transactions-controller/src/selectors.test.ts b/packages/smart-transactions-controller/src/selectors.test.ts
index 4d3e73eb200..791a9de29f2 100644
--- a/packages/smart-transactions-controller/src/selectors.test.ts
+++ b/packages/smart-transactions-controller/src/selectors.test.ts
@@ -1,9 +1,9 @@
-import { DEFAULT_DISABLED_SMART_TRANSACTIONS_FEATURE_FLAGS } from './constants';
+import { DEFAULT_DISABLED_SMART_TRANSACTIONS_FEATURE_FLAGS } from './constants.js';
import {
selectSmartTransactionsFeatureFlags,
selectSmartTransactionsFeatureFlagsForChain,
-} from './selectors';
-import type { SmartTransactionsFeatureFlagsState } from './selectors';
+} from './selectors.js';
+import type { SmartTransactionsFeatureFlagsState } from './selectors.js';
describe('selectors', () => {
beforeEach(() => {
diff --git a/packages/smart-transactions-controller/src/selectors.ts b/packages/smart-transactions-controller/src/selectors.ts
index e3b3a2ce55b..fd359265c44 100644
--- a/packages/smart-transactions-controller/src/selectors.ts
+++ b/packages/smart-transactions-controller/src/selectors.ts
@@ -4,11 +4,11 @@ import { createSelector as createSelector_ } from 'reselect';
import {
processSmartTransactionsFeatureFlags,
getSmartTransactionsFeatureFlagsForChain,
-} from './featureFlags/feature-flags';
+} from './featureFlags/feature-flags.js';
import type {
SmartTransactionsFeatureFlagsConfig,
SmartTransactionsNetworkConfig,
-} from './types';
+} from './types.js';
/**
* The state shape expected by the smart transactions feature flag selectors.
diff --git a/packages/smart-transactions-controller/src/types.ts b/packages/smart-transactions-controller/src/types.ts
index 9e1a3a8d108..8ea7c9d8da0 100644
--- a/packages/smart-transactions-controller/src/types.ts
+++ b/packages/smart-transactions-controller/src/types.ts
@@ -2,7 +2,7 @@ import type { NetworkClientId } from '@metamask/network-controller';
import type { TransactionType } from '@metamask/transaction-controller';
import type { CaipChainId, Hex } from '@metamask/utils';
-import type { SmartTransactionsNetworkConfig } from './featureFlags';
+import type { SmartTransactionsNetworkConfig } from './featureFlags.js';
export type SentinelMeta = {
txType?: TransactionType;
diff --git a/packages/smart-transactions-controller/src/utils.test.ts b/packages/smart-transactions-controller/src/utils.test.ts
index db4b4766106..31edd698ca4 100644
--- a/packages/smart-transactions-controller/src/utils.test.ts
+++ b/packages/smart-transactions-controller/src/utils.test.ts
@@ -5,7 +5,7 @@ import { TransactionStatus } from '@metamask/transaction-controller';
import type { TransactionMeta } from '@metamask/transaction-controller';
import packageJson from '../package.json';
-import { API_BASE_URL, SENTINEL_API_BASE_URL_MAP } from './constants';
+import { API_BASE_URL, SENTINEL_API_BASE_URL_MAP } from './constants.js';
import {
SmartTransactionMinedTx,
APIType,
@@ -13,8 +13,8 @@ import {
SmartTransactionCancellationReason,
OriginalTransactionStatus,
ClientId,
-} from './types';
-import * as utils from './utils';
+} from './types.js';
+import * as utils from './utils.js';
const createSignedTransaction = () => {
return '0xf86c098504a817c800825208943535353535353535353535353535353535353535880de0b6b3a76400008025a02b79f322a625d623a2bb2911e0c6b3e7eaf741a7c7c5d2e8c67ef3ff4acf146ca01ae168fea63dc3391b75b586c8a7c0cb55cdf3b8e2e4d8e097957a3a56c6f2c5';
diff --git a/packages/smart-transactions-controller/src/utils.ts b/packages/smart-transactions-controller/src/utils.ts
index 936cd3406ee..a22c71063a8 100644
--- a/packages/smart-transactions-controller/src/utils.ts
+++ b/packages/smart-transactions-controller/src/utils.ts
@@ -7,19 +7,19 @@ import type {
} from '@metamask/transaction-controller';
import { TransactionStatus } from '@metamask/transaction-controller';
import { BigNumber } from 'bignumber.js';
-import _ from 'lodash';
+import _ from 'lodash-es';
// Ignoring TypeScript errors here because this import is disallowed for production builds, because
// the `package.json` file is above the root directory.
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
import packageJson from '../package.json';
-import { API_BASE_URL, SENTINEL_API_BASE_URL_MAP } from './constants';
+import { API_BASE_URL, SENTINEL_API_BASE_URL_MAP } from './constants.js';
import type {
SmartTransaction,
SmartTransactionsStatus,
SmartTransactionsNetworkConfig,
-} from './types';
+} from './types.js';
import {
APIType,
SmartTransactionStatuses,
@@ -27,7 +27,7 @@ import {
SmartTransactionMinedTx,
cancellationReasonToStatusMap,
ClientId,
-} from './types';
+} from './types.js';
export function isSmartTransactionPending(smartTransaction: SmartTransaction) {
return smartTransaction.status === SmartTransactionStatuses.PENDING;
diff --git a/packages/snap-account-service/jest.config.js b/packages/snap-account-service/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/snap-account-service/jest.config.js
+++ b/packages/snap-account-service/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/snap-account-service/package.json b/packages/snap-account-service/package.json
index f97a22d8eba..82664284e63 100644
--- a/packages/snap-account-service/package.json
+++ b/packages/snap-account-service/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,15 +32,15 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/snap-account-service",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/snap-account-service",
"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 --check",
- "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate",
+ "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",
"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",
@@ -65,12 +58,11 @@
"@metamask/snaps-controllers": "^19.0.0",
"@metamask/snaps-sdk": "^11.0.0",
"@metamask/utils": "^11.11.0",
- "lodash": "^4.17.21"
+ "lodash-es": "^4.17.21"
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
"@metamask/keyring-utils": "^3.3.1",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/snap-account-service/src/SnapAccountService-method-action-types.ts b/packages/snap-account-service/src/SnapAccountService-method-action-types.ts
index 3cfece68bb1..2ebf8c7b3ca 100644
--- a/packages/snap-account-service/src/SnapAccountService-method-action-types.ts
+++ b/packages/snap-account-service/src/SnapAccountService-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { SnapAccountService } from './SnapAccountService';
+import type { SnapAccountService } from './SnapAccountService.js';
/**
* Returns the IDs of all currently tracked account-management Snaps —
diff --git a/packages/snap-account-service/src/SnapAccountService.test.ts b/packages/snap-account-service/src/SnapAccountService.test.ts
index 4960416aa17..00a09e3fa43 100644
--- a/packages/snap-account-service/src/SnapAccountService.test.ts
+++ b/packages/snap-account-service/src/SnapAccountService.test.ts
@@ -42,9 +42,9 @@ import type { TruncatedSnap } from '@metamask/snaps-utils';
import type {
SnapAccountServiceMessenger,
SnapAccountServiceOptions,
-} from './SnapAccountService';
-import { SnapAccountService } from './SnapAccountService';
-import type { AccountGroupObject } from './types';
+} from './SnapAccountService.js';
+import { SnapAccountService } from './SnapAccountService.js';
+import type { AccountGroupObject } from './types.js';
jest.mock('@metamask/keyring-internal-snap-client/v2');
diff --git a/packages/snap-account-service/src/SnapAccountService.ts b/packages/snap-account-service/src/SnapAccountService.ts
index f73975225b1..f0a9af5ce6c 100644
--- a/packages/snap-account-service/src/SnapAccountService.ts
+++ b/packages/snap-account-service/src/SnapAccountService.ts
@@ -65,7 +65,7 @@ import { SnapId } from '@metamask/snaps-sdk';
import type { Json } from '@metamask/utils';
import { assertStruct } from '@metamask/utils';
-import { projectLogger as log } from './logger';
+import { projectLogger as log } from './logger.js';
import type {
SnapAccountServiceEnsureReadyAction,
SnapAccountServiceEnsureMigratedAction,
@@ -77,10 +77,10 @@ import type {
SnapAccountServiceHandleKeyringSnapMessageAction,
SnapAccountServiceResolveAccountAddressAction,
SnapAccountServiceSetSelectedAccountsAction,
-} from './SnapAccountService-method-action-types';
-import { SnapPlatformWatcher } from './SnapPlatformWatcher';
-import type { SnapPlatformWatcherConfig } from './SnapPlatformWatcher';
-import { SnapTracker } from './SnapTracker';
+} from './SnapAccountService-method-action-types.js';
+import { SnapPlatformWatcher } from './SnapPlatformWatcher.js';
+import type { SnapPlatformWatcherConfig } from './SnapPlatformWatcher.js';
+import { SnapTracker } from './SnapTracker.js';
import type {
AccountTreeControllerGetAccountGroupObjectAction,
AccountTreeControllerGetSelectedAccountGroupAction,
@@ -89,7 +89,7 @@ import type {
AccountTreeControllerAccountGroupUpdatedEvent,
AccountTreeControllerAccountGroupRemovedEvent,
AccountGroupObject,
-} from './types';
+} from './types.js';
/**
* The name of the {@link SnapAccountService}, used to namespace the service's
@@ -329,7 +329,6 @@ export class SnapAccountService {
* @param groupId - The ID of the newly selected account group.
*/
#handleSelectedAccountGroupChange(groupId: AccountGroupId | ''): void {
- // eslint-disable-next-line no-void
void this.#forwardSelectedAccounts(
groupId,
this.#getAccountGroup(groupId)?.accounts,
@@ -342,7 +341,6 @@ export class SnapAccountService {
* keyring.
*/
#handleUnlock(): void {
- // eslint-disable-next-line no-void
void this.ensureMigrated()
.then(async () => {
// If the migration is successful, we re-forward the current groups to each new keyrings!
@@ -365,7 +363,6 @@ export class SnapAccountService {
*/
#handleAccountGroupCreatedOrUpdated(group: AccountGroupObject): void {
if (group.id === this.#getSelectedAccountGroupId()) {
- // eslint-disable-next-line no-void
void this.#forwardSelectedAccounts(group.id, group.accounts);
}
}
@@ -378,7 +375,6 @@ export class SnapAccountService {
*/
#handleAccountGroupRemoved(groupId: AccountGroupId): void {
if (groupId === this.#getSelectedAccountGroupId()) {
- // eslint-disable-next-line no-void
void this.#forwardSelectedAccounts(
groupId,
[], // Clearing accounts since the group is removed
diff --git a/packages/snap-account-service/src/SnapPlatformWatcher.test.ts b/packages/snap-account-service/src/SnapPlatformWatcher.test.ts
index dfce52b79b9..f399ff99dfa 100644
--- a/packages/snap-account-service/src/SnapPlatformWatcher.test.ts
+++ b/packages/snap-account-service/src/SnapPlatformWatcher.test.ts
@@ -1,4 +1,3 @@
-/* eslint-disable no-void */
import { Messenger, MOCK_ANY_NAMESPACE } from '@metamask/messenger';
import type {
MockAnyNamespace,
@@ -8,8 +7,8 @@ import type {
import type { SnapControllerState } from '@metamask/snaps-controllers';
import { createDeferredPromise } from '@metamask/utils';
-import type { SnapAccountServiceMessenger } from './SnapAccountService';
-import { SnapPlatformWatcher } from './SnapPlatformWatcher';
+import type { SnapAccountServiceMessenger } from './SnapAccountService.js';
+import { SnapPlatformWatcher } from './SnapPlatformWatcher.js';
type RootMessenger = Messenger<
MockAnyNamespace,
diff --git a/packages/snap-account-service/src/SnapPlatformWatcher.ts b/packages/snap-account-service/src/SnapPlatformWatcher.ts
index 91beb4144d1..b4ba6869e5f 100644
--- a/packages/snap-account-service/src/SnapPlatformWatcher.ts
+++ b/packages/snap-account-service/src/SnapPlatformWatcher.ts
@@ -1,8 +1,8 @@
import { createDeferredPromise, DeferredPromise } from '@metamask/utils';
-import { once } from 'lodash';
+import { once } from 'lodash-es';
-import { projectLogger as log } from './logger';
-import type { SnapAccountServiceMessenger } from './SnapAccountService';
+import { projectLogger as log } from './logger.js';
+import type { SnapAccountServiceMessenger } from './SnapAccountService.js';
export type SnapPlatformWatcherConfig = {
/**
diff --git a/packages/snap-account-service/src/SnapTracker.test.ts b/packages/snap-account-service/src/SnapTracker.test.ts
index 5d5be4c3109..ec030fc0994 100644
--- a/packages/snap-account-service/src/SnapTracker.test.ts
+++ b/packages/snap-account-service/src/SnapTracker.test.ts
@@ -7,8 +7,8 @@ import type {
import type { SnapId } from '@metamask/snaps-sdk';
import type { TruncatedSnap } from '@metamask/snaps-utils';
-import type { SnapAccountServiceMessenger } from './SnapAccountService';
-import { SnapTracker } from './SnapTracker';
+import type { SnapAccountServiceMessenger } from './SnapAccountService.js';
+import { SnapTracker } from './SnapTracker.js';
type RootMessenger = Messenger<
MockAnyNamespace,
diff --git a/packages/snap-account-service/src/SnapTracker.ts b/packages/snap-account-service/src/SnapTracker.ts
index b824892c4ba..67436f67692 100644
--- a/packages/snap-account-service/src/SnapTracker.ts
+++ b/packages/snap-account-service/src/SnapTracker.ts
@@ -1,8 +1,8 @@
import { SnapId } from '@metamask/snaps-sdk';
import type { TruncatedSnap } from '@metamask/snaps-utils';
-import { projectLogger as log } from './logger';
-import type { SnapAccountServiceMessenger } from './SnapAccountService';
+import { projectLogger as log } from './logger.js';
+import type { SnapAccountServiceMessenger } from './SnapAccountService.js';
/**
* Checks if a given Snap is an account management Snap.
diff --git a/packages/snap-account-service/src/index.ts b/packages/snap-account-service/src/index.ts
index a1f09bc833c..1d08878273a 100644
--- a/packages/snap-account-service/src/index.ts
+++ b/packages/snap-account-service/src/index.ts
@@ -1,4 +1,4 @@
-export { SnapAccountService } from './SnapAccountService';
+export { SnapAccountService } from './SnapAccountService.js';
export type {
SnapAccountServiceActions,
SnapAccountServiceConfig,
@@ -8,7 +8,7 @@ export type {
SnapAccountServiceAccountAssetListUpdatedEvent,
SnapAccountServiceMessenger,
SnapAccountServiceOptions,
-} from './SnapAccountService';
+} from './SnapAccountService.js';
export type {
SnapAccountServiceEnsureMigratedAction,
SnapAccountServiceEnsureReadyAction,
@@ -20,6 +20,6 @@ export type {
SnapAccountServiceHandleKeyringSnapMessageAction,
SnapAccountServiceResolveAccountAddressAction,
SnapAccountServiceSetSelectedAccountsAction,
-} from './SnapAccountService-method-action-types';
-export { SnapPlatformWatcher } from './SnapPlatformWatcher';
-export type { SnapPlatformWatcherConfig } from './SnapPlatformWatcher';
+} from './SnapAccountService-method-action-types.js';
+export { SnapPlatformWatcher } from './SnapPlatformWatcher.js';
+export type { SnapPlatformWatcherConfig } from './SnapPlatformWatcher.js';
diff --git a/packages/social-controllers/jest.config.js b/packages/social-controllers/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/social-controllers/jest.config.js
+++ b/packages/social-controllers/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/social-controllers/package.json b/packages/social-controllers/package.json
index 2888083f77b..917318000f5 100644
--- a/packages/social-controllers/package.json
+++ b/packages/social-controllers/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/social-controllers",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/social-controllers",
@@ -64,7 +57,6 @@
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/social-controllers/src/SocialController-method-action-types.ts b/packages/social-controllers/src/SocialController-method-action-types.ts
index 116df08618d..84bfe6b3419 100644
--- a/packages/social-controllers/src/SocialController-method-action-types.ts
+++ b/packages/social-controllers/src/SocialController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { SocialController } from './SocialController';
+import type { SocialController } from './SocialController.js';
/**
* Fetches the leaderboard and persists the entries to state.
diff --git a/packages/social-controllers/src/SocialController.test.ts b/packages/social-controllers/src/SocialController.test.ts
index 0d8dc33d58a..8a861f2e266 100644
--- a/packages/social-controllers/src/SocialController.test.ts
+++ b/packages/social-controllers/src/SocialController.test.ts
@@ -5,13 +5,13 @@ import type {
MessengerEvents,
} from '@metamask/messenger';
-import { controllerName } from './social-constants';
-import type { SocialControllerState } from './social-types';
-import type { SocialControllerMessenger } from './SocialController';
+import { controllerName } from './social-constants.js';
+import type { SocialControllerState } from './social-types.js';
+import type { SocialControllerMessenger } from './SocialController.js';
import {
SocialController,
getDefaultSocialControllerState,
-} from './SocialController';
+} from './SocialController.js';
const mockProfileSummary = {
profileId: '550e8400-e29b-41d4-a716-446655440000',
diff --git a/packages/social-controllers/src/SocialController.ts b/packages/social-controllers/src/SocialController.ts
index 30624434022..053e137af20 100644
--- a/packages/social-controllers/src/SocialController.ts
+++ b/packages/social-controllers/src/SocialController.ts
@@ -6,7 +6,7 @@ import type {
import { BaseController } from '@metamask/base-controller';
import type { Messenger } from '@metamask/messenger';
-import { controllerName } from './social-constants';
+import { controllerName } from './social-constants.js';
import type {
FetchLeaderboardOptions,
FollowOptions,
@@ -16,8 +16,8 @@ import type {
SocialControllerState,
UnfollowOptions,
UnfollowResponse,
-} from './social-types';
-import type { SocialControllerMethodActions } from './SocialController-method-action-types';
+} from './social-types.js';
+import type { SocialControllerMethodActions } from './SocialController-method-action-types.js';
import type {
SocialServiceFetchFollowingAction,
SocialServiceFetchLeaderboardAction,
@@ -25,7 +25,7 @@ import type {
SocialServiceOptInToLeaderboardAction,
SocialServiceOptOutOfLeaderboardAction,
SocialServiceUnfollowAction,
-} from './SocialService-method-action-types';
+} from './SocialService-method-action-types.js';
// === MESSENGER ===
diff --git a/packages/social-controllers/src/SocialService-method-action-types.ts b/packages/social-controllers/src/SocialService-method-action-types.ts
index 5f6bcb217b8..a0170f96bae 100644
--- a/packages/social-controllers/src/SocialService-method-action-types.ts
+++ b/packages/social-controllers/src/SocialService-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { SocialService } from './SocialService';
+import type { SocialService } from './SocialService.js';
/**
* Fetches the leaderboard of top traders.
diff --git a/packages/social-controllers/src/SocialService.test.ts b/packages/social-controllers/src/SocialService.test.ts
index 35aaee3dd4d..6e9079ec223 100644
--- a/packages/social-controllers/src/SocialService.test.ts
+++ b/packages/social-controllers/src/SocialService.test.ts
@@ -5,9 +5,9 @@ import type {
MessengerEvents,
} from '@metamask/messenger';
-import { SocialServiceErrorMessage, serviceName } from './social-constants';
-import type { SocialServiceMessenger } from './SocialService';
-import { SocialService } from './SocialService';
+import { SocialServiceErrorMessage, serviceName } from './social-constants.js';
+import type { SocialServiceMessenger } from './SocialService.js';
+import { SocialService } from './SocialService.js';
const BASE_URL = 'http://test.com';
const V1_URL = `${BASE_URL}/api/v1`;
diff --git a/packages/social-controllers/src/SocialService.ts b/packages/social-controllers/src/SocialService.ts
index 7fbd5c26a6e..abaf5f16b67 100644
--- a/packages/social-controllers/src/SocialService.ts
+++ b/packages/social-controllers/src/SocialService.ts
@@ -22,7 +22,7 @@ import {
type as structType,
} from '@metamask/superstruct';
-import { serviceName, SocialServiceErrorMessage } from './social-constants';
+import { serviceName, SocialServiceErrorMessage } from './social-constants.js';
import type {
FeedResponse,
FetchFeedOptions,
@@ -41,9 +41,9 @@ import type {
TraderProfileResponse,
UnfollowOptions,
UnfollowResponse,
-} from './social-types';
-import { TradeStruct } from './social-types';
-import type { SocialServiceMethodActions } from './SocialService-method-action-types';
+} from './social-types.js';
+import { TradeStruct } from './social-types.js';
+import type { SocialServiceMethodActions } from './SocialService-method-action-types.js';
// ---------------------------------------------------------------------------
// Superstruct validation schemas
diff --git a/packages/social-controllers/src/index.test.ts b/packages/social-controllers/src/index.test.ts
index 049d56294a7..279c2f3ee32 100644
--- a/packages/social-controllers/src/index.test.ts
+++ b/packages/social-controllers/src/index.test.ts
@@ -1,4 +1,4 @@
-import { SocialController, SocialService, socialServiceName } from '.';
+import { SocialController, SocialService, socialServiceName } from './..js';
describe('social-controllers exports', () => {
it('exports SocialController class', () => {
diff --git a/packages/social-controllers/src/index.ts b/packages/social-controllers/src/index.ts
index 99c031d3805..ce8cda85776 100644
--- a/packages/social-controllers/src/index.ts
+++ b/packages/social-controllers/src/index.ts
@@ -5,11 +5,11 @@ export type {
SocialControllerMessenger,
SocialControllerOptions,
SocialControllerStateChangeEvent,
-} from './SocialController';
+} from './SocialController.js';
export {
SocialController,
getDefaultSocialControllerState,
-} from './SocialController';
+} from './SocialController.js';
export type {
SocialControllerFollowTraderAction,
@@ -18,14 +18,14 @@ export type {
SocialControllerUnfollowTraderAction,
SocialControllerUpdateFollowingAction,
SocialControllerUpdateLeaderboardAction,
-} from './SocialController-method-action-types';
+} from './SocialController-method-action-types.js';
export type {
SocialServiceActions,
SocialServiceEvents,
SocialServiceMessenger,
-} from './SocialService';
-export { SocialService } from './SocialService';
+} from './SocialService.js';
+export { SocialService } from './SocialService.js';
export type {
SocialServiceFetchClosedPositionsAction,
@@ -40,9 +40,9 @@ export type {
SocialServiceOptInToLeaderboardAction,
SocialServiceOptOutOfLeaderboardAction,
SocialServiceUnfollowAction,
-} from './SocialService-method-action-types';
+} from './SocialService-method-action-types.js';
-export { TradeStruct } from './social-types';
+export { TradeStruct } from './social-types.js';
export type {
FeedItem,
FeedPagination,
@@ -72,9 +72,9 @@ export type {
TraderStats,
UnfollowOptions,
UnfollowResponse,
-} from './social-types';
+} from './social-types.js';
export {
serviceName as socialServiceName,
SocialServiceErrorMessage,
-} from './social-constants';
+} from './social-constants.js';
diff --git a/packages/solana-test-validator-up/jest.config.js b/packages/solana-test-validator-up/jest.config.js
index 8a2791c96d9..35ceea000ec 100644
--- a/packages/solana-test-validator-up/jest.config.js
+++ b/packages/solana-test-validator-up/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/solana-test-validator-up/package.json b/packages/solana-test-validator-up/package.json
index 3ec66fb7c49..6c4cb73ad16 100644
--- a/packages/solana-test-validator-up/package.json
+++ b/packages/solana-test-validator-up/package.json
@@ -19,19 +19,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -40,8 +33,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/solana-test-validator-up",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/solana-test-validator-up",
@@ -60,7 +53,6 @@
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/solana-test-validator-up/src/bin/solana-test-validator-up.ts b/packages/solana-test-validator-up/src/bin/solana-test-validator-up.ts
index 77c33bc3d72..904f7820f75 100644
--- a/packages/solana-test-validator-up/src/bin/solana-test-validator-up.ts
+++ b/packages/solana-test-validator-up/src/bin/solana-test-validator-up.ts
@@ -5,7 +5,7 @@ import {
installSolanaTestValidator,
parseSolanaTestValidatorInstallCliOptions,
readSolanaTestValidatorInstallOptionsFromPackageJson,
-} from '../install';
+} from '../install.js';
async function main(): Promise {
const [command, ...args] = process.argv.slice(2);
diff --git a/packages/solana-test-validator-up/src/index.ts b/packages/solana-test-validator-up/src/index.ts
index b1acf97cfc6..19dbbe96262 100644
--- a/packages/solana-test-validator-up/src/index.ts
+++ b/packages/solana-test-validator-up/src/index.ts
@@ -5,11 +5,11 @@ export {
installSolanaTestValidator,
parseSolanaTestValidatorInstallCliOptions,
readSolanaTestValidatorInstallOptionsFromPackageJson,
-} from './install';
+} from './install.js';
export type {
SolanaTestValidatorArtifactConfig,
SolanaTestValidatorArtifactPlatformConfig,
SolanaTestValidatorInstallDependencies,
SolanaTestValidatorInstallOptions,
SolanaTestValidatorInstallResult,
-} from './install';
+} from './install.js';
diff --git a/packages/solana-test-validator-up/src/install.test.ts b/packages/solana-test-validator-up/src/install.test.ts
index f561c886580..ac8b29af723 100644
--- a/packages/solana-test-validator-up/src/install.test.ts
+++ b/packages/solana-test-validator-up/src/install.test.ts
@@ -23,8 +23,8 @@ import {
installSolanaTestValidator,
parseSolanaTestValidatorInstallCliOptions,
readSolanaTestValidatorInstallOptionsFromPackageJson,
-} from './install';
-import type { SolanaTestValidatorInstallDependencies } from './install';
+} from './install.js';
+import type { SolanaTestValidatorInstallDependencies } from './install.js';
describe('solana-test-validator-up installer', () => {
let tempDirs: string[] = [];
diff --git a/packages/stellar-quickstart-up/jest.config.js b/packages/stellar-quickstart-up/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/stellar-quickstart-up/jest.config.js
+++ b/packages/stellar-quickstart-up/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/stellar-quickstart-up/package.json b/packages/stellar-quickstart-up/package.json
index 9265f105aa6..db60c217e22 100644
--- a/packages/stellar-quickstart-up/package.json
+++ b/packages/stellar-quickstart-up/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/stellar-quickstart-up",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/stellar-quickstart-up",
@@ -56,7 +49,6 @@
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/stellar-quickstart-up/src/index.test.ts b/packages/stellar-quickstart-up/src/index.test.ts
index bc062d3694a..8bcd573227d 100644
--- a/packages/stellar-quickstart-up/src/index.test.ts
+++ b/packages/stellar-quickstart-up/src/index.test.ts
@@ -1,4 +1,4 @@
-import greeter from '.';
+import greeter from './..js';
describe('Test', () => {
it('greets', () => {
diff --git a/packages/storage-service/jest.config.js b/packages/storage-service/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/storage-service/jest.config.js
+++ b/packages/storage-service/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/storage-service/package.json b/packages/storage-service/package.json
index fe64d8e28dd..983840178f6 100644
--- a/packages/storage-service/package.json
+++ b/packages/storage-service/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/storage-service",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/storage-service",
@@ -59,8 +52,8 @@
"@metamask/utils": "^11.11.0"
},
"devDependencies": {
+ "@jest/globals": "^30.4.1",
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/storage-service/src/InMemoryStorageAdapter.test.ts b/packages/storage-service/src/InMemoryStorageAdapter.test.ts
index a1f6ba47493..6718b49c0fb 100644
--- a/packages/storage-service/src/InMemoryStorageAdapter.test.ts
+++ b/packages/storage-service/src/InMemoryStorageAdapter.test.ts
@@ -1,4 +1,6 @@
-import { InMemoryStorageAdapter } from './InMemoryStorageAdapter';
+import { jest } from '@jest/globals';
+
+import { InMemoryStorageAdapter } from './InMemoryStorageAdapter.js';
describe('InMemoryStorageAdapter', () => {
describe('constructor', () => {
diff --git a/packages/storage-service/src/InMemoryStorageAdapter.ts b/packages/storage-service/src/InMemoryStorageAdapter.ts
index 0489744ef8e..3d49f73b54f 100644
--- a/packages/storage-service/src/InMemoryStorageAdapter.ts
+++ b/packages/storage-service/src/InMemoryStorageAdapter.ts
@@ -4,8 +4,8 @@ import type {
InitialStorageData,
StorageAdapter,
StorageGetResult,
-} from './types';
-import { STORAGE_KEY_PREFIX } from './types';
+} from './types.js';
+import { STORAGE_KEY_PREFIX } from './types.js';
/**
* In-memory storage adapter (default fallback).
diff --git a/packages/storage-service/src/StorageService-method-action-types.ts b/packages/storage-service/src/StorageService-method-action-types.ts
index 5bf572f579d..a6a916ebff6 100644
--- a/packages/storage-service/src/StorageService-method-action-types.ts
+++ b/packages/storage-service/src/StorageService-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { StorageService } from './StorageService';
+import type { StorageService } from './StorageService.js';
/**
* Store large JSON data in storage.
diff --git a/packages/storage-service/src/StorageService.test.ts b/packages/storage-service/src/StorageService.test.ts
index 2efa05b147b..4a820612f87 100644
--- a/packages/storage-service/src/StorageService.test.ts
+++ b/packages/storage-service/src/StorageService.test.ts
@@ -1,3 +1,4 @@
+import { jest } from '@jest/globals';
import { Messenger, MOCK_ANY_NAMESPACE } from '@metamask/messenger';
import type {
MockAnyNamespace,
@@ -5,8 +6,8 @@ import type {
MessengerEvents,
} from '@metamask/messenger';
-import { StorageService } from './StorageService';
-import type { StorageServiceMessenger, StorageAdapter } from './types';
+import { StorageService } from './StorageService.js';
+import type { StorageServiceMessenger, StorageAdapter } from './types.js';
describe('StorageService', () => {
let consoleWarnSpy: jest.SpyInstance;
diff --git a/packages/storage-service/src/StorageService.ts b/packages/storage-service/src/StorageService.ts
index dfb5381e624..b48241088e2 100644
--- a/packages/storage-service/src/StorageService.ts
+++ b/packages/storage-service/src/StorageService.ts
@@ -1,13 +1,13 @@
import type { Json } from '@metamask/utils';
-import { InMemoryStorageAdapter } from './InMemoryStorageAdapter';
+import { InMemoryStorageAdapter } from './InMemoryStorageAdapter.js';
import type {
StorageAdapter,
StorageGetResult,
StorageServiceMessenger,
StorageServiceOptions,
-} from './types';
-import { SERVICE_NAME } from './types';
+} from './types.js';
+import { SERVICE_NAME } from './types.js';
// === MESSENGER ===
diff --git a/packages/storage-service/src/index.ts b/packages/storage-service/src/index.ts
index 9c80ea56f05..4643680c29d 100644
--- a/packages/storage-service/src/index.ts
+++ b/packages/storage-service/src/index.ts
@@ -1,8 +1,8 @@
// Export service class
-export { StorageService } from './StorageService';
+export { StorageService } from './StorageService.js';
// Export adapters
-export { InMemoryStorageAdapter } from './InMemoryStorageAdapter';
+export { InMemoryStorageAdapter } from './InMemoryStorageAdapter.js';
// Export types from types.ts
export type {
@@ -14,7 +14,7 @@ export type {
StorageServiceEvents,
StorageServiceMessenger,
StorageServiceItemSetEvent,
-} from './types';
+} from './types.js';
// Export individual action types from generated file
export type {
@@ -23,7 +23,7 @@ export type {
StorageServiceRemoveItemAction,
StorageServiceGetAllKeysAction,
StorageServiceClearAction,
-} from './StorageService-method-action-types';
+} from './StorageService-method-action-types.js';
// Export service name and storage key prefix constants
-export { SERVICE_NAME, STORAGE_KEY_PREFIX } from './types';
+export { SERVICE_NAME, STORAGE_KEY_PREFIX } from './types.js';
diff --git a/packages/storage-service/src/types.ts b/packages/storage-service/src/types.ts
index 7b1e0fe09b2..cc1f4eab80b 100644
--- a/packages/storage-service/src/types.ts
+++ b/packages/storage-service/src/types.ts
@@ -1,7 +1,7 @@
import type { Messenger } from '@metamask/messenger';
import type { Json } from '@metamask/utils';
-import type { StorageServiceMethodActions } from './StorageService-method-action-types';
+import type { StorageServiceMethodActions } from './StorageService-method-action-types.js';
/**
* Initial data structure for populating InMemoryStorageAdapter.
diff --git a/packages/subscription-controller/jest.config.js b/packages/subscription-controller/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/subscription-controller/jest.config.js
+++ b/packages/subscription-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/subscription-controller/package.json b/packages/subscription-controller/package.json
index cef211064d2..c5b7692d56f 100644
--- a/packages/subscription-controller/package.json
+++ b/packages/subscription-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/subscription-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/subscription-controller",
@@ -66,7 +59,6 @@
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/subscription-controller/src/SubscriptionController-method-action-types.ts b/packages/subscription-controller/src/SubscriptionController-method-action-types.ts
index 1c8c6e2e309..d2ad7f4c3d9 100644
--- a/packages/subscription-controller/src/SubscriptionController-method-action-types.ts
+++ b/packages/subscription-controller/src/SubscriptionController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { SubscriptionController } from './SubscriptionController';
+import type { SubscriptionController } from './SubscriptionController.js';
/**
* Gets the pricing information from the subscription service.
diff --git a/packages/subscription-controller/src/SubscriptionController.test.ts b/packages/subscription-controller/src/SubscriptionController.test.ts
index cd24eca3513..ce9daa0d8ae 100644
--- a/packages/subscription-controller/src/SubscriptionController.test.ts
+++ b/packages/subscription-controller/src/SubscriptionController.test.ts
@@ -11,23 +11,23 @@ import {
} from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
-import { jestAdvanceTime } from '../../../tests/helpers';
-import { generateMockTxMeta } from '../tests/utils';
+import { jestAdvanceTime } from '../../../tests/helpers.js';
+import { generateMockTxMeta } from '../tests/utils.js';
import {
controllerName,
SubscriptionControllerErrorMessage,
-} from './constants';
-import { SubscriptionServiceError } from './errors';
+} from './constants.js';
+import { SubscriptionServiceError } from './errors.js';
import {
getDefaultSubscriptionControllerState,
SubscriptionController,
-} from './SubscriptionController';
+} from './SubscriptionController.js';
import type {
AllowedEvents,
SubscriptionControllerMessenger,
SubscriptionControllerOptions,
SubscriptionControllerState,
-} from './SubscriptionController';
+} from './SubscriptionController.js';
import type {
Subscription,
PricingResponse,
@@ -43,7 +43,7 @@ import type {
ProductType,
RecurringInterval,
ISubscriptionService,
-} from './types';
+} from './types.js';
import {
CANCEL_TYPES,
MODAL_TYPE,
@@ -52,7 +52,7 @@ import {
RECURRING_INTERVALS,
SUBSCRIPTION_STATUSES,
SubscriptionUserEvent,
-} from './types';
+} from './types.js';
type AllActions = MessengerActions;
diff --git a/packages/subscription-controller/src/SubscriptionController.ts b/packages/subscription-controller/src/SubscriptionController.ts
index b645fc3d047..7815038838c 100644
--- a/packages/subscription-controller/src/SubscriptionController.ts
+++ b/packages/subscription-controller/src/SubscriptionController.ts
@@ -16,9 +16,13 @@ import {
controllerName,
DEFAULT_POLLING_INTERVAL,
SubscriptionControllerErrorMessage,
-} from './constants';
-import type { SubscriptionControllerMethodActions } from './SubscriptionController-method-action-types';
-import { PAYMENT_TYPES, PRODUCT_TYPES, SUBSCRIPTION_STATUSES } from './types';
+} from './constants.js';
+import type { SubscriptionControllerMethodActions } from './SubscriptionController-method-action-types.js';
+import {
+ PAYMENT_TYPES,
+ PRODUCT_TYPES,
+ SUBSCRIPTION_STATUSES,
+} from './types.js';
import type {
AssignCohortRequest,
BillingPortalResponse,
@@ -40,14 +44,14 @@ import type {
StartCryptoSubscriptionResponse,
StartSubscriptionResponse,
CancelSubscriptionRequest,
-} from './types';
+} from './types.js';
import type {
ISubscriptionService,
PricingResponse,
ProductType,
StartSubscriptionRequest,
Subscription,
-} from './types';
+} from './types.js';
export type SubscriptionControllerState = {
customerId?: string;
@@ -624,8 +628,7 @@ export class SubscriptionController extends StaticIntervalPollingController()<
this.update((state) => {
if (state.lastSelectedPaymentMethod) {
const { [product]: _, ...rest } = state.lastSelectedPaymentMethod;
- state.lastSelectedPaymentMethod =
- rest as typeof state.lastSelectedPaymentMethod;
+ state.lastSelectedPaymentMethod = rest;
}
});
}
diff --git a/packages/subscription-controller/src/SubscriptionService.test.ts b/packages/subscription-controller/src/SubscriptionService.test.ts
index a64902d8ee0..4946f27a443 100644
--- a/packages/subscription-controller/src/SubscriptionService.test.ts
+++ b/packages/subscription-controller/src/SubscriptionService.test.ts
@@ -3,14 +3,14 @@ import {
getEnvUrls,
SubscriptionControllerErrorMessage,
SubscriptionServiceErrorMessage,
-} from './constants';
-import * as constants from './constants';
-import { SubscriptionServiceError } from './errors';
+} from './constants.js';
+import * as constants from './constants.js';
+import { SubscriptionServiceError } from './errors.js';
import {
SUBSCRIPTION_URL,
SubscriptionService,
SubscriptionServiceConfig,
-} from './SubscriptionService';
+} from './SubscriptionService.js';
import type {
StartSubscriptionRequest,
StartCryptoSubscriptionRequest,
@@ -19,7 +19,7 @@ import type {
UpdatePaymentMethodCardRequest,
UpdatePaymentMethodCryptoRequest,
SubscriptionEligibility,
-} from './types';
+} from './types.js';
import {
CANCEL_TYPES,
PAYMENT_TYPES,
@@ -27,7 +27,7 @@ import {
RECURRING_INTERVALS,
SUBSCRIPTION_STATUSES,
SubscriptionUserEvent,
-} from './types';
+} from './types.js';
// Mock data
const MOCK_SUBSCRIPTION: Subscription = {
diff --git a/packages/subscription-controller/src/SubscriptionService.ts b/packages/subscription-controller/src/SubscriptionService.ts
index 915fdb2cb57..37acb318146 100644
--- a/packages/subscription-controller/src/SubscriptionService.ts
+++ b/packages/subscription-controller/src/SubscriptionService.ts
@@ -2,14 +2,14 @@ import {
getEnvUrls,
SubscriptionControllerErrorMessage,
SubscriptionServiceErrorMessage,
-} from './constants';
-import type { Env } from './constants';
+} from './constants.js';
+import type { Env } from './constants.js';
import {
createSentryError,
getSubscriptionErrorFromResponse,
SubscriptionServiceError,
-} from './errors';
-import { createModuleLogger, projectLogger } from './logger';
+} from './errors.js';
+import { createModuleLogger, projectLogger } from './logger.js';
import type {
AssignCohortRequest,
AuthUtils,
@@ -32,7 +32,7 @@ import type {
LinkRewardsRequest,
SubscriptionApiGeneralResponse,
CancelSubscriptionRequest,
-} from './types';
+} from './types.js';
export type SubscriptionServiceConfig = {
env: Env;
diff --git a/packages/subscription-controller/src/constants.test.ts b/packages/subscription-controller/src/constants.test.ts
index a2277bc61a1..9afc5f2f779 100644
--- a/packages/subscription-controller/src/constants.test.ts
+++ b/packages/subscription-controller/src/constants.test.ts
@@ -1,5 +1,5 @@
-import type { Env } from './constants';
-import { getEnvUrls, controllerName } from './constants';
+import type { Env } from './constants.js';
+import { getEnvUrls, controllerName } from './constants.js';
describe('constants', () => {
describe('getEnvUrls', () => {
diff --git a/packages/subscription-controller/src/constants.ts b/packages/subscription-controller/src/constants.ts
index c7fa0ecc456..eba4888352d 100644
--- a/packages/subscription-controller/src/constants.ts
+++ b/packages/subscription-controller/src/constants.ts
@@ -1,4 +1,4 @@
-import { SUBSCRIPTION_STATUSES } from './types';
+import { SUBSCRIPTION_STATUSES } from './types.js';
export const controllerName = 'SubscriptionController';
diff --git a/packages/subscription-controller/src/errors.test.ts b/packages/subscription-controller/src/errors.test.ts
index 7b805568ae7..4bc7c15af71 100644
--- a/packages/subscription-controller/src/errors.test.ts
+++ b/packages/subscription-controller/src/errors.test.ts
@@ -3,7 +3,7 @@ import {
createSentryError,
getSubscriptionErrorFromResponse,
SubscriptionServiceError,
-} from './errors';
+} from './errors.js';
type MockResponseOptions = {
status?: number;
diff --git a/packages/subscription-controller/src/errors.ts b/packages/subscription-controller/src/errors.ts
index cb2e29c0f1f..30c2e17d6dc 100644
--- a/packages/subscription-controller/src/errors.ts
+++ b/packages/subscription-controller/src/errors.ts
@@ -1,4 +1,4 @@
-import { SubscriptionApiError } from './types';
+import { SubscriptionApiError } from './types.js';
export class SubscriptionServiceError extends Error {
/**
diff --git a/packages/subscription-controller/src/index.ts b/packages/subscription-controller/src/index.ts
index b1aa364de5a..d52e1c57fb6 100644
--- a/packages/subscription-controller/src/index.ts
+++ b/packages/subscription-controller/src/index.ts
@@ -8,7 +8,7 @@ export type {
SubscriptionControllerStateChangeEvent,
AllowedActions,
AllowedEvents,
-} from './SubscriptionController';
+} from './SubscriptionController.js';
export type {
SubscriptionControllerGetPricingAction,
SubscriptionControllerGetSubscriptionsAction,
@@ -33,11 +33,11 @@ export type {
SubscriptionControllerClearStateAction,
SubscriptionControllerTriggerAccessTokenRefreshAction,
SubscriptionControllerStopAllPollingAction,
-} from './SubscriptionController-method-action-types';
+} from './SubscriptionController-method-action-types.js';
export {
SubscriptionController,
getDefaultSubscriptionControllerState,
-} from './SubscriptionController';
+} from './SubscriptionController.js';
export type {
SubscriptionApiError,
Subscription,
@@ -84,7 +84,7 @@ export type {
AssignCohortRequest,
GetSubscriptionsEligibilitiesRequest,
ModalType,
-} from './types';
+} from './types.js';
export {
CANCEL_TYPES,
CRYPTO_PAYMENT_METHOD_ERRORS,
@@ -96,12 +96,12 @@ export {
COHORT_NAMES,
BALANCE_CATEGORIES,
MODAL_TYPE,
-} from './types';
-export { SubscriptionServiceError } from './errors';
+} from './types.js';
+export { SubscriptionServiceError } from './errors.js';
export {
Env,
SubscriptionControllerErrorMessage,
SubscriptionServiceErrorMessage,
-} from './constants';
-export type { SubscriptionServiceConfig } from './SubscriptionService';
-export { SubscriptionService } from './SubscriptionService';
+} from './constants.js';
+export type { SubscriptionServiceConfig } from './SubscriptionService.js';
+export { SubscriptionService } from './SubscriptionService.js';
diff --git a/packages/subscription-controller/src/logger.ts b/packages/subscription-controller/src/logger.ts
index ca017b5ba54..abd139116dc 100644
--- a/packages/subscription-controller/src/logger.ts
+++ b/packages/subscription-controller/src/logger.ts
@@ -1,6 +1,6 @@
import { createProjectLogger, createModuleLogger } from '@metamask/utils';
-import { controllerName } from './constants';
+import { controllerName } from './constants.js';
export const projectLogger = createProjectLogger(controllerName);
diff --git a/packages/transaction-controller/jest.config.js b/packages/transaction-controller/jest.config.js
index 5fc74a1ac09..13de5744d35 100644
--- a/packages/transaction-controller/jest.config.js
+++ b/packages/transaction-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/transaction-controller/package.json b/packages/transaction-controller/package.json
index ca3422fecfb..3d755084c69 100644
--- a/packages/transaction-controller/package.json
+++ b/packages/transaction-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/transaction-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/transaction-controller",
@@ -80,7 +73,7 @@
"bn.js": "^5.2.1",
"eth-method-registry": "^4.0.0",
"fast-json-patch": "^3.1.1",
- "lodash": "^4.17.21",
+ "lodash-es": "^4.17.21",
"uuid": "^8.3.2"
},
"devDependencies": {
@@ -90,7 +83,6 @@
"@metamask/eth-block-tracker": "^15.0.0",
"@metamask/eth-json-rpc-provider": "^6.0.1",
"@metamask/ethjs-provider-http": "^0.3.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/bn.js": "^5.1.5",
"@types/jest": "^29.5.14",
"@types/node": "^16.18.54",
diff --git a/packages/transaction-controller/src/TransactionController-method-action-types.ts b/packages/transaction-controller/src/TransactionController-method-action-types.ts
index ab865d28b14..194d8a98d4e 100644
--- a/packages/transaction-controller/src/TransactionController-method-action-types.ts
+++ b/packages/transaction-controller/src/TransactionController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { TransactionController } from './TransactionController';
+import type { TransactionController } from './TransactionController.js';
/**
* Handle new method data request.
diff --git a/packages/transaction-controller/src/TransactionController.test.ts b/packages/transaction-controller/src/TransactionController.test.ts
index a1c1d072381..124d4118a88 100644
--- a/packages/transaction-controller/src/TransactionController.test.ts
+++ b/packages/transaction-controller/src/TransactionController.test.ts
@@ -1,4 +1,3 @@
-/* eslint-disable jest/unbound-method */
/* eslint-disable @typescript-eslint/naming-convention */
/* eslint-disable camelcase */
/* eslint-disable jest/expect-expect */
@@ -42,34 +41,34 @@ import assert from 'assert';
// eslint-disable-next-line import-x/namespace
import * as uuidModule from 'uuid';
-import { FakeBlockTracker } from '../../../tests/fake-block-tracker';
-import { FakeProvider } from '../../../tests/fake-provider';
-import { flushPromises } from '../../../tests/helpers';
+import { FakeBlockTracker } from '../../../tests/fake-block-tracker.js';
+import { FakeProvider } from '../../../tests/fake-provider.js';
+import { flushPromises } from '../../../tests/helpers.js';
import {
buildCustomNetworkClientConfiguration,
buildMockFindNetworkClientIdByChainId,
buildMockGetNetworkClientById,
-} from '../../network-controller/tests/helpers';
-import { CHAIN_IDS } from './constants';
-import { DefaultGasFeeFlow } from './gas-flows/DefaultGasFeeFlow';
-import { LineaGasFeeFlow } from './gas-flows/LineaGasFeeFlow';
-import { RandomisedEstimationsGasFeeFlow } from './gas-flows/RandomisedEstimationsGasFeeFlow';
-import { TestGasFeeFlow } from './gas-flows/TestGasFeeFlow';
+} from '../../network-controller/tests/helpers.js';
+import { CHAIN_IDS } from './constants.js';
+import { DefaultGasFeeFlow } from './gas-flows/DefaultGasFeeFlow.js';
+import { LineaGasFeeFlow } from './gas-flows/LineaGasFeeFlow.js';
+import { RandomisedEstimationsGasFeeFlow } from './gas-flows/RandomisedEstimationsGasFeeFlow.js';
+import { TestGasFeeFlow } from './gas-flows/TestGasFeeFlow.js';
import {
updateTransactionGasEstimates,
GasFeePoller,
-} from './helpers/GasFeePoller';
-import { MethodDataHelper } from './helpers/MethodDataHelper';
-import { MultichainTrackingHelper } from './helpers/MultichainTrackingHelper';
-import { PendingTransactionTracker } from './helpers/PendingTransactionTracker';
-import { shouldResimulate } from './helpers/ResimulateHelper';
-import { ExtraTransactionsPublishHook } from './hooks/ExtraTransactionsPublishHook';
+} from './helpers/GasFeePoller.js';
+import { MethodDataHelper } from './helpers/MethodDataHelper.js';
+import { MultichainTrackingHelper } from './helpers/MultichainTrackingHelper.js';
+import { PendingTransactionTracker } from './helpers/PendingTransactionTracker.js';
+import { shouldResimulate } from './helpers/ResimulateHelper.js';
+import { ExtraTransactionsPublishHook } from './hooks/ExtraTransactionsPublishHook.js';
import type {
MethodData,
TransactionControllerMessenger,
TransactionControllerOptions,
-} from './TransactionController';
-import { TransactionController } from './TransactionController';
+} from './TransactionController.js';
+import { TransactionController } from './TransactionController.js';
import type {
TransactionMeta,
DappSuggestedGasFees,
@@ -84,7 +83,7 @@ import type {
GasFeeEstimates,
SimulationData,
GetSimulationConfig,
-} from './types';
+} from './types.js';
import {
GasFeeEstimateLevel,
GasFeeEstimateType,
@@ -95,35 +94,35 @@ import {
TransactionStatus,
TransactionType,
WalletDevice,
-} from './types';
-import { getBalanceChanges } from './utils/balance-changes';
-import { addTransactionBatch } from './utils/batch';
-import { getDelegationAddress } from './utils/eip7702';
+} from './types.js';
+import { getBalanceChanges } from './utils/balance-changes.js';
+import { addTransactionBatch } from './utils/batch.js';
+import { getDelegationAddress } from './utils/eip7702.js';
import {
getSubmitHistoryLimit,
getTransactionHistoryLimit,
-} from './utils/feature-flags';
-import { updateFirstTimeInteraction } from './utils/first-time-interaction';
+} from './utils/feature-flags.js';
+import { updateFirstTimeInteraction } from './utils/first-time-interaction.js';
+import { getGasFeeTokens } from './utils/gas-fee-tokens.js';
+import { updateGasFees } from './utils/gas-fees.js';
+import { getGasFeeFlow } from './utils/gas-flow.js';
import {
addGasBuffer,
estimateGas,
estimateGasBatch,
updateGas,
-} from './utils/gas';
-import { getGasFeeTokens } from './utils/gas-fee-tokens';
-import { updateGasFees } from './utils/gas-fees';
-import { getGasFeeFlow } from './utils/gas-flow';
+} from './utils/gas.js';
import {
getTransactionLayer1GasFee,
updateTransactionLayer1GasFee,
-} from './utils/layer1-gas-fee-flow';
-import { rpcRequest } from './utils/provider';
+} from './utils/layer1-gas-fee-flow.js';
+import { rpcRequest } from './utils/provider.js';
import {
updatePostTransactionBalance,
updateSwapsTransaction,
-} from './utils/swaps';
-import * as transactionTypeUtils from './utils/transaction-type';
-import { ErrorCode } from './utils/validation';
+} from './utils/swaps.js';
+import * as transactionTypeUtils from './utils/transaction-type.js';
+import { ErrorCode } from './utils/validation.js';
type AllTransactionControllerActions =
MessengerActions;
@@ -1325,6 +1324,7 @@ describe('TransactionController', () => {
it('updates state when helper emits update event', async () => {
const { controller } = setupController();
+ // eslint-disable-next-line jest/unbound-method
jest.mocked(methodDataHelperMock.hub.on).mock.calls[0][1]({
fourBytePrefix: '0x12345678',
methodData: METHOD_DATA_MOCK,
@@ -5769,8 +5769,7 @@ describe('TransactionController', () => {
};
// Send the transaction to put it in the process of being signed
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
- controller.approveTransactionsWithSameNonce([mockTransactionParam]);
+ void controller.approveTransactionsWithSameNonce([mockTransactionParam]);
// Now send it one more time to test that it doesn't get signed again
const result = await controller.approveTransactionsWithSameNonce([
diff --git a/packages/transaction-controller/src/TransactionController.ts b/packages/transaction-controller/src/TransactionController.ts
index b0ff4cd3533..f6d20469b53 100644
--- a/packages/transaction-controller/src/TransactionController.ts
+++ b/packages/transaction-controller/src/TransactionController.ts
@@ -68,33 +68,33 @@ import { add0x } from '@metamask/utils';
// This package purposefully relies on Node's EventEmitter module.
// eslint-disable-next-line import-x/no-nodejs-modules
import { EventEmitter } from 'events';
-import { cloneDeep, mapValues, merge, noop, pickBy, sortBy } from 'lodash';
+import { cloneDeep, mapValues, merge, noop, pickBy, sortBy } from 'lodash-es';
import { v1 as random } from 'uuid';
-import { DefaultGasFeeFlow } from './gas-flows/DefaultGasFeeFlow';
-import { LineaGasFeeFlow } from './gas-flows/LineaGasFeeFlow';
-import { MantleLayer1GasFeeFlow } from './gas-flows/MantleLayer1GasFeeFlow';
-import { OptimismLayer1GasFeeFlow } from './gas-flows/OptimismLayer1GasFeeFlow';
-import { RandomisedEstimationsGasFeeFlow } from './gas-flows/RandomisedEstimationsGasFeeFlow';
-import { ScrollLayer1GasFeeFlow } from './gas-flows/ScrollLayer1GasFeeFlow';
-import { TestGasFeeFlow } from './gas-flows/TestGasFeeFlow';
+import { DefaultGasFeeFlow } from './gas-flows/DefaultGasFeeFlow.js';
+import { LineaGasFeeFlow } from './gas-flows/LineaGasFeeFlow.js';
+import { MantleLayer1GasFeeFlow } from './gas-flows/MantleLayer1GasFeeFlow.js';
+import { OptimismLayer1GasFeeFlow } from './gas-flows/OptimismLayer1GasFeeFlow.js';
+import { RandomisedEstimationsGasFeeFlow } from './gas-flows/RandomisedEstimationsGasFeeFlow.js';
+import { ScrollLayer1GasFeeFlow } from './gas-flows/ScrollLayer1GasFeeFlow.js';
+import { TestGasFeeFlow } from './gas-flows/TestGasFeeFlow.js';
import {
GasFeePoller,
updateTransactionGasProperties,
updateTransactionGasEstimates,
-} from './helpers/GasFeePoller';
-import { MethodDataHelper } from './helpers/MethodDataHelper';
-import { MultichainTrackingHelper } from './helpers/MultichainTrackingHelper';
-import { PendingTransactionTracker } from './helpers/PendingTransactionTracker';
-import type { ResimulateResponse } from './helpers/ResimulateHelper';
+} from './helpers/GasFeePoller.js';
+import { MethodDataHelper } from './helpers/MethodDataHelper.js';
+import { MultichainTrackingHelper } from './helpers/MultichainTrackingHelper.js';
+import { PendingTransactionTracker } from './helpers/PendingTransactionTracker.js';
+import type { ResimulateResponse } from './helpers/ResimulateHelper.js';
import {
ResimulateHelper,
hasSimulationDataChanged,
shouldResimulate,
-} from './helpers/ResimulateHelper';
-import { ExtraTransactionsPublishHook } from './hooks/ExtraTransactionsPublishHook';
-import { projectLogger as log } from './logger';
-import type { TransactionControllerMethodActions } from './TransactionController-method-action-types';
+} from './helpers/ResimulateHelper.js';
+import { ExtraTransactionsPublishHook } from './hooks/ExtraTransactionsPublishHook.js';
+import { projectLogger as log } from './logger.js';
+import type { TransactionControllerMethodActions } from './TransactionController-method-action-types.js';
import type {
DappSuggestedGasFees,
Layer1GasFeeFlow,
@@ -129,7 +129,7 @@ import type {
AddTransactionOptions,
PublishHookResult,
GetGasFeeTokensRequest,
-} from './types';
+} from './types.js';
import {
GasFeeEstimateLevel,
TransactionContainerType,
@@ -137,49 +137,53 @@ import {
TransactionType,
TransactionStatus,
SimulationErrorCode,
-} from './types';
-import { getBalanceChanges } from './utils/balance-changes';
-import { addTransactionBatch, isAtomicBatchSupported } from './utils/batch';
+} from './types.js';
+import { getBalanceChanges } from './utils/balance-changes.js';
+import { addTransactionBatch, isAtomicBatchSupported } from './utils/batch.js';
import {
generateEIP7702BatchTransaction,
getDelegationAddress,
signAuthorizationList,
-} from './utils/eip7702';
-import { validateConfirmedExternalTransaction } from './utils/external-transactions';
+} from './utils/eip7702.js';
+import { validateConfirmedExternalTransaction } from './utils/external-transactions.js';
import {
getSubmitHistoryLimit,
getTransactionHistoryLimit,
-} from './utils/feature-flags';
-import { updateFirstTimeInteraction } from './utils/first-time-interaction';
-import type { EstimateGasBatchResult } from './utils/gas';
+} from './utils/feature-flags.js';
+import { updateFirstTimeInteraction } from './utils/first-time-interaction.js';
+import {
+ checkGasFeeTokenBeforePublish,
+ getGasFeeTokens,
+} from './utils/gas-fee-tokens.js';
+import { updateGasFees } from './utils/gas-fees.js';
+import { getGasFeeFlow } from './utils/gas-flow.js';
+import type { EstimateGasBatchResult } from './utils/gas.js';
import {
addGasBuffer,
estimateGas,
estimateGasBatch,
updateGas,
-} from './utils/gas';
-import {
- checkGasFeeTokenBeforePublish,
- getGasFeeTokens,
-} from './utils/gas-fee-tokens';
-import { updateGasFees } from './utils/gas-fees';
-import { getGasFeeFlow } from './utils/gas-flow';
+} from './utils/gas.js';
import {
getTransactionLayer1GasFee,
updateTransactionLayer1GasFee,
-} from './utils/layer1-gas-fee-flow';
+} from './utils/layer1-gas-fee-flow.js';
import {
getAndFormatTransactionsForNonceTracker,
getNextNonce,
-} from './utils/nonce';
-import { prepareTransaction, serializeTransaction } from './utils/prepare';
-import { getChainId, getNetworkClientId, rpcRequest } from './utils/provider';
-import { getTransactionParamsWithIncreasedGasFee } from './utils/retry';
+} from './utils/nonce.js';
+import { prepareTransaction, serializeTransaction } from './utils/prepare.js';
+import {
+ getChainId,
+ getNetworkClientId,
+ rpcRequest,
+} from './utils/provider.js';
+import { getTransactionParamsWithIncreasedGasFee } from './utils/retry.js';
import {
updatePostTransactionBalance,
updateSwapsTransaction,
-} from './utils/swaps';
-import { determineTransactionType } from './utils/transaction-type';
+} from './utils/swaps.js';
+import { determineTransactionType } from './utils/transaction-type.js';
import {
normalizeTransactionParams,
isEIP1559Transaction,
@@ -189,12 +193,12 @@ import {
normalizeTxError,
normalizeGasFeeValues,
setEnvelopeType,
-} from './utils/utils';
+} from './utils/utils.js';
import {
ErrorCode,
validateTransactionOrigin,
validateTxParams,
-} from './utils/validation';
+} from './utils/validation.js';
/**
* Metadata for the TransactionController state, describing how to "anonymize"
@@ -1223,7 +1227,7 @@ export class TransactionController extends BaseController<
} else {
const newTransactionMeta = cloneDeep(addedTransactionMeta);
- this.#updateGasProperties(newTransactionMeta)
+ void this.#updateGasProperties(newTransactionMeta)
.then(() => {
this.#updateTransactionInternal(
{
@@ -1259,7 +1263,7 @@ export class TransactionController extends BaseController<
this.#addMetadata(addedTransactionMeta);
- delegationAddressPromise
+ void delegationAddressPromise
.then((delegationAddress) => {
this.#updateTransactionInternal(
{
@@ -2351,13 +2355,12 @@ export class TransactionController extends BaseController<
// object as predicate keys can be either.
if (key in transaction.txParams) {
// TODO: Replace `any` with type
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- if (predicate((transaction.txParams as any)[key]) === false) {
+
+ if (predicate(transaction.txParams[key]) === false) {
return false;
}
// TODO: Replace `any` with type
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- } else if (predicate((transaction as any)[key]) === false) {
+ } else if (predicate(transaction[key]) === false) {
return false;
}
}
diff --git a/packages/transaction-controller/src/TransactionControllerIntegration.test.ts b/packages/transaction-controller/src/TransactionControllerIntegration.test.ts
index 6a577a314c4..1e23ab5b85e 100644
--- a/packages/transaction-controller/src/TransactionControllerIntegration.test.ts
+++ b/packages/transaction-controller/src/TransactionControllerIntegration.test.ts
@@ -35,14 +35,14 @@ import type { RemoteFeatureFlagControllerGetStateAction } from '@metamask/remote
import assert from 'assert';
import { v4 as uuidV4 } from 'uuid';
-import { jestAdvanceTime } from '../../../tests/helpers';
-import { mockNetwork } from '../../../tests/mock-network';
+import { jestAdvanceTime } from '../../../tests/helpers.js';
+import { mockNetwork } from '../../../tests/mock-network.js';
import {
buildAddNetworkFields,
buildCustomNetworkClientConfiguration,
buildUpdateNetworkCustomRpcEndpointFields,
-} from '../../network-controller/tests/helpers';
-import { getDefaultRemoteFeatureFlagControllerState } from '../../remote-feature-flag-controller/src/remote-feature-flag-controller';
+} from '../../network-controller/tests/helpers.js';
+import { getDefaultRemoteFeatureFlagControllerState } from '../../remote-feature-flag-controller/src/remote-feature-flag-controller.js';
import {
buildEthGasPriceRequestMock,
buildEthBlockNumberRequestMock,
@@ -53,14 +53,14 @@ import {
buildEthGetBlockByHashRequestMock,
buildEthSendRawTransactionRequestMock,
buildEthGetTransactionReceiptRequestMock,
-} from '../tests/JsonRpcRequestMocks';
+} from '../tests/JsonRpcRequestMocks.js';
import type {
TransactionControllerMessenger,
TransactionControllerOptions,
-} from './TransactionController';
-import { TransactionController } from './TransactionController';
-import type { InternalAccount } from './types';
-import { TransactionStatus, TransactionType } from './types';
+} from './TransactionController.js';
+import { TransactionController } from './TransactionController.js';
+import type { InternalAccount } from './types.js';
+import { TransactionStatus, TransactionType } from './types.js';
jest.mock('uuid', () => {
const actual = jest.requireActual('uuid');
@@ -1316,9 +1316,7 @@ describe('TransactionController Integration', () => {
]);
expect(secondNonceLockIfAcquired).toBeNull();
- // TODO: Either fix this lint violation or explain why it's necessary to ignore.
- // eslint-disable-next-line @typescript-eslint/await-thenable
- await firstNonceLock.releaseLock();
+ firstNonceLock.releaseLock();
await jestAdvanceTime({ duration: 1 });
secondNonceLockIfAcquired = await Promise.race([
@@ -1409,9 +1407,7 @@ describe('TransactionController Integration', () => {
]);
expect(secondNonceLockIfAcquired).toBeNull();
- // TODO: Either fix this lint violation or explain why it's necessary to ignore.
- // eslint-disable-next-line @typescript-eslint/await-thenable
- await firstNonceLock.releaseLock();
+ firstNonceLock.releaseLock();
await jestAdvanceTime({ duration: 1 });
secondNonceLockIfAcquired = await Promise.race([
diff --git a/packages/transaction-controller/src/api/accounts-api.test.ts b/packages/transaction-controller/src/api/accounts-api.test.ts
index fbcc6fc196a..59d718df33a 100644
--- a/packages/transaction-controller/src/api/accounts-api.test.ts
+++ b/packages/transaction-controller/src/api/accounts-api.test.ts
@@ -1,8 +1,8 @@
import { successfulFetch } from '@metamask/controller-utils';
-import { FirstTimeInteractionError } from '../errors';
-import type { GetAccountAddressRelationshipRequest } from './accounts-api';
-import { getAccountAddressRelationship } from './accounts-api';
+import { FirstTimeInteractionError } from '../errors.js';
+import type { GetAccountAddressRelationshipRequest } from './accounts-api.js';
+import { getAccountAddressRelationship } from './accounts-api.js';
jest.mock('@metamask/controller-utils', () => ({
...jest.requireActual('@metamask/controller-utils'),
diff --git a/packages/transaction-controller/src/api/accounts-api.ts b/packages/transaction-controller/src/api/accounts-api.ts
index 69fd3235112..4684955ece8 100644
--- a/packages/transaction-controller/src/api/accounts-api.ts
+++ b/packages/transaction-controller/src/api/accounts-api.ts
@@ -1,8 +1,8 @@
import { successfulFetch } from '@metamask/controller-utils';
import { createModuleLogger } from '@metamask/utils';
-import { FirstTimeInteractionError } from '../errors';
-import { projectLogger } from '../logger';
+import { FirstTimeInteractionError } from '../errors.js';
+import { projectLogger } from '../logger.js';
export type AccountAddressRelationshipResponse = {
chainId?: number;
diff --git a/packages/transaction-controller/src/api/simulation-api.test.ts b/packages/transaction-controller/src/api/simulation-api.test.ts
index c70e5f2d527..8148c9bee08 100644
--- a/packages/transaction-controller/src/api/simulation-api.test.ts
+++ b/packages/transaction-controller/src/api/simulation-api.test.ts
@@ -1,10 +1,13 @@
import type { Hex } from '@metamask/utils';
-import { cloneDeep } from 'lodash';
+import { cloneDeep } from 'lodash-es';
import type { GetSimulationConfig } from 'src';
-import { CHAIN_IDS, DELEGATION_MANAGER_ADDRESSES } from '../constants';
-import type { SimulationRequest, SimulationResponse } from './simulation-api';
-import { simulateTransactions } from './simulation-api';
+import { CHAIN_IDS, DELEGATION_MANAGER_ADDRESSES } from '../constants.js';
+import type {
+ SimulationRequest,
+ SimulationResponse,
+} from './simulation-api.js';
+import { simulateTransactions } from './simulation-api.js';
const CHAIN_ID_MOCK = '0x1';
const CHAIN_ID_MOCK_DECIMAL = 1;
diff --git a/packages/transaction-controller/src/api/simulation-api.ts b/packages/transaction-controller/src/api/simulation-api.ts
index 4cdd3bfa795..ff16cbbb050 100644
--- a/packages/transaction-controller/src/api/simulation-api.ts
+++ b/packages/transaction-controller/src/api/simulation-api.ts
@@ -1,15 +1,18 @@
import { convertHexToDecimal } from '@metamask/controller-utils';
import { createModuleLogger } from '@metamask/utils';
import type { Hex } from '@metamask/utils';
-import { cloneDeep } from 'lodash';
+import { cloneDeep } from 'lodash-es';
import {
CODE_DELEGATION_MANAGER_NO_SIGNATURE_ERRORS,
DELEGATION_MANAGER_ADDRESSES,
-} from '../constants';
-import { SimulationChainNotSupportedError, SimulationError } from '../errors';
-import { projectLogger } from '../logger';
-import type { GetSimulationConfig } from '../types';
+} from '../constants.js';
+import {
+ SimulationChainNotSupportedError,
+ SimulationError,
+} from '../errors.js';
+import { projectLogger } from '../logger.js';
+import type { GetSimulationConfig } from '../types.js';
const log = createModuleLogger(projectLogger, 'simulation-api');
diff --git a/packages/transaction-controller/src/errors.ts b/packages/transaction-controller/src/errors.ts
index 53f79810aa5..d4e83a8888c 100644
--- a/packages/transaction-controller/src/errors.ts
+++ b/packages/transaction-controller/src/errors.ts
@@ -1,6 +1,6 @@
import type { Hex } from '@metamask/utils';
-import { SimulationErrorCode } from './types';
+import { SimulationErrorCode } from './types.js';
export class SimulationError extends Error {
code?: string | number;
diff --git a/packages/transaction-controller/src/gas-flows/DefaultGasFeeFlow.test.ts b/packages/transaction-controller/src/gas-flows/DefaultGasFeeFlow.test.ts
index 97bdcf42f48..b253d1438e1 100644
--- a/packages/transaction-controller/src/gas-flows/DefaultGasFeeFlow.test.ts
+++ b/packages/transaction-controller/src/gas-flows/DefaultGasFeeFlow.test.ts
@@ -6,15 +6,15 @@ import type {
} from '@metamask/gas-fee-controller';
import { GAS_ESTIMATE_TYPES } from '@metamask/gas-fee-controller';
-import type { TransactionControllerMessenger } from '../TransactionController';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
import type {
FeeMarketGasFeeEstimates,
GasPriceGasFeeEstimates,
LegacyGasFeeEstimates,
TransactionMeta,
-} from '../types';
-import { GasFeeEstimateType, TransactionStatus } from '../types';
-import { DefaultGasFeeFlow } from './DefaultGasFeeFlow';
+} from '../types.js';
+import { GasFeeEstimateType, TransactionStatus } from '../types.js';
+import { DefaultGasFeeFlow } from './DefaultGasFeeFlow.js';
const TRANSACTION_META_MOCK: TransactionMeta = {
id: '1',
diff --git a/packages/transaction-controller/src/gas-flows/DefaultGasFeeFlow.ts b/packages/transaction-controller/src/gas-flows/DefaultGasFeeFlow.ts
index 1810023ec5a..c56223ef692 100644
--- a/packages/transaction-controller/src/gas-flows/DefaultGasFeeFlow.ts
+++ b/packages/transaction-controller/src/gas-flows/DefaultGasFeeFlow.ts
@@ -7,7 +7,7 @@ import { GAS_ESTIMATE_TYPES } from '@metamask/gas-fee-controller';
import type { Hex } from '@metamask/utils';
import { createModuleLogger } from '@metamask/utils';
-import { projectLogger } from '../logger';
+import { projectLogger } from '../logger.js';
import type {
FeeMarketGasFeeEstimateForLevel,
FeeMarketGasFeeEstimates,
@@ -17,9 +17,9 @@ import type {
GasFeeFlowResponse,
GasPriceGasFeeEstimates,
LegacyGasFeeEstimates,
-} from '../types';
-import { GasFeeEstimateLevel, GasFeeEstimateType } from '../types';
-import { gweiDecimalToWeiHex } from '../utils/gas-fees';
+} from '../types.js';
+import { GasFeeEstimateLevel, GasFeeEstimateType } from '../types.js';
+import { gweiDecimalToWeiHex } from '../utils/gas-fees.js';
const log = createModuleLogger(projectLogger, 'default-gas-fee-flow');
@@ -62,12 +62,14 @@ export class DefaultGasFeeFlow implements GasFeeFlow {
#getFeeMarkEstimates(
gasFeeEstimates: FeeMarketGasPriceEstimate,
): FeeMarketGasFeeEstimates {
- const levels = Object.values(GasFeeEstimateLevel).reduce(
+ const levels = Object.values(GasFeeEstimateLevel).reduce<
+ Omit
+ >(
(result, level) => ({
...result,
[level]: this.#getFeeMarketLevel(gasFeeEstimates, level),
}),
- {} as Omit,
+ {},
);
return {
@@ -79,12 +81,14 @@ export class DefaultGasFeeFlow implements GasFeeFlow {
#getLegacyEstimates(
gasFeeEstimates: LegacyGasPriceEstimate,
): LegacyGasFeeEstimates {
- const levels = Object.values(GasFeeEstimateLevel).reduce(
+ const levels = Object.values(GasFeeEstimateLevel).reduce<
+ Omit
+ >(
(result, level) => ({
...result,
[level]: this.#getLegacyLevel(gasFeeEstimates, level),
}),
- {} as Omit,
+ {},
);
return {
diff --git a/packages/transaction-controller/src/gas-flows/LineaGasFeeFlow.test.ts b/packages/transaction-controller/src/gas-flows/LineaGasFeeFlow.test.ts
index 2988ce3f262..7e35e21412a 100644
--- a/packages/transaction-controller/src/gas-flows/LineaGasFeeFlow.test.ts
+++ b/packages/transaction-controller/src/gas-flows/LineaGasFeeFlow.test.ts
@@ -1,22 +1,22 @@
import type { GasFeeState } from '@metamask/gas-fee-controller';
import { GAS_ESTIMATE_TYPES } from '@metamask/gas-fee-controller';
-import { CHAIN_IDS } from '../constants';
-import type { TransactionControllerMessenger } from '../TransactionController';
+import { CHAIN_IDS } from '../constants.js';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
import type {
FeeMarketGasFeeEstimates,
GasFeeFlowRequest,
GasFeeFlowResponse,
TransactionMeta,
-} from '../types';
+} from '../types.js';
import {
GasFeeEstimateLevel,
GasFeeEstimateType,
TransactionStatus,
-} from '../types';
-import { rpcRequest } from '../utils/provider';
-import { DefaultGasFeeFlow } from './DefaultGasFeeFlow';
-import { LineaGasFeeFlow } from './LineaGasFeeFlow';
+} from '../types.js';
+import { rpcRequest } from '../utils/provider.js';
+import { DefaultGasFeeFlow } from './DefaultGasFeeFlow.js';
+import { LineaGasFeeFlow } from './LineaGasFeeFlow.js';
jest.mock('../utils/provider', () => ({
rpcRequest: jest.fn(),
diff --git a/packages/transaction-controller/src/gas-flows/LineaGasFeeFlow.ts b/packages/transaction-controller/src/gas-flows/LineaGasFeeFlow.ts
index fcdadaf94f5..004bfef53ed 100644
--- a/packages/transaction-controller/src/gas-flows/LineaGasFeeFlow.ts
+++ b/packages/transaction-controller/src/gas-flows/LineaGasFeeFlow.ts
@@ -4,18 +4,18 @@ import { createModuleLogger } from '@metamask/utils';
import type { Hex } from '@metamask/utils';
import type BN from 'bn.js';
-import { projectLogger } from '../logger';
-import type { TransactionControllerMessenger } from '../TransactionController';
+import { projectLogger } from '../logger.js';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
import type {
GasFeeEstimates,
GasFeeFlow,
GasFeeFlowRequest,
GasFeeFlowResponse,
TransactionMeta,
-} from '../types';
-import { GasFeeEstimateLevel, GasFeeEstimateType } from '../types';
-import { rpcRequest } from '../utils/provider';
-import { DefaultGasFeeFlow } from './DefaultGasFeeFlow';
+} from '../types.js';
+import { GasFeeEstimateLevel, GasFeeEstimateType } from '../types.js';
+import { rpcRequest } from '../utils/provider.js';
+import { DefaultGasFeeFlow } from './DefaultGasFeeFlow.js';
type LineaEstimateGasResponse = {
baseFeePerGas: Hex;
@@ -102,7 +102,9 @@ export class LineaGasFeeFlow implements GasFeeFlow {
log('Generated max fees', this.#feesToString(maxFees));
- const estimates = Object.values(GasFeeEstimateLevel).reduce(
+ const estimates = Object.values(
+ GasFeeEstimateLevel,
+ ).reduce(
(result, level) => ({
...result,
[level]: {
@@ -110,7 +112,7 @@ export class LineaGasFeeFlow implements GasFeeFlow {
maxPriorityFeePerGas: toHex(priorityFees[level]),
},
}),
- { type: GasFeeEstimateType.FeeMarket } as GasFeeEstimates,
+ { type: GasFeeEstimateType.FeeMarket },
);
return { estimates };
diff --git a/packages/transaction-controller/src/gas-flows/MantleLayer1GasFeeFlow.test.ts b/packages/transaction-controller/src/gas-flows/MantleLayer1GasFeeFlow.test.ts
index e6528702e90..cb302ef034e 100644
--- a/packages/transaction-controller/src/gas-flows/MantleLayer1GasFeeFlow.test.ts
+++ b/packages/transaction-controller/src/gas-flows/MantleLayer1GasFeeFlow.test.ts
@@ -6,12 +6,12 @@ import { add0x } from '@metamask/utils';
import type { Hex } from '@metamask/utils';
import BN from 'bn.js';
-import { CHAIN_IDS } from '../constants';
-import type { TransactionControllerMessenger } from '../TransactionController';
-import { TransactionStatus } from '../types';
-import type { Layer1GasFeeFlowRequest, TransactionMeta } from '../types';
-import { bnFromHex, padHexToEvenLength } from '../utils/utils';
-import { MantleLayer1GasFeeFlow } from './MantleLayer1GasFeeFlow';
+import { CHAIN_IDS } from '../constants.js';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
+import { TransactionStatus } from '../types.js';
+import type { Layer1GasFeeFlowRequest, TransactionMeta } from '../types.js';
+import { bnFromHex, padHexToEvenLength } from '../utils/utils.js';
+import { MantleLayer1GasFeeFlow } from './MantleLayer1GasFeeFlow.js';
jest.mock('@ethersproject/contracts', () => ({
Contract: jest.fn(),
diff --git a/packages/transaction-controller/src/gas-flows/MantleLayer1GasFeeFlow.ts b/packages/transaction-controller/src/gas-flows/MantleLayer1GasFeeFlow.ts
index faae3cf5094..e9f05ece807 100644
--- a/packages/transaction-controller/src/gas-flows/MantleLayer1GasFeeFlow.ts
+++ b/packages/transaction-controller/src/gas-flows/MantleLayer1GasFeeFlow.ts
@@ -4,11 +4,11 @@ import type { ExternalProvider } from '@ethersproject/providers';
import type { Hex } from '@metamask/utils';
import type BN from 'bn.js';
-import { CHAIN_IDS } from '../constants';
-import type { TransactionControllerMessenger } from '../TransactionController';
-import type { Layer1GasFeeFlowRequest, TransactionMeta } from '../types';
-import { toBN } from '../utils/utils';
-import { OracleLayer1GasFeeFlow } from './OracleLayer1GasFeeFlow';
+import { CHAIN_IDS } from '../constants.js';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
+import type { Layer1GasFeeFlowRequest, TransactionMeta } from '../types.js';
+import { toBN } from '../utils/utils.js';
+import { OracleLayer1GasFeeFlow } from './OracleLayer1GasFeeFlow.js';
const MANTLE_CHAIN_IDS: Hex[] = [CHAIN_IDS.MANTLE, CHAIN_IDS.MANTLE_SEPOLIA];
diff --git a/packages/transaction-controller/src/gas-flows/OptimismLayer1GasFeeFlow.test.ts b/packages/transaction-controller/src/gas-flows/OptimismLayer1GasFeeFlow.test.ts
index b8b078e1e9a..2f8c0d84459 100644
--- a/packages/transaction-controller/src/gas-flows/OptimismLayer1GasFeeFlow.test.ts
+++ b/packages/transaction-controller/src/gas-flows/OptimismLayer1GasFeeFlow.test.ts
@@ -2,11 +2,11 @@ import * as ControllerUtils from '@metamask/controller-utils';
import { hexToNumber } from '@metamask/utils';
import type { Hex } from '@metamask/utils';
-import { CHAIN_IDS } from '../constants';
-import type { TransactionControllerMessenger } from '../TransactionController';
-import type { TransactionMeta } from '../types';
-import { TransactionStatus } from '../types';
-import { OptimismLayer1GasFeeFlow } from './OptimismLayer1GasFeeFlow';
+import { CHAIN_IDS } from '../constants.js';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
+import type { TransactionMeta } from '../types.js';
+import { TransactionStatus } from '../types.js';
+import { OptimismLayer1GasFeeFlow } from './OptimismLayer1GasFeeFlow.js';
jest.mock('@metamask/controller-utils', () => {
const actual = jest.requireActual('@metamask/controller-utils');
diff --git a/packages/transaction-controller/src/gas-flows/OptimismLayer1GasFeeFlow.ts b/packages/transaction-controller/src/gas-flows/OptimismLayer1GasFeeFlow.ts
index 5c5e6cd0151..8378bfcdf4b 100644
--- a/packages/transaction-controller/src/gas-flows/OptimismLayer1GasFeeFlow.ts
+++ b/packages/transaction-controller/src/gas-flows/OptimismLayer1GasFeeFlow.ts
@@ -2,10 +2,10 @@ import { handleFetch } from '@metamask/controller-utils';
import { hexToNumber } from '@metamask/utils';
import type { Hex } from '@metamask/utils';
-import { CHAIN_IDS } from '../constants';
-import type { TransactionControllerMessenger } from '../TransactionController';
-import type { TransactionMeta } from '../types';
-import { OracleLayer1GasFeeFlow } from './OracleLayer1GasFeeFlow';
+import { CHAIN_IDS } from '../constants.js';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
+import type { TransactionMeta } from '../types.js';
+import { OracleLayer1GasFeeFlow } from './OracleLayer1GasFeeFlow.js';
const FALLBACK_OPTIMISM_STACK_CHAIN_IDS: Hex[] = [
CHAIN_IDS.OPTIMISM,
diff --git a/packages/transaction-controller/src/gas-flows/OracleLayer1GasFeeFlow.test.ts b/packages/transaction-controller/src/gas-flows/OracleLayer1GasFeeFlow.test.ts
index 53300918f4a..3a844d93185 100644
--- a/packages/transaction-controller/src/gas-flows/OracleLayer1GasFeeFlow.test.ts
+++ b/packages/transaction-controller/src/gas-flows/OracleLayer1GasFeeFlow.test.ts
@@ -6,12 +6,12 @@ import { add0x } from '@metamask/utils';
import type { Hex } from '@metamask/utils';
import BN from 'bn.js';
-import { CHAIN_IDS } from '../constants';
-import type { TransactionControllerMessenger } from '../TransactionController';
-import { TransactionStatus } from '../types';
-import type { Layer1GasFeeFlowRequest, TransactionMeta } from '../types';
-import { bnFromHex, padHexToEvenLength } from '../utils/utils';
-import { OracleLayer1GasFeeFlow } from './OracleLayer1GasFeeFlow';
+import { CHAIN_IDS } from '../constants.js';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
+import { TransactionStatus } from '../types.js';
+import type { Layer1GasFeeFlowRequest, TransactionMeta } from '../types.js';
+import { bnFromHex, padHexToEvenLength } from '../utils/utils.js';
+import { OracleLayer1GasFeeFlow } from './OracleLayer1GasFeeFlow.js';
jest.mock('@ethersproject/contracts', () => ({
Contract: jest.fn(),
diff --git a/packages/transaction-controller/src/gas-flows/OracleLayer1GasFeeFlow.ts b/packages/transaction-controller/src/gas-flows/OracleLayer1GasFeeFlow.ts
index e76586b2a7b..be7ff8adb14 100644
--- a/packages/transaction-controller/src/gas-flows/OracleLayer1GasFeeFlow.ts
+++ b/packages/transaction-controller/src/gas-flows/OracleLayer1GasFeeFlow.ts
@@ -5,16 +5,16 @@ import type { Hex } from '@metamask/utils';
import { add0x, createModuleLogger } from '@metamask/utils';
import BN from 'bn.js';
-import { projectLogger } from '../logger';
-import type { TransactionControllerMessenger } from '../TransactionController';
+import { projectLogger } from '../logger.js';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
import type {
Layer1GasFeeFlow,
Layer1GasFeeFlowRequest,
Layer1GasFeeFlowResponse,
TransactionMeta,
-} from '../types';
-import { prepareTransaction } from '../utils/prepare';
-import { padHexToEvenLength, toBN } from '../utils/utils';
+} from '../types.js';
+import { prepareTransaction } from '../utils/prepare.js';
+import { padHexToEvenLength, toBN } from '../utils/utils.js';
const log = createModuleLogger(projectLogger, 'oracle-layer1-gas-fee-flow');
diff --git a/packages/transaction-controller/src/gas-flows/RandomisedEstimationsGasFeeFlow.test.ts b/packages/transaction-controller/src/gas-flows/RandomisedEstimationsGasFeeFlow.test.ts
index 184528d5d70..9c8ae5ec0a3 100644
--- a/packages/transaction-controller/src/gas-flows/RandomisedEstimationsGasFeeFlow.test.ts
+++ b/packages/transaction-controller/src/gas-flows/RandomisedEstimationsGasFeeFlow.test.ts
@@ -2,24 +2,24 @@ import { toHex } from '@metamask/controller-utils';
import { GAS_ESTIMATE_TYPES } from '@metamask/gas-fee-controller';
import type { GasFeeState } from '@metamask/gas-fee-controller';
-import type { TransactionControllerMessenger } from '../TransactionController';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
import type {
FeeMarketGasFeeEstimates,
GasPriceGasFeeEstimates,
LegacyGasFeeEstimates,
TransactionMeta,
-} from '../types';
+} from '../types.js';
import {
GasFeeEstimateLevel,
GasFeeEstimateType,
TransactionStatus,
-} from '../types';
-import { getGasFeeRandomisation } from '../utils/feature-flags';
-import { DefaultGasFeeFlow } from './DefaultGasFeeFlow';
+} from '../types.js';
+import { getGasFeeRandomisation } from '../utils/feature-flags.js';
+import { DefaultGasFeeFlow } from './DefaultGasFeeFlow.js';
import {
RandomisedEstimationsGasFeeFlow,
randomiseDecimalGWEIAndConvertToHex,
-} from './RandomisedEstimationsGasFeeFlow';
+} from './RandomisedEstimationsGasFeeFlow.js';
jest.mock('./DefaultGasFeeFlow');
jest.mock('../utils/feature-flags');
diff --git a/packages/transaction-controller/src/gas-flows/RandomisedEstimationsGasFeeFlow.ts b/packages/transaction-controller/src/gas-flows/RandomisedEstimationsGasFeeFlow.ts
index 0b19594e78b..ac5bf4c5ee4 100644
--- a/packages/transaction-controller/src/gas-flows/RandomisedEstimationsGasFeeFlow.ts
+++ b/packages/transaction-controller/src/gas-flows/RandomisedEstimationsGasFeeFlow.ts
@@ -3,8 +3,8 @@ import { GAS_ESTIMATE_TYPES } from '@metamask/gas-fee-controller';
import { add0x, createModuleLogger } from '@metamask/utils';
import type { Hex } from '@metamask/utils';
-import { projectLogger } from '../logger';
-import type { TransactionControllerMessenger } from '../TransactionController';
+import { projectLogger } from '../logger.js';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
import type {
FeeMarketGasFeeEstimateForLevel,
FeeMarketGasFeeEstimates,
@@ -12,14 +12,14 @@ import type {
GasFeeFlowRequest,
GasFeeFlowResponse,
TransactionMeta,
-} from '../types';
-import { GasFeeEstimateLevel, GasFeeEstimateType } from '../types';
-import { getGasFeeRandomisation } from '../utils/feature-flags';
+} from '../types.js';
+import { GasFeeEstimateLevel, GasFeeEstimateType } from '../types.js';
+import { getGasFeeRandomisation } from '../utils/feature-flags.js';
import {
gweiDecimalToWeiDecimal,
gweiDecimalToWeiHex,
-} from '../utils/gas-fees';
-import { DefaultGasFeeFlow } from './DefaultGasFeeFlow';
+} from '../utils/gas-fees.js';
+import { DefaultGasFeeFlow } from './DefaultGasFeeFlow.js';
const log = createModuleLogger(
projectLogger,
@@ -105,7 +105,9 @@ export class RandomisedEstimationsGasFeeFlow implements GasFeeFlow {
lastNDigits: number,
preservedNumberOfDigits: number,
): FeeMarketGasFeeEstimates {
- const levels = Object.values(GasFeeEstimateLevel).reduce(
+ const levels = Object.values(GasFeeEstimateLevel).reduce<
+ Omit
+ >(
(result, level) => ({
...result,
[level]: this.#getRandomisedFeeMarketLevel(
@@ -115,7 +117,7 @@ export class RandomisedEstimationsGasFeeFlow implements GasFeeFlow {
preservedNumberOfDigits,
),
}),
- {} as Omit,
+ {},
);
return {
diff --git a/packages/transaction-controller/src/gas-flows/ScrollLayer1GasFeeFlow.test.ts b/packages/transaction-controller/src/gas-flows/ScrollLayer1GasFeeFlow.test.ts
index afe58af2b74..c46ae5245f0 100644
--- a/packages/transaction-controller/src/gas-flows/ScrollLayer1GasFeeFlow.test.ts
+++ b/packages/transaction-controller/src/gas-flows/ScrollLayer1GasFeeFlow.test.ts
@@ -1,10 +1,10 @@
import type { Hex } from '@metamask/utils';
-import { CHAIN_IDS } from '../constants';
-import type { TransactionControllerMessenger } from '../TransactionController';
-import type { TransactionMeta } from '../types';
-import { TransactionStatus } from '../types';
-import { ScrollLayer1GasFeeFlow } from './ScrollLayer1GasFeeFlow';
+import { CHAIN_IDS } from '../constants.js';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
+import type { TransactionMeta } from '../types.js';
+import { TransactionStatus } from '../types.js';
+import { ScrollLayer1GasFeeFlow } from './ScrollLayer1GasFeeFlow.js';
const TRANSACTION_META_MOCK: TransactionMeta = {
id: '1',
diff --git a/packages/transaction-controller/src/gas-flows/ScrollLayer1GasFeeFlow.ts b/packages/transaction-controller/src/gas-flows/ScrollLayer1GasFeeFlow.ts
index 6f1f3127406..25f98109121 100644
--- a/packages/transaction-controller/src/gas-flows/ScrollLayer1GasFeeFlow.ts
+++ b/packages/transaction-controller/src/gas-flows/ScrollLayer1GasFeeFlow.ts
@@ -1,9 +1,9 @@
import type { Hex } from '@metamask/utils';
-import { CHAIN_IDS } from '../constants';
-import type { TransactionControllerMessenger } from '../TransactionController';
-import type { TransactionMeta } from '../types';
-import { OracleLayer1GasFeeFlow } from './OracleLayer1GasFeeFlow';
+import { CHAIN_IDS } from '../constants.js';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
+import type { TransactionMeta } from '../types.js';
+import { OracleLayer1GasFeeFlow } from './OracleLayer1GasFeeFlow.js';
const SCROLL_CHAIN_IDS: Hex[] = [CHAIN_IDS.SCROLL, CHAIN_IDS.SCROLL_SEPOLIA];
diff --git a/packages/transaction-controller/src/gas-flows/TestGasFeeFlow.test.ts b/packages/transaction-controller/src/gas-flows/TestGasFeeFlow.test.ts
index be03eda14b5..6267a52d1e4 100644
--- a/packages/transaction-controller/src/gas-flows/TestGasFeeFlow.test.ts
+++ b/packages/transaction-controller/src/gas-flows/TestGasFeeFlow.test.ts
@@ -1,6 +1,6 @@
-import { GasFeeEstimateType } from '../types';
-import type { GasFeeFlowRequest } from '../types';
-import { TestGasFeeFlow } from './TestGasFeeFlow';
+import { GasFeeEstimateType } from '../types.js';
+import type { GasFeeFlowRequest } from '../types.js';
+import { TestGasFeeFlow } from './TestGasFeeFlow.js';
describe('TestGasFeeFlow', () => {
describe('matchesTransaction', () => {
diff --git a/packages/transaction-controller/src/gas-flows/TestGasFeeFlow.ts b/packages/transaction-controller/src/gas-flows/TestGasFeeFlow.ts
index 95bfb1212de..0659f76e95b 100644
--- a/packages/transaction-controller/src/gas-flows/TestGasFeeFlow.ts
+++ b/packages/transaction-controller/src/gas-flows/TestGasFeeFlow.ts
@@ -1,12 +1,12 @@
import { toHex } from '@metamask/controller-utils';
import type { Hex } from '@metamask/utils';
-import { GasFeeEstimateType } from '../types';
+import { GasFeeEstimateType } from '../types.js';
import type {
GasFeeFlow,
GasFeeFlowRequest,
GasFeeFlowResponse,
-} from '../types';
+} from '../types.js';
const INCREMENT = 1e15; // 0.001 ETH
const LEVEL_DIFFERENCE = 0.5;
diff --git a/packages/transaction-controller/src/helpers/GasFeePoller.test.ts b/packages/transaction-controller/src/helpers/GasFeePoller.test.ts
index eb9971571bc..29f2195a4d4 100644
--- a/packages/transaction-controller/src/helpers/GasFeePoller.test.ts
+++ b/packages/transaction-controller/src/helpers/GasFeePoller.test.ts
@@ -1,28 +1,28 @@
/* eslint-disable no-new */
import type { Hex } from '@metamask/utils';
-import { flushPromises } from '../../../../tests/helpers';
-import { DefaultGasFeeFlow } from '../gas-flows/DefaultGasFeeFlow';
-import type { TransactionControllerMessenger } from '../TransactionController';
+import { flushPromises } from '../../../../tests/helpers.js';
+import { DefaultGasFeeFlow } from '../gas-flows/DefaultGasFeeFlow.js';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
import {
GasFeeEstimateLevel,
GasFeeEstimateType,
TransactionEnvelopeType,
TransactionStatus,
UserFeeLevel,
-} from '../types';
+} from '../types.js';
import type {
GasFeeFlowResponse,
Layer1GasFeeFlow,
TransactionBatchMeta,
-} from '../types';
-import type { GasFeeFlow, GasFeeEstimates, TransactionMeta } from '../types';
-import { getTransactionLayer1GasFee } from '../utils/layer1-gas-fee-flow';
+} from '../types.js';
+import type { GasFeeFlow, GasFeeEstimates, TransactionMeta } from '../types.js';
+import { getTransactionLayer1GasFee } from '../utils/layer1-gas-fee-flow.js';
import {
GasFeePoller,
updateTransactionGasProperties,
updateTransactionGasEstimates,
-} from './GasFeePoller';
+} from './GasFeePoller.js';
jest.mock('../utils/feature-flags');
jest.mock('../utils/layer1-gas-fee-flow', () => ({
diff --git a/packages/transaction-controller/src/helpers/GasFeePoller.ts b/packages/transaction-controller/src/helpers/GasFeePoller.ts
index 06ff0c1fd3a..38218478a16 100644
--- a/packages/transaction-controller/src/helpers/GasFeePoller.ts
+++ b/packages/transaction-controller/src/helpers/GasFeePoller.ts
@@ -9,9 +9,9 @@ import { createModuleLogger } from '@metamask/utils';
// eslint-disable-next-line import-x/no-nodejs-modules
import EventEmitter from 'events';
-import { DefaultGasFeeFlow } from '../gas-flows/DefaultGasFeeFlow';
-import { projectLogger } from '../logger';
-import type { TransactionControllerMessenger } from '../TransactionController';
+import { DefaultGasFeeFlow } from '../gas-flows/DefaultGasFeeFlow.js';
+import { projectLogger } from '../logger.js';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
import type {
GasFeeEstimates,
GasFeeFlow,
@@ -20,16 +20,16 @@ import type {
TransactionMeta,
TransactionParams,
TransactionBatchMeta,
-} from '../types';
+} from '../types.js';
import {
GasFeeEstimateLevel,
GasFeeEstimateType,
TransactionStatus,
TransactionEnvelopeType,
-} from '../types';
-import { getGasFeeFlow } from '../utils/gas-flow';
-import { getTransactionLayer1GasFee } from '../utils/layer1-gas-fee-flow';
-import { getNetworkClientId } from '../utils/provider';
+} from '../types.js';
+import { getGasFeeFlow } from '../utils/gas-flow.js';
+import { getTransactionLayer1GasFee } from '../utils/layer1-gas-fee-flow.js';
+import { getNetworkClientId } from '../utils/provider.js';
const log = createModuleLogger(projectLogger, 'gas-fee-poller');
diff --git a/packages/transaction-controller/src/helpers/MethodDataHelper.test.ts b/packages/transaction-controller/src/helpers/MethodDataHelper.test.ts
index 728bb4e9c75..3989d36cf1a 100644
--- a/packages/transaction-controller/src/helpers/MethodDataHelper.test.ts
+++ b/packages/transaction-controller/src/helpers/MethodDataHelper.test.ts
@@ -3,9 +3,9 @@ import { MethodRegistry } from 'eth-method-registry';
import type {
MethodData,
TransactionControllerMessenger,
-} from '../TransactionController';
-import { getProvider } from '../utils/provider';
-import { MethodDataHelper } from './MethodDataHelper';
+} from '../TransactionController.js';
+import { getProvider } from '../utils/provider.js';
+import { MethodDataHelper } from './MethodDataHelper.js';
jest.mock('eth-method-registry');
diff --git a/packages/transaction-controller/src/helpers/MethodDataHelper.ts b/packages/transaction-controller/src/helpers/MethodDataHelper.ts
index 15608fcc9ad..ef352dee207 100644
--- a/packages/transaction-controller/src/helpers/MethodDataHelper.ts
+++ b/packages/transaction-controller/src/helpers/MethodDataHelper.ts
@@ -6,12 +6,12 @@ import { MethodRegistry } from 'eth-method-registry';
// eslint-disable-next-line import-x/no-nodejs-modules
import EventEmitter from 'events';
-import { projectLogger } from '../logger';
+import { projectLogger } from '../logger.js';
import type {
MethodData,
TransactionControllerMessenger,
-} from '../TransactionController';
-import { getProvider } from '../utils/provider';
+} from '../TransactionController.js';
+import { getProvider } from '../utils/provider.js';
const log = createModuleLogger(projectLogger, 'method-data');
diff --git a/packages/transaction-controller/src/helpers/MultichainTrackingHelper.test.ts b/packages/transaction-controller/src/helpers/MultichainTrackingHelper.test.ts
index 95d42992e9e..495001174a5 100644
--- a/packages/transaction-controller/src/helpers/MultichainTrackingHelper.test.ts
+++ b/packages/transaction-controller/src/helpers/MultichainTrackingHelper.test.ts
@@ -7,12 +7,12 @@ import type {
import type { NonceTracker } from '@metamask/nonce-tracker';
import type { Hex } from '@metamask/utils';
-import { jestAdvanceTime } from '../../../../tests/helpers';
+import { jestAdvanceTime } from '../../../../tests/helpers.js';
import {
MultichainTrackingHelper,
MultichainTrackingHelperOptions,
-} from './MultichainTrackingHelper';
-import type { PendingTransactionTracker } from './PendingTransactionTracker';
+} from './MultichainTrackingHelper.js';
+import type { PendingTransactionTracker } from './PendingTransactionTracker.js';
jest.mock(
'@metamask/eth-query',
@@ -513,9 +513,7 @@ describe('MultichainTrackingHelper', () => {
]);
expect(secondReleaseLockIfAcquired).toBeNull();
- // TODO: Either fix this lint violation or explain why it's necessary to ignore.
- // eslint-disable-next-line @typescript-eslint/await-thenable
- await firstReleaseLock();
+ firstReleaseLock();
await jestAdvanceTime({ duration: 1 });
secondReleaseLockIfAcquired = await Promise.race([
diff --git a/packages/transaction-controller/src/helpers/MultichainTrackingHelper.ts b/packages/transaction-controller/src/helpers/MultichainTrackingHelper.ts
index 5b884376c19..8c432ad4bb1 100644
--- a/packages/transaction-controller/src/helpers/MultichainTrackingHelper.ts
+++ b/packages/transaction-controller/src/helpers/MultichainTrackingHelper.ts
@@ -10,8 +10,8 @@ import type { NonceLock, NonceTracker } from '@metamask/nonce-tracker';
import type { Hex } from '@metamask/utils';
import { Mutex } from 'async-mutex';
-import { createModuleLogger, projectLogger } from '../logger';
-import type { PendingTransactionTracker } from './PendingTransactionTracker';
+import { createModuleLogger, projectLogger } from '../logger.js';
+import type { PendingTransactionTracker } from './PendingTransactionTracker.js';
/**
* Registry of network clients provided by the NetworkController
diff --git a/packages/transaction-controller/src/helpers/PendingTransactionTracker.test.ts b/packages/transaction-controller/src/helpers/PendingTransactionTracker.test.ts
index 4744e5e0032..105ab87dfa0 100644
--- a/packages/transaction-controller/src/helpers/PendingTransactionTracker.test.ts
+++ b/packages/transaction-controller/src/helpers/PendingTransactionTracker.test.ts
@@ -2,12 +2,12 @@ import type { BlockTracker } from '@metamask/network-controller';
import { Json } from '@metamask/utils';
import { freeze } from 'immer';
-import type { TransactionControllerMessenger } from '../TransactionController';
-import type { TransactionMeta } from '../types';
-import { TransactionStatus } from '../types';
-import { rpcRequest } from '../utils/provider';
-import { PendingTransactionTracker } from './PendingTransactionTracker';
-import { TransactionPoller } from './TransactionPoller';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
+import type { TransactionMeta } from '../types.js';
+import { TransactionStatus } from '../types.js';
+import { rpcRequest } from '../utils/provider.js';
+import { PendingTransactionTracker } from './PendingTransactionTracker.js';
+import { TransactionPoller } from './TransactionPoller.js';
const ID_MOCK = 'testId';
const CHAIN_ID_MOCK = '0x1';
diff --git a/packages/transaction-controller/src/helpers/PendingTransactionTracker.ts b/packages/transaction-controller/src/helpers/PendingTransactionTracker.ts
index 691f2290332..80b0918635c 100644
--- a/packages/transaction-controller/src/helpers/PendingTransactionTracker.ts
+++ b/packages/transaction-controller/src/helpers/PendingTransactionTracker.ts
@@ -6,19 +6,19 @@ import type { Json } from '@metamask/utils';
// This package purposefully relies on Node's EventEmitter module.
// eslint-disable-next-line import-x/no-nodejs-modules
import EventEmitter from 'events';
-import { cloneDeep } from 'lodash';
+import { cloneDeep } from 'lodash-es';
-import { createModuleLogger, projectLogger } from '../logger';
-import type { TransactionControllerMessenger } from '../TransactionController';
-import type { TransactionMeta, TransactionReceipt } from '../types';
-import { TransactionStatus, TransactionType } from '../types';
+import { createModuleLogger, projectLogger } from '../logger.js';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
+import type { TransactionMeta, TransactionReceipt } from '../types.js';
+import { TransactionStatus, TransactionType } from '../types.js';
import {
getAcceleratedPollingParams,
getTimeoutAttempts,
-} from '../utils/feature-flags';
-import { getChainId, rpcRequest } from '../utils/provider';
-import { extractRevert, OnChainFailureError } from '../utils/revert-reason';
-import { TransactionPoller } from './TransactionPoller';
+} from '../utils/feature-flags.js';
+import { getChainId, rpcRequest } from '../utils/provider.js';
+import { extractRevert, OnChainFailureError } from '../utils/revert-reason.js';
+import { TransactionPoller } from './TransactionPoller.js';
/**
* We wait this many blocks before emitting a 'transaction-dropped' event
diff --git a/packages/transaction-controller/src/helpers/ResimulateHelper.test.ts b/packages/transaction-controller/src/helpers/ResimulateHelper.test.ts
index 8884491ebab..01cd3a9c155 100644
--- a/packages/transaction-controller/src/helpers/ResimulateHelper.test.ts
+++ b/packages/transaction-controller/src/helpers/ResimulateHelper.test.ts
@@ -2,15 +2,15 @@ import { NetworkType } from '@metamask/controller-utils';
import type { NetworkClientId } from '@metamask/network-controller';
import { BN } from 'bn.js';
-import { CHAIN_IDS } from '../constants';
+import { CHAIN_IDS } from '../constants.js';
import type {
TransactionMeta,
SecurityAlertResponse,
SimulationData,
SimulationTokenBalanceChange,
-} from '../types';
-import { TransactionStatus, SimulationTokenStandard } from '../types';
-import { getPercentageChange } from '../utils/utils';
+} from '../types.js';
+import { TransactionStatus, SimulationTokenStandard } from '../types.js';
+import { getPercentageChange } from '../utils/utils.js';
import {
ResimulateHelper,
BLOCK_TIME_ADDITIONAL_SECONDS,
@@ -20,8 +20,8 @@ import {
shouldResimulate,
VALUE_COMPARISON_PERCENT_THRESHOLD,
RESIMULATE_INTERVAL_MS,
-} from './ResimulateHelper';
-import type { ResimulateHelperOptions } from './ResimulateHelper';
+} from './ResimulateHelper.js';
+import type { ResimulateHelperOptions } from './ResimulateHelper.js';
const CURRENT_TIME_MOCK = 1234567890;
const CURRENT_TIME_SECONDS_MOCK = 1234567;
diff --git a/packages/transaction-controller/src/helpers/ResimulateHelper.ts b/packages/transaction-controller/src/helpers/ResimulateHelper.ts
index debff05c48d..ee4a1d0e7f8 100644
--- a/packages/transaction-controller/src/helpers/ResimulateHelper.ts
+++ b/packages/transaction-controller/src/helpers/ResimulateHelper.ts
@@ -1,17 +1,17 @@
import type { Hex } from '@metamask/utils';
import { remove0x } from '@metamask/utils';
import { BN } from 'bn.js';
-import { isEqual } from 'lodash';
+import { isEqual } from 'lodash-es';
-import { createModuleLogger, projectLogger } from '../logger';
-import { TransactionStatus } from '../types';
+import { createModuleLogger, projectLogger } from '../logger.js';
+import { TransactionStatus } from '../types.js';
import type {
SimulationBalanceChange,
SimulationData,
TransactionMeta,
TransactionParams,
-} from '../types';
-import { getPercentageChange } from '../utils/utils';
+} from '../types.js';
+import { getPercentageChange } from '../utils/utils.js';
const log = createModuleLogger(projectLogger, 'resimulate-helper');
diff --git a/packages/transaction-controller/src/helpers/TransactionPoller.test.ts b/packages/transaction-controller/src/helpers/TransactionPoller.test.ts
index 6f9131de50a..8826eb7209f 100644
--- a/packages/transaction-controller/src/helpers/TransactionPoller.test.ts
+++ b/packages/transaction-controller/src/helpers/TransactionPoller.test.ts
@@ -1,10 +1,10 @@
import type { Transaction } from '@metamask/core-backend';
import type { BlockTracker } from '@metamask/network-controller';
-import { flushPromises } from '../../../../tests/helpers';
-import type { TransactionControllerMessenger } from '../TransactionController';
-import type { TransactionMeta } from '../types';
-import { TransactionPoller } from './TransactionPoller';
+import { flushPromises } from '../../../../tests/helpers.js';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
+import type { TransactionMeta } from '../types.js';
+import { TransactionPoller } from './TransactionPoller.js';
jest.useFakeTimers();
diff --git a/packages/transaction-controller/src/helpers/TransactionPoller.ts b/packages/transaction-controller/src/helpers/TransactionPoller.ts
index b5f10bc3431..0c87c10b4a3 100644
--- a/packages/transaction-controller/src/helpers/TransactionPoller.ts
+++ b/packages/transaction-controller/src/helpers/TransactionPoller.ts
@@ -2,12 +2,12 @@ import type { Transaction } from '@metamask/core-backend';
import type { BlockTracker } from '@metamask/network-controller';
import { createModuleLogger } from '@metamask/utils';
import type { Hex } from '@metamask/utils';
-import { isEqual } from 'lodash';
+import { isEqual } from 'lodash-es';
-import { projectLogger } from '../logger';
-import type { TransactionControllerMessenger } from '../TransactionController';
-import type { TransactionMeta } from '../types';
-import { getAcceleratedPollingParams } from '../utils/feature-flags';
+import { projectLogger } from '../logger.js';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
+import type { TransactionMeta } from '../types.js';
+import { getAcceleratedPollingParams } from '../utils/feature-flags.js';
const log = createModuleLogger(projectLogger, 'transaction-poller');
diff --git a/packages/transaction-controller/src/hooks/CollectPublishHook.test.ts b/packages/transaction-controller/src/hooks/CollectPublishHook.test.ts
index 75a27c4ba6f..2d375c674ec 100644
--- a/packages/transaction-controller/src/hooks/CollectPublishHook.test.ts
+++ b/packages/transaction-controller/src/hooks/CollectPublishHook.test.ts
@@ -1,8 +1,8 @@
-import { noop } from 'lodash';
+import { noop } from 'lodash-es';
-import type { TransactionMeta } from '..';
-import { flushPromises } from '../../../../tests/helpers';
-import { CollectPublishHook } from './CollectPublishHook';
+import { flushPromises } from '../../../../tests/helpers.js';
+import type { TransactionMeta } from './...js';
+import { CollectPublishHook } from './CollectPublishHook.js';
const SIGNED_TX_MOCK = '0x123';
const SIGNED_TX_2_MOCK = '0x456';
@@ -30,8 +30,8 @@ describe('CollectPublishHook', () => {
const collectHook = new CollectPublishHook(2);
const publishHook = collectHook.getHook();
- publishHook(TRANSACTION_META_MOCK, SIGNED_TX_MOCK).catch(noop);
- publishHook(TRANSACTION_META_2_MOCK, SIGNED_TX_2_MOCK).catch(noop);
+ void publishHook(TRANSACTION_META_MOCK, SIGNED_TX_MOCK).catch(noop);
+ void publishHook(TRANSACTION_META_2_MOCK, SIGNED_TX_2_MOCK).catch(noop);
await flushPromises();
@@ -47,8 +47,8 @@ describe('CollectPublishHook', () => {
const collectHook = new CollectPublishHook(2);
const publishHook = collectHook.getHook();
- publishHook(TRANSACTION_META_2_MOCK, SIGNED_TX_2_MOCK).catch(noop);
- publishHook(TRANSACTION_META_MOCK, SIGNED_TX_MOCK).catch(noop);
+ void publishHook(TRANSACTION_META_2_MOCK, SIGNED_TX_2_MOCK).catch(noop);
+ void publishHook(TRANSACTION_META_MOCK, SIGNED_TX_MOCK).catch(noop);
await flushPromises();
diff --git a/packages/transaction-controller/src/hooks/CollectPublishHook.ts b/packages/transaction-controller/src/hooks/CollectPublishHook.ts
index 4fcd31602a7..5e15e8fd4b9 100644
--- a/packages/transaction-controller/src/hooks/CollectPublishHook.ts
+++ b/packages/transaction-controller/src/hooks/CollectPublishHook.ts
@@ -1,9 +1,13 @@
import type { DeferredPromise, Hex } from '@metamask/utils';
import { createDeferredPromise, createModuleLogger } from '@metamask/utils';
-import { sortBy } from 'lodash';
-
-import { projectLogger } from '../logger';
-import type { PublishHook, PublishHookResult, TransactionMeta } from '../types';
+import { sortBy } from 'lodash-es';
+
+import { projectLogger } from '../logger.js';
+import type {
+ PublishHook,
+ PublishHookResult,
+ TransactionMeta,
+} from '../types.js';
const log = createModuleLogger(projectLogger, 'collect-publish-hook');
diff --git a/packages/transaction-controller/src/hooks/ExtraTransactionsPublishHook.test.ts b/packages/transaction-controller/src/hooks/ExtraTransactionsPublishHook.test.ts
index e950de03df5..78cb2da5b9b 100644
--- a/packages/transaction-controller/src/hooks/ExtraTransactionsPublishHook.test.ts
+++ b/packages/transaction-controller/src/hooks/ExtraTransactionsPublishHook.test.ts
@@ -1,13 +1,13 @@
import type { Hex } from '@metamask/utils';
+import type { BatchTransaction } from '../types.js';
+import { TransactionType } from '../types.js';
import type {
BatchTransactionParams,
TransactionController,
TransactionMeta,
-} from '..';
-import type { BatchTransaction } from '../types';
-import { TransactionType } from '../types';
-import { ExtraTransactionsPublishHook } from './ExtraTransactionsPublishHook';
+} from './...js';
+import { ExtraTransactionsPublishHook } from './ExtraTransactionsPublishHook.js';
const SIGNED_TRANSACTION_MOCK = '0xffe';
const SIGNED_TRANSACTION_2_MOCK = '0xfff' as Hex;
diff --git a/packages/transaction-controller/src/hooks/ExtraTransactionsPublishHook.ts b/packages/transaction-controller/src/hooks/ExtraTransactionsPublishHook.ts
index 3c1e240634c..30fe1844fc7 100644
--- a/packages/transaction-controller/src/hooks/ExtraTransactionsPublishHook.ts
+++ b/packages/transaction-controller/src/hooks/ExtraTransactionsPublishHook.ts
@@ -1,15 +1,15 @@
import { createDeferredPromise, createModuleLogger } from '@metamask/utils';
import type { Hex } from '@metamask/utils';
-import type { TransactionController } from '..';
-import { projectLogger } from '../logger';
+import { projectLogger } from '../logger.js';
import type {
BatchTransactionParams,
PublishHook,
PublishHookResult,
TransactionBatchSingleRequest,
TransactionMeta,
-} from '../types';
+} from '../types.js';
+import type { TransactionController } from './...js';
const log = createModuleLogger(
projectLogger,
diff --git a/packages/transaction-controller/src/hooks/SequentialPublishBatchHook.test.ts b/packages/transaction-controller/src/hooks/SequentialPublishBatchHook.test.ts
index e43d4fd4ef8..06bf99c9e5c 100644
--- a/packages/transaction-controller/src/hooks/SequentialPublishBatchHook.test.ts
+++ b/packages/transaction-controller/src/hooks/SequentialPublishBatchHook.test.ts
@@ -1,9 +1,9 @@
import type { Hex } from '@metamask/utils';
-import { flushPromises } from '../../../../tests/helpers';
-import type { PendingTransactionTracker } from '../helpers/PendingTransactionTracker';
-import type { PublishBatchHookTransaction, TransactionMeta } from '../types';
-import { SequentialPublishBatchHook } from './SequentialPublishBatchHook';
+import { flushPromises } from '../../../../tests/helpers.js';
+import type { PendingTransactionTracker } from '../helpers/PendingTransactionTracker.js';
+import type { PublishBatchHookTransaction, TransactionMeta } from '../types.js';
+import { SequentialPublishBatchHook } from './SequentialPublishBatchHook.js';
const TRANSACTION_HASH_MOCK = '0x123';
const TRANSACTION_HASH_2_MOCK = '0x456';
diff --git a/packages/transaction-controller/src/hooks/SequentialPublishBatchHook.ts b/packages/transaction-controller/src/hooks/SequentialPublishBatchHook.ts
index ee703029558..761b9172e86 100644
--- a/packages/transaction-controller/src/hooks/SequentialPublishBatchHook.ts
+++ b/packages/transaction-controller/src/hooks/SequentialPublishBatchHook.ts
@@ -2,14 +2,14 @@ import { rpcErrors } from '@metamask/rpc-errors';
import { createModuleLogger } from '@metamask/utils';
import type { Hex } from '@metamask/utils';
-import type { PendingTransactionTracker } from '../helpers/PendingTransactionTracker';
-import { projectLogger } from '../logger';
+import type { PendingTransactionTracker } from '../helpers/PendingTransactionTracker.js';
+import { projectLogger } from '../logger.js';
import type {
PublishBatchHook,
PublishBatchHookRequest,
PublishBatchHookResult,
TransactionMeta,
-} from '../types';
+} from '../types.js';
const log = createModuleLogger(projectLogger, 'sequential-publish-batch-hook');
diff --git a/packages/transaction-controller/src/index.ts b/packages/transaction-controller/src/index.ts
index 9dbc08c9841..699bf103d24 100644
--- a/packages/transaction-controller/src/index.ts
+++ b/packages/transaction-controller/src/index.ts
@@ -22,7 +22,7 @@ export type {
TransactionControllerUnapprovedTransactionAddedEvent,
TransactionControllerMessenger,
TransactionControllerOptions,
-} from './TransactionController';
+} from './TransactionController.js';
export type {
TransactionControllerAddTransactionAction,
TransactionControllerAddTransactionBatchAction,
@@ -56,12 +56,12 @@ export type {
TransactionControllerUpdatePreviousGasParamsAction,
TransactionControllerUpdateSelectedGasFeeTokenAction,
TransactionControllerUpdateRequiredTransactionIdsAction,
-} from './TransactionController-method-action-types';
+} from './TransactionController-method-action-types.js';
export {
CANCEL_RATE,
SPEED_UP_RATE,
TransactionController,
-} from './TransactionController';
+} from './TransactionController.js';
export type {
AddTransactionOptions,
AfterAddHook,
@@ -115,7 +115,7 @@ export type {
TransactionParams,
TransactionReceipt,
ValidateSecurityRequest,
-} from './types';
+} from './types.js';
export {
GasFeeEstimateLevel,
GasFeeEstimateType,
@@ -127,21 +127,21 @@ export {
TransactionType,
UserFeeLevel,
WalletDevice,
-} from './types';
-export { mergeGasFeeEstimates } from './utils/gas-flow';
+} from './types.js';
+export { mergeGasFeeEstimates } from './utils/gas-flow.js';
export {
decodeAuthorizationSignature,
generateEIP7702BatchTransaction,
-} from './utils/eip7702';
+} from './utils/eip7702.js';
export {
isEIP1559Transaction,
normalizeTransactionParams,
-} from './utils/utils';
-export { CHAIN_IDS } from './constants';
-export { HARDFORK } from './utils/prepare';
-export { getAccountAddressRelationship } from './api/accounts-api';
+} from './utils/utils.js';
+export { CHAIN_IDS } from './constants.js';
+export { HARDFORK } from './utils/prepare.js';
+export { getAccountAddressRelationship } from './api/accounts-api.js';
export type {
GetAccountAddressRelationshipRequest,
AccountAddressRelationshipResult,
-} from './api/accounts-api';
-export { generateBatchId } from './utils/batch';
+} from './api/accounts-api.js';
+export { generateBatchId } from './utils/batch.js';
diff --git a/packages/transaction-controller/src/types.ts b/packages/transaction-controller/src/types.ts
index 7fa97cdcc32..158c2f0db32 100644
--- a/packages/transaction-controller/src/types.ts
+++ b/packages/transaction-controller/src/types.ts
@@ -7,7 +7,7 @@ import type { NetworkClientId, Provider } from '@metamask/network-controller';
import type { Hex, Json } from '@metamask/utils';
import type { Operation } from 'fast-json-patch';
-import type { TransactionControllerMessenger } from './TransactionController';
+import type { TransactionControllerMessenger } from './TransactionController.js';
/**
* Given a record, ensures that each property matches the `Json` type.
diff --git a/packages/transaction-controller/src/utils/balance-changes.test.ts b/packages/transaction-controller/src/utils/balance-changes.test.ts
index 5013029f065..91948e6eadf 100644
--- a/packages/transaction-controller/src/utils/balance-changes.test.ts
+++ b/packages/transaction-controller/src/utils/balance-changes.test.ts
@@ -3,22 +3,22 @@ import { Interface } from '@ethersproject/abi';
import type { NetworkClientId } from '@metamask/network-controller';
import type { Hex } from '@metamask/utils';
-import { simulateTransactions } from '../api/simulation-api';
+import { simulateTransactions } from '../api/simulation-api.js';
import type {
SimulationResponseLog,
SimulationResponseTransaction,
-} from '../api/simulation-api';
-import type { SimulationResponse } from '../api/simulation-api';
+} from '../api/simulation-api.js';
+import type { SimulationResponse } from '../api/simulation-api.js';
import {
SimulationInvalidResponseError,
SimulationRevertedError,
-} from '../errors';
-import type { TransactionControllerMessenger } from '../TransactionController';
-import type { GetSimulationConfig } from '../types';
-import { SimulationErrorCode, SimulationTokenStandard } from '../types';
-import type { GetBalanceChangesRequest } from './balance-changes';
-import { getBalanceChanges, SupportedToken } from './balance-changes';
-import { rpcRequest } from './provider';
+} from '../errors.js';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
+import type { GetSimulationConfig } from '../types.js';
+import { SimulationErrorCode, SimulationTokenStandard } from '../types.js';
+import type { GetBalanceChangesRequest } from './balance-changes.js';
+import { getBalanceChanges, SupportedToken } from './balance-changes.js';
+import { rpcRequest } from './provider.js';
jest.mock('../api/simulation-api');
diff --git a/packages/transaction-controller/src/utils/balance-changes.ts b/packages/transaction-controller/src/utils/balance-changes.ts
index ba3ed0fe1e4..b366a75ba53 100644
--- a/packages/transaction-controller/src/utils/balance-changes.ts
+++ b/packages/transaction-controller/src/utils/balance-changes.ts
@@ -7,7 +7,7 @@ import { createModuleLogger } from '@metamask/utils';
import type { Hex } from '@metamask/utils';
import BN from 'bn.js';
-import { simulateTransactions } from '../api/simulation-api';
+import { simulateTransactions } from '../api/simulation-api.js';
import type {
SimulationResponseLog,
SimulationRequestTransaction,
@@ -15,18 +15,18 @@ import type {
SimulationResponseCallTrace,
SimulationResponseTransaction,
SimulationRequest,
-} from '../api/simulation-api';
+} from '../api/simulation-api.js';
import {
ABI_SIMULATION_ERC20_WRAPPED,
ABI_SIMULATION_ERC721_LEGACY,
-} from '../constants';
+} from '../constants.js';
import {
SimulationError,
SimulationInvalidResponseError,
SimulationRevertedError,
-} from '../errors';
-import { projectLogger } from '../logger';
-import type { TransactionControllerMessenger } from '../TransactionController';
+} from '../errors.js';
+import { projectLogger } from '../logger.js';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
import type {
Revert,
SimulationBalanceChange,
@@ -36,10 +36,10 @@ import type {
TransactionParams,
NestedTransactionMetadata,
GetSimulationConfig,
-} from '../types';
-import { SimulationTokenStandard } from '../types';
-import { getNativeBalance } from './balance';
-import { decodeRevert } from './revert-reason';
+} from '../types.js';
+import { SimulationTokenStandard } from '../types.js';
+import { getNativeBalance } from './balance.js';
+import { decodeRevert } from './revert-reason.js';
export enum SupportedToken {
ERC20 = 'erc20',
diff --git a/packages/transaction-controller/src/utils/balance.test.ts b/packages/transaction-controller/src/utils/balance.test.ts
index cbe32171f6a..a3fbd2eae57 100644
--- a/packages/transaction-controller/src/utils/balance.test.ts
+++ b/packages/transaction-controller/src/utils/balance.test.ts
@@ -1,10 +1,13 @@
import { toHex } from '@metamask/controller-utils';
import type { NetworkClientId } from '@metamask/network-controller';
-import type { TransactionMeta } from '..';
-import type { TransactionControllerMessenger } from '../TransactionController';
-import { getNativeBalance, isNativeBalanceSufficientForGas } from './balance';
-import { rpcRequest } from './provider';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
+import type { TransactionMeta } from './...js';
+import {
+ getNativeBalance,
+ isNativeBalanceSufficientForGas,
+} from './balance.js';
+import { rpcRequest } from './provider.js';
jest.mock('./provider', () => ({
rpcRequest: jest.fn(),
diff --git a/packages/transaction-controller/src/utils/balance.ts b/packages/transaction-controller/src/utils/balance.ts
index 1f44f37ba7a..38975bafa5b 100644
--- a/packages/transaction-controller/src/utils/balance.ts
+++ b/packages/transaction-controller/src/utils/balance.ts
@@ -2,9 +2,9 @@ import type { NetworkClientId } from '@metamask/network-controller';
import type { Hex } from '@metamask/utils';
import { BigNumber } from 'bignumber.js';
-import type { TransactionMeta } from '..';
-import type { TransactionControllerMessenger } from '../TransactionController';
-import { rpcRequest } from './provider';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
+import type { TransactionMeta } from './...js';
+import { rpcRequest } from './provider.js';
/**
* Get the native balance for an address.
diff --git a/packages/transaction-controller/src/utils/batch.test.ts b/packages/transaction-controller/src/utils/batch.test.ts
index d0bdf8c06eb..78b82652f5e 100644
--- a/packages/transaction-controller/src/utils/batch.test.ts
+++ b/packages/transaction-controller/src/utils/batch.test.ts
@@ -2,48 +2,48 @@ import { ORIGIN_METAMASK } from '@metamask/approval-controller';
import type { AddResult } from '@metamask/approval-controller';
import { ApprovalType } from '@metamask/controller-utils';
import { rpcErrors, errorCodes } from '@metamask/rpc-errors';
-import { cloneDeep } from 'lodash';
+import { cloneDeep } from 'lodash-es';
+import { flushPromises } from '../../../../tests/helpers.js';
+import { DefaultGasFeeFlow } from '../gas-flows/DefaultGasFeeFlow.js';
+import { SequentialPublishBatchHook } from '../hooks/SequentialPublishBatchHook.js';
+import type {
+ GasFeeFlow,
+ PublishBatchHook,
+ RequiredAsset,
+ TransactionBatchSingleRequest,
+} from '../types.js';
import {
TransactionEnvelopeType,
TransactionType,
GasFeeEstimateLevel,
GasFeeEstimateType,
TransactionStatus,
-} from '..';
+} from './...js';
import type {
TransactionControllerMessenger,
TransactionControllerState,
TransactionMeta,
-} from '..';
-import { flushPromises } from '../../../../tests/helpers';
-import { DefaultGasFeeFlow } from '../gas-flows/DefaultGasFeeFlow';
-import { SequentialPublishBatchHook } from '../hooks/SequentialPublishBatchHook';
-import type {
- GasFeeFlow,
- PublishBatchHook,
- RequiredAsset,
- TransactionBatchSingleRequest,
-} from '../types';
+} from './...js';
import {
ERROR_MESSAGE_NO_UPGRADE_CONTRACT,
addTransactionBatch,
isAtomicBatchSupported,
-} from './batch';
+} from './batch.js';
import {
ERROR_MESSGE_PUBLIC_KEY,
doesAccountSupportEIP7702,
doesChainSupportEIP7702,
generateEIP7702BatchTransaction,
isAccountUpgradedToEIP7702,
-} from './eip7702';
+} from './eip7702.js';
import {
getEIP7702SupportedChains,
getEIP7702UpgradeContractAddress,
-} from './feature-flags';
-import { simulateGasBatch } from './gas';
-import { determineTransactionType } from './transaction-type';
-import { validateBatchRequest } from './validation';
+} from './feature-flags.js';
+import { simulateGasBatch } from './gas.js';
+import { determineTransactionType } from './transaction-type.js';
+import { validateBatchRequest } from './validation.js';
jest.mock('./eip7702');
jest.mock('./feature-flags');
diff --git a/packages/transaction-controller/src/utils/batch.ts b/packages/transaction-controller/src/utils/batch.ts
index 26592ff0572..36c9bc53549 100644
--- a/packages/transaction-controller/src/utils/batch.ts
+++ b/packages/transaction-controller/src/utils/batch.ts
@@ -18,23 +18,13 @@ import { bytesToHex, createModuleLogger } from '@metamask/utils';
import type { WritableDraft } from 'immer/dist/internal.js';
import { parse, v4 } from 'uuid';
-import { GasFeeEstimateLevel, TransactionStatus } from '..';
-import type {
- BatchTransactionParams,
- GetSimulationConfig,
- PublishBatchHookRequest,
- TransactionController,
- TransactionControllerMessenger,
- TransactionControllerState,
- TransactionMeta,
-} from '..';
-import { DefaultGasFeeFlow } from '../gas-flows/DefaultGasFeeFlow';
-import { updateTransactionGasEstimates } from '../helpers/GasFeePoller';
-import type { PendingTransactionTracker } from '../helpers/PendingTransactionTracker';
-import { CollectPublishHook } from '../hooks/CollectPublishHook';
-import { SequentialPublishBatchHook } from '../hooks/SequentialPublishBatchHook';
-import { projectLogger } from '../logger';
-import { TransactionEnvelopeType, TransactionType } from '../types';
+import { DefaultGasFeeFlow } from '../gas-flows/DefaultGasFeeFlow.js';
+import { updateTransactionGasEstimates } from '../helpers/GasFeePoller.js';
+import type { PendingTransactionTracker } from '../helpers/PendingTransactionTracker.js';
+import { CollectPublishHook } from '../hooks/CollectPublishHook.js';
+import { SequentialPublishBatchHook } from '../hooks/SequentialPublishBatchHook.js';
+import { projectLogger } from '../logger.js';
+import { TransactionEnvelopeType, TransactionType } from '../types.js';
import type {
NestedTransactionMetadata,
SecurityAlertResponse,
@@ -47,24 +37,34 @@ import type {
IsAtomicBatchSupportedResult,
IsAtomicBatchSupportedResultEntry,
TransactionBatchMeta,
-} from '../types';
-import type { TransactionBatchResult, TransactionParams } from '../types';
+} from '../types.js';
+import type { TransactionBatchResult, TransactionParams } from '../types.js';
+import { GasFeeEstimateLevel, TransactionStatus } from './...js';
+import type {
+ BatchTransactionParams,
+ GetSimulationConfig,
+ PublishBatchHookRequest,
+ TransactionController,
+ TransactionControllerMessenger,
+ TransactionControllerState,
+ TransactionMeta,
+} from './...js';
import {
ERROR_MESSGE_PUBLIC_KEY,
doesAccountSupportEIP7702,
doesChainSupportEIP7702,
generateEIP7702BatchTransaction,
isAccountUpgradedToEIP7702,
-} from './eip7702';
+} from './eip7702.js';
import {
getBatchSizeLimit,
getEIP7702SupportedChains,
getEIP7702UpgradeContractAddress,
-} from './feature-flags';
-import { simulateGasBatch } from './gas';
-import { getChainId } from './provider';
-import { determineTransactionType } from './transaction-type';
-import { validateBatchRequest } from './validation';
+} from './feature-flags.js';
+import { simulateGasBatch } from './gas.js';
+import { getChainId } from './provider.js';
+import { determineTransactionType } from './transaction-type.js';
+import { validateBatchRequest } from './validation.js';
type UpdateStateCallback = (
callback: (
diff --git a/packages/transaction-controller/src/utils/eip7702.test.ts b/packages/transaction-controller/src/utils/eip7702.test.ts
index 155eb007ee1..f7cf8232440 100644
--- a/packages/transaction-controller/src/utils/eip7702.test.ts
+++ b/packages/transaction-controller/src/utils/eip7702.test.ts
@@ -11,11 +11,11 @@ import { remove0x } from '@metamask/utils';
import type {
KeyringControllerGetStateAction,
KeyringControllerSignEip7702AuthorizationAction,
-} from '../../../keyring-controller/src';
-import type { TransactionControllerMessenger } from '../TransactionController';
-import { TransactionStatus } from '../types';
-import type { AuthorizationList } from '../types';
-import type { TransactionMeta } from '../types';
+} from '../../../keyring-controller/src.js';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
+import { TransactionStatus } from '../types.js';
+import type { AuthorizationList } from '../types.js';
+import type { TransactionMeta } from '../types.js';
import {
DELEGATION_PREFIX,
decodeAuthorizationSignature,
@@ -25,12 +25,12 @@ import {
getDelegationAddress,
isAccountUpgradedToEIP7702,
signAuthorizationList,
-} from './eip7702';
+} from './eip7702.js';
import {
getEIP7702ContractAddresses,
getEIP7702SupportedChains,
-} from './feature-flags';
-import { rpcRequest } from './provider';
+} from './feature-flags.js';
+import { rpcRequest } from './provider.js';
jest.mock('../utils/feature-flags');
diff --git a/packages/transaction-controller/src/utils/eip7702.ts b/packages/transaction-controller/src/utils/eip7702.ts
index 91b39c390de..ea7f03792ac 100644
--- a/packages/transaction-controller/src/utils/eip7702.ts
+++ b/packages/transaction-controller/src/utils/eip7702.ts
@@ -5,20 +5,20 @@ import type { NetworkClientId } from '@metamask/network-controller';
import { createModuleLogger, add0x } from '@metamask/utils';
import type { Hex } from '@metamask/utils';
-import { ABI_IERC7821 } from '../constants';
-import { projectLogger } from '../logger';
-import type { TransactionControllerMessenger } from '../TransactionController';
+import { ABI_IERC7821 } from '../constants.js';
+import { projectLogger } from '../logger.js';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
import type {
BatchTransactionParams,
Authorization,
AuthorizationList,
TransactionMeta,
-} from '../types';
+} from '../types.js';
import {
getEIP7702ContractAddresses,
getEIP7702SupportedChains,
-} from './feature-flags';
-import { rpcRequest } from './provider';
+} from './feature-flags.js';
+import { rpcRequest } from './provider.js';
export const DELEGATION_PREFIX = '0xef0100';
export const BATCH_FUNCTION_NAME = 'execute';
diff --git a/packages/transaction-controller/src/utils/external-transactions.test.ts b/packages/transaction-controller/src/utils/external-transactions.test.ts
index 7fe874e62ef..6093f6b62ed 100644
--- a/packages/transaction-controller/src/utils/external-transactions.test.ts
+++ b/packages/transaction-controller/src/utils/external-transactions.test.ts
@@ -1,8 +1,8 @@
import { rpcErrors } from '@metamask/rpc-errors';
-import type { TransactionMeta } from '../types';
-import { TransactionStatus } from '../types';
-import { validateConfirmedExternalTransaction } from './external-transactions';
+import type { TransactionMeta } from '../types.js';
+import { TransactionStatus } from '../types.js';
+import { validateConfirmedExternalTransaction } from './external-transactions.js';
describe('validateConfirmedExternalTransaction', () => {
const mockTransactionMeta = (
diff --git a/packages/transaction-controller/src/utils/external-transactions.ts b/packages/transaction-controller/src/utils/external-transactions.ts
index c7174764e21..cf4f5d2b666 100644
--- a/packages/transaction-controller/src/utils/external-transactions.ts
+++ b/packages/transaction-controller/src/utils/external-transactions.ts
@@ -1,8 +1,8 @@
// These utility functions are exclusively used by `confirmExternalTransaction` method in controller
import { rpcErrors } from '@metamask/rpc-errors';
-import { TransactionStatus } from '../types';
-import type { TransactionMeta } from '../types';
+import { TransactionStatus } from '../types.js';
+import type { TransactionMeta } from '../types.js';
/**
* Validates the external provided transaction meta.
diff --git a/packages/transaction-controller/src/utils/feature-flags.test.ts b/packages/transaction-controller/src/utils/feature-flags.test.ts
index 405008c10b6..a018fbc52d6 100644
--- a/packages/transaction-controller/src/utils/feature-flags.test.ts
+++ b/packages/transaction-controller/src/utils/feature-flags.test.ts
@@ -7,8 +7,8 @@ import type {
import type { RemoteFeatureFlagControllerGetStateAction } from '@metamask/remote-feature-flag-controller';
import type { Hex } from '@metamask/utils';
-import type { TransactionControllerMessenger } from '..';
-import type { TransactionControllerFeatureFlags } from './feature-flags';
+import type { TransactionControllerMessenger } from './...js';
+import type { TransactionControllerFeatureFlags } from './feature-flags.js';
import {
getAcceleratedPollingParams,
getBatchSizeLimit,
@@ -22,8 +22,8 @@ import {
getTransactionHistoryLimit,
FeatureFlag,
getTimeoutAttempts,
-} from './feature-flags';
-import { isValidSignature } from './signature';
+} from './feature-flags.js';
+import { isValidSignature } from './signature.js';
jest.mock('./signature');
diff --git a/packages/transaction-controller/src/utils/feature-flags.ts b/packages/transaction-controller/src/utils/feature-flags.ts
index 128e5844cf0..d7bf191c5e0 100644
--- a/packages/transaction-controller/src/utils/feature-flags.ts
+++ b/packages/transaction-controller/src/utils/feature-flags.ts
@@ -1,10 +1,10 @@
import { createModuleLogger } from '@metamask/utils';
import type { Hex } from '@metamask/utils';
-import { projectLogger } from '../logger';
-import type { TransactionControllerMessenger } from '../TransactionController';
-import { isValidSignature } from './signature';
-import { padHexToEvenLength } from './utils';
+import { projectLogger } from '../logger.js';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
+import { isValidSignature } from './signature.js';
+import { padHexToEvenLength } from './utils.js';
const DEFAULT_BATCH_SIZE_LIMIT = 10;
const DEFAULT_ACCELERATED_POLLING_COUNT_MAX = 10;
diff --git a/packages/transaction-controller/src/utils/first-time-interaction.test.ts b/packages/transaction-controller/src/utils/first-time-interaction.test.ts
index 208141f6ee7..5cf7329e3f3 100644
--- a/packages/transaction-controller/src/utils/first-time-interaction.test.ts
+++ b/packages/transaction-controller/src/utils/first-time-interaction.test.ts
@@ -1,11 +1,11 @@
import type { TraceContext } from '@metamask/controller-utils';
-import { getAccountAddressRelationship } from '../api/accounts-api';
-import type { TransactionMeta } from '../types';
-import { TransactionStatus, TransactionType } from '../types';
-import { updateFirstTimeInteraction } from './first-time-interaction';
-import { decodeTransactionData } from './transaction-type';
-import { validateParamTo } from './validation';
+import { getAccountAddressRelationship } from '../api/accounts-api.js';
+import type { TransactionMeta } from '../types.js';
+import { TransactionStatus, TransactionType } from '../types.js';
+import { updateFirstTimeInteraction } from './first-time-interaction.js';
+import { decodeTransactionData } from './transaction-type.js';
+import { validateParamTo } from './validation.js';
jest.mock('./transaction-type');
jest.mock('./validation');
diff --git a/packages/transaction-controller/src/utils/first-time-interaction.ts b/packages/transaction-controller/src/utils/first-time-interaction.ts
index 85ba6cfbcf0..f6d20c95393 100644
--- a/packages/transaction-controller/src/utils/first-time-interaction.ts
+++ b/packages/transaction-controller/src/utils/first-time-interaction.ts
@@ -2,13 +2,13 @@ import type { TransactionDescription } from '@ethersproject/abi';
import type { TraceContext, TraceCallback } from '@metamask/controller-utils';
import { hexToNumber } from '@metamask/utils';
-import { getAccountAddressRelationship } from '../api/accounts-api';
-import type { GetAccountAddressRelationshipRequest } from '../api/accounts-api';
-import { projectLogger as log } from '../logger';
-import { TransactionType } from '../types';
-import type { TransactionMeta } from '../types';
-import { decodeTransactionData } from './transaction-type';
-import { validateParamTo } from './validation';
+import { getAccountAddressRelationship } from '../api/accounts-api.js';
+import type { GetAccountAddressRelationshipRequest } from '../api/accounts-api.js';
+import { projectLogger as log } from '../logger.js';
+import { TransactionType } from '../types.js';
+import type { TransactionMeta } from '../types.js';
+import { decodeTransactionData } from './transaction-type.js';
+import { validateParamTo } from './validation.js';
const TOKEN_TRANSFER_TYPES = [
TransactionType.tokenMethodTransfer,
diff --git a/packages/transaction-controller/src/utils/gas-fee-tokens.test.ts b/packages/transaction-controller/src/utils/gas-fee-tokens.test.ts
index 8a6418375d4..22e09923c31 100644
--- a/packages/transaction-controller/src/utils/gas-fee-tokens.test.ts
+++ b/packages/transaction-controller/src/utils/gas-fee-tokens.test.ts
@@ -1,21 +1,21 @@
import type { Hex } from '@metamask/utils';
-import { cloneDeep } from 'lodash';
+import { cloneDeep } from 'lodash-es';
+import { simulateTransactions } from '../api/simulation-api.js';
import type {
GasFeeToken,
GetSimulationConfig,
TransactionControllerMessenger,
TransactionMeta,
-} from '..';
-import { simulateTransactions } from '../api/simulation-api';
-import { isNativeBalanceSufficientForGas } from './balance';
-import { doesChainSupportEIP7702 } from './eip7702';
-import { getEIP7702UpgradeContractAddress } from './feature-flags';
-import type { GetGasFeeTokensRequest } from './gas-fee-tokens';
+} from './...js';
+import { isNativeBalanceSufficientForGas } from './balance.js';
+import { doesChainSupportEIP7702 } from './eip7702.js';
+import { getEIP7702UpgradeContractAddress } from './feature-flags.js';
+import type { GetGasFeeTokensRequest } from './gas-fee-tokens.js';
import {
checkGasFeeTokenBeforePublish,
getGasFeeTokens,
-} from './gas-fee-tokens';
+} from './gas-fee-tokens.js';
jest.mock('../api/simulation-api');
jest.mock('./eip7702');
diff --git a/packages/transaction-controller/src/utils/gas-fee-tokens.ts b/packages/transaction-controller/src/utils/gas-fee-tokens.ts
index ce4205aa188..2e92f6a621e 100644
--- a/packages/transaction-controller/src/utils/gas-fee-tokens.ts
+++ b/packages/transaction-controller/src/utils/gas-fee-tokens.ts
@@ -3,23 +3,23 @@ import { rpcErrors } from '@metamask/rpc-errors';
import type { Hex } from '@metamask/utils';
import { createModuleLogger } from '@metamask/utils';
+import { simulateTransactions } from '../api/simulation-api.js';
+import type { SimulationRequestTransaction } from '../api/simulation-api.js';
+import type {
+ SimulationResponse,
+ SimulationResponseTransaction,
+} from '../api/simulation-api.js';
+import { projectLogger } from '../logger.js';
+import type { GetSimulationConfig } from '../types.js';
import type {
GasFeeToken,
TransactionControllerMessenger,
TransactionMeta,
-} from '..';
-import { simulateTransactions } from '../api/simulation-api';
-import type { SimulationRequestTransaction } from '../api/simulation-api';
-import type {
- SimulationResponse,
- SimulationResponseTransaction,
-} from '../api/simulation-api';
-import { projectLogger } from '../logger';
-import type { GetSimulationConfig } from '../types';
-import { isNativeBalanceSufficientForGas } from './balance';
-import { ERROR_MESSAGE_NO_UPGRADE_CONTRACT } from './batch';
-import { ERROR_MESSGE_PUBLIC_KEY, doesChainSupportEIP7702 } from './eip7702';
-import { getEIP7702UpgradeContractAddress } from './feature-flags';
+} from './...js';
+import { isNativeBalanceSufficientForGas } from './balance.js';
+import { ERROR_MESSAGE_NO_UPGRADE_CONTRACT } from './batch.js';
+import { ERROR_MESSGE_PUBLIC_KEY, doesChainSupportEIP7702 } from './eip7702.js';
+import { getEIP7702UpgradeContractAddress } from './feature-flags.js';
const log = createModuleLogger(projectLogger, 'gas-fee-tokens');
diff --git a/packages/transaction-controller/src/utils/gas-fees.test.ts b/packages/transaction-controller/src/utils/gas-fees.test.ts
index 0885e3dad40..55deb04f5fb 100644
--- a/packages/transaction-controller/src/utils/gas-fees.test.ts
+++ b/packages/transaction-controller/src/utils/gas-fees.test.ts
@@ -1,16 +1,16 @@
import type { NetworkClientId } from '@metamask/network-controller';
-import type { TransactionControllerMessenger } from '../TransactionController';
-import type { GasFeeFlow, GasFeeFlowResponse } from '../types';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
+import type { GasFeeFlow, GasFeeFlowResponse } from '../types.js';
import {
GasFeeEstimateLevel,
GasFeeEstimateType,
TransactionType,
UserFeeLevel,
-} from '../types';
-import type { UpdateGasFeesRequest } from './gas-fees';
-import { gweiDecimalToWeiDecimal, updateGasFees } from './gas-fees';
-import { rpcRequest } from './provider';
+} from '../types.js';
+import type { UpdateGasFeesRequest } from './gas-fees.js';
+import { gweiDecimalToWeiDecimal, updateGasFees } from './gas-fees.js';
+import { rpcRequest } from './provider.js';
jest.mock('./provider', () => ({
rpcRequest: jest.fn(),
diff --git a/packages/transaction-controller/src/utils/gas-fees.ts b/packages/transaction-controller/src/utils/gas-fees.ts
index 33f12cf9878..66660547a2b 100644
--- a/packages/transaction-controller/src/utils/gas-fees.ts
+++ b/packages/transaction-controller/src/utils/gas-fees.ts
@@ -6,21 +6,21 @@ import type {
import type { Hex } from '@metamask/utils';
import { add0x, createModuleLogger } from '@metamask/utils';
-import { projectLogger } from '../logger';
-import type { TransactionControllerMessenger } from '../TransactionController';
+import { projectLogger } from '../logger.js';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
import type {
SavedGasFees,
TransactionParams,
TransactionMeta,
GasFeeFlow,
-} from '../types';
+} from '../types.js';
import {
GasFeeEstimateLevel,
GasFeeEstimateType,
UserFeeLevel,
-} from '../types';
-import { getGasFeeFlow } from './gas-flow';
-import { rpcRequest } from './provider';
+} from '../types.js';
+import { getGasFeeFlow } from './gas-flow.js';
+import { rpcRequest } from './provider.js';
export type UpdateGasFeesRequest = {
eip1559: boolean;
@@ -437,9 +437,7 @@ async function getSuggestedGasFees(
};
default:
throw new Error(
- // TODO: Either fix this lint violation or explain why it's necessary to ignore.
- // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
- `Unsupported gas fee estimate type returned from flow: ${gasFeeEstimateType}`,
+ `Unsupported gas fee estimate type returned from flow: ${String(gasFeeEstimateType)}`,
);
}
} catch (error) {
diff --git a/packages/transaction-controller/src/utils/gas-flow.test.ts b/packages/transaction-controller/src/utils/gas-flow.test.ts
index 7e80fa5f8f2..cb6405ff87e 100644
--- a/packages/transaction-controller/src/utils/gas-flow.test.ts
+++ b/packages/transaction-controller/src/utils/gas-flow.test.ts
@@ -1,15 +1,15 @@
import type { GasFeeEstimates as GasFeeControllerEstimates } from '@metamask/gas-fee-controller';
-import type { TransactionControllerMessenger } from '../TransactionController';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
import type {
FeeMarketGasFeeEstimates,
GasFeeFlow,
GasPriceGasFeeEstimates,
LegacyGasFeeEstimates,
TransactionMeta,
-} from '../types';
-import { GasFeeEstimateType, TransactionStatus } from '../types';
-import { getGasFeeFlow, mergeGasFeeEstimates } from './gas-flow';
+} from '../types.js';
+import { GasFeeEstimateType, TransactionStatus } from '../types.js';
+import { getGasFeeFlow, mergeGasFeeEstimates } from './gas-flow.js';
const TRANSACTION_META_MOCK: TransactionMeta = {
id: '1',
diff --git a/packages/transaction-controller/src/utils/gas-flow.ts b/packages/transaction-controller/src/utils/gas-flow.ts
index 94e21e5e579..48d57211f71 100644
--- a/packages/transaction-controller/src/utils/gas-flow.ts
+++ b/packages/transaction-controller/src/utils/gas-flow.ts
@@ -7,18 +7,18 @@ import type {
} from '@metamask/gas-fee-controller';
import type { GasFeeState } from '@metamask/gas-fee-controller';
-import type { TransactionControllerMessenger } from '../TransactionController';
-import { GasFeeEstimateLevel, GasFeeEstimateType } from '../types';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
+import { GasFeeEstimateLevel, GasFeeEstimateType } from '../types.js';
import type {
FeeMarketGasFeeEstimates,
GasPriceGasFeeEstimates,
LegacyGasFeeEstimates,
-} from '../types';
+} from '../types.js';
import type {
GasFeeFlow,
TransactionMeta,
FeeMarketGasFeeEstimateForLevel,
-} from '../types';
+} from '../types.js';
type MergeGasFeeEstimatesRequest = {
gasFeeControllerEstimates:
@@ -64,7 +64,7 @@ export function mergeGasFeeEstimates({
const transactionEstimateType = transactionGasFeeEstimates.type;
if (transactionEstimateType === GasFeeEstimateType.FeeMarket) {
- return Object.values(GasFeeEstimateLevel).reduce(
+ return Object.values(GasFeeEstimateLevel).reduce(
(result, level) => ({
...result,
[level]: mergeFeeMarketEstimate(
@@ -72,17 +72,17 @@ export function mergeGasFeeEstimates({
transactionGasFeeEstimates[level],
),
}),
- { ...gasFeeControllerEstimates } as GasFeeEstimates,
+ { ...gasFeeControllerEstimates },
);
}
if (transactionEstimateType === GasFeeEstimateType.Legacy) {
- return Object.values(GasFeeEstimateLevel).reduce(
+ return Object.values(GasFeeEstimateLevel).reduce(
(result, level) => ({
...result,
[level]: getLegacyEstimate(transactionGasFeeEstimates, level),
}),
- {} as LegacyGasPriceEstimate,
+ {},
);
}
diff --git a/packages/transaction-controller/src/utils/gas.test.ts b/packages/transaction-controller/src/utils/gas.test.ts
index a54716235e5..9f55da92535 100644
--- a/packages/transaction-controller/src/utils/gas.test.ts
+++ b/packages/transaction-controller/src/utils/gas.test.ts
@@ -1,24 +1,30 @@
import type { NetworkClientId } from '@metamask/network-controller';
import { remove0x } from '@metamask/utils';
import type { Hex } from '@metamask/utils';
-import { cloneDeep } from 'lodash';
+import { cloneDeep } from 'lodash-es';
import type {
SimulationResponse,
SimulationResponseTransaction,
-} from '../api/simulation-api';
-import { simulateTransactions } from '../api/simulation-api';
-import type { TransactionControllerMessenger } from '../TransactionController';
-import { TransactionEnvelopeType } from '../types';
-import type { TransactionMeta } from '../types';
+} from '../api/simulation-api.js';
+import { simulateTransactions } from '../api/simulation-api.js';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
+import { TransactionEnvelopeType } from '../types.js';
+import type { TransactionMeta } from '../types.js';
import type {
AuthorizationList,
BatchTransactionParams,
TransactionBatchSingleRequest,
-} from '../types';
-import { DELEGATION_PREFIX, generateEIP7702BatchTransaction } from './eip7702';
-import { getGasEstimateBuffer, getGasEstimateFallback } from './feature-flags';
-import type { UpdateGasRequest } from './gas';
+} from '../types.js';
+import {
+ DELEGATION_PREFIX,
+ generateEIP7702BatchTransaction,
+} from './eip7702.js';
+import {
+ getGasEstimateBuffer,
+ getGasEstimateFallback,
+} from './feature-flags.js';
+import type { UpdateGasRequest } from './gas.js';
import {
addGasBuffer,
estimateGas,
@@ -31,8 +37,8 @@ import {
INTRINSIC_GAS,
DUMMY_AUTHORIZATION_SIGNATURE,
simulateGasBatch,
-} from './gas';
-import { rpcRequest } from './provider';
+} from './gas.js';
+import { rpcRequest } from './provider.js';
jest.mock('./provider', () => ({
...jest.requireActual('./provider'),
diff --git a/packages/transaction-controller/src/utils/gas.ts b/packages/transaction-controller/src/utils/gas.ts
index f04568a6a91..bc2fd95d260 100644
--- a/packages/transaction-controller/src/utils/gas.ts
+++ b/packages/transaction-controller/src/utils/gas.ts
@@ -9,10 +9,10 @@ import type { Hex, Json } from '@metamask/utils';
import { add0x, createModuleLogger, remove0x } from '@metamask/utils';
import { BigNumber } from 'bignumber.js';
-import { simulateTransactions } from '../api/simulation-api';
-import { projectLogger } from '../logger';
-import type { TransactionControllerMessenger } from '../TransactionController';
-import { TransactionEnvelopeType } from '../types';
+import { simulateTransactions } from '../api/simulation-api.js';
+import { projectLogger } from '../logger.js';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
+import { TransactionEnvelopeType } from '../types.js';
import type {
AuthorizationList,
BatchTransactionParams,
@@ -23,15 +23,18 @@ import type {
TransactionBatchSingleRequest,
TransactionMeta,
TransactionParams,
-} from '../types';
+} from '../types.js';
import {
DELEGATION_PREFIX,
doesAccountSupportEIP7702,
generateEIP7702BatchTransaction,
-} from './eip7702';
-import { getGasEstimateBuffer, getGasEstimateFallback } from './feature-flags';
-import { getChainId, rpcRequest } from './provider';
-import { decodeRevert } from './revert-reason';
+} from './eip7702.js';
+import {
+ getGasEstimateBuffer,
+ getGasEstimateFallback,
+} from './feature-flags.js';
+import { getChainId, rpcRequest } from './provider.js';
+import { decodeRevert } from './revert-reason.js';
export type UpdateGasRequest = {
isCustomNetwork: boolean;
diff --git a/packages/transaction-controller/src/utils/layer1-gas-fee-flow.test.ts b/packages/transaction-controller/src/utils/layer1-gas-fee-flow.test.ts
index 87ececc2424..b8b952bfcf5 100644
--- a/packages/transaction-controller/src/utils/layer1-gas-fee-flow.test.ts
+++ b/packages/transaction-controller/src/utils/layer1-gas-fee-flow.test.ts
@@ -1,11 +1,11 @@
import type { Provider } from '@metamask/network-controller';
import type { Hex } from '@metamask/utils';
-import type { TransactionControllerMessenger } from '../TransactionController';
-import { TransactionStatus } from '../types';
-import type { Layer1GasFeeFlow, TransactionMeta } from '../types';
-import { updateTransactionLayer1GasFee } from './layer1-gas-fee-flow';
-import { getProvider } from './provider';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
+import { TransactionStatus } from '../types.js';
+import type { Layer1GasFeeFlow, TransactionMeta } from '../types.js';
+import { updateTransactionLayer1GasFee } from './layer1-gas-fee-flow.js';
+import { getProvider } from './provider.js';
jest.mock('@metamask/controller-utils', () => ({
...jest.requireActual('@metamask/controller-utils'),
diff --git a/packages/transaction-controller/src/utils/layer1-gas-fee-flow.ts b/packages/transaction-controller/src/utils/layer1-gas-fee-flow.ts
index f1deca85048..11f0f554d21 100644
--- a/packages/transaction-controller/src/utils/layer1-gas-fee-flow.ts
+++ b/packages/transaction-controller/src/utils/layer1-gas-fee-flow.ts
@@ -1,10 +1,10 @@
import { createModuleLogger } from '@metamask/utils';
import type { Hex } from '@metamask/utils';
-import { projectLogger } from '../logger';
-import type { TransactionControllerMessenger } from '../TransactionController';
-import type { Layer1GasFeeFlow, TransactionMeta } from '../types';
-import { getProvider } from './provider';
+import { projectLogger } from '../logger.js';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
+import type { Layer1GasFeeFlow, TransactionMeta } from '../types.js';
+import { getProvider } from './provider.js';
const log = createModuleLogger(projectLogger, 'layer-1-gas-fee-flow');
diff --git a/packages/transaction-controller/src/utils/nonce.test.ts b/packages/transaction-controller/src/utils/nonce.test.ts
index a9563c8cad4..f1355aaa51e 100644
--- a/packages/transaction-controller/src/utils/nonce.test.ts
+++ b/packages/transaction-controller/src/utils/nonce.test.ts
@@ -3,9 +3,12 @@ import type {
Transaction as NonceTrackerTransaction,
} from '@metamask/nonce-tracker';
-import type { TransactionMeta } from '../types';
-import { TransactionStatus } from '../types';
-import { getAndFormatTransactionsForNonceTracker, getNextNonce } from './nonce';
+import type { TransactionMeta } from '../types.js';
+import { TransactionStatus } from '../types.js';
+import {
+ getAndFormatTransactionsForNonceTracker,
+ getNextNonce,
+} from './nonce.js';
const TRANSACTION_META_MOCK: TransactionMeta = {
chainId: '0x1',
diff --git a/packages/transaction-controller/src/utils/nonce.ts b/packages/transaction-controller/src/utils/nonce.ts
index 8c17ee5c12a..49c65bf336f 100644
--- a/packages/transaction-controller/src/utils/nonce.ts
+++ b/packages/transaction-controller/src/utils/nonce.ts
@@ -4,8 +4,8 @@ import type {
Transaction as NonceTrackerTransaction,
} from '@metamask/nonce-tracker';
-import { createModuleLogger, projectLogger } from '../logger';
-import type { TransactionMeta, TransactionStatus } from '../types';
+import { createModuleLogger, projectLogger } from '../logger.js';
+import type { TransactionMeta, TransactionStatus } from '../types.js';
const log = createModuleLogger(projectLogger, 'nonce');
diff --git a/packages/transaction-controller/src/utils/prepare.test.ts b/packages/transaction-controller/src/utils/prepare.test.ts
index c714afb0f47..a109bc13897 100644
--- a/packages/transaction-controller/src/utils/prepare.test.ts
+++ b/packages/transaction-controller/src/utils/prepare.test.ts
@@ -4,9 +4,9 @@ import {
EOACodeEIP7702Transaction,
} from '@ethereumjs/tx';
-import { TransactionEnvelopeType } from '../types';
-import type { Authorization, TransactionParams } from '../types';
-import { prepareTransaction, serializeTransaction } from './prepare';
+import { TransactionEnvelopeType } from '../types.js';
+import type { Authorization, TransactionParams } from '../types.js';
+import { prepareTransaction, serializeTransaction } from './prepare.js';
const CHAIN_ID_MOCK = '0x123';
diff --git a/packages/transaction-controller/src/utils/prepare.ts b/packages/transaction-controller/src/utils/prepare.ts
index 2ec62c1b645..1586f750984 100644
--- a/packages/transaction-controller/src/utils/prepare.ts
+++ b/packages/transaction-controller/src/utils/prepare.ts
@@ -4,9 +4,9 @@ import type { TypedTransaction, TypedTxData } from '@ethereumjs/tx';
import { TransactionFactory } from '@ethereumjs/tx';
import { bytesToHex } from '@metamask/utils';
import type { Hex } from '@metamask/utils';
-import { cloneDeep } from 'lodash';
+import { cloneDeep } from 'lodash-es';
-import type { AuthorizationList, TransactionParams } from '../types';
+import type { AuthorizationList, TransactionParams } from '../types.js';
export const HARDFORK = Hardfork.Prague;
diff --git a/packages/transaction-controller/src/utils/provider.test.ts b/packages/transaction-controller/src/utils/provider.test.ts
index 248124da355..4c9df1cf674 100644
--- a/packages/transaction-controller/src/utils/provider.test.ts
+++ b/packages/transaction-controller/src/utils/provider.test.ts
@@ -3,8 +3,8 @@ import { NetworkClientType } from '@metamask/network-controller';
import { RpcEndpointType } from '@metamask/network-controller';
import type { Hex } from '@metamask/utils';
-import type { TransactionControllerMessenger } from '../TransactionController';
-import { getProvider, rpcRequest } from './provider';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
+import { getProvider, rpcRequest } from './provider.js';
describe('provider utils', () => {
const requestMock = jest.fn();
diff --git a/packages/transaction-controller/src/utils/provider.ts b/packages/transaction-controller/src/utils/provider.ts
index 0187a158524..ffa95c133b2 100644
--- a/packages/transaction-controller/src/utils/provider.ts
+++ b/packages/transaction-controller/src/utils/provider.ts
@@ -6,8 +6,8 @@ import type {
import { NetworkClientType } from '@metamask/network-controller';
import type { Hex } from '@metamask/utils';
-import { createModuleLogger, projectLogger } from '../logger';
-import type { TransactionControllerMessenger } from '../TransactionController';
+import { createModuleLogger, projectLogger } from '../logger.js';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
const log = createModuleLogger(projectLogger, 'provider');
diff --git a/packages/transaction-controller/src/utils/retry.test.ts b/packages/transaction-controller/src/utils/retry.test.ts
index 48a04bc13f4..5897730741a 100644
--- a/packages/transaction-controller/src/utils/retry.test.ts
+++ b/packages/transaction-controller/src/utils/retry.test.ts
@@ -1,5 +1,5 @@
-import type { TransactionParams } from '../types';
-import { getTransactionParamsWithIncreasedGasFee } from './retry';
+import type { TransactionParams } from '../types.js';
+import { getTransactionParamsWithIncreasedGasFee } from './retry.js';
const RATE_MOCK = 16;
const VALUE_MOCK = '0x111';
diff --git a/packages/transaction-controller/src/utils/retry.ts b/packages/transaction-controller/src/utils/retry.ts
index 9ab1e28aed3..61f37280986 100644
--- a/packages/transaction-controller/src/utils/retry.ts
+++ b/packages/transaction-controller/src/utils/retry.ts
@@ -6,7 +6,7 @@ import type {
FeeMarketEIP1559Values,
GasPriceValue,
TransactionParams,
-} from '../types';
+} from '../types.js';
/**
* Returns new transaction parameters with increased gas fees.
diff --git a/packages/transaction-controller/src/utils/revert-reason.test.ts b/packages/transaction-controller/src/utils/revert-reason.test.ts
index 4133c8902e2..14aee347388 100644
--- a/packages/transaction-controller/src/utils/revert-reason.test.ts
+++ b/packages/transaction-controller/src/utils/revert-reason.test.ts
@@ -1,11 +1,11 @@
-import type { TransactionControllerMessenger } from '../TransactionController';
-import type { TransactionMeta } from '../types';
-import { rpcRequest } from './provider';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
+import type { TransactionMeta } from '../types.js';
+import { rpcRequest } from './provider.js';
import {
decodeRevert,
extractRevert,
OnChainFailureError,
-} from './revert-reason';
+} from './revert-reason.js';
jest.mock('./provider', () => ({
...jest.requireActual('./provider'),
diff --git a/packages/transaction-controller/src/utils/revert-reason.ts b/packages/transaction-controller/src/utils/revert-reason.ts
index 9079b4badeb..6c04c74b9ec 100644
--- a/packages/transaction-controller/src/utils/revert-reason.ts
+++ b/packages/transaction-controller/src/utils/revert-reason.ts
@@ -2,10 +2,10 @@ import { defaultAbiCoder } from '@ethersproject/abi';
import type { NetworkClientId } from '@metamask/network-controller';
import type { Hex } from '@metamask/utils';
-import { createModuleLogger, projectLogger } from '../logger';
-import type { TransactionControllerMessenger } from '../TransactionController';
-import type { Revert, TransactionParams } from '../types';
-import { rpcRequest } from './provider';
+import { createModuleLogger, projectLogger } from '../logger.js';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
+import type { Revert, TransactionParams } from '../types.js';
+import { rpcRequest } from './provider.js';
const log = createModuleLogger(projectLogger, 'revert-reason');
diff --git a/packages/transaction-controller/src/utils/signature.test.ts b/packages/transaction-controller/src/utils/signature.test.ts
index c07e25fce5c..346c1ae45a8 100644
--- a/packages/transaction-controller/src/utils/signature.test.ts
+++ b/packages/transaction-controller/src/utils/signature.test.ts
@@ -1,4 +1,4 @@
-import { isValidSignature } from './signature';
+import { isValidSignature } from './signature.js';
const VALUE_1_MOCK = '0x12345678';
const VALUE_2_MOCK = '0xabcabcabcabcabcabcabcabc';
diff --git a/packages/transaction-controller/src/utils/swaps.test.ts b/packages/transaction-controller/src/utils/swaps.test.ts
index 39d34351008..dc10956a7cc 100644
--- a/packages/transaction-controller/src/utils/swaps.test.ts
+++ b/packages/transaction-controller/src/utils/swaps.test.ts
@@ -6,18 +6,18 @@ import type {
} from '@metamask/messenger';
import type { NetworkClientId } from '@metamask/network-controller';
-import { flushPromises } from '../../../../tests/helpers';
-import { CHAIN_IDS } from '../constants';
-import type { TransactionControllerMessenger } from '../TransactionController';
-import type { TransactionMeta } from '../types';
-import { TransactionType, TransactionStatus } from '../types';
-import { rpcRequest } from './provider';
+import { flushPromises } from '../../../../tests/helpers.js';
+import { CHAIN_IDS } from '../constants.js';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
+import type { TransactionMeta } from '../types.js';
+import { TransactionType, TransactionStatus } from '../types.js';
+import { rpcRequest } from './provider.js';
import {
updateSwapsTransaction,
updatePostTransactionBalance,
UPDATE_POST_TX_BALANCE_ATTEMPTS,
SWAPS_CHAINID_DEFAULT_TOKEN_MAP,
-} from './swaps';
+} from './swaps.js';
jest.mock('./provider', () => ({
rpcRequest: jest.fn(),
diff --git a/packages/transaction-controller/src/utils/swaps.ts b/packages/transaction-controller/src/utils/swaps.ts
index d6c8755b97a..04e5cfd38e9 100644
--- a/packages/transaction-controller/src/utils/swaps.ts
+++ b/packages/transaction-controller/src/utils/swaps.ts
@@ -1,13 +1,13 @@
import type { NetworkClientId } from '@metamask/network-controller';
-import { merge, pickBy } from 'lodash';
-
-import { CHAIN_IDS } from '../constants';
-import { createModuleLogger, projectLogger } from '../logger';
-import type { TransactionControllerMessenger } from '../TransactionController';
-import type { TransactionMeta } from '../types';
-import { TransactionType } from '../types';
-import { rpcRequest } from './provider';
-import { validateIfTransactionUnapproved } from './utils';
+import { merge, pickBy } from 'lodash-es';
+
+import { CHAIN_IDS } from '../constants.js';
+import { createModuleLogger, projectLogger } from '../logger.js';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
+import type { TransactionMeta } from '../types.js';
+import { TransactionType } from '../types.js';
+import { rpcRequest } from './provider.js';
+import { validateIfTransactionUnapproved } from './utils.js';
const log = createModuleLogger(projectLogger, 'swaps');
diff --git a/packages/transaction-controller/src/utils/transaction-type.test.ts b/packages/transaction-controller/src/utils/transaction-type.test.ts
index 2b6b57bee3e..79df204feed 100644
--- a/packages/transaction-controller/src/utils/transaction-type.test.ts
+++ b/packages/transaction-controller/src/utils/transaction-type.test.ts
@@ -8,14 +8,14 @@ import {
} from '@metamask/metamask-eth-abis';
import type { NetworkClientId } from '@metamask/network-controller';
-import type { TransactionControllerMessenger } from '../TransactionController';
-import { TransactionType } from '../types';
-import { DELEGATION_PREFIX } from './eip7702';
-import { rpcRequest } from './provider';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
+import { TransactionType } from '../types.js';
+import { DELEGATION_PREFIX } from './eip7702.js';
+import { rpcRequest } from './provider.js';
import {
decodeTransactionData,
determineTransactionType,
-} from './transaction-type';
+} from './transaction-type.js';
jest.mock('./provider', () => ({
rpcRequest: jest.fn(),
diff --git a/packages/transaction-controller/src/utils/transaction-type.ts b/packages/transaction-controller/src/utils/transaction-type.ts
index 85ccad46cc6..6a258c26fe2 100644
--- a/packages/transaction-controller/src/utils/transaction-type.ts
+++ b/packages/transaction-controller/src/utils/transaction-type.ts
@@ -8,11 +8,14 @@ import {
} from '@metamask/metamask-eth-abis';
import type { NetworkClientId } from '@metamask/network-controller';
-import type { TransactionControllerMessenger } from '../TransactionController';
-import type { InferTransactionTypeResult, TransactionParams } from '../types';
-import { TransactionType } from '../types';
-import { DELEGATION_PREFIX } from './eip7702';
-import { rpcRequest } from './provider';
+import type { TransactionControllerMessenger } from '../TransactionController.js';
+import type {
+ InferTransactionTypeResult,
+ TransactionParams,
+} from '../types.js';
+import { TransactionType } from '../types.js';
+import { DELEGATION_PREFIX } from './eip7702.js';
+import { rpcRequest } from './provider.js';
export const ESTIMATE_GAS_ERROR = 'eth_estimateGas rpc method error';
diff --git a/packages/transaction-controller/src/utils/utils.test.ts b/packages/transaction-controller/src/utils/utils.test.ts
index 64ddcc7d005..c0a9d2a6f2e 100644
--- a/packages/transaction-controller/src/utils/utils.test.ts
+++ b/packages/transaction-controller/src/utils/utils.test.ts
@@ -5,9 +5,9 @@ import type {
FeeMarketEIP1559Values,
GasPriceValue,
TransactionParams,
-} from '../types';
-import { TransactionStatus } from '../types';
-import * as util from './utils';
+} from '../types.js';
+import { TransactionStatus } from '../types.js';
+import * as util from './utils.js';
const MAX_FEE_PER_GAS = 'maxFeePerGas';
const MAX_PRIORITY_FEE_PER_GAS = 'maxPriorityFeePerGas';
diff --git a/packages/transaction-controller/src/utils/utils.ts b/packages/transaction-controller/src/utils/utils.ts
index 553bd2cec22..5b662c675a5 100644
--- a/packages/transaction-controller/src/utils/utils.ts
+++ b/packages/transaction-controller/src/utils/utils.ts
@@ -16,8 +16,8 @@ import type {
TransactionError,
TransactionMeta,
TransactionParams,
-} from '../types';
-import { TransactionEnvelopeType, TransactionStatus } from '../types';
+} from '../types.js';
+import { TransactionEnvelopeType, TransactionStatus } from '../types.js';
export const ESTIMATE_GAS_ERROR = 'eth_estimateGas rpc method error';
@@ -90,8 +90,8 @@ export const validateGasValues = (
): void => {
Object.keys(gasValues).forEach((key) => {
// TODO: Replace `any` with type
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- const value = (gasValues as any)[key];
+
+ const value = gasValues[key];
if (typeof value !== 'string' || !isStrictHexString(value)) {
throw new TypeError(
`expected hex string for ${key} but received: ${value}`,
diff --git a/packages/transaction-controller/src/utils/validation.test.ts b/packages/transaction-controller/src/utils/validation.test.ts
index f9bc98e7644..ab2c78cc6f1 100644
--- a/packages/transaction-controller/src/utils/validation.test.ts
+++ b/packages/transaction-controller/src/utils/validation.test.ts
@@ -1,14 +1,14 @@
import { rpcErrors } from '@metamask/rpc-errors';
import type { Hex } from '@metamask/utils';
-import { TransactionEnvelopeType, TransactionType } from '../types';
-import type { TransactionParams } from '../types';
+import { TransactionEnvelopeType, TransactionType } from '../types.js';
+import type { TransactionParams } from '../types.js';
import {
validateBatchRequest,
validateParamTo,
validateTransactionOrigin,
validateTxParams,
-} from './validation';
+} from './validation.js';
const DATA_MOCK = '0x12345678';
const FROM_MOCK: Hex = '0x1678a085c290ebd122dc42cba69373b5953b831d';
diff --git a/packages/transaction-controller/src/utils/validation.ts b/packages/transaction-controller/src/utils/validation.ts
index c3421bf2028..5617a377b23 100644
--- a/packages/transaction-controller/src/utils/validation.ts
+++ b/packages/transaction-controller/src/utils/validation.ts
@@ -5,13 +5,13 @@ import { JsonRpcError, providerErrors, rpcErrors } from '@metamask/rpc-errors';
import type { Hex } from '@metamask/utils';
import { isStrictHexString, remove0x } from '@metamask/utils';
-import { TransactionEnvelopeType, TransactionType } from '../types';
+import { TransactionEnvelopeType, TransactionType } from '../types.js';
import type {
Authorization,
TransactionBatchRequest,
TransactionParams,
-} from '../types';
-import { isEIP1559Transaction } from './utils';
+} from '../types.js';
+import { isEIP1559Transaction } from './utils.js';
export enum ErrorCode {
DuplicateBundleId = 5720,
diff --git a/packages/transaction-controller/tests/JsonRpcRequestMocks.ts b/packages/transaction-controller/tests/JsonRpcRequestMocks.ts
index 6d211e1af58..64d0b8116fe 100644
--- a/packages/transaction-controller/tests/JsonRpcRequestMocks.ts
+++ b/packages/transaction-controller/tests/JsonRpcRequestMocks.ts
@@ -1,6 +1,6 @@
import type { Hex } from '@metamask/utils';
-import type { JsonRpcRequestMock } from '../../../tests/mock-network';
+import type { JsonRpcRequestMock } from '../../../tests/mock-network.js';
/**
* Builds mock eth_gasPrice request.
diff --git a/packages/transaction-pay-controller/jest.config.js b/packages/transaction-pay-controller/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/transaction-pay-controller/jest.config.js
+++ b/packages/transaction-pay-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/transaction-pay-controller/package.json b/packages/transaction-pay-controller/package.json
index 08ffbff1276..191f0af87aa 100644
--- a/packages/transaction-pay-controller/package.json
+++ b/packages/transaction-pay-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/transaction-pay-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/transaction-pay-controller",
@@ -75,11 +68,10 @@
"bignumber.js": "^9.1.2",
"bn.js": "^5.2.1",
"immer": "^9.0.6",
- "lodash": "^4.17.21"
+ "lodash-es": "^4.17.21"
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/transaction-pay-controller/src/TransactionPayController-method-action-types.ts b/packages/transaction-pay-controller/src/TransactionPayController-method-action-types.ts
index ff753bb1792..14a91436fa2 100644
--- a/packages/transaction-pay-controller/src/TransactionPayController-method-action-types.ts
+++ b/packages/transaction-pay-controller/src/TransactionPayController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { TransactionPayController } from './TransactionPayController';
+import type { TransactionPayController } from './TransactionPayController.js';
/**
* Sets the transaction configuration.
diff --git a/packages/transaction-pay-controller/src/TransactionPayController.test.ts b/packages/transaction-pay-controller/src/TransactionPayController.test.ts
index fcb6c4e840e..09034fd3bfd 100644
--- a/packages/transaction-pay-controller/src/TransactionPayController.test.ts
+++ b/packages/transaction-pay-controller/src/TransactionPayController.test.ts
@@ -3,26 +3,26 @@
import type { TransactionMeta } from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
-import { TransactionPayController } from '.';
-import { updateFiatPayment } from './actions/update-fiat-payment';
-import { updatePaymentToken } from './actions/update-payment-token';
-import { PaymentOverride, TransactionPayStrategy } from './constants';
-import { deriveFiatAssetForFiatPayment } from './strategy/fiat/utils';
-import { getMessengerMock } from './tests/messenger-mock';
+import { TransactionPayController } from './..js';
+import { updateFiatPayment } from './actions/update-fiat-payment.js';
+import { updatePaymentToken } from './actions/update-payment-token.js';
+import { PaymentOverride, TransactionPayStrategy } from './constants.js';
+import { deriveFiatAssetForFiatPayment } from './strategy/fiat/utils.js';
+import { getMessengerMock } from './tests/messenger-mock.js';
import type {
TransactionPayControllerMessenger,
TransactionPayControllerOptions,
TransactionPaySourceAmount,
UpdateTransactionDataCallback,
-} from './types';
-import { getStrategyOrder } from './utils/feature-flags';
-import { updateQuotes } from './utils/quotes';
-import { updateSourceAmounts } from './utils/source-amounts';
+} from './types.js';
+import { getStrategyOrder } from './utils/feature-flags.js';
+import { updateQuotes } from './utils/quotes.js';
+import { updateSourceAmounts } from './utils/source-amounts.js';
import {
getTransaction,
subscribeAssetChanges,
subscribeTransactionChanges,
-} from './utils/transaction';
+} from './utils/transaction.js';
jest.mock('./actions/update-fiat-payment');
jest.mock('./actions/update-payment-token');
diff --git a/packages/transaction-pay-controller/src/TransactionPayController.ts b/packages/transaction-pay-controller/src/TransactionPayController.ts
index c9e31d480d1..996013d631b 100644
--- a/packages/transaction-pay-controller/src/TransactionPayController.ts
+++ b/packages/transaction-pay-controller/src/TransactionPayController.ts
@@ -2,16 +2,16 @@ import type { StateMetadata } from '@metamask/base-controller';
import { BaseController } from '@metamask/base-controller';
import type { TransactionMeta } from '@metamask/transaction-controller';
import type { Draft } from 'immer';
-import { noop } from 'lodash';
+import { noop } from 'lodash-es';
-import { updateFiatPayment } from './actions/update-fiat-payment';
-import { updatePaymentToken } from './actions/update-payment-token';
+import { updateFiatPayment } from './actions/update-fiat-payment.js';
+import { updatePaymentToken } from './actions/update-payment-token.js';
import {
CONTROLLER_NAME,
isTransactionPayStrategy,
TransactionPayStrategy,
-} from './constants';
-import { QuoteRefresher } from './helpers/QuoteRefresher';
+} from './constants.js';
+import { QuoteRefresher } from './helpers/QuoteRefresher.js';
import type {
GetAmountDataCallback,
GetDelegationTransactionCallback,
@@ -25,14 +25,14 @@ import type {
TransactionPayControllerState,
UpdateFiatPaymentRequest,
UpdatePaymentTokenRequest,
-} from './types';
-import { getStrategyOrder } from './utils/feature-flags';
-import { updateQuotes } from './utils/quotes';
-import { updateSourceAmounts } from './utils/source-amounts';
+} from './types.js';
+import { getStrategyOrder } from './utils/feature-flags.js';
+import { updateQuotes } from './utils/quotes.js';
+import { updateSourceAmounts } from './utils/source-amounts.js';
import {
subscribeAssetChanges,
subscribeTransactionChanges,
-} from './utils/transaction';
+} from './utils/transaction.js';
const MESSENGER_EXPOSED_METHODS = [
'getAmountData',
@@ -386,7 +386,7 @@ export class TransactionPayController extends BaseController<
});
if (shouldUpdateQuotes) {
- updateQuotes({
+ void updateQuotes({
getStrategies: this.#getStrategiesWithFallback.bind(this),
messenger: this.messenger,
transactionData: this.state.transactionData[transactionId],
diff --git a/packages/transaction-pay-controller/src/actions/update-fiat-payment.test.ts b/packages/transaction-pay-controller/src/actions/update-fiat-payment.test.ts
index fd04bddee41..10f28b800fc 100644
--- a/packages/transaction-pay-controller/src/actions/update-fiat-payment.test.ts
+++ b/packages/transaction-pay-controller/src/actions/update-fiat-payment.test.ts
@@ -1,9 +1,9 @@
import type { TransactionMeta } from '@metamask/transaction-controller';
-import { noop } from 'lodash';
+import { noop } from 'lodash-es';
-import type { TransactionData, TransactionFiatPayment } from '../types';
-import { getTransaction } from '../utils/transaction';
-import { updateFiatPayment } from './update-fiat-payment';
+import type { TransactionData, TransactionFiatPayment } from '../types.js';
+import { getTransaction } from '../utils/transaction.js';
+import { updateFiatPayment } from './update-fiat-payment.js';
jest.mock('../utils/transaction');
diff --git a/packages/transaction-pay-controller/src/actions/update-fiat-payment.ts b/packages/transaction-pay-controller/src/actions/update-fiat-payment.ts
index 124ba9c5520..c62030a4efc 100644
--- a/packages/transaction-pay-controller/src/actions/update-fiat-payment.ts
+++ b/packages/transaction-pay-controller/src/actions/update-fiat-payment.ts
@@ -1,12 +1,12 @@
import { createModuleLogger } from '@metamask/utils';
-import type { TransactionPayControllerMessenger } from '..';
-import { projectLogger } from '../logger';
+import { projectLogger } from '../logger.js';
import type {
UpdateFiatPaymentRequest,
UpdateTransactionDataCallback,
-} from '../types';
-import { getTransaction } from '../utils/transaction';
+} from '../types.js';
+import { getTransaction } from '../utils/transaction.js';
+import type { TransactionPayControllerMessenger } from './...js';
const log = createModuleLogger(projectLogger, 'update-fiat-payment');
diff --git a/packages/transaction-pay-controller/src/actions/update-payment-token.test.ts b/packages/transaction-pay-controller/src/actions/update-payment-token.test.ts
index 52aebf29725..4d6cc5f51f2 100644
--- a/packages/transaction-pay-controller/src/actions/update-payment-token.test.ts
+++ b/packages/transaction-pay-controller/src/actions/update-payment-token.test.ts
@@ -1,14 +1,14 @@
import type { TransactionMeta } from '@metamask/transaction-controller';
-import { noop } from 'lodash';
+import { noop } from 'lodash-es';
-import type { TransactionData, TransactionPaymentToken } from '../types';
+import type { TransactionData, TransactionPaymentToken } from '../types.js';
import {
getTokenBalance,
getTokenFiatRate,
getTokenInfo,
-} from '../utils/token';
-import { getTransaction } from '../utils/transaction';
-import { updatePaymentToken } from './update-payment-token';
+} from '../utils/token.js';
+import { getTransaction } from '../utils/transaction.js';
+import { updatePaymentToken } from './update-payment-token.js';
jest.mock('../utils/token', () => ({
...jest.createMockFromModule(
diff --git a/packages/transaction-pay-controller/src/actions/update-payment-token.ts b/packages/transaction-pay-controller/src/actions/update-payment-token.ts
index 986738ef4fa..e3f400780b7 100644
--- a/packages/transaction-pay-controller/src/actions/update-payment-token.ts
+++ b/packages/transaction-pay-controller/src/actions/update-payment-token.ts
@@ -1,20 +1,20 @@
import { createModuleLogger } from '@metamask/utils';
import type { Hex } from '@metamask/utils';
-import type { TransactionPayControllerMessenger } from '..';
-import { projectLogger } from '../logger';
+import { projectLogger } from '../logger.js';
import type {
TransactionPaymentToken,
UpdatePaymentTokenRequest,
UpdateTransactionDataCallback,
-} from '../types';
+} from '../types.js';
import {
computeTokenAmounts,
getTokenBalance,
getTokenFiatRate,
getTokenInfo,
-} from '../utils/token';
-import { getTransaction } from '../utils/transaction';
+} from '../utils/token.js';
+import { getTransaction } from '../utils/transaction.js';
+import type { TransactionPayControllerMessenger } from './...js';
const log = createModuleLogger(projectLogger, 'update-payment-token');
diff --git a/packages/transaction-pay-controller/src/constants.test.ts b/packages/transaction-pay-controller/src/constants.test.ts
index 5bb589f50c4..b9e2faabce2 100644
--- a/packages/transaction-pay-controller/src/constants.test.ts
+++ b/packages/transaction-pay-controller/src/constants.test.ts
@@ -3,7 +3,7 @@ import {
POLYGON_PUSD_ADDRESS,
POLYGON_USDCE_ADDRESS,
STABLECOINS,
-} from './constants';
+} from './constants.js';
describe('STABLECOINS', () => {
it('includes both Polygon USDC.e and Polymarket pUSD as Polygon stablecoins', () => {
diff --git a/packages/transaction-pay-controller/src/helpers/QuoteRefresher.test.ts b/packages/transaction-pay-controller/src/helpers/QuoteRefresher.test.ts
index a6f44a5df9a..cd95a2995f2 100644
--- a/packages/transaction-pay-controller/src/helpers/QuoteRefresher.test.ts
+++ b/packages/transaction-pay-controller/src/helpers/QuoteRefresher.test.ts
@@ -2,15 +2,15 @@
import { createDeferredPromise } from '@metamask/utils';
-import { flushPromises } from '../../../../tests/helpers';
-import { TransactionPayStrategy } from '../constants';
-import { getMessengerMock } from '../tests/messenger-mock';
+import { flushPromises } from '../../../../tests/helpers.js';
+import { TransactionPayStrategy } from '../constants.js';
+import { getMessengerMock } from '../tests/messenger-mock.js';
import type {
TransactionData,
TransactionPayControllerMessenger,
-} from '../types';
-import { refreshQuotes } from '../utils/quotes';
-import { QuoteRefresher } from './QuoteRefresher';
+} from '../types.js';
+import { refreshQuotes } from '../utils/quotes.js';
+import { QuoteRefresher } from './QuoteRefresher.js';
jest.mock('../utils/quotes');
diff --git a/packages/transaction-pay-controller/src/helpers/QuoteRefresher.ts b/packages/transaction-pay-controller/src/helpers/QuoteRefresher.ts
index eb0a1f9cdb0..df0bc010b76 100644
--- a/packages/transaction-pay-controller/src/helpers/QuoteRefresher.ts
+++ b/packages/transaction-pay-controller/src/helpers/QuoteRefresher.ts
@@ -1,15 +1,15 @@
import type { TransactionMeta } from '@metamask/transaction-controller';
import { createModuleLogger } from '@metamask/utils';
-import { noop } from 'lodash';
+import { noop } from 'lodash-es';
+import { TransactionPayStrategy } from '../constants.js';
+import { projectLogger } from '../logger.js';
+import type { UpdateTransactionDataCallback } from '../types.js';
+import { refreshQuotes } from '../utils/quotes.js';
import type {
TransactionPayControllerMessenger,
TransactionPayControllerState,
-} from '..';
-import { TransactionPayStrategy } from '../constants';
-import { projectLogger } from '../logger';
-import type { UpdateTransactionDataCallback } from '../types';
-import { refreshQuotes } from '../utils/quotes';
+} from './...js';
const CHECK_INTERVAL = 1000; // 1 Second
@@ -101,7 +101,7 @@ export class QuoteRefresher {
}
this.#timeoutId = setTimeout(() => {
- this.#onInterval().catch(noop);
+ void this.#onInterval().catch(noop);
}, CHECK_INTERVAL);
}
diff --git a/packages/transaction-pay-controller/src/helpers/TransactionPayPublishHook.test.ts b/packages/transaction-pay-controller/src/helpers/TransactionPayPublishHook.test.ts
index 6b268dc80d2..bacc1da8eb2 100644
--- a/packages/transaction-pay-controller/src/helpers/TransactionPayPublishHook.test.ts
+++ b/packages/transaction-pay-controller/src/helpers/TransactionPayPublishHook.test.ts
@@ -3,14 +3,14 @@ import type {
TransactionMeta,
} from '@metamask/transaction-controller';
-import { TransactionPayStrategy } from '..';
-import { getMessengerMock } from '../tests/messenger-mock';
+import { getMessengerMock } from '../tests/messenger-mock.js';
import type {
TransactionPayControllerState,
TransactionPayQuote,
-} from '../types';
-import { getStrategyByName } from '../utils/strategy';
-import { TransactionPayPublishHook } from './TransactionPayPublishHook';
+} from '../types.js';
+import { getStrategyByName } from '../utils/strategy.js';
+import { TransactionPayStrategy } from './...js';
+import { TransactionPayPublishHook } from './TransactionPayPublishHook.js';
jest.mock('../utils/strategy');
diff --git a/packages/transaction-pay-controller/src/helpers/TransactionPayPublishHook.ts b/packages/transaction-pay-controller/src/helpers/TransactionPayPublishHook.ts
index 1b1cce0d216..cf57a00494e 100644
--- a/packages/transaction-pay-controller/src/helpers/TransactionPayPublishHook.ts
+++ b/packages/transaction-pay-controller/src/helpers/TransactionPayPublishHook.ts
@@ -4,16 +4,16 @@ import type { PublishHookResult } from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
import { createModuleLogger } from '@metamask/utils';
-import { TransactionPayStrategy } from '../constants';
-import { projectLogger } from '../logger';
+import { TransactionPayStrategy } from '../constants.js';
+import { projectLogger } from '../logger.js';
import type {
TransactionPayControllerMessenger,
TransactionPayQuote,
-} from '../types';
-import { accountSupports7702 } from '../utils/7702';
-import { prefixError } from '../utils/error-prefix';
-import { getStrategyByName } from '../utils/strategy';
-import { updateTransaction } from '../utils/transaction';
+} from '../types.js';
+import { accountSupports7702 } from '../utils/7702.js';
+import { prefixError } from '../utils/error-prefix.js';
+import { getStrategyByName } from '../utils/strategy.js';
+import { updateTransaction } from '../utils/transaction.js';
const log = createModuleLogger(projectLogger, 'pay-publish-hook');
const ERROR_PREFIX = 'MetaMask Pay: ';
diff --git a/packages/transaction-pay-controller/src/index.ts b/packages/transaction-pay-controller/src/index.ts
index dbab894b8ac..6417727cdab 100644
--- a/packages/transaction-pay-controller/src/index.ts
+++ b/packages/transaction-pay-controller/src/index.ts
@@ -25,7 +25,7 @@ export type {
TransactionPayTotals,
UpdateFiatPaymentRequest,
UpdatePaymentTokenRequest,
-} from './types';
+} from './types.js';
export type {
TransactionPayControllerGetAmountDataAction,
TransactionPayControllerGetDelegationTransactionAction,
@@ -36,7 +36,7 @@ export type {
TransactionPayControllerSetTransactionConfigAction,
TransactionPayControllerUpdatePaymentTokenAction,
TransactionPayControllerUpdateFiatPaymentAction,
-} from './TransactionPayController-method-action-types';
-export { PaymentOverride, TransactionPayStrategy } from './constants';
-export { TransactionPayController } from './TransactionPayController';
-export { TransactionPayPublishHook } from './helpers/TransactionPayPublishHook';
+} from './TransactionPayController-method-action-types.js';
+export { PaymentOverride, TransactionPayStrategy } from './constants.js';
+export { TransactionPayController } from './TransactionPayController.js';
+export { TransactionPayPublishHook } from './helpers/TransactionPayPublishHook.js';
diff --git a/packages/transaction-pay-controller/src/strategy/across/AcrossStrategy.test.ts b/packages/transaction-pay-controller/src/strategy/across/AcrossStrategy.test.ts
index c63d7ba7a86..972c485672d 100644
--- a/packages/transaction-pay-controller/src/strategy/across/AcrossStrategy.test.ts
+++ b/packages/transaction-pay-controller/src/strategy/across/AcrossStrategy.test.ts
@@ -5,18 +5,18 @@ import {
} from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
-import { ARBITRUM_USDC_ADDRESS, CHAIN_ID_ARBITRUM } from '../../constants';
+import { ARBITRUM_USDC_ADDRESS, CHAIN_ID_ARBITRUM } from '../../constants.js';
import type {
PayStrategyCheckQuoteSupportRequest,
PayStrategyExecuteRequest,
PayStrategyGetQuotesRequest,
TransactionPayQuote,
-} from '../../types';
-import { getPayStrategiesConfig } from '../../utils/feature-flags';
-import { getAcrossQuotes } from './across-quotes';
-import { submitAcrossQuotes } from './across-submit';
-import { AcrossStrategy } from './AcrossStrategy';
-import type { AcrossQuote } from './types';
+} from '../../types.js';
+import { getPayStrategiesConfig } from '../../utils/feature-flags.js';
+import { getAcrossQuotes } from './across-quotes.js';
+import { submitAcrossQuotes } from './across-submit.js';
+import { AcrossStrategy } from './AcrossStrategy.js';
+import type { AcrossQuote } from './types.js';
jest.mock('./across-quotes');
jest.mock('./across-submit');
diff --git a/packages/transaction-pay-controller/src/strategy/across/AcrossStrategy.ts b/packages/transaction-pay-controller/src/strategy/across/AcrossStrategy.ts
index 0c942dd7d03..9fcf618a5a0 100644
--- a/packages/transaction-pay-controller/src/strategy/across/AcrossStrategy.ts
+++ b/packages/transaction-pay-controller/src/strategy/across/AcrossStrategy.ts
@@ -6,16 +6,16 @@ import type {
PayStrategyExecuteRequest,
PayStrategyGetQuotesRequest,
TransactionPayQuote,
-} from '../../types';
-import { getPayStrategiesConfig } from '../../utils/feature-flags';
-import { isPredictWithdrawTransaction } from '../../utils/transaction';
-import { getAcrossDestination } from './across-actions';
-import { getAcrossQuotes } from './across-quotes';
-import { submitAcrossQuotes } from './across-submit';
-import { hasUnsupportedTransactionAuthorizationList } from './authorization-list';
-import { isSupportedAcrossPerpsDepositRequest } from './perps';
-import { isAcrossQuoteRequest } from './requests';
-import type { AcrossQuote } from './types';
+} from '../../types.js';
+import { getPayStrategiesConfig } from '../../utils/feature-flags.js';
+import { isPredictWithdrawTransaction } from '../../utils/transaction.js';
+import { getAcrossDestination } from './across-actions.js';
+import { getAcrossQuotes } from './across-quotes.js';
+import { submitAcrossQuotes } from './across-submit.js';
+import { hasUnsupportedTransactionAuthorizationList } from './authorization-list.js';
+import { isSupportedAcrossPerpsDepositRequest } from './perps.js';
+import { isAcrossQuoteRequest } from './requests.js';
+import type { AcrossQuote } from './types.js';
export class AcrossStrategy implements PayStrategy {
supports(request: PayStrategyGetQuotesRequest): boolean {
diff --git a/packages/transaction-pay-controller/src/strategy/across/across-actions.test.ts b/packages/transaction-pay-controller/src/strategy/across/across-actions.test.ts
index b6e6f917537..890ddc892e9 100644
--- a/packages/transaction-pay-controller/src/strategy/across/across-actions.test.ts
+++ b/packages/transaction-pay-controller/src/strategy/across/across-actions.test.ts
@@ -2,7 +2,7 @@ import { Interface } from '@ethersproject/abi';
import type { TransactionMeta } from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
-import type { QuoteRequest } from '../../types';
+import type { QuoteRequest } from '../../types.js';
import {
buildAcrossActionFromCall,
CREATE_PROXY_SIGNATURE,
@@ -11,7 +11,7 @@ import {
isExtractableOutputTokenTransferCall,
SAFE_EXEC_TRANSACTION_SIGNATURE,
TOKEN_TRANSFER_SIGNATURE,
-} from './across-actions';
+} from './across-actions.js';
const TOKEN_TRANSFER_INTERFACE = new Interface([TOKEN_TRANSFER_SIGNATURE]);
const CREATE_PROXY_INTERFACE = new Interface([CREATE_PROXY_SIGNATURE]);
diff --git a/packages/transaction-pay-controller/src/strategy/across/across-actions.ts b/packages/transaction-pay-controller/src/strategy/across/across-actions.ts
index d733d3080cf..24219ae84cd 100644
--- a/packages/transaction-pay-controller/src/strategy/across/across-actions.ts
+++ b/packages/transaction-pay-controller/src/strategy/across/across-actions.ts
@@ -3,9 +3,9 @@ import type { TransactionDescription } from '@ethersproject/abi';
import type { TransactionMeta } from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
-import type { QuoteRequest } from '../../types';
-import { isSupportedAcrossPerpsDepositRequest } from './perps';
-import type { AcrossAction, AcrossActionArg } from './types';
+import type { QuoteRequest } from '../../types.js';
+import { isSupportedAcrossPerpsDepositRequest } from './perps.js';
+import type { AcrossAction, AcrossActionArg } from './types.js';
export const TOKEN_TRANSFER_SIGNATURE =
'function transfer(address to, uint256 value)';
diff --git a/packages/transaction-pay-controller/src/strategy/across/across-quotes.test.ts b/packages/transaction-pay-controller/src/strategy/across/across-quotes.test.ts
index a21ae52c493..4af8a0553c8 100644
--- a/packages/transaction-pay-controller/src/strategy/across/across-quotes.test.ts
+++ b/packages/transaction-pay-controller/src/strategy/across/across-quotes.test.ts
@@ -7,27 +7,27 @@ import type {
} from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
-import { getDefaultRemoteFeatureFlagControllerState } from '../../../../remote-feature-flag-controller/src/remote-feature-flag-controller';
+import { getDefaultRemoteFeatureFlagControllerState } from '../../../../remote-feature-flag-controller/src/remote-feature-flag-controller.js';
import {
ARBITRUM_USDC_ADDRESS,
CHAIN_ID_ARBITRUM,
CHAIN_ID_HYPERCORE,
TransactionPayStrategy,
-} from '../../constants';
-import { getMessengerMock } from '../../tests/messenger-mock';
-import type { QuoteRequest } from '../../types';
+} from '../../constants.js';
+import { getMessengerMock } from '../../tests/messenger-mock.js';
+import type { QuoteRequest } from '../../types.js';
import {
getGasBuffer,
getSlippage,
isEIP7702Chain,
-} from '../../utils/feature-flags';
-import { calculateGasCost, calculateGasFeeTokenCost } from '../../utils/gas';
-import * as quoteGasUtils from '../../utils/quote-gas';
-import { getTokenBalance, getTokenFiatRate } from '../../utils/token';
-import { getAcrossQuotes } from './across-quotes';
-import { ACROSS_HYPERCORE_USDC_PERPS_ADDRESS } from './perps';
-import * as acrossTransactions from './transactions';
-import type { AcrossSwapApprovalResponse } from './types';
+} from '../../utils/feature-flags.js';
+import { calculateGasCost, calculateGasFeeTokenCost } from '../../utils/gas.js';
+import * as quoteGasUtils from '../../utils/quote-gas.js';
+import { getTokenBalance, getTokenFiatRate } from '../../utils/token.js';
+import { getAcrossQuotes } from './across-quotes.js';
+import { ACROSS_HYPERCORE_USDC_PERPS_ADDRESS } from './perps.js';
+import * as acrossTransactions from './transactions.js';
+import type { AcrossSwapApprovalResponse } from './types.js';
jest.mock('../../utils/token');
jest.mock('../../utils/gas', () => ({
diff --git a/packages/transaction-pay-controller/src/strategy/across/across-quotes.ts b/packages/transaction-pay-controller/src/strategy/across/across-quotes.ts
index bd5eec27cb2..4d9360d164a 100644
--- a/packages/transaction-pay-controller/src/strategy/across/across-quotes.ts
+++ b/packages/transaction-pay-controller/src/strategy/across/across-quotes.ts
@@ -4,8 +4,8 @@ import type { Hex } from '@metamask/utils';
import { createModuleLogger } from '@metamask/utils';
import { BigNumber } from 'bignumber.js';
-import { TransactionPayStrategy } from '../../constants';
-import { projectLogger } from '../../logger';
+import { TransactionPayStrategy } from '../../constants.js';
+import { projectLogger } from '../../logger.js';
import type {
Amount,
FiatRates,
@@ -13,38 +13,41 @@ import type {
QuoteRequest,
TransactionPayControllerMessenger,
TransactionPayQuote,
-} from '../../types';
-import { getFiatValueFromUsd, sumAmounts } from '../../utils/amounts';
-import { getPayStrategiesConfig, getSlippage } from '../../utils/feature-flags';
-import { calculateGasCost } from '../../utils/gas';
+} from '../../types.js';
+import { getFiatValueFromUsd, sumAmounts } from '../../utils/amounts.js';
+import {
+ getPayStrategiesConfig,
+ getSlippage,
+} from '../../utils/feature-flags.js';
import {
getGasStationCostInSourceTokenRaw,
getGasStationEligibility,
-} from '../../utils/gas-station';
-import { estimateQuoteGasLimits } from '../../utils/quote-gas';
-import type { QuoteGasTransaction } from '../../utils/quote-gas';
+} from '../../utils/gas-station.js';
+import { calculateGasCost } from '../../utils/gas.js';
+import { estimateQuoteGasLimits } from '../../utils/quote-gas.js';
+import type { QuoteGasTransaction } from '../../utils/quote-gas.js';
import {
getNativeToken,
getTokenBalance,
getTokenFiatRate,
-} from '../../utils/token';
-import { isPredictWithdrawTransaction } from '../../utils/transaction';
-import type { AcrossDestination } from './across-actions';
-import { getAcrossDestination } from './across-actions';
-import { hasUnsupportedTransactionAuthorizationList } from './authorization-list';
-import { normalizeAcrossRequest } from './perps';
-import { isAcrossQuoteRequest } from './requests';
+} from '../../utils/token.js';
+import { isPredictWithdrawTransaction } from '../../utils/transaction.js';
+import type { AcrossDestination } from './across-actions.js';
+import { getAcrossDestination } from './across-actions.js';
+import { hasUnsupportedTransactionAuthorizationList } from './authorization-list.js';
+import { normalizeAcrossRequest } from './perps.js';
+import { isAcrossQuoteRequest } from './requests.js';
import {
getAcrossOrderedTransactions,
getOriginalTransactionGas,
-} from './transactions';
+} from './transactions.js';
import type {
AcrossAction,
AcrossActionRequestBody,
AcrossGasLimits,
AcrossQuote,
AcrossSwapApprovalResponse,
-} from './types';
+} from './types.js';
const log = createModuleLogger(projectLogger, 'across-strategy');
diff --git a/packages/transaction-pay-controller/src/strategy/across/across-submit.test.ts b/packages/transaction-pay-controller/src/strategy/across/across-submit.test.ts
index dd453928c1d..f750b809abd 100644
--- a/packages/transaction-pay-controller/src/strategy/across/across-submit.test.ts
+++ b/packages/transaction-pay-controller/src/strategy/across/across-submit.test.ts
@@ -9,13 +9,13 @@ import type {
} from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
-import { getDefaultRemoteFeatureFlagControllerState } from '../../../../remote-feature-flag-controller/src/remote-feature-flag-controller';
-import { TransactionPayStrategy } from '../../constants';
-import { getMessengerMock } from '../../tests/messenger-mock';
-import type { TransactionPayQuote } from '../../types';
-import { submitAcrossQuotes } from './across-submit';
-import * as acrossTransactions from './transactions';
-import type { AcrossQuote } from './types';
+import { getDefaultRemoteFeatureFlagControllerState } from '../../../../remote-feature-flag-controller/src/remote-feature-flag-controller.js';
+import { TransactionPayStrategy } from '../../constants.js';
+import { getMessengerMock } from '../../tests/messenger-mock.js';
+import type { TransactionPayQuote } from '../../types.js';
+import { submitAcrossQuotes } from './across-submit.js';
+import * as acrossTransactions from './transactions.js';
+import type { AcrossQuote } from './types.js';
jest.mock('@metamask/controller-utils', () => ({
...jest.requireActual('@metamask/controller-utils'),
diff --git a/packages/transaction-pay-controller/src/strategy/across/across-submit.ts b/packages/transaction-pay-controller/src/strategy/across/across-submit.ts
index 02619938fa5..97efb0a93e4 100644
--- a/packages/transaction-pay-controller/src/strategy/across/across-submit.ts
+++ b/packages/transaction-pay-controller/src/strategy/across/across-submit.ts
@@ -12,28 +12,28 @@ import type {
import type { Hex } from '@metamask/utils';
import { createModuleLogger } from '@metamask/utils';
-import { projectLogger } from '../../logger';
+import { projectLogger } from '../../logger.js';
import type {
PayStrategyExecuteRequest,
TransactionPayControllerMessenger,
TransactionPayQuote,
-} from '../../types';
-import { accountSupports7702 } from '../../utils/7702';
-import { getPayStrategiesConfig } from '../../utils/feature-flags';
-import { getGasBuffer } from '../../utils/feature-flags';
-import { getNetworkClientId } from '../../utils/provider';
+} from '../../types.js';
+import { accountSupports7702 } from '../../utils/7702.js';
+import { getPayStrategiesConfig } from '../../utils/feature-flags.js';
+import { getGasBuffer } from '../../utils/feature-flags.js';
+import { getNetworkClientId } from '../../utils/provider.js';
import {
collectTransactionIds,
getTransaction,
updateTransaction,
isPredictWithdrawTransaction,
waitForTransactionConfirmed,
-} from '../../utils/transaction';
+} from '../../utils/transaction.js';
import {
getAcrossOrderedTransactions,
getOriginalTransactionGas,
-} from './transactions';
-import type { AcrossQuote } from './types';
+} from './transactions.js';
+import type { AcrossQuote } from './types.js';
const log = createModuleLogger(projectLogger, 'across-strategy');
const ACROSS_STATUS_POLL_INTERVAL = 1000;
diff --git a/packages/transaction-pay-controller/src/strategy/across/authorization-list.ts b/packages/transaction-pay-controller/src/strategy/across/authorization-list.ts
index c1570984585..c9e08cf8424 100644
--- a/packages/transaction-pay-controller/src/strategy/across/authorization-list.ts
+++ b/packages/transaction-pay-controller/src/strategy/across/authorization-list.ts
@@ -1,7 +1,7 @@
import type { TransactionMeta } from '@metamask/transaction-controller';
-import type { QuoteRequest } from '../../types';
-import { isPredictWithdrawTransaction } from '../../utils/transaction';
+import type { QuoteRequest } from '../../types.js';
+import { isPredictWithdrawTransaction } from '../../utils/transaction.js';
/**
* Check whether an authorization list on the original transaction is unsupported by Across.
diff --git a/packages/transaction-pay-controller/src/strategy/across/perps.ts b/packages/transaction-pay-controller/src/strategy/across/perps.ts
index 0a24e7617f8..89a2b1242e4 100644
--- a/packages/transaction-pay-controller/src/strategy/across/perps.ts
+++ b/packages/transaction-pay-controller/src/strategy/across/perps.ts
@@ -8,8 +8,8 @@ import {
CHAIN_ID_HYPERCORE,
HYPERCORE_USDC_DECIMALS,
USDC_DECIMALS,
-} from '../../constants';
-import type { QuoteRequest } from '../../types';
+} from '../../constants.js';
+import type { QuoteRequest } from '../../types.js';
export const ACROSS_HYPERCORE_USDC_PERPS_ADDRESS =
'0x2100000000000000000000000000000000000000' as Hex;
diff --git a/packages/transaction-pay-controller/src/strategy/across/requests.ts b/packages/transaction-pay-controller/src/strategy/across/requests.ts
index f662dc7ae60..bd76b694d09 100644
--- a/packages/transaction-pay-controller/src/strategy/across/requests.ts
+++ b/packages/transaction-pay-controller/src/strategy/across/requests.ts
@@ -1,4 +1,4 @@
-import type { QuoteRequest } from '../../types';
+import type { QuoteRequest } from '../../types.js';
export function isAcrossQuoteRequest(request: QuoteRequest): boolean {
return (
diff --git a/packages/transaction-pay-controller/src/strategy/across/transactions.test.ts b/packages/transaction-pay-controller/src/strategy/across/transactions.test.ts
index 9647e5f48ee..28235b4c34b 100644
--- a/packages/transaction-pay-controller/src/strategy/across/transactions.test.ts
+++ b/packages/transaction-pay-controller/src/strategy/across/transactions.test.ts
@@ -1,8 +1,8 @@
import { TransactionType } from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
-import { getAcrossOrderedTransactions } from './transactions';
-import type { AcrossSwapApprovalResponse } from './types';
+import { getAcrossOrderedTransactions } from './transactions.js';
+import type { AcrossSwapApprovalResponse } from './types.js';
const QUOTE_MOCK: AcrossSwapApprovalResponse = {
approvalTxns: [
diff --git a/packages/transaction-pay-controller/src/strategy/across/transactions.ts b/packages/transaction-pay-controller/src/strategy/across/transactions.ts
index 38d04fff10b..3fe5d2260af 100644
--- a/packages/transaction-pay-controller/src/strategy/across/transactions.ts
+++ b/packages/transaction-pay-controller/src/strategy/across/transactions.ts
@@ -2,7 +2,7 @@ import { TransactionType } from '@metamask/transaction-controller';
import type { TransactionMeta } from '@metamask/transaction-controller';
import { BigNumber } from 'bignumber.js';
-import type { AcrossSwapApprovalResponse } from './types';
+import type { AcrossSwapApprovalResponse } from './types.js';
export type AcrossOrderedTransaction = {
chainId: number;
diff --git a/packages/transaction-pay-controller/src/strategy/fiat/FiatStrategy.test.ts b/packages/transaction-pay-controller/src/strategy/fiat/FiatStrategy.test.ts
index b342021aebd..98ad2a52006 100644
--- a/packages/transaction-pay-controller/src/strategy/fiat/FiatStrategy.test.ts
+++ b/packages/transaction-pay-controller/src/strategy/fiat/FiatStrategy.test.ts
@@ -1,11 +1,11 @@
import type { TransactionMeta } from '@metamask/transaction-controller';
-import type { TransactionPayControllerMessenger } from '../..';
-import type { TransactionPayQuote } from '../../types';
-import { getFiatQuotes } from './fiat-quotes';
-import { submitFiatQuotes } from './fiat-submit';
-import { FiatStrategy } from './FiatStrategy';
-import type { FiatQuote } from './types';
+import type { TransactionPayControllerMessenger } from '../...js';
+import type { TransactionPayQuote } from '../../types.js';
+import { getFiatQuotes } from './fiat-quotes.js';
+import { submitFiatQuotes } from './fiat-submit.js';
+import { FiatStrategy } from './FiatStrategy.js';
+import type { FiatQuote } from './types.js';
jest.mock('./fiat-quotes');
jest.mock('./fiat-submit');
diff --git a/packages/transaction-pay-controller/src/strategy/fiat/FiatStrategy.ts b/packages/transaction-pay-controller/src/strategy/fiat/FiatStrategy.ts
index fca14901409..b6444f3c286 100644
--- a/packages/transaction-pay-controller/src/strategy/fiat/FiatStrategy.ts
+++ b/packages/transaction-pay-controller/src/strategy/fiat/FiatStrategy.ts
@@ -3,11 +3,11 @@ import type {
PayStrategyExecuteRequest,
PayStrategyGetQuotesRequest,
TransactionPayQuote,
-} from '../../types';
-import { prefixError } from '../../utils/error-prefix';
-import { getFiatQuotes } from './fiat-quotes';
-import { submitFiatQuotes } from './fiat-submit';
-import type { FiatQuote } from './types';
+} from '../../types.js';
+import { prefixError } from '../../utils/error-prefix.js';
+import { getFiatQuotes } from './fiat-quotes.js';
+import { submitFiatQuotes } from './fiat-submit.js';
+import type { FiatQuote } from './types.js';
const ERROR_PREFIX = 'Fiat: ';
diff --git a/packages/transaction-pay-controller/src/strategy/fiat/constants.ts b/packages/transaction-pay-controller/src/strategy/fiat/constants.ts
index 367c799ea22..fea887b8ec6 100644
--- a/packages/transaction-pay-controller/src/strategy/fiat/constants.ts
+++ b/packages/transaction-pay-controller/src/strategy/fiat/constants.ts
@@ -8,7 +8,7 @@ import {
CHAIN_ID_POLYGON,
MUSD_MONAD_ADDRESS,
NATIVE_TOKEN_ADDRESS,
-} from '../../constants';
+} from '../../constants.js';
export const DEFAULT_FIAT_CURRENCY = 'USD';
diff --git a/packages/transaction-pay-controller/src/strategy/fiat/fiat-direct-musd.test.ts b/packages/transaction-pay-controller/src/strategy/fiat/fiat-direct-musd.test.ts
index 2832aced2aa..785b82cf095 100644
--- a/packages/transaction-pay-controller/src/strategy/fiat/fiat-direct-musd.test.ts
+++ b/packages/transaction-pay-controller/src/strategy/fiat/fiat-direct-musd.test.ts
@@ -3,20 +3,20 @@ import type { TransactionMeta } from '@metamask/transaction-controller';
import { TransactionType } from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
-import { TransactionPayStrategy } from '../../constants';
+import { TransactionPayStrategy } from '../../constants.js';
import type {
PayStrategyGetQuotesRequest,
TransactionFiatPayment,
TransactionPayRequiredToken,
TransactionPayQuote,
-} from '../../types';
-import { buildCaipAssetType, getTokenInfo } from '../../utils/token';
-import { getTransaction } from '../../utils/transaction';
-import { DEFAULT_FIAT_CURRENCY, MUSD_MONAD_FIAT_ASSET } from './constants';
+} from '../../types.js';
+import { buildCaipAssetType, getTokenInfo } from '../../utils/token.js';
+import { getTransaction } from '../../utils/transaction.js';
+import { DEFAULT_FIAT_CURRENCY, MUSD_MONAD_FIAT_ASSET } from './constants.js';
import {
getDirectMusdFiatQuote,
isDirectMusdMoneyAccountQuote,
-} from './fiat-direct-musd';
+} from './fiat-direct-musd.js';
jest.mock('../../utils/token');
jest.mock('../../utils/transaction');
diff --git a/packages/transaction-pay-controller/src/strategy/fiat/fiat-direct-musd.ts b/packages/transaction-pay-controller/src/strategy/fiat/fiat-direct-musd.ts
index 976bffcd9d2..e1efce2806e 100644
--- a/packages/transaction-pay-controller/src/strategy/fiat/fiat-direct-musd.ts
+++ b/packages/transaction-pay-controller/src/strategy/fiat/fiat-direct-musd.ts
@@ -6,27 +6,27 @@ import type { Hex } from '@metamask/utils';
import { createModuleLogger } from '@metamask/utils';
import { BigNumber } from 'bignumber.js';
-import { TransactionPayStrategy } from '../../constants';
-import { projectLogger } from '../../logger';
+import { TransactionPayStrategy } from '../../constants.js';
+import { projectLogger } from '../../logger.js';
import type {
PayStrategyExecuteRequest,
PayStrategyGetQuotesRequest,
TransactionFiatPayment,
TransactionPayRequiredToken,
TransactionPayQuote,
-} from '../../types';
-import { prefixError } from '../../utils/error-prefix';
-import { getFiatVaultDisabled } from '../../utils/feature-flags';
-import { submitMoneyAccountVaultDeposit } from '../../utils/ma-vault-deposit';
-import { buildCaipAssetType, getTokenInfo } from '../../utils/token';
-import { MUSD_MONAD_FIAT_ASSET } from './constants';
-import type { FiatQuote } from './types';
+} from '../../types.js';
+import { prefixError } from '../../utils/error-prefix.js';
+import { getFiatVaultDisabled } from '../../utils/feature-flags.js';
+import { submitMoneyAccountVaultDeposit } from '../../utils/ma-vault-deposit.js';
+import { buildCaipAssetType, getTokenInfo } from '../../utils/token.js';
+import { MUSD_MONAD_FIAT_ASSET } from './constants.js';
+import type { FiatQuote } from './types.js';
import {
getRampsQuote,
getRawSourceAmountFromOrderCryptoAmount,
resolveSourceAmountRaw,
validateOrderAsset,
-} from './utils';
+} from './utils.js';
const log = createModuleLogger(projectLogger, 'fiat-direct-musd');
const DIRECT_MUSD_ERROR_PREFIX = 'Direct mUSD: ';
diff --git a/packages/transaction-pay-controller/src/strategy/fiat/fiat-quotes.test.ts b/packages/transaction-pay-controller/src/strategy/fiat/fiat-quotes.test.ts
index 580b868bc62..7a541090888 100644
--- a/packages/transaction-pay-controller/src/strategy/fiat/fiat-quotes.test.ts
+++ b/packages/transaction-pay-controller/src/strategy/fiat/fiat-quotes.test.ts
@@ -6,29 +6,32 @@ import type { TransactionMeta } from '@metamask/transaction-controller';
import { TransactionType } from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
-import { NATIVE_TOKEN_ADDRESS, TransactionPayStrategy } from '../../constants';
+import {
+ NATIVE_TOKEN_ADDRESS,
+ TransactionPayStrategy,
+} from '../../constants.js';
import type {
PayStrategyGetQuotesRequest,
TransactionFiatPayment,
TransactionPayQuote,
TransactionPayRequiredToken,
-} from '../../types';
+} from '../../types.js';
import {
buildCaipAssetType,
computeRawFromFiatAmount,
getTokenFiatRate,
getTokenInfo,
-} from '../../utils/token';
-import { getRelayQuotes } from '../relay/relay-quotes';
-import type { RelayQuote } from '../relay/types';
-import type { TransactionPayFiatAsset } from './constants';
-import { DEFAULT_FIAT_CURRENCY, MUSD_MONAD_FIAT_ASSET } from './constants';
-import { getFiatQuotes } from './fiat-quotes';
+} from '../../utils/token.js';
+import { getRelayQuotes } from '../relay/relay-quotes.js';
+import type { RelayQuote } from '../relay/types.js';
+import type { TransactionPayFiatAsset } from './constants.js';
+import { DEFAULT_FIAT_CURRENCY, MUSD_MONAD_FIAT_ASSET } from './constants.js';
+import { getFiatQuotes } from './fiat-quotes.js';
import {
deriveFiatAssetForFiatPayment,
getRawSourceAmountFromOrderCryptoAmount,
isMoneyAccountDepositTransaction,
-} from './utils';
+} from './utils.js';
jest.mock('../relay/relay-quotes');
jest.mock('../../utils/token');
diff --git a/packages/transaction-pay-controller/src/strategy/fiat/fiat-quotes.ts b/packages/transaction-pay-controller/src/strategy/fiat/fiat-quotes.ts
index 5359bf83e50..88e52c2b253 100644
--- a/packages/transaction-pay-controller/src/strategy/fiat/fiat-quotes.ts
+++ b/packages/transaction-pay-controller/src/strategy/fiat/fiat-quotes.ts
@@ -3,32 +3,35 @@ import type { Hex } from '@metamask/utils';
import { createModuleLogger } from '@metamask/utils';
import { BigNumber } from 'bignumber.js';
-import { NATIVE_TOKEN_ADDRESS, TransactionPayStrategy } from '../../constants';
-import { projectLogger } from '../../logger';
+import {
+ NATIVE_TOKEN_ADDRESS,
+ TransactionPayStrategy,
+} from '../../constants.js';
+import { projectLogger } from '../../logger.js';
import type {
PayStrategyGetQuotesRequest,
QuoteRequest,
TransactionFiatPayment,
TransactionPayRequiredToken,
TransactionPayQuote,
-} from '../../types';
-import { getDirectMoneyMusdEnabled } from '../../utils/feature-flags';
+} from '../../types.js';
+import { getDirectMoneyMusdEnabled } from '../../utils/feature-flags.js';
import {
buildCaipAssetType,
computeRawFromFiatAmount,
getTokenFiatRate,
getTokenInfo,
-} from '../../utils/token';
-import { getRelayQuotes } from '../relay/relay-quotes';
-import type { RelayQuote } from '../relay/types';
-import type { TransactionPayFiatAsset } from './constants';
-import { getDirectMusdFiatQuote } from './fiat-direct-musd';
-import type { FiatQuote } from './types';
+} from '../../utils/token.js';
+import { getRelayQuotes } from '../relay/relay-quotes.js';
+import type { RelayQuote } from '../relay/types.js';
+import type { TransactionPayFiatAsset } from './constants.js';
+import { getDirectMusdFiatQuote } from './fiat-direct-musd.js';
+import type { FiatQuote } from './types.js';
import {
deriveFiatAssetForFiatPayment,
getRampsQuote,
isMoneyAccountDepositTransaction,
-} from './utils';
+} from './utils.js';
const log = createModuleLogger(projectLogger, 'fiat-strategy');
diff --git a/packages/transaction-pay-controller/src/strategy/fiat/fiat-submit-simple.test.ts b/packages/transaction-pay-controller/src/strategy/fiat/fiat-submit-simple.test.ts
index 6168dd9e875..502b3537238 100644
--- a/packages/transaction-pay-controller/src/strategy/fiat/fiat-submit-simple.test.ts
+++ b/packages/transaction-pay-controller/src/strategy/fiat/fiat-submit-simple.test.ts
@@ -2,18 +2,18 @@ import type { TransactionMeta } from '@metamask/transaction-controller';
import { TransactionType } from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
-import { TransactionPayStrategy } from '../../constants';
+import { TransactionPayStrategy } from '../../constants.js';
import type {
PayStrategyExecuteRequest,
QuoteRequest,
TransactionPayQuote,
-} from '../../types';
-import { getFiatMaxRateDriftPercent } from '../../utils/feature-flags';
-import { getRelayQuotes } from '../relay/relay-quotes';
-import { submitRelayQuotes } from '../relay/relay-submit';
-import type { RelayQuote } from '../relay/types';
-import { submitSimpleRelay } from './fiat-submit-simple';
-import type { FiatQuote } from './types';
+} from '../../types.js';
+import { getFiatMaxRateDriftPercent } from '../../utils/feature-flags.js';
+import { getRelayQuotes } from '../relay/relay-quotes.js';
+import { submitRelayQuotes } from '../relay/relay-submit.js';
+import type { RelayQuote } from '../relay/types.js';
+import { submitSimpleRelay } from './fiat-submit-simple.js';
+import type { FiatQuote } from './types.js';
jest.mock('../../utils/feature-flags');
jest.mock('../relay/relay-quotes');
diff --git a/packages/transaction-pay-controller/src/strategy/fiat/fiat-submit-simple.ts b/packages/transaction-pay-controller/src/strategy/fiat/fiat-submit-simple.ts
index be1aca5e7f5..12f3d6a3b09 100644
--- a/packages/transaction-pay-controller/src/strategy/fiat/fiat-submit-simple.ts
+++ b/packages/transaction-pay-controller/src/strategy/fiat/fiat-submit-simple.ts
@@ -1,13 +1,13 @@
import type { Hex } from '@metamask/utils';
import { createModuleLogger } from '@metamask/utils';
-import { projectLogger } from '../../logger';
-import type { PayStrategyExecuteRequest, QuoteRequest } from '../../types';
-import { getFiatMaxRateDriftPercent } from '../../utils/feature-flags';
-import { getRelayQuotes } from '../relay/relay-quotes';
-import { submitRelayQuotes } from '../relay/relay-submit';
-import type { FiatQuote } from './types';
-import { validateRelayRateDrift } from './utils';
+import { projectLogger } from '../../logger.js';
+import type { PayStrategyExecuteRequest, QuoteRequest } from '../../types.js';
+import { getFiatMaxRateDriftPercent } from '../../utils/feature-flags.js';
+import { getRelayQuotes } from '../relay/relay-quotes.js';
+import { submitRelayQuotes } from '../relay/relay-submit.js';
+import type { FiatQuote } from './types.js';
+import { validateRelayRateDrift } from './utils.js';
const log = createModuleLogger(projectLogger, 'fiat-submit-simple');
diff --git a/packages/transaction-pay-controller/src/strategy/fiat/fiat-submit-with-transaction-data.test.ts b/packages/transaction-pay-controller/src/strategy/fiat/fiat-submit-with-transaction-data.test.ts
index 99a744eff5b..5631f65e927 100644
--- a/packages/transaction-pay-controller/src/strategy/fiat/fiat-submit-with-transaction-data.test.ts
+++ b/packages/transaction-pay-controller/src/strategy/fiat/fiat-submit-with-transaction-data.test.ts
@@ -2,22 +2,22 @@ import type { TransactionMeta } from '@metamask/transaction-controller';
import { TransactionType } from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
-import { TransactionPayStrategy } from '../../constants';
+import { TransactionPayStrategy } from '../../constants.js';
import type {
PayStrategyExecuteRequest,
QuoteRequest,
TransactionPayQuote,
-} from '../../types';
+} from '../../types.js';
import {
getFiatFeeReserveMultiplier,
getFiatMaxRateDriftPercent,
-} from '../../utils/feature-flags';
-import { getTransaction, updateTransaction } from '../../utils/transaction';
-import { getRelayQuotes } from '../relay/relay-quotes';
-import { submitRelayQuotes } from '../relay/relay-submit';
-import type { RelayQuote } from '../relay/types';
-import { submitWithTransactionData } from './fiat-submit-with-transaction-data';
-import type { FiatQuote } from './types';
+} from '../../utils/feature-flags.js';
+import { getTransaction, updateTransaction } from '../../utils/transaction.js';
+import { getRelayQuotes } from '../relay/relay-quotes.js';
+import { submitRelayQuotes } from '../relay/relay-submit.js';
+import type { RelayQuote } from '../relay/types.js';
+import { submitWithTransactionData } from './fiat-submit-with-transaction-data.js';
+import type { FiatQuote } from './types.js';
jest.mock('../../utils/feature-flags');
jest.mock('../../utils/transaction');
diff --git a/packages/transaction-pay-controller/src/strategy/fiat/fiat-submit-with-transaction-data.ts b/packages/transaction-pay-controller/src/strategy/fiat/fiat-submit-with-transaction-data.ts
index 03f975e1168..6d6d5944458 100644
--- a/packages/transaction-pay-controller/src/strategy/fiat/fiat-submit-with-transaction-data.ts
+++ b/packages/transaction-pay-controller/src/strategy/fiat/fiat-submit-with-transaction-data.ts
@@ -2,18 +2,18 @@ import type { Hex } from '@metamask/utils';
import { createModuleLogger } from '@metamask/utils';
import { BigNumber } from 'bignumber.js';
-import { projectLogger } from '../../logger';
-import type { PayStrategyExecuteRequest, QuoteRequest } from '../../types';
+import { projectLogger } from '../../logger.js';
+import type { PayStrategyExecuteRequest, QuoteRequest } from '../../types.js';
import {
getFiatFeeReserveMultiplier,
getFiatMaxRateDriftPercent,
-} from '../../utils/feature-flags';
-import { getTransaction, updateTransaction } from '../../utils/transaction';
-import { getRelayQuotes } from '../relay/relay-quotes';
-import { submitRelayQuotes } from '../relay/relay-submit';
-import type { RelayQuote } from '../relay/types';
-import type { FiatQuote } from './types';
-import { validateRelayRateDrift } from './utils';
+} from '../../utils/feature-flags.js';
+import { getTransaction, updateTransaction } from '../../utils/transaction.js';
+import { getRelayQuotes } from '../relay/relay-quotes.js';
+import { submitRelayQuotes } from '../relay/relay-submit.js';
+import type { RelayQuote } from '../relay/types.js';
+import type { FiatQuote } from './types.js';
+import { validateRelayRateDrift } from './utils.js';
const log = createModuleLogger(projectLogger, 'fiat-submit-calldata');
diff --git a/packages/transaction-pay-controller/src/strategy/fiat/fiat-submit.test.ts b/packages/transaction-pay-controller/src/strategy/fiat/fiat-submit.test.ts
index 1dee9b8a253..2c8310931c0 100644
--- a/packages/transaction-pay-controller/src/strategy/fiat/fiat-submit.test.ts
+++ b/packages/transaction-pay-controller/src/strategy/fiat/fiat-submit.test.ts
@@ -8,29 +8,32 @@ import type { TransactionMeta } from '@metamask/transaction-controller';
import { TransactionType } from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
-import { TransactionPayStrategy } from '../../constants';
+import { TransactionPayStrategy } from '../../constants.js';
import type {
PayStrategyExecuteRequest,
QuoteRequest,
TransactionPayFiatOptions,
TransactionPayQuote,
-} from '../../types';
-import { buildCaipAssetType } from '../../utils/token';
+} from '../../types.js';
+import { buildCaipAssetType } from '../../utils/token.js';
import {
collectTransactionIds,
getTransaction,
updateTransaction,
waitForTransactionConfirmed,
-} from '../../utils/transaction';
-import { getRelayQuotes } from '../relay/relay-quotes';
-import { submitRelayQuotes } from '../relay/relay-submit';
-import type { RelayQuote } from '../relay/types';
-import type { TransactionPayFiatAsset } from './constants';
-import { MUSD_MONAD_FIAT_ASSET } from './constants';
-import { submitFiatQuotes } from './fiat-submit';
-import { fundFiatOrderFromTestSource } from './fiat-test-funding';
-import type { FiatQuote } from './types';
-import { deriveFiatAssetForFiatPayment, resolveSourceAmountRaw } from './utils';
+} from '../../utils/transaction.js';
+import { getRelayQuotes } from '../relay/relay-quotes.js';
+import { submitRelayQuotes } from '../relay/relay-submit.js';
+import type { RelayQuote } from '../relay/types.js';
+import type { TransactionPayFiatAsset } from './constants.js';
+import { MUSD_MONAD_FIAT_ASSET } from './constants.js';
+import { submitFiatQuotes } from './fiat-submit.js';
+import { fundFiatOrderFromTestSource } from './fiat-test-funding.js';
+import type { FiatQuote } from './types.js';
+import {
+ deriveFiatAssetForFiatPayment,
+ resolveSourceAmountRaw,
+} from './utils.js';
jest.mock('./utils', () => ({
...jest.requireActual('./utils'),
diff --git a/packages/transaction-pay-controller/src/strategy/fiat/fiat-submit.ts b/packages/transaction-pay-controller/src/strategy/fiat/fiat-submit.ts
index 949170a4fea..19042c2a3ee 100644
--- a/packages/transaction-pay-controller/src/strategy/fiat/fiat-submit.ts
+++ b/packages/transaction-pay-controller/src/strategy/fiat/fiat-submit.ts
@@ -3,33 +3,33 @@ import { RampsOrderStatus } from '@metamask/ramps-controller';
import type { Hex } from '@metamask/utils';
import { createModuleLogger } from '@metamask/utils';
-import { projectLogger } from '../../logger';
+import { projectLogger } from '../../logger.js';
import type {
PayStrategy,
PayStrategyExecuteRequest,
TransactionPayFiatOptions,
TransactionPayControllerMessenger,
-} from '../../types';
-import { prefixError } from '../../utils/error-prefix';
+} from '../../types.js';
+import { prefixError } from '../../utils/error-prefix.js';
import {
getFiatOrderPollIntervalMs,
getFiatOrderPollTimeoutMs,
-} from '../../utils/feature-flags';
-import { updateTransaction } from '../../utils/transaction';
+} from '../../utils/feature-flags.js';
+import { updateTransaction } from '../../utils/transaction.js';
import {
isDirectMusdMoneyAccountQuote,
submitDirectMusdAfterFiatCompletion,
-} from './fiat-direct-musd';
-import { submitSimpleRelay } from './fiat-submit-simple';
-import { submitWithTransactionData } from './fiat-submit-with-transaction-data';
-import { fundFiatOrderFromTestSource } from './fiat-test-funding';
-import type { FiatQuote } from './types';
+} from './fiat-direct-musd.js';
+import { submitSimpleRelay } from './fiat-submit-simple.js';
+import { submitWithTransactionData } from './fiat-submit-with-transaction-data.js';
+import { fundFiatOrderFromTestSource } from './fiat-test-funding.js';
+import type { FiatQuote } from './types.js';
import {
deriveFiatAssetForFiatPayment,
extractProviderCode,
resolveSourceAmountRaw,
validateOrderAsset,
-} from './utils';
+} from './utils.js';
const log = createModuleLogger(projectLogger, 'fiat-submit');
const POST_RAMP_ERROR_PREFIX = 'Post-Ramp: ';
diff --git a/packages/transaction-pay-controller/src/strategy/fiat/fiat-test-funding.test.ts b/packages/transaction-pay-controller/src/strategy/fiat/fiat-test-funding.test.ts
index b80a1bc7740..f104e467043 100644
--- a/packages/transaction-pay-controller/src/strategy/fiat/fiat-test-funding.test.ts
+++ b/packages/transaction-pay-controller/src/strategy/fiat/fiat-test-funding.test.ts
@@ -3,19 +3,22 @@ import type { TransactionMeta } from '@metamask/transaction-controller';
import { TransactionType } from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
-import { NATIVE_TOKEN_ADDRESS, TransactionPayStrategy } from '../../constants';
-import type { TransactionPayQuote } from '../../types';
-import { getNetworkClientId } from '../../utils/provider';
+import {
+ NATIVE_TOKEN_ADDRESS,
+ TransactionPayStrategy,
+} from '../../constants.js';
+import type { TransactionPayQuote } from '../../types.js';
+import { getNetworkClientId } from '../../utils/provider.js';
import {
buildCaipAssetType,
getLiveTokenBalance,
getNativeToken,
getTokenInfo,
-} from '../../utils/token';
-import { waitForTransactionConfirmed } from '../../utils/transaction';
-import { fundFiatOrderFromTestSource } from './fiat-test-funding';
-import type { FiatQuote } from './types';
-import { deriveFiatAssetForFiatPayment } from './utils';
+} from '../../utils/token.js';
+import { waitForTransactionConfirmed } from '../../utils/transaction.js';
+import { fundFiatOrderFromTestSource } from './fiat-test-funding.js';
+import type { FiatQuote } from './types.js';
+import { deriveFiatAssetForFiatPayment } from './utils.js';
jest.mock('../../utils/provider');
jest.mock('../../utils/token');
diff --git a/packages/transaction-pay-controller/src/strategy/fiat/fiat-test-funding.ts b/packages/transaction-pay-controller/src/strategy/fiat/fiat-test-funding.ts
index 8a4f72e6fa9..00136c1e900 100644
--- a/packages/transaction-pay-controller/src/strategy/fiat/fiat-test-funding.ts
+++ b/packages/transaction-pay-controller/src/strategy/fiat/fiat-test-funding.ts
@@ -11,25 +11,25 @@ import type { Hex } from '@metamask/utils';
import { createModuleLogger } from '@metamask/utils';
import { BigNumber } from 'bignumber.js';
-import { NATIVE_TOKEN_ADDRESS } from '../../constants';
-import { projectLogger } from '../../logger';
+import { NATIVE_TOKEN_ADDRESS } from '../../constants.js';
+import { projectLogger } from '../../logger.js';
import type {
TransactionPayControllerMessenger,
TransactionPayFiatOptions,
TransactionPayQuote,
-} from '../../types';
-import { getNetworkClientId } from '../../utils/provider';
+} from '../../types.js';
+import { getNetworkClientId } from '../../utils/provider.js';
import {
buildCaipAssetType,
getLiveTokenBalance,
getNativeToken,
getTokenInfo,
-} from '../../utils/token';
-import { waitForTransactionConfirmed } from '../../utils/transaction';
-import { isDirectMusdMoneyAccountQuote } from './fiat-direct-musd';
-import type { FiatQuote } from './types';
-import { deriveFiatAssetForFiatPayment } from './utils';
-import { getRawSourceAmountFromOrderCryptoAmount } from './utils';
+} from '../../utils/token.js';
+import { waitForTransactionConfirmed } from '../../utils/transaction.js';
+import { isDirectMusdMoneyAccountQuote } from './fiat-direct-musd.js';
+import type { FiatQuote } from './types.js';
+import { deriveFiatAssetForFiatPayment } from './utils.js';
+import { getRawSourceAmountFromOrderCryptoAmount } from './utils.js';
const log = createModuleLogger(projectLogger, 'fiat-test-funding');
const TOKEN_TRANSFER_INTERFACE = new Interface([
diff --git a/packages/transaction-pay-controller/src/strategy/fiat/types.ts b/packages/transaction-pay-controller/src/strategy/fiat/types.ts
index a64c5aefea0..d40041b6748 100644
--- a/packages/transaction-pay-controller/src/strategy/fiat/types.ts
+++ b/packages/transaction-pay-controller/src/strategy/fiat/types.ts
@@ -1,6 +1,6 @@
import type { Quote } from '@metamask/ramps-controller';
-import type { RelayQuote } from '../relay/types';
+import type { RelayQuote } from '../relay/types.js';
export type FiatQuote = {
rampsQuote: Quote;
diff --git a/packages/transaction-pay-controller/src/strategy/fiat/utils.test.ts b/packages/transaction-pay-controller/src/strategy/fiat/utils.test.ts
index f0fa144883d..9dc98c8c49b 100644
--- a/packages/transaction-pay-controller/src/strategy/fiat/utils.test.ts
+++ b/packages/transaction-pay-controller/src/strategy/fiat/utils.test.ts
@@ -3,17 +3,20 @@ import type { TransactionMeta } from '@metamask/transaction-controller';
import { TransactionType } from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
-import { getDefaultRemoteFeatureFlagControllerState } from '../../../../remote-feature-flag-controller/src/remote-feature-flag-controller';
-import { NATIVE_TOKEN_ADDRESS } from '../../constants';
-import { getMessengerMock } from '../../tests/messenger-mock';
-import { ETH_MAINNET_FIAT_ASSET, FIAT_ASSET_ID_BY_TX_TYPE } from './constants';
-import type { TransactionPayFiatAsset } from './constants';
+import { getDefaultRemoteFeatureFlagControllerState } from '../../../../remote-feature-flag-controller/src/remote-feature-flag-controller.js';
+import { NATIVE_TOKEN_ADDRESS } from '../../constants.js';
+import { getMessengerMock } from '../../tests/messenger-mock.js';
+import {
+ ETH_MAINNET_FIAT_ASSET,
+ FIAT_ASSET_ID_BY_TX_TYPE,
+} from './constants.js';
+import type { TransactionPayFiatAsset } from './constants.js';
import {
deriveFiatAssetForFiatPayment,
getRawSourceAmountFromOrderCryptoAmount,
isMoneyAccountDepositTransaction,
resolveSourceAmountRaw,
-} from './utils';
+} from './utils.js';
const TX_HASH_MOCK = '0xabc123';
const WALLET_ADDRESS_MOCK = '0x1111111111111111111111111111111111111111' as Hex;
diff --git a/packages/transaction-pay-controller/src/strategy/fiat/utils.ts b/packages/transaction-pay-controller/src/strategy/fiat/utils.ts
index 3a94efc7956..e53e557a98a 100644
--- a/packages/transaction-pay-controller/src/strategy/fiat/utils.ts
+++ b/packages/transaction-pay-controller/src/strategy/fiat/utils.ts
@@ -9,17 +9,17 @@ import type { Hex } from '@metamask/utils';
import { createModuleLogger } from '@metamask/utils';
import { BigNumber } from 'bignumber.js';
-import { projectLogger } from '../../logger';
-import type { TransactionPayControllerMessenger } from '../../types';
+import { projectLogger } from '../../logger.js';
+import type { TransactionPayControllerMessenger } from '../../types.js';
import {
getFiatAssetPerTransactionType,
getFiatEnabledTypes,
-} from '../../utils/feature-flags';
-import { buildCaipAssetType, getTokenInfo } from '../../utils/token';
-import { getTransferredAmountFromTxHash } from '../../utils/transaction';
-import type { RelayQuote } from '../relay/types';
-import type { TransactionPayFiatAsset } from './constants';
-import { DEFAULT_FIAT_CURRENCY, FIAT_ENABLED_TYPES } from './constants';
+} from '../../utils/feature-flags.js';
+import { buildCaipAssetType, getTokenInfo } from '../../utils/token.js';
+import { getTransferredAmountFromTxHash } from '../../utils/transaction.js';
+import type { RelayQuote } from '../relay/types.js';
+import type { TransactionPayFiatAsset } from './constants.js';
+import { DEFAULT_FIAT_CURRENCY, FIAT_ENABLED_TYPES } from './constants.js';
const log = createModuleLogger(projectLogger, 'fiat-utils');
diff --git a/packages/transaction-pay-controller/src/strategy/relay/RelayBridge.test.ts b/packages/transaction-pay-controller/src/strategy/relay/RelayBridge.test.ts
index 0f90f518930..787167c1e3c 100644
--- a/packages/transaction-pay-controller/src/strategy/relay/RelayBridge.test.ts
+++ b/packages/transaction-pay-controller/src/strategy/relay/RelayBridge.test.ts
@@ -1,11 +1,11 @@
import type { TransactionMeta } from '@metamask/transaction-controller';
-import type { TransactionPayControllerMessenger } from '../..';
-import type { TransactionPayQuote } from '../../types';
-import { getRelayQuotes } from './relay-quotes';
-import { submitRelayQuotes } from './relay-submit';
-import { RelayStrategy } from './RelayStrategy';
-import type { RelayQuote } from './types';
+import type { TransactionPayControllerMessenger } from '../...js';
+import type { TransactionPayQuote } from '../../types.js';
+import { getRelayQuotes } from './relay-quotes.js';
+import { submitRelayQuotes } from './relay-submit.js';
+import { RelayStrategy } from './RelayStrategy.js';
+import type { RelayQuote } from './types.js';
jest.mock('./relay-quotes');
jest.mock('./relay-submit');
diff --git a/packages/transaction-pay-controller/src/strategy/relay/RelayStrategy.test.ts b/packages/transaction-pay-controller/src/strategy/relay/RelayStrategy.test.ts
index 947a0553fe1..368d04c9dc6 100644
--- a/packages/transaction-pay-controller/src/strategy/relay/RelayStrategy.test.ts
+++ b/packages/transaction-pay-controller/src/strategy/relay/RelayStrategy.test.ts
@@ -4,12 +4,12 @@ import type {
PayStrategyExecuteRequest,
PayStrategyGetQuotesRequest,
TransactionPayQuote,
-} from '../../types';
-import { getPayStrategiesConfig } from '../../utils/feature-flags';
-import { getRelayQuotes } from './relay-quotes';
-import { submitRelayQuotes } from './relay-submit';
-import { RelayStrategy } from './RelayStrategy';
-import type { RelayQuote } from './types';
+} from '../../types.js';
+import { getPayStrategiesConfig } from '../../utils/feature-flags.js';
+import { getRelayQuotes } from './relay-quotes.js';
+import { submitRelayQuotes } from './relay-submit.js';
+import { RelayStrategy } from './RelayStrategy.js';
+import type { RelayQuote } from './types.js';
jest.mock('./relay-quotes');
jest.mock('./relay-submit');
diff --git a/packages/transaction-pay-controller/src/strategy/relay/RelayStrategy.ts b/packages/transaction-pay-controller/src/strategy/relay/RelayStrategy.ts
index 22f6d9c31fd..af645056e7a 100644
--- a/packages/transaction-pay-controller/src/strategy/relay/RelayStrategy.ts
+++ b/packages/transaction-pay-controller/src/strategy/relay/RelayStrategy.ts
@@ -3,11 +3,11 @@ import type {
PayStrategyExecuteRequest,
PayStrategyGetQuotesRequest,
TransactionPayQuote,
-} from '../../types';
-import { getPayStrategiesConfig } from '../../utils/feature-flags';
-import { getRelayQuotes } from './relay-quotes';
-import { submitRelayQuotes } from './relay-submit';
-import type { RelayQuote } from './types';
+} from '../../types.js';
+import { getPayStrategiesConfig } from '../../utils/feature-flags.js';
+import { getRelayQuotes } from './relay-quotes.js';
+import { submitRelayQuotes } from './relay-submit.js';
+import type { RelayQuote } from './types.js';
export class RelayStrategy implements PayStrategy {
supports(request: PayStrategyGetQuotesRequest): boolean {
diff --git a/packages/transaction-pay-controller/src/strategy/relay/constants.ts b/packages/transaction-pay-controller/src/strategy/relay/constants.ts
index 9d01da69fff..ab47df2db18 100644
--- a/packages/transaction-pay-controller/src/strategy/relay/constants.ts
+++ b/packages/transaction-pay-controller/src/strategy/relay/constants.ts
@@ -1,8 +1,8 @@
import { TransactionType } from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
-import { PERPS_DEPOSIT_TYPES } from '../../constants';
-import type { RelayStatus } from './types';
+import { PERPS_DEPOSIT_TYPES } from '../../constants.js';
+import type { RelayStatus } from './types.js';
export const FALLBACK_HASH = '0x0' as Hex;
diff --git a/packages/transaction-pay-controller/src/strategy/relay/hyperliquid-activation.test.ts b/packages/transaction-pay-controller/src/strategy/relay/hyperliquid-activation.test.ts
index 40adcdd015a..a3587ea1495 100644
--- a/packages/transaction-pay-controller/src/strategy/relay/hyperliquid-activation.test.ts
+++ b/packages/transaction-pay-controller/src/strategy/relay/hyperliquid-activation.test.ts
@@ -3,14 +3,14 @@ import type { Hex } from '@metamask/utils';
import type {
QuoteRequest,
TransactionPayControllerMessenger,
-} from '../../types';
-import { getHyperliquidActivationFeeConfig } from '../../utils/feature-flags';
-import { HYPERLIQUID_INFO_URL } from './constants';
-import type { HyperLiquidLedgerUpdate } from './hyperliquid-activation';
+} from '../../types.js';
+import { getHyperliquidActivationFeeConfig } from '../../utils/feature-flags.js';
+import { HYPERLIQUID_INFO_URL } from './constants.js';
+import type { HyperLiquidLedgerUpdate } from './hyperliquid-activation.js';
import {
applyHyperliquidActivationFee,
isHyperLiquidAccountActivated,
-} from './hyperliquid-activation';
+} from './hyperliquid-activation.js';
jest.mock('../../utils/feature-flags', () => ({
getHyperliquidActivationFeeConfig: jest.fn(),
diff --git a/packages/transaction-pay-controller/src/strategy/relay/hyperliquid-activation.ts b/packages/transaction-pay-controller/src/strategy/relay/hyperliquid-activation.ts
index 60b7a6bb953..84a5afe9300 100644
--- a/packages/transaction-pay-controller/src/strategy/relay/hyperliquid-activation.ts
+++ b/packages/transaction-pay-controller/src/strategy/relay/hyperliquid-activation.ts
@@ -2,14 +2,14 @@ import type { Hex } from '@metamask/utils';
import { createModuleLogger } from '@metamask/utils';
import { BigNumber } from 'bignumber.js';
-import { HYPERCORE_USDC_DECIMALS } from '../../constants';
-import { projectLogger } from '../../logger';
+import { HYPERCORE_USDC_DECIMALS } from '../../constants.js';
+import { projectLogger } from '../../logger.js';
import type {
QuoteRequest,
TransactionPayControllerMessenger,
-} from '../../types';
-import { getHyperliquidActivationFeeConfig } from '../../utils/feature-flags';
-import { HYPERLIQUID_INFO_URL } from './constants';
+} from '../../types.js';
+import { getHyperliquidActivationFeeConfig } from '../../utils/feature-flags.js';
+import { HYPERLIQUID_INFO_URL } from './constants.js';
const log = createModuleLogger(projectLogger, 'hyperliquid-activation');
diff --git a/packages/transaction-pay-controller/src/strategy/relay/hyperliquid-withdraw.test.ts b/packages/transaction-pay-controller/src/strategy/relay/hyperliquid-withdraw.test.ts
index 6fef5c4116b..f55ed99b6cc 100644
--- a/packages/transaction-pay-controller/src/strategy/relay/hyperliquid-withdraw.test.ts
+++ b/packages/transaction-pay-controller/src/strategy/relay/hyperliquid-withdraw.test.ts
@@ -2,11 +2,11 @@ import { successfulFetch } from '@metamask/controller-utils';
import { SignTypedDataVersion } from '@metamask/keyring-controller';
import type { Hex } from '@metamask/utils';
-import { getMessengerMock } from '../../tests/messenger-mock';
-import type { TransactionPayQuote } from '../../types';
-import { RELAY_AUTHORIZE_URL, HYPERLIQUID_EXCHANGE_URL } from './constants';
-import { submitHyperliquidWithdraw } from './hyperliquid-withdraw';
-import type { RelayQuote, RelaySignatureStep } from './types';
+import { getMessengerMock } from '../../tests/messenger-mock.js';
+import type { TransactionPayQuote } from '../../types.js';
+import { RELAY_AUTHORIZE_URL, HYPERLIQUID_EXCHANGE_URL } from './constants.js';
+import { submitHyperliquidWithdraw } from './hyperliquid-withdraw.js';
+import type { RelayQuote, RelaySignatureStep } from './types.js';
jest.mock('@metamask/controller-utils', () => ({
...jest.requireActual('@metamask/controller-utils'),
diff --git a/packages/transaction-pay-controller/src/strategy/relay/hyperliquid-withdraw.ts b/packages/transaction-pay-controller/src/strategy/relay/hyperliquid-withdraw.ts
index 69362a65794..cc453db0c1b 100644
--- a/packages/transaction-pay-controller/src/strategy/relay/hyperliquid-withdraw.ts
+++ b/packages/transaction-pay-controller/src/strategy/relay/hyperliquid-withdraw.ts
@@ -3,14 +3,14 @@ import { SignTypedDataVersion } from '@metamask/keyring-controller';
import type { Hex } from '@metamask/utils';
import { createModuleLogger } from '@metamask/utils';
-import { CHAIN_ID_ARBITRUM } from '../../constants';
-import { projectLogger } from '../../logger';
+import { CHAIN_ID_ARBITRUM } from '../../constants.js';
+import { projectLogger } from '../../logger.js';
import type {
TransactionPayControllerMessenger,
TransactionPayQuote,
-} from '../../types';
-import { RELAY_AUTHORIZE_URL, HYPERLIQUID_EXCHANGE_URL } from './constants';
-import type { RelayQuote, RelaySignatureStep } from './types';
+} from '../../types.js';
+import { RELAY_AUTHORIZE_URL, HYPERLIQUID_EXCHANGE_URL } from './constants.js';
+import type { RelayQuote, RelaySignatureStep } from './types.js';
const log = createModuleLogger(projectLogger, 'hyperliquid-withdraw');
diff --git a/packages/transaction-pay-controller/src/strategy/relay/polymarket/withdraw.test.ts b/packages/transaction-pay-controller/src/strategy/relay/polymarket/withdraw.test.ts
index 61c116f4ede..951714bf7e0 100644
--- a/packages/transaction-pay-controller/src/strategy/relay/polymarket/withdraw.test.ts
+++ b/packages/transaction-pay-controller/src/strategy/relay/polymarket/withdraw.test.ts
@@ -3,20 +3,20 @@ import type { Hex } from '@metamask/utils';
import {
POLYGON_PUSD_ADDRESS,
POLYGON_USDCE_ADDRESS,
-} from '../../../constants';
-import { getMessengerMock } from '../../../tests/messenger-mock';
-import type { QuoteRequest, TransactionPayQuote } from '../../../types';
-import { getLiveTokenBalance } from '../../../utils/token';
-import type { RelayQuote, RelayQuoteRequest } from '../types';
+} from '../../../constants.js';
+import { getMessengerMock } from '../../../tests/messenger-mock.js';
+import type { QuoteRequest, TransactionPayQuote } from '../../../types.js';
+import { getLiveTokenBalance } from '../../../utils/token.js';
+import type { RelayQuote, RelayQuoteRequest } from '../types.js';
import {
POLYMARKET_COLLATERAL_OFFRAMP_POLYGON,
POLYMARKET_COLLATERAL_ONRAMP_POLYGON,
-} from './constants';
+} from './constants.js';
import {
applyPolymarketDepositWalletOverrides,
submitPolymarketWithdraw,
sweepPolymarketDepositWallet,
-} from './withdraw';
+} from './withdraw.js';
jest.mock('../../../utils/token');
diff --git a/packages/transaction-pay-controller/src/strategy/relay/polymarket/withdraw.ts b/packages/transaction-pay-controller/src/strategy/relay/polymarket/withdraw.ts
index 30a14183a4e..a234c1c4ac7 100644
--- a/packages/transaction-pay-controller/src/strategy/relay/polymarket/withdraw.ts
+++ b/packages/transaction-pay-controller/src/strategy/relay/polymarket/withdraw.ts
@@ -5,33 +5,33 @@ import {
CHAIN_ID_POLYGON,
POLYGON_PUSD_ADDRESS,
POLYGON_USDCE_ADDRESS,
-} from '../../../constants';
-import { projectLogger } from '../../../logger';
+} from '../../../constants.js';
+import { projectLogger } from '../../../logger.js';
import type {
QuoteRequest,
TransactionPayControllerMessenger,
TransactionPayQuote,
-} from '../../../types';
-import { getLiveTokenBalance } from '../../../utils/token';
+} from '../../../types.js';
+import { getLiveTokenBalance } from '../../../utils/token.js';
import type {
RelayQuote,
RelayQuoteRequest,
RelayStatus,
RelayTransactionStep,
-} from '../types';
+} from '../types.js';
import {
encodeApprove,
encodeUnwrap,
encodeWrap,
extractErc20TransferRecipient,
-} from './calldata';
+} from './calldata.js';
import {
POLYMARKET_COLLATERAL_OFFRAMP_POLYGON,
POLYMARKET_COLLATERAL_ONRAMP_POLYGON,
SWEEP_BALANCE_RETRY_ATTEMPTS,
SWEEP_BALANCE_RETRY_DELAY_MS,
SWEEP_RELAYER_SETTLE_DELAY_MS,
-} from './constants';
+} from './constants.js';
const log = createModuleLogger(projectLogger, 'polymarket-withdraw');
diff --git a/packages/transaction-pay-controller/src/strategy/relay/relay-api.test.ts b/packages/transaction-pay-controller/src/strategy/relay/relay-api.test.ts
index 40ded0e790c..ad7d4a5bc38 100644
--- a/packages/transaction-pay-controller/src/strategy/relay/relay-api.test.ts
+++ b/packages/transaction-pay-controller/src/strategy/relay/relay-api.test.ts
@@ -1,12 +1,12 @@
-import type { FeatureFlags } from '../../utils/feature-flags';
-import { getFeatureFlags } from '../../utils/feature-flags';
-import { RELAY_STATUS_URL } from './constants';
+import type { FeatureFlags } from '../../utils/feature-flags.js';
+import { getFeatureFlags } from '../../utils/feature-flags.js';
+import { RELAY_STATUS_URL } from './constants.js';
import {
fetchRelayQuote,
getRelayStatus,
submitRelayExecute,
-} from './relay-api';
-import type { RelayQuoteRequest } from './types';
+} from './relay-api.js';
+import type { RelayQuoteRequest } from './types.js';
jest.mock('../../utils/feature-flags');
diff --git a/packages/transaction-pay-controller/src/strategy/relay/relay-api.ts b/packages/transaction-pay-controller/src/strategy/relay/relay-api.ts
index 8f42d3715ee..836ba83159b 100644
--- a/packages/transaction-pay-controller/src/strategy/relay/relay-api.ts
+++ b/packages/transaction-pay-controller/src/strategy/relay/relay-api.ts
@@ -1,13 +1,13 @@
-import type { TransactionPayControllerMessenger } from '../../types';
-import { getFeatureFlags } from '../../utils/feature-flags';
-import { RELAY_STATUS_URL } from './constants';
+import type { TransactionPayControllerMessenger } from '../../types.js';
+import { getFeatureFlags } from '../../utils/feature-flags.js';
+import { RELAY_STATUS_URL } from './constants.js';
import type {
RelayExecuteRequest,
RelayExecuteResponse,
RelayQuote,
RelayQuoteRequest,
RelayStatusResponse,
-} from './types';
+} from './types.js';
/**
* Fetch a quote from the Relay API.
diff --git a/packages/transaction-pay-controller/src/strategy/relay/relay-max-gas-station.test.ts b/packages/transaction-pay-controller/src/strategy/relay/relay-max-gas-station.test.ts
index 918d1d09cb1..4ee9e49b01a 100644
--- a/packages/transaction-pay-controller/src/strategy/relay/relay-max-gas-station.test.ts
+++ b/packages/transaction-pay-controller/src/strategy/relay/relay-max-gas-station.test.ts
@@ -4,24 +4,24 @@ import type {
} from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
-import { TransactionPayStrategy } from '../..';
-import { getDefaultRemoteFeatureFlagControllerState } from '../../../../remote-feature-flag-controller/src/remote-feature-flag-controller';
-import { getMessengerMock } from '../../tests/messenger-mock';
+import { TransactionPayStrategy } from '../...js';
+import { getDefaultRemoteFeatureFlagControllerState } from '../../../../remote-feature-flag-controller/src/remote-feature-flag-controller.js';
+import { getMessengerMock } from '../../tests/messenger-mock.js';
import type {
Amount,
FiatValue,
PayStrategyGetQuotesRequest,
QuoteRequest,
TransactionPayQuote,
-} from '../../types';
-import { calculateGasFeeTokenCost } from '../../utils/gas';
+} from '../../types.js';
+import { calculateGasFeeTokenCost } from '../../utils/gas.js';
import {
getNativeToken,
getTokenBalance,
getTokenInfo,
-} from '../../utils/token';
-import { getRelayMaxGasStationQuote } from './relay-max-gas-station';
-import type { RelayQuote } from './types';
+} from '../../utils/token.js';
+import { getRelayMaxGasStationQuote } from './relay-max-gas-station.js';
+import type { RelayQuote } from './types.js';
jest.mock('../../utils/token');
jest.mock('../../utils/gas');
diff --git a/packages/transaction-pay-controller/src/strategy/relay/relay-max-gas-station.ts b/packages/transaction-pay-controller/src/strategy/relay/relay-max-gas-station.ts
index 39063b63aea..f66f9c5c28a 100644
--- a/packages/transaction-pay-controller/src/strategy/relay/relay-max-gas-station.ts
+++ b/packages/transaction-pay-controller/src/strategy/relay/relay-max-gas-station.ts
@@ -1,23 +1,23 @@
import { createModuleLogger } from '@metamask/utils';
import { BigNumber } from 'bignumber.js';
-import { projectLogger } from '../../logger';
+import { projectLogger } from '../../logger.js';
import type {
PayStrategyGetQuotesRequest,
QuoteRequest,
TransactionPayControllerMessenger,
TransactionPayQuote,
-} from '../../types';
+} from '../../types.js';
import {
getGasStationEligibility,
getGasStationCostInSourceTokenRaw,
-} from '../../utils/gas-station';
+} from '../../utils/gas-station.js';
import {
getNativeToken,
getTokenBalance,
getTokenInfo,
-} from '../../utils/token';
-import type { RelayQuote, RelayTransactionStep } from './types';
+} from '../../utils/token.js';
+import type { RelayQuote, RelayTransactionStep } from './types.js';
const log = createModuleLogger(projectLogger, 'relay-max-gas-station');
diff --git a/packages/transaction-pay-controller/src/strategy/relay/relay-post-ma-vault.test.ts b/packages/transaction-pay-controller/src/strategy/relay/relay-post-ma-vault.test.ts
index 445183f585c..04c19b3ac12 100644
--- a/packages/transaction-pay-controller/src/strategy/relay/relay-post-ma-vault.test.ts
+++ b/packages/transaction-pay-controller/src/strategy/relay/relay-post-ma-vault.test.ts
@@ -4,13 +4,13 @@ import type { Hex } from '@metamask/utils';
import type {
TransactionPayControllerMessenger,
TransactionPayQuote,
-} from '../../types';
-import { submitMoneyAccountVaultDeposit } from '../../utils/ma-vault-deposit';
-import { getTransferredAmountFromTxHash } from '../../utils/transaction';
-import { MUSD_MONAD_FIAT_ASSET } from '../fiat/constants';
-import { FALLBACK_HASH } from './constants';
-import { submitPostRelayVaultDeposit } from './relay-post-ma-vault';
-import type { RelayCompletionOutcome, RelayQuote } from './types';
+} from '../../types.js';
+import { submitMoneyAccountVaultDeposit } from '../../utils/ma-vault-deposit.js';
+import { getTransferredAmountFromTxHash } from '../../utils/transaction.js';
+import { MUSD_MONAD_FIAT_ASSET } from '../fiat/constants.js';
+import { FALLBACK_HASH } from './constants.js';
+import { submitPostRelayVaultDeposit } from './relay-post-ma-vault.js';
+import type { RelayCompletionOutcome, RelayQuote } from './types.js';
jest.mock('../../utils/transaction');
jest.mock('../../utils/ma-vault-deposit');
diff --git a/packages/transaction-pay-controller/src/strategy/relay/relay-post-ma-vault.ts b/packages/transaction-pay-controller/src/strategy/relay/relay-post-ma-vault.ts
index 8c2cd7768c2..82b5f53d742 100644
--- a/packages/transaction-pay-controller/src/strategy/relay/relay-post-ma-vault.ts
+++ b/packages/transaction-pay-controller/src/strategy/relay/relay-post-ma-vault.ts
@@ -2,16 +2,16 @@ import type { TransactionMeta } from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
import { createModuleLogger } from '@metamask/utils';
-import { projectLogger } from '../../logger';
+import { projectLogger } from '../../logger.js';
import type {
TransactionPayControllerMessenger,
TransactionPayQuote,
-} from '../../types';
-import { submitMoneyAccountVaultDeposit } from '../../utils/ma-vault-deposit';
-import { getTransferredAmountFromTxHash } from '../../utils/transaction';
-import { MUSD_MONAD_FIAT_ASSET } from '../fiat/constants';
-import { FALLBACK_HASH } from './constants';
-import type { RelayCompletionOutcome, RelayQuote } from './types';
+} from '../../types.js';
+import { submitMoneyAccountVaultDeposit } from '../../utils/ma-vault-deposit.js';
+import { getTransferredAmountFromTxHash } from '../../utils/transaction.js';
+import { MUSD_MONAD_FIAT_ASSET } from '../fiat/constants.js';
+import { FALLBACK_HASH } from './constants.js';
+import type { RelayCompletionOutcome, RelayQuote } from './types.js';
const log = createModuleLogger(projectLogger, 'relay-post-ma-vault');
diff --git a/packages/transaction-pay-controller/src/strategy/relay/relay-quotes.test.ts b/packages/transaction-pay-controller/src/strategy/relay/relay-quotes.test.ts
index cd6ffa21974..fe27d07da63 100644
--- a/packages/transaction-pay-controller/src/strategy/relay/relay-quotes.test.ts
+++ b/packages/transaction-pay-controller/src/strategy/relay/relay-quotes.test.ts
@@ -5,9 +5,9 @@ import type {
TransactionMeta,
} from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
-import { cloneDeep } from 'lodash';
+import { cloneDeep } from 'lodash-es';
-import { getDefaultRemoteFeatureFlagControllerState } from '../../../../remote-feature-flag-controller/src/remote-feature-flag-controller';
+import { getDefaultRemoteFeatureFlagControllerState } from '../../../../remote-feature-flag-controller/src/remote-feature-flag-controller.js';
import {
ARBITRUM_USDC_ADDRESS,
CHAIN_ID_ARBITRUM,
@@ -16,12 +16,12 @@ import {
NATIVE_TOKEN_ADDRESS,
PaymentOverride,
POLYGON_USDCE_ADDRESS,
-} from '../../constants';
-import { getMessengerMock } from '../../tests/messenger-mock';
+} from '../../constants.js';
+import { getMessengerMock } from '../../tests/messenger-mock.js';
import type {
GetDelegationTransactionCallback,
QuoteRequest,
-} from '../../types';
+} from '../../types.js';
import {
DEFAULT_RELAY_ORIGIN_GAS_OVERHEAD,
DEFAULT_RELAY_QUOTE_URL,
@@ -30,15 +30,15 @@ import {
isRelayExecuteEnabled,
getGasBuffer,
getSlippage,
-} from '../../utils/feature-flags';
-import { calculateGasCost, calculateGasFeeTokenCost } from '../../utils/gas';
+} from '../../utils/feature-flags.js';
+import { calculateGasCost, calculateGasFeeTokenCost } from '../../utils/gas.js';
import {
getNativeToken,
getTokenBalance,
getTokenFiatRate,
-} from '../../utils/token';
-import { getRelayQuotes } from './relay-quotes';
-import type { RelayQuote, RelayTransactionStep } from './types';
+} from '../../utils/token.js';
+import { getRelayQuotes } from './relay-quotes.js';
+import type { RelayQuote, RelayTransactionStep } from './types.js';
jest.mock('../../utils/token', () => ({
...jest.createMockFromModule(
diff --git a/packages/transaction-pay-controller/src/strategy/relay/relay-quotes.ts b/packages/transaction-pay-controller/src/strategy/relay/relay-quotes.ts
index 470b0fd2d76..8769eb5e467 100644
--- a/packages/transaction-pay-controller/src/strategy/relay/relay-quotes.ts
+++ b/packages/transaction-pay-controller/src/strategy/relay/relay-quotes.ts
@@ -10,7 +10,7 @@ import type { Hex } from '@metamask/utils';
import { createModuleLogger } from '@metamask/utils';
import { BigNumber } from 'bignumber.js';
-import { TransactionPayStrategy } from '../..';
+import { TransactionPayStrategy } from '../...js';
import {
ARBITRUM_USDC_ADDRESS,
CHAIN_ID_ARBITRUM,
@@ -22,8 +22,8 @@ import {
PERPS_DEPOSIT_TYPES,
USDC_DECIMALS,
PaymentOverride,
-} from '../../constants';
-import { projectLogger } from '../../logger';
+} from '../../constants.js';
+import { projectLogger } from '../../logger.js';
import type {
Amount,
FiatRates,
@@ -31,8 +31,8 @@ import type {
QuoteRequest,
TransactionPayControllerMessenger,
TransactionPayQuote,
-} from '../../types';
-import { getFiatValueFromUsd } from '../../utils/amounts';
+} from '../../types.js';
+import { getFiatValueFromUsd } from '../../utils/amounts.js';
import {
getFeatureFlags,
getRelayOriginGasOverhead,
@@ -40,33 +40,33 @@ import {
getStablecoins,
isEIP7702Chain,
isRelayExecuteEnabled,
-} from '../../utils/feature-flags';
-import { calculateGasCost } from '../../utils/gas';
+} from '../../utils/feature-flags.js';
import {
getGasStationCostInSourceTokenRaw,
getGasStationEligibility,
-} from '../../utils/gas-station';
-import { estimateQuoteGasLimits } from '../../utils/quote-gas';
-import type { QuoteGasTransaction } from '../../utils/quote-gas';
+} from '../../utils/gas-station.js';
+import { calculateGasCost } from '../../utils/gas.js';
+import { estimateQuoteGasLimits } from '../../utils/quote-gas.js';
+import type { QuoteGasTransaction } from '../../utils/quote-gas.js';
import {
getNativeToken,
getTokenBalance,
getTokenFiatRate,
normalizeTokenAddress,
TokenAddressTarget,
-} from '../../utils/token';
-import { isPredictWithdrawTransaction } from '../../utils/transaction';
-import { TOKEN_TRANSFER_FOUR_BYTE } from './constants';
-import { applyHyperliquidActivationFee } from './hyperliquid-activation';
-import { applyPolymarketDepositWalletOverrides } from './polymarket/withdraw';
-import { fetchRelayQuote } from './relay-api';
-import { getRelayMaxGasStationQuote } from './relay-max-gas-station';
+} from '../../utils/token.js';
+import { isPredictWithdrawTransaction } from '../../utils/transaction.js';
+import { TOKEN_TRANSFER_FOUR_BYTE } from './constants.js';
+import { applyHyperliquidActivationFee } from './hyperliquid-activation.js';
+import { applyPolymarketDepositWalletOverrides } from './polymarket/withdraw.js';
+import { fetchRelayQuote } from './relay-api.js';
+import { getRelayMaxGasStationQuote } from './relay-max-gas-station.js';
import type {
RelayQuote,
RelayQuoteMetamask,
RelayQuoteRequest,
RelayTransactionStep,
-} from './types';
+} from './types.js';
const log = createModuleLogger(projectLogger, 'relay-strategy');
diff --git a/packages/transaction-pay-controller/src/strategy/relay/relay-submit-execute.test.ts b/packages/transaction-pay-controller/src/strategy/relay/relay-submit-execute.test.ts
index e36509046db..974e527cae6 100644
--- a/packages/transaction-pay-controller/src/strategy/relay/relay-submit-execute.test.ts
+++ b/packages/transaction-pay-controller/src/strategy/relay/relay-submit-execute.test.ts
@@ -1,18 +1,18 @@
import { generateEIP7702BatchTransaction } from '@metamask/transaction-controller';
import type { TransactionMeta } from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
-import { cloneDeep } from 'lodash';
+import { cloneDeep } from 'lodash-es';
-import { getMessengerMock } from '../../tests/messenger-mock';
-import type { TransactionPayQuote } from '../../types';
-import type { FeatureFlags } from '../../utils/feature-flags';
+import { getMessengerMock } from '../../tests/messenger-mock.js';
+import type { TransactionPayQuote } from '../../types.js';
+import type { FeatureFlags } from '../../utils/feature-flags.js';
import {
getFeatureFlags,
getRelayPollingInterval,
getRelayPollingTimeout,
-} from '../../utils/feature-flags';
-import { submitViaRelayExecute } from './relay-submit-execute';
-import type { RelayQuote } from './types';
+} from '../../utils/feature-flags.js';
+import { submitViaRelayExecute } from './relay-submit-execute.js';
+import type { RelayQuote } from './types.js';
jest.mock('../../utils/feature-flags');
diff --git a/packages/transaction-pay-controller/src/strategy/relay/relay-submit-execute.ts b/packages/transaction-pay-controller/src/strategy/relay/relay-submit-execute.ts
index e2f2144a151..a18329f30fa 100644
--- a/packages/transaction-pay-controller/src/strategy/relay/relay-submit-execute.ts
+++ b/packages/transaction-pay-controller/src/strategy/relay/relay-submit-execute.ts
@@ -8,16 +8,16 @@ import type { Hex } from '@metamask/utils';
import { createModuleLogger } from '@metamask/utils';
import { BigNumber } from 'bignumber.js';
-import { projectLogger } from '../../logger';
+import { projectLogger } from '../../logger.js';
import type {
TransactionPayControllerMessenger,
TransactionPayQuote,
-} from '../../types';
-import { prefixError } from '../../utils/error-prefix';
-import { getNetworkClientId } from '../../utils/provider';
-import { FALLBACK_HASH } from './constants';
-import { submitRelayExecute } from './relay-api';
-import type { RelayExecuteRequest, RelayQuote } from './types';
+} from '../../types.js';
+import { prefixError } from '../../utils/error-prefix.js';
+import { getNetworkClientId } from '../../utils/provider.js';
+import { FALLBACK_HASH } from './constants.js';
+import { submitRelayExecute } from './relay-api.js';
+import type { RelayExecuteRequest, RelayQuote } from './types.js';
const log = createModuleLogger(projectLogger, 'relay-strategy');
const RELAY_EXECUTE_ERROR_PREFIX = 'Execute: ';
diff --git a/packages/transaction-pay-controller/src/strategy/relay/relay-submit.test.ts b/packages/transaction-pay-controller/src/strategy/relay/relay-submit.test.ts
index 395c4a75bb1..6d326f3c0d1 100644
--- a/packages/transaction-pay-controller/src/strategy/relay/relay-submit.test.ts
+++ b/packages/transaction-pay-controller/src/strategy/relay/relay-submit.test.ts
@@ -5,32 +5,35 @@ import type {
TransactionMeta,
} from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
-import { cloneDeep } from 'lodash';
+import { cloneDeep } from 'lodash-es';
-import { PaymentOverride } from '../../constants';
-import { getMessengerMock } from '../../tests/messenger-mock';
+import { PaymentOverride } from '../../constants.js';
+import { getMessengerMock } from '../../tests/messenger-mock.js';
import type {
PayStrategyExecuteRequest,
TransactionPayControllerMessenger,
TransactionPayQuote,
-} from '../../types';
-import type { FeatureFlags } from '../../utils/feature-flags';
+} from '../../types.js';
+import type { FeatureFlags } from '../../utils/feature-flags.js';
import {
getFeatureFlags,
getRelayPollingInterval,
getRelayPollingTimeout,
-} from '../../utils/feature-flags';
-import { getLiveTokenBalance, normalizeTokenAddress } from '../../utils/token';
+} from '../../utils/feature-flags.js';
+import {
+ getLiveTokenBalance,
+ normalizeTokenAddress,
+} from '../../utils/token.js';
import {
collectTransactionIds,
getTransaction,
updateTransaction,
waitForTransactionConfirmed,
-} from '../../utils/transaction';
-import { RELAY_STATUS_URL } from './constants';
-import { submitRelayQuotes } from './relay-submit';
-import { submitViaRelayExecute } from './relay-submit-execute';
-import type { RelayQuote } from './types';
+} from '../../utils/transaction.js';
+import { RELAY_STATUS_URL } from './constants.js';
+import { submitViaRelayExecute } from './relay-submit-execute.js';
+import { submitRelayQuotes } from './relay-submit.js';
+import type { RelayQuote } from './types.js';
jest.mock('../../utils/token');
jest.mock('../../utils/transaction');
diff --git a/packages/transaction-pay-controller/src/strategy/relay/relay-submit.ts b/packages/transaction-pay-controller/src/strategy/relay/relay-submit.ts
index 5f7da9bbec5..e51b6d9bc90 100644
--- a/packages/transaction-pay-controller/src/strategy/relay/relay-submit.ts
+++ b/packages/transaction-pay-controller/src/strategy/relay/relay-submit.ts
@@ -9,50 +9,50 @@ import type { Hex } from '@metamask/utils';
import { createModuleLogger } from '@metamask/utils';
import { BigNumber } from 'bignumber.js';
-import { projectLogger } from '../../logger';
+import { projectLogger } from '../../logger.js';
import type {
PayStrategyExecuteRequest,
TransactionPayControllerMessenger,
TransactionPayQuote,
-} from '../../types';
-import { prefixError } from '../../utils/error-prefix';
+} from '../../types.js';
+import { prefixError } from '../../utils/error-prefix.js';
import {
getFeatureFlags,
getRelayPollingInterval,
getRelayPollingTimeout,
-} from '../../utils/feature-flags';
-import { getNetworkClientId } from '../../utils/provider';
+} from '../../utils/feature-flags.js';
+import { getNetworkClientId } from '../../utils/provider.js';
import {
getLiveTokenBalance,
normalizeTokenAddress,
TokenAddressTarget,
-} from '../../utils/token';
+} from '../../utils/token.js';
import {
collectTransactionIds,
getTransaction,
updateTransaction,
waitForTransactionConfirmed,
-} from '../../utils/transaction';
+} from '../../utils/transaction.js';
import {
FALLBACK_HASH,
RELAY_DEPOSIT_TYPES,
RELAY_FAILURE_STATUSES,
RELAY_PENDING_STATUSES,
-} from './constants';
-import { submitHyperliquidWithdraw } from './hyperliquid-withdraw';
+} from './constants.js';
+import { submitHyperliquidWithdraw } from './hyperliquid-withdraw.js';
import {
sweepPolymarketDepositWallet,
submitPolymarketWithdraw,
-} from './polymarket/withdraw';
-import { getRelayStatus } from './relay-api';
-import { submitViaRelayExecute } from './relay-submit-execute';
+} from './polymarket/withdraw.js';
+import { getRelayStatus } from './relay-api.js';
+import { submitViaRelayExecute } from './relay-submit-execute.js';
import type {
RelayCompletionOutcome,
RelayQuote,
RelayStatus,
RelayStatusResponse,
RelayTransactionStep,
-} from './types';
+} from './types.js';
const log = createModuleLogger(projectLogger, 'relay-strategy');
const RELAY_ERROR_PREFIX = 'Relay: ';
diff --git a/packages/transaction-pay-controller/src/strategy/server/ServerStrategy.test.ts b/packages/transaction-pay-controller/src/strategy/server/ServerStrategy.test.ts
index 5d2396a283d..f5cb3b93b30 100644
--- a/packages/transaction-pay-controller/src/strategy/server/ServerStrategy.test.ts
+++ b/packages/transaction-pay-controller/src/strategy/server/ServerStrategy.test.ts
@@ -1,12 +1,12 @@
import type { TransactionMeta } from '@metamask/transaction-controller';
-import type { TransactionPayControllerMessenger } from '../..';
-import type { TransactionPayQuote } from '../../types';
-import { getPayStrategiesConfig } from '../../utils/feature-flags';
-import { getServerQuotes } from './server-quotes';
-import { submitServerQuotes } from './server-submit';
-import { ServerStrategy } from './ServerStrategy';
-import type { ServerQuote } from './types';
+import type { TransactionPayControllerMessenger } from '../...js';
+import type { TransactionPayQuote } from '../../types.js';
+import { getPayStrategiesConfig } from '../../utils/feature-flags.js';
+import { getServerQuotes } from './server-quotes.js';
+import { submitServerQuotes } from './server-submit.js';
+import { ServerStrategy } from './ServerStrategy.js';
+import type { ServerQuote } from './types.js';
jest.mock('./server-quotes');
jest.mock('./server-submit');
diff --git a/packages/transaction-pay-controller/src/strategy/server/ServerStrategy.ts b/packages/transaction-pay-controller/src/strategy/server/ServerStrategy.ts
index 2cb4e08f1ab..398ed12fc91 100644
--- a/packages/transaction-pay-controller/src/strategy/server/ServerStrategy.ts
+++ b/packages/transaction-pay-controller/src/strategy/server/ServerStrategy.ts
@@ -3,11 +3,11 @@ import type {
PayStrategyExecuteRequest,
PayStrategyGetQuotesRequest,
TransactionPayQuote,
-} from '../../types';
-import { getPayStrategiesConfig } from '../../utils/feature-flags';
-import { getServerQuotes } from './server-quotes';
-import { submitServerQuotes } from './server-submit';
-import type { ServerQuote } from './types';
+} from '../../types.js';
+import { getPayStrategiesConfig } from '../../utils/feature-flags.js';
+import { getServerQuotes } from './server-quotes.js';
+import { submitServerQuotes } from './server-submit.js';
+import type { ServerQuote } from './types.js';
/**
* Pay strategy that routes quote, submit, and status requests through the
diff --git a/packages/transaction-pay-controller/src/strategy/server/perps.test.ts b/packages/transaction-pay-controller/src/strategy/server/perps.test.ts
index facb01c49e7..f77244bf139 100644
--- a/packages/transaction-pay-controller/src/strategy/server/perps.test.ts
+++ b/packages/transaction-pay-controller/src/strategy/server/perps.test.ts
@@ -4,13 +4,13 @@ import {
ARBITRUM_USDC_ADDRESS,
CHAIN_ID_ARBITRUM,
CHAIN_ID_HYPERCORE,
-} from '../../constants';
-import type { QuoteRequest } from '../../types';
+} from '../../constants.js';
+import type { QuoteRequest } from '../../types.js';
import {
SERVER_HYPERCORE_USDC_PERPS_ADDRESS,
isServerPerpsDepositRequest,
normalizeServerPerpsRequest,
-} from './perps';
+} from './perps.js';
const BRIDGE_ADDRESS_LOWER = '0x2df1c51e09aecf9cacb7bc98cb1742757f163df7';
diff --git a/packages/transaction-pay-controller/src/strategy/server/perps.ts b/packages/transaction-pay-controller/src/strategy/server/perps.ts
index d4f71fe7308..ec6121c97e0 100644
--- a/packages/transaction-pay-controller/src/strategy/server/perps.ts
+++ b/packages/transaction-pay-controller/src/strategy/server/perps.ts
@@ -8,8 +8,8 @@ import {
CHAIN_ID_HYPERCORE,
HYPERCORE_USDC_DECIMALS,
USDC_DECIMALS,
-} from '../../constants';
-import type { QuoteRequest } from '../../types';
+} from '../../constants.js';
+import type { QuoteRequest } from '../../types.js';
/**
* Shared 20-byte sentinel address emitted by the server strategy to flag a
diff --git a/packages/transaction-pay-controller/src/strategy/server/server-api.test.ts b/packages/transaction-pay-controller/src/strategy/server/server-api.test.ts
index 7016301e4c1..869440beba7 100644
--- a/packages/transaction-pay-controller/src/strategy/server/server-api.test.ts
+++ b/packages/transaction-pay-controller/src/strategy/server/server-api.test.ts
@@ -1,12 +1,12 @@
-import type { PayStrategiesConfig } from '../../utils/feature-flags';
-import { getPayStrategiesConfig } from '../../utils/feature-flags';
+import type { PayStrategiesConfig } from '../../utils/feature-flags.js';
+import { getPayStrategiesConfig } from '../../utils/feature-flags.js';
import {
fetchServerQuote,
getServerStatus,
submitServerIntent,
-} from './server-api';
-import { ServerProviderName, ServerStatus, ServerTradeType } from './types';
-import type { ServerQuoteRequest, ServerSubmitRequest } from './types';
+} from './server-api.js';
+import { ServerProviderName, ServerStatus, ServerTradeType } from './types.js';
+import type { ServerQuoteRequest, ServerSubmitRequest } from './types.js';
jest.mock('../../utils/feature-flags');
diff --git a/packages/transaction-pay-controller/src/strategy/server/server-api.ts b/packages/transaction-pay-controller/src/strategy/server/server-api.ts
index e866202eab7..56e45874d5c 100644
--- a/packages/transaction-pay-controller/src/strategy/server/server-api.ts
+++ b/packages/transaction-pay-controller/src/strategy/server/server-api.ts
@@ -1,8 +1,8 @@
import { createModuleLogger } from '@metamask/utils';
-import { projectLogger } from '../../logger';
-import type { TransactionPayControllerMessenger } from '../../types';
-import { getPayStrategiesConfig } from '../../utils/feature-flags';
+import { projectLogger } from '../../logger.js';
+import type { TransactionPayControllerMessenger } from '../../types.js';
+import { getPayStrategiesConfig } from '../../utils/feature-flags.js';
import type {
ServerProviderName,
ServerQuoteRequest,
@@ -10,7 +10,7 @@ import type {
ServerStatusResponse,
ServerSubmitRequest,
ServerSubmitResponse,
-} from './types';
+} from './types.js';
const log = createModuleLogger(projectLogger, 'server-api');
diff --git a/packages/transaction-pay-controller/src/strategy/server/server-quotes.test.ts b/packages/transaction-pay-controller/src/strategy/server/server-quotes.test.ts
index 26ce8dc7f6e..bd28a89abd5 100644
--- a/packages/transaction-pay-controller/src/strategy/server/server-quotes.test.ts
+++ b/packages/transaction-pay-controller/src/strategy/server/server-quotes.test.ts
@@ -5,31 +5,31 @@ import {
CHAIN_ID_HYPERCORE,
PaymentOverride,
TransactionPayStrategy,
-} from '../../constants';
-import { getMessengerMock } from '../../tests/messenger-mock';
+} from '../../constants.js';
+import { getMessengerMock } from '../../tests/messenger-mock.js';
import type {
GetDelegationTransactionCallback,
QuoteRequest,
-} from '../../types';
+} from '../../types.js';
import {
getFeatureFlags,
getSlippage,
isEIP7702Chain,
-} from '../../utils/feature-flags';
-import { calculateGasCost, getGasFee } from '../../utils/gas';
+} from '../../utils/feature-flags.js';
import {
getGasStationCostInSourceTokenRaw,
getGasStationEligibility,
-} from '../../utils/gas-station';
-import { estimateQuoteGasLimits } from '../../utils/quote-gas';
+} from '../../utils/gas-station.js';
+import { calculateGasCost, getGasFee } from '../../utils/gas.js';
+import { estimateQuoteGasLimits } from '../../utils/quote-gas.js';
import {
getNativeToken,
getTokenBalance,
getTokenFiatRate,
-} from '../../utils/token';
-import { fetchServerQuote } from './server-api';
-import { getServerQuotes } from './server-quotes';
-import { ServerProviderName, ServerTradeType } from './types';
+} from '../../utils/token.js';
+import { fetchServerQuote } from './server-api.js';
+import { getServerQuotes } from './server-quotes.js';
+import { ServerProviderName, ServerTradeType } from './types.js';
jest.mock('../../utils/feature-flags', () => ({
...jest.requireActual('../../utils/feature-flags'),
diff --git a/packages/transaction-pay-controller/src/strategy/server/server-quotes.ts b/packages/transaction-pay-controller/src/strategy/server/server-quotes.ts
index 3b71e75d6d8..12a4fc649ab 100644
--- a/packages/transaction-pay-controller/src/strategy/server/server-quotes.ts
+++ b/packages/transaction-pay-controller/src/strategy/server/server-quotes.ts
@@ -12,42 +12,42 @@ import {
CHAIN_ID_HYPERCORE,
PaymentOverride,
TransactionPayStrategy,
-} from '../../constants';
-import { projectLogger } from '../../logger';
+} from '../../constants.js';
+import { projectLogger } from '../../logger.js';
import type {
PayStrategyGetQuotesRequest,
QuoteRequest,
TransactionPayControllerMessenger,
TransactionPayFees,
TransactionPayQuote,
-} from '../../types';
-import { getFiatValueFromUsd } from '../../utils/amounts';
+} from '../../types.js';
+import { getFiatValueFromUsd } from '../../utils/amounts.js';
import {
getFeatureFlags,
getSlippage,
isEIP7702Chain,
-} from '../../utils/feature-flags';
-import { calculateGasCost, getGasFee } from '../../utils/gas';
+} from '../../utils/feature-flags.js';
import {
getGasStationCostInSourceTokenRaw,
getGasStationEligibility,
-} from '../../utils/gas-station';
-import { estimateQuoteGasLimits } from '../../utils/quote-gas';
-import type { QuoteGasTransaction } from '../../utils/quote-gas';
+} from '../../utils/gas-station.js';
+import { calculateGasCost, getGasFee } from '../../utils/gas.js';
+import { estimateQuoteGasLimits } from '../../utils/quote-gas.js';
+import type { QuoteGasTransaction } from '../../utils/quote-gas.js';
import {
getNativeToken,
getTokenBalance,
getTokenFiatRate,
-} from '../../utils/token';
-import { normalizeServerPerpsRequest } from './perps';
-import { fetchServerQuote } from './server-api';
+} from '../../utils/token.js';
+import { normalizeServerPerpsRequest } from './perps.js';
+import { fetchServerQuote } from './server-api.js';
import type {
ServerQuote,
ServerQuoteRequest,
ServerQuoteResult,
ServerTransactionStep,
-} from './types';
-import { ServerTradeType } from './types';
+} from './types.js';
+import { ServerTradeType } from './types.js';
const log = createModuleLogger(projectLogger, 'server-quotes');
const TOKEN_TRANSFER_FOUR_BYTE = '0xa9059cbb';
diff --git a/packages/transaction-pay-controller/src/strategy/server/server-submit.test.ts b/packages/transaction-pay-controller/src/strategy/server/server-submit.test.ts
index e179b314ae8..fbe12854135 100644
--- a/packages/transaction-pay-controller/src/strategy/server/server-submit.test.ts
+++ b/packages/transaction-pay-controller/src/strategy/server/server-submit.test.ts
@@ -2,28 +2,28 @@ import { successfulFetch } from '@metamask/controller-utils';
import { TransactionStatus } from '@metamask/transaction-controller';
import type { TransactionMeta } from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
-import { cloneDeep } from 'lodash';
+import { cloneDeep } from 'lodash-es';
-import { PaymentOverride } from '../../constants';
-import { getMessengerMock } from '../../tests/messenger-mock';
+import { PaymentOverride } from '../../constants.js';
+import { getMessengerMock } from '../../tests/messenger-mock.js';
import type {
PayStrategyExecuteRequest,
TransactionPayQuote,
-} from '../../types';
+} from '../../types.js';
import {
getServerPollingInterval,
getServerPollingTimeout,
-} from '../../utils/feature-flags';
-import { getLiveTokenBalance } from '../../utils/token';
+} from '../../utils/feature-flags.js';
+import { getLiveTokenBalance } from '../../utils/token.js';
import {
collectTransactionIds,
getTransaction,
waitForTransactionConfirmed,
-} from '../../utils/transaction';
-import { getServerStatus, submitServerIntent } from './server-api';
-import { submitServerQuotes } from './server-submit';
-import { ServerProviderName, ServerStatus } from './types';
-import type { ServerQuote, ServerSignatureStep } from './types';
+} from '../../utils/transaction.js';
+import { getServerStatus, submitServerIntent } from './server-api.js';
+import { submitServerQuotes } from './server-submit.js';
+import { ServerProviderName, ServerStatus } from './types.js';
+import type { ServerQuote, ServerSignatureStep } from './types.js';
jest.mock('@metamask/controller-utils', () => ({
...jest.requireActual('@metamask/controller-utils'),
diff --git a/packages/transaction-pay-controller/src/strategy/server/server-submit.ts b/packages/transaction-pay-controller/src/strategy/server/server-submit.ts
index 973e63facfe..8d6a21c6802 100644
--- a/packages/transaction-pay-controller/src/strategy/server/server-submit.ts
+++ b/packages/transaction-pay-controller/src/strategy/server/server-submit.ts
@@ -13,38 +13,38 @@ import type { Hex } from '@metamask/utils';
import { createModuleLogger } from '@metamask/utils';
import { BigNumber } from 'bignumber.js';
-import { projectLogger } from '../../logger';
+import { projectLogger } from '../../logger.js';
import type {
PayStrategyExecuteRequest,
TransactionPayControllerMessenger,
TransactionPayQuote,
-} from '../../types';
+} from '../../types.js';
import {
getServerPollingInterval,
getServerPollingTimeout,
-} from '../../utils/feature-flags';
-import { getNetworkClientId } from '../../utils/provider';
+} from '../../utils/feature-flags.js';
+import { getNetworkClientId } from '../../utils/provider.js';
import {
getLiveTokenBalance,
normalizeTokenAddress,
TokenAddressTarget,
-} from '../../utils/token';
+} from '../../utils/token.js';
import {
collectTransactionIds,
getTransaction,
updateTransaction,
waitForTransactionConfirmed,
-} from '../../utils/transaction';
-import { RELAY_DEPOSIT_TYPES } from '../relay/constants';
-import { getServerStatus, submitServerIntent } from './server-api';
+} from '../../utils/transaction.js';
+import { RELAY_DEPOSIT_TYPES } from '../relay/constants.js';
+import { getServerStatus, submitServerIntent } from './server-api.js';
import type {
ServerQuote,
ServerSignatureStep,
ServerTransactionStep,
ServerStatusResponse,
ServerSubmitRequest,
-} from './types';
-import { ServerStatus } from './types';
+} from './types.js';
+import { ServerStatus } from './types.js';
const log = createModuleLogger(projectLogger, 'server-strategy');
diff --git a/packages/transaction-pay-controller/src/tests/messenger-mock.ts b/packages/transaction-pay-controller/src/tests/messenger-mock.ts
index 4e3b1897c45..b67aee66f85 100644
--- a/packages/transaction-pay-controller/src/tests/messenger-mock.ts
+++ b/packages/transaction-pay-controller/src/tests/messenger-mock.ts
@@ -23,7 +23,6 @@ import type {
} from '@metamask/transaction-controller';
import type { TransactionControllerUpdateTransactionAction } from '@metamask/transaction-controller';
-import type { TransactionPayControllerMessenger } from '..';
import type {
TransactionPayControllerGetDelegationTransactionAction,
TransactionPayControllerGetFiatOptionsAction,
@@ -31,8 +30,9 @@ import type {
TransactionPayControllerGetStrategyAction,
TransactionPayControllerPolymarketGetDepositWalletAddressAction,
TransactionPayControllerPolymarketSubmitDepositWalletBatchAction,
-} from '../TransactionPayController-method-action-types';
-import type { TransactionPayControllerGetStateAction } from '../types';
+} from '../TransactionPayController-method-action-types.js';
+import type { TransactionPayControllerGetStateAction } from '../types.js';
+import type { TransactionPayControllerMessenger } from './...js';
type AllActions = MessengerActions;
type AllEvents = MessengerEvents;
diff --git a/packages/transaction-pay-controller/src/types.ts b/packages/transaction-pay-controller/src/types.ts
index c1904e38f0d..d930c1a214a 100644
--- a/packages/transaction-pay-controller/src/types.ts
+++ b/packages/transaction-pay-controller/src/types.ts
@@ -57,8 +57,8 @@ import type {
CONTROLLER_NAME,
PaymentOverride,
TransactionPayStrategy,
-} from './constants';
-import type { TransactionPayControllerMethodActions } from './TransactionPayController-method-action-types';
+} from './constants.js';
+import type { TransactionPayControllerMethodActions } from './TransactionPayController-method-action-types.js';
export type AllowedActions =
| AccountTrackerControllerGetStateAction
diff --git a/packages/transaction-pay-controller/src/utils/7702.ts b/packages/transaction-pay-controller/src/utils/7702.ts
index 00354371d23..4d8c1e082c0 100644
--- a/packages/transaction-pay-controller/src/utils/7702.ts
+++ b/packages/transaction-pay-controller/src/utils/7702.ts
@@ -1,5 +1,5 @@
-import type { TransactionPayControllerMessenger } from '../types';
-import { KEYRING_TYPES_SUPPORTING_7702 } from '../types';
+import type { TransactionPayControllerMessenger } from '../types.js';
+import { KEYRING_TYPES_SUPPORTING_7702 } from '../types.js';
/**
* Check whether a given account supports EIP-7702 authorization signing.
diff --git a/packages/transaction-pay-controller/src/utils/amounts.test.ts b/packages/transaction-pay-controller/src/utils/amounts.test.ts
index c690b035759..e90a5ff6be5 100644
--- a/packages/transaction-pay-controller/src/utils/amounts.test.ts
+++ b/packages/transaction-pay-controller/src/utils/amounts.test.ts
@@ -1,6 +1,6 @@
import { BigNumber } from 'bignumber.js';
-import { getFiatValueFromUsd, sumAmounts } from './amounts';
+import { getFiatValueFromUsd, sumAmounts } from './amounts.js';
describe('Amounts utils', () => {
describe('sumAmounts', () => {
diff --git a/packages/transaction-pay-controller/src/utils/amounts.ts b/packages/transaction-pay-controller/src/utils/amounts.ts
index c09a2cd2b6e..c21dad95861 100644
--- a/packages/transaction-pay-controller/src/utils/amounts.ts
+++ b/packages/transaction-pay-controller/src/utils/amounts.ts
@@ -1,6 +1,6 @@
import { BigNumber } from 'bignumber.js';
-import type { Amount, FiatValue } from '../types';
+import type { Amount, FiatValue } from '../types.js';
/**
* Sum a list of amounts.
diff --git a/packages/transaction-pay-controller/src/utils/chomp.test.ts b/packages/transaction-pay-controller/src/utils/chomp.test.ts
index 370d72dd447..acbffb5e2f8 100644
--- a/packages/transaction-pay-controller/src/utils/chomp.test.ts
+++ b/packages/transaction-pay-controller/src/utils/chomp.test.ts
@@ -1,9 +1,9 @@
import type { Hex } from '@metamask/utils';
-import { CHAIN_ID_MONAD, MUSD_MONAD_ADDRESS } from '../constants';
-import type { TransactionPayControllerMessenger } from '../types';
-import { findRecentChompVaultDeposit } from './chomp';
-import { rpcRequest } from './provider';
+import { CHAIN_ID_MONAD, MUSD_MONAD_ADDRESS } from '../constants.js';
+import type { TransactionPayControllerMessenger } from '../types.js';
+import { findRecentChompVaultDeposit } from './chomp.js';
+import { rpcRequest } from './provider.js';
jest.mock('./provider');
diff --git a/packages/transaction-pay-controller/src/utils/chomp.ts b/packages/transaction-pay-controller/src/utils/chomp.ts
index 79f440f4bfa..2c2cc466276 100644
--- a/packages/transaction-pay-controller/src/utils/chomp.ts
+++ b/packages/transaction-pay-controller/src/utils/chomp.ts
@@ -1,10 +1,10 @@
import type { Hex } from '@metamask/utils';
import { createModuleLogger } from '@metamask/utils';
-import { CHAIN_ID_MONAD, MUSD_MONAD_ADDRESS } from '../constants';
-import { projectLogger } from '../logger';
-import type { TransactionPayControllerMessenger } from '../types';
-import { rpcRequest } from './provider';
+import { CHAIN_ID_MONAD, MUSD_MONAD_ADDRESS } from '../constants.js';
+import { projectLogger } from '../logger.js';
+import type { TransactionPayControllerMessenger } from '../types.js';
+import { rpcRequest } from './provider.js';
const log = createModuleLogger(projectLogger, 'chomp');
diff --git a/packages/transaction-pay-controller/src/utils/error-prefix.test.ts b/packages/transaction-pay-controller/src/utils/error-prefix.test.ts
index 1488a7af95f..99ec914da92 100644
--- a/packages/transaction-pay-controller/src/utils/error-prefix.test.ts
+++ b/packages/transaction-pay-controller/src/utils/error-prefix.test.ts
@@ -1,4 +1,4 @@
-import { prefixError } from './error-prefix';
+import { prefixError } from './error-prefix.js';
describe('prefixError', () => {
it('prefixes Error messages without replacing the Error object', () => {
diff --git a/packages/transaction-pay-controller/src/utils/feature-flags.test.ts b/packages/transaction-pay-controller/src/utils/feature-flags.test.ts
index e52b3e70d47..308bd19ecb9 100644
--- a/packages/transaction-pay-controller/src/utils/feature-flags.test.ts
+++ b/packages/transaction-pay-controller/src/utils/feature-flags.test.ts
@@ -1,11 +1,11 @@
import { TransactionType } from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
-import { getDefaultRemoteFeatureFlagControllerState } from '../../../remote-feature-flag-controller/src/remote-feature-flag-controller';
-import { TransactionPayStrategy } from '../constants';
-import type { TransactionPayFiatAsset } from '../strategy/fiat/constants';
-import { FIAT_ENABLED_TYPES } from '../strategy/fiat/constants';
-import { getMessengerMock } from '../tests/messenger-mock';
+import { getDefaultRemoteFeatureFlagControllerState } from '../../../remote-feature-flag-controller/src/remote-feature-flag-controller.js';
+import { TransactionPayStrategy } from '../constants.js';
+import type { TransactionPayFiatAsset } from '../strategy/fiat/constants.js';
+import { FIAT_ENABLED_TYPES } from '../strategy/fiat/constants.js';
+import { getMessengerMock } from '../tests/messenger-mock.js';
import {
DEFAULT_ACROSS_API_BASE,
DEFAULT_FALLBACK_GAS_ESTIMATE,
@@ -43,8 +43,8 @@ import {
getSlippage,
getStrategy,
getStrategyOrder,
-} from './feature-flags';
-import * as featureFlagsModule from './feature-flags';
+} from './feature-flags.js';
+import * as featureFlagsModule from './feature-flags.js';
const GAS_FALLBACK_ESTIMATE_MOCK = 123;
const GAS_FALLBACK_MAX_MOCK = 456;
diff --git a/packages/transaction-pay-controller/src/utils/feature-flags.ts b/packages/transaction-pay-controller/src/utils/feature-flags.ts
index 978714a8fcf..bcc345051d4 100644
--- a/packages/transaction-pay-controller/src/utils/feature-flags.ts
+++ b/packages/transaction-pay-controller/src/utils/feature-flags.ts
@@ -2,30 +2,30 @@ import type { TransactionType } from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
import { createModuleLogger } from '@metamask/utils';
import { BigNumber } from 'bignumber.js';
-import { uniq } from 'lodash';
+import { uniq } from 'lodash-es';
import {
isTransactionPayStrategy,
STABLECOINS,
TransactionPayStrategy,
-} from '../constants';
-import { projectLogger } from '../logger';
-import type { TransactionPayFiatAsset } from '../strategy/fiat/constants';
+} from '../constants.js';
+import { projectLogger } from '../logger.js';
+import type { TransactionPayFiatAsset } from '../strategy/fiat/constants.js';
import {
ETH_MAINNET_FIAT_ASSET,
FIAT_ASSET_ID_BY_TX_TYPE,
FIAT_ENABLED_TYPES,
-} from '../strategy/fiat/constants';
+} from '../strategy/fiat/constants.js';
import {
RELAY_EXECUTE_URL,
RELAY_POLLING_INTERVAL,
RELAY_QUOTE_URL,
-} from '../strategy/relay/constants';
+} from '../strategy/relay/constants.js';
import {
SERVER_POLLING_INTERVAL,
SERVER_URL_BASE,
-} from '../strategy/server/constants';
-import type { TransactionPayControllerMessenger } from '../types';
+} from '../strategy/server/constants.js';
+import type { TransactionPayControllerMessenger } from '../types.js';
const log = createModuleLogger(projectLogger, 'feature-flags');
diff --git a/packages/transaction-pay-controller/src/utils/gas-station.test.ts b/packages/transaction-pay-controller/src/utils/gas-station.test.ts
index 135a1447eab..ffea301fac8 100644
--- a/packages/transaction-pay-controller/src/utils/gas-station.test.ts
+++ b/packages/transaction-pay-controller/src/utils/gas-station.test.ts
@@ -1,13 +1,13 @@
import type { GasFeeToken } from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
-import { getDefaultRemoteFeatureFlagControllerState } from '../../../remote-feature-flag-controller/src/remote-feature-flag-controller';
-import { getMessengerMock } from '../tests/messenger-mock';
-import { calculateGasFeeTokenCost } from './gas';
+import { getDefaultRemoteFeatureFlagControllerState } from '../../../remote-feature-flag-controller/src/remote-feature-flag-controller.js';
+import { getMessengerMock } from '../tests/messenger-mock.js';
import {
getGasStationEligibility,
getGasStationCostInSourceTokenRaw,
-} from './gas-station';
+} from './gas-station.js';
+import { calculateGasFeeTokenCost } from './gas.js';
jest.mock('./gas');
diff --git a/packages/transaction-pay-controller/src/utils/gas-station.ts b/packages/transaction-pay-controller/src/utils/gas-station.ts
index 6398a1365ff..e495c7762a1 100644
--- a/packages/transaction-pay-controller/src/utils/gas-station.ts
+++ b/packages/transaction-pay-controller/src/utils/gas-station.ts
@@ -4,14 +4,14 @@ import type { Hex } from '@metamask/utils';
import { createModuleLogger } from '@metamask/utils';
import { BigNumber } from 'bignumber.js';
-import { projectLogger } from '../logger';
+import { projectLogger } from '../logger.js';
import type {
Amount,
QuoteRequest,
TransactionPayControllerMessenger,
-} from '../types';
-import { getFeatureFlags, isEIP7702Chain } from './feature-flags';
-import { calculateGasFeeTokenCost } from './gas';
+} from '../types.js';
+import { getFeatureFlags, isEIP7702Chain } from './feature-flags.js';
+import { calculateGasFeeTokenCost } from './gas.js';
const log = createModuleLogger(projectLogger, 'gas-station');
diff --git a/packages/transaction-pay-controller/src/utils/gas.test.ts b/packages/transaction-pay-controller/src/utils/gas.test.ts
index 5023f93ffc6..9d61aad2652 100644
--- a/packages/transaction-pay-controller/src/utils/gas.test.ts
+++ b/packages/transaction-pay-controller/src/utils/gas.test.ts
@@ -1,22 +1,22 @@
import { toHex } from '@metamask/controller-utils';
import type { Hex } from '@metamask/utils';
-import { clone, cloneDeep } from 'lodash';
+import { clone, cloneDeep } from 'lodash-es';
-import type { GasFeeEstimates } from '../../../gas-fee-controller/src';
+import type { GasFeeEstimates } from '../../../gas-fee-controller/src.js';
import type {
GasFeeToken,
TransactionMeta,
-} from '../../../transaction-controller/src';
-import { getMessengerMock } from '../tests/messenger-mock';
-import { getFallbackGas, getGasBuffer } from './feature-flags';
+} from '../../../transaction-controller/src.js';
+import { getMessengerMock } from '../tests/messenger-mock.js';
+import { getFallbackGas, getGasBuffer } from './feature-flags.js';
import {
calculateGasCost,
calculateGasFeeTokenCost,
calculateTransactionGasCost,
estimateGasLimit,
getGasFee,
-} from './gas';
-import { getTokenBalance, getTokenFiatRate } from './token';
+} from './gas.js';
+import { getTokenBalance, getTokenFiatRate } from './token.js';
jest.mock('./token');
jest.mock('./feature-flags', () => ({
diff --git a/packages/transaction-pay-controller/src/utils/gas.ts b/packages/transaction-pay-controller/src/utils/gas.ts
index 5d777d0395f..d86e7dcb8c4 100644
--- a/packages/transaction-pay-controller/src/utils/gas.ts
+++ b/packages/transaction-pay-controller/src/utils/gas.ts
@@ -1,5 +1,4 @@
import { toHex } from '@metamask/controller-utils';
-import type { GasFeeEstimates } from '@metamask/gas-fee-controller';
import type {
GasFeeToken,
TransactionMeta,
@@ -7,12 +6,12 @@ import type {
import type { Hex } from '@metamask/utils';
import { BigNumber } from 'bignumber.js';
-import type { TransactionPayControllerMessenger } from '..';
-import { createModuleLogger, projectLogger } from '../logger';
-import type { Amount } from '../types';
-import { getFallbackGas, getGasBuffer } from './feature-flags';
-import { getNetworkClientId } from './provider';
-import { getNativeToken, getTokenBalance, getTokenFiatRate } from './token';
+import { createModuleLogger, projectLogger } from '../logger.js';
+import type { Amount } from '../types.js';
+import type { TransactionPayControllerMessenger } from './...js';
+import { getFallbackGas, getGasBuffer } from './feature-flags.js';
+import { getNetworkClientId } from './provider.js';
+import { getNativeToken, getTokenBalance, getTokenFiatRate } from './token.js';
const log = createModuleLogger(projectLogger, 'gas');
@@ -290,7 +289,7 @@ export function getGasFee(
const chainState = gasFeeControllerState?.gasFeeEstimatesByChainId?.[chainId];
const { estimatedBaseFee: estimatedBaseFeeGwei, medium } =
- (chainState?.gasFeeEstimates as GasFeeEstimates | undefined) ?? {};
+ chainState?.gasFeeEstimates ?? {};
const maxFeePerGasGwei = medium?.suggestedMaxFeePerGas;
const maxPriorityFeePerGasGwei = medium?.suggestedMaxPriorityFeePerGas;
diff --git a/packages/transaction-pay-controller/src/utils/ma-vault-deposit.test.ts b/packages/transaction-pay-controller/src/utils/ma-vault-deposit.test.ts
index 6a24aac3c91..21d1085e8c1 100644
--- a/packages/transaction-pay-controller/src/utils/ma-vault-deposit.test.ts
+++ b/packages/transaction-pay-controller/src/utils/ma-vault-deposit.test.ts
@@ -2,16 +2,16 @@ import { TransactionType } from '@metamask/transaction-controller';
import type { TransactionMeta } from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
-import type { TransactionPayControllerMessenger } from '../types';
-import { findRecentChompVaultDeposit } from './chomp';
-import { submitMoneyAccountVaultDeposit } from './ma-vault-deposit';
-import { getNetworkClientId } from './provider';
+import type { TransactionPayControllerMessenger } from '../types.js';
+import { findRecentChompVaultDeposit } from './chomp.js';
+import { submitMoneyAccountVaultDeposit } from './ma-vault-deposit.js';
+import { getNetworkClientId } from './provider.js';
import {
collectTransactionIds,
getTransaction,
updateTransaction,
waitForTransactionConfirmed,
-} from './transaction';
+} from './transaction.js';
jest.mock('./chomp');
jest.mock('./provider');
diff --git a/packages/transaction-pay-controller/src/utils/ma-vault-deposit.ts b/packages/transaction-pay-controller/src/utils/ma-vault-deposit.ts
index ad2d02e39af..ebf85361fb6 100644
--- a/packages/transaction-pay-controller/src/utils/ma-vault-deposit.ts
+++ b/packages/transaction-pay-controller/src/utils/ma-vault-deposit.ts
@@ -4,18 +4,18 @@ import { TransactionType } from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
import { createModuleLogger } from '@metamask/utils';
-import { projectLogger } from '../logger';
-import { MUSD_MONAD_FIAT_ASSET } from '../strategy/fiat/constants';
-import type { TransactionPayControllerMessenger } from '../types';
-import { findRecentChompVaultDeposit } from './chomp';
-import { prefixError } from './error-prefix';
-import { getNetworkClientId } from './provider';
+import { projectLogger } from '../logger.js';
+import { MUSD_MONAD_FIAT_ASSET } from '../strategy/fiat/constants.js';
+import type { TransactionPayControllerMessenger } from '../types.js';
+import { findRecentChompVaultDeposit } from './chomp.js';
+import { prefixError } from './error-prefix.js';
+import { getNetworkClientId } from './provider.js';
import {
collectTransactionIds,
getTransaction,
updateTransaction,
waitForTransactionConfirmed,
-} from './transaction';
+} from './transaction.js';
const log = createModuleLogger(projectLogger, 'ma-vault-deposit');
diff --git a/packages/transaction-pay-controller/src/utils/no-op-quote.test.ts b/packages/transaction-pay-controller/src/utils/no-op-quote.test.ts
index 0997e584ca4..b955bcb3148 100644
--- a/packages/transaction-pay-controller/src/utils/no-op-quote.test.ts
+++ b/packages/transaction-pay-controller/src/utils/no-op-quote.test.ts
@@ -1,8 +1,8 @@
import type { Hex } from '@metamask/utils';
-import { TransactionPayStrategy } from '../constants';
-import type { TransactionPaymentToken } from '../types';
-import { buildNoOpQuote } from './no-op-quote';
+import { TransactionPayStrategy } from '../constants.js';
+import type { TransactionPaymentToken } from '../types.js';
+import { buildNoOpQuote } from './no-op-quote.js';
const FROM_MOCK = '0xabc' as Hex;
diff --git a/packages/transaction-pay-controller/src/utils/no-op-quote.ts b/packages/transaction-pay-controller/src/utils/no-op-quote.ts
index 35e5a4368e6..a4bcec8d4fd 100644
--- a/packages/transaction-pay-controller/src/utils/no-op-quote.ts
+++ b/packages/transaction-pay-controller/src/utils/no-op-quote.ts
@@ -1,12 +1,12 @@
import type { Hex, Json } from '@metamask/utils';
-import { TransactionPayStrategy } from '../constants';
+import { TransactionPayStrategy } from '../constants.js';
import type {
Amount,
FiatValue,
TransactionPaymentToken,
TransactionPayQuote,
-} from '../types';
+} from '../types.js';
function zeroFiat(): FiatValue {
return { fiat: '0', usd: '0' };
diff --git a/packages/transaction-pay-controller/src/utils/provider.test.ts b/packages/transaction-pay-controller/src/utils/provider.test.ts
index 8510fd91795..8258c944cbd 100644
--- a/packages/transaction-pay-controller/src/utils/provider.test.ts
+++ b/packages/transaction-pay-controller/src/utils/provider.test.ts
@@ -4,8 +4,8 @@ import { RpcEndpointType } from '@metamask/network-controller';
import type { NetworkConfiguration } from '@metamask/network-controller';
import type { Hex } from '@metamask/utils';
-import { getMessengerMock } from '../tests/messenger-mock';
-import { getNetworkClientId, rpcRequest } from './provider';
+import { getMessengerMock } from '../tests/messenger-mock.js';
+import { getNetworkClientId, rpcRequest } from './provider.js';
const CHAIN_ID_MOCK = '0x1' as Hex;
const DEFAULT_NETWORK_CLIENT_ID_MOCK = 'default-client-id';
diff --git a/packages/transaction-pay-controller/src/utils/provider.ts b/packages/transaction-pay-controller/src/utils/provider.ts
index ed793fb3fcd..28fb54f8bb3 100644
--- a/packages/transaction-pay-controller/src/utils/provider.ts
+++ b/packages/transaction-pay-controller/src/utils/provider.ts
@@ -10,8 +10,8 @@ import {
import type { Hex } from '@metamask/utils';
import { createModuleLogger } from '@metamask/utils';
-import { projectLogger } from '../logger';
-import type { TransactionPayControllerMessenger } from '../types';
+import { projectLogger } from '../logger.js';
+import type { TransactionPayControllerMessenger } from '../types.js';
const log = createModuleLogger(projectLogger, 'provider');
diff --git a/packages/transaction-pay-controller/src/utils/quote-gas.test.ts b/packages/transaction-pay-controller/src/utils/quote-gas.test.ts
index 64cef9bccae..dd6d61bdccc 100644
--- a/packages/transaction-pay-controller/src/utils/quote-gas.test.ts
+++ b/packages/transaction-pay-controller/src/utils/quote-gas.test.ts
@@ -1,9 +1,9 @@
import type { Hex } from '@metamask/utils';
-import { getMessengerMock } from '../tests/messenger-mock';
-import { getGasBuffer } from './feature-flags';
-import { estimateGasLimit } from './gas';
-import { estimateQuoteGasLimits } from './quote-gas';
+import { getMessengerMock } from '../tests/messenger-mock.js';
+import { getGasBuffer } from './feature-flags.js';
+import { estimateGasLimit } from './gas.js';
+import { estimateQuoteGasLimits } from './quote-gas.js';
jest.mock('./feature-flags', () => ({
...jest.requireActual('./feature-flags'),
diff --git a/packages/transaction-pay-controller/src/utils/quote-gas.ts b/packages/transaction-pay-controller/src/utils/quote-gas.ts
index 25c2823c1d3..44e9bc66008 100644
--- a/packages/transaction-pay-controller/src/utils/quote-gas.ts
+++ b/packages/transaction-pay-controller/src/utils/quote-gas.ts
@@ -4,10 +4,10 @@ import type { Hex } from '@metamask/utils';
import { createModuleLogger } from '@metamask/utils';
import { BigNumber } from 'bignumber.js';
-import type { TransactionPayControllerMessenger } from '..';
-import { projectLogger } from '../logger';
-import { getGasBuffer } from './feature-flags';
-import { estimateGasLimit } from './gas';
+import { projectLogger } from '../logger.js';
+import type { TransactionPayControllerMessenger } from './...js';
+import { getGasBuffer } from './feature-flags.js';
+import { estimateGasLimit } from './gas.js';
const log = createModuleLogger(projectLogger, 'quote-gas');
diff --git a/packages/transaction-pay-controller/src/utils/quotes.test.ts b/packages/transaction-pay-controller/src/utils/quotes.test.ts
index f414b8fe2fc..2e55d63e382 100644
--- a/packages/transaction-pay-controller/src/utils/quotes.test.ts
+++ b/packages/transaction-pay-controller/src/utils/quotes.test.ts
@@ -2,10 +2,10 @@ import { TransactionStatus } from '@metamask/transaction-controller';
import type { TransactionMeta } from '@metamask/transaction-controller';
import type { BatchTransaction } from '@metamask/transaction-controller';
import type { Hex, Json } from '@metamask/utils';
-import { cloneDeep } from 'lodash';
+import { cloneDeep } from 'lodash-es';
-import { TransactionPayStrategy } from '../constants';
-import { getMessengerMock } from '../tests/messenger-mock';
+import { TransactionPayStrategy } from '../constants.js';
+import { getMessengerMock } from '../tests/messenger-mock.js';
import type {
TransactionPaySourceAmount,
TransactionData,
@@ -13,18 +13,18 @@ import type {
TransactionPayTotals,
TransactionPaymentToken,
TransactionPayRequiredToken,
-} from '../types';
-import type { UpdateQuotesRequest } from './quotes';
-import { refreshQuotes, updateQuotes } from './quotes';
+} from '../types.js';
+import type { UpdateQuotesRequest } from './quotes.js';
+import { refreshQuotes, updateQuotes } from './quotes.js';
import {
checkStrategyQuoteSupport,
checkStrategySupport,
getStrategiesByName,
getStrategyByName,
-} from './strategy';
-import { getLiveTokenBalance, getTokenFiatRate } from './token';
-import { calculateTotals } from './totals';
-import { getTransaction, updateTransaction } from './transaction';
+} from './strategy.js';
+import { getLiveTokenBalance, getTokenFiatRate } from './token.js';
+import { calculateTotals } from './totals.js';
+import { getTransaction, updateTransaction } from './transaction.js';
jest.mock('./strategy');
jest.mock('./transaction');
diff --git a/packages/transaction-pay-controller/src/utils/quotes.ts b/packages/transaction-pay-controller/src/utils/quotes.ts
index 7ae137bdc7f..4d8b8b9f28a 100644
--- a/packages/transaction-pay-controller/src/utils/quotes.ts
+++ b/packages/transaction-pay-controller/src/utils/quotes.ts
@@ -4,8 +4,8 @@ import type { TransactionMeta } from '@metamask/transaction-controller';
import type { Hex, Json } from '@metamask/utils';
import { createModuleLogger } from '@metamask/utils';
-import { PaymentOverride, TransactionPayStrategy } from '../constants';
-import { projectLogger } from '../logger';
+import { PaymentOverride, TransactionPayStrategy } from '../constants.js';
+import { projectLogger } from '../logger.js';
import type {
QuoteRequest,
TransactionData,
@@ -16,22 +16,22 @@ import type {
TransactionPayTotals,
TransactionPaymentToken,
UpdateTransactionDataCallback,
-} from '../types';
-import { accountSupports7702 } from './7702';
-import { buildNoOpQuote } from './no-op-quote';
+} from '../types.js';
+import { accountSupports7702 } from './7702.js';
+import { buildNoOpQuote } from './no-op-quote.js';
import {
checkStrategyQuoteSupport,
checkStrategySupport,
getStrategiesByName,
getStrategyByName,
-} from './strategy';
+} from './strategy.js';
import {
computeTokenAmounts,
getLiveTokenBalance,
getTokenFiatRate,
-} from './token';
-import { calculateTotals } from './totals';
-import { getTransaction, updateTransaction } from './transaction';
+} from './token.js';
+import { calculateTotals } from './totals.js';
+import { getTransaction, updateTransaction } from './transaction.js';
const DEFAULT_REFRESH_INTERVAL = 30 * 1000; // 30 Seconds
diff --git a/packages/transaction-pay-controller/src/utils/required-tokens.test.ts b/packages/transaction-pay-controller/src/utils/required-tokens.test.ts
index 2bbc3cd676c..1e3fbd38cf9 100644
--- a/packages/transaction-pay-controller/src/utils/required-tokens.test.ts
+++ b/packages/transaction-pay-controller/src/utils/required-tokens.test.ts
@@ -1,10 +1,10 @@
import type { TransactionMeta } from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
-import { toHex } from '../../../controller-utils/src';
-import type { TransactionPayControllerMessenger } from '../types';
-import { parseRequiredTokens } from './required-tokens';
-import { getTokenBalance, getTokenFiatRate, getTokenInfo } from './token';
+import { toHex } from '../../../controller-utils/src.js';
+import type { TransactionPayControllerMessenger } from '../types.js';
+import { parseRequiredTokens } from './required-tokens.js';
+import { getTokenBalance, getTokenFiatRate, getTokenInfo } from './token.js';
jest.mock('./token', () => ({
...jest.requireActual('./token'),
diff --git a/packages/transaction-pay-controller/src/utils/required-tokens.ts b/packages/transaction-pay-controller/src/utils/required-tokens.ts
index 9103a6c1cec..f5667304422 100644
--- a/packages/transaction-pay-controller/src/utils/required-tokens.ts
+++ b/packages/transaction-pay-controller/src/utils/required-tokens.ts
@@ -5,17 +5,17 @@ import type { TransactionMeta } from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
import { createModuleLogger } from '@metamask/utils';
-import { projectLogger } from '../logger';
+import { projectLogger } from '../logger.js';
import type {
TransactionPayControllerMessenger,
TransactionPayRequiredToken,
-} from '../types';
+} from '../types.js';
import {
computeTokenAmounts,
getTokenBalance,
getTokenFiatRate,
getTokenInfo,
-} from './token';
+} from './token.js';
const log = createModuleLogger(projectLogger, 'required-tokens');
diff --git a/packages/transaction-pay-controller/src/utils/source-amounts.test.ts b/packages/transaction-pay-controller/src/utils/source-amounts.test.ts
index 87458d9ce31..6b38553a966 100644
--- a/packages/transaction-pay-controller/src/utils/source-amounts.test.ts
+++ b/packages/transaction-pay-controller/src/utils/source-amounts.test.ts
@@ -1,13 +1,13 @@
import { TransactionType } from '@metamask/transaction-controller';
-import { TransactionPayStrategy } from '..';
-import type { TransactionPaymentToken } from '..';
-import { ARBITRUM_USDC_ADDRESS, CHAIN_ID_ARBITRUM } from '../constants';
-import { getMessengerMock } from '../tests/messenger-mock';
-import type { TransactionData, TransactionPayRequiredToken } from '../types';
-import { updateSourceAmounts } from './source-amounts';
-import { getTokenFiatRate } from './token';
-import { getTransaction } from './transaction';
+import { ARBITRUM_USDC_ADDRESS, CHAIN_ID_ARBITRUM } from '../constants.js';
+import { getMessengerMock } from '../tests/messenger-mock.js';
+import type { TransactionData, TransactionPayRequiredToken } from '../types.js';
+import { TransactionPayStrategy } from './...js';
+import type { TransactionPaymentToken } from './...js';
+import { updateSourceAmounts } from './source-amounts.js';
+import { getTokenFiatRate } from './token.js';
+import { getTransaction } from './transaction.js';
jest.mock('./token', () => ({
...jest.requireActual('./token'),
diff --git a/packages/transaction-pay-controller/src/utils/source-amounts.ts b/packages/transaction-pay-controller/src/utils/source-amounts.ts
index f2bcd31a501..ce5691266a2 100644
--- a/packages/transaction-pay-controller/src/utils/source-amounts.ts
+++ b/packages/transaction-pay-controller/src/utils/source-amounts.ts
@@ -5,24 +5,24 @@ import type {
import { createModuleLogger } from '@metamask/utils';
import { BigNumber } from 'bignumber.js';
-import type {
- TransactionPayControllerMessenger,
- TransactionPaymentToken,
-} from '..';
-import { TransactionPayStrategy } from '..';
import {
ARBITRUM_USDC_ADDRESS,
CHAIN_ID_ARBITRUM,
PERPS_DEPOSIT_TYPES,
-} from '../constants';
-import { projectLogger } from '../logger';
+} from '../constants.js';
+import { projectLogger } from '../logger.js';
import type {
TransactionPaySourceAmount,
TransactionData,
TransactionPayRequiredToken,
-} from '../types';
-import { getTokenFiatRate, isSameToken } from './token';
-import { getTransaction } from './transaction';
+} from '../types.js';
+import type {
+ TransactionPayControllerMessenger,
+ TransactionPaymentToken,
+} from './...js';
+import { TransactionPayStrategy } from './...js';
+import { getTokenFiatRate, isSameToken } from './token.js';
+import { getTransaction } from './transaction.js';
const log = createModuleLogger(projectLogger, 'source-amounts');
diff --git a/packages/transaction-pay-controller/src/utils/strategy.test.ts b/packages/transaction-pay-controller/src/utils/strategy.test.ts
index d2c7da2084c..bc2d61d0f81 100644
--- a/packages/transaction-pay-controller/src/utils/strategy.test.ts
+++ b/packages/transaction-pay-controller/src/utils/strategy.test.ts
@@ -1,15 +1,15 @@
-import { TransactionPayStrategy } from '../constants';
-import { AcrossStrategy } from '../strategy/across/AcrossStrategy';
-import { FiatStrategy } from '../strategy/fiat/FiatStrategy';
-import { RelayStrategy } from '../strategy/relay/RelayStrategy';
-import { ServerStrategy } from '../strategy/server/ServerStrategy';
-import type { PayStrategyGetQuotesRequest } from '../types';
+import { TransactionPayStrategy } from '../constants.js';
+import { AcrossStrategy } from '../strategy/across/AcrossStrategy.js';
+import { FiatStrategy } from '../strategy/fiat/FiatStrategy.js';
+import { RelayStrategy } from '../strategy/relay/RelayStrategy.js';
+import { ServerStrategy } from '../strategy/server/ServerStrategy.js';
+import type { PayStrategyGetQuotesRequest } from '../types.js';
import {
checkStrategyQuoteSupport,
checkStrategySupport,
getStrategiesByName,
getStrategyByName,
-} from './strategy';
+} from './strategy.js';
describe('Strategy Utils', () => {
describe('getStrategyByName', () => {
diff --git a/packages/transaction-pay-controller/src/utils/strategy.ts b/packages/transaction-pay-controller/src/utils/strategy.ts
index 3026874d71a..97bd8cbdfa5 100644
--- a/packages/transaction-pay-controller/src/utils/strategy.ts
+++ b/packages/transaction-pay-controller/src/utils/strategy.ts
@@ -1,13 +1,13 @@
-import { TransactionPayStrategy } from '../constants';
-import { AcrossStrategy } from '../strategy/across/AcrossStrategy';
-import { FiatStrategy } from '../strategy/fiat/FiatStrategy';
-import { RelayStrategy } from '../strategy/relay/RelayStrategy';
-import { ServerStrategy } from '../strategy/server/ServerStrategy';
+import { TransactionPayStrategy } from '../constants.js';
+import { AcrossStrategy } from '../strategy/across/AcrossStrategy.js';
+import { FiatStrategy } from '../strategy/fiat/FiatStrategy.js';
+import { RelayStrategy } from '../strategy/relay/RelayStrategy.js';
+import { ServerStrategy } from '../strategy/server/ServerStrategy.js';
import type {
PayStrategy,
PayStrategyCheckQuoteSupportRequest,
PayStrategyGetQuotesRequest,
-} from '../types';
+} from '../types.js';
export type NamedStrategy = {
name: TransactionPayStrategy;
diff --git a/packages/transaction-pay-controller/src/utils/token.test.ts b/packages/transaction-pay-controller/src/utils/token.test.ts
index e23dbd9e485..cb30aa2c542 100644
--- a/packages/transaction-pay-controller/src/utils/token.test.ts
+++ b/packages/transaction-pay-controller/src/utils/token.test.ts
@@ -7,13 +7,13 @@ import { RpcEndpointType } from '@metamask/network-controller';
import type { NetworkConfiguration } from '@metamask/network-controller';
import type { Hex } from '@metamask/utils';
-import { getDefaultRemoteFeatureFlagControllerState } from '../../../remote-feature-flag-controller/src/remote-feature-flag-controller';
+import { getDefaultRemoteFeatureFlagControllerState } from '../../../remote-feature-flag-controller/src/remote-feature-flag-controller.js';
import {
CHAIN_ID_POLYGON,
NATIVE_TOKEN_ADDRESS,
POLYGON_USDCE_ADDRESS,
-} from '../constants';
-import { getMessengerMock } from '../tests/messenger-mock';
+} from '../constants.js';
+import { getMessengerMock } from '../tests/messenger-mock.js';
import {
buildCaipAssetType,
computeRawFromFiatAmount,
@@ -26,7 +26,7 @@ import {
getLiveTokenBalance,
normalizeTokenAddress,
TokenAddressTarget,
-} from './token';
+} from './token.js';
const TOKEN_ADDRESS_MOCK = '0x559B65722aD62AD6DAC4Fa5a1c6B23A2e8ce57Ec' as Hex;
const TOKEN_ADDRESS_2_MOCK = '0x123456789abcdef1234567890abcdef12345678' as Hex;
diff --git a/packages/transaction-pay-controller/src/utils/token.ts b/packages/transaction-pay-controller/src/utils/token.ts
index 0f0f66b88c6..66ea9ac4541 100644
--- a/packages/transaction-pay-controller/src/utils/token.ts
+++ b/packages/transaction-pay-controller/src/utils/token.ts
@@ -10,14 +10,14 @@ import {
CHAIN_ID_POLYGON,
NATIVE_TOKEN_ADDRESS,
SLIP44_COIN_TYPE_BY_CHAIN,
-} from '../constants';
-import type { FiatRates, TransactionPayControllerMessenger } from '../types';
+} from '../constants.js';
+import type { FiatRates, TransactionPayControllerMessenger } from '../types.js';
import {
getAssetsUnifyStateFeature,
getStablecoins,
isChainExcludedFromInfura,
-} from './feature-flags';
-import { getNetworkClientId, rpcRequest } from './provider';
+} from './feature-flags.js';
+import { getNetworkClientId, rpcRequest } from './provider.js';
/**
* Check if two tokens are the same (same address and chain).
diff --git a/packages/transaction-pay-controller/src/utils/totals.test.ts b/packages/transaction-pay-controller/src/utils/totals.test.ts
index 1fc2ec4a5ec..d44857abce0 100644
--- a/packages/transaction-pay-controller/src/utils/totals.test.ts
+++ b/packages/transaction-pay-controller/src/utils/totals.test.ts
@@ -1,14 +1,14 @@
import type { TransactionMeta } from '@metamask/transaction-controller';
-import { TransactionPayStrategy } from '..';
-import type { TransactionPayControllerMessenger } from '..';
import type {
QuoteRequest,
TransactionPayQuote,
TransactionPayRequiredToken,
-} from '../types';
-import { calculateTransactionGasCost } from './gas';
-import { calculateTotals } from './totals';
+} from '../types.js';
+import { TransactionPayStrategy } from './...js';
+import type { TransactionPayControllerMessenger } from './...js';
+import { calculateTransactionGasCost } from './gas.js';
+import { calculateTotals } from './totals.js';
jest.mock('./gas');
diff --git a/packages/transaction-pay-controller/src/utils/totals.ts b/packages/transaction-pay-controller/src/utils/totals.ts
index 62978191795..26d587de3e8 100644
--- a/packages/transaction-pay-controller/src/utils/totals.ts
+++ b/packages/transaction-pay-controller/src/utils/totals.ts
@@ -1,16 +1,16 @@
import type { TransactionMeta } from '@metamask/transaction-controller';
import { BigNumber } from 'bignumber.js';
-import { TransactionPayStrategy } from '../constants';
+import { TransactionPayStrategy } from '../constants.js';
import type {
FiatValue,
TransactionPayControllerMessenger,
TransactionPayQuote,
TransactionPayRequiredToken,
TransactionPayTotals,
-} from '../types';
-import { sumAmounts } from './amounts';
-import { calculateTransactionGasCost } from './gas';
+} from '../types.js';
+import { sumAmounts } from './amounts.js';
+import { calculateTransactionGasCost } from './gas.js';
/**
* Calculate totals for a list of quotes and tokens.
diff --git a/packages/transaction-pay-controller/src/utils/transaction.test.ts b/packages/transaction-pay-controller/src/utils/transaction.test.ts
index 741f40f7f4c..cb9fb8df9b2 100644
--- a/packages/transaction-pay-controller/src/utils/transaction.test.ts
+++ b/packages/transaction-pay-controller/src/utils/transaction.test.ts
@@ -8,16 +8,16 @@ import {
import type { TransactionMeta } from '@metamask/transaction-controller';
import type { TransactionControllerState } from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
-import { noop } from 'lodash';
+import { noop } from 'lodash-es';
-import { NATIVE_TOKEN_ADDRESS } from '../constants';
-import { getMessengerMock } from '../tests/messenger-mock';
+import { NATIVE_TOKEN_ADDRESS } from '../constants.js';
+import { getMessengerMock } from '../tests/messenger-mock.js';
import type {
TransactionData,
TransactionPayControllerState,
TransactionPayRequiredToken,
-} from '../types';
-import { parseRequiredTokens } from './required-tokens';
+} from '../types.js';
+import { parseRequiredTokens } from './required-tokens.js';
import {
FINALIZED_STATUSES,
collectTransactionIds,
@@ -28,7 +28,7 @@ import {
subscribeTransactionChanges,
updateTransaction,
waitForTransactionConfirmed,
-} from './transaction';
+} from './transaction.js';
jest.mock('./required-tokens');
diff --git a/packages/transaction-pay-controller/src/utils/transaction.ts b/packages/transaction-pay-controller/src/utils/transaction.ts
index 75bf543b1f4..28b51243fcf 100644
--- a/packages/transaction-pay-controller/src/utils/transaction.ts
+++ b/packages/transaction-pay-controller/src/utils/transaction.ts
@@ -9,17 +9,17 @@ import type { Hex } from '@metamask/utils';
import { createModuleLogger } from '@metamask/utils';
import { BigNumber } from 'bignumber.js';
import type { Patch } from 'immer';
-import { cloneDeep } from 'lodash';
+import { cloneDeep } from 'lodash-es';
-import { projectLogger } from '../logger';
+import { projectLogger } from '../logger.js';
import type {
TransactionPayControllerMessenger,
TransactionPayControllerState,
UpdateTransactionDataCallback,
-} from '../types';
-import { rpcRequest } from './provider';
-import { parseRequiredTokens } from './required-tokens';
-import { getNativeToken } from './token';
+} from '../types.js';
+import { rpcRequest } from './provider.js';
+import { parseRequiredTokens } from './required-tokens.js';
+import { getNativeToken } from './token.js';
const log = createModuleLogger(projectLogger, 'transaction');
diff --git a/packages/user-operation-controller/jest.config.js b/packages/user-operation-controller/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/user-operation-controller/jest.config.js
+++ b/packages/user-operation-controller/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/user-operation-controller/package.json b/packages/user-operation-controller/package.json
index d2c071491aa..8e2bfff69f0 100644
--- a/packages/user-operation-controller/package.json
+++ b/packages/user-operation-controller/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/user-operation-controller",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/user-operation-controller",
@@ -71,13 +64,12 @@
"@metamask/utils": "^11.11.0",
"bn.js": "^5.2.1",
"immer": "^9.0.6",
- "lodash": "^4.17.21",
+ "lodash-es": "^4.17.21",
"uuid": "^8.3.2"
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
"@metamask/eth-block-tracker": "^15.0.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/user-operation-controller/src/UserOperationController-method-action-types.ts b/packages/user-operation-controller/src/UserOperationController-method-action-types.ts
index aeb25ac0a87..a1377907657 100644
--- a/packages/user-operation-controller/src/UserOperationController-method-action-types.ts
+++ b/packages/user-operation-controller/src/UserOperationController-method-action-types.ts
@@ -3,7 +3,7 @@
* Do not edit manually.
*/
-import type { UserOperationController } from './UserOperationController';
+import type { UserOperationController } from './UserOperationController.js';
/**
* Create and submit a user operation.
diff --git a/packages/user-operation-controller/src/UserOperationController.test.ts b/packages/user-operation-controller/src/UserOperationController.test.ts
index cc946555099..58b7c100d9a 100644
--- a/packages/user-operation-controller/src/UserOperationController.test.ts
+++ b/packages/user-operation-controller/src/UserOperationController.test.ts
@@ -5,33 +5,33 @@ import { TransactionType } from '@metamask/transaction-controller';
import type { TransactionParams } from '@metamask/transaction-controller';
import { EventEmitter } from 'stream';
-import { ADDRESS_ZERO, EMPTY_BYTES, VALUE_ZERO } from './constants';
-import * as BundlerHelper from './helpers/Bundler';
-import * as PendingUserOperationTrackerHelper from './helpers/PendingUserOperationTracker';
-import { SnapSmartContractAccount } from './helpers/SnapSmartContractAccount';
-import { UserOperationStatus } from './types';
-import type { UserOperationMetadata } from './types';
+import { ADDRESS_ZERO, EMPTY_BYTES, VALUE_ZERO } from './constants.js';
+import * as BundlerHelper from './helpers/Bundler.js';
+import * as PendingUserOperationTrackerHelper from './helpers/PendingUserOperationTracker.js';
+import { SnapSmartContractAccount } from './helpers/SnapSmartContractAccount.js';
+import { UserOperationStatus } from './types.js';
+import type { UserOperationMetadata } from './types.js';
import type {
PrepareUserOperationResponse,
SignUserOperationResponse,
SmartContractAccount,
UpdateUserOperationResponse,
-} from './types';
+} from './types.js';
import type {
AddUserOperationOptions,
AddUserOperationRequest,
UserOperationControllerMessenger,
-} from './UserOperationController';
-import { UserOperationController } from './UserOperationController';
-import { updateGas } from './utils/gas';
-import { updateGasFees } from './utils/gas-fees';
+} from './UserOperationController.js';
+import { UserOperationController } from './UserOperationController.js';
+import { updateGasFees } from './utils/gas-fees.js';
+import { updateGas } from './utils/gas.js';
import {
validateAddUserOperationRequest,
validateAddUserOperationOptions,
validatePrepareUserOperationResponse,
validateSignUserOperationResponse,
validateUpdateUserOperationResponse,
-} from './utils/validation';
+} from './utils/validation.js';
jest.mock('./utils/gas');
jest.mock('./utils/gas-fees');
@@ -237,7 +237,7 @@ describe('UserOperationController', () => {
return approvalControllerAddRequestMock();
}
- throw new Error(`Unexpected mock messenger action: ${action}`);
+ throw new Error(`Unexpected mock messenger action: ${String(action)}`);
},
);
diff --git a/packages/user-operation-controller/src/UserOperationController.ts b/packages/user-operation-controller/src/UserOperationController.ts
index c0fc7150f63..a33a0f22b38 100644
--- a/packages/user-operation-controller/src/UserOperationController.ts
+++ b/packages/user-operation-controller/src/UserOperationController.ts
@@ -30,31 +30,31 @@ import { add0x } from '@metamask/utils';
// This package purposefully relies on Node's EventEmitter module.
// eslint-disable-next-line import-x/no-nodejs-modules
import EventEmitter from 'events';
-import { cloneDeep } from 'lodash';
+import { cloneDeep } from 'lodash-es';
import { v1 as random } from 'uuid';
-import { ADDRESS_ZERO, EMPTY_BYTES, VALUE_ZERO } from './constants';
-import { Bundler } from './helpers/Bundler';
-import { PendingUserOperationTracker } from './helpers/PendingUserOperationTracker';
-import { SnapSmartContractAccount } from './helpers/SnapSmartContractAccount';
-import { projectLogger as log } from './logger';
+import { ADDRESS_ZERO, EMPTY_BYTES, VALUE_ZERO } from './constants.js';
+import { Bundler } from './helpers/Bundler.js';
+import { PendingUserOperationTracker } from './helpers/PendingUserOperationTracker.js';
+import { SnapSmartContractAccount } from './helpers/SnapSmartContractAccount.js';
+import { projectLogger as log } from './logger.js';
import type {
SmartContractAccount,
UserOperation,
UserOperationMetadata,
-} from './types';
-import { UserOperationStatus } from './types';
-import type { UserOperationControllerMethodActions } from './UserOperationController-method-action-types';
-import { updateGas } from './utils/gas';
-import { updateGasFees } from './utils/gas-fees';
-import { getTransactionMetadata } from './utils/transaction';
+} from './types.js';
+import { UserOperationStatus } from './types.js';
+import type { UserOperationControllerMethodActions } from './UserOperationController-method-action-types.js';
+import { updateGasFees } from './utils/gas-fees.js';
+import { updateGas } from './utils/gas.js';
+import { getTransactionMetadata } from './utils/transaction.js';
import {
validateAddUserOperationOptions,
validateAddUserOperationRequest,
validatePrepareUserOperationResponse,
validateSignUserOperationResponse,
validateUpdateUserOperationResponse,
-} from './utils/validation';
+} from './utils/validation.js';
const controllerName = 'UserOperationController';
diff --git a/packages/user-operation-controller/src/helpers/Bundler.test.ts b/packages/user-operation-controller/src/helpers/Bundler.test.ts
index 2beb90c8abe..d3ea8a8c74c 100644
--- a/packages/user-operation-controller/src/helpers/Bundler.test.ts
+++ b/packages/user-operation-controller/src/helpers/Bundler.test.ts
@@ -1,5 +1,5 @@
-import type { UserOperation } from '../types';
-import { Bundler } from './Bundler';
+import type { UserOperation } from '../types.js';
+import { Bundler } from './Bundler.js';
const URL_MOCK = 'http://test.com';
const ENTRYPOINT_MOCK = '0x123';
diff --git a/packages/user-operation-controller/src/helpers/Bundler.ts b/packages/user-operation-controller/src/helpers/Bundler.ts
index 7e66581aeed..2f62701588c 100644
--- a/packages/user-operation-controller/src/helpers/Bundler.ts
+++ b/packages/user-operation-controller/src/helpers/Bundler.ts
@@ -1,5 +1,5 @@
-import { createModuleLogger, projectLogger } from '../logger';
-import type { UserOperation, UserOperationReceipt } from '../types';
+import { createModuleLogger, projectLogger } from '../logger.js';
+import type { UserOperation, UserOperationReceipt } from '../types.js';
const log = createModuleLogger(projectLogger, 'bundler');
diff --git a/packages/user-operation-controller/src/helpers/PendingUserOperationTracker.test.ts b/packages/user-operation-controller/src/helpers/PendingUserOperationTracker.test.ts
index 36a66efd467..bd084a603f8 100644
--- a/packages/user-operation-controller/src/helpers/PendingUserOperationTracker.test.ts
+++ b/packages/user-operation-controller/src/helpers/PendingUserOperationTracker.test.ts
@@ -1,11 +1,11 @@
import { query } from '@metamask/controller-utils';
import type { NetworkControllerGetNetworkClientByIdAction } from '@metamask/network-controller';
-import type { UserOperationMetadata, UserOperationReceipt } from '../types';
-import { UserOperationStatus } from '../types';
-import type { UserOperationControllerMessenger } from '../UserOperationController';
-import * as BundlerHelper from './Bundler';
-import { PendingUserOperationTracker } from './PendingUserOperationTracker';
+import type { UserOperationMetadata, UserOperationReceipt } from '../types.js';
+import { UserOperationStatus } from '../types.js';
+import type { UserOperationControllerMessenger } from '../UserOperationController.js';
+import * as BundlerHelper from './Bundler.js';
+import { PendingUserOperationTracker } from './PendingUserOperationTracker.js';
const CHAIN_ID_MOCK = '0x5';
const NETWORK_CLIENT_ID_MOCK = 'testNetworkClientId';
diff --git a/packages/user-operation-controller/src/helpers/PendingUserOperationTracker.ts b/packages/user-operation-controller/src/helpers/PendingUserOperationTracker.ts
index 99124feeb0a..f887a7e4050 100644
--- a/packages/user-operation-controller/src/helpers/PendingUserOperationTracker.ts
+++ b/packages/user-operation-controller/src/helpers/PendingUserOperationTracker.ts
@@ -12,11 +12,11 @@ import type { Hex } from '@metamask/utils';
// eslint-disable-next-line import-x/no-nodejs-modules
import EventEmitter from 'events';
-import { projectLogger } from '../logger';
-import type { UserOperationMetadata, UserOperationReceipt } from '../types';
-import { UserOperationStatus } from '../types';
-import type { UserOperationControllerMessenger } from '../UserOperationController';
-import { Bundler } from './Bundler';
+import { projectLogger } from '../logger.js';
+import type { UserOperationMetadata, UserOperationReceipt } from '../types.js';
+import { UserOperationStatus } from '../types.js';
+import type { UserOperationControllerMessenger } from '../UserOperationController.js';
+import { Bundler } from './Bundler.js';
const log = createModuleLogger(projectLogger, 'pending-user-operations');
diff --git a/packages/user-operation-controller/src/helpers/SnapSmartContractAccount.test.ts b/packages/user-operation-controller/src/helpers/SnapSmartContractAccount.test.ts
index 28b48d0a27c..77aaaf50b2a 100644
--- a/packages/user-operation-controller/src/helpers/SnapSmartContractAccount.test.ts
+++ b/packages/user-operation-controller/src/helpers/SnapSmartContractAccount.test.ts
@@ -1,17 +1,17 @@
import type { KeyringController } from '@metamask/keyring-controller';
-import { ADDRESS_ZERO, EMPTY_BYTES, VALUE_ZERO } from '../constants';
+import { ADDRESS_ZERO, EMPTY_BYTES, VALUE_ZERO } from '../constants.js';
import type {
PrepareUserOperationResponse,
SignUserOperationRequest,
SignUserOperationResponse,
UpdateUserOperationRequest,
UpdateUserOperationResponse,
-} from '../types';
-import type { PrepareUserOperationRequest } from '../types';
-import type { UserOperationControllerMessenger } from '../UserOperationController';
-import { toEip155ChainId } from '../utils/chain-id';
-import { SnapSmartContractAccount } from './SnapSmartContractAccount';
+} from '../types.js';
+import type { PrepareUserOperationRequest } from '../types.js';
+import type { UserOperationControllerMessenger } from '../UserOperationController.js';
+import { toEip155ChainId } from '../utils/chain-id.js';
+import { SnapSmartContractAccount } from './SnapSmartContractAccount.js';
const PREPARE_USER_OPERATION_REQUEST_MOCK: PrepareUserOperationRequest = {
chainId: '0x1',
diff --git a/packages/user-operation-controller/src/helpers/SnapSmartContractAccount.ts b/packages/user-operation-controller/src/helpers/SnapSmartContractAccount.ts
index 78cddc4ccd7..54ae14a07d3 100644
--- a/packages/user-operation-controller/src/helpers/SnapSmartContractAccount.ts
+++ b/packages/user-operation-controller/src/helpers/SnapSmartContractAccount.ts
@@ -1,4 +1,4 @@
-import { ADDRESS_ZERO, EMPTY_BYTES, VALUE_ZERO } from '../constants';
+import { ADDRESS_ZERO, EMPTY_BYTES, VALUE_ZERO } from '../constants.js';
import type {
PrepareUserOperationRequest,
PrepareUserOperationResponse,
@@ -7,9 +7,9 @@ import type {
SmartContractAccount,
UpdateUserOperationRequest,
UpdateUserOperationResponse,
-} from '../types';
-import type { UserOperationControllerMessenger } from '../UserOperationController';
-import { toEip155ChainId } from '../utils/chain-id';
+} from '../types.js';
+import type { UserOperationControllerMessenger } from '../UserOperationController.js';
+import { toEip155ChainId } from '../utils/chain-id.js';
export class SnapSmartContractAccount implements SmartContractAccount {
readonly #messenger: UserOperationControllerMessenger;
diff --git a/packages/user-operation-controller/src/index.ts b/packages/user-operation-controller/src/index.ts
index a6a4fee803a..64c6fffa00b 100644
--- a/packages/user-operation-controller/src/index.ts
+++ b/packages/user-operation-controller/src/index.ts
@@ -1,7 +1,7 @@
-export * from './UserOperationController';
+export * from './UserOperationController.js';
export type {
UserOperationControllerAddUserOperationAction,
UserOperationControllerAddUserOperationFromTransactionAction,
UserOperationControllerStartPollingByNetworkClientIdAction,
-} from './UserOperationController-method-action-types';
-export * from './types';
+} from './UserOperationController-method-action-types.js';
+export * from './types.js';
diff --git a/packages/user-operation-controller/src/utils/chain-id.test.ts b/packages/user-operation-controller/src/utils/chain-id.test.ts
index 1efa378c3bc..47f8f0f42aa 100644
--- a/packages/user-operation-controller/src/utils/chain-id.test.ts
+++ b/packages/user-operation-controller/src/utils/chain-id.test.ts
@@ -1,4 +1,4 @@
-import { toEip155ChainId } from './chain-id';
+import { toEip155ChainId } from './chain-id.js';
describe('chain-id', () => {
describe('toEip155ChainId', () => {
diff --git a/packages/user-operation-controller/src/utils/gas-fees.test.ts b/packages/user-operation-controller/src/utils/gas-fees.test.ts
index 794c98870e7..79d3f396a55 100644
--- a/packages/user-operation-controller/src/utils/gas-fees.test.ts
+++ b/packages/user-operation-controller/src/utils/gas-fees.test.ts
@@ -3,10 +3,10 @@ import type { GasFeeState } from '@metamask/gas-fee-controller';
import { GAS_ESTIMATE_TYPES } from '@metamask/gas-fee-controller';
import { UserFeeLevel } from '@metamask/transaction-controller';
import type { TransactionParams } from '@metamask/transaction-controller';
-import { cloneDeep } from 'lodash';
+import { cloneDeep } from 'lodash-es';
-import type { UpdateGasFeesRequest } from './gas-fees';
-import { updateGasFees } from './gas-fees';
+import type { UpdateGasFeesRequest } from './gas-fees.js';
+import { updateGasFees } from './gas-fees.js';
jest.mock('@metamask/controller-utils', () => ({
...jest.requireActual('@metamask/controller-utils'),
diff --git a/packages/user-operation-controller/src/utils/gas-fees.ts b/packages/user-operation-controller/src/utils/gas-fees.ts
index 45ebaaaa274..ee7d86d1f2e 100644
--- a/packages/user-operation-controller/src/utils/gas-fees.ts
+++ b/packages/user-operation-controller/src/utils/gas-fees.ts
@@ -13,10 +13,10 @@ import { UserFeeLevel } from '@metamask/transaction-controller';
import type { Hex } from '@metamask/utils';
import { add0x } from '@metamask/utils';
-import { EMPTY_BYTES } from '../constants';
-import { createModuleLogger, projectLogger } from '../logger';
-import type { UserOperation, UserOperationMetadata } from '../types';
-import type { AddUserOperationRequest } from '../UserOperationController';
+import { EMPTY_BYTES } from '../constants.js';
+import { createModuleLogger, projectLogger } from '../logger.js';
+import type { UserOperation, UserOperationMetadata } from '../types.js';
+import type { AddUserOperationRequest } from '../UserOperationController.js';
const log = createModuleLogger(projectLogger, 'gas-fees');
diff --git a/packages/user-operation-controller/src/utils/gas.test.ts b/packages/user-operation-controller/src/utils/gas.test.ts
index b8df1c484f4..35dc2c094a0 100644
--- a/packages/user-operation-controller/src/utils/gas.test.ts
+++ b/packages/user-operation-controller/src/utils/gas.test.ts
@@ -1,13 +1,13 @@
-import { cloneDeep } from 'lodash';
+import { cloneDeep } from 'lodash-es';
-import { VALUE_ZERO } from '../constants';
-import type { BundlerEstimateUserOperationGasResponse } from '../helpers/Bundler';
-import { Bundler } from '../helpers/Bundler';
+import { VALUE_ZERO } from '../constants.js';
+import type { BundlerEstimateUserOperationGasResponse } from '../helpers/Bundler.js';
+import { Bundler } from '../helpers/Bundler.js';
import type {
PrepareUserOperationResponse,
UserOperationMetadata,
-} from '../types';
-import { updateGas } from './gas';
+} from '../types.js';
+import { updateGas } from './gas.js';
jest.mock('../helpers/Bundler', () => ({
Bundler: jest.fn(),
diff --git a/packages/user-operation-controller/src/utils/gas.ts b/packages/user-operation-controller/src/utils/gas.ts
index 3d5715832fc..ebc26d74402 100644
--- a/packages/user-operation-controller/src/utils/gas.ts
+++ b/packages/user-operation-controller/src/utils/gas.ts
@@ -2,13 +2,13 @@ import { hexToBN } from '@metamask/controller-utils';
import { add0x } from '@metamask/utils';
import BN from 'bn.js';
-import { VALUE_ZERO } from '../constants';
-import { Bundler } from '../helpers/Bundler';
-import { createModuleLogger, projectLogger } from '../logger';
+import { VALUE_ZERO } from '../constants.js';
+import { Bundler } from '../helpers/Bundler.js';
+import { createModuleLogger, projectLogger } from '../logger.js';
import type {
PrepareUserOperationResponse,
UserOperationMetadata,
-} from '../types';
+} from '../types.js';
const log = createModuleLogger(projectLogger, 'gas');
diff --git a/packages/user-operation-controller/src/utils/transaction.test.ts b/packages/user-operation-controller/src/utils/transaction.test.ts
index ee7e49561fb..8dd47a59519 100644
--- a/packages/user-operation-controller/src/utils/transaction.test.ts
+++ b/packages/user-operation-controller/src/utils/transaction.test.ts
@@ -1,14 +1,14 @@
-import type { TransactionParams } from '../../../transaction-controller/src';
+import type { TransactionParams } from '../../../transaction-controller/src.js';
import {
TransactionStatus,
TransactionType,
UserFeeLevel,
-} from '../../../transaction-controller/src';
-import { EMPTY_BYTES, VALUE_ZERO } from '../constants';
-import { UserOperationStatus } from '../types';
-import type { UserOperation } from '../types';
-import type { UserOperationMetadata } from '../types';
-import { getTransactionMetadata } from './transaction';
+} from '../../../transaction-controller/src.js';
+import { EMPTY_BYTES, VALUE_ZERO } from '../constants.js';
+import { UserOperationStatus } from '../types.js';
+import type { UserOperation } from '../types.js';
+import type { UserOperationMetadata } from '../types.js';
+import { getTransactionMetadata } from './transaction.js';
const USER_OPERATION_METADATA_MOCK: UserOperationMetadata = {
id: 'testUserOperationId',
diff --git a/packages/user-operation-controller/src/utils/transaction.ts b/packages/user-operation-controller/src/utils/transaction.ts
index 72e90be3cec..f945ab2898b 100644
--- a/packages/user-operation-controller/src/utils/transaction.ts
+++ b/packages/user-operation-controller/src/utils/transaction.ts
@@ -11,9 +11,9 @@ import type { Hex } from '@metamask/utils';
import { add0x, remove0x } from '@metamask/utils';
import BN from 'bn.js';
-import { EMPTY_BYTES, VALUE_ZERO } from '../constants';
-import { UserOperationStatus } from '../types';
-import type { UserOperationMetadata } from '../types';
+import { EMPTY_BYTES, VALUE_ZERO } from '../constants.js';
+import { UserOperationStatus } from '../types.js';
+import type { UserOperationMetadata } from '../types.js';
/**
* Converts a user operation metadata object into a transaction metadata object.
diff --git a/packages/user-operation-controller/src/utils/validation.test.ts b/packages/user-operation-controller/src/utils/validation.test.ts
index e6537f0f422..b7faa6daf56 100644
--- a/packages/user-operation-controller/src/utils/validation.test.ts
+++ b/packages/user-operation-controller/src/utils/validation.test.ts
@@ -1,24 +1,24 @@
/* eslint-disable jest/expect-expect */
import { TransactionType } from '@metamask/transaction-controller';
-import { cloneDeep } from 'lodash';
+import { cloneDeep } from 'lodash-es';
import type {
PrepareUserOperationResponse,
SignUserOperationResponse,
UpdateUserOperationResponse,
-} from '../types';
+} from '../types.js';
import type {
AddUserOperationOptions,
AddUserOperationRequest,
-} from '../UserOperationController';
+} from '../UserOperationController.js';
import {
validateAddUserOperationOptions,
validateAddUserOperationRequest,
validatePrepareUserOperationResponse,
validateSignUserOperationResponse,
validateUpdateUserOperationResponse,
-} from './validation';
+} from './validation.js';
const ADD_USER_OPERATION_REQUEST_MOCK: AddUserOperationRequest = {
data: '0x1',
diff --git a/packages/user-operation-controller/src/utils/validation.ts b/packages/user-operation-controller/src/utils/validation.ts
index 3e06d4b500f..221575f264d 100644
--- a/packages/user-operation-controller/src/utils/validation.ts
+++ b/packages/user-operation-controller/src/utils/validation.ts
@@ -14,16 +14,16 @@ import {
import { TransactionType } from '@metamask/transaction-controller';
import { isStrictHexString } from '@metamask/utils';
-import { EMPTY_BYTES } from '../constants';
+import { EMPTY_BYTES } from '../constants.js';
import type {
PrepareUserOperationResponse,
SignUserOperationResponse,
UpdateUserOperationResponse,
-} from '../types';
+} from '../types.js';
import type {
AddUserOperationOptions,
AddUserOperationRequest,
-} from '../UserOperationController';
+} from '../UserOperationController.js';
/**
* Validate a request to add a user operation.
diff --git a/packages/wallet-cli/jest.config.js b/packages/wallet-cli/jest.config.js
index 568fedaec47..5ff4231948c 100644
--- a/packages/wallet-cli/jest.config.js
+++ b/packages/wallet-cli/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/wallet-cli/package.json b/packages/wallet-cli/package.json
index f782c7f6c3a..6928a98dba3 100644
--- a/packages/wallet-cli/package.json
+++ b/packages/wallet-cli/package.json
@@ -22,6 +22,7 @@
"bin/",
"dist/"
],
+ "type": "module",
"sideEffects": false,
"exports": {
"./package.json": "./package.json"
@@ -31,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"changelog:update": "../../scripts/update-changelog.sh @metamask/wallet-cli",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/wallet-cli",
"lint:tsconfigs": "tsx ../../scripts/lint-tsconfigs/lint-tsconfigs.mts",
@@ -62,7 +63,6 @@
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/better-sqlite3": "^7.6.13",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
diff --git a/packages/wallet-cli/src/commands/daemon/call.test.ts b/packages/wallet-cli/src/commands/daemon/call.test.ts
index c39f933b1a8..45564201b92 100644
--- a/packages/wallet-cli/src/commands/daemon/call.test.ts
+++ b/packages/wallet-cli/src/commands/daemon/call.test.ts
@@ -1,6 +1,6 @@
-import { sendCommand } from '../../daemon/daemon-client';
-import { runCommand } from '../../test/run-command';
-import DaemonCall from './call';
+import { sendCommand } from '../../daemon/daemon-client.js';
+import { runCommand } from '../../test/run-command.js';
+import DaemonCall from './call.js';
jest.mock('../../daemon/daemon-client');
diff --git a/packages/wallet-cli/src/commands/daemon/call.ts b/packages/wallet-cli/src/commands/daemon/call.ts
index 3a4a2a989ce..bf9ad50c22a 100644
--- a/packages/wallet-cli/src/commands/daemon/call.ts
+++ b/packages/wallet-cli/src/commands/daemon/call.ts
@@ -2,12 +2,12 @@ import type { Json } from '@metamask/utils';
import { isJsonRpcFailure } from '@metamask/utils';
import { Args, Command, Flags } from '@oclif/core';
-import { sendCommand } from '../../daemon/daemon-client';
-import { getDaemonPaths } from '../../daemon/paths';
+import { sendCommand } from '../../daemon/daemon-client.js';
+import { getDaemonPaths } from '../../daemon/paths.js';
import {
formatJsonRpcError,
makeDaemonConnectionError,
-} from '../../daemon/utils';
+} from '../../daemon/utils.js';
export default class DaemonCall extends Command {
static override description = 'Call a messenger action on the wallet daemon';
diff --git a/packages/wallet-cli/src/commands/daemon/list.test.ts b/packages/wallet-cli/src/commands/daemon/list.test.ts
index 2a9843c0e2e..9aa0ddc2982 100644
--- a/packages/wallet-cli/src/commands/daemon/list.test.ts
+++ b/packages/wallet-cli/src/commands/daemon/list.test.ts
@@ -1,6 +1,6 @@
-import { sendCommand } from '../../daemon/daemon-client';
-import { runCommand } from '../../test/run-command';
-import DaemonList from './list';
+import { sendCommand } from '../../daemon/daemon-client.js';
+import { runCommand } from '../../test/run-command.js';
+import DaemonList from './list.js';
jest.mock('../../daemon/daemon-client');
diff --git a/packages/wallet-cli/src/commands/daemon/list.ts b/packages/wallet-cli/src/commands/daemon/list.ts
index a4d66bc6458..f54e024dc36 100644
--- a/packages/wallet-cli/src/commands/daemon/list.ts
+++ b/packages/wallet-cli/src/commands/daemon/list.ts
@@ -1,13 +1,13 @@
import { isJsonRpcFailure } from '@metamask/utils';
import { Command } from '@oclif/core';
-import { sendCommand } from '../../daemon/daemon-client';
-import { getDaemonPaths } from '../../daemon/paths';
+import { sendCommand } from '../../daemon/daemon-client.js';
+import { getDaemonPaths } from '../../daemon/paths.js';
import {
formatJsonRpcError,
isStringArray,
makeDaemonConnectionError,
-} from '../../daemon/utils';
+} from '../../daemon/utils.js';
export default class DaemonList extends Command {
static override description =
diff --git a/packages/wallet-cli/src/commands/daemon/purge.test.ts b/packages/wallet-cli/src/commands/daemon/purge.test.ts
index 78c2d39aedf..93e3df8bb72 100644
--- a/packages/wallet-cli/src/commands/daemon/purge.test.ts
+++ b/packages/wallet-cli/src/commands/daemon/purge.test.ts
@@ -1,10 +1,10 @@
import { rm } from 'node:fs/promises';
-import { pingDaemon } from '../../daemon/daemon-client';
-import { confirmPurge } from '../../daemon/prompts';
-import { stopDaemon } from '../../daemon/stop-daemon';
-import { runCommand } from '../../test/run-command';
-import DaemonPurge from './purge';
+import { pingDaemon } from '../../daemon/daemon-client.js';
+import { confirmPurge } from '../../daemon/prompts.js';
+import { stopDaemon } from '../../daemon/stop-daemon.js';
+import { runCommand } from '../../test/run-command.js';
+import DaemonPurge from './purge.js';
jest.mock('node:fs/promises');
jest.mock('../../daemon/daemon-client');
diff --git a/packages/wallet-cli/src/commands/daemon/purge.ts b/packages/wallet-cli/src/commands/daemon/purge.ts
index d3f56d593ae..0fe63dc0a96 100644
--- a/packages/wallet-cli/src/commands/daemon/purge.ts
+++ b/packages/wallet-cli/src/commands/daemon/purge.ts
@@ -1,10 +1,10 @@
import { Command, Flags } from '@oclif/core';
import { rm } from 'node:fs/promises';
-import { pingDaemon } from '../../daemon/daemon-client';
-import { getDaemonPaths } from '../../daemon/paths';
-import { confirmPurge } from '../../daemon/prompts';
-import { stopDaemon } from '../../daemon/stop-daemon';
+import { pingDaemon } from '../../daemon/daemon-client.js';
+import { getDaemonPaths } from '../../daemon/paths.js';
+import { confirmPurge } from '../../daemon/prompts.js';
+import { stopDaemon } from '../../daemon/stop-daemon.js';
export default class DaemonPurge extends Command {
static override description =
diff --git a/packages/wallet-cli/src/commands/daemon/start.test.ts b/packages/wallet-cli/src/commands/daemon/start.test.ts
index 913371b39e3..094332ac158 100644
--- a/packages/wallet-cli/src/commands/daemon/start.test.ts
+++ b/packages/wallet-cli/src/commands/daemon/start.test.ts
@@ -1,6 +1,6 @@
-import { ensureDaemon } from '../../daemon/daemon-spawn';
-import { runCommand } from '../../test/run-command';
-import DaemonStart from './start';
+import { ensureDaemon } from '../../daemon/daemon-spawn.js';
+import { runCommand } from '../../test/run-command.js';
+import DaemonStart from './start.js';
jest.mock('../../daemon/daemon-spawn');
diff --git a/packages/wallet-cli/src/commands/daemon/start.ts b/packages/wallet-cli/src/commands/daemon/start.ts
index 27cad21bd8c..cf7aaee7774 100644
--- a/packages/wallet-cli/src/commands/daemon/start.ts
+++ b/packages/wallet-cli/src/commands/daemon/start.ts
@@ -1,7 +1,7 @@
import { Command, Flags } from '@oclif/core';
-import { ensureDaemon } from '../../daemon/daemon-spawn';
-import { Password, Srp } from '../../daemon/secrets';
+import { ensureDaemon } from '../../daemon/daemon-spawn.js';
+import { Password, Srp } from '../../daemon/secrets.js';
export default class DaemonStart extends Command {
static override description = 'Start the wallet daemon';
diff --git a/packages/wallet-cli/src/commands/daemon/status.test.ts b/packages/wallet-cli/src/commands/daemon/status.test.ts
index c6bf33b47ad..e7585b4baef 100644
--- a/packages/wallet-cli/src/commands/daemon/status.test.ts
+++ b/packages/wallet-cli/src/commands/daemon/status.test.ts
@@ -1,7 +1,7 @@
-import { pingDaemon, sendCommand } from '../../daemon/daemon-client';
-import { isProcessAlive, readPidFile } from '../../daemon/utils';
-import { runCommand } from '../../test/run-command';
-import DaemonStatus from './status';
+import { pingDaemon, sendCommand } from '../../daemon/daemon-client.js';
+import { isProcessAlive, readPidFile } from '../../daemon/utils.js';
+import { runCommand } from '../../test/run-command.js';
+import DaemonStatus from './status.js';
jest.mock('../../daemon/daemon-client');
jest.mock('../../daemon/utils');
diff --git a/packages/wallet-cli/src/commands/daemon/status.ts b/packages/wallet-cli/src/commands/daemon/status.ts
index 24dfb5e68cc..a2c576631ba 100644
--- a/packages/wallet-cli/src/commands/daemon/status.ts
+++ b/packages/wallet-cli/src/commands/daemon/status.ts
@@ -1,10 +1,10 @@
import { isJsonRpcFailure } from '@metamask/utils';
import { Command } from '@oclif/core';
-import { pingDaemon, sendCommand } from '../../daemon/daemon-client';
-import { getDaemonPaths } from '../../daemon/paths';
-import type { DaemonStatusInfo } from '../../daemon/types';
-import { isProcessAlive, readPidFile } from '../../daemon/utils';
+import { pingDaemon, sendCommand } from '../../daemon/daemon-client.js';
+import { getDaemonPaths } from '../../daemon/paths.js';
+import type { DaemonStatusInfo } from '../../daemon/types.js';
+import { isProcessAlive, readPidFile } from '../../daemon/utils.js';
export default class DaemonStatus extends Command {
static override description = 'Check the status of the wallet daemon';
diff --git a/packages/wallet-cli/src/commands/daemon/stop.test.ts b/packages/wallet-cli/src/commands/daemon/stop.test.ts
index b30d7152fa6..ddbf22960c8 100644
--- a/packages/wallet-cli/src/commands/daemon/stop.test.ts
+++ b/packages/wallet-cli/src/commands/daemon/stop.test.ts
@@ -1,8 +1,8 @@
-import { pingDaemon } from '../../daemon/daemon-client';
-import { stopDaemon } from '../../daemon/stop-daemon';
-import { readPidFile } from '../../daemon/utils';
-import { runCommand } from '../../test/run-command';
-import DaemonStop from './stop';
+import { pingDaemon } from '../../daemon/daemon-client.js';
+import { stopDaemon } from '../../daemon/stop-daemon.js';
+import { readPidFile } from '../../daemon/utils.js';
+import { runCommand } from '../../test/run-command.js';
+import DaemonStop from './stop.js';
jest.mock('../../daemon/daemon-client');
jest.mock('../../daemon/stop-daemon');
diff --git a/packages/wallet-cli/src/commands/daemon/stop.ts b/packages/wallet-cli/src/commands/daemon/stop.ts
index 238db803749..1dbdf43ac23 100644
--- a/packages/wallet-cli/src/commands/daemon/stop.ts
+++ b/packages/wallet-cli/src/commands/daemon/stop.ts
@@ -1,9 +1,9 @@
import { Command } from '@oclif/core';
-import { pingDaemon } from '../../daemon/daemon-client';
-import { getDaemonPaths } from '../../daemon/paths';
-import { stopDaemon } from '../../daemon/stop-daemon';
-import { readPidFile } from '../../daemon/utils';
+import { pingDaemon } from '../../daemon/daemon-client.js';
+import { getDaemonPaths } from '../../daemon/paths.js';
+import { stopDaemon } from '../../daemon/stop-daemon.js';
+import { readPidFile } from '../../daemon/utils.js';
export default class DaemonStop extends Command {
static override description = 'Stop the wallet daemon';
diff --git a/packages/wallet-cli/src/commands/wallet/unlock.test.ts b/packages/wallet-cli/src/commands/wallet/unlock.test.ts
index 4a5ad4f2061..4fe1ffaac63 100644
--- a/packages/wallet-cli/src/commands/wallet/unlock.test.ts
+++ b/packages/wallet-cli/src/commands/wallet/unlock.test.ts
@@ -1,7 +1,7 @@
-import { sendCommand } from '../../daemon/daemon-client';
-import { promptPassword } from '../../daemon/prompts';
-import { runCommand } from '../../test/run-command';
-import WalletUnlock from './unlock';
+import { sendCommand } from '../../daemon/daemon-client.js';
+import { promptPassword } from '../../daemon/prompts.js';
+import { runCommand } from '../../test/run-command.js';
+import WalletUnlock from './unlock.js';
jest.mock('../../daemon/daemon-client');
jest.mock('../../daemon/prompts');
diff --git a/packages/wallet-cli/src/commands/wallet/unlock.ts b/packages/wallet-cli/src/commands/wallet/unlock.ts
index b86944758d5..c60b7df6d56 100644
--- a/packages/wallet-cli/src/commands/wallet/unlock.ts
+++ b/packages/wallet-cli/src/commands/wallet/unlock.ts
@@ -1,13 +1,13 @@
import { isJsonRpcFailure } from '@metamask/utils';
import { Command, Flags } from '@oclif/core';
-import { sendCommand } from '../../daemon/daemon-client';
-import { getDaemonPaths } from '../../daemon/paths';
-import { promptPassword } from '../../daemon/prompts';
+import { sendCommand } from '../../daemon/daemon-client.js';
+import { getDaemonPaths } from '../../daemon/paths.js';
+import { promptPassword } from '../../daemon/prompts.js';
import {
emptyToUndefined,
makeDaemonConnectionError,
-} from '../../daemon/utils';
+} from '../../daemon/utils.js';
export default class WalletUnlock extends Command {
static override description =
diff --git a/packages/wallet-cli/src/daemon/daemon-client.test.ts b/packages/wallet-cli/src/daemon/daemon-client.test.ts
index 96cfa33e49c..7aaea3c8a1c 100644
--- a/packages/wallet-cli/src/daemon/daemon-client.test.ts
+++ b/packages/wallet-cli/src/daemon/daemon-client.test.ts
@@ -3,8 +3,8 @@ import { EventEmitter } from 'node:events';
import { createConnection } from 'node:net';
import type { Socket } from 'node:net';
-import { sendCommand, pingDaemon } from './daemon-client';
-import { readLine, writeLine } from './socket-line';
+import { sendCommand, pingDaemon } from './daemon-client.js';
+import { readLine, writeLine } from './socket-line.js';
jest.mock('node:net');
jest.mock('./socket-line');
diff --git a/packages/wallet-cli/src/daemon/daemon-client.ts b/packages/wallet-cli/src/daemon/daemon-client.ts
index f28e3de99b0..a0017b8a875 100644
--- a/packages/wallet-cli/src/daemon/daemon-client.ts
+++ b/packages/wallet-cli/src/daemon/daemon-client.ts
@@ -4,8 +4,8 @@ import { randomUUID } from 'node:crypto';
import { createConnection } from 'node:net';
import type { Socket } from 'node:net';
-import { readLine, writeLine } from './socket-line';
-import { isErrorWithCode } from './utils';
+import { readLine, writeLine } from './socket-line.js';
+import { isErrorWithCode } from './utils.js';
const DEFAULT_TIMEOUT_MS = 30_000;
diff --git a/packages/wallet-cli/src/daemon/daemon-entry.test.ts b/packages/wallet-cli/src/daemon/daemon-entry.test.ts
index a5e3d4224cc..7b86456bc2d 100644
--- a/packages/wallet-cli/src/daemon/daemon-entry.test.ts
+++ b/packages/wallet-cli/src/daemon/daemon-entry.test.ts
@@ -1,13 +1,13 @@
import { validate } from '@metamask/superstruct';
import { appendFile, readFile, rm, writeFile } from 'node:fs/promises';
-import { pingDaemon } from './daemon-client';
-import { ensureOwnerOnlyDirectory } from './data-dir';
-import { getDaemonPaths } from './paths';
-import { startRpcSocketServer } from './rpc-socket-server';
-import type { RpcSocketServerHandle } from './rpc-socket-server';
-import { isProcessAlive } from './utils';
-import { createWallet } from './wallet-factory';
+import { pingDaemon } from './daemon-client.js';
+import { ensureOwnerOnlyDirectory } from './data-dir.js';
+import { getDaemonPaths } from './paths.js';
+import { startRpcSocketServer } from './rpc-socket-server.js';
+import type { RpcSocketServerHandle } from './rpc-socket-server.js';
+import { isProcessAlive } from './utils.js';
+import { createWallet } from './wallet-factory.js';
jest.mock('node:fs/promises');
jest.mock('./data-dir');
@@ -126,7 +126,7 @@ describe('daemon-entry', () => {
*/
async function importDaemonEntry(): Promise {
await jest.isolateModulesAsync(async () => {
- await import('./daemon-entry');
+ await import('./daemon-entry.js');
for (let i = 0; i < 10; i++) {
await new Promise((resolve) => process.nextTick(resolve));
}
diff --git a/packages/wallet-cli/src/daemon/daemon-entry.ts b/packages/wallet-cli/src/daemon/daemon-entry.ts
index 39095f07aea..6d905d511fc 100644
--- a/packages/wallet-cli/src/daemon/daemon-entry.ts
+++ b/packages/wallet-cli/src/daemon/daemon-entry.ts
@@ -3,21 +3,21 @@ import type { Json } from '@metamask/utils';
import type { Wallet } from '@metamask/wallet';
import { appendFile, readFile, rm, writeFile } from 'node:fs/promises';
-import { pingDaemon } from './daemon-client';
-import { ensureOwnerOnlyDirectory } from './data-dir';
-import { getDaemonPaths } from './paths';
-import { startRpcSocketServer } from './rpc-socket-server';
-import type { RpcSocketServerHandle } from './rpc-socket-server';
-import { Password, Srp } from './secrets';
-import { defineHandler } from './types';
+import { pingDaemon } from './daemon-client.js';
+import { ensureOwnerOnlyDirectory } from './data-dir.js';
+import { getDaemonPaths } from './paths.js';
+import { startRpcSocketServer } from './rpc-socket-server.js';
+import type { RpcSocketServerHandle } from './rpc-socket-server.js';
+import { Password, Srp } from './secrets.js';
+import { defineHandler } from './types.js';
import type {
DaemonStatusInfo,
Logger,
RpcDispatcher,
RpcHandlerMap,
-} from './types';
-import { isErrorWithCode, isProcessAlive, readPidFile } from './utils';
-import { createWallet } from './wallet-factory';
+} from './types.js';
+import { isErrorWithCode, isProcessAlive, readPidFile } from './utils.js';
+import { createWallet } from './wallet-factory.js';
/**
* Params struct for the `call` RPC method. `params` must be a non-empty array
diff --git a/packages/wallet-cli/src/daemon/daemon-spawn.test.ts b/packages/wallet-cli/src/daemon/daemon-spawn.test.ts
index 5848e8a2986..3ee81851578 100644
--- a/packages/wallet-cli/src/daemon/daemon-spawn.test.ts
+++ b/packages/wallet-cli/src/daemon/daemon-spawn.test.ts
@@ -2,12 +2,12 @@ import { spawn } from 'node:child_process';
import type { ChildProcess } from 'node:child_process';
import { closeSync, existsSync, openSync } from 'node:fs';
-import { pingDaemon } from './daemon-client';
-import { ensureDaemon } from './daemon-spawn';
-import { ensureOwnerOnlyDirectory } from './data-dir';
-import { getDaemonPaths } from './paths';
-import { Password, Srp } from './secrets';
-import type { DaemonSpawnConfig } from './types';
+import { pingDaemon } from './daemon-client.js';
+import { ensureDaemon } from './daemon-spawn.js';
+import { ensureOwnerOnlyDirectory } from './data-dir.js';
+import { getDaemonPaths } from './paths.js';
+import { Password, Srp } from './secrets.js';
+import type { DaemonSpawnConfig } from './types.js';
jest.mock('node:child_process');
jest.mock('node:fs');
diff --git a/packages/wallet-cli/src/daemon/daemon-spawn.ts b/packages/wallet-cli/src/daemon/daemon-spawn.ts
index e7a5b605313..b2bca342888 100644
--- a/packages/wallet-cli/src/daemon/daemon-spawn.ts
+++ b/packages/wallet-cli/src/daemon/daemon-spawn.ts
@@ -2,10 +2,10 @@ import { spawn } from 'node:child_process';
import { closeSync, existsSync, openSync } from 'node:fs';
import { join } from 'node:path';
-import { pingDaemon } from './daemon-client';
-import { ensureOwnerOnlyDirectory } from './data-dir';
-import { getDaemonPaths } from './paths';
-import type { DaemonSpawnConfig } from './types';
+import { pingDaemon } from './daemon-client.js';
+import { ensureOwnerOnlyDirectory } from './data-dir.js';
+import { getDaemonPaths } from './paths.js';
+import type { DaemonSpawnConfig } from './types.js';
const POLL_INTERVAL_MS = 100;
const MAX_POLLS = 300; // 30 seconds
diff --git a/packages/wallet-cli/src/daemon/data-dir.test.ts b/packages/wallet-cli/src/daemon/data-dir.test.ts
index 1203a9d3948..42b7ba92657 100644
--- a/packages/wallet-cli/src/daemon/data-dir.test.ts
+++ b/packages/wallet-cli/src/daemon/data-dir.test.ts
@@ -1,7 +1,7 @@
import { mkdirSync } from 'node:fs';
import { chmod } from 'node:fs/promises';
-import { ensureOwnerOnlyDirectory } from './data-dir';
+import { ensureOwnerOnlyDirectory } from './data-dir.js';
jest.mock('node:fs');
jest.mock('node:fs/promises');
diff --git a/packages/wallet-cli/src/daemon/paths.test.ts b/packages/wallet-cli/src/daemon/paths.test.ts
index ca127020309..964b95c7f0f 100644
--- a/packages/wallet-cli/src/daemon/paths.test.ts
+++ b/packages/wallet-cli/src/daemon/paths.test.ts
@@ -1,6 +1,6 @@
import { join } from 'node:path';
-import { getDaemonPaths } from './paths';
+import { getDaemonPaths } from './paths.js';
describe('getDaemonPaths', () => {
it('returns correct paths for the given data directory', () => {
diff --git a/packages/wallet-cli/src/daemon/paths.ts b/packages/wallet-cli/src/daemon/paths.ts
index 398b5b30dfb..2d0df229d96 100644
--- a/packages/wallet-cli/src/daemon/paths.ts
+++ b/packages/wallet-cli/src/daemon/paths.ts
@@ -1,6 +1,6 @@
import { join } from 'node:path';
-import type { DaemonPaths } from './types';
+import type { DaemonPaths } from './types.js';
/**
* Resolve paths for daemon state files within the given data directory.
diff --git a/packages/wallet-cli/src/daemon/prompts.test.ts b/packages/wallet-cli/src/daemon/prompts.test.ts
index b5671a0aae8..c113060cb9c 100644
--- a/packages/wallet-cli/src/daemon/prompts.test.ts
+++ b/packages/wallet-cli/src/daemon/prompts.test.ts
@@ -23,7 +23,7 @@ describe('confirmPurge', () => {
const confirm = (await import('@inquirer/confirm'))
.default as unknown as ConfirmMock;
confirm.mockResolvedValue(true);
- const { confirmPurge } = await import('./prompts');
+ const { confirmPurge } = await import('./prompts.js');
const result = await confirmPurge();
@@ -38,7 +38,7 @@ describe('confirmPurge', () => {
const confirm = (await import('@inquirer/confirm'))
.default as unknown as ConfirmMock;
confirm.mockResolvedValue(false);
- const { confirmPurge } = await import('./prompts');
+ const { confirmPurge } = await import('./prompts.js');
expect(await confirmPurge()).toBe(false);
});
@@ -49,7 +49,7 @@ describe('promptPassword', () => {
const password = (await import('@inquirer/password'))
.default as unknown as PasswordMock;
password.mockResolvedValue('hunter2');
- const { promptPassword } = await import('./prompts');
+ const { promptPassword } = await import('./prompts.js');
const result = await promptPassword();
diff --git a/packages/wallet-cli/src/daemon/rpc-socket-server.test.ts b/packages/wallet-cli/src/daemon/rpc-socket-server.test.ts
index aeea4e8d236..336d837138a 100644
--- a/packages/wallet-cli/src/daemon/rpc-socket-server.test.ts
+++ b/packages/wallet-cli/src/daemon/rpc-socket-server.test.ts
@@ -4,8 +4,8 @@ import { chmod, unlink } from 'node:fs/promises';
import { createServer } from 'node:net';
import type { Server, Socket } from 'node:net';
-import { startRpcSocketServer } from './rpc-socket-server';
-import type { RpcHandlerDefinition, RpcHandlerMap } from './types';
+import { startRpcSocketServer } from './rpc-socket-server.js';
+import type { RpcHandlerDefinition, RpcHandlerMap } from './types.js';
// any() paramsStruct so the struct guard never rejects test inputs.
function asHandler(run: jest.Mock): RpcHandlerDefinition {
diff --git a/packages/wallet-cli/src/daemon/rpc-socket-server.ts b/packages/wallet-cli/src/daemon/rpc-socket-server.ts
index a221235e150..096c4d6656c 100644
--- a/packages/wallet-cli/src/daemon/rpc-socket-server.ts
+++ b/packages/wallet-cli/src/daemon/rpc-socket-server.ts
@@ -10,8 +10,8 @@ import { chmod, unlink } from 'node:fs/promises';
import { createServer } from 'node:net';
import type { Server } from 'node:net';
-import type { RpcHandlerMap } from './types';
-import { isErrorWithCode } from './utils';
+import type { RpcHandlerMap } from './types.js';
+import { isErrorWithCode } from './utils.js';
const CONNECTION_TIMEOUT_MS = 30_000;
diff --git a/packages/wallet-cli/src/daemon/secrets.test.ts b/packages/wallet-cli/src/daemon/secrets.test.ts
index b54ea515aa2..cd8e0f29ea6 100644
--- a/packages/wallet-cli/src/daemon/secrets.test.ts
+++ b/packages/wallet-cli/src/daemon/secrets.test.ts
@@ -1,6 +1,6 @@
import { inspect } from 'node:util';
-import { Password, Srp } from './secrets';
+import { Password, Srp } from './secrets.js';
const VALID_SRP_12 =
'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about';
@@ -67,8 +67,7 @@ describe('Password', () => {
});
it('redacts under template-literal interpolation', () => {
- // eslint-disable-next-line @typescript-eslint/restrict-template-expressions -- We are intentionally exercising the redacting toString().
- const message = `password is ${password}`;
+ const message = `password is ${String(password)}`;
expect(message).toBe('password is [redacted]');
expect(message).not.toContain(SECRET);
});
@@ -162,8 +161,7 @@ describe('Srp', () => {
});
it('redacts under template-literal interpolation', () => {
- // eslint-disable-next-line @typescript-eslint/restrict-template-expressions -- We are intentionally exercising the redacting toString().
- const message = `srp is ${srp}`;
+ const message = `srp is ${String(srp)}`;
expect(message).toBe('srp is [redacted]');
expect(message).not.toContain('ball');
});
diff --git a/packages/wallet-cli/src/daemon/socket-line.test.ts b/packages/wallet-cli/src/daemon/socket-line.test.ts
index acb02e4a234..4de790aa08a 100644
--- a/packages/wallet-cli/src/daemon/socket-line.test.ts
+++ b/packages/wallet-cli/src/daemon/socket-line.test.ts
@@ -1,7 +1,7 @@
import { EventEmitter } from 'node:events';
import type { Socket } from 'node:net';
-import { readLine, writeLine } from './socket-line';
+import { readLine, writeLine } from './socket-line.js';
/**
* Create a mock Socket backed by EventEmitter.
diff --git a/packages/wallet-cli/src/daemon/socket.integration.test.ts b/packages/wallet-cli/src/daemon/socket.integration.test.ts
index 98c619f2ded..b41ca964075 100644
--- a/packages/wallet-cli/src/daemon/socket.integration.test.ts
+++ b/packages/wallet-cli/src/daemon/socket.integration.test.ts
@@ -4,10 +4,10 @@ import { createConnection } from 'node:net';
import { tmpdir } from 'node:os';
import { join } from 'node:path';
-import { pingDaemon, sendCommand } from './daemon-client';
-import { startRpcSocketServer } from './rpc-socket-server';
-import type { RpcSocketServerHandle } from './rpc-socket-server';
-import type { RpcHandlerDefinition } from './types';
+import { pingDaemon, sendCommand } from './daemon-client.js';
+import { startRpcSocketServer } from './rpc-socket-server.js';
+import type { RpcSocketServerHandle } from './rpc-socket-server.js';
+import type { RpcHandlerDefinition } from './types.js';
// any() paramsStruct so integration test inputs are never rejected by the struct guard.
function handlerDefinition(
diff --git a/packages/wallet-cli/src/daemon/stop-daemon.test.ts b/packages/wallet-cli/src/daemon/stop-daemon.test.ts
index daaa96cd5cf..eca1b88ebfd 100644
--- a/packages/wallet-cli/src/daemon/stop-daemon.test.ts
+++ b/packages/wallet-cli/src/daemon/stop-daemon.test.ts
@@ -1,8 +1,8 @@
import { rm } from 'node:fs/promises';
-import { pingDaemon, sendCommand } from './daemon-client';
-import { stopDaemon } from './stop-daemon';
-import { isProcessAlive, readPidFile, sendSignal, waitFor } from './utils';
+import { pingDaemon, sendCommand } from './daemon-client.js';
+import { stopDaemon } from './stop-daemon.js';
+import { isProcessAlive, readPidFile, sendSignal, waitFor } from './utils.js';
jest.mock('node:fs/promises');
jest.mock('./daemon-client');
diff --git a/packages/wallet-cli/src/daemon/stop-daemon.ts b/packages/wallet-cli/src/daemon/stop-daemon.ts
index 3ffcdde8392..fac200e7a24 100644
--- a/packages/wallet-cli/src/daemon/stop-daemon.ts
+++ b/packages/wallet-cli/src/daemon/stop-daemon.ts
@@ -1,7 +1,7 @@
import { rm } from 'node:fs/promises';
-import { pingDaemon, sendCommand } from './daemon-client';
-import { isProcessAlive, readPidFile, sendSignal, waitFor } from './utils';
+import { pingDaemon, sendCommand } from './daemon-client.js';
+import { isProcessAlive, readPidFile, sendSignal, waitFor } from './utils.js';
/**
* Stop the daemon, preferring a graceful shutdown.
diff --git a/packages/wallet-cli/src/daemon/types.ts b/packages/wallet-cli/src/daemon/types.ts
index fdf251faa3d..04fce071db1 100644
--- a/packages/wallet-cli/src/daemon/types.ts
+++ b/packages/wallet-cli/src/daemon/types.ts
@@ -1,7 +1,7 @@
import type { Struct } from '@metamask/superstruct';
import type { Json } from '@metamask/utils';
-import type { Password, Srp } from './secrets';
+import type { Password, Srp } from './secrets.js';
/**
* Sink for daemon diagnostic messages. A backgrounded daemon's stdio may be
diff --git a/packages/wallet-cli/src/daemon/utils.test.ts b/packages/wallet-cli/src/daemon/utils.test.ts
index 167f35ae95d..73ab6e429fe 100644
--- a/packages/wallet-cli/src/daemon/utils.test.ts
+++ b/packages/wallet-cli/src/daemon/utils.test.ts
@@ -10,7 +10,7 @@ import {
readPidFile,
sendSignal,
waitFor,
-} from './utils';
+} from './utils.js';
jest.mock('node:fs/promises');
diff --git a/packages/wallet-cli/src/daemon/wallet-factory.integration.test.ts b/packages/wallet-cli/src/daemon/wallet-factory.integration.test.ts
index e5e6624fef0..6223dc66268 100644
--- a/packages/wallet-cli/src/daemon/wallet-factory.integration.test.ts
+++ b/packages/wallet-cli/src/daemon/wallet-factory.integration.test.ts
@@ -2,8 +2,8 @@ import { rmSync } from 'node:fs';
import { tmpdir } from 'node:os';
import { join } from 'node:path';
-import { Password, Srp } from './secrets';
-import { createWallet } from './wallet-factory';
+import { Password, Srp } from './secrets.js';
+import { createWallet } from './wallet-factory.js';
/**
* Real-Wallet integration tests for `createWallet`. Every other suite in this
diff --git a/packages/wallet-cli/src/daemon/wallet-factory.test.ts b/packages/wallet-cli/src/daemon/wallet-factory.test.ts
index 26d58695569..de29cebdd7c 100644
--- a/packages/wallet-cli/src/daemon/wallet-factory.test.ts
+++ b/packages/wallet-cli/src/daemon/wallet-factory.test.ts
@@ -10,10 +10,10 @@ import { rm } from 'node:fs/promises';
import { tmpdir } from 'node:os';
import { join } from 'node:path';
-import { KeyValueStore } from '../persistence/KeyValueStore';
-import * as persistenceModule from '../persistence/persistence';
-import { Password, Srp } from './secrets';
-import { createWallet } from './wallet-factory';
+import { KeyValueStore } from '../persistence/KeyValueStore.js';
+import * as persistenceModule from '../persistence/persistence.js';
+import { Password, Srp } from './secrets.js';
+import { createWallet } from './wallet-factory.js';
jest.mock('@metamask/wallet');
jest.mock('@metamask/remote-feature-flag-controller');
diff --git a/packages/wallet-cli/src/daemon/wallet-factory.ts b/packages/wallet-cli/src/daemon/wallet-factory.ts
index 6ecf2bbe29c..f281c74f230 100644
--- a/packages/wallet-cli/src/daemon/wallet-factory.ts
+++ b/packages/wallet-cli/src/daemon/wallet-factory.ts
@@ -14,10 +14,10 @@ import {
import type { WalletOptions } from '@metamask/wallet';
import { rm } from 'node:fs/promises';
-import { KeyValueStore } from '../persistence/KeyValueStore';
-import { loadState, subscribeToChanges } from '../persistence/persistence';
-import type { Password, Srp } from './secrets';
-import type { Logger } from './types';
+import { KeyValueStore } from '../persistence/KeyValueStore.js';
+import { loadState, subscribeToChanges } from '../persistence/persistence.js';
+import type { Password, Srp } from './secrets.js';
+import type { Logger } from './types.js';
const IN_MEMORY_DATABASE_PATH = ':memory:';
diff --git a/packages/wallet-cli/src/persistence/KeyValueStore.test.ts b/packages/wallet-cli/src/persistence/KeyValueStore.test.ts
index f7c3ad6445d..dcb1f26ee57 100644
--- a/packages/wallet-cli/src/persistence/KeyValueStore.test.ts
+++ b/packages/wallet-cli/src/persistence/KeyValueStore.test.ts
@@ -4,7 +4,7 @@ import { unlink } from 'fs/promises';
import os from 'os';
import path from 'path';
-import { KeyValueStore } from './KeyValueStore';
+import { KeyValueStore } from './KeyValueStore.js';
describe('KeyValueStore', () => {
let store: KeyValueStore;
diff --git a/packages/wallet-cli/src/persistence/persistence.test.ts b/packages/wallet-cli/src/persistence/persistence.test.ts
index 7d26e5520cf..36c9966a95d 100644
--- a/packages/wallet-cli/src/persistence/persistence.test.ts
+++ b/packages/wallet-cli/src/persistence/persistence.test.ts
@@ -6,8 +6,8 @@ import type {
RootMessenger,
} from '@metamask/wallet';
-import { KeyValueStore } from './KeyValueStore';
-import { loadState, subscribeToChanges } from './persistence';
+import { KeyValueStore } from './KeyValueStore.js';
+import { loadState, subscribeToChanges } from './persistence.js';
type TestMessenger = RootMessenger;
diff --git a/packages/wallet-cli/src/persistence/persistence.ts b/packages/wallet-cli/src/persistence/persistence.ts
index cf3c07bf4f7..bd7278bcc2f 100644
--- a/packages/wallet-cli/src/persistence/persistence.ts
+++ b/packages/wallet-cli/src/persistence/persistence.ts
@@ -8,7 +8,7 @@ import type {
} from '@metamask/wallet';
import type { Patch } from 'immer';
-import type { KeyValueStore } from './KeyValueStore';
+import type { KeyValueStore } from './KeyValueStore.js';
/**
* Handler for a controller's `stateChanged` event: the new controller state and
diff --git a/packages/wallet-cli/tests/lifecycle.e2e.test.ts b/packages/wallet-cli/tests/lifecycle.e2e.test.ts
index 14fea688fed..940a43565c4 100644
--- a/packages/wallet-cli/tests/lifecycle.e2e.test.ts
+++ b/packages/wallet-cli/tests/lifecycle.e2e.test.ts
@@ -3,8 +3,8 @@ import { mkdtemp, readFile, rm, stat } from 'node:fs/promises';
import { tmpdir } from 'node:os';
import { join } from 'node:path';
-import { getDaemonPaths } from '../src/daemon/paths';
-import { isProcessAlive, readPidFile } from '../src/daemon/utils';
+import { getDaemonPaths } from '../src/daemon/paths.js';
+import { isProcessAlive, readPidFile } from '../src/daemon/utils.js';
// Subprocess-level lifecycle test for the `mm daemon` command suite. Unlike the
// in-process suites (`socket-integration.test.ts` exercises the transport in
@@ -30,7 +30,7 @@ const TEST_INFURA_PROJECT_ID = '00000000000000000000000000000000';
const ADDRESS_REGEX = /^0x[0-9a-fA-F]{40}$/u;
-const BIN_PATH = join(__dirname, '..', 'bin', 'run.mjs');
+const BIN_PATH = join(import.meta.dirname, '..', 'bin', 'run.mjs');
// Each step (spawn the CLI, construct a real Wallet, run PBKDF2 key derivation
// for the first-run SRP import) is slow; give the whole lifecycle room.
diff --git a/packages/wallet-framework-docs/jest.config.js b/packages/wallet-framework-docs/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/wallet-framework-docs/jest.config.js
+++ b/packages/wallet-framework-docs/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/wallet-framework-docs/package.json b/packages/wallet-framework-docs/package.json
index 6e0908d4296..7444d92a287 100644
--- a/packages/wallet-framework-docs/package.json
+++ b/packages/wallet-framework-docs/package.json
@@ -19,6 +19,7 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
"scripts": {
"build": "docusaurus build site",
diff --git a/packages/wallet/jest.config.js b/packages/wallet/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/packages/wallet/jest.config.js
+++ b/packages/wallet/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/packages/wallet/package.json b/packages/wallet/package.json
index 6cb5d82c89c..155a575a8e8 100644
--- a/packages/wallet/package.json
+++ b/packages/wallet/package.json
@@ -18,19 +18,12 @@
"files": [
"dist/"
],
+ "type": "module",
"sideEffects": false,
- "main": "./dist/index.cjs",
- "types": "./dist/index.d.cts",
"exports": {
".": {
- "import": {
- "types": "./dist/index.d.mts",
- "default": "./dist/index.mjs"
- },
- "require": {
- "types": "./dist/index.d.cts",
- "default": "./dist/index.cjs"
- }
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.js"
},
"./package.json": "./package.json"
},
@@ -39,8 +32,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh @metamask/wallet",
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/wallet",
@@ -73,7 +66,6 @@
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/packages/wallet/src/Wallet.test.ts b/packages/wallet/src/Wallet.test.ts
index 4dc315803b3..7accdb7085b 100644
--- a/packages/wallet/src/Wallet.test.ts
+++ b/packages/wallet/src/Wallet.test.ts
@@ -4,11 +4,11 @@ import { Messenger } from '@metamask/messenger';
import { InMemoryStorageAdapter } from '@metamask/storage-service';
import { Json } from '@metamask/utils';
-import MockEncryptor from '../../keyring-controller/tests/mocks/mockEncryptor';
-import * as initializationModule from './initialization/initialization';
-import { AlwaysOnlineAdapter } from './initialization/instances/connectivity-controller/always-online-adapter';
-import { importSecretRecoveryPhrase } from './utilities';
-import { Wallet } from './Wallet';
+import MockEncryptor from '../../keyring-controller/tests/mocks/mockEncryptor.js';
+import * as initializationModule from './initialization/initialization.js';
+import { AlwaysOnlineAdapter } from './initialization/instances/connectivity-controller/always-online-adapter.js';
+import { importSecretRecoveryPhrase } from './utilities.js';
+import { Wallet } from './Wallet.js';
const TEST_SRP = 'test test test test test test test test test test test ball';
const TEST_PASSWORD = 'testpass';
diff --git a/packages/wallet/src/Wallet.ts b/packages/wallet/src/Wallet.ts
index 01c945570e5..21683f0836e 100644
--- a/packages/wallet/src/Wallet.ts
+++ b/packages/wallet/src/Wallet.ts
@@ -8,9 +8,9 @@ import type {
DefaultInstances,
DefaultState,
RootMessenger,
-} from './initialization/defaults';
-import { initialize } from './initialization/initialization';
-import { WalletOptions } from './types';
+} from './initialization/defaults.js';
+import { initialize } from './initialization/initialization.js';
+import { WalletOptions } from './types.js';
export class Wallet {
// TODO: Expand default types when passing additionalConfigurations.
diff --git a/packages/wallet/src/index.ts b/packages/wallet/src/index.ts
index 337ad6ed7f0..50e9b004160 100644
--- a/packages/wallet/src/index.ts
+++ b/packages/wallet/src/index.ts
@@ -1,11 +1,11 @@
-export { Wallet } from './Wallet';
-export { AlwaysOnlineAdapter } from './initialization/instances/connectivity-controller/always-online-adapter';
-export { importSecretRecoveryPhrase } from './utilities';
-export type { WalletOptions } from './types';
+export { Wallet } from './Wallet.js';
+export { AlwaysOnlineAdapter } from './initialization/instances/connectivity-controller/always-online-adapter.js';
+export { importSecretRecoveryPhrase } from './utilities.js';
+export type { WalletOptions } from './types.js';
export type {
DefaultActions,
DefaultEvents,
DefaultInstances,
DefaultState,
RootMessenger,
-} from './initialization/defaults';
+} from './initialization/defaults.js';
diff --git a/packages/wallet/src/initialization/defaults.ts b/packages/wallet/src/initialization/defaults.ts
index d73ce76536c..92e8d8d4f7b 100644
--- a/packages/wallet/src/initialization/defaults.ts
+++ b/packages/wallet/src/initialization/defaults.ts
@@ -6,8 +6,8 @@ import type {
MessengerEvents,
} from '@metamask/messenger';
-import * as defaultConfigurations from './instances';
-import type { InitializationConfiguration, InstanceState } from './types';
+import * as defaultConfigurations from './instances.js';
+import type { InitializationConfiguration, InstanceState } from './types.js';
export { defaultConfigurations };
diff --git a/packages/wallet/src/initialization/initialization.ts b/packages/wallet/src/initialization/initialization.ts
index 28a7b835f51..9ed426722de 100644
--- a/packages/wallet/src/initialization/initialization.ts
+++ b/packages/wallet/src/initialization/initialization.ts
@@ -1,11 +1,11 @@
-import type { InstanceSpecificOptions, WalletOptions } from '../types';
+import type { InstanceSpecificOptions, WalletOptions } from '../types.js';
import type {
DefaultActions,
DefaultEvents,
DefaultInstances,
-} from './defaults';
-import { defaultConfigurations, RootMessenger } from './defaults';
-import { InitializationConfiguration } from './types';
+} from './defaults.js';
+import { defaultConfigurations, RootMessenger } from './defaults.js';
+import { InitializationConfiguration } from './types.js';
type InitializeOptions = WalletOptions & {
messenger: RootMessenger;
diff --git a/packages/wallet/src/initialization/instances/accounts-controller/accounts-controller.ts b/packages/wallet/src/initialization/instances/accounts-controller/accounts-controller.ts
index 3865c944de5..ec2ea40bb68 100644
--- a/packages/wallet/src/initialization/instances/accounts-controller/accounts-controller.ts
+++ b/packages/wallet/src/initialization/instances/accounts-controller/accounts-controller.ts
@@ -8,8 +8,8 @@ import type {
DefaultActions,
DefaultEvents,
RootMessenger,
-} from '../../defaults';
-import type { InitializationConfiguration } from '../../types';
+} from '../../defaults.js';
+import type { InitializationConfiguration } from '../../types.js';
export const accountsController: InitializationConfiguration<
AccountsController,
diff --git a/packages/wallet/src/initialization/instances/address-book-controller/address-book-controller.test.ts b/packages/wallet/src/initialization/instances/address-book-controller/address-book-controller.test.ts
index 552cafe9547..3a118b95da3 100644
--- a/packages/wallet/src/initialization/instances/address-book-controller/address-book-controller.test.ts
+++ b/packages/wallet/src/initialization/instances/address-book-controller/address-book-controller.test.ts
@@ -4,13 +4,13 @@ import {
} from '@metamask/address-book-controller';
import { Messenger } from '@metamask/messenger';
-import { defaultConfigurations } from '../../defaults';
+import { defaultConfigurations } from '../../defaults.js';
import type {
DefaultActions,
DefaultEvents,
RootMessenger,
-} from '../../defaults';
-import { addressBookController } from './address-book-controller';
+} from '../../defaults.js';
+import { addressBookController } from './address-book-controller.js';
const ADDRESS = '0x1234567890123456789012345678901234567890';
diff --git a/packages/wallet/src/initialization/instances/address-book-controller/address-book-controller.ts b/packages/wallet/src/initialization/instances/address-book-controller/address-book-controller.ts
index eda7ee93433..d21148e659b 100644
--- a/packages/wallet/src/initialization/instances/address-book-controller/address-book-controller.ts
+++ b/packages/wallet/src/initialization/instances/address-book-controller/address-book-controller.ts
@@ -4,7 +4,7 @@ import {
} from '@metamask/address-book-controller';
import { Messenger } from '@metamask/messenger';
-import type { InitializationConfiguration } from '../../types';
+import type { InitializationConfiguration } from '../../types.js';
export const addressBookController: InitializationConfiguration<
AddressBookController,
diff --git a/packages/wallet/src/initialization/instances/approval-controller/approval-controller.test.ts b/packages/wallet/src/initialization/instances/approval-controller/approval-controller.test.ts
index de5a517e696..3d86001580c 100644
--- a/packages/wallet/src/initialization/instances/approval-controller/approval-controller.test.ts
+++ b/packages/wallet/src/initialization/instances/approval-controller/approval-controller.test.ts
@@ -2,13 +2,13 @@ import { ApprovalController } from '@metamask/approval-controller';
import { ApprovalType } from '@metamask/controller-utils';
import { Messenger } from '@metamask/messenger';
-import { defaultConfigurations } from '../../defaults';
+import { defaultConfigurations } from '../../defaults.js';
import type {
DefaultActions,
DefaultEvents,
RootMessenger,
-} from '../../defaults';
-import { approvalController } from './approval-controller';
+} from '../../defaults.js';
+import { approvalController } from './approval-controller.js';
/**
* Creates a root messenger for use in tests.
diff --git a/packages/wallet/src/initialization/instances/approval-controller/approval-controller.ts b/packages/wallet/src/initialization/instances/approval-controller/approval-controller.ts
index 728c0020083..d88456fb357 100644
--- a/packages/wallet/src/initialization/instances/approval-controller/approval-controller.ts
+++ b/packages/wallet/src/initialization/instances/approval-controller/approval-controller.ts
@@ -5,7 +5,7 @@ import {
import { ApprovalType } from '@metamask/controller-utils';
import { Messenger } from '@metamask/messenger';
-import { InitializationConfiguration } from '../../types';
+import { InitializationConfiguration } from '../../types.js';
/**
* Approval types that are exempt from per-origin rate limiting, so more than one
diff --git a/packages/wallet/src/initialization/instances/connectivity-controller/always-online-adapter.test.ts b/packages/wallet/src/initialization/instances/connectivity-controller/always-online-adapter.test.ts
index 417438a541a..4f4c47d33a0 100644
--- a/packages/wallet/src/initialization/instances/connectivity-controller/always-online-adapter.test.ts
+++ b/packages/wallet/src/initialization/instances/connectivity-controller/always-online-adapter.test.ts
@@ -1,6 +1,6 @@
import { CONNECTIVITY_STATUSES } from '@metamask/connectivity-controller';
-import { AlwaysOnlineAdapter } from './always-online-adapter';
+import { AlwaysOnlineAdapter } from './always-online-adapter.js';
describe('AlwaysOnlineAdapter', () => {
it('returns Online from getStatus', async () => {
diff --git a/packages/wallet/src/initialization/instances/connectivity-controller/connectivity-controller.test.ts b/packages/wallet/src/initialization/instances/connectivity-controller/connectivity-controller.test.ts
index 12be2018dd7..caf117a7dd8 100644
--- a/packages/wallet/src/initialization/instances/connectivity-controller/connectivity-controller.test.ts
+++ b/packages/wallet/src/initialization/instances/connectivity-controller/connectivity-controller.test.ts
@@ -5,9 +5,9 @@ import type {
DefaultActions,
DefaultEvents,
RootMessenger,
-} from '../../defaults';
-import { AlwaysOnlineAdapter } from './always-online-adapter';
-import { connectivityController } from './connectivity-controller';
+} from '../../defaults.js';
+import { AlwaysOnlineAdapter } from './always-online-adapter.js';
+import { connectivityController } from './connectivity-controller.js';
describe('connectivityController', () => {
it('reports online status after initialization', () => {
diff --git a/packages/wallet/src/initialization/instances/connectivity-controller/connectivity-controller.ts b/packages/wallet/src/initialization/instances/connectivity-controller/connectivity-controller.ts
index 43f681879ec..f9a4a727d98 100644
--- a/packages/wallet/src/initialization/instances/connectivity-controller/connectivity-controller.ts
+++ b/packages/wallet/src/initialization/instances/connectivity-controller/connectivity-controller.ts
@@ -8,8 +8,8 @@ import type {
DefaultActions,
DefaultEvents,
RootMessenger,
-} from '../../defaults';
-import type { InitializationConfiguration } from '../../types';
+} from '../../defaults.js';
+import type { InitializationConfiguration } from '../../types.js';
export const connectivityController: InitializationConfiguration<
ConnectivityController,
diff --git a/packages/wallet/src/initialization/instances/index.ts b/packages/wallet/src/initialization/instances/index.ts
index a15db956032..624fe8bc567 100644
--- a/packages/wallet/src/initialization/instances/index.ts
+++ b/packages/wallet/src/initialization/instances/index.ts
@@ -1,9 +1,9 @@
-export { accountsController } from './accounts-controller/accounts-controller';
-export { addressBookController } from './address-book-controller/address-book-controller';
-export { approvalController } from './approval-controller/approval-controller';
-export { connectivityController } from './connectivity-controller/connectivity-controller';
-export { keyringController } from './keyring-controller/keyring-controller';
-export { networkController } from './network-controller/network-controller';
-export { remoteFeatureFlagController } from './remote-feature-flag-controller/remote-feature-flag-controller';
-export { storageService } from './storage-service/storage-service';
-export { transactionController } from './transaction-controller/transaction-controller';
+export { accountsController } from './accounts-controller/accounts-controller.js';
+export { addressBookController } from './address-book-controller/address-book-controller.js';
+export { approvalController } from './approval-controller/approval-controller.js';
+export { connectivityController } from './connectivity-controller/connectivity-controller.js';
+export { keyringController } from './keyring-controller/keyring-controller.js';
+export { networkController } from './network-controller/network-controller.js';
+export { remoteFeatureFlagController } from './remote-feature-flag-controller/remote-feature-flag-controller.js';
+export { storageService } from './storage-service/storage-service.js';
+export { transactionController } from './transaction-controller/transaction-controller.js';
diff --git a/packages/wallet/src/initialization/instances/keyring-controller/encryptor.test.ts b/packages/wallet/src/initialization/instances/keyring-controller/encryptor.test.ts
index 618db04b00f..011736efc7c 100644
--- a/packages/wallet/src/initialization/instances/keyring-controller/encryptor.test.ts
+++ b/packages/wallet/src/initialization/instances/keyring-controller/encryptor.test.ts
@@ -1,4 +1,4 @@
-import { encryptorFactory } from './encryptor';
+import { encryptorFactory } from './encryptor.js';
describe('encryptorFactory', () => {
const encryptor = encryptorFactory(600_000);
diff --git a/packages/wallet/src/initialization/instances/keyring-controller/keyring-controller.test.ts b/packages/wallet/src/initialization/instances/keyring-controller/keyring-controller.test.ts
index 1c7be08b5b7..023e0a35cc2 100644
--- a/packages/wallet/src/initialization/instances/keyring-controller/keyring-controller.test.ts
+++ b/packages/wallet/src/initialization/instances/keyring-controller/keyring-controller.test.ts
@@ -4,7 +4,7 @@ import type {
KeyringControllerOptions,
} from '@metamask/keyring-controller';
-import { keyringController } from './keyring-controller';
+import { keyringController } from './keyring-controller.js';
jest.mock('@metamask/keyring-controller', () => ({
...jest.requireActual('@metamask/keyring-controller'),
diff --git a/packages/wallet/src/initialization/instances/keyring-controller/keyring-controller.ts b/packages/wallet/src/initialization/instances/keyring-controller/keyring-controller.ts
index 88eedcc4452..fa6cc7c9db8 100644
--- a/packages/wallet/src/initialization/instances/keyring-controller/keyring-controller.ts
+++ b/packages/wallet/src/initialization/instances/keyring-controller/keyring-controller.ts
@@ -6,8 +6,8 @@ import {
} from '@metamask/keyring-controller';
import { Messenger } from '@metamask/messenger';
-import { InitializationConfiguration } from '../../types';
-import { encryptorFactory } from './encryptor';
+import { InitializationConfiguration } from '../../types.js';
+import { encryptorFactory } from './encryptor.js';
export const keyringController: InitializationConfiguration<
KeyringController,
diff --git a/packages/wallet/src/initialization/instances/keyring-controller/types.ts b/packages/wallet/src/initialization/instances/keyring-controller/types.ts
index dc582af58c5..48db114cd44 100644
--- a/packages/wallet/src/initialization/instances/keyring-controller/types.ts
+++ b/packages/wallet/src/initialization/instances/keyring-controller/types.ts
@@ -1,6 +1,6 @@
import type { KeyringControllerOptions } from '@metamask/keyring-controller';
-import type { GenericEncryptor } from './encryptor';
+import type { GenericEncryptor } from './encryptor.js';
/**
* Per-instance options for the wallet's `KeyringController`. All fields are
diff --git a/packages/wallet/src/initialization/instances/network-controller/network-controller.ts b/packages/wallet/src/initialization/instances/network-controller/network-controller.ts
index f48f37fed3f..edde8e53ccd 100644
--- a/packages/wallet/src/initialization/instances/network-controller/network-controller.ts
+++ b/packages/wallet/src/initialization/instances/network-controller/network-controller.ts
@@ -4,7 +4,7 @@ import {
NetworkControllerMessenger,
} from '@metamask/network-controller';
-import { InitializationConfiguration } from '../../types';
+import { InitializationConfiguration } from '../../types.js';
export const networkController: InitializationConfiguration<
NetworkController,
diff --git a/packages/wallet/src/initialization/instances/remote-feature-flag-controller/remote-feature-flag-controller.test.ts b/packages/wallet/src/initialization/instances/remote-feature-flag-controller/remote-feature-flag-controller.test.ts
index 5939977fa8c..5eece7d554a 100644
--- a/packages/wallet/src/initialization/instances/remote-feature-flag-controller/remote-feature-flag-controller.test.ts
+++ b/packages/wallet/src/initialization/instances/remote-feature-flag-controller/remote-feature-flag-controller.test.ts
@@ -1,13 +1,13 @@
import { Messenger } from '@metamask/messenger';
import { RemoteFeatureFlagController } from '@metamask/remote-feature-flag-controller';
-import { defaultConfigurations } from '../../defaults';
+import { defaultConfigurations } from '../../defaults.js';
import type {
DefaultActions,
DefaultEvents,
RootMessenger,
-} from '../../defaults';
-import { remoteFeatureFlagController } from './remote-feature-flag-controller';
+} from '../../defaults.js';
+import { remoteFeatureFlagController } from './remote-feature-flag-controller.js';
/**
* Creates a root messenger for use in tests.
diff --git a/packages/wallet/src/initialization/instances/remote-feature-flag-controller/remote-feature-flag-controller.ts b/packages/wallet/src/initialization/instances/remote-feature-flag-controller/remote-feature-flag-controller.ts
index 5f155deb023..35e7486ea9e 100644
--- a/packages/wallet/src/initialization/instances/remote-feature-flag-controller/remote-feature-flag-controller.ts
+++ b/packages/wallet/src/initialization/instances/remote-feature-flag-controller/remote-feature-flag-controller.ts
@@ -4,7 +4,7 @@ import {
RemoteFeatureFlagControllerMessenger,
} from '@metamask/remote-feature-flag-controller';
-import { InitializationConfiguration } from '../../types';
+import { InitializationConfiguration } from '../../types.js';
export const remoteFeatureFlagController: InitializationConfiguration<
RemoteFeatureFlagController,
diff --git a/packages/wallet/src/initialization/instances/storage-service/storage-service.ts b/packages/wallet/src/initialization/instances/storage-service/storage-service.ts
index c20595d54f4..98dfbcc5e2e 100644
--- a/packages/wallet/src/initialization/instances/storage-service/storage-service.ts
+++ b/packages/wallet/src/initialization/instances/storage-service/storage-service.ts
@@ -2,7 +2,7 @@ import { Messenger } from '@metamask/messenger';
import { StorageService } from '@metamask/storage-service';
import { StorageServiceMessenger } from '@metamask/storage-service';
-import { InitializationConfiguration } from '../../types';
+import { InitializationConfiguration } from '../../types.js';
export const storageService: InitializationConfiguration<
StorageService,
diff --git a/packages/wallet/src/initialization/instances/transaction-controller/transaction-controller.test.ts b/packages/wallet/src/initialization/instances/transaction-controller/transaction-controller.test.ts
index 1e88b0e52d2..4870eca7c18 100644
--- a/packages/wallet/src/initialization/instances/transaction-controller/transaction-controller.test.ts
+++ b/packages/wallet/src/initialization/instances/transaction-controller/transaction-controller.test.ts
@@ -2,16 +2,16 @@ import { Messenger } from '@metamask/messenger';
import { InMemoryStorageAdapter } from '@metamask/storage-service';
import { TransactionController } from '@metamask/transaction-controller';
-import type { WalletOptions } from '../../../types';
-import { Wallet } from '../../../Wallet';
-import { defaultConfigurations } from '../../defaults';
+import type { WalletOptions } from '../../../types.js';
+import { Wallet } from '../../../Wallet.js';
+import { defaultConfigurations } from '../../defaults.js';
import type {
DefaultActions,
DefaultEvents,
RootMessenger,
-} from '../../defaults';
-import { AlwaysOnlineAdapter } from '../connectivity-controller/always-online-adapter';
-import { transactionController } from './transaction-controller';
+} from '../../defaults.js';
+import { AlwaysOnlineAdapter } from '../connectivity-controller/always-online-adapter.js';
+import { transactionController } from './transaction-controller.js';
const controllers: TransactionController[] = [];
const wallets: Wallet[] = [];
diff --git a/packages/wallet/src/initialization/instances/transaction-controller/transaction-controller.ts b/packages/wallet/src/initialization/instances/transaction-controller/transaction-controller.ts
index 6ee57a27e60..65eeb232fef 100644
--- a/packages/wallet/src/initialization/instances/transaction-controller/transaction-controller.ts
+++ b/packages/wallet/src/initialization/instances/transaction-controller/transaction-controller.ts
@@ -2,9 +2,9 @@ import { Messenger } from '@metamask/messenger';
import type { TransactionControllerMessenger } from '@metamask/transaction-controller';
import { TransactionController } from '@metamask/transaction-controller';
-import type { InitializationConfiguration } from '../../types';
+import type { InitializationConfiguration } from '../../types.js';
-export type { TransactionControllerInstanceOptions } from './types';
+export type { TransactionControllerInstanceOptions } from './types.js';
export const transactionController: InitializationConfiguration<
TransactionController,
diff --git a/packages/wallet/src/initialization/types.ts b/packages/wallet/src/initialization/types.ts
index 1e7e51602b3..891b653c6df 100644
--- a/packages/wallet/src/initialization/types.ts
+++ b/packages/wallet/src/initialization/types.ts
@@ -1,5 +1,9 @@
-import type { InstanceSpecificOptions } from '../types';
-import type { DefaultActions, DefaultEvents, RootMessenger } from './defaults';
+import type { InstanceSpecificOptions } from '../types.js';
+import type {
+ DefaultActions,
+ DefaultEvents,
+ RootMessenger,
+} from './defaults.js';
/**
* Utility type for inferring the state of an instance.
diff --git a/packages/wallet/src/types.ts b/packages/wallet/src/types.ts
index 1f330e9bafd..8912d490bea 100644
--- a/packages/wallet/src/types.ts
+++ b/packages/wallet/src/types.ts
@@ -4,15 +4,15 @@ import type {
DefaultActions,
DefaultEvents,
RootMessenger,
-} from './initialization/defaults';
-import type { ApprovalControllerInstanceOptions } from './initialization/instances/approval-controller/types';
-import type { ConnectivityControllerInstanceOptions } from './initialization/instances/connectivity-controller/types';
-import type { KeyringControllerInstanceOptions } from './initialization/instances/keyring-controller/types';
-import type { NetworkControllerInstanceOptions } from './initialization/instances/network-controller/types';
-import type { RemoteFeatureFlagControllerInstanceOptions } from './initialization/instances/remote-feature-flag-controller/types';
-import type { StorageServiceInstanceOptions } from './initialization/instances/storage-service/types';
-import type { TransactionControllerInstanceOptions } from './initialization/instances/transaction-controller/types';
-import type { InitializationConfiguration } from './initialization/types';
+} from './initialization/defaults.js';
+import type { ApprovalControllerInstanceOptions } from './initialization/instances/approval-controller/types.js';
+import type { ConnectivityControllerInstanceOptions } from './initialization/instances/connectivity-controller/types.js';
+import type { KeyringControllerInstanceOptions } from './initialization/instances/keyring-controller/types.js';
+import type { NetworkControllerInstanceOptions } from './initialization/instances/network-controller/types.js';
+import type { RemoteFeatureFlagControllerInstanceOptions } from './initialization/instances/remote-feature-flag-controller/types.js';
+import type { StorageServiceInstanceOptions } from './initialization/instances/storage-service/types.js';
+import type { TransactionControllerInstanceOptions } from './initialization/instances/transaction-controller/types.js';
+import type { InitializationConfiguration } from './initialization/types.js';
export type WalletOptions = {
messenger?: RootMessenger;
diff --git a/packages/wallet/src/utilities.ts b/packages/wallet/src/utilities.ts
index 4630dd5460c..360d73f2bc2 100644
--- a/packages/wallet/src/utilities.ts
+++ b/packages/wallet/src/utilities.ts
@@ -1,6 +1,6 @@
import { wordlist } from '@metamask/scure-bip39/dist/wordlists/english';
-import { Wallet } from './Wallet';
+import { Wallet } from './Wallet.js';
/**
* Import a secret recovery phrase using the wallet object.
diff --git a/scripts/create-package/cli.test.ts b/scripts/create-package/cli.test.ts
index 330f9838ded..08e6cce80eb 100644
--- a/scripts/create-package/cli.test.ts
+++ b/scripts/create-package/cli.test.ts
@@ -1,6 +1,6 @@
-import cli from './cli';
-import { commands, commandMap } from './commands';
-import * as utils from './utils';
+import cli from './cli.js';
+import { commands, commandMap } from './commands.js';
+import * as utils from './utils.js';
jest.mock('./utils');
diff --git a/scripts/create-package/cli.ts b/scripts/create-package/cli.ts
index e077ad9af0d..b8bb488d5fb 100644
--- a/scripts/create-package/cli.ts
+++ b/scripts/create-package/cli.ts
@@ -1,6 +1,6 @@
import yargs from 'yargs';
-import type { CommandModule } from './commands';
+import type { CommandModule } from './commands.js';
/**
* The entry point of `create-package`, a yargs application for creating new
diff --git a/scripts/create-package/commands.test.ts b/scripts/create-package/commands.test.ts
index cb6889d834c..4e51bf7ec46 100644
--- a/scripts/create-package/commands.test.ts
+++ b/scripts/create-package/commands.test.ts
@@ -1,8 +1,8 @@
import type { Arguments } from 'yargs';
-import type { CreatePackageOptions } from './commands';
-import { createPackageHandler } from './commands';
-import * as utils from './utils';
+import type { CreatePackageOptions } from './commands.js';
+import { createPackageHandler } from './commands.js';
+import * as utils from './utils.js';
jest.mock('./utils', () => ({
finalizeAndWriteData: jest.fn(),
diff --git a/scripts/create-package/commands.ts b/scripts/create-package/commands.ts
index 662d369ca0d..3c64c38729d 100644
--- a/scripts/create-package/commands.ts
+++ b/scripts/create-package/commands.ts
@@ -4,8 +4,8 @@ import type {
Arguments,
} from 'yargs';
-import type { PackageData } from './utils';
-import { finalizeAndWriteData, readMonorepoFiles } from './utils';
+import type { PackageData } from './utils.js';
+import { finalizeAndWriteData, readMonorepoFiles } from './utils.js';
export type CreatePackageOptions = {
name: string;
diff --git a/scripts/create-package/fs-utils.test.ts b/scripts/create-package/fs-utils.test.ts
index e65574a1f2b..436e8be40f0 100644
--- a/scripts/create-package/fs-utils.test.ts
+++ b/scripts/create-package/fs-utils.test.ts
@@ -2,7 +2,7 @@ import { createSandbox, writeFile, readFile } from '@metamask/utils/node';
import { promises as fs } from 'fs';
import path from 'path';
-import { readAllFiles, writeFiles } from './fs-utils';
+import { readAllFiles, writeFiles } from './fs-utils.js';
const { withinSandbox } = createSandbox('create-package/fs-utils');
diff --git a/scripts/create-package/index.test.ts b/scripts/create-package/index.test.ts
index 3a6c6af7d27..39436aea78c 100644
--- a/scripts/create-package/index.test.ts
+++ b/scripts/create-package/index.test.ts
@@ -1,5 +1,5 @@
-import cli from './cli';
-import { commands } from './commands';
+import cli from './cli.js';
+import { commands } from './commands.js';
jest.mock('./cli');
diff --git a/scripts/create-package/index.ts b/scripts/create-package/index.ts
index 55c35cab738..2fbd2be0206 100644
--- a/scripts/create-package/index.ts
+++ b/scripts/create-package/index.ts
@@ -2,8 +2,8 @@
* Entry point file for the `create-package` CLI.
*/
-import cli from './cli';
-import { commands } from './commands';
+import cli from './cli.js';
+import { commands } from './commands.js';
cli(process.argv, commands).catch((error) => {
console.error(error);
diff --git a/scripts/create-package/package-template/jest.config.js b/scripts/create-package/package-template/jest.config.js
index ca084133399..6c85ca6e1fb 100644
--- a/scripts/create-package/package-template/jest.config.js
+++ b/scripts/create-package/package-template/jest.config.js
@@ -3,14 +3,14 @@
* https://jestjs.io/docs/configuration
*/
-const merge = require('deepmerge');
-const path = require('path');
+import merge from 'deepmerge';
+import path from 'path';
-const baseConfig = require('../../jest.config.packages');
+import baseConfig from '../../jest.config.packages.js';
-const displayName = path.basename(__dirname);
+const displayName = path.basename(import.meta.dirname);
-module.exports = merge(baseConfig, {
+export default merge(baseConfig, {
// The display name when running multiple projects
displayName,
diff --git a/scripts/create-package/package-template/package.json b/scripts/create-package/package-template/package.json
index 6093ba3b9e8..1ba6a6746ba 100644
--- a/scripts/create-package/package-template/package.json
+++ b/scripts/create-package/package-template/package.json
@@ -39,8 +39,8 @@
"registry": "https://registry.npmjs.org/"
},
"scripts": {
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
+ "build": "tsc --project tsconfig.build.json",
+ "build:all": "tsc --build tsconfig.build.json --verbose",
"build:docs": "typedoc",
"changelog:update": "../../scripts/update-changelog.sh PACKAGE_NAME",
"changelog:validate": "../../scripts/validate-changelog.sh PACKAGE_NAME",
@@ -54,7 +54,6 @@
},
"devDependencies": {
"@metamask/auto-changelog": "^6.1.0",
- "@ts-bridge/cli": "^0.6.4",
"@types/jest": "^29.5.14",
"deepmerge": "^4.2.2",
"jest": "^29.7.0",
diff --git a/scripts/create-package/utils.test.ts b/scripts/create-package/utils.test.ts
index ad8c264f046..c48b8a308b7 100644
--- a/scripts/create-package/utils.test.ts
+++ b/scripts/create-package/utils.test.ts
@@ -4,10 +4,10 @@ import fs from 'fs';
import path from 'path';
import { format } from 'prettier';
-import { MonorepoFiles } from './constants';
-import * as fsUtils from './fs-utils';
-import type { PackageData } from './utils';
-import { finalizeAndWriteData, readMonorepoFiles } from './utils';
+import { MonorepoFiles } from './constants.js';
+import * as fsUtils from './fs-utils.js';
+import type { PackageData } from './utils.js';
+import { finalizeAndWriteData, readMonorepoFiles } from './utils.js';
jest.mock('fs', () => ({
existsSync: jest.fn(),
diff --git a/scripts/create-package/utils.ts b/scripts/create-package/utils.ts
index eea75955a54..2f7f4410fc9 100644
--- a/scripts/create-package/utils.ts
+++ b/scripts/create-package/utils.ts
@@ -5,12 +5,12 @@ import path from 'path';
import { format as prettierFormat } from 'prettier';
import type { Options as PrettierOptions } from 'prettier';
-import { MonorepoFiles, Placeholders } from './constants';
-import type { FileMap } from './fs-utils';
-import { readAllFiles, writeFiles } from './fs-utils';
+import { MonorepoFiles, Placeholders } from './constants.js';
+import type { FileMap } from './fs-utils.js';
+import { readAllFiles, writeFiles } from './fs-utils.js';
-const PACKAGE_TEMPLATE_DIR = path.join(__dirname, 'package-template');
-const REPO_ROOT = path.join(__dirname, '..', '..');
+const PACKAGE_TEMPLATE_DIR = path.join(import.meta.dirname, 'package-template');
+const REPO_ROOT = path.join(import.meta.dirname, '..', '..');
const REPO_TS_CONFIG = path.join(REPO_ROOT, MonorepoFiles.TsConfig);
const REPO_TS_CONFIG_BUILD = path.join(REPO_ROOT, MonorepoFiles.TsConfigBuild);
const REPO_PACKAGE_JSON = path.join(REPO_ROOT, MonorepoFiles.PackageJson);
diff --git a/scripts/lint-teams-json.ts b/scripts/lint-teams-json.ts
index 3a066ca5f2f..0611c3d7d92 100644
--- a/scripts/lint-teams-json.ts
+++ b/scripts/lint-teams-json.ts
@@ -29,7 +29,7 @@ async function main(): Promise {
});
const teams = await readJsonFile>(
- path.resolve(__dirname, '../teams.json'),
+ path.resolve(import.meta.dirname, '../teams.json'),
);
const assignedPackageNames = Object.keys(teams);
diff --git a/scripts/update-readme-content.ts b/scripts/update-readme-content.ts
index 69f9945ab9d..13f1e109737 100755
--- a/scripts/update-readme-content.ts
+++ b/scripts/update-readme-content.ts
@@ -15,7 +15,7 @@ const DEPENDENCY_GRAPH_START_MARKER = '';
const DEPENDENCY_GRAPH_END_MARKER = '';
const PACKAGE_LIST_START_MARKER = '';
const PACKAGE_LIST_END_MARKER = '';
-const README_PATH = path.resolve(__dirname, '../README.md');
+const README_PATH = path.resolve(import.meta.dirname, '../README.md');
main().catch((error) => {
console.error(error);
diff --git a/tests/mock-network.ts b/tests/mock-network.ts
index 2d0f32b9110..2479ff98a1b 100644
--- a/tests/mock-network.ts
+++ b/tests/mock-network.ts
@@ -1,8 +1,8 @@
import type { JsonRpcRequest, JsonRpcResponse } from '@metamask/utils';
import nock from 'nock';
-import type { NetworkClientConfiguration } from '../packages/network-controller/src/types';
-import { NetworkClientType } from '../packages/network-controller/src/types';
+import type { NetworkClientConfiguration } from '../packages/network-controller/src/types.js';
+import { NetworkClientType } from '../packages/network-controller/src/types.js';
/**
* An object which instructs the MockedNetwork class which JSON-RPC request
diff --git a/tests/setup.ts b/tests/setup.ts
index b9508687d77..6f0fa61050f 100644
--- a/tests/setup.ts
+++ b/tests/setup.ts
@@ -8,7 +8,7 @@ delete globalThis.Headers;
delete globalThis.Request;
// @ts-expect-error - Clear Response to ensure isomorphic-fetch sets up node-fetch version
delete globalThis.Response;
-// We need to import this *after* we delete `fetch` etc. above.
-// Additionally, this import is used for side effects only.
-// eslint-disable-next-line import-x/first, import-x/no-unassigned-import
-import 'isomorphic-fetch';
+// Dynamic import so this runs *after* the deletes above (static imports are hoisted in ESM).
+await import('isomorphic-fetch');
+
+export {};
diff --git a/tests/setupAfterEnv/index.ts b/tests/setupAfterEnv/index.ts
index b92d66804c4..04ea22faa6f 100644
--- a/tests/setupAfterEnv/index.ts
+++ b/tests/setupAfterEnv/index.ts
@@ -1,5 +1,5 @@
// These imports are for side effects only.
/* eslint-disable import-x/no-unassigned-import */
-import './matchers';
-import './nock';
+import './matchers.js';
+import './nock.js';
/* eslint-enable import-x/no-unassigned-import */
diff --git a/tests/setupAfterEnv/nock.ts b/tests/setupAfterEnv/nock.ts
index 1e6d0377367..c70258b29c4 100644
--- a/tests/setupAfterEnv/nock.ts
+++ b/tests/setupAfterEnv/nock.ts
@@ -1,10 +1,13 @@
-import { disableNetConnect, cleanAll, enableNetConnect } from 'nock';
+// Types for `nock` are wrong.
+/* eslint-disable import-x/no-named-as-default-member */
+
+import nock from 'nock';
beforeEach(() => {
- disableNetConnect();
+ nock.disableNetConnect();
});
afterEach(() => {
- cleanAll();
- enableNetConnect();
+ nock.cleanAll();
+ nock.enableNetConnect();
});
diff --git a/tsconfig.packages.build.json b/tsconfig.packages.build.json
index e971538b76e..8bdb779bcef 100644
--- a/tsconfig.packages.build.json
+++ b/tsconfig.packages.build.json
@@ -6,7 +6,6 @@
"compilerOptions": {
"declaration": true,
"declarationMap": true,
- "emitDeclarationOnly": true,
"inlineSources": true,
"sourceMap": true,
"skipLibCheck": true
diff --git a/yarn.config.cjs b/yarn.config.cjs
index 453d202265f..ce4afd397ac 100644
--- a/yarn.config.cjs
+++ b/yarn.config.cjs
@@ -83,6 +83,9 @@ module.exports = defineConfig({
// All packages must have a name.
expectWorkspaceField(workspace, 'name');
+ // All workspaces must specify "type: module".
+ expectWorkspaceField(workspace, 'type', 'module');
+
if (isChildWorkspace) {
// All non-root packages must have a name that matches its directory
// (e.g., a package in a workspace directory called `foo` must be called
@@ -138,21 +141,21 @@ module.exports = defineConfig({
}
// All non-root packages must have a "build" script. All packages that
- // do not exclusively deploy documentation sites must use `ts-bridge`.
+ // do not exclusively deploy documentation sites must use `tsc`.
if (DOCSITE_PACKAGES.includes(workspace.ident)) {
expectWorkspaceField(workspace, 'scripts.build');
} else {
expectWorkspaceField(
workspace,
'scripts.build',
- 'ts-bridge --project tsconfig.build.json --verbose --clean --no-references',
+ 'tsc --project tsconfig.build.json',
);
// All non-root packages must have the same "build:all" script.
expectWorkspaceField(
workspace,
'scripts.build:all',
- 'ts-bridge --project tsconfig.build.json --verbose --clean',
+ 'tsc --build tsconfig.build.json --verbose',
);
}
@@ -572,35 +575,16 @@ async function expectWorkspaceLicense(workspace) {
function expectCorrectWorkspaceExports(workspace) {
// All non-root packages must provide the location of the ESM-compatible
// JavaScript entrypoint and its matching type declaration file.
- expectWorkspaceField(
- workspace,
- 'exports["."].import.types',
- './dist/index.d.mts',
- );
- expectWorkspaceField(
- workspace,
- 'exports["."].import.default',
- './dist/index.mjs',
- );
+ expectWorkspaceField(workspace, 'exports["."].types', './dist/index.d.ts');
+ expectWorkspaceField(workspace, 'exports["."].import', './dist/index.js');
- // All non-root package must provide the location of the CommonJS-compatible
- // entrypoint and its matching type declaration file.
- expectWorkspaceField(
- workspace,
- 'exports["."].require.types',
- './dist/index.d.cts',
- );
- expectWorkspaceField(
- workspace,
- 'exports["."].require.default',
- './dist/index.cjs',
- );
- expectWorkspaceField(workspace, 'main', './dist/index.cjs');
- expectWorkspaceField(workspace, 'types', './dist/index.d.cts');
+ // Packages should not provide separate CommonJS/ESM exports.
+ expectWorkspaceField(workspace, 'exports["."].require', null);
+ expectWorkspaceField(workspace, 'exports["."].default', null);
- // Types should not be set in the export object directly, but rather in the
- // `import` and `require` subfields.
- expectWorkspaceField(workspace, 'exports["."].types', null);
+ // Packages should not provide a "main" or "types" field.
+ expectWorkspaceField(workspace, 'main', null);
+ expectWorkspaceField(workspace, 'types', null);
// All non-root packages must export a `package.json` file.
expectWorkspaceField(
@@ -608,6 +592,36 @@ function expectCorrectWorkspaceExports(workspace) {
'exports["./package.json"]',
'./package.json',
);
+
+ const nonRootExports = Object.keys(workspace.manifest.exports).filter(
+ (key) => key !== '.' && key !== './package.json',
+ );
+
+ for (const key of nonRootExports) {
+ const prefix = `exports["${key}"]`;
+ expectWorkspaceField(workspace, `${prefix}.types`);
+ expectWorkspaceField(workspace, `${prefix}.import`);
+
+ const typesValue = get(workspace.manifest, `${prefix}.types`);
+ if (
+ typesValue &&
+ (typeof typesValue !== 'string' || !typesValue.endsWith('.d.ts'))
+ ) {
+ workspace.error(
+ `Expected package's "${prefix}.types" field to end with ".d.ts", but it was "${typesValue}".`,
+ );
+ }
+
+ const importValue = get(workspace.manifest, `${prefix}.import`);
+ if (
+ importValue &&
+ (typeof importValue !== 'string' || !importValue.endsWith('.js'))
+ ) {
+ workspace.error(
+ `Expected package's "${prefix}.import" field to end with ".js", but it was "${importValue}".`,
+ );
+ }
+ }
}
/**
diff --git a/yarn.lock b/yarn.lock
index d8fca6b2606..451f57f699d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -242,7 +242,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.29.7":
+"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.27.1, @babel/code-frame@npm:^7.29.7":
version: 7.29.7
resolution: "@babel/code-frame@npm:7.29.7"
dependencies:
@@ -260,7 +260,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.21.3, @babel/core@npm:^7.23.2, @babel/core@npm:^7.23.9, @babel/core@npm:^7.25.9":
+"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.21.3, @babel/core@npm:^7.23.2, @babel/core@npm:^7.23.9, @babel/core@npm:^7.25.9, @babel/core@npm:^7.27.4":
version: 7.29.7
resolution: "@babel/core@npm:7.29.7"
dependencies:
@@ -283,7 +283,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/generator@npm:^7.25.9, @babel/generator@npm:^7.29.7, @babel/generator@npm:^7.7.2":
+"@babel/generator@npm:^7.25.9, @babel/generator@npm:^7.27.5, @babel/generator@npm:^7.29.7, @babel/generator@npm:^7.7.2":
version: 7.29.7
resolution: "@babel/generator@npm:7.29.7"
dependencies:
@@ -687,7 +687,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-syntax-jsx@npm:^7.29.7, @babel/plugin-syntax-jsx@npm:^7.7.2":
+"@babel/plugin-syntax-jsx@npm:^7.27.1, @babel/plugin-syntax-jsx@npm:^7.29.7, @babel/plugin-syntax-jsx@npm:^7.7.2":
version: 7.29.7
resolution: "@babel/plugin-syntax-jsx@npm:7.29.7"
dependencies:
@@ -786,7 +786,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-syntax-typescript@npm:^7.29.7, @babel/plugin-syntax-typescript@npm:^7.7.2":
+"@babel/plugin-syntax-typescript@npm:^7.27.1, @babel/plugin-syntax-typescript@npm:^7.29.7, @babel/plugin-syntax-typescript@npm:^7.7.2":
version: 7.29.7
resolution: "@babel/plugin-syntax-typescript@npm:7.29.7"
dependencies:
@@ -1659,7 +1659,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.3, @babel/types@npm:^7.23.0, @babel/types@npm:^7.28.2, @babel/types@npm:^7.29.7, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4":
+"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.3, @babel/types@npm:^7.23.0, @babel/types@npm:^7.27.3, @babel/types@npm:^7.28.2, @babel/types@npm:^7.29.7, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4":
version: 7.29.7
resolution: "@babel/types@npm:7.29.7"
dependencies:
@@ -4756,6 +4756,25 @@ __metadata:
languageName: node
linkType: hard
+"@jest/diff-sequences@npm:30.4.0":
+ version: 30.4.0
+ resolution: "@jest/diff-sequences@npm:30.4.0"
+ checksum: 10/65c27937c10a7157899dad5d176806104286f9d55464f318955a0cee98db8aed6b8f70ad4aee7133468087146422cdd391d49b1e101ec543db3283ee4eb59c06
+ languageName: node
+ linkType: hard
+
+"@jest/environment@npm:30.4.1":
+ version: 30.4.1
+ resolution: "@jest/environment@npm:30.4.1"
+ dependencies:
+ "@jest/fake-timers": "npm:30.4.1"
+ "@jest/types": "npm:30.4.1"
+ "@types/node": "npm:*"
+ jest-mock: "npm:30.4.1"
+ checksum: 10/c25946fee29604f5aa24ea059bc3cc7bc4c8cdaf26db1ed6ffa4f28e37f5193cc4e868650c807d89caff4123e44d07b58200d4cb5960ebdb7d66531509d76359
+ languageName: node
+ linkType: hard
+
"@jest/environment@npm:^29.7.0":
version: 29.7.0
resolution: "@jest/environment@npm:29.7.0"
@@ -4768,6 +4787,15 @@ __metadata:
languageName: node
linkType: hard
+"@jest/expect-utils@npm:30.4.1":
+ version: 30.4.1
+ resolution: "@jest/expect-utils@npm:30.4.1"
+ dependencies:
+ "@jest/get-type": "npm:30.1.0"
+ checksum: 10/3f0337ec791d669cacd07594521f2da71b956712dfd0c0007253dd5e886ef640df510af1357878a80ac56f09d3db9fd68e3db66959f0fdb3add5f551dd7e0f35
+ languageName: node
+ linkType: hard
+
"@jest/expect-utils@npm:^29.7.0":
version: 29.7.0
resolution: "@jest/expect-utils@npm:29.7.0"
@@ -4777,6 +4805,16 @@ __metadata:
languageName: node
linkType: hard
+"@jest/expect@npm:30.4.1":
+ version: 30.4.1
+ resolution: "@jest/expect@npm:30.4.1"
+ dependencies:
+ expect: "npm:30.4.1"
+ jest-snapshot: "npm:30.4.1"
+ checksum: 10/40ae0317a3590ced7a7fd21c49e6b1af6b122e6a83822e643af83f02034dfed6485248cae08d6bcf9380039ba3824ac56db18478712c64ddf5f709ee23cf30cd
+ languageName: node
+ linkType: hard
+
"@jest/expect@npm:^29.7.0":
version: 29.7.0
resolution: "@jest/expect@npm:29.7.0"
@@ -4787,6 +4825,20 @@ __metadata:
languageName: node
linkType: hard
+"@jest/fake-timers@npm:30.4.1":
+ version: 30.4.1
+ resolution: "@jest/fake-timers@npm:30.4.1"
+ dependencies:
+ "@jest/types": "npm:30.4.1"
+ "@sinonjs/fake-timers": "npm:^15.4.0"
+ "@types/node": "npm:*"
+ jest-message-util: "npm:30.4.1"
+ jest-mock: "npm:30.4.1"
+ jest-util: "npm:30.4.1"
+ checksum: 10/bc7aff23548395d6e7957bc24f699f921a9616f2357ab49616b0468c7b5e94e6ac4cbdd45d306f1a5d7f72e2a055294f52be3666e4c1da7c137874c5b226e1c6
+ languageName: node
+ linkType: hard
+
"@jest/fake-timers@npm:^29.7.0":
version: 29.7.0
resolution: "@jest/fake-timers@npm:29.7.0"
@@ -4801,6 +4853,13 @@ __metadata:
languageName: node
linkType: hard
+"@jest/get-type@npm:30.1.0":
+ version: 30.1.0
+ resolution: "@jest/get-type@npm:30.1.0"
+ checksum: 10/e2a95fbb49ce2d15547db8af5602626caf9b05f62a5e583b4a2de9bd93a2bfe7175f9bbb2b8a5c3909ce261d467b6991d7265bb1d547cb60e7e97f571f361a70
+ languageName: node
+ linkType: hard
+
"@jest/globals@npm:^29.7.0":
version: 29.7.0
resolution: "@jest/globals@npm:29.7.0"
@@ -4813,6 +4872,28 @@ __metadata:
languageName: node
linkType: hard
+"@jest/globals@npm:^30.4.1":
+ version: 30.4.1
+ resolution: "@jest/globals@npm:30.4.1"
+ dependencies:
+ "@jest/environment": "npm:30.4.1"
+ "@jest/expect": "npm:30.4.1"
+ "@jest/types": "npm:30.4.1"
+ jest-mock: "npm:30.4.1"
+ checksum: 10/5fe04b9c3b97f0061e4464201ee0dd674dd958843eb80542791d1c576c51f12aaa3f3b369e136d5fd3f8c716f9c9bbfbb76491a3cbc3c4efb3cc71063f909132
+ languageName: node
+ linkType: hard
+
+"@jest/pattern@npm:30.4.0":
+ version: 30.4.0
+ resolution: "@jest/pattern@npm:30.4.0"
+ dependencies:
+ "@types/node": "npm:*"
+ jest-regex-util: "npm:30.4.0"
+ checksum: 10/4fb1db0e586713708d2fcd79059315600978608483ef2d80e04a0a59b20b0d8de0d3f47cad950ff90bfb9ea3cb788709ee3d1eb225734e4dbf1c4b743c93d204
+ languageName: node
+ linkType: hard
+
"@jest/reporters@npm:^29.7.0":
version: 29.7.0
resolution: "@jest/reporters@npm:29.7.0"
@@ -4850,6 +4931,15 @@ __metadata:
languageName: node
linkType: hard
+"@jest/schemas@npm:30.4.1":
+ version: 30.4.1
+ resolution: "@jest/schemas@npm:30.4.1"
+ dependencies:
+ "@sinclair/typebox": "npm:^0.34.0"
+ checksum: 10/86e62c8fd8fc77535085f1ede3a416430a3740f78b8f88ec7d0ee4516b22daf3326ffc1ade9d5f7839bbde923aaf1b5ac430a42ed4bb1a38edc3de5005a58f51
+ languageName: node
+ linkType: hard
+
"@jest/schemas@npm:^29.6.3":
version: 29.6.3
resolution: "@jest/schemas@npm:29.6.3"
@@ -4859,6 +4949,18 @@ __metadata:
languageName: node
linkType: hard
+"@jest/snapshot-utils@npm:30.4.1":
+ version: 30.4.1
+ resolution: "@jest/snapshot-utils@npm:30.4.1"
+ dependencies:
+ "@jest/types": "npm:30.4.1"
+ chalk: "npm:^4.1.2"
+ graceful-fs: "npm:^4.2.11"
+ natural-compare: "npm:^1.4.0"
+ checksum: 10/8f17768702153267388b3043f358027385e591ac4668699bfce3547cb8e08ac146a074913bcddf68c0a4f7155e24a6d582d27f4592f5c3bd5f9fbc3f9182ef78
+ languageName: node
+ linkType: hard
+
"@jest/source-map@npm:^29.6.3":
version: 29.6.3
resolution: "@jest/source-map@npm:29.6.3"
@@ -4894,6 +4996,28 @@ __metadata:
languageName: node
linkType: hard
+"@jest/transform@npm:30.4.1":
+ version: 30.4.1
+ resolution: "@jest/transform@npm:30.4.1"
+ dependencies:
+ "@babel/core": "npm:^7.27.4"
+ "@jest/types": "npm:30.4.1"
+ "@jridgewell/trace-mapping": "npm:^0.3.25"
+ babel-plugin-istanbul: "npm:^7.0.1"
+ chalk: "npm:^4.1.2"
+ convert-source-map: "npm:^2.0.0"
+ fast-json-stable-stringify: "npm:^2.1.0"
+ graceful-fs: "npm:^4.2.11"
+ jest-haste-map: "npm:30.4.1"
+ jest-regex-util: "npm:30.4.0"
+ jest-util: "npm:30.4.1"
+ pirates: "npm:^4.0.7"
+ slash: "npm:^3.0.0"
+ write-file-atomic: "npm:^5.0.1"
+ checksum: 10/7b570451f6c26360f1b852c2281dcc4e36fe685dbc159cf5eabf83d49d6aae4569f444d38f3afb5b3b6e0b809eb41b65f3145c0cac5fee3eec9c9b178fb1f0ea
+ languageName: node
+ linkType: hard
+
"@jest/transform@npm:^29.7.0":
version: 29.7.0
resolution: "@jest/transform@npm:29.7.0"
@@ -4917,6 +5041,21 @@ __metadata:
languageName: node
linkType: hard
+"@jest/types@npm:30.4.1":
+ version: 30.4.1
+ resolution: "@jest/types@npm:30.4.1"
+ dependencies:
+ "@jest/pattern": "npm:30.4.0"
+ "@jest/schemas": "npm:30.4.1"
+ "@types/istanbul-lib-coverage": "npm:^2.0.6"
+ "@types/istanbul-reports": "npm:^3.0.4"
+ "@types/node": "npm:*"
+ "@types/yargs": "npm:^17.0.33"
+ chalk: "npm:^4.1.2"
+ checksum: 10/cc0999508613487c6d0f55661cd342ebe7cfe579fa9917534b94310204358f03f94524f70f00b4fe3c6dd2ccd0fd44657615a1b9f420ab310d68b43964bff87c
+ languageName: node
+ linkType: hard
+
"@jest/types@npm:^26.6.2":
version: 26.6.2
resolution: "@jest/types@npm:26.6.2"
@@ -5423,6 +5562,7 @@ __metadata:
version: 0.0.0-use.local
resolution: "@metamask/account-tree-controller@workspace:packages/account-tree-controller"
dependencies:
+ "@jest/globals": "npm:^30.4.1"
"@metamask/account-api": "npm:^1.0.4"
"@metamask/accounts-controller": "npm:^39.0.5"
"@metamask/auto-changelog": "npm:^6.1.0"
@@ -5438,7 +5578,6 @@ __metadata:
"@metamask/snaps-utils": "npm:^12.1.2"
"@metamask/superstruct": "npm:^3.1.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
fast-deep-equal: "npm:^3.1.3"
@@ -5475,14 +5614,13 @@ __metadata:
"@metamask/providers": "npm:^22.1.0"
"@metamask/superstruct": "npm:^3.1.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
"@types/readable-stream": "npm:^2.3.0"
deepmerge: "npm:^4.2.2"
ethereum-cryptography: "npm:^2.1.2"
immer: "npm:^9.0.6"
jest: "npm:^29.7.0"
- lodash: "npm:^4.17.21"
+ lodash-es: "npm:^4.17.21"
ts-jest: "npm:^29.2.5"
tsx: "npm:^4.20.5"
typedoc: "npm:^0.25.13"
@@ -5511,12 +5649,12 @@ __metadata:
version: 0.0.0-use.local
resolution: "@metamask/address-book-controller@workspace:packages/address-book-controller"
dependencies:
+ "@jest/globals": "npm:^30.4.1"
"@metamask/auto-changelog": "npm:^6.1.0"
"@metamask/base-controller": "npm:^9.1.0"
"@metamask/controller-utils": "npm:^12.3.0"
"@metamask/messenger": "npm:^2.0.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -5532,12 +5670,12 @@ __metadata:
version: 0.0.0-use.local
resolution: "@metamask/ai-controllers@workspace:packages/ai-controllers"
dependencies:
+ "@jest/globals": "npm:^30.4.1"
"@metamask/auto-changelog": "npm:^6.1.0"
"@metamask/base-controller": "npm:^9.1.0"
"@metamask/messenger": "npm:^2.0.0"
"@metamask/superstruct": "npm:^3.1.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -5553,16 +5691,16 @@ __metadata:
version: 0.0.0-use.local
resolution: "@metamask/analytics-controller@workspace:packages/analytics-controller"
dependencies:
+ "@jest/globals": "npm:^30.4.1"
"@metamask/auto-changelog": "npm:^6.1.0"
"@metamask/base-controller": "npm:^9.1.0"
"@metamask/messenger": "npm:^2.0.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
"@types/uuid": "npm:^8.3.0"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
- lodash: "npm:^4.17.21"
+ lodash-es: "npm:^4.17.21"
ts-jest: "npm:^29.2.5"
tsx: "npm:^4.20.5"
typedoc: "npm:^0.25.13"
@@ -5576,12 +5714,12 @@ __metadata:
version: 0.0.0-use.local
resolution: "@metamask/analytics-data-regulation-controller@workspace:packages/analytics-data-regulation-controller"
dependencies:
+ "@jest/globals": "npm:^30.4.1"
"@metamask/auto-changelog": "npm:^6.1.0"
"@metamask/base-controller": "npm:^9.1.0"
"@metamask/controller-utils": "npm:^12.3.0"
"@metamask/messenger": "npm:^2.0.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -5601,7 +5739,6 @@ __metadata:
"@metamask/auto-changelog": "npm:^6.1.0"
"@metamask/base-controller": "npm:^9.1.0"
"@metamask/messenger": "npm:^2.0.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -5627,7 +5764,6 @@ __metadata:
"@metamask/auto-changelog": "npm:^6.1.0"
"@metamask/base-controller": "npm:^9.1.0"
"@metamask/messenger": "npm:^2.0.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -5643,12 +5779,12 @@ __metadata:
version: 0.0.0-use.local
resolution: "@metamask/approval-controller@workspace:packages/approval-controller"
dependencies:
+ "@jest/globals": "npm:^30.4.1"
"@metamask/auto-changelog": "npm:^6.1.0"
"@metamask/base-controller": "npm:^9.1.0"
"@metamask/messenger": "npm:^2.0.0"
"@metamask/rpc-errors": "npm:^7.0.2"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -5692,14 +5828,13 @@ __metadata:
"@metamask/snaps-utils": "npm:^12.1.2"
"@metamask/transaction-controller": "npm:^69.0.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
"@types/lodash": "npm:^4.14.191"
async-mutex: "npm:^0.5.0"
bignumber.js: "npm:^9.1.2"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
- lodash: "npm:^4.17.21"
+ lodash-es: "npm:^4.17.21"
p-limit: "npm:^3.1.0"
ts-jest: "npm:^29.2.5"
tsx: "npm:^4.20.5"
@@ -5755,7 +5890,6 @@ __metadata:
"@metamask/transaction-controller": "npm:^69.0.0"
"@metamask/utils": "npm:^11.11.0"
"@tanstack/query-core": "npm:^5.62.16"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/bn.js": "npm:^5.1.5"
"@types/jest": "npm:^29.5.14"
"@types/lodash": "npm:^4.14.191"
@@ -5768,7 +5902,7 @@ __metadata:
immer: "npm:^9.0.6"
jest: "npm:^29.7.0"
jest-environment-jsdom: "npm:^29.7.0"
- lodash: "npm:^4.17.21"
+ lodash-es: "npm:^4.17.21"
multiformats: "npm:^9.9.0"
nock: "npm:^13.3.1"
reselect: "npm:^5.1.1"
@@ -5830,7 +5964,6 @@ __metadata:
"@metamask/messenger": "npm:^2.0.0"
"@metamask/superstruct": "npm:^3.1.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -5870,10 +6003,10 @@ __metadata:
version: 0.0.0-use.local
resolution: "@metamask/base-controller@workspace:packages/base-controller"
dependencies:
+ "@jest/globals": "npm:^30.4.1"
"@metamask/auto-changelog": "npm:^6.1.0"
"@metamask/messenger": "npm:^2.0.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
immer: "npm:^9.0.6"
@@ -5890,19 +6023,19 @@ __metadata:
version: 0.0.0-use.local
resolution: "@metamask/base-data-service@workspace:packages/base-data-service"
dependencies:
+ "@jest/globals": "npm:^30.4.1"
"@metamask/auto-changelog": "npm:^6.1.0"
"@metamask/messenger": "npm:^2.0.0"
"@metamask/storage-service": "npm:^1.0.2"
"@metamask/utils": "npm:^11.11.0"
"@tanstack/query-core": "npm:^4.43.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
"@types/lodash": "npm:^4.14.191"
cockatiel: "npm:^3.1.2"
deepmerge: "npm:^4.2.2"
fast-deep-equal: "npm:^3.1.3"
jest: "npm:^29.7.0"
- lodash: "npm:^4.17.21"
+ lodash-es: "npm:^4.17.21"
nock: "npm:^13.3.1"
ts-jest: "npm:^29.2.5"
tsx: "npm:^4.20.5"
@@ -5918,7 +6051,6 @@ __metadata:
dependencies:
"@metamask/auto-changelog": "npm:^6.1.0"
"@metamask/local-node-utils": "npm:^1.0.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -5961,13 +6093,12 @@ __metadata:
"@metamask/superstruct": "npm:^3.1.0"
"@metamask/transaction-controller": "npm:^69.0.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
bignumber.js: "npm:^9.1.2"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
jest-environment-jsdom: "npm:^29.7.0"
- lodash: "npm:^4.17.21"
+ lodash-es: "npm:^4.17.21"
nock: "npm:^13.3.1"
reselect: "npm:^5.1.1"
ts-jest: "npm:^29.2.5"
@@ -5998,7 +6129,6 @@ __metadata:
"@metamask/superstruct": "npm:^3.1.0"
"@metamask/transaction-controller": "npm:^69.0.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
bignumber.js: "npm:^9.1.2"
deepmerge: "npm:^4.2.2"
@@ -6028,9 +6158,9 @@ __metadata:
version: 0.0.0-use.local
resolution: "@metamask/build-utils@workspace:packages/build-utils"
dependencies:
+ "@jest/globals": "npm:^30.4.1"
"@metamask/auto-changelog": "npm:^6.1.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/eslint": "npm:^8.44.7"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
@@ -6054,11 +6184,10 @@ __metadata:
"@metamask/permission-controller": "npm:^13.1.1"
"@metamask/rpc-errors": "npm:^7.0.2"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
- lodash: "npm:^4.17.21"
+ lodash-es: "npm:^4.17.21"
ts-jest: "npm:^29.2.5"
tsx: "npm:^4.20.5"
typedoc: "npm:^0.25.13"
@@ -6078,7 +6207,6 @@ __metadata:
"@metamask/superstruct": "npm:^3.1.0"
"@metamask/utils": "npm:^11.11.0"
"@tanstack/query-core": "npm:^4.43.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -6102,7 +6230,6 @@ __metadata:
"@metamask/messenger": "npm:^2.0.0"
"@metamask/profile-sync-controller": "npm:^28.3.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -6121,7 +6248,6 @@ __metadata:
"@metamask/auto-changelog": "npm:^6.1.0"
"@metamask/base-controller": "npm:^9.1.0"
"@metamask/messenger": "npm:^2.0.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -6146,7 +6272,6 @@ __metadata:
"@metamask/keyring-api": "npm:^23.5.0"
"@metamask/transaction-controller": "npm:^69.0.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -6162,13 +6287,13 @@ __metadata:
version: 0.0.0-use.local
resolution: "@metamask/compliance-controller@workspace:packages/compliance-controller"
dependencies:
+ "@jest/globals": "npm:^30.4.1"
"@metamask/auto-changelog": "npm:^6.1.0"
"@metamask/base-controller": "npm:^9.1.0"
"@metamask/controller-utils": "npm:^12.3.0"
"@metamask/messenger": "npm:^2.0.0"
"@metamask/superstruct": "npm:^3.1.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -6186,11 +6311,11 @@ __metadata:
version: 0.0.0-use.local
resolution: "@metamask/composable-controller@workspace:packages/composable-controller"
dependencies:
+ "@jest/globals": "npm:^30.4.1"
"@metamask/auto-changelog": "npm:^6.1.0"
"@metamask/base-controller": "npm:^9.1.0"
"@metamask/json-rpc-engine": "npm:^10.5.0"
"@metamask/messenger": "npm:^2.0.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
immer: "npm:^9.0.6"
@@ -6218,7 +6343,6 @@ __metadata:
"@metamask/remote-feature-flag-controller": "npm:^4.2.2"
"@metamask/superstruct": "npm:^3.1.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -6236,10 +6360,10 @@ __metadata:
version: 0.0.0-use.local
resolution: "@metamask/connectivity-controller@workspace:packages/connectivity-controller"
dependencies:
+ "@jest/globals": "npm:^30.4.1"
"@metamask/auto-changelog": "npm:^6.1.0"
"@metamask/base-controller": "npm:^9.1.0"
"@metamask/messenger": "npm:^2.0.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -6286,15 +6410,15 @@ __metadata:
dependencies:
"@babel/runtime": "npm:^7.23.9"
"@ethersproject/abi": "npm:^5.7.0"
+ "@jest/globals": "npm:^30.4.1"
"@metamask/auto-changelog": "npm:^6.1.0"
"@metamask/eth-query": "npm:^4.0.0"
"@metamask/ethjs-unit": "npm:^0.3.0"
"@metamask/utils": "npm:^11.11.0"
"@spruceid/siwe-parser": "npm:2.1.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/bn.js": "npm:^5.1.5"
"@types/jest": "npm:^29.5.14"
- "@types/lodash": "npm:^4.14.191"
+ "@types/lodash-es": "npm:^4.17.12"
bignumber.js: "npm:^9.1.2"
bn.js: "npm:^5.2.1"
cockatiel: "npm:^3.1.2"
@@ -6303,7 +6427,7 @@ __metadata:
fast-deep-equal: "npm:^3.1.3"
jest: "npm:^29.7.0"
jest-environment-jsdom: "npm:^29.7.0"
- lodash: "npm:^4.17.21"
+ lodash-es: "npm:^4.17.21"
nock: "npm:^13.3.1"
ts-jest: "npm:^29.2.5"
tsx: "npm:^4.20.5"
@@ -6328,7 +6452,6 @@ __metadata:
"@metamask/remote-feature-flag-controller": "npm:^4.2.2"
"@metamask/utils": "npm:^11.11.0"
"@tanstack/query-core": "npm:^5.62.16"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
async-mutex: "npm:^0.5.0"
deepmerge: "npm:^4.2.2"
@@ -6347,6 +6470,7 @@ __metadata:
version: 0.0.0-use.local
resolution: "@metamask/core-monorepo@workspace:."
dependencies:
+ "@jest/globals": "npm:^30.4.1"
"@lavamoat/allow-scripts": "npm:^3.0.4"
"@lavamoat/preinstall-always-fail": "npm:^2.1.0"
"@metamask/create-release-branch": "npm:^4.2.1"
@@ -6360,7 +6484,6 @@ __metadata:
"@metamask/network-controller": "npm:^34.0.0"
"@metamask/skills": "npm:^0.1.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
"@types/lodash": "npm:^4.14.191"
"@types/node": "npm:^16.18.54"
@@ -6391,6 +6514,7 @@ __metadata:
rimraf: "npm:^5.0.5"
semver: "npm:^7.6.3"
simple-git-hooks: "npm:^2.8.0"
+ ts-jest: "npm:^29.2.5"
tsx: "npm:^4.20.5"
typescript: "npm:~5.3.3"
typescript-eslint: "npm:^8.48.0"
@@ -6439,7 +6563,6 @@ __metadata:
"@metamask/keyring-controller": "npm:^27.1.0"
"@metamask/messenger": "npm:^2.0.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -6484,7 +6607,6 @@ __metadata:
"@metamask/network-controller": "npm:^34.0.0"
"@metamask/stake-sdk": "npm:^3.2.1"
"@metamask/transaction-controller": "npm:^69.0.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -6509,12 +6631,11 @@ __metadata:
"@metamask/superstruct": "npm:^3.1.0"
"@metamask/transaction-controller": "npm:^69.0.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
klona: "npm:^2.0.6"
- lodash: "npm:^4.17.21"
+ lodash-es: "npm:^4.17.21"
ts-jest: "npm:^29.2.5"
tsx: "npm:^4.20.5"
typedoc: "npm:^0.25.13"
@@ -6533,7 +6654,6 @@ __metadata:
"@metamask/rpc-errors": "npm:^7.0.2"
"@metamask/superstruct": "npm:^3.1.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -6556,11 +6676,10 @@ __metadata:
"@metamask/permission-controller": "npm:^13.1.1"
"@metamask/rpc-errors": "npm:^7.0.2"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
- lodash: "npm:^4.17.21"
+ lodash-es: "npm:^4.17.21"
ts-jest: "npm:^29.2.5"
tsx: "npm:^4.20.5"
typedoc: "npm:^0.25.13"
@@ -6580,7 +6699,6 @@ __metadata:
"@metamask/messenger": "npm:^2.0.0"
"@metamask/network-controller": "npm:^34.0.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -6663,9 +6781,8 @@ __metadata:
"@metamask/auto-changelog": "npm:^6.1.0"
"@metamask/eth-json-rpc-provider": "npm:^6.0.1"
"@metamask/json-rpc-engine": "npm:^10.5.0"
- "@metamask/safe-event-emitter": "npm:^3.0.0"
+ "@metamask/safe-event-emitter": "patch:@metamask/safe-event-emitter@npm%3A3.1.1#~/.yarn/patches/@metamask-safe-event-emitter-npm-3.1.1-a7872b1f5a.patch"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
"@types/json-rpc-random-id": "npm:^1.0.1"
deepmerge: "npm:^4.2.2"
@@ -6736,7 +6853,6 @@ __metadata:
"@metamask/rpc-errors": "npm:^7.0.2"
"@metamask/superstruct": "npm:^3.1.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/deep-freeze-strict": "npm:^1.1.0"
"@types/jest": "npm:^29.5.14"
deep-freeze-strict: "npm:^1.1.1"
@@ -6768,13 +6884,13 @@ __metadata:
resolution: "@metamask/eth-json-rpc-provider@workspace:packages/eth-json-rpc-provider"
dependencies:
"@ethersproject/providers": "npm:^5.7.0"
+ "@jest/globals": "npm:^30.4.1"
"@metamask/auto-changelog": "npm:^6.1.0"
"@metamask/eth-query": "npm:^4.0.0"
"@metamask/ethjs-query": "npm:^0.5.3"
"@metamask/json-rpc-engine": "npm:^10.5.0"
"@metamask/rpc-errors": "npm:^7.0.2"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
ethers: "npm:^6.12.0"
@@ -7015,7 +7131,6 @@ __metadata:
resolution: "@metamask/foundryup@workspace:packages/foundryup"
dependencies:
"@metamask/auto-changelog": "npm:^6.1.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
"@types/unzipper": "npm:^0.10.10"
"@types/yargs": "npm:^17.0.32"
@@ -7053,7 +7168,6 @@ __metadata:
"@metamask/network-controller": "npm:^34.0.0"
"@metamask/polling-controller": "npm:^16.0.8"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/bn.js": "npm:^5.1.5"
"@types/jest": "npm:^29.5.14"
"@types/jest-when": "npm:^2.7.3"
@@ -7093,7 +7207,6 @@ __metadata:
"@metamask/snaps-utils": "npm:^12.1.2"
"@metamask/transaction-controller": "npm:^69.0.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -7109,11 +7222,11 @@ __metadata:
version: 0.0.0-use.local
resolution: "@metamask/geolocation-controller@workspace:packages/geolocation-controller"
dependencies:
+ "@jest/globals": "npm:^30.4.1"
"@metamask/auto-changelog": "npm:^6.1.0"
"@metamask/base-controller": "npm:^9.1.0"
"@metamask/controller-utils": "npm:^12.3.0"
"@metamask/messenger": "npm:^2.0.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -7131,7 +7244,6 @@ __metadata:
dependencies:
"@metamask/auto-changelog": "npm:^6.1.0"
"@metamask/local-node-utils": "npm:^1.0.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -7149,14 +7261,14 @@ __metadata:
version: 0.0.0-use.local
resolution: "@metamask/json-rpc-engine@workspace:packages/json-rpc-engine"
dependencies:
+ "@jest/globals": "npm:^30.4.1"
"@lavamoat/allow-scripts": "npm:^3.0.4"
"@lavamoat/preinstall-always-fail": "npm:^2.1.0"
"@metamask/auto-changelog": "npm:^6.1.0"
"@metamask/messenger": "npm:^2.0.0"
"@metamask/rpc-errors": "npm:^7.0.2"
- "@metamask/safe-event-emitter": "npm:^3.0.0"
+ "@metamask/safe-event-emitter": "patch:@metamask/safe-event-emitter@npm%3A3.1.1#~/.yarn/patches/@metamask-safe-event-emitter-npm-3.1.1-a7872b1f5a.patch"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/deep-freeze-strict": "npm:^1.1.0"
"@types/jest": "npm:^29.5.14"
deep-freeze-strict: "npm:^1.1.1"
@@ -7176,9 +7288,8 @@ __metadata:
dependencies:
"@metamask/auto-changelog": "npm:^6.1.0"
"@metamask/json-rpc-engine": "npm:^10.5.0"
- "@metamask/safe-event-emitter": "npm:^3.0.0"
+ "@metamask/safe-event-emitter": "patch:@metamask/safe-event-emitter@npm%3A3.1.1#~/.yarn/patches/@metamask-safe-event-emitter-npm-3.1.1-a7872b1f5a.patch"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
"@types/readable-stream": "npm:^2.3.0"
deepmerge: "npm:^4.2.2"
@@ -7226,6 +7337,7 @@ __metadata:
"@ethereumjs/common": "npm:^4.4.0"
"@ethereumjs/tx": "npm:^5.4.0"
"@ethereumjs/util": "npm:^9.1.0"
+ "@jest/globals": "npm:^30.4.1"
"@lavamoat/allow-scripts": "npm:^3.0.4"
"@lavamoat/preinstall-always-fail": "npm:^2.1.0"
"@metamask/auto-changelog": "npm:^6.1.0"
@@ -7241,14 +7353,13 @@ __metadata:
"@metamask/messenger": "npm:^2.0.0"
"@metamask/scure-bip39": "npm:^2.1.1"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
async-mutex: "npm:^0.5.0"
deepmerge: "npm:^4.2.2"
ethereumjs-wallet: "npm:^1.0.1"
immer: "npm:^9.0.6"
jest: "npm:^29.7.0"
- lodash: "npm:^4.17.21"
+ lodash-es: "npm:^4.17.21"
ts-jest: "npm:^29.2.5"
tsx: "npm:^4.20.5"
typedoc: "npm:^0.25.13"
@@ -7350,7 +7461,6 @@ __metadata:
resolution: "@metamask/local-node-utils@workspace:packages/local-node-utils"
dependencies:
"@metamask/auto-changelog": "npm:^6.1.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -7368,11 +7478,11 @@ __metadata:
version: 0.0.0-use.local
resolution: "@metamask/logging-controller@workspace:packages/logging-controller"
dependencies:
+ "@jest/globals": "npm:^30.4.1"
"@metamask/auto-changelog": "npm:^6.1.0"
"@metamask/base-controller": "npm:^9.1.0"
"@metamask/controller-utils": "npm:^12.3.0"
"@metamask/messenger": "npm:^2.0.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -7389,13 +7499,13 @@ __metadata:
version: 0.0.0-use.local
resolution: "@metamask/message-manager@workspace:packages/message-manager"
dependencies:
+ "@jest/globals": "npm:^30.4.1"
"@metamask/auto-changelog": "npm:^6.1.0"
"@metamask/base-controller": "npm:^9.1.0"
"@metamask/controller-utils": "npm:^12.3.0"
"@metamask/eth-sig-util": "npm:^8.2.0"
"@metamask/messenger": "npm:^2.0.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
"@types/uuid": "npm:^8.3.0"
deepmerge: "npm:^4.2.2"
@@ -7416,7 +7526,6 @@ __metadata:
dependencies:
"@metamask/auto-changelog": "npm:^6.1.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
"@types/yargs": "npm:^17.0.32"
deepmerge: "npm:^4.2.2"
@@ -7460,9 +7569,9 @@ __metadata:
version: 0.0.0-use.local
resolution: "@metamask/messenger@workspace:packages/messenger"
dependencies:
+ "@jest/globals": "npm:^30.4.1"
"@metamask/auto-changelog": "npm:^6.1.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
immer: "npm:^9.0.6"
@@ -7495,7 +7604,6 @@ __metadata:
"@metamask/superstruct": "npm:^3.1.0"
"@metamask/utils": "npm:^11.11.0"
"@tanstack/query-core": "npm:^4.43.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -7523,7 +7631,6 @@ __metadata:
"@metamask/remote-feature-flag-controller": "npm:^4.2.2"
"@metamask/superstruct": "npm:^3.1.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -7549,7 +7656,6 @@ __metadata:
"@metamask/keyring-utils": "npm:^3.3.1"
"@metamask/messenger": "npm:^2.0.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
async-mutex: "npm:^0.5.0"
deepmerge: "npm:^4.2.2"
@@ -7577,7 +7683,6 @@ __metadata:
"@metamask/messenger": "npm:^2.0.0"
"@metamask/network-controller": "npm:^34.0.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -7615,7 +7720,6 @@ __metadata:
"@metamask/snaps-utils": "npm:^12.1.2"
"@metamask/superstruct": "npm:^3.1.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
"@types/uuid": "npm:^8.3.0"
async-mutex: "npm:^0.5.0"
@@ -7651,12 +7755,11 @@ __metadata:
"@metamask/network-controller": "npm:^34.0.0"
"@metamask/permission-controller": "npm:^13.1.1"
"@metamask/rpc-errors": "npm:^7.0.2"
- "@metamask/safe-event-emitter": "npm:^3.0.0"
+ "@metamask/safe-event-emitter": "patch:@metamask/safe-event-emitter@npm%3A3.1.1#~/.yarn/patches/@metamask-safe-event-emitter-npm-3.1.1-a7872b1f5a.patch"
"@metamask/snaps-controllers": "npm:^19.0.0"
"@metamask/utils": "npm:^11.11.0"
"@open-rpc/meta-schema": "npm:^1.14.6"
"@open-rpc/schema-utils-js": "npm:^2.0.5"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -7685,14 +7788,13 @@ __metadata:
"@metamask/superstruct": "npm:^3.1.0"
"@metamask/utils": "npm:^11.11.0"
"@solana/addresses": "npm:^2.0.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
"@types/lodash": "npm:^4.14.191"
"@types/uuid": "npm:^8.3.0"
deepmerge: "npm:^4.2.2"
immer: "npm:^9.0.6"
jest: "npm:^29.7.0"
- lodash: "npm:^4.17.21"
+ lodash-es: "npm:^4.17.21"
nock: "npm:^13.3.1"
ts-jest: "npm:^29.2.5"
tsx: "npm:^4.20.5"
@@ -7719,7 +7821,6 @@ __metadata:
"@metamask/snaps-sdk": "npm:^11.0.0"
"@metamask/snaps-utils": "npm:^12.1.2"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
"@types/uuid": "npm:^8.3.0"
deepmerge: "npm:^4.2.2"
@@ -7738,12 +7839,12 @@ __metadata:
version: 0.0.0-use.local
resolution: "@metamask/name-controller@workspace:packages/name-controller"
dependencies:
+ "@jest/globals": "npm:^30.4.1"
"@metamask/auto-changelog": "npm:^6.1.0"
"@metamask/base-controller": "npm:^9.1.0"
"@metamask/controller-utils": "npm:^12.3.0"
"@metamask/messenger": "npm:^2.0.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
async-mutex: "npm:^0.5.0"
deepmerge: "npm:^4.2.2"
@@ -7769,7 +7870,6 @@ __metadata:
"@metamask/network-controller": "npm:^34.0.0"
"@metamask/network-enablement-controller": "npm:^5.6.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -7802,7 +7902,6 @@ __metadata:
"@metamask/rpc-errors": "npm:^7.0.2"
"@metamask/swappable-obj-proxy": "npm:^2.3.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/deep-freeze-strict": "npm:^1.1.0"
"@types/jest": "npm:^29.5.14"
"@types/jest-when": "npm:^2.7.3"
@@ -7816,7 +7915,7 @@ __metadata:
jest: "npm:^29.7.0"
jest-environment-jsdom: "npm:^29.7.0"
jest-when: "npm:^3.4.2"
- lodash: "npm:^4.17.21"
+ lodash-es: "npm:^4.17.21"
loglevel: "npm:^1.8.1"
nock: "npm:^13.3.1"
node-fetch: "npm:^2.7.0"
@@ -7845,7 +7944,6 @@ __metadata:
"@metamask/slip44": "npm:^4.3.0"
"@metamask/transaction-controller": "npm:^69.0.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -7885,7 +7983,6 @@ __metadata:
"@metamask/messenger": "npm:^2.0.0"
"@metamask/profile-sync-controller": "npm:^28.3.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
"@types/lodash": "npm:^4.14.191"
"@types/readable-stream": "npm:^2.3.0"
@@ -7896,7 +7993,7 @@ __metadata:
firebase: "npm:^11.2.0"
jest: "npm:^29.7.0"
jest-environment-jsdom: "npm:^29.7.0"
- lodash: "npm:^4.17.21"
+ lodash-es: "npm:^4.17.21"
loglevel: "npm:^1.8.1"
nock: "npm:^13.3.1"
semver: "npm:^7.6.3"
@@ -7933,6 +8030,7 @@ __metadata:
version: 0.0.0-use.local
resolution: "@metamask/passkey-controller@workspace:packages/passkey-controller"
dependencies:
+ "@jest/globals": "npm:^30.4.1"
"@levischuck/tiny-cbor": "npm:^0.3.3"
"@metamask/auto-changelog": "npm:^6.1.0"
"@metamask/base-controller": "npm:^9.1.0"
@@ -7941,7 +8039,6 @@ __metadata:
"@noble/ciphers": "npm:^1.3.0"
"@noble/curves": "npm:^1.9.2"
"@noble/hashes": "npm:^1.8.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -7976,6 +8073,7 @@ __metadata:
version: 0.0.0-use.local
resolution: "@metamask/permission-controller@workspace:packages/permission-controller"
dependencies:
+ "@jest/globals": "npm:^30.4.1"
"@metamask/approval-controller": "npm:^9.0.2"
"@metamask/auto-changelog": "npm:^6.1.0"
"@metamask/base-controller": "npm:^9.1.0"
@@ -7984,7 +8082,6 @@ __metadata:
"@metamask/messenger": "npm:^2.0.0"
"@metamask/rpc-errors": "npm:^7.0.2"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/deep-freeze-strict": "npm:^1.1.0"
"@types/jest": "npm:^29.5.14"
deep-freeze-strict: "npm:^1.1.1"
@@ -8009,7 +8106,6 @@ __metadata:
"@metamask/json-rpc-engine": "npm:^10.5.0"
"@metamask/messenger": "npm:^2.0.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/deep-freeze-strict": "npm:^1.1.0"
"@types/jest": "npm:^29.5.14"
deep-freeze-strict: "npm:^1.1.1"
@@ -8046,7 +8142,6 @@ __metadata:
"@metamask/utils": "npm:^11.11.0"
"@myx-trade/sdk": "npm:^0.1.265"
"@nktkas/hyperliquid": "npm:^0.33.1"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
"@types/uuid": "npm:^8.3.0"
bignumber.js: "npm:^9.1.2"
@@ -8076,7 +8171,6 @@ __metadata:
"@metamask/messenger": "npm:^2.0.0"
"@metamask/transaction-controller": "npm:^69.0.0"
"@noble/hashes": "npm:^1.8.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
"@types/punycode": "npm:^2.1.0"
deepmerge: "npm:^4.2.2"
@@ -8106,7 +8200,6 @@ __metadata:
"@mdx-js/react": "npm:^3.1.1"
"@metamask/auto-changelog": "npm:^6.1.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
"@types/node": "npm:^16.18.54"
"@types/npm-which": "npm:^3"
@@ -8139,7 +8232,6 @@ __metadata:
"@metamask/messenger": "npm:^2.0.0"
"@metamask/network-controller": "npm:^34.0.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
"@types/uuid": "npm:^8.3.0"
deepmerge: "npm:^4.2.2"
@@ -8172,7 +8264,6 @@ __metadata:
"@metamask/base-controller": "npm:^9.1.0"
"@metamask/messenger": "npm:^2.0.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -8203,7 +8294,6 @@ __metadata:
"@metamask/superstruct": "npm:^3.1.0"
"@metamask/transaction-controller": "npm:^69.0.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
async-mutex: "npm:^0.5.0"
deepmerge: "npm:^4.2.2"
@@ -8238,7 +8328,6 @@ __metadata:
"@metamask/utils": "npm:^11.11.0"
"@noble/ciphers": "npm:^1.3.0"
"@noble/hashes": "npm:^1.8.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
ethers: "npm:^6.12.0"
@@ -8291,7 +8380,6 @@ __metadata:
"@metamask/messenger": "npm:^2.0.0"
"@metamask/profile-sync-controller": "npm:^28.3.0"
"@metamask/remote-feature-flag-controller": "npm:^4.2.2"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -8308,12 +8396,12 @@ __metadata:
version: 0.0.0-use.local
resolution: "@metamask/rate-limit-controller@workspace:packages/rate-limit-controller"
dependencies:
+ "@jest/globals": "npm:^30.4.1"
"@metamask/auto-changelog": "npm:^6.1.0"
"@metamask/base-controller": "npm:^9.1.0"
"@metamask/messenger": "npm:^2.0.0"
"@metamask/rpc-errors": "npm:^7.0.2"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -8335,7 +8423,6 @@ __metadata:
"@metamask/utils": "npm:^11.11.0"
"@tanstack/query-core": "npm:^4.43.0"
"@tanstack/react-query": "npm:^4.43.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -8360,13 +8447,13 @@ __metadata:
version: 0.0.0-use.local
resolution: "@metamask/remote-feature-flag-controller@workspace:packages/remote-feature-flag-controller"
dependencies:
+ "@jest/globals": "npm:^30.4.1"
"@lavamoat/allow-scripts": "npm:^3.0.4"
"@metamask/auto-changelog": "npm:^6.1.0"
"@metamask/base-controller": "npm:^9.1.0"
"@metamask/controller-utils": "npm:^12.3.0"
"@metamask/messenger": "npm:^2.0.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -8390,13 +8477,20 @@ __metadata:
languageName: node
linkType: hard
-"@metamask/safe-event-emitter@npm:^3.0.0, @metamask/safe-event-emitter@npm:^3.1.1":
+"@metamask/safe-event-emitter@npm:3.1.1":
version: 3.1.1
resolution: "@metamask/safe-event-emitter@npm:3.1.1"
checksum: 10/e24db4d7c20764bfc5b025065f92518c805f0ffb1da4820078b8cff7dcae964c0f354cf053fcb7ac659de015d5ffdf21aae5e8d44e191ee8faa9066855f22653
languageName: node
linkType: hard
+"@metamask/safe-event-emitter@patch:@metamask/safe-event-emitter@npm%3A3.1.1#~/.yarn/patches/@metamask-safe-event-emitter-npm-3.1.1-a7872b1f5a.patch":
+ version: 3.1.1
+ resolution: "@metamask/safe-event-emitter@patch:@metamask/safe-event-emitter@npm%3A3.1.1#~/.yarn/patches/@metamask-safe-event-emitter-npm-3.1.1-a7872b1f5a.patch::version=3.1.1&hash=4a033d"
+ checksum: 10/b47560199f61105a5a719b907400395893c52aa6a1d9aa37a4128b054351dd45fb485655dcb71f926e58da406f39f6a93c60396cc00ed1753a97ac3f5a2c7e5e
+ languageName: node
+ linkType: hard
+
"@metamask/sample-controllers@workspace:packages/sample-controllers":
version: 0.0.0-use.local
resolution: "@metamask/sample-controllers@workspace:packages/sample-controllers"
@@ -8410,7 +8504,6 @@ __metadata:
"@metamask/superstruct": "npm:^3.1.0"
"@metamask/utils": "npm:^11.11.0"
"@tanstack/query-core": "npm:^4.43.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -8450,7 +8543,6 @@ __metadata:
"@noble/ciphers": "npm:^1.3.0"
"@noble/curves": "npm:^1.9.2"
"@noble/hashes": "npm:^1.8.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/elliptic": "npm:^6"
"@types/jest": "npm:^29.5.14"
"@types/json-stable-stringify-without-jsonify": "npm:^1.0.2"
@@ -8478,7 +8570,6 @@ __metadata:
"@metamask/permission-controller": "npm:^13.1.1"
"@metamask/swappable-obj-proxy": "npm:^2.3.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
immer: "npm:^9.0.6"
@@ -8505,7 +8596,6 @@ __metadata:
"@metamask/superstruct": "npm:^3.1.0"
"@metamask/utils": "npm:^11.11.0"
"@tanstack/query-core": "npm:^4.43.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -8532,12 +8622,11 @@ __metadata:
"@metamask/signature-controller": "npm:^39.2.7"
"@metamask/transaction-controller": "npm:^69.0.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
cockatiel: "npm:^3.1.2"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
- lodash: "npm:^4.17.21"
+ lodash-es: "npm:^4.17.21"
ts-jest: "npm:^29.2.5"
tsx: "npm:^4.20.5"
typedoc: "npm:^0.25.13"
@@ -8563,7 +8652,6 @@ __metadata:
"@metamask/messenger": "npm:^2.0.0"
"@metamask/network-controller": "npm:^34.0.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -8616,11 +8704,10 @@ __metadata:
"@metamask/superstruct": "npm:^3.1.0"
"@metamask/transaction-controller": "npm:^69.0.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
bignumber.js: "npm:^9.1.2"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
- lodash: "npm:^4.17.21"
+ lodash-es: "npm:^4.17.21"
nock: "npm:^13.3.1"
reselect: "npm:^5.1.1"
ts-jest: "npm:^29.2.5"
@@ -8647,11 +8734,10 @@ __metadata:
"@metamask/snaps-controllers": "npm:^19.0.0"
"@metamask/snaps-sdk": "npm:^11.0.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
- lodash: "npm:^4.17.21"
+ lodash-es: "npm:^4.17.21"
ts-jest: "npm:^29.2.5"
tsx: "npm:^4.20.5"
typedoc: "npm:^0.25.13"
@@ -8788,7 +8874,6 @@ __metadata:
"@metamask/messenger": "npm:^2.0.0"
"@metamask/profile-sync-controller": "npm:^28.3.0"
"@metamask/superstruct": "npm:^3.1.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -8806,7 +8891,6 @@ __metadata:
dependencies:
"@metamask/auto-changelog": "npm:^6.1.0"
"@metamask/local-node-utils": "npm:^1.0.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -8832,7 +8916,6 @@ __metadata:
resolution: "@metamask/stellar-quickstart-up@workspace:packages/stellar-quickstart-up"
dependencies:
"@metamask/auto-changelog": "npm:^6.1.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -8848,10 +8931,10 @@ __metadata:
version: 0.0.0-use.local
resolution: "@metamask/storage-service@workspace:packages/storage-service"
dependencies:
+ "@jest/globals": "npm:^30.4.1"
"@metamask/auto-changelog": "npm:^6.1.0"
"@metamask/messenger": "npm:^2.0.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -8875,7 +8958,6 @@ __metadata:
"@metamask/profile-sync-controller": "npm:^28.3.0"
"@metamask/transaction-controller": "npm:^69.0.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
bignumber.js: "npm:^9.1.2"
deepmerge: "npm:^4.2.2"
@@ -8950,7 +9032,6 @@ __metadata:
"@metamask/remote-feature-flag-controller": "npm:^4.2.2"
"@metamask/rpc-errors": "npm:^7.0.2"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/bn.js": "npm:^5.1.5"
"@types/jest": "npm:^29.5.14"
"@types/node": "npm:^16.18.54"
@@ -8963,7 +9044,7 @@ __metadata:
immer: "npm:^9.0.6"
jest: "npm:^29.7.0"
jest-environment-jsdom: "npm:^29.7.0"
- lodash: "npm:^4.17.21"
+ lodash-es: "npm:^4.17.21"
nock: "npm:^13.3.1"
ts-jest: "npm:^29.2.5"
tsx: "npm:^4.20.5"
@@ -8998,14 +9079,13 @@ __metadata:
"@metamask/remote-feature-flag-controller": "npm:^4.2.2"
"@metamask/transaction-controller": "npm:^69.0.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
bignumber.js: "npm:^9.1.2"
bn.js: "npm:^5.2.1"
deepmerge: "npm:^4.2.2"
immer: "npm:^9.0.6"
jest: "npm:^29.7.0"
- lodash: "npm:^4.17.21"
+ lodash-es: "npm:^4.17.21"
ts-jest: "npm:^29.2.5"
tsx: "npm:^4.20.5"
typedoc: "npm:^0.25.13"
@@ -9033,13 +9113,12 @@ __metadata:
"@metamask/superstruct": "npm:^3.1.0"
"@metamask/transaction-controller": "npm:^69.0.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
bn.js: "npm:^5.2.1"
deepmerge: "npm:^4.2.2"
immer: "npm:^9.0.6"
jest: "npm:^29.7.0"
- lodash: "npm:^4.17.21"
+ lodash-es: "npm:^4.17.21"
ts-jest: "npm:^29.2.5"
tsx: "npm:^4.20.5"
typedoc: "npm:^0.25.13"
@@ -9103,7 +9182,6 @@ __metadata:
"@metamask/utils": "npm:^11.11.0"
"@metamask/wallet": "npm:^7.0.1"
"@oclif/core": "npm:^4.10.5"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/better-sqlite3": "npm:^7.6.13"
"@types/jest": "npm:^29.5.14"
better-sqlite3: "npm:^12.9.0"
@@ -9165,7 +9243,6 @@ __metadata:
"@metamask/storage-service": "npm:^1.0.2"
"@metamask/transaction-controller": "npm:^69.0.0"
"@metamask/utils": "npm:^11.11.0"
- "@ts-bridge/cli": "npm:^0.6.4"
"@types/jest": "npm:^29.5.14"
deepmerge: "npm:^4.2.2"
jest: "npm:^29.7.0"
@@ -10365,6 +10442,13 @@ __metadata:
languageName: node
linkType: hard
+"@pkgr/core@npm:^0.3.6":
+ version: 0.3.6
+ resolution: "@pkgr/core@npm:0.3.6"
+ checksum: 10/29082aa13d36f13fc41cdc64cb1feb36b630de0d6ebde84e2ff68e3d7a7f1dce4462cca91f76176c46e50bbca6b1e7f1fd9cf907af12d5d70da83bc981ca4ccf
+ languageName: node
+ linkType: hard
+
"@pnpm/config.env-replace@npm:^1.1.0":
version: 1.1.0
resolution: "@pnpm/config.env-replace@npm:1.1.0"
@@ -10565,6 +10649,13 @@ __metadata:
languageName: node
linkType: hard
+"@sinclair/typebox@npm:^0.34.0":
+ version: 0.34.52
+ resolution: "@sinclair/typebox@npm:0.34.52"
+ checksum: 10/693a7ab6c8935cbb6e89698bd75ac465038ecfff8b8ad22c50ad6d93a049b0e7cfe4d759200d0401707c5679d6f7a3791fd6dee139bcbb250fa3aae3c17e8bd1
+ languageName: node
+ linkType: hard
+
"@sindresorhus/is@npm:^4.6.0":
version: 4.6.0
resolution: "@sindresorhus/is@npm:4.6.0"
@@ -10579,7 +10670,7 @@ __metadata:
languageName: node
linkType: hard
-"@sinonjs/commons@npm:^3.0.0":
+"@sinonjs/commons@npm:^3.0.0, @sinonjs/commons@npm:^3.0.1":
version: 3.0.1
resolution: "@sinonjs/commons@npm:3.0.1"
dependencies:
@@ -10597,6 +10688,15 @@ __metadata:
languageName: node
linkType: hard
+"@sinonjs/fake-timers@npm:^15.4.0":
+ version: 15.4.0
+ resolution: "@sinonjs/fake-timers@npm:15.4.0"
+ dependencies:
+ "@sinonjs/commons": "npm:^3.0.1"
+ checksum: 10/3960a9fe065f38a4228c66d184eeb101e8a6af9cbfc8454dd5d45ac397201da72134048d4e808a25993494885b172dd6deecdad9949bbf4c1d3a220ef561f6cc
+ languageName: node
+ linkType: hard
+
"@slorber/remark-comment@npm:^1.0.0":
version: 1.0.0
resolution: "@slorber/remark-comment@npm:1.0.0"
@@ -11014,30 +11114,6 @@ __metadata:
languageName: node
linkType: hard
-"@ts-bridge/cli@npm:^0.6.4":
- version: 0.6.4
- resolution: "@ts-bridge/cli@npm:0.6.4"
- dependencies:
- "@ts-bridge/resolver": "npm:^0.2.0"
- chalk: "npm:^5.3.0"
- cjs-module-lexer: "npm:^1.3.1"
- yargs: "npm:^17.7.2"
- peerDependencies:
- typescript: ">=4.8.0"
- bin:
- ts-bridge: ./dist/index.js
- tsbridge: ./dist/index.js
- checksum: 10/257ee0cacec71c1b3cc018825088e06b4bd554ba5fe95bdb98c4c82edd6cd4bcff1054d351e6c7cdfdd3bd2145a055b5d14fa453a6ece761645e42b48b88e9a0
- languageName: node
- linkType: hard
-
-"@ts-bridge/resolver@npm:^0.2.0":
- version: 0.2.0
- resolution: "@ts-bridge/resolver@npm:0.2.0"
- checksum: 10/d4cfd1f47e9648a5f9c893b1b076adabde3a57cbe81ef823bcbbcc77a122fb6f06d99f40ff48198f8dc766bfc4b3b351d4e87cfcf2db64f7e6db924eb82a5db1
- languageName: node
- linkType: hard
-
"@ts-morph/common@npm:~0.29.0":
version: 0.29.0
resolution: "@ts-morph/common@npm:0.29.0"
@@ -11322,7 +11398,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1":
+"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1, @types/istanbul-lib-coverage@npm:^2.0.6":
version: 2.0.6
resolution: "@types/istanbul-lib-coverage@npm:2.0.6"
checksum: 10/3feac423fd3e5449485afac999dcfcb3d44a37c830af898b689fadc65d26526460bedb889db278e0d4d815a670331796494d073a10ee6e3a6526301fe7415778
@@ -11338,7 +11414,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/istanbul-reports@npm:^3.0.0":
+"@types/istanbul-reports@npm:^3.0.0, @types/istanbul-reports@npm:^3.0.4":
version: 3.0.4
resolution: "@types/istanbul-reports@npm:3.0.4"
dependencies:
@@ -11398,6 +11474,22 @@ __metadata:
languageName: node
linkType: hard
+"@types/lodash-es@npm:^4.17.12":
+ version: 4.17.12
+ resolution: "@types/lodash-es@npm:4.17.12"
+ dependencies:
+ "@types/lodash": "npm:*"
+ checksum: 10/56b9a433348b11c31051c6fa9028540a033a08fb80b400c589d740446c19444d73b217cf1471d4036448ef686a83e8cf2a35d1fadcb3f2105f26701f94aebb07
+ languageName: node
+ linkType: hard
+
+"@types/lodash@npm:*":
+ version: 4.17.24
+ resolution: "@types/lodash@npm:4.17.24"
+ checksum: 10/0f2082565f60f9787eefc046edc38458054512be5a8b3584ef0bad5fd9e85d0ab55ec5a1fbfae1ed6ba015cf1f9e837d5fb4da1f99fc60b8f74b2a46146fb00f
+ languageName: node
+ linkType: hard
+
"@types/lodash@npm:^4.14.191, @types/lodash@npm:^4.17.20":
version: 4.17.20
resolution: "@types/lodash@npm:4.17.20"
@@ -11655,7 +11747,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/stack-utils@npm:^2.0.0":
+"@types/stack-utils@npm:^2.0.0, @types/stack-utils@npm:^2.0.3":
version: 2.0.3
resolution: "@types/stack-utils@npm:2.0.3"
checksum: 10/72576cc1522090fe497337c2b99d9838e320659ac57fa5560fcbdcbafcf5d0216c6b3a0a8a4ee4fdb3b1f5e3420aa4f6223ab57b82fef3578bec3206425c6cf5
@@ -11740,6 +11832,15 @@ __metadata:
languageName: node
linkType: hard
+"@types/yargs@npm:^17.0.33":
+ version: 17.0.35
+ resolution: "@types/yargs@npm:17.0.35"
+ dependencies:
+ "@types/yargs-parser": "npm:*"
+ checksum: 10/47bcd4476a4194ea11617ea71cba8a1eddf5505fc39c44336c1a08d452a0de4486aedbc13f47a017c8efbcb5a8aa358d976880663732ebcbc6dbcbbecadb0581
+ languageName: node
+ linkType: hard
+
"@typescript-eslint/eslint-plugin@npm:8.54.0, @typescript-eslint/eslint-plugin@npm:^8.48.0":
version: 8.54.0
resolution: "@typescript-eslint/eslint-plugin@npm:8.54.0"
@@ -11882,6 +11983,13 @@ __metadata:
languageName: node
linkType: hard
+"@ungap/structured-clone@npm:^1.3.0":
+ version: 1.3.3
+ resolution: "@ungap/structured-clone@npm:1.3.3"
+ checksum: 10/ccdb7fc0a7055e361f57ded33030b9c1a06398e48db35ab1cdae7a03f82e5a1f5342bcf66781dde6364584b44c7739f8f320dff992d318051b69805aaee10d9f
+ languageName: node
+ linkType: hard
+
"@vercel/stega@npm:^0.1.2":
version: 0.1.2
resolution: "@vercel/stega@npm:0.1.2"
@@ -12383,7 +12491,7 @@ __metadata:
languageName: node
linkType: hard
-"ansi-styles@npm:^5.0.0":
+"ansi-styles@npm:^5.0.0, ansi-styles@npm:^5.2.0":
version: 5.2.0
resolution: "ansi-styles@npm:5.2.0"
checksum: 10/d7f4e97ce0623aea6bc0d90dcd28881ee04cba06c570b97fd3391bd7a268eedfd9d5e2dd4fdcbdd82b8105df5faf6f24aaedc08eaf3da898e702db5948f63469
@@ -12404,7 +12512,7 @@ __metadata:
languageName: node
linkType: hard
-"anymatch@npm:^3.0.3, anymatch@npm:~3.1.2":
+"anymatch@npm:^3.0.3, anymatch@npm:^3.1.3, anymatch@npm:~3.1.2":
version: 3.1.3
resolution: "anymatch@npm:3.1.3"
dependencies:
@@ -12625,6 +12733,19 @@ __metadata:
languageName: node
linkType: hard
+"babel-plugin-istanbul@npm:^7.0.1":
+ version: 7.0.1
+ resolution: "babel-plugin-istanbul@npm:7.0.1"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.0.0"
+ "@istanbuljs/load-nyc-config": "npm:^1.0.0"
+ "@istanbuljs/schema": "npm:^0.1.3"
+ istanbul-lib-instrument: "npm:^6.0.2"
+ test-exclude: "npm:^6.0.0"
+ checksum: 10/fe9f865f975aaa7a033de9ccb2b63fdcca7817266c5e98d3e02ac7ffd774c695093d215302796cb3770a71ef4574e7a9b298504c3c0c104cf4b48c8eda67b2a6
+ languageName: node
+ linkType: hard
+
"babel-plugin-jest-hoist@npm:^29.6.3":
version: 29.6.3
resolution: "babel-plugin-jest-hoist@npm:29.6.3"
@@ -12710,6 +12831,31 @@ __metadata:
languageName: node
linkType: hard
+"babel-preset-current-node-syntax@npm:^1.2.0":
+ version: 1.2.0
+ resolution: "babel-preset-current-node-syntax@npm:1.2.0"
+ dependencies:
+ "@babel/plugin-syntax-async-generators": "npm:^7.8.4"
+ "@babel/plugin-syntax-bigint": "npm:^7.8.3"
+ "@babel/plugin-syntax-class-properties": "npm:^7.12.13"
+ "@babel/plugin-syntax-class-static-block": "npm:^7.14.5"
+ "@babel/plugin-syntax-import-attributes": "npm:^7.24.7"
+ "@babel/plugin-syntax-import-meta": "npm:^7.10.4"
+ "@babel/plugin-syntax-json-strings": "npm:^7.8.3"
+ "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4"
+ "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3"
+ "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4"
+ "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3"
+ "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3"
+ "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3"
+ "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5"
+ "@babel/plugin-syntax-top-level-await": "npm:^7.14.5"
+ peerDependencies:
+ "@babel/core": ^7.0.0 || ^8.0.0-0
+ checksum: 10/3608fa671cfa46364ea6ec704b8fcdd7514b7b70e6ec09b1199e13ae73ed346c51d5ce2cb6d4d5b295f6a3f2cad1fdeec2308aa9e037002dd7c929194cc838ea
+ languageName: node
+ linkType: hard
+
"babel-preset-jest@npm:^29.6.3":
version: 29.6.3
resolution: "babel-preset-jest@npm:29.6.3"
@@ -13487,6 +13633,13 @@ __metadata:
languageName: node
linkType: hard
+"ci-info@npm:^4.2.0":
+ version: 4.4.0
+ resolution: "ci-info@npm:4.4.0"
+ checksum: 10/dfded0c630267d89660c8abb988ac8395a382bdfefedcc03e3e2858523312c5207db777c239c34774e3fcff11f015477c19d2ac8a58ea58aa476614a2e64f434
+ languageName: node
+ linkType: hard
+
"cipher-base@npm:^1.0.0, cipher-base@npm:^1.0.1, cipher-base@npm:^1.0.3":
version: 1.0.4
resolution: "cipher-base@npm:1.0.4"
@@ -13497,7 +13650,7 @@ __metadata:
languageName: node
linkType: hard
-"cjs-module-lexer@npm:^1.0.0, cjs-module-lexer@npm:^1.3.1":
+"cjs-module-lexer@npm:^1.0.0":
version: 1.4.0
resolution: "cjs-module-lexer@npm:1.4.0"
checksum: 10/b041096749792526120d8b8756929f8ef5dd4596502a0e1013f857e3027acd6091915fea77037921d70ee1a99988a100d994d3d3c2e323b04dd4c5ffd516cf13
@@ -15844,6 +15997,20 @@ __metadata:
languageName: node
linkType: hard
+"expect@npm:30.4.1":
+ version: 30.4.1
+ resolution: "expect@npm:30.4.1"
+ dependencies:
+ "@jest/expect-utils": "npm:30.4.1"
+ "@jest/get-type": "npm:30.1.0"
+ jest-matcher-utils: "npm:30.4.1"
+ jest-message-util: "npm:30.4.1"
+ jest-mock: "npm:30.4.1"
+ jest-util: "npm:30.4.1"
+ checksum: 10/f25051e5073c55369199ec3108ac01c60074bd09dad0b5a6c9fe40596438051cb52607e0e97505126422535b8d0dacab13aa29bb14e9fac71630bc710201a3f1
+ languageName: node
+ linkType: hard
+
"expect@npm:^29.0.0, expect@npm:^29.7.0":
version: 29.7.0
resolution: "expect@npm:29.7.0"
@@ -16097,7 +16264,7 @@ __metadata:
languageName: node
linkType: hard
-"fb-watchman@npm:^2.0.0":
+"fb-watchman@npm:^2.0.0, fb-watchman@npm:^2.0.2":
version: 2.0.2
resolution: "fb-watchman@npm:2.0.2"
dependencies:
@@ -16437,7 +16604,7 @@ __metadata:
languageName: node
linkType: hard
-"fsevents@npm:^2.3.2, fsevents@npm:~2.3.2, fsevents@npm:~2.3.3":
+"fsevents@npm:^2.3.2, fsevents@npm:^2.3.3, fsevents@npm:~2.3.2, fsevents@npm:~2.3.3":
version: 2.3.3
resolution: "fsevents@npm:2.3.3"
dependencies:
@@ -16447,7 +16614,7 @@ __metadata:
languageName: node
linkType: hard
-"fsevents@patch:fsevents@npm%3A^2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin":
+"fsevents@patch:fsevents@npm%3A^2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A^2.3.3#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin":
version: 2.3.3
resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1"
dependencies:
@@ -17941,7 +18108,7 @@ __metadata:
languageName: node
linkType: hard
-"istanbul-lib-instrument@npm:^6.0.0":
+"istanbul-lib-instrument@npm:^6.0.0, istanbul-lib-instrument@npm:^6.0.2":
version: 6.0.3
resolution: "istanbul-lib-instrument@npm:6.0.3"
dependencies:
@@ -18115,6 +18282,18 @@ __metadata:
languageName: node
linkType: hard
+"jest-diff@npm:30.4.1":
+ version: 30.4.1
+ resolution: "jest-diff@npm:30.4.1"
+ dependencies:
+ "@jest/diff-sequences": "npm:30.4.0"
+ "@jest/get-type": "npm:30.1.0"
+ chalk: "npm:^4.1.2"
+ pretty-format: "npm:30.4.1"
+ checksum: 10/594212df96bf101170afdb7eebd188d6d7d27241cbdd18b61d95f1142a3c94ae3b270377d15e719fb3c5efe4458d32acba8ad13dd6230dd7d6917a9eebb32625
+ languageName: node
+ linkType: hard
+
"jest-diff@npm:^29.7.0":
version: 29.7.0
resolution: "jest-diff@npm:29.7.0"
@@ -18191,6 +18370,28 @@ __metadata:
languageName: node
linkType: hard
+"jest-haste-map@npm:30.4.1":
+ version: 30.4.1
+ resolution: "jest-haste-map@npm:30.4.1"
+ dependencies:
+ "@jest/types": "npm:30.4.1"
+ "@types/node": "npm:*"
+ anymatch: "npm:^3.1.3"
+ fb-watchman: "npm:^2.0.2"
+ fsevents: "npm:^2.3.3"
+ graceful-fs: "npm:^4.2.11"
+ jest-regex-util: "npm:30.4.0"
+ jest-util: "npm:30.4.1"
+ jest-worker: "npm:30.4.1"
+ picomatch: "npm:^4.0.3"
+ walker: "npm:^1.0.8"
+ dependenciesMeta:
+ fsevents:
+ optional: true
+ checksum: 10/d26404c7258d03fa423604191bca39707438ca1e62a9a471c92fcd468fa386cbdce2c50b3834fb830b25836e3eee34e3070d22b016b42f0ab626c157f5726eeb
+ languageName: node
+ linkType: hard
+
"jest-haste-map@npm:^29.7.0":
version: 29.7.0
resolution: "jest-haste-map@npm:29.7.0"
@@ -18224,6 +18425,18 @@ __metadata:
languageName: node
linkType: hard
+"jest-matcher-utils@npm:30.4.1":
+ version: 30.4.1
+ resolution: "jest-matcher-utils@npm:30.4.1"
+ dependencies:
+ "@jest/get-type": "npm:30.1.0"
+ chalk: "npm:^4.1.2"
+ jest-diff: "npm:30.4.1"
+ pretty-format: "npm:30.4.1"
+ checksum: 10/4da6e5c7fe5903fae7394233ea4b892567fb027065670c03096d01be0b389f858055c5ade20d59e82fedec6f3287e6f1720de526cd9a9ad3495432320adb9194
+ languageName: node
+ linkType: hard
+
"jest-matcher-utils@npm:^29.7.0":
version: 29.7.0
resolution: "jest-matcher-utils@npm:29.7.0"
@@ -18236,6 +18449,24 @@ __metadata:
languageName: node
linkType: hard
+"jest-message-util@npm:30.4.1":
+ version: 30.4.1
+ resolution: "jest-message-util@npm:30.4.1"
+ dependencies:
+ "@babel/code-frame": "npm:^7.27.1"
+ "@jest/types": "npm:30.4.1"
+ "@types/stack-utils": "npm:^2.0.3"
+ chalk: "npm:^4.1.2"
+ graceful-fs: "npm:^4.2.11"
+ jest-util: "npm:30.4.1"
+ picomatch: "npm:^4.0.3"
+ pretty-format: "npm:30.4.1"
+ slash: "npm:^3.0.0"
+ stack-utils: "npm:^2.0.6"
+ checksum: 10/f83894efa37aa9c61c0a559b1027ecdb0d0cd8afd3e8ea74e797c707d58daea814e72f04b6db0bb6a148c12ae203e9c6e6c5544832ca5fae286c4f80c18ddc3f
+ languageName: node
+ linkType: hard
+
"jest-message-util@npm:^29.7.0":
version: 29.7.0
resolution: "jest-message-util@npm:29.7.0"
@@ -18253,6 +18484,17 @@ __metadata:
languageName: node
linkType: hard
+"jest-mock@npm:30.4.1":
+ version: 30.4.1
+ resolution: "jest-mock@npm:30.4.1"
+ dependencies:
+ "@jest/types": "npm:30.4.1"
+ "@types/node": "npm:*"
+ jest-util: "npm:30.4.1"
+ checksum: 10/8d0c2794130217b9030b888ce380fe57d82388eec19351bd666440ba46f1e24a7e2bdf42cbe9bcfda2b881d4c0ea09db3c80131b9ab788fb5224af2a1339b422
+ languageName: node
+ linkType: hard
+
"jest-mock@npm:^29.7.0":
version: 29.7.0
resolution: "jest-mock@npm:29.7.0"
@@ -18276,6 +18518,13 @@ __metadata:
languageName: node
linkType: hard
+"jest-regex-util@npm:30.4.0":
+ version: 30.4.0
+ resolution: "jest-regex-util@npm:30.4.0"
+ checksum: 10/8664fcc1d07c8236a3bd012c0f06ae9d14d96e758b32ee340a3a7c4c326d0b5052d8c4ae4f4c4184f08bf78723d905352f22923647df9658ace3604f03bf074f
+ languageName: node
+ linkType: hard
+
"jest-regex-util@npm:^29.6.3":
version: 29.6.3
resolution: "jest-regex-util@npm:29.6.3"
@@ -18379,6 +18628,35 @@ __metadata:
languageName: node
linkType: hard
+"jest-snapshot@npm:30.4.1":
+ version: 30.4.1
+ resolution: "jest-snapshot@npm:30.4.1"
+ dependencies:
+ "@babel/core": "npm:^7.27.4"
+ "@babel/generator": "npm:^7.27.5"
+ "@babel/plugin-syntax-jsx": "npm:^7.27.1"
+ "@babel/plugin-syntax-typescript": "npm:^7.27.1"
+ "@babel/types": "npm:^7.27.3"
+ "@jest/expect-utils": "npm:30.4.1"
+ "@jest/get-type": "npm:30.1.0"
+ "@jest/snapshot-utils": "npm:30.4.1"
+ "@jest/transform": "npm:30.4.1"
+ "@jest/types": "npm:30.4.1"
+ babel-preset-current-node-syntax: "npm:^1.2.0"
+ chalk: "npm:^4.1.2"
+ expect: "npm:30.4.1"
+ graceful-fs: "npm:^4.2.11"
+ jest-diff: "npm:30.4.1"
+ jest-matcher-utils: "npm:30.4.1"
+ jest-message-util: "npm:30.4.1"
+ jest-util: "npm:30.4.1"
+ pretty-format: "npm:30.4.1"
+ semver: "npm:^7.7.2"
+ synckit: "npm:^0.11.8"
+ checksum: 10/6135108d3e0e9fb93ed10fd9ad91d8dbe56f90a9ea84c32a0b551518f8c71f363299dcc301717f3ed82cfe2a276d7993d2b3ccfabea3e8020d49ae8b0f9b6cd8
+ languageName: node
+ linkType: hard
+
"jest-snapshot@npm:^29.7.0":
version: 29.7.0
resolution: "jest-snapshot@npm:29.7.0"
@@ -18407,6 +18685,20 @@ __metadata:
languageName: node
linkType: hard
+"jest-util@npm:30.4.1":
+ version: 30.4.1
+ resolution: "jest-util@npm:30.4.1"
+ dependencies:
+ "@jest/types": "npm:30.4.1"
+ "@types/node": "npm:*"
+ chalk: "npm:^4.1.2"
+ ci-info: "npm:^4.2.0"
+ graceful-fs: "npm:^4.2.11"
+ picomatch: "npm:^4.0.3"
+ checksum: 10/603093e12076906afcf28be514d5b7ac4e3c0e26997b0047614cf2a308b65d773137304a1fb011d747517e881aeed067f6606b9937f5b838d67f6e5734b49ebe
+ languageName: node
+ linkType: hard
+
"jest-util@npm:^26.0.0":
version: 26.6.2
resolution: "jest-util@npm:26.6.2"
@@ -18474,6 +18766,19 @@ __metadata:
languageName: node
linkType: hard
+"jest-worker@npm:30.4.1":
+ version: 30.4.1
+ resolution: "jest-worker@npm:30.4.1"
+ dependencies:
+ "@types/node": "npm:*"
+ "@ungap/structured-clone": "npm:^1.3.0"
+ jest-util: "npm:30.4.1"
+ merge-stream: "npm:^2.0.0"
+ supports-color: "npm:^8.1.1"
+ checksum: 10/ff6af73c9097fc07e90490d3e1e354c702390ef66f7f40054a15dd6d56809a25634179969ff80bde782a6c645f49fa48bf3aacfe7d05af7315c48020f9b2b1cd
+ languageName: node
+ linkType: hard
+
"jest-worker@npm:^27.4.5":
version: 27.5.1
resolution: "jest-worker@npm:27.5.1"
@@ -21434,6 +21739,13 @@ __metadata:
languageName: node
linkType: hard
+"picomatch@npm:^4.0.3":
+ version: 4.0.5
+ resolution: "picomatch@npm:4.0.5"
+ checksum: 10/8bad770af9dcdb7f94ad1a893adcbe08a97d75a18872f8fed37161d3124217471c402b3929f051532f795f4ff2e53dcebb1644df4c1a5f3a9c476fef3b9f8c51
+ languageName: node
+ linkType: hard
+
"picomatch@npm:^4.0.4":
version: 4.0.4
resolution: "picomatch@npm:4.0.4"
@@ -21455,6 +21767,13 @@ __metadata:
languageName: node
linkType: hard
+"pirates@npm:^4.0.7":
+ version: 4.0.7
+ resolution: "pirates@npm:4.0.7"
+ checksum: 10/2427f371366081ae42feb58214f04805d6b41d6b84d74480ebcc9e0ddbd7105a139f7c653daeaf83ad8a1a77214cf07f64178e76de048128fec501eab3305a96
+ languageName: node
+ linkType: hard
+
"pkg-dir@npm:^4.2.0":
version: 4.2.0
resolution: "pkg-dir@npm:4.2.0"
@@ -22385,6 +22704,18 @@ __metadata:
languageName: node
linkType: hard
+"pretty-format@npm:30.4.1":
+ version: 30.4.1
+ resolution: "pretty-format@npm:30.4.1"
+ dependencies:
+ "@jest/schemas": "npm:30.4.1"
+ ansi-styles: "npm:^5.2.0"
+ react-is-18: "npm:react-is@^18.3.1"
+ react-is-19: "npm:react-is@^19.2.5"
+ checksum: 10/60311ef47a646eeaec0432efe66290cb6f0d2eccb123a28ad4ab6d7e53087bc62db91cfd54c3cc00c89d6875aefb2bf6264381b6c9411ce6bff3d6aa8280abad
+ languageName: node
+ linkType: hard
+
"pretty-format@npm:^29.0.0, pretty-format@npm:^29.7.0":
version: 29.7.0
resolution: "pretty-format@npm:29.7.0"
@@ -22746,6 +23077,20 @@ __metadata:
languageName: node
linkType: hard
+"react-is-18@npm:react-is@^18.3.1, react-is@npm:^18.0.0":
+ version: 18.3.1
+ resolution: "react-is@npm:18.3.1"
+ checksum: 10/d5f60c87d285af24b1e1e7eaeb123ec256c3c8bdea7061ab3932e3e14685708221bf234ec50b21e10dd07f008f1b966a2730a0ce4ff67905b3872ff2042aec22
+ languageName: node
+ linkType: hard
+
+"react-is-19@npm:react-is@^19.2.5":
+ version: 19.2.7
+ resolution: "react-is@npm:19.2.7"
+ checksum: 10/ae0d3ae7638aa2fa2a82a78a817daf2806e57fa0aef357d07e1e8d1e9a301902e5967168e9334b5816db0df8fa980a725cd57569ba5a9e6e76a71e117b18be04
+ languageName: node
+ linkType: hard
+
"react-is@npm:^16.13.1, react-is@npm:^16.6.0, react-is@npm:^16.7.0":
version: 16.13.1
resolution: "react-is@npm:16.13.1"
@@ -22753,13 +23098,6 @@ __metadata:
languageName: node
linkType: hard
-"react-is@npm:^18.0.0":
- version: 18.3.1
- resolution: "react-is@npm:18.3.1"
- checksum: 10/d5f60c87d285af24b1e1e7eaeb123ec256c3c8bdea7061ab3932e3e14685708221bf234ec50b21e10dd07f008f1b966a2730a0ce4ff67905b3872ff2042aec22
- languageName: node
- linkType: hard
-
"react-json-view-lite@npm:^2.3.0":
version: 2.5.0
resolution: "react-json-view-lite@npm:2.5.0"
@@ -23596,6 +23934,15 @@ __metadata:
languageName: node
linkType: hard
+"semver@npm:^7.7.2":
+ version: 7.8.5
+ resolution: "semver@npm:7.8.5"
+ bin:
+ semver: bin/semver.js
+ checksum: 10/9b01d2ff11e6e4a4539b7ca3c5f280c8704cb397a28504469f2ed4f00ad2194748d756647362a9712fff30984d15772ab7f083108c2fb508e2096ae9e708f22c
+ languageName: node
+ linkType: hard
+
"send@npm:~0.19.0, send@npm:~0.19.1":
version: 0.19.2
resolution: "send@npm:0.19.2"
@@ -24175,7 +24522,7 @@ __metadata:
languageName: node
linkType: hard
-"stack-utils@npm:^2.0.3":
+"stack-utils@npm:^2.0.3, stack-utils@npm:^2.0.6":
version: 2.0.6
resolution: "stack-utils@npm:2.0.6"
dependencies:
@@ -24413,7 +24760,7 @@ __metadata:
languageName: node
linkType: hard
-"supports-color@npm:^8, supports-color@npm:^8.0.0":
+"supports-color@npm:^8, supports-color@npm:^8.0.0, supports-color@npm:^8.1.1":
version: 8.1.1
resolution: "supports-color@npm:8.1.1"
dependencies:
@@ -24460,6 +24807,15 @@ __metadata:
languageName: node
linkType: hard
+"synckit@npm:^0.11.8":
+ version: 0.11.13
+ resolution: "synckit@npm:0.11.13"
+ dependencies:
+ "@pkgr/core": "npm:^0.3.6"
+ checksum: 10/188544a829dbd38abd144281960835c1f8027aaa495b7c40d39ebf0c1c63a4a41c0edc42818b7ada9b5c0c15fba2f625b472220d128798fe98f9181fed84e6a2
+ languageName: node
+ linkType: hard
+
"synckit@npm:^0.9.1":
version: 0.9.2
resolution: "synckit@npm:0.9.2"
@@ -25954,7 +26310,7 @@ __metadata:
languageName: node
linkType: hard
-"write-file-atomic@npm:^5.0.0":
+"write-file-atomic@npm:^5.0.0, write-file-atomic@npm:^5.0.1":
version: 5.0.1
resolution: "write-file-atomic@npm:5.0.1"
dependencies: