├── .depcheckrc.yml ├── .editorconfig ├── .gitattributes ├── .github ├── CODEOWNERS ├── dependabot.yml ├── pull_request_template.md └── workflows │ ├── add-wallet-framework-team-prs-and-issues-to-project.yml │ ├── changelog-check.yml │ ├── create-update-issues.yaml │ ├── ensure-blocking-pr-labels-absent.yml │ ├── lint-build-test.yml │ ├── main.yml │ ├── publish-preview.yml │ ├── publish-release.yml │ └── security-code-scanner.yml ├── .gitignore ├── .nvmrc ├── .prettierrc.js ├── .yarn └── plugins │ └── @yarnpkg │ └── plugin-allow-scripts.cjs ├── .yarnrc.yml ├── README.md ├── babel.config.js ├── docs ├── contributing.md ├── controller-guidelines.md ├── migrate-tags.md ├── package-guidelines.md ├── package-migration-process-guide.md └── reviewing-release-prs.md ├── eslint-warning-thresholds.json ├── eslint.config.mjs ├── jest.config.packages.js ├── jest.config.scripts.js ├── package.json ├── packages ├── account-tree-controller │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── AccountTreeController.test.ts │ │ ├── AccountTreeController.ts │ │ ├── index.ts │ │ ├── names.test.ts │ │ └── names.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── accounts-controller │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── AccountsController.test.ts │ │ ├── AccountsController.ts │ │ ├── index.ts │ │ ├── tests │ │ │ ├── mocks.test.ts │ │ │ └── mocks.ts │ │ ├── types.ts │ │ └── utils.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── address-book-controller │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── AddressBookController.test.ts │ │ ├── AddressBookController.ts │ │ └── index.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── announcement-controller │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── AnnouncementController.test.ts │ │ ├── AnnouncementController.ts │ │ └── index.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── app-metadata-controller │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── AppMetadataController.test.ts │ │ ├── AppMetadataController.ts │ │ └── index.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── approval-controller │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── ApprovalController.test.ts │ │ ├── ApprovalController.ts │ │ ├── errors.ts │ │ └── index.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── assets-controllers │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── jest.environment.js │ ├── package.json │ ├── src │ │ ├── AccountTrackerController.test.ts │ │ ├── AccountTrackerController.ts │ │ ├── AssetsContractController.test.ts │ │ ├── AssetsContractController.ts │ │ ├── AssetsContractControllerWithNetworkClientId.test.ts │ │ ├── CurrencyRateController.test.ts │ │ ├── CurrencyRateController.ts │ │ ├── DeFiPositionsController │ │ │ ├── DeFiPositionsController.test.ts │ │ │ ├── DeFiPositionsController.ts │ │ │ ├── __fixtures__ │ │ │ │ ├── mock-responses.ts │ │ │ │ └── mock-result.ts │ │ │ ├── calculate-defi-metrics.test.ts │ │ │ ├── calculate-defi-metrics.ts │ │ │ ├── fetch-positions.test.ts │ │ │ ├── fetch-positions.ts │ │ │ ├── group-defi-positions.test.ts │ │ │ └── group-defi-positions.ts │ │ ├── MultichainAssetsController │ │ │ ├── MultichainAssetsController.test.ts │ │ │ ├── MultichainAssetsController.ts │ │ │ ├── index.ts │ │ │ └── utils.ts │ │ ├── MultichainAssetsRatesController │ │ │ ├── MultichainAssetsRatesController.test.ts │ │ │ ├── MultichainAssetsRatesController.ts │ │ │ ├── constant.ts │ │ │ └── index.ts │ │ ├── MultichainBalancesController │ │ │ ├── MultichainBalancesController.test.ts │ │ │ ├── MultichainBalancesController.ts │ │ │ └── index.ts │ │ ├── NftController.test.ts │ │ ├── NftController.ts │ │ ├── NftDetectionController.test.ts │ │ ├── NftDetectionController.ts │ │ ├── RatesController │ │ │ ├── RatesController.test.ts │ │ │ ├── RatesController.ts │ │ │ ├── index.ts │ │ │ └── types.ts │ │ ├── Standards │ │ │ ├── ERC20Standard.test.ts │ │ │ ├── ERC20Standard.ts │ │ │ └── NftStandards │ │ │ │ ├── ERC1155 │ │ │ │ ├── ERC1155Standard.test.ts │ │ │ │ └── ERC1155Standard.ts │ │ │ │ └── ERC721 │ │ │ │ ├── ERC721Standard.test.ts │ │ │ │ └── ERC721Standard.ts │ │ ├── TokenBalancesController.test.ts │ │ ├── TokenBalancesController.ts │ │ ├── TokenDetectionController.test.ts │ │ ├── TokenDetectionController.ts │ │ ├── TokenListController.test.ts │ │ ├── TokenListController.ts │ │ ├── TokenRatesController.test.ts │ │ ├── TokenRatesController.ts │ │ ├── TokenSearchDiscoveryDataController │ │ │ ├── TokenSearchDiscoveryDataController.test.ts │ │ │ ├── TokenSearchDiscoveryDataController.ts │ │ │ ├── index.ts │ │ │ └── types.ts │ │ ├── TokensController.test.ts │ │ ├── TokensController.ts │ │ ├── assetsUtil.test.ts │ │ ├── assetsUtil.ts │ │ ├── constants.ts │ │ ├── crypto-compare-service │ │ │ ├── crypto-compare.test.ts │ │ │ ├── crypto-compare.ts │ │ │ └── index.ts │ │ ├── index.ts │ │ ├── multi-chain-accounts-service │ │ │ ├── index.ts │ │ │ ├── mocks │ │ │ │ ├── mock-get-balances.ts │ │ │ │ └── mock-get-supported-networks.ts │ │ │ ├── multi-chain-accounts.test.ts │ │ │ ├── multi-chain-accounts.ts │ │ │ └── types.ts │ │ ├── multicall.test.ts │ │ ├── multicall.ts │ │ ├── token-prices-service │ │ │ ├── abstract-token-prices-service.ts │ │ │ ├── codefi-v2.test.ts │ │ │ ├── codefi-v2.ts │ │ │ ├── index.test.ts │ │ │ └── index.ts │ │ ├── token-service.test.ts │ │ └── token-service.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── base-controller │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── BaseControllerV2.test.ts │ │ ├── BaseControllerV2.ts │ │ ├── Messenger.test.ts │ │ ├── Messenger.ts │ │ ├── RestrictedMessenger.test.ts │ │ ├── RestrictedMessenger.ts │ │ └── index.ts │ ├── tests │ │ └── helpers.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── bridge-controller │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── __snapshots__ │ │ │ └── bridge-controller.test.ts.snap │ │ ├── bridge-controller.test.ts │ │ ├── bridge-controller.ts │ │ ├── constants │ │ │ ├── bridge.ts │ │ │ ├── chains.ts │ │ │ ├── swaps.ts │ │ │ ├── tokens.ts │ │ │ └── traces.ts │ │ ├── index.ts │ │ ├── selectors.test.ts │ │ ├── selectors.ts │ │ ├── types.ts │ │ └── utils │ │ │ ├── __snapshots__ │ │ │ └── fetch.test.ts.snap │ │ │ ├── assets.test.ts │ │ │ ├── assets.ts │ │ │ ├── balance.test.ts │ │ │ ├── balance.ts │ │ │ ├── bridge.test.ts │ │ │ ├── bridge.ts │ │ │ ├── caip-formatters.test.ts │ │ │ ├── caip-formatters.ts │ │ │ ├── feature-flags.test.ts │ │ │ ├── feature-flags.ts │ │ │ ├── fetch.test.ts │ │ │ ├── fetch.ts │ │ │ ├── metrics │ │ │ ├── constants.ts │ │ │ ├── properties.test.ts │ │ │ ├── properties.ts │ │ │ └── types.ts │ │ │ ├── quote.test.ts │ │ │ ├── quote.ts │ │ │ ├── snaps.ts │ │ │ ├── validators.test.ts │ │ │ └── validators.ts │ ├── tests │ │ ├── mock-quotes-erc20-erc20.json │ │ ├── mock-quotes-erc20-native.json │ │ ├── mock-quotes-native-erc20-eth.json │ │ ├── mock-quotes-native-erc20.json │ │ └── mock-quotes-sol-erc20.json │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── bridge-status-controller │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── __snapshots__ │ │ │ └── bridge-status-controller.test.ts.snap │ │ ├── bridge-status-controller.test.ts │ │ ├── bridge-status-controller.ts │ │ ├── constants.ts │ │ ├── index.ts │ │ ├── types.ts │ │ └── utils │ │ │ ├── __snapshots__ │ │ │ └── validators.test.ts.snap │ │ │ ├── bridge-status.test.ts │ │ │ ├── bridge-status.ts │ │ │ ├── gas.test.ts │ │ │ ├── gas.ts │ │ │ ├── metrics.test.ts │ │ │ ├── metrics.ts │ │ │ ├── transaction.test.ts │ │ │ ├── transaction.ts │ │ │ ├── validators.test.ts │ │ │ └── validators.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── build-utils │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── index.ts │ │ └── transforms │ │ │ ├── README.md │ │ │ ├── remove-fenced-code.test.ts │ │ │ ├── remove-fenced-code.ts │ │ │ ├── utils.test.ts │ │ │ └── utils.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── chain-agnostic-permission │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── adapters │ │ │ ├── caip-permission-adapter-accounts.test.ts │ │ │ ├── caip-permission-adapter-accounts.ts │ │ │ ├── caip-permission-adapter-permittedChains.test.ts │ │ │ ├── caip-permission-adapter-permittedChains.ts │ │ │ ├── caip-permission-adapter-session-scopes.test.ts │ │ │ └── caip-permission-adapter-session-scopes.ts │ │ ├── caip25Permission.test.ts │ │ ├── caip25Permission.ts │ │ ├── index.test.ts │ │ ├── index.ts │ │ └── scope │ │ │ ├── assert.test.ts │ │ │ ├── assert.ts │ │ │ ├── authorization.test.ts │ │ │ ├── authorization.ts │ │ │ ├── constants.test.ts │ │ │ ├── constants.ts │ │ │ ├── errors.test.ts │ │ │ ├── errors.ts │ │ │ ├── filter.test.ts │ │ │ ├── filter.ts │ │ │ ├── supported.test.ts │ │ │ ├── supported.ts │ │ │ ├── transform.test.ts │ │ │ ├── transform.ts │ │ │ ├── types.test.ts │ │ │ ├── types.ts │ │ │ ├── validation.test.ts │ │ │ └── validation.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── composable-controller │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── ComposableController.test.ts │ │ ├── ComposableController.ts │ │ └── index.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── controller-utils │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── jest.environment.js │ ├── package.json │ ├── src │ │ ├── constants.ts │ │ ├── create-service-policy.test.ts │ │ ├── create-service-policy.ts │ │ ├── index.test.ts │ │ ├── index.ts │ │ ├── logger.ts │ │ ├── siwe.test.ts │ │ ├── siwe.ts │ │ ├── types.test.ts │ │ ├── types.ts │ │ ├── util.test.ts │ │ └── util.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── delegation-controller │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── DelegationController.test.ts │ │ ├── DelegationController.ts │ │ ├── constants.ts │ │ ├── index.ts │ │ ├── types.ts │ │ └── utils.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── earn-controller │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── EarnController.test.ts │ │ ├── EarnController.ts │ │ ├── index.ts │ │ ├── selectors.test.ts │ │ ├── selectors.ts │ │ └── types.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── eip1193-permission-middleware │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── index.test.ts │ │ ├── index.ts │ │ ├── types.ts │ │ ├── wallet-getPermissions.test.ts │ │ ├── wallet-getPermissions.ts │ │ ├── wallet-requestPermissions.test.ts │ │ ├── wallet-requestPermissions.ts │ │ ├── wallet-revokePermissions.test.ts │ │ └── wallet-revokePermissions.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ ├── typedoc.json │ └── types.ts ├── ens-controller │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── EnsController.test.ts │ │ ├── EnsController.ts │ │ └── index.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── error-reporting-service │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── error-reporting-service.test.ts │ │ ├── error-reporting-service.ts │ │ └── index.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── eth-json-rpc-provider │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── index.test.ts │ │ ├── index.ts │ │ ├── provider-from-engine.test.ts │ │ ├── provider-from-engine.ts │ │ ├── provider-from-middleware.test.ts │ │ ├── provider-from-middleware.ts │ │ ├── safe-event-emitter-provider.test.ts │ │ └── safe-event-emitter-provider.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── foundryup │ ├── .gitignore │ ├── .yarnrc.yml │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── cli.ts │ │ ├── download.ts │ │ ├── extract.ts │ │ ├── foundryup.test.ts │ │ ├── index.ts │ │ ├── options.ts │ │ ├── types.ts │ │ └── utils.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ ├── typedoc.json │ └── types │ │ ├── node:fs.d.ts │ │ └── unzipper.d.ts ├── gas-fee-controller │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── GasFeeController.test.ts │ │ ├── GasFeeController.ts │ │ ├── determineGasFeeCalculations.test.ts │ │ ├── determineGasFeeCalculations.ts │ │ ├── gas-util.test.ts │ │ ├── gas-util.ts │ │ └── index.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── json-rpc-engine │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── JsonRpcEngine.test.ts │ │ ├── JsonRpcEngine.ts │ │ ├── asMiddleware.test.ts │ │ ├── createAsyncMiddleware.test.ts │ │ ├── createAsyncMiddleware.ts │ │ ├── createScaffoldMiddleware.test.ts │ │ ├── createScaffoldMiddleware.ts │ │ ├── getUniqueId.ts │ │ ├── idRemapMiddleware.test.ts │ │ ├── idRemapMiddleware.ts │ │ ├── index.test.ts │ │ ├── index.ts │ │ ├── mergeMiddleware.test.ts │ │ └── mergeMiddleware.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── json-rpc-middleware-stream │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── createEngineStream.ts │ │ ├── createStreamMiddleware.ts │ │ ├── index.test.ts │ │ └── index.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── keyring-controller │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── jest.environment.js │ ├── package.json │ ├── src │ │ ├── KeyringController.test.ts │ │ ├── KeyringController.ts │ │ ├── constants.ts │ │ ├── index.ts │ │ └── types.ts │ ├── tests │ │ └── mocks │ │ │ ├── mockEncryptor.ts │ │ │ ├── mockErc4337Keyring.ts │ │ │ ├── mockKeyring.ts │ │ │ ├── mockShallowKeyring.ts │ │ │ └── mockTransaction.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── logging-controller │ ├── CHANGELOG.md │ ├── LICENCE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── LoggingController.test.ts │ │ ├── LoggingController.ts │ │ ├── index.ts │ │ └── logTypes │ │ │ ├── EthSignLog.ts │ │ │ ├── GenericLog.ts │ │ │ ├── LogType.ts │ │ │ ├── README.md │ │ │ └── index.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── message-manager │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── AbstractMessageManager.test.ts │ │ ├── AbstractMessageManager.ts │ │ ├── DecryptMessageManager.test.ts │ │ ├── DecryptMessageManager.ts │ │ ├── EncryptionPublicKeyManager.test.ts │ │ ├── EncryptionPublicKeyManager.ts │ │ ├── index.ts │ │ ├── types.ts │ │ ├── utils.test.ts │ │ └── utils.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── multichain-api-middleware │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── handlers │ │ │ ├── types.ts │ │ │ ├── wallet-createSession.test.ts │ │ │ ├── wallet-createSession.ts │ │ │ ├── wallet-getSession.test.ts │ │ │ ├── wallet-getSession.ts │ │ │ ├── wallet-invokeMethod.test.ts │ │ │ ├── wallet-invokeMethod.ts │ │ │ ├── wallet-revokeSession.test.ts │ │ │ └── wallet-revokeSession.ts │ │ ├── index.test.ts │ │ ├── index.ts │ │ └── middlewares │ │ │ ├── MultichainMiddlewareManager.test.ts │ │ │ ├── MultichainMiddlewareManager.ts │ │ │ ├── MultichainSubscriptionManager.test.ts │ │ │ ├── MultichainSubscriptionManager.ts │ │ │ ├── multichainMethodCallValidatorMiddleware.test.ts │ │ │ └── multichainMethodCallValidatorMiddleware.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── multichain-network-controller │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── MultichainNetworkController │ │ │ ├── MultichainNetworkController.test.ts │ │ │ └── MultichainNetworkController.ts │ │ ├── MultichainNetworkService │ │ │ ├── AbstractMultichainNetworkService.ts │ │ │ ├── MultichainNetworkService.test.ts │ │ │ └── MultichainNetworkService.ts │ │ ├── api │ │ │ ├── accounts-api.test.ts │ │ │ └── accounts-api.ts │ │ ├── constants.ts │ │ ├── index.ts │ │ ├── types.ts │ │ ├── utils.test.ts │ │ └── utils.ts │ ├── tests │ │ └── utils.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── multichain-transactions-controller │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── MultichainTransactionsController.test.ts │ │ ├── MultichainTransactionsController.ts │ │ ├── constants.ts │ │ └── index.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── multichain │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── adapters │ │ │ ├── caip-permission-adapter-eth-accounts.test.ts │ │ │ ├── caip-permission-adapter-eth-accounts.ts │ │ │ ├── caip-permission-adapter-permittedChains.test.ts │ │ │ ├── caip-permission-adapter-permittedChains.ts │ │ │ ├── caip-permission-adapter-session-scopes.test.ts │ │ │ └── caip-permission-adapter-session-scopes.ts │ │ ├── caip25Permission.test.ts │ │ ├── caip25Permission.ts │ │ ├── constants │ │ │ └── permissions.ts │ │ ├── handlers │ │ │ ├── wallet-getPermissions.test.ts │ │ │ ├── wallet-getPermissions.ts │ │ │ ├── wallet-getSession.test.ts │ │ │ ├── wallet-getSession.ts │ │ │ ├── wallet-invokeMethod.test.ts │ │ │ ├── wallet-invokeMethod.ts │ │ │ ├── wallet-requestPermissions.test.ts │ │ │ ├── wallet-requestPermissions.ts │ │ │ ├── wallet-revokePermissions.test.ts │ │ │ ├── wallet-revokePermissions.ts │ │ │ ├── wallet-revokeSession.test.ts │ │ │ └── wallet-revokeSession.ts │ │ ├── index.test.ts │ │ ├── index.ts │ │ ├── middlewares │ │ │ ├── MultichainMiddlewareManager.test.ts │ │ │ ├── MultichainMiddlewareManager.ts │ │ │ ├── MultichainSubscriptionManager.test.ts │ │ │ ├── MultichainSubscriptionManager.ts │ │ │ ├── multichainMethodCallValidator.test.ts │ │ │ └── multichainMethodCallValidator.ts │ │ └── scope │ │ │ ├── assert.test.ts │ │ │ ├── assert.ts │ │ │ ├── authorization.test.ts │ │ │ ├── authorization.ts │ │ │ ├── constants.test.ts │ │ │ ├── constants.ts │ │ │ ├── errors.test.ts │ │ │ ├── errors.ts │ │ │ ├── filter.test.ts │ │ │ ├── filter.ts │ │ │ ├── supported.test.ts │ │ │ ├── supported.ts │ │ │ ├── transform.test.ts │ │ │ ├── transform.ts │ │ │ ├── types.test.ts │ │ │ ├── types.ts │ │ │ ├── validation.test.ts │ │ │ └── validation.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── name-controller │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── NameController.test.ts │ │ ├── NameController.ts │ │ ├── constants.ts │ │ ├── index.ts │ │ ├── logger.ts │ │ ├── providers │ │ │ ├── ens.test.ts │ │ │ ├── ens.ts │ │ │ ├── etherscan.test.ts │ │ │ ├── etherscan.ts │ │ │ ├── lens.test.ts │ │ │ ├── lens.ts │ │ │ ├── token.test.ts │ │ │ └── token.ts │ │ ├── types.ts │ │ ├── util.ts │ │ └── utils.test.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── network-controller │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── NetworkController.ts │ │ ├── constants.ts │ │ ├── create-auto-managed-network-client.test.ts │ │ ├── create-auto-managed-network-client.ts │ │ ├── create-network-client.ts │ │ ├── index.ts │ │ ├── logger.ts │ │ ├── rpc-service │ │ │ ├── abstract-rpc-service.ts │ │ │ ├── rpc-service-chain.test.ts │ │ │ ├── rpc-service-chain.ts │ │ │ ├── rpc-service-requestable.ts │ │ │ ├── rpc-service.test.ts │ │ │ ├── rpc-service.ts │ │ │ └── shared.ts │ │ └── types.ts │ ├── tests │ │ ├── NetworkController.test.ts │ │ ├── create-network-client.test.ts │ │ ├── helpers.ts │ │ └── provider-api-tests │ │ │ ├── block-hash-in-response.ts │ │ │ ├── block-param.ts │ │ │ ├── helpers.ts │ │ │ ├── no-block-param.ts │ │ │ ├── not-handled-by-middleware.ts │ │ │ ├── rpc-failover.ts │ │ │ └── shared-tests.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── notification-services-controller │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── jest.environment.js │ ├── notification-services │ │ ├── mocks │ │ │ └── package.json │ │ ├── package.json │ │ └── ui │ │ │ └── package.json │ ├── package.json │ ├── push-services │ │ ├── mocks │ │ │ └── package.json │ │ ├── package.json │ │ └── web │ │ │ └── package.json │ ├── src │ │ ├── NotificationServicesController │ │ │ ├── NotificationServicesController.test.ts │ │ │ ├── NotificationServicesController.ts │ │ │ ├── __fixtures__ │ │ │ │ ├── mockAddresses.ts │ │ │ │ ├── mockServices.ts │ │ │ │ └── test-utils.ts │ │ │ ├── constants │ │ │ │ ├── constants.ts │ │ │ │ ├── index.ts │ │ │ │ └── notification-schema.ts │ │ │ ├── index.ts │ │ │ ├── mocks │ │ │ │ ├── index.ts │ │ │ │ ├── mock-feature-announcements.ts │ │ │ │ ├── mock-notification-trigger.ts │ │ │ │ ├── mock-notification-user-storage.ts │ │ │ │ ├── mock-raw-notifications.ts │ │ │ │ ├── mock-snap-notification.ts │ │ │ │ └── mockResponses.ts │ │ │ ├── processors │ │ │ │ ├── index.ts │ │ │ │ ├── process-feature-announcement.test.ts │ │ │ │ ├── process-feature-announcement.ts │ │ │ │ ├── process-notifications.test.ts │ │ │ │ ├── process-notifications.ts │ │ │ │ ├── process-onchain-notifications.test.ts │ │ │ │ ├── process-onchain-notifications.ts │ │ │ │ ├── process-snap-notifications.test.ts │ │ │ │ └── process-snap-notifications.ts │ │ │ ├── services │ │ │ │ ├── feature-announcements.test.ts │ │ │ │ ├── feature-announcements.ts │ │ │ │ ├── onchain-notifications.test.ts │ │ │ │ └── onchain-notifications.ts │ │ │ ├── types │ │ │ │ ├── feature-announcement │ │ │ │ │ ├── feature-announcement.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── type-feature-announcement.ts │ │ │ │ │ └── type-links.ts │ │ │ │ ├── index.ts │ │ │ │ ├── notification │ │ │ │ │ ├── index.ts │ │ │ │ │ └── notification.ts │ │ │ │ ├── on-chain-notification │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── on-chain-notification.ts │ │ │ │ │ └── schema.ts │ │ │ │ ├── snaps │ │ │ │ │ ├── index.ts │ │ │ │ │ └── snaps.ts │ │ │ │ ├── type-utils.ts │ │ │ │ └── user-storage │ │ │ │ │ ├── index.ts │ │ │ │ │ └── user-storage.ts │ │ │ ├── ui │ │ │ │ ├── constants.ts │ │ │ │ └── index.ts │ │ │ └── utils │ │ │ │ ├── utils.test.ts │ │ │ │ └── utils.ts │ │ ├── NotificationServicesPushController │ │ │ ├── NotificationServicesPushController.test.ts │ │ │ ├── NotificationServicesPushController.ts │ │ │ ├── __fixtures__ │ │ │ │ ├── mockMessenger.ts │ │ │ │ └── mockServices.ts │ │ │ ├── index.ts │ │ │ ├── mocks │ │ │ │ ├── index.ts │ │ │ │ └── mockResponse.ts │ │ │ ├── services │ │ │ │ ├── endpoints.ts │ │ │ │ ├── push │ │ │ │ │ ├── push-web.test.ts │ │ │ │ │ └── push-web.ts │ │ │ │ ├── services.test.ts │ │ │ │ └── services.ts │ │ │ ├── types │ │ │ │ ├── firebase.ts │ │ │ │ ├── index.ts │ │ │ │ └── push-service-interface.ts │ │ │ ├── utils │ │ │ │ ├── get-notification-data.test.ts │ │ │ │ ├── get-notification-data.ts │ │ │ │ ├── get-notification-message.test.ts │ │ │ │ ├── get-notification-message.ts │ │ │ │ └── index.ts │ │ │ └── web │ │ │ │ ├── index.ts │ │ │ │ ├── push-utils.test.ts │ │ │ │ └── push-utils.ts │ │ ├── index.ts │ │ └── shared │ │ │ ├── index.ts │ │ │ ├── is-onchain-notification.test.ts │ │ │ ├── is-onchain-notification.ts │ │ │ └── to-raw-notification.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── permission-controller │ ├── .eslintrc.js │ ├── ARCHITECTURE.md │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── Caveat.test.ts │ │ ├── Caveat.ts │ │ ├── Permission.test.ts │ │ ├── Permission.ts │ │ ├── PermissionController.test.ts │ │ ├── PermissionController.ts │ │ ├── SubjectMetadataController.test.ts │ │ ├── SubjectMetadataController.ts │ │ ├── errors.test.ts │ │ ├── errors.ts │ │ ├── index.ts │ │ ├── permission-middleware.ts │ │ ├── rpc-methods │ │ │ ├── getPermissions.test.ts │ │ │ ├── getPermissions.ts │ │ │ ├── index.ts │ │ │ ├── requestPermissions.test.ts │ │ │ ├── requestPermissions.ts │ │ │ ├── revokePermissions.test.ts │ │ │ └── revokePermissions.ts │ │ └── utils.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── permission-log-controller │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── PermissionLogController.ts │ │ ├── enums.ts │ │ └── index.ts │ ├── tests │ │ ├── PermissionLogController.test.ts │ │ ├── helpers.ts │ │ └── index.test.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── phishing-controller │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── PhishingController.test.ts │ │ ├── PhishingController.ts │ │ ├── PhishingDetector.test.ts │ │ ├── PhishingDetector.ts │ │ ├── UrlScanCache.test.ts │ │ ├── UrlScanCache.ts │ │ ├── index.ts │ │ ├── tests │ │ │ └── utils.ts │ │ ├── types.ts │ │ ├── utils.test.ts │ │ └── utils.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── polling-controller │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── AbstractPollingController.ts │ │ ├── BlockTrackerPollingController.test.ts │ │ ├── BlockTrackerPollingController.ts │ │ ├── StaticIntervalPollingController.test.ts │ │ ├── StaticIntervalPollingController.ts │ │ ├── index.ts │ │ └── types.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── preferences-controller │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── PreferencesController.test.ts │ │ ├── PreferencesController.ts │ │ ├── constants.ts │ │ └── index.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── profile-sync-controller │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── auth │ │ ├── mocks │ │ │ └── package.json │ │ └── package.json │ ├── jest.config.js │ ├── jest.environment.js │ ├── package.json │ ├── sdk │ │ └── package.json │ ├── src │ │ ├── controllers │ │ │ ├── authentication │ │ │ │ ├── AuthenticationController.test.ts │ │ │ │ ├── AuthenticationController.ts │ │ │ │ ├── __fixtures__ │ │ │ │ │ └── mockServices.ts │ │ │ │ ├── auth-snap-requests.ts │ │ │ │ ├── index.ts │ │ │ │ └── mocks │ │ │ │ │ ├── index.ts │ │ │ │ │ └── mockResponses.ts │ │ │ ├── index.ts │ │ │ └── user-storage │ │ │ │ ├── UserStorageController.test.ts │ │ │ │ ├── UserStorageController.ts │ │ │ │ ├── __fixtures__ │ │ │ │ ├── mockMessenger.ts │ │ │ │ ├── mockServices.ts │ │ │ │ └── test-utils.ts │ │ │ │ ├── account-syncing │ │ │ │ ├── __fixtures__ │ │ │ │ │ ├── mockAccounts.ts │ │ │ │ │ └── test-utils.ts │ │ │ │ ├── constants.ts │ │ │ │ ├── controller-integration.test.ts │ │ │ │ ├── controller-integration.ts │ │ │ │ ├── setup-subscriptions.test.ts │ │ │ │ ├── setup-subscriptions.ts │ │ │ │ ├── sync-utils.test.ts │ │ │ │ ├── sync-utils.ts │ │ │ │ ├── types.ts │ │ │ │ ├── utils.test.ts │ │ │ │ └── utils.ts │ │ │ │ ├── constants.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mocks │ │ │ │ ├── index.ts │ │ │ │ ├── mockResponses.ts │ │ │ │ └── mockStorage.ts │ │ │ │ ├── network-syncing │ │ │ │ ├── __fixtures__ │ │ │ │ │ └── mockNetwork.ts │ │ │ │ ├── add-network-utils.test.ts │ │ │ │ ├── add-network-utils.ts │ │ │ │ ├── controller-integration.test.ts │ │ │ │ ├── controller-integration.ts │ │ │ │ ├── controller-integration.update-network.test.ts │ │ │ │ ├── services.test.ts │ │ │ │ ├── services.ts │ │ │ │ ├── sync-all.test.ts │ │ │ │ ├── sync-all.ts │ │ │ │ ├── sync-mutations.test.ts │ │ │ │ ├── sync-mutations.ts │ │ │ │ ├── types.ts │ │ │ │ ├── update-network-utils.test.ts │ │ │ │ └── update-network-utils.ts │ │ │ │ ├── types.ts │ │ │ │ ├── utils.test.ts │ │ │ │ └── utils.ts │ │ ├── index.ts │ │ ├── sdk │ │ │ ├── __fixtures__ │ │ │ │ ├── auth.ts │ │ │ │ ├── test-utils.ts │ │ │ │ └── userstorage.ts │ │ │ ├── authentication-jwt-bearer │ │ │ │ ├── flow-siwe.ts │ │ │ │ ├── flow-srp.ts │ │ │ │ ├── services.ts │ │ │ │ └── types.ts │ │ │ ├── authentication.test.ts │ │ │ ├── authentication.ts │ │ │ ├── errors.ts │ │ │ ├── index.ts │ │ │ ├── mocks │ │ │ │ ├── auth.ts │ │ │ │ └── userstorage.ts │ │ │ ├── user-storage.test.ts │ │ │ ├── user-storage.ts │ │ │ └── utils │ │ │ │ ├── eip-6963-metamask-provider.test.ts │ │ │ │ ├── eip-6963-metamask-provider.ts │ │ │ │ ├── messaging-signing-snap-requests.test.ts │ │ │ │ ├── messaging-signing-snap-requests.ts │ │ │ │ ├── validate-login-response.test.ts │ │ │ │ └── validate-login-response.ts │ │ └── shared │ │ │ ├── encryption │ │ │ ├── cache.ts │ │ │ ├── constants.ts │ │ │ ├── encryption.test.ts │ │ │ ├── encryption.ts │ │ │ ├── index.ts │ │ │ └── utils.ts │ │ │ ├── env.test.ts │ │ │ ├── env.ts │ │ │ ├── storage-schema.test.ts │ │ │ ├── storage-schema.ts │ │ │ └── types │ │ │ ├── encryption.ts │ │ │ └── services.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ ├── typedoc.json │ └── user-storage │ │ ├── mocks │ │ └── package.json │ │ └── package.json ├── queued-request-controller │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── QueuedRequestController.test.ts │ │ ├── QueuedRequestController.ts │ │ ├── QueuedRequestMiddleware.test.ts │ │ ├── QueuedRequestMiddleware.ts │ │ ├── index.ts │ │ └── types.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── rate-limit-controller │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── RateLimitController.test.ts │ │ ├── RateLimitController.ts │ │ └── index.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── remote-feature-flag-controller │ ├── CHANGELOG.md │ ├── LICENSE │ ├── LICENSE.APACHE2 │ ├── LICENSE.MIT │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── client-config-api-service │ │ │ ├── abstract-client-config-api-service.ts │ │ │ ├── client-config-api-service.test.ts │ │ │ └── client-config-api-service.ts │ │ ├── constants.ts │ │ ├── index.ts │ │ ├── remote-feature-flag-controller-types.ts │ │ ├── remote-feature-flag-controller.test.ts │ │ ├── remote-feature-flag-controller.ts │ │ └── utils │ │ │ ├── user-segmentation-utils.test.ts │ │ │ └── user-segmentation-utils.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── sample-controllers │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── index.test.ts │ │ ├── index.ts │ │ ├── network-controller-types.ts │ │ ├── sample-gas-prices-controller.test.ts │ │ ├── sample-gas-prices-controller.ts │ │ ├── sample-gas-prices-service │ │ │ ├── index.test.ts │ │ │ ├── index.ts │ │ │ ├── sample-abstract-gas-prices-service.ts │ │ │ ├── sample-gas-prices-service.test.ts │ │ │ └── sample-gas-prices-service.ts │ │ ├── sample-petnames-controller.test.ts │ │ └── sample-petnames-controller.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── seedless-onboarding-controller │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── jest.environment.js │ ├── package.json │ ├── src │ │ ├── SecretMetadata.ts │ │ ├── SeedlessOnboardingController.test.ts │ │ ├── SeedlessOnboardingController.ts │ │ ├── constants.ts │ │ ├── errors.ts │ │ ├── index.ts │ │ ├── logger.ts │ │ └── types.ts │ ├── tests │ │ ├── __fixtures__ │ │ │ ├── mockMessenger.ts │ │ │ └── topfClient.ts │ │ └── mocks │ │ │ ├── toprf.ts │ │ │ ├── toprfEncryptor.ts │ │ │ └── vaultEncryptor.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── selected-network-controller │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── SelectedNetworkController.ts │ │ ├── SelectedNetworkMiddleware.ts │ │ └── index.ts │ ├── tests │ │ ├── SelectedNetworkController.test.ts │ │ └── SelectedNetworkMiddleware.test.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── signature-controller │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── SignatureController.test.ts │ │ ├── SignatureController.ts │ │ ├── index.ts │ │ ├── logger.ts │ │ ├── types.ts │ │ └── utils │ │ │ ├── decoding-api.test.ts │ │ │ ├── decoding-api.ts │ │ │ ├── normalize.test.ts │ │ │ ├── normalize.ts │ │ │ ├── validation.test.ts │ │ │ └── validation.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── token-search-discovery-controller │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── index.ts │ │ ├── test │ │ │ └── constants.ts │ │ ├── token-discovery-api-service │ │ │ ├── abstract-token-discovery-api-service.ts │ │ │ ├── token-discovery-api-service.test.ts │ │ │ └── token-discovery-api-service.ts │ │ ├── token-search-api-service │ │ │ ├── abstract-token-search-api-service.ts │ │ │ ├── token-search-api-service.test.ts │ │ │ └── token-search-api-service.ts │ │ ├── token-search-discovery-controller.test.ts │ │ ├── token-search-discovery-controller.ts │ │ └── types.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── transaction-controller │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ ├── TransactionController.test.ts │ │ ├── TransactionController.ts │ │ ├── TransactionControllerIntegration.test.ts │ │ ├── api │ │ │ ├── accounts-api.test.ts │ │ │ ├── accounts-api.ts │ │ │ ├── simulation-api.test.ts │ │ │ └── simulation-api.ts │ │ ├── constants.ts │ │ ├── errors.ts │ │ ├── gas-flows │ │ │ ├── DefaultGasFeeFlow.test.ts │ │ │ ├── DefaultGasFeeFlow.ts │ │ │ ├── LineaGasFeeFlow.test.ts │ │ │ ├── LineaGasFeeFlow.ts │ │ │ ├── OptimismLayer1GasFeeFlow.test.ts │ │ │ ├── OptimismLayer1GasFeeFlow.ts │ │ │ ├── OracleLayer1GasFeeFlow.test.ts │ │ │ ├── OracleLayer1GasFeeFlow.ts │ │ │ ├── RandomisedEstimationsGasFeeFlow.test.ts │ │ │ ├── RandomisedEstimationsGasFeeFlow.ts │ │ │ ├── ScrollLayer1GasFeeFlow.test.ts │ │ │ ├── ScrollLayer1GasFeeFlow.ts │ │ │ ├── TestGasFeeFlow.test.ts │ │ │ └── TestGasFeeFlow.ts │ │ ├── helpers │ │ │ ├── AccountsApiRemoteTransactionSource.test.ts │ │ │ ├── AccountsApiRemoteTransactionSource.ts │ │ │ ├── GasFeePoller.test.ts │ │ │ ├── GasFeePoller.ts │ │ │ ├── IncomingTransactionHelper.test.ts │ │ │ ├── IncomingTransactionHelper.ts │ │ │ ├── MethodDataHelper.test.ts │ │ │ ├── MethodDataHelper.ts │ │ │ ├── MultichainTrackingHelper.test.ts │ │ │ ├── MultichainTrackingHelper.ts │ │ │ ├── PendingTransactionTracker.test.ts │ │ │ ├── PendingTransactionTracker.ts │ │ │ ├── ResimulateHelper.test.ts │ │ │ ├── ResimulateHelper.ts │ │ │ ├── TransactionPoller.test.ts │ │ │ └── TransactionPoller.ts │ │ ├── hooks │ │ │ ├── CollectPublishHook.test.ts │ │ │ ├── CollectPublishHook.ts │ │ │ ├── ExtraTransactionsPublishHook.test.ts │ │ │ ├── ExtraTransactionsPublishHook.ts │ │ │ ├── SequentialPublishBatchHook.test.ts │ │ │ └── SequentialPublishBatchHook.ts │ │ ├── index.ts │ │ ├── logger.ts │ │ ├── types.ts │ │ └── utils │ │ │ ├── balance-changes.test.ts │ │ │ ├── balance-changes.ts │ │ │ ├── batch.test.ts │ │ │ ├── batch.ts │ │ │ ├── eip7702.test.ts │ │ │ ├── eip7702.ts │ │ │ ├── external-transactions.test.ts │ │ │ ├── external-transactions.ts │ │ │ ├── feature-flags.test.ts │ │ │ ├── feature-flags.ts │ │ │ ├── gas-fee-tokens.test.ts │ │ │ ├── gas-fee-tokens.ts │ │ │ ├── gas-fees.test.ts │ │ │ ├── gas-fees.ts │ │ │ ├── gas-flow.test.ts │ │ │ ├── gas-flow.ts │ │ │ ├── gas.test.ts │ │ │ ├── gas.ts │ │ │ ├── history.test.ts │ │ │ ├── history.ts │ │ │ ├── layer1-gas-fee-flow.test.ts │ │ │ ├── layer1-gas-fee-flow.ts │ │ │ ├── nonce.test.ts │ │ │ ├── nonce.ts │ │ │ ├── prepare.test.ts │ │ │ ├── prepare.ts │ │ │ ├── retry.test.ts │ │ │ ├── retry.ts │ │ │ ├── signature.test.ts │ │ │ ├── signature.ts │ │ │ ├── swaps.test.ts │ │ │ ├── swaps.ts │ │ │ ├── transaction-type.test.ts │ │ │ ├── transaction-type.ts │ │ │ ├── utils.test.ts │ │ │ ├── utils.ts │ │ │ ├── validation.test.ts │ │ │ └── validation.ts │ ├── tests │ │ └── JsonRpcRequestMocks.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json └── user-operation-controller │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ ├── UserOperationController.test.ts │ ├── UserOperationController.ts │ ├── constants.ts │ ├── helpers │ │ ├── Bundler.test.ts │ │ ├── Bundler.ts │ │ ├── PendingUserOperationTracker.test.ts │ │ ├── PendingUserOperationTracker.ts │ │ ├── SnapSmartContractAccount.test.ts │ │ └── SnapSmartContractAccount.ts │ ├── index.ts │ ├── logger.ts │ ├── types.ts │ └── utils │ │ ├── chain-id.test.ts │ │ ├── chain-id.ts │ │ ├── gas-fees.test.ts │ │ ├── gas-fees.ts │ │ ├── gas.test.ts │ │ ├── gas.ts │ │ ├── transaction.test.ts │ │ ├── transaction.ts │ │ ├── validation.test.ts │ │ └── validation.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── typedoc.json ├── release.config.json ├── scripts ├── create-package │ ├── README.md │ ├── cli.test.ts │ ├── cli.ts │ ├── commands.test.ts │ ├── commands.ts │ ├── constants.ts │ ├── fs-utils.test.ts │ ├── fs-utils.ts │ ├── index.test.ts │ ├── index.ts │ ├── package-template │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── jest.config.js │ │ ├── package.json │ │ ├── src │ │ │ ├── index.test.ts │ │ │ └── index.ts │ │ ├── tsconfig.build.json │ │ ├── tsconfig.json │ │ └── typedoc.json │ ├── tsconfig.json │ ├── utils.test.ts │ └── utils.ts ├── generate-preview-build-message.ts ├── lint-teams-json.ts ├── list-workspace-versions.sh ├── migrate-tags.sh ├── prepack.sh ├── prepare-preview-builds.jq ├── prepare-preview-builds.sh ├── run-eslint.ts ├── semver.sh ├── since-latest-release.sh ├── update-changelog.sh ├── update-readme-content.ts └── validate-changelog.sh ├── teams.json ├── tests ├── fake-block-tracker.ts ├── fake-provider.ts ├── helpers.ts ├── mock-network.ts ├── scripts-setup.ts ├── setup.ts └── setupAfterEnv │ ├── index.ts │ ├── matchers.ts │ └── nock.ts ├── tsconfig.build.json ├── tsconfig.json ├── tsconfig.packages.build.json ├── tsconfig.packages.json ├── tsconfig.scripts.json ├── types ├── @metamask │ ├── contract-metadata.d.ts │ ├── eth-json-rpc-filters.d.ts │ ├── ethjs-provider-http.d.ts │ ├── ethjs-unit.d.ts │ └── metamask-eth-abis.d.ts ├── eth-ens-namehash.d.ts ├── eth-json-rpc-infura │ └── src │ │ └── createProvider.d.ts ├── ethereum-ens-network-map.d.ts ├── ethjs-query.d.ts ├── global.d.ts └── single-call-balance-checker-abi.d.ts ├── yarn.config.cjs └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | end_of_line = lf 7 | indent_size = 2 8 | indent_style = space 9 | insert_final_newline = true 10 | trim_trailing_whitespace = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | 3 | yarn.lock linguist-generated=false 4 | 5 | # yarn v3 6 | # See: https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored 7 | /.yarn/releases/** binary 8 | /.yarn/plugins/** binary 9 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # Please see the documentation for all configuration options: 2 | # https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 3 | 4 | version: 2 5 | updates: 6 | - package-ecosystem: 'npm' 7 | directory: '/' 8 | schedule: 9 | interval: 'daily' 10 | allow: 11 | - dependency-name: '@metamask/*' 12 | versioning-strategy: 'increase' 13 | -------------------------------------------------------------------------------- /.github/workflows/changelog-check.yml: -------------------------------------------------------------------------------- 1 | name: Check Changelog 2 | 3 | on: 4 | pull_request: 5 | types: [opened, synchronize, labeled, unlabeled] 6 | 7 | jobs: 8 | check_changelog: 9 | uses: MetaMask/github-tools/.github/workflows/changelog-check.yml@85fffce169c0fd35028ecde6b38dfb3f932882ec 10 | with: 11 | action-sha: 85fffce169c0fd35028ecde6b38dfb3f932882ec 12 | base-branch: ${{ github.event.pull_request.base.ref }} 13 | head-ref: ${{ github.head_ref }} 14 | labels: ${{ toJSON(github.event.pull_request.labels) }} 15 | pr-number: ${{ github.event.pull_request.number }} 16 | repo: ${{ github.repository }} 17 | secrets: 18 | gh-token: ${{ secrets.GITHUB_TOKEN }} 19 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # node 2 | npm-debug.log 3 | yarn-error.log 4 | node_modules 5 | package-lock.json 6 | 7 | # tarball from `yarn pack` 8 | *.tgz 9 | 10 | # eslint cache 11 | .eslintcache 12 | 13 | .DS_STORE 14 | 15 | # Build preview message 16 | preview-build-message.txt 17 | 18 | examples/*/coverage 19 | examples/*/dist 20 | examples/*/docs 21 | packages/*/coverage 22 | packages/*/dist 23 | packages/*/docs 24 | scripts/coverage 25 | 26 | # yarn v3 (w/o zero-install) 27 | # See: https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored 28 | .pnp.* 29 | .yarn/* 30 | !.yarn/patches 31 | !.yarn/plugins 32 | !.yarn/releases 33 | !.yarn/sdks 34 | !.yarn/versions 35 | 36 | # typescript 37 | packages/*/*.tsbuildinfo -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | lts/* 2 | -------------------------------------------------------------------------------- /.prettierrc.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @type {import('prettier').Options} 3 | */ 4 | module.exports = { 5 | // All of these are defaults except singleQuote, but we specify them 6 | // for explicitness 7 | quoteProps: 'as-needed', 8 | singleQuote: true, 9 | tabWidth: 2, 10 | trailingComma: 'all', 11 | }; 12 | -------------------------------------------------------------------------------- /.yarnrc.yml: -------------------------------------------------------------------------------- 1 | compressionLevel: mixed 2 | 3 | enableGlobalCache: false 4 | 5 | enableScripts: false 6 | 7 | enableTelemetry: false 8 | 9 | logFilters: 10 | - code: YN0004 11 | level: discard 12 | 13 | nodeLinker: node-modules 14 | 15 | plugins: 16 | - path: .yarn/plugins/@yarnpkg/plugin-allow-scripts.cjs 17 | spec: "https://raw.githubusercontent.com/LavaMoat/LavaMoat/main/packages/yarn-plugin-allow-scripts/bundles/@yarnpkg/plugin-allow-scripts.js" 18 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | // We use Babel for our tests in scripts/. 2 | module.exports = { 3 | env: { 4 | test: { 5 | presets: ['@babel/preset-typescript'], 6 | plugins: ['@babel/plugin-transform-modules-commonjs'], 7 | }, 8 | }, 9 | }; 10 | -------------------------------------------------------------------------------- /packages/account-tree-controller/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All notable changes to this project will be documented in this file. 4 | 5 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), 6 | and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). 7 | 8 | ## [Unreleased] 9 | 10 | ## [0.1.0] 11 | 12 | ### Added 13 | 14 | - Initial release ([#5847](https://github.com/MetaMask/core/pull/5847)) 15 | - Grouping accounts into 3 main categories: Entropy source, Snap ID, keyring types. 16 | 17 | [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/account-tree-controller@0.1.0...HEAD 18 | [0.1.0]: https://github.com/MetaMask/core/releases/tag/@metamask/account-tree-controller@0.1.0 19 | -------------------------------------------------------------------------------- /packages/account-tree-controller/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/account-tree-controller` 2 | 3 | Manages account wallets according to pre-defined grouping rules (entropy source, Snap IDs, keyring types) and organize wallets/groups of accounts in a tree structure. 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/account-tree-controller` 8 | 9 | or 10 | 11 | `npm install @metamask/account-tree-controller` 12 | 13 | ## Contributing 14 | 15 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 16 | -------------------------------------------------------------------------------- /packages/account-tree-controller/jest.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * For a detailed explanation regarding each configuration property and type check, visit: 3 | * https://jestjs.io/docs/configuration 4 | */ 5 | 6 | const merge = require('deepmerge'); 7 | const path = require('path'); 8 | 9 | const baseConfig = require('../../jest.config.packages'); 10 | 11 | const displayName = path.basename(__dirname); 12 | 13 | module.exports = merge(baseConfig, { 14 | // The display name when running multiple projects 15 | displayName, 16 | 17 | // An object that configures minimum threshold enforcement for coverage results 18 | coverageThreshold: { 19 | global: { 20 | branches: 100, 21 | functions: 100, 22 | lines: 100, 23 | statements: 100, 24 | }, 25 | }, 26 | }); 27 | -------------------------------------------------------------------------------- /packages/account-tree-controller/src/index.ts: -------------------------------------------------------------------------------- 1 | export type { 2 | AccountTreeControllerState, 3 | AccountTreeControllerGetStateAction, 4 | AccountTreeControllerActions, 5 | AccountTreeControllerStateChangeEvent, 6 | AccountTreeControllerEvents, 7 | AccountTreeControllerMessenger, 8 | AccountWallet, 9 | AccountWalletId, 10 | AccountWalletMetadata, 11 | AccountWalletCategory, 12 | AccountGroup, 13 | AccountGroupId, 14 | AccountGroupMetadata, 15 | } from './AccountTreeController'; 16 | export { 17 | AccountTreeController, 18 | getDefaultAccountTreeControllerState, 19 | } from './AccountTreeController'; 20 | -------------------------------------------------------------------------------- /packages/account-tree-controller/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src" 7 | }, 8 | "references": [ 9 | { "path": "../accounts-controller/tsconfig.build.json" }, 10 | { "path": "../base-controller/tsconfig.build.json" }, 11 | { "path": "../keyring-controller/tsconfig.build.json" } 12 | ], 13 | "include": ["../../types", "./src"] 14 | } 15 | -------------------------------------------------------------------------------- /packages/account-tree-controller/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./" 5 | }, 6 | "references": [ 7 | { 8 | "path": "../base-controller" 9 | }, 10 | { 11 | "path": "../keyring-controller" 12 | }, 13 | { 14 | "path": "../accounts-controller" 15 | } 16 | ], 17 | "include": ["../../types", "./src"] 18 | } 19 | -------------------------------------------------------------------------------- /packages/account-tree-controller/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/accounts-controller/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/accounts-controller` 2 | 3 | Manages internal accounts used in place of regular ethereum addresses. 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/accounts-controller` 8 | 9 | or 10 | 11 | `npm install @metamask/accounts-controller` 12 | 13 | ## Contributing 14 | 15 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 16 | -------------------------------------------------------------------------------- /packages/accounts-controller/src/types.ts: -------------------------------------------------------------------------------- 1 | // This file contains duplicate code from MultichainNetworkController.ts to avoid circular dependencies 2 | // It should be refactored to avoid duplication 3 | 4 | import type { CaipChainId } from '@metamask/keyring-api'; 5 | import type { NetworkClientId } from '@metamask/network-controller'; 6 | 7 | export type MultichainNetworkControllerNetworkDidChangeEvent = { 8 | type: `MultichainNetworkController:networkDidChange`; 9 | payload: [NetworkClientId | CaipChainId]; 10 | }; 11 | -------------------------------------------------------------------------------- /packages/accounts-controller/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src", 7 | "skipLibCheck": true 8 | }, 9 | "references": [ 10 | { 11 | "path": "../base-controller/tsconfig.build.json" 12 | }, 13 | { "path": "../keyring-controller/tsconfig.build.json" }, 14 | { "path": "../network-controller/tsconfig.build.json" } 15 | ], 16 | "include": ["../../types", "./src"] 17 | } 18 | -------------------------------------------------------------------------------- /packages/accounts-controller/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./" 5 | }, 6 | "references": [ 7 | { 8 | "path": "../base-controller" 9 | }, 10 | { 11 | "path": "../keyring-controller" 12 | }, 13 | { "path": "../network-controller" } 14 | ], 15 | "include": ["../../types", "./src", "src/tests"] 16 | } 17 | -------------------------------------------------------------------------------- /packages/accounts-controller/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/address-book-controller/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/address-book-controller` 2 | 3 | Manages a list of recipient addresses associated with nicknames. 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/address-book-controller` 8 | 9 | or 10 | 11 | `npm install @metamask/address-book-controller` 12 | 13 | ## Contributing 14 | 15 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 16 | -------------------------------------------------------------------------------- /packages/address-book-controller/jest.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * For a detailed explanation regarding each configuration property and type check, visit: 3 | * https://jestjs.io/docs/configuration 4 | */ 5 | 6 | const merge = require('deepmerge'); 7 | const path = require('path'); 8 | 9 | const baseConfig = require('../../jest.config.packages'); 10 | 11 | const displayName = path.basename(__dirname); 12 | 13 | module.exports = merge(baseConfig, { 14 | // The display name when running multiple projects 15 | displayName, 16 | 17 | // An object that configures minimum threshold enforcement for coverage results 18 | coverageThreshold: { 19 | global: { 20 | branches: 100, 21 | functions: 100, 22 | lines: 100, 23 | statements: 100, 24 | }, 25 | }, 26 | }); 27 | -------------------------------------------------------------------------------- /packages/address-book-controller/src/index.ts: -------------------------------------------------------------------------------- 1 | export type { 2 | AddressType, 3 | AddressBookEntry, 4 | AddressBookControllerState, 5 | AddressBookControllerGetStateAction, 6 | AddressBookControllerListAction, 7 | AddressBookControllerSetAction, 8 | AddressBookControllerDeleteAction, 9 | AddressBookControllerActions, 10 | AddressBookControllerStateChangeEvent, 11 | AddressBookControllerContactUpdatedEvent, 12 | AddressBookControllerContactDeletedEvent, 13 | AddressBookControllerEvents, 14 | AddressBookControllerMessenger, 15 | ContactEntry, 16 | } from './AddressBookController'; 17 | export { 18 | getDefaultAddressBookControllerState, 19 | AddressBookController, 20 | } from './AddressBookController'; 21 | -------------------------------------------------------------------------------- /packages/address-book-controller/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src" 7 | }, 8 | "references": [ 9 | { "path": "../base-controller/tsconfig.build.json" }, 10 | { "path": "../controller-utils/tsconfig.build.json" } 11 | ], 12 | "include": ["../../types", "./src"] 13 | } 14 | -------------------------------------------------------------------------------- /packages/address-book-controller/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./" 5 | }, 6 | "references": [ 7 | { "path": "../base-controller" }, 8 | { "path": "../controller-utils" } 9 | ], 10 | "include": ["../../types", "./src"] 11 | } 12 | -------------------------------------------------------------------------------- /packages/address-book-controller/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/announcement-controller/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/announcement-controller` 2 | 3 | Manages in-app announcements. 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/announcement-controller` 8 | 9 | or 10 | 11 | `npm install @metamask/announcement-controller` 12 | 13 | ## Contributing 14 | 15 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 16 | -------------------------------------------------------------------------------- /packages/announcement-controller/jest.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * For a detailed explanation regarding each configuration property and type check, visit: 3 | * https://jestjs.io/docs/configuration 4 | */ 5 | 6 | const merge = require('deepmerge'); 7 | const path = require('path'); 8 | 9 | const baseConfig = require('../../jest.config.packages'); 10 | 11 | const displayName = path.basename(__dirname); 12 | 13 | module.exports = merge(baseConfig, { 14 | // The display name when running multiple projects 15 | displayName, 16 | 17 | // An object that configures minimum threshold enforcement for coverage results 18 | coverageThreshold: { 19 | global: { 20 | branches: 100, 21 | functions: 100, 22 | lines: 100, 23 | statements: 100, 24 | }, 25 | }, 26 | }); 27 | -------------------------------------------------------------------------------- /packages/announcement-controller/src/index.ts: -------------------------------------------------------------------------------- 1 | export type { 2 | AnnouncementMap, 3 | StateAnnouncementMap, 4 | AnnouncementControllerState, 5 | AnnouncementControllerActions, 6 | AnnouncementControllerEvents, 7 | AnnouncementControllerGetStateAction, 8 | AnnouncementControllerStateChangeEvent, 9 | AnnouncementControllerMessenger, 10 | } from './AnnouncementController'; 11 | export { AnnouncementController } from './AnnouncementController'; 12 | -------------------------------------------------------------------------------- /packages/announcement-controller/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src" 7 | }, 8 | "references": [{ "path": "../base-controller/tsconfig.build.json" }], 9 | "include": ["../../types", "./src"] 10 | } 11 | -------------------------------------------------------------------------------- /packages/announcement-controller/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./" 5 | }, 6 | "references": [{ "path": "../base-controller" }], 7 | "include": ["../../types", "./src"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/announcement-controller/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/app-metadata-controller/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/app-metadata-controller` 2 | 3 | Manages the Metadata for the App 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/app-metadata-controller` 8 | 9 | or 10 | 11 | `npm install @metamask/app-metadata-controller` 12 | 13 | ## Contributing 14 | 15 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 16 | -------------------------------------------------------------------------------- /packages/app-metadata-controller/jest.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * For a detailed explanation regarding each configuration property and type check, visit: 3 | * https://jestjs.io/docs/configuration 4 | */ 5 | 6 | const merge = require('deepmerge'); 7 | const path = require('path'); 8 | 9 | const baseConfig = require('../../jest.config.packages'); 10 | 11 | const displayName = path.basename(__dirname); 12 | 13 | module.exports = merge(baseConfig, { 14 | // The display name when running multiple projects 15 | displayName, 16 | 17 | // An object that configures minimum threshold enforcement for coverage results 18 | coverageThreshold: { 19 | global: { 20 | branches: 100, 21 | functions: 100, 22 | lines: 100, 23 | statements: 100, 24 | }, 25 | }, 26 | }); 27 | -------------------------------------------------------------------------------- /packages/app-metadata-controller/src/index.ts: -------------------------------------------------------------------------------- 1 | export type { 2 | AppMetadataControllerActions, 3 | AppMetadataControllerEvents, 4 | AppMetadataControllerGetStateAction, 5 | AppMetadataControllerMessenger, 6 | AppMetadataControllerState, 7 | AppMetadataControllerStateChangeEvent, 8 | } from './AppMetadataController'; 9 | export { 10 | getDefaultAppMetadataControllerState, 11 | AppMetadataController, 12 | } from './AppMetadataController'; 13 | -------------------------------------------------------------------------------- /packages/app-metadata-controller/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src" 7 | }, 8 | "references": [{ "path": "../base-controller/tsconfig.build.json" }], 9 | "include": ["../../types", "./src"] 10 | } 11 | -------------------------------------------------------------------------------- /packages/app-metadata-controller/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./" 5 | }, 6 | "references": [{ "path": "../base-controller" }], 7 | "include": ["../../types", "./src"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/app-metadata-controller/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/approval-controller/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/approval-controller` 2 | 3 | Manages requests that require user approval. 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/approval-controller` 8 | 9 | or 10 | 11 | `npm install @metamask/approval-controller` 12 | 13 | ## Contributing 14 | 15 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 16 | -------------------------------------------------------------------------------- /packages/approval-controller/jest.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * For a detailed explanation regarding each configuration property and type check, visit: 3 | * https://jestjs.io/docs/configuration 4 | */ 5 | 6 | const merge = require('deepmerge'); 7 | const path = require('path'); 8 | 9 | const baseConfig = require('../../jest.config.packages'); 10 | 11 | const displayName = path.basename(__dirname); 12 | 13 | module.exports = merge(baseConfig, { 14 | // The display name when running multiple projects 15 | displayName, 16 | 17 | // An object that configures minimum threshold enforcement for coverage results 18 | coverageThreshold: { 19 | global: { 20 | branches: 100, 21 | functions: 100, 22 | lines: 100, 23 | statements: 100, 24 | }, 25 | }, 26 | }); 27 | -------------------------------------------------------------------------------- /packages/approval-controller/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ApprovalController'; 2 | export * from './errors'; 3 | -------------------------------------------------------------------------------- /packages/approval-controller/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src" 7 | }, 8 | "references": [ 9 | { 10 | "path": "../base-controller/tsconfig.build.json" 11 | } 12 | ], 13 | "include": ["../../types", "./src"] 14 | } 15 | -------------------------------------------------------------------------------- /packages/approval-controller/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./" 5 | }, 6 | "references": [ 7 | { 8 | "path": "../base-controller" 9 | } 10 | ], 11 | "include": ["../../types", "./src"] 12 | } 13 | -------------------------------------------------------------------------------- /packages/approval-controller/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/assets-controllers/jest.environment.js: -------------------------------------------------------------------------------- 1 | const JSDOMEnvironment = require('jest-environment-jsdom'); 2 | 3 | // Custom test environment copied from https://github.com/jsdom/jsdom/issues/2524 4 | // in order to add TextEncoder to jsdom. TextEncoder is expected by jose. 5 | 6 | module.exports = class CustomTestEnvironment extends JSDOMEnvironment { 7 | async setup() { 8 | await super.setup(); 9 | if (typeof this.global.TextEncoder === 'undefined') { 10 | const { TextEncoder, TextDecoder } = require('util'); 11 | this.global.TextEncoder = TextEncoder; 12 | this.global.TextDecoder = TextDecoder; 13 | this.global.ArrayBuffer = ArrayBuffer; 14 | this.global.Uint8Array = Uint8Array; 15 | } 16 | } 17 | }; 18 | -------------------------------------------------------------------------------- /packages/assets-controllers/src/MultichainAssetsController/index.ts: -------------------------------------------------------------------------------- 1 | export { 2 | MultichainAssetsController, 3 | getDefaultMultichainAssetsControllerState, 4 | } from './MultichainAssetsController'; 5 | 6 | export type { 7 | MultichainAssetsControllerState, 8 | MultichainAssetsControllerGetStateAction, 9 | MultichainAssetsControllerStateChangeEvent, 10 | MultichainAssetsControllerActions, 11 | MultichainAssetsControllerMessenger, 12 | MultichainAssetsControllerAccountAssetListUpdatedEvent, 13 | MultichainAssetsControllerEvents, 14 | } from './MultichainAssetsController'; 15 | -------------------------------------------------------------------------------- /packages/assets-controllers/src/MultichainAssetsRatesController/index.ts: -------------------------------------------------------------------------------- 1 | export type { 2 | MultichainAssetsRatesControllerState, 3 | MultichainAssetsRatesControllerActions, 4 | MultichainAssetsRatesControllerEvents, 5 | MultichainAssetsRatesControllerGetStateAction, 6 | MultichainAssetsRatesControllerStateChange, 7 | MultichainAssetsRatesControllerMessenger, 8 | } from './MultichainAssetsRatesController'; 9 | 10 | export { 11 | MultichainAssetsRatesController, 12 | getDefaultMultichainAssetsRatesControllerState, 13 | } from './MultichainAssetsRatesController'; 14 | -------------------------------------------------------------------------------- /packages/assets-controllers/src/MultichainBalancesController/index.ts: -------------------------------------------------------------------------------- 1 | export { MultichainBalancesController } from './MultichainBalancesController'; 2 | export type { 3 | MultichainBalancesControllerState, 4 | MultichainBalancesControllerGetStateAction, 5 | MultichainBalancesControllerStateChange, 6 | MultichainBalancesControllerActions, 7 | MultichainBalancesControllerEvents, 8 | MultichainBalancesControllerMessenger, 9 | } from './MultichainBalancesController'; 10 | -------------------------------------------------------------------------------- /packages/assets-controllers/src/RatesController/index.ts: -------------------------------------------------------------------------------- 1 | export { RatesController, Cryptocurrency } from './RatesController'; 2 | export type { 3 | RatesControllerState, 4 | RatesControllerEvents, 5 | RatesControllerActions, 6 | RatesControllerMessenger, 7 | RatesControllerGetStateAction, 8 | RatesControllerStateChangeEvent, 9 | RatesControllerPollingStartedEvent, 10 | RatesControllerPollingStoppedEvent, 11 | } from './types'; 12 | -------------------------------------------------------------------------------- /packages/assets-controllers/src/TokenSearchDiscoveryDataController/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TokenSearchDiscoveryDataController'; 2 | export type * from './types'; 3 | -------------------------------------------------------------------------------- /packages/assets-controllers/src/TokenSearchDiscoveryDataController/types.ts: -------------------------------------------------------------------------------- 1 | import type { Hex } from '@metamask/utils'; 2 | 3 | import type { TokenPrice } from '../token-prices-service/abstract-token-prices-service'; 4 | import type { Token } from '../TokenRatesController'; 5 | 6 | export type NotFoundTokenDisplayData = { 7 | found: false; 8 | chainId: Hex; 9 | address: string; 10 | currency: string; 11 | }; 12 | 13 | export type FoundTokenDisplayData = { 14 | found: true; 15 | chainId: Hex; 16 | address: string; 17 | currency: string; 18 | token: Token; 19 | price: TokenPrice | null; 20 | }; 21 | 22 | export type TokenDisplayData = NotFoundTokenDisplayData | FoundTokenDisplayData; 23 | -------------------------------------------------------------------------------- /packages/assets-controllers/src/constants.ts: -------------------------------------------------------------------------------- 1 | export enum Source { 2 | Custom = 'custom', 3 | Dapp = 'dapp', 4 | Detected = 'detected', 5 | } 6 | -------------------------------------------------------------------------------- /packages/assets-controllers/src/crypto-compare-service/index.ts: -------------------------------------------------------------------------------- 1 | export { fetchExchangeRate, fetchMultiExchangeRate } from './crypto-compare'; 2 | -------------------------------------------------------------------------------- /packages/assets-controllers/src/multi-chain-accounts-service/index.ts: -------------------------------------------------------------------------------- 1 | export type { 2 | GetBalancesResponse, 3 | GetSupportedNetworksResponse, 4 | } from './types'; 5 | 6 | export { 7 | fetchMultiChainBalances, 8 | fetchSupportedNetworks, 9 | } from './multi-chain-accounts'; 10 | -------------------------------------------------------------------------------- /packages/assets-controllers/src/multi-chain-accounts-service/mocks/mock-get-supported-networks.ts: -------------------------------------------------------------------------------- 1 | import type { GetSupportedNetworksResponse } from '../types'; 2 | 3 | export const MOCK_GET_SUPPORTED_NETWORKS_RESPONSE: GetSupportedNetworksResponse = 4 | { 5 | fullSupport: [1, 137, 56, 59144, 8453, 10, 42161, 534352], 6 | partialSupport: { 7 | balances: [59141, 42220, 43114], 8 | }, 9 | }; 10 | -------------------------------------------------------------------------------- /packages/assets-controllers/src/token-prices-service/index.test.ts: -------------------------------------------------------------------------------- 1 | import * as allExports from '.'; 2 | 3 | describe('token-prices-service', () => { 4 | it('has expected exports', () => { 5 | expect(Object.keys(allExports)).toMatchInlineSnapshot(` 6 | Array [ 7 | "CodefiTokenPricesServiceV2", 8 | "SUPPORTED_CHAIN_IDS", 9 | "getNativeTokenAddress", 10 | ] 11 | `); 12 | }); 13 | }); 14 | -------------------------------------------------------------------------------- /packages/assets-controllers/src/token-prices-service/index.ts: -------------------------------------------------------------------------------- 1 | export type { AbstractTokenPricesService } from './abstract-token-prices-service'; 2 | export { 3 | CodefiTokenPricesServiceV2, 4 | SUPPORTED_CHAIN_IDS, 5 | getNativeTokenAddress, 6 | } from './codefi-v2'; 7 | -------------------------------------------------------------------------------- /packages/assets-controllers/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "rootDir": "../.." 6 | }, 7 | "references": [ 8 | { "path": "../accounts-controller" }, 9 | { "path": "../approval-controller" }, 10 | { "path": "../base-controller" }, 11 | { "path": "../controller-utils" }, 12 | { "path": "../keyring-controller" }, 13 | { "path": "../network-controller" }, 14 | { "path": "../preferences-controller" }, 15 | { "path": "../phishing-controller" }, 16 | { "path": "../polling-controller" }, 17 | { "path": "../permission-controller" }, 18 | { "path": "../transaction-controller" } 19 | ], 20 | "include": ["../../types", "./src", "../../tests"] 21 | } 22 | -------------------------------------------------------------------------------- /packages/assets-controllers/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/base-controller/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/base-controller` 2 | 3 | Provides scaffolding for controllers as well a communication system for all controllers. 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/base-controller` 8 | 9 | or 10 | 11 | `npm install @metamask/base-controller` 12 | 13 | ## Contributing 14 | 15 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 16 | -------------------------------------------------------------------------------- /packages/base-controller/jest.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * For a detailed explanation regarding each configuration property and type check, visit: 3 | * https://jestjs.io/docs/configuration 4 | */ 5 | 6 | const merge = require('deepmerge'); 7 | const path = require('path'); 8 | 9 | const baseConfig = require('../../jest.config.packages'); 10 | 11 | const displayName = path.basename(__dirname); 12 | 13 | module.exports = merge(baseConfig, { 14 | // The display name when running multiple projects 15 | displayName, 16 | 17 | // An object that configures minimum threshold enforcement for coverage results 18 | coverageThreshold: { 19 | global: { 20 | branches: 100, 21 | functions: 100, 22 | lines: 100, 23 | statements: 100, 24 | }, 25 | }, 26 | }); 27 | -------------------------------------------------------------------------------- /packages/base-controller/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src" 7 | }, 8 | "references": [ 9 | { 10 | "path": "../controller-utils/tsconfig.build.json" 11 | } 12 | ], 13 | "include": ["../../types", "./src"] 14 | } 15 | -------------------------------------------------------------------------------- /packages/base-controller/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./" 5 | }, 6 | "references": [ 7 | { 8 | "path": "../controller-utils" 9 | }, 10 | { 11 | "path": "../json-rpc-engine" 12 | } 13 | ], 14 | "include": ["../../types", "./src", "./tests"] 15 | } 16 | -------------------------------------------------------------------------------- /packages/base-controller/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/bridge-controller/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/bridge-controller` 2 | 3 | Manages bridge-related quote fetching functionality for MetaMask. 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/bridge-controller` 8 | 9 | or 10 | 11 | `npm install @metamask/bridge-controller` 12 | 13 | ## Contributing 14 | 15 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 16 | -------------------------------------------------------------------------------- /packages/bridge-controller/jest.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * For a detailed explanation regarding each configuration property and type check, visit: 3 | * https://jestjs.io/docs/configuration 4 | */ 5 | 6 | const merge = require('deepmerge'); 7 | const path = require('path'); 8 | 9 | const baseConfig = require('../../jest.config.packages'); 10 | 11 | const displayName = path.basename(__dirname); 12 | 13 | module.exports = merge(baseConfig, { 14 | // The display name when running multiple projects 15 | displayName, 16 | 17 | // An object that configures minimum threshold enforcement for coverage results 18 | coverageThreshold: { 19 | global: { 20 | branches: 93, 21 | functions: 98, 22 | lines: 99, 23 | statements: 99, 24 | }, 25 | }, 26 | }); 27 | -------------------------------------------------------------------------------- /packages/bridge-controller/src/constants/swaps.ts: -------------------------------------------------------------------------------- 1 | export const SWAPS_API_V2_BASE_URL = 'https://swap.api.cx.metamask.io'; 2 | -------------------------------------------------------------------------------- /packages/bridge-controller/src/constants/traces.ts: -------------------------------------------------------------------------------- 1 | export enum TraceName { 2 | BridgeQuotesFetched = 'Bridge Quotes Fetched', 3 | SwapQuotesFetched = 'Swap Quotes Fetched', 4 | } 5 | -------------------------------------------------------------------------------- /packages/bridge-controller/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "resolveJsonModule": true 6 | }, 7 | "references": [ 8 | { "path": "../accounts-controller" }, 9 | { "path": "../base-controller" }, 10 | { "path": "../controller-utils" }, 11 | { "path": "../network-controller" }, 12 | { "path": "../polling-controller" }, 13 | { "path": "../transaction-controller" }, 14 | { "path": "../gas-fee-controller" }, 15 | { "path": "../assets-controllers" }, 16 | { "path": "../multichain-network-controller" }, 17 | { "path": "../remote-feature-flag-controller" } 18 | ], 19 | "include": ["../../types", "./src"] 20 | } 21 | -------------------------------------------------------------------------------- /packages/bridge-controller/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/bridge-status-controller/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/bridge-status-controller` 2 | 3 | Manages bridge-related status fetching functionality for MetaMask. 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/bridge-status-controller` 8 | 9 | or 10 | 11 | `npm install @metamask/bridge-status-controller` 12 | 13 | ## Contributing 14 | 15 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 16 | -------------------------------------------------------------------------------- /packages/bridge-status-controller/jest.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * For a detailed explanation regarding each configuration property and type check, visit: 3 | * https://jestjs.io/docs/configuration 4 | */ 5 | 6 | const merge = require('deepmerge'); 7 | const path = require('path'); 8 | 9 | const baseConfig = require('../../jest.config.packages'); 10 | 11 | const displayName = path.basename(__dirname); 12 | 13 | module.exports = merge(baseConfig, { 14 | // The display name when running multiple projects 15 | displayName, 16 | 17 | // An object that configures minimum threshold enforcement for coverage results 18 | coverageThreshold: { 19 | global: { 20 | branches: 94, 21 | functions: 100, 22 | lines: 100, 23 | statements: 100, 24 | }, 25 | }, 26 | }); 27 | -------------------------------------------------------------------------------- /packages/bridge-status-controller/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "resolveJsonModule": true 6 | }, 7 | "references": [ 8 | { "path": "../accounts-controller" }, 9 | { "path": "../base-controller" }, 10 | { "path": "../bridge-controller" }, 11 | { "path": "../controller-utils" }, 12 | { "path": "../network-controller" }, 13 | { "path": "../polling-controller" }, 14 | { "path": "../transaction-controller" }, 15 | { "path": "../gas-fee-controller" }, 16 | { "path": "../user-operation-controller" }, 17 | { "path": "../multichain-transactions-controller" } 18 | ], 19 | "include": ["../../types", "./src"] 20 | } 21 | -------------------------------------------------------------------------------- /packages/bridge-status-controller/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/build-utils/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/build-utils` 2 | 3 | Utilities for building MetaMask applications. 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/build-utils` 8 | 9 | or 10 | 11 | `npm install @metamask/build-utils` 12 | 13 | ## Usage 14 | 15 | ### `/transforms` 16 | 17 | See [the transforms readme](https://github.com/MetaMask/core/blob/main/packages/build-utils/src/transforms/README.md). 18 | 19 | ## Contributing 20 | 21 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 22 | -------------------------------------------------------------------------------- /packages/build-utils/jest.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * For a detailed explanation regarding each configuration property and type check, visit: 3 | * https://jestjs.io/docs/configuration 4 | */ 5 | 6 | const merge = require('deepmerge'); 7 | const path = require('path'); 8 | 9 | const baseConfig = require('../../jest.config.packages'); 10 | 11 | const displayName = path.basename(__dirname); 12 | 13 | module.exports = merge(baseConfig, { 14 | // The display name when running multiple projects 15 | displayName, 16 | 17 | // An object that configures minimum threshold enforcement for coverage results 18 | coverageThreshold: { 19 | global: { 20 | branches: 100, 21 | functions: 100, 22 | lines: 100, 23 | statements: 100, 24 | }, 25 | }, 26 | }); 27 | -------------------------------------------------------------------------------- /packages/build-utils/src/index.ts: -------------------------------------------------------------------------------- 1 | export type { FeatureLabels } from './transforms/remove-fenced-code'; 2 | export { removeFencedCode } from './transforms/remove-fenced-code'; 3 | export { lintTransformedFile } from './transforms/utils'; 4 | -------------------------------------------------------------------------------- /packages/build-utils/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src" 7 | }, 8 | "include": ["../../types", "./src"] 9 | } 10 | -------------------------------------------------------------------------------- /packages/build-utils/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./" 5 | }, 6 | "include": ["../../types", "./src"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/build-utils/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/chain-agnostic-permission/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/chain-agnostic-permission` 2 | 3 | Defines an endowment type permission designed to persist the account and chain components of a [CAIP-25](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-25.md) request. This package also includes adapters and utility functions for interfacing with this permission. 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/chain-agnostic-permission` 8 | 9 | or 10 | 11 | `npm install @metamask/chain-agnostic-permission` 12 | 13 | ## Contributing 14 | 15 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 16 | -------------------------------------------------------------------------------- /packages/chain-agnostic-permission/jest.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * For a detailed explanation regarding each configuration property and type check, visit: 3 | * https://jestjs.io/docs/configuration 4 | */ 5 | 6 | const merge = require('deepmerge'); 7 | const path = require('path'); 8 | 9 | const baseConfig = require('../../jest.config.packages'); 10 | 11 | const displayName = path.basename(__dirname); 12 | 13 | module.exports = merge(baseConfig, { 14 | // The display name when running multiple projects 15 | displayName, 16 | 17 | // An object that configures minimum threshold enforcement for coverage results 18 | coverageThreshold: { 19 | global: { 20 | branches: 100, 21 | functions: 100, 22 | lines: 100, 23 | statements: 100, 24 | }, 25 | }, 26 | }); 27 | -------------------------------------------------------------------------------- /packages/chain-agnostic-permission/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "resolveJsonModule": true, 7 | "rootDir": "./src" 8 | }, 9 | "references": [ 10 | { "path": "../controller-utils/tsconfig.build.json" }, 11 | { "path": "../network-controller/tsconfig.build.json" }, 12 | { "path": "../permission-controller/tsconfig.build.json" } 13 | ], 14 | "include": ["../../types", "./src"] 15 | } 16 | -------------------------------------------------------------------------------- /packages/chain-agnostic-permission/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "resolveJsonModule": true, 6 | "rootDir": "../.." 7 | }, 8 | "references": [ 9 | { "path": "../controller-utils" }, 10 | { "path": "../network-controller" }, 11 | { "path": "../permission-controller" } 12 | ], 13 | "include": ["../../types", "./src"] 14 | } 15 | -------------------------------------------------------------------------------- /packages/chain-agnostic-permission/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/composable-controller/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/composable-controller` 2 | 3 | Consolidates the state from multiple controllers into one. 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/composable-controller` 8 | 9 | or 10 | 11 | `npm install @metamask/composable-controller` 12 | 13 | ## Contributing 14 | 15 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 16 | -------------------------------------------------------------------------------- /packages/composable-controller/jest.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * For a detailed explanation regarding each configuration property and type check, visit: 3 | * https://jestjs.io/docs/configuration 4 | */ 5 | 6 | const merge = require('deepmerge'); 7 | const path = require('path'); 8 | 9 | const baseConfig = require('../../jest.config.packages'); 10 | 11 | const displayName = path.basename(__dirname); 12 | 13 | module.exports = merge(baseConfig, { 14 | // The display name when running multiple projects 15 | displayName, 16 | 17 | // An object that configures minimum threshold enforcement for coverage results 18 | coverageThreshold: { 19 | global: { 20 | branches: 100, 21 | functions: 100, 22 | lines: 100, 23 | statements: 100, 24 | }, 25 | }, 26 | }); 27 | -------------------------------------------------------------------------------- /packages/composable-controller/src/index.ts: -------------------------------------------------------------------------------- 1 | export type { 2 | ComposableControllerStateConstraint, 3 | ComposableControllerStateChangeEvent, 4 | ComposableControllerEvents, 5 | ComposableControllerMessenger, 6 | } from './ComposableController'; 7 | export { ComposableController } from './ComposableController'; 8 | -------------------------------------------------------------------------------- /packages/composable-controller/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src" 7 | }, 8 | "references": [ 9 | { 10 | "path": "../base-controller/tsconfig.build.json" 11 | } 12 | ], 13 | "include": ["../../types", "./src"] 14 | } 15 | -------------------------------------------------------------------------------- /packages/composable-controller/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./" 5 | }, 6 | "references": [ 7 | { 8 | "path": "../base-controller" 9 | }, 10 | { 11 | "path": "../json-rpc-engine" 12 | } 13 | ], 14 | "include": ["../../types", "./src"] 15 | } 16 | -------------------------------------------------------------------------------- /packages/composable-controller/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/controller-utils/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/controller-utils` 2 | 3 | Data and convenience functions shared by multiple packages. 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/controller-utils` 8 | 9 | or 10 | 11 | `npm install @metamask/controller-utils` 12 | 13 | ## Contributing 14 | 15 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 16 | -------------------------------------------------------------------------------- /packages/controller-utils/jest.environment.js: -------------------------------------------------------------------------------- 1 | const JSDOMEnvironment = require('jest-environment-jsdom'); 2 | 3 | // Custom test environment copied from https://github.com/jsdom/jsdom/issues/2524 4 | // in order to add TextEncoder to jsdom. TextEncoder is expected by @noble/hashes. 5 | 6 | module.exports = class CustomTestEnvironment extends JSDOMEnvironment { 7 | async setup() { 8 | await super.setup(); 9 | if (typeof this.global.TextEncoder === 'undefined') { 10 | const { TextEncoder, TextDecoder } = require('util'); 11 | this.global.TextEncoder = TextEncoder; 12 | this.global.TextDecoder = TextDecoder; 13 | this.global.ArrayBuffer = ArrayBuffer; 14 | this.global.Uint8Array = Uint8Array; 15 | } 16 | } 17 | }; 18 | -------------------------------------------------------------------------------- /packages/controller-utils/src/logger.ts: -------------------------------------------------------------------------------- 1 | import { createProjectLogger, createModuleLogger } from '@metamask/utils'; 2 | 3 | export const projectLogger = createProjectLogger('controller-utils'); 4 | 5 | export { createModuleLogger }; 6 | -------------------------------------------------------------------------------- /packages/controller-utils/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src" 7 | }, 8 | "include": ["../../types", "./src"] 9 | } 10 | -------------------------------------------------------------------------------- /packages/controller-utils/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./" 5 | }, 6 | "include": ["../../types", "./src"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/controller-utils/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/delegation-controller/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/delegation-controller` 2 | 3 | Centralized place to store and sign delegations. 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/delegation-controller` 8 | 9 | or 10 | 11 | `npm install @metamask/delegation-controller` 12 | 13 | ## Contributing 14 | 15 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 16 | -------------------------------------------------------------------------------- /packages/delegation-controller/jest.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * For a detailed explanation regarding each configuration property and type check, visit: 3 | * https://jestjs.io/docs/configuration 4 | */ 5 | 6 | const merge = require('deepmerge'); 7 | const path = require('path'); 8 | 9 | const baseConfig = require('../../jest.config.packages'); 10 | 11 | const displayName = path.basename(__dirname); 12 | 13 | module.exports = merge(baseConfig, { 14 | // The display name when running multiple projects 15 | displayName, 16 | 17 | // An object that configures minimum threshold enforcement for coverage results 18 | coverageThreshold: { 19 | global: { 20 | branches: 100, 21 | functions: 100, 22 | lines: 100, 23 | statements: 100, 24 | }, 25 | }, 26 | }); 27 | -------------------------------------------------------------------------------- /packages/delegation-controller/src/index.ts: -------------------------------------------------------------------------------- 1 | export type { 2 | DelegationControllerSignDelegationAction, 3 | DelegationControllerStoreAction, 4 | DelegationControllerListAction, 5 | DelegationControllerRetrieveAction, 6 | DelegationControllerChainAction, 7 | DelegationControllerDeleteAction, 8 | DelegationControllerActions, 9 | DelegationControllerEvents, 10 | DelegationControllerMessenger, 11 | DelegationEntry, 12 | DelegationFilter, 13 | } from './types'; 14 | 15 | export { DelegationController } from './DelegationController'; 16 | -------------------------------------------------------------------------------- /packages/delegation-controller/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src" 7 | }, 8 | "references": [ 9 | { "path": "../base-controller/tsconfig.build.json" }, 10 | { "path": "../keyring-controller/tsconfig.build.json" }, 11 | { "path": "../accounts-controller/tsconfig.build.json" } 12 | ], 13 | "include": ["../../types", "./src"] 14 | } 15 | -------------------------------------------------------------------------------- /packages/delegation-controller/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./" 5 | }, 6 | "references": [ 7 | { "path": "../base-controller" }, 8 | { "path": "../keyring-controller" }, 9 | { "path": "../accounts-controller" } 10 | ], 11 | "include": ["../../types", "./src"] 12 | } 13 | -------------------------------------------------------------------------------- /packages/delegation-controller/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/earn-controller/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/earn-controller` 2 | 3 | Manages state for earning features and coordinates interactions between staking services, SDK integrations, and other controllers to enable users to participate in various earning opportunities. 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/earn-controller` 8 | 9 | or 10 | 11 | `npm install @metamask/earn-controller` 12 | 13 | ## Contributing 14 | 15 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 16 | -------------------------------------------------------------------------------- /packages/earn-controller/jest.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * For a detailed explanation regarding each configuration property and type check, visit: 3 | * https://jestjs.io/docs/configuration 4 | */ 5 | 6 | const merge = require('deepmerge'); 7 | const path = require('path'); 8 | 9 | const baseConfig = require('../../jest.config.packages'); 10 | 11 | const displayName = path.basename(__dirname); 12 | 13 | module.exports = merge(baseConfig, { 14 | // The display name when running multiple projects 15 | displayName, 16 | 17 | // An object that configures minimum threshold enforcement for coverage results 18 | coverageThreshold: { 19 | global: { 20 | branches: 100, 21 | functions: 100, 22 | lines: 100, 23 | statements: 100, 24 | }, 25 | }, 26 | }); 27 | -------------------------------------------------------------------------------- /packages/earn-controller/src/types.ts: -------------------------------------------------------------------------------- 1 | export type RefreshStakingEligibilityOptions = { 2 | address?: string; 3 | }; 4 | 5 | export type RefreshPooledStakesOptions = { 6 | resetCache?: boolean; 7 | address?: string; 8 | chainId?: number; 9 | }; 10 | 11 | export type RefreshPooledStakingDataOptions = { 12 | resetCache?: boolean; 13 | address?: string; 14 | chainId?: number; 15 | }; 16 | 17 | export type RefreshLendingPositionsOptions = { 18 | address?: string; 19 | }; 20 | 21 | export type RefreshLendingEligibilityOptions = { 22 | address?: string; 23 | }; 24 | -------------------------------------------------------------------------------- /packages/earn-controller/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src" 7 | }, 8 | "references": [ 9 | { 10 | "path": "../base-controller/tsconfig.build.json" 11 | }, 12 | { 13 | "path": "../network-controller/tsconfig.build.json" 14 | }, 15 | { 16 | "path": "../accounts-controller/tsconfig.build.json" 17 | }, 18 | { 19 | "path": "../transaction-controller/tsconfig.build.json" 20 | } 21 | ], 22 | "include": ["../../types", "./src"] 23 | } 24 | -------------------------------------------------------------------------------- /packages/earn-controller/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./" 5 | }, 6 | "include": ["../../types", "./src"], 7 | "references": [ 8 | { 9 | "path": "../base-controller" 10 | }, 11 | { 12 | "path": "../network-controller" 13 | }, 14 | { 15 | "path": "../accounts-controller" 16 | }, 17 | { 18 | "path": "../transaction-controller" 19 | } 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /packages/earn-controller/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/eip1193-permission-middleware/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/eip1193-permission-middleware` 2 | 3 | Implements the JSON-RPC methods for managing permissions as referenced in [EIP-2255](https://eips.ethereum.org/EIPS/eip-2255) and [MIP-2](https://github.com/MetaMask/metamask-improvement-proposals/blob/main/MIPs/mip-2.md), but adapted to support [chain-agnostic permission caveats](https://npmjs.com/package/@metamask/chain-agnostic-permission). 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/eip1193-permission-middleware` 8 | 9 | or 10 | 11 | `npm install @metamask/eip1193-permission-middleware` 12 | 13 | ## Contributing 14 | 15 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 16 | -------------------------------------------------------------------------------- /packages/eip1193-permission-middleware/src/index.test.ts: -------------------------------------------------------------------------------- 1 | import * as allExports from '.'; 2 | 3 | describe('@metamask/eip1193-permission-middleware', () => { 4 | it('has expected JavaScript exports', () => { 5 | expect(Object.keys(allExports)).toMatchInlineSnapshot(` 6 | Array [ 7 | "getPermissionsHandler", 8 | "requestPermissionsHandler", 9 | "revokePermissionsHandler", 10 | ] 11 | `); 12 | }); 13 | }); 14 | -------------------------------------------------------------------------------- /packages/eip1193-permission-middleware/src/index.ts: -------------------------------------------------------------------------------- 1 | export { getPermissionsHandler } from './wallet-getPermissions'; 2 | export { requestPermissionsHandler } from './wallet-requestPermissions'; 3 | export { revokePermissionsHandler } from './wallet-revokePermissions'; 4 | -------------------------------------------------------------------------------- /packages/eip1193-permission-middleware/src/types.ts: -------------------------------------------------------------------------------- 1 | // There is no logic in this file. 2 | /* istanbul ignore file */ 3 | 4 | export enum CaveatTypes { 5 | RestrictReturnedAccounts = 'restrictReturnedAccounts', 6 | RestrictNetworkSwitching = 'restrictNetworkSwitching', 7 | } 8 | 9 | export enum EndowmentTypes { 10 | PermittedChains = 'endowment:permitted-chains', 11 | } 12 | 13 | export enum RestrictedMethods { 14 | EthAccounts = 'eth_accounts', 15 | } 16 | -------------------------------------------------------------------------------- /packages/eip1193-permission-middleware/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src" 7 | }, 8 | "references": [ 9 | { "path": "../chain-agnostic-permission/tsconfig.build.json" }, 10 | { "path": "../controller-utils/tsconfig.build.json" }, 11 | { "path": "../json-rpc-engine/tsconfig.build.json" }, 12 | { "path": "../permission-controller/tsconfig.build.json" } 13 | ], 14 | "include": ["../../types", "./src"] 15 | } 16 | -------------------------------------------------------------------------------- /packages/eip1193-permission-middleware/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "rootDir": "../.." 6 | }, 7 | "references": [ 8 | { "path": "../chain-agnostic-permission" }, 9 | { "path": "../controller-utils" }, 10 | { "path": "../json-rpc-engine" }, 11 | { "path": "../permission-controller" } 12 | ], 13 | "include": ["../../types", "./src"] 14 | } 15 | -------------------------------------------------------------------------------- /packages/eip1193-permission-middleware/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/eip1193-permission-middleware/types.ts: -------------------------------------------------------------------------------- 1 | // There is no logic in this file. 2 | /* istanbul ignore file */ 3 | 4 | export enum CaveatTypes { 5 | RestrictReturnedAccounts = 'restrictReturnedAccounts', 6 | RestrictNetworkSwitching = 'restrictNetworkSwitching', 7 | } 8 | 9 | export enum EndowmentTypes { 10 | PermittedChains = 'endowment:permitted-chains', 11 | } 12 | 13 | export enum RestrictedMethods { 14 | EthAccounts = 'eth_accounts', 15 | } 16 | -------------------------------------------------------------------------------- /packages/ens-controller/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/ens-controller` 2 | 3 | Maps ENS names to their resolved addresses by chain id. 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/ens-controller` 8 | 9 | or 10 | 11 | `npm install @metamask/ens-controller` 12 | 13 | ## Contributing 14 | 15 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 16 | -------------------------------------------------------------------------------- /packages/ens-controller/jest.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * For a detailed explanation regarding each configuration property and type check, visit: 3 | * https://jestjs.io/docs/configuration 4 | */ 5 | 6 | const merge = require('deepmerge'); 7 | const path = require('path'); 8 | 9 | const baseConfig = require('../../jest.config.packages'); 10 | 11 | const displayName = path.basename(__dirname); 12 | 13 | module.exports = merge(baseConfig, { 14 | // The display name when running multiple projects 15 | displayName, 16 | 17 | // An object that configures minimum threshold enforcement for coverage results 18 | coverageThreshold: { 19 | global: { 20 | branches: 100, 21 | functions: 100, 22 | lines: 100, 23 | statements: 100, 24 | }, 25 | }, 26 | }); 27 | -------------------------------------------------------------------------------- /packages/ens-controller/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './EnsController'; 2 | -------------------------------------------------------------------------------- /packages/ens-controller/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src" 7 | }, 8 | "references": [ 9 | { "path": "../base-controller/tsconfig.build.json" }, 10 | { "path": "../controller-utils/tsconfig.build.json" }, 11 | { "path": "../network-controller/tsconfig.build.json" } 12 | ], 13 | "include": ["../../types", "./src"] 14 | } 15 | -------------------------------------------------------------------------------- /packages/ens-controller/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./" 5 | }, 6 | "references": [ 7 | { "path": "../base-controller" }, 8 | { "path": "../controller-utils" }, 9 | { "path": "../network-controller" } 10 | ], 11 | "include": ["../../types", "./src"] 12 | } 13 | -------------------------------------------------------------------------------- /packages/ens-controller/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/error-reporting-service/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All notable changes to this project will be documented in this file. 4 | 5 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), 6 | and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). 7 | 8 | ## [Unreleased] 9 | 10 | ## [1.0.0] 11 | 12 | ### Added 13 | 14 | - Initial release ([#5882](https://github.com/MetaMask/core/pull/5882)) 15 | 16 | [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/error-reporting-service@1.0.0...HEAD 17 | [1.0.0]: https://github.com/MetaMask/core/releases/tag/@metamask/error-reporting-service@1.0.0 18 | -------------------------------------------------------------------------------- /packages/error-reporting-service/jest.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * For a detailed explanation regarding each configuration property and type check, visit: 3 | * https://jestjs.io/docs/configuration 4 | */ 5 | 6 | const merge = require('deepmerge'); 7 | const path = require('path'); 8 | 9 | const baseConfig = require('../../jest.config.packages'); 10 | 11 | const displayName = path.basename(__dirname); 12 | 13 | module.exports = merge(baseConfig, { 14 | // The display name when running multiple projects 15 | displayName, 16 | 17 | // An object that configures minimum threshold enforcement for coverage results 18 | coverageThreshold: { 19 | global: { 20 | branches: 100, 21 | functions: 100, 22 | lines: 100, 23 | statements: 100, 24 | }, 25 | }, 26 | }); 27 | -------------------------------------------------------------------------------- /packages/error-reporting-service/src/index.ts: -------------------------------------------------------------------------------- 1 | export { ErrorReportingService } from './error-reporting-service'; 2 | export type { 3 | ErrorReportingServiceActions, 4 | ErrorReportingServiceCaptureExceptionAction, 5 | ErrorReportingServiceEvents, 6 | ErrorReportingServiceMessenger, 7 | } from './error-reporting-service'; 8 | -------------------------------------------------------------------------------- /packages/error-reporting-service/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src" 7 | }, 8 | "references": [{ "path": "../base-controller/tsconfig.build.json" }], 9 | "include": ["../../types", "./src"] 10 | } 11 | -------------------------------------------------------------------------------- /packages/error-reporting-service/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./" 5 | }, 6 | "references": [{ "path": "../base-controller" }], 7 | "include": ["../../types", "./src"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/error-reporting-service/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/eth-json-rpc-provider/README.md: -------------------------------------------------------------------------------- 1 | # eth-json-rpc-provider 2 | 3 | This package provides functions for creating an Ethereum provider from a [JSON-RPC engine](https://github.com/MetaMask/json-rpc-engine), or from middleware compatible with JSON-RPC engine. 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/eth-json-rpc-provider` 8 | 9 | or 10 | 11 | `npm install @metamask/eth-json-rpc-provider` 12 | 13 | ## Contributing 14 | 15 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 16 | -------------------------------------------------------------------------------- /packages/eth-json-rpc-provider/jest.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * For a detailed explanation regarding each configuration property and type check, visit: 3 | * https://jestjs.io/docs/configuration 4 | */ 5 | 6 | const merge = require('deepmerge'); 7 | const path = require('path'); 8 | 9 | const baseConfig = require('../../jest.config.packages'); 10 | 11 | const displayName = path.basename(__dirname); 12 | 13 | module.exports = merge(baseConfig, { 14 | // The display name when running multiple projects 15 | displayName, 16 | 17 | // An object that configures minimum threshold enforcement for coverage results 18 | coverageThreshold: { 19 | global: { 20 | branches: 100, 21 | functions: 100, 22 | lines: 100, 23 | statements: 100, 24 | }, 25 | }, 26 | }); 27 | -------------------------------------------------------------------------------- /packages/eth-json-rpc-provider/src/index.test.ts: -------------------------------------------------------------------------------- 1 | import * as allExports from '.'; 2 | 3 | describe('Package exports', () => { 4 | it('has expected exports', () => { 5 | expect(Object.keys(allExports)).toMatchInlineSnapshot(` 6 | Array [ 7 | "SafeEventEmitterProvider", 8 | "providerFromEngine", 9 | "providerFromMiddleware", 10 | ] 11 | `); 12 | }); 13 | }); 14 | -------------------------------------------------------------------------------- /packages/eth-json-rpc-provider/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './provider-from-engine'; 2 | export * from './provider-from-middleware'; 3 | export { SafeEventEmitterProvider } from './safe-event-emitter-provider'; 4 | -------------------------------------------------------------------------------- /packages/eth-json-rpc-provider/src/provider-from-engine.ts: -------------------------------------------------------------------------------- 1 | import type { JsonRpcEngine } from '@metamask/json-rpc-engine'; 2 | 3 | import { SafeEventEmitterProvider } from './safe-event-emitter-provider'; 4 | 5 | /** 6 | * Construct an Ethereum provider from the given JSON-RPC engine. 7 | * 8 | * @param engine - The JSON-RPC engine to construct a provider from. 9 | * @returns An Ethereum provider. 10 | */ 11 | export function providerFromEngine( 12 | engine: JsonRpcEngine, 13 | ): SafeEventEmitterProvider { 14 | return new SafeEventEmitterProvider({ engine }); 15 | } 16 | -------------------------------------------------------------------------------- /packages/eth-json-rpc-provider/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src" 7 | }, 8 | "references": [{ "path": "../json-rpc-engine/tsconfig.build.json" }], 9 | "include": ["../../types", "./src"] 10 | } 11 | -------------------------------------------------------------------------------- /packages/eth-json-rpc-provider/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "rootDir": "../..", 6 | "exactOptionalPropertyTypes": true, 7 | "forceConsistentCasingInFileNames": true, 8 | "noErrorTruncation": true, 9 | "noUncheckedIndexedAccess": true, 10 | "target": "es2017" 11 | }, 12 | "references": [ 13 | { 14 | "path": "../json-rpc-engine" 15 | } 16 | ], 17 | "include": ["../../types", "../../tests", "./src", "./tests"] 18 | } 19 | -------------------------------------------------------------------------------- /packages/eth-json-rpc-provider/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/foundryup/.gitignore: -------------------------------------------------------------------------------- 1 | .metamask -------------------------------------------------------------------------------- /packages/foundryup/.yarnrc.yml: -------------------------------------------------------------------------------- 1 | enableGlobalCache: false 2 | -------------------------------------------------------------------------------- /packages/foundryup/jest.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * For a detailed explanation regarding each configuration property and type check, visit: 3 | * https://jestjs.io/docs/configuration 4 | */ 5 | 6 | const merge = require('deepmerge'); 7 | const path = require('path'); 8 | 9 | const baseConfig = require('../../jest.config.packages'); 10 | 11 | const displayName = path.basename(__dirname); 12 | 13 | module.exports = merge(baseConfig, { 14 | // The display name when running multiple projects 15 | displayName, 16 | 17 | // An object that configures minimum threshold enforcement for coverage results 18 | coverageThreshold: { 19 | global: { 20 | branches: 50, 21 | functions: 50, 22 | lines: 50, 23 | statements: 50, 24 | }, 25 | }, 26 | }); 27 | -------------------------------------------------------------------------------- /packages/foundryup/src/cli.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | /** 4 | * CLI entry point for Foundryup. 5 | * 6 | * This script downloads and installs Foundry binaries. 7 | * If an error occurs, it logs the error and exits with code 1. 8 | */ 9 | import { downloadAndInstallFoundryBinaries } from '.'; 10 | 11 | /** 12 | * Run the main installation process and handle errors. 13 | */ 14 | downloadAndInstallFoundryBinaries().catch((error) => { 15 | /** 16 | * Log any error that occurs during installation and exit with code 1. 17 | * 18 | * @param error - The error thrown during installation. 19 | */ 20 | console.error('Error:', error); 21 | process.exit(1); 22 | }); 23 | -------------------------------------------------------------------------------- /packages/foundryup/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "lib": ["ES2021", "DOM"], 6 | "outDir": "./dist", 7 | "rootDir": "./src" 8 | }, 9 | "references": [], 10 | "include": ["../../types", "./types", "./src"] 11 | } 12 | -------------------------------------------------------------------------------- /packages/foundryup/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "lib": ["ES2021", "DOM"] 6 | }, 7 | "references": [], 8 | "include": ["../../types", "./types", "./src"] 9 | } 10 | -------------------------------------------------------------------------------- /packages/foundryup/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/foundryup/types/node:fs.d.ts: -------------------------------------------------------------------------------- 1 | declare module 'fs' { 2 | // eslint-disable-next-line @typescript-eslint/consistent-type-definitions 3 | interface Dirent { 4 | parentPath: string; 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /packages/foundryup/types/unzipper.d.ts: -------------------------------------------------------------------------------- 1 | import 'unzipper'; 2 | 3 | declare module 'unzipper' { 4 | type Source = { 5 | stream: (offset: number, length: number) => NodeJS.ReadableStream; 6 | size: () => Promise; 7 | }; 8 | type Options = { 9 | tailSize?: number; 10 | }; 11 | namespace Open { 12 | function custom( 13 | source: Source, 14 | options?: Options, 15 | ): Promise; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /packages/gas-fee-controller/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/gas-fee-controller` 2 | 3 | Periodically calculates gas fee estimates based on various gas limits as well as other data displayed on transaction confirm screens. 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/gas-fee-controller` 8 | 9 | or 10 | 11 | `npm install @metamask/gas-fee-controller` 12 | 13 | ## Contributing 14 | 15 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 16 | -------------------------------------------------------------------------------- /packages/gas-fee-controller/jest.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * For a detailed explanation regarding each configuration property and type check, visit: 3 | * https://jestjs.io/docs/configuration 4 | */ 5 | 6 | const merge = require('deepmerge'); 7 | const path = require('path'); 8 | 9 | const baseConfig = require('../../jest.config.packages'); 10 | 11 | const displayName = path.basename(__dirname); 12 | 13 | module.exports = merge(baseConfig, { 14 | // The display name when running multiple projects 15 | displayName, 16 | 17 | // An object that configures minimum threshold enforcement for coverage results 18 | coverageThreshold: { 19 | global: { 20 | branches: 81.35, 21 | functions: 80.55, 22 | lines: 86.28, 23 | statements: 86.44, 24 | }, 25 | }, 26 | }); 27 | -------------------------------------------------------------------------------- /packages/gas-fee-controller/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './GasFeeController'; 2 | -------------------------------------------------------------------------------- /packages/gas-fee-controller/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src" 7 | }, 8 | "references": [ 9 | { "path": "../base-controller/tsconfig.build.json" }, 10 | { "path": "../controller-utils/tsconfig.build.json" }, 11 | { "path": "../network-controller/tsconfig.build.json" }, 12 | { "path": "../polling-controller/tsconfig.build.json" } 13 | ], 14 | "include": ["../../types", "./src"] 15 | } 16 | -------------------------------------------------------------------------------- /packages/gas-fee-controller/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./" 5 | }, 6 | "references": [ 7 | { "path": "../base-controller" }, 8 | { "path": "../controller-utils" }, 9 | { "path": "../network-controller" }, 10 | { "path": "../polling-controller" } 11 | ], 12 | "include": ["../../types", "./src"] 13 | } 14 | -------------------------------------------------------------------------------- /packages/gas-fee-controller/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/json-rpc-engine/jest.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * For a detailed explanation regarding each configuration property and type check, visit: 3 | * https://jestjs.io/docs/configuration 4 | */ 5 | 6 | const merge = require('deepmerge'); 7 | const path = require('path'); 8 | 9 | const baseConfig = require('../../jest.config.packages'); 10 | 11 | const displayName = path.basename(__dirname); 12 | 13 | module.exports = merge(baseConfig, { 14 | // The display name when running multiple projects 15 | displayName, 16 | 17 | // An object that configures minimum threshold enforcement for coverage results 18 | coverageThreshold: { 19 | global: { 20 | branches: 100, 21 | functions: 100, 22 | lines: 100, 23 | statements: 100, 24 | }, 25 | }, 26 | }); 27 | -------------------------------------------------------------------------------- /packages/json-rpc-engine/src/getUniqueId.ts: -------------------------------------------------------------------------------- 1 | // uint32 (two's complement) max 2 | // more conservative than Number.MAX_SAFE_INTEGER 3 | const MAX = 4_294_967_295; 4 | let idCounter = Math.floor(Math.random() * MAX); 5 | 6 | /** 7 | * Gets an ID that is guaranteed to be unique so long as no more than 8 | * 4_294_967_295 (uint32 max) IDs are created, or the IDs are rapidly turned 9 | * over. 10 | * 11 | * @returns The unique ID. 12 | */ 13 | export function getUniqueId(): number { 14 | idCounter = (idCounter + 1) % MAX; 15 | return idCounter; 16 | } 17 | -------------------------------------------------------------------------------- /packages/json-rpc-engine/src/index.test.ts: -------------------------------------------------------------------------------- 1 | import * as allExports from '.'; 2 | 3 | describe('@metamask/json-rpc-engine', () => { 4 | it('has expected JavaScript exports', () => { 5 | expect(Object.keys(allExports)).toMatchInlineSnapshot(` 6 | Array [ 7 | "createAsyncMiddleware", 8 | "createScaffoldMiddleware", 9 | "getUniqueId", 10 | "createIdRemapMiddleware", 11 | "JsonRpcEngine", 12 | "mergeMiddleware", 13 | ] 14 | `); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /packages/json-rpc-engine/src/index.ts: -------------------------------------------------------------------------------- 1 | export type { 2 | AsyncJsonRpcEngineNextCallback, 3 | AsyncJsonrpcMiddleware, 4 | } from './createAsyncMiddleware'; 5 | export { createAsyncMiddleware } from './createAsyncMiddleware'; 6 | export { createScaffoldMiddleware } from './createScaffoldMiddleware'; 7 | export { getUniqueId } from './getUniqueId'; 8 | export { createIdRemapMiddleware } from './idRemapMiddleware'; 9 | export type { 10 | JsonRpcEngineCallbackError, 11 | JsonRpcEngineReturnHandler, 12 | JsonRpcEngineNextCallback, 13 | JsonRpcEngineEndCallback, 14 | JsonRpcMiddleware, 15 | JsonRpcNotificationHandler, 16 | } from './JsonRpcEngine'; 17 | export { JsonRpcEngine } from './JsonRpcEngine'; 18 | export { mergeMiddleware } from './mergeMiddleware'; 19 | -------------------------------------------------------------------------------- /packages/json-rpc-engine/src/mergeMiddleware.ts: -------------------------------------------------------------------------------- 1 | import type { Json, JsonRpcParams } from '@metamask/utils'; 2 | 3 | import type { JsonRpcMiddleware } from './JsonRpcEngine'; 4 | import { JsonRpcEngine } from './JsonRpcEngine'; 5 | 6 | /** 7 | * Takes a stack of middleware and joins them into a single middleware function. 8 | * 9 | * @param middlewareStack - The middleware stack to merge. 10 | * @returns The merged middleware function. 11 | */ 12 | export function mergeMiddleware( 13 | middlewareStack: JsonRpcMiddleware[], 14 | ) { 15 | const engine = new JsonRpcEngine(); 16 | middlewareStack.forEach((middleware) => engine.push(middleware)); 17 | return engine.asMiddleware(); 18 | } 19 | -------------------------------------------------------------------------------- /packages/json-rpc-engine/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src" 7 | }, 8 | "include": ["../../types", "./src"] 9 | } 10 | -------------------------------------------------------------------------------- /packages/json-rpc-engine/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "rootDir": "../..", 6 | "exactOptionalPropertyTypes": true, 7 | "forceConsistentCasingInFileNames": true, 8 | "noErrorTruncation": true, 9 | "noUncheckedIndexedAccess": true, 10 | "target": "es2020" 11 | }, 12 | "include": ["../../types", "../../tests", "./src", "./tests"] 13 | } 14 | -------------------------------------------------------------------------------- /packages/json-rpc-engine/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/json-rpc-middleware-stream/README.md: -------------------------------------------------------------------------------- 1 | # @metamask/json-rpc-middleware-stream 2 | 3 | A small toolset for streaming JSON RPC data and matching requests and responses. Made to be used with [`@metamask/json-rpc-engine`](https://npmjs.com/package/@metamask/json-rpc-engine). 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/json-rpc-middleware-stream` 8 | 9 | or 10 | 11 | `npm install @metamask/json-rpc-middleware-stream` 12 | 13 | ## Contributing 14 | 15 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 16 | -------------------------------------------------------------------------------- /packages/json-rpc-middleware-stream/src/index.ts: -------------------------------------------------------------------------------- 1 | import createEngineStream from './createEngineStream'; 2 | import createStreamMiddleware from './createStreamMiddleware'; 3 | 4 | export { createEngineStream, createStreamMiddleware }; 5 | -------------------------------------------------------------------------------- /packages/json-rpc-middleware-stream/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src" 7 | }, 8 | "references": [{ "path": "../json-rpc-engine/tsconfig.build.json" }], 9 | "include": ["../../types", "./src"] 10 | } 11 | -------------------------------------------------------------------------------- /packages/json-rpc-middleware-stream/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "forceConsistentCasingInFileNames": true, 6 | "target": "es2017" 7 | }, 8 | "references": [{ "path": "../json-rpc-engine" }], 9 | "include": ["../../types", "./src"] 10 | } 11 | -------------------------------------------------------------------------------- /packages/json-rpc-middleware-stream/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/keyring-controller/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/keyring-controller` 2 | 3 | Stores identities seen in the wallet and manages interactions such as signing. 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/keyring-controller` 8 | 9 | or 10 | 11 | `npm install @metamask/keyring-controller` 12 | 13 | ## Contributing 14 | 15 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 16 | -------------------------------------------------------------------------------- /packages/keyring-controller/jest.environment.js: -------------------------------------------------------------------------------- 1 | const NodeEnvironment = require('jest-environment-node'); 2 | 3 | /** 4 | * KeyringController depends on @noble/hashes, which as of 1.3.2 relies on the 5 | * Web Crypto API in Node and browsers. 6 | */ 7 | class CustomTestEnvironment extends NodeEnvironment { 8 | async setup() { 9 | await super.setup(); 10 | if (typeof this.global.crypto === 'undefined') { 11 | this.global.crypto = require('crypto').webcrypto; 12 | } 13 | } 14 | } 15 | 16 | module.exports = CustomTestEnvironment; 17 | -------------------------------------------------------------------------------- /packages/keyring-controller/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './KeyringController'; 2 | export type * from './types'; 3 | -------------------------------------------------------------------------------- /packages/keyring-controller/tests/mocks/mockErc4337Keyring.ts: -------------------------------------------------------------------------------- 1 | import type { EthKeyring } from '@metamask/keyring-internal-api'; 2 | import type { Hex, Json } from '@metamask/utils'; 3 | 4 | export class MockErc4337Keyring implements EthKeyring { 5 | static type = 'ERC-4337 Keyring'; 6 | 7 | public type = MockErc4337Keyring.type; 8 | 9 | async serialize(): Promise { 10 | return {}; 11 | } 12 | 13 | async deserialize() { 14 | // Empty 15 | } 16 | 17 | async getAccounts(): Promise { 18 | return []; 19 | } 20 | 21 | async addAccounts(_: number): Promise { 22 | return []; 23 | } 24 | 25 | prepareUserOperation = jest.fn(); 26 | 27 | patchUserOperation = jest.fn(); 28 | 29 | signUserOperation = jest.fn(); 30 | } 31 | -------------------------------------------------------------------------------- /packages/keyring-controller/tests/mocks/mockTransaction.ts: -------------------------------------------------------------------------------- 1 | import { TransactionFactory, type TypedTxData } from '@ethereumjs/tx'; 2 | 3 | /** 4 | * Build a mock transaction, optionally overriding 5 | * any of the default values. 6 | * 7 | * @param options - The transaction options to override. 8 | * @returns The mock transaction. 9 | */ 10 | export const buildMockTransaction = (options: TypedTxData = {}) => 11 | TransactionFactory.fromTxData({ 12 | to: '0xB1A13aBECeB71b2E758c7e0Da404DF0C72Ca3a12', 13 | value: '0x0', 14 | data: '0x', 15 | gasPrice: '0x0', 16 | nonce: '0x0', 17 | ...options, 18 | }); 19 | -------------------------------------------------------------------------------- /packages/keyring-controller/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src" 7 | }, 8 | "references": [ 9 | { 10 | "path": "../base-controller/tsconfig.build.json" 11 | }, 12 | { 13 | "path": "../message-manager/tsconfig.build.json" 14 | } 15 | ], 16 | "include": ["../../types", "./src"] 17 | } 18 | -------------------------------------------------------------------------------- /packages/keyring-controller/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./" 5 | }, 6 | "references": [ 7 | { 8 | "path": "../base-controller" 9 | }, 10 | { 11 | "path": "../message-manager" 12 | } 13 | ], 14 | "include": ["../../types", "./src", "./tests"] 15 | } 16 | -------------------------------------------------------------------------------- /packages/keyring-controller/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/logging-controller/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/logging-controller` 2 | 3 | Stores logs in state meant to assist debugging user issues. Logs stored in this fashion can only be retrieved via the state log download feature exposed by the clients, and thus must be initiated by the user. 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/logging-controller` 8 | 9 | or 10 | 11 | `npm install @metamask/logging-controller` 12 | 13 | ## Contributing 14 | 15 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 16 | -------------------------------------------------------------------------------- /packages/logging-controller/jest.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * For a detailed explanation regarding each configuration property and type check, visit: 3 | * https://jestjs.io/docs/configuration 4 | */ 5 | 6 | const merge = require('deepmerge'); 7 | const path = require('path'); 8 | 9 | const baseConfig = require('../../jest.config.packages'); 10 | 11 | const displayName = path.basename(__dirname); 12 | 13 | module.exports = merge(baseConfig, { 14 | // The display name when running multiple projects 15 | displayName, 16 | 17 | // An object that configures minimum threshold enforcement for coverage results 18 | coverageThreshold: { 19 | global: { 20 | branches: 100, 21 | functions: 100, 22 | lines: 100, 23 | statements: 100, 24 | }, 25 | }, 26 | }); 27 | -------------------------------------------------------------------------------- /packages/logging-controller/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './LoggingController'; 2 | export * from './logTypes'; 3 | -------------------------------------------------------------------------------- /packages/logging-controller/src/logTypes/GenericLog.ts: -------------------------------------------------------------------------------- 1 | import type { LogType } from './LogType'; 2 | 3 | /* 4 | * The logging controller can handle any kind of log statement that may benefit 5 | * users and MetaMask support agents helping those users. These logs are typed 6 | * as generic. 7 | */ 8 | export type GenericLog = { 9 | type: LogType.GenericLog; 10 | // TODO: Replace `any` with type 11 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 12 | data: any; 13 | }; 14 | -------------------------------------------------------------------------------- /packages/logging-controller/src/logTypes/LogType.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * An enum representing the allowed types of log messages supported by this 3 | * controller. When adding new types of special cased log types, make sure to 4 | * extend this enum with the new type name. 5 | */ 6 | export enum LogType { 7 | GenericLog = 'GenericLog', 8 | EthSignLog = 'EthSignLog', 9 | } 10 | -------------------------------------------------------------------------------- /packages/logging-controller/src/logTypes/README.md: -------------------------------------------------------------------------------- 1 | ## Log Types 2 | 3 | This folder contains type definitions for the various special cased log types. So far this only includes the base generic type, as well as the EthSignLog type. 4 | 5 | ### Adding a special cased log type. 6 | 7 | 1. In src/logTypes/LogType.ts extend the enum LogType to include a new string for your proposed special log type. 8 | 2. Create new file in src/logTypes that matches the name of the type you added to the enum. Using the EthSignLog or GenericLog as an example, create your new log type and use the LogType enum for the type key. 9 | 3. Import your new type in the src/logTypes/index.ts and add it to the Log union type. 10 | 4. Re-export all types from your new file at the end of src/logTypes/index.ts file. 11 | -------------------------------------------------------------------------------- /packages/logging-controller/src/logTypes/index.ts: -------------------------------------------------------------------------------- 1 | import type { EthSignLog } from './EthSignLog'; 2 | import type { GenericLog } from './GenericLog'; 3 | 4 | /** 5 | * Union of all possible log data structures. 6 | */ 7 | export type Log = EthSignLog | GenericLog; 8 | 9 | /** 10 | * Export all other types from these files for usage by clients 11 | */ 12 | export * from './EthSignLog'; 13 | export * from './GenericLog'; 14 | export * from './LogType'; 15 | -------------------------------------------------------------------------------- /packages/logging-controller/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src" 7 | }, 8 | "references": [ 9 | { "path": "../base-controller/tsconfig.build.json" }, 10 | { "path": "../controller-utils/tsconfig.build.json" } 11 | ], 12 | "include": ["../../types", "./src"] 13 | } 14 | -------------------------------------------------------------------------------- /packages/logging-controller/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./" 5 | }, 6 | "references": [ 7 | { "path": "../base-controller" }, 8 | { "path": "../controller-utils" } 9 | ], 10 | "include": ["../../types", "./src"] 11 | } 12 | -------------------------------------------------------------------------------- /packages/logging-controller/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/message-manager/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/message-manager` 2 | 3 | Stores and manages interactions with signing requests. 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/message-manager` 8 | 9 | or 10 | 11 | `npm install @metamask/message-manager` 12 | 13 | ## Compatibility 14 | 15 | This package relies implicitly upon the `EventEmitter` module. This module is available natively in Node.js, but when using this package for the browser, make sure to use a polyfill such as `events`. 16 | 17 | ## Contributing 18 | 19 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 20 | -------------------------------------------------------------------------------- /packages/message-manager/jest.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * For a detailed explanation regarding each configuration property and type check, visit: 3 | * https://jestjs.io/docs/configuration 4 | */ 5 | 6 | const merge = require('deepmerge'); 7 | const path = require('path'); 8 | 9 | const baseConfig = require('../../jest.config.packages'); 10 | 11 | const displayName = path.basename(__dirname); 12 | 13 | module.exports = merge(baseConfig, { 14 | // The display name when running multiple projects 15 | displayName, 16 | 17 | // An object that configures minimum threshold enforcement for coverage results 18 | coverageThreshold: { 19 | global: { 20 | branches: 100, 21 | functions: 100, 22 | lines: 100, 23 | statements: 100, 24 | }, 25 | }, 26 | }); 27 | -------------------------------------------------------------------------------- /packages/message-manager/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './AbstractMessageManager'; 2 | export * from './EncryptionPublicKeyManager'; 3 | export * from './DecryptMessageManager'; 4 | export * from './types'; 5 | -------------------------------------------------------------------------------- /packages/message-manager/src/types.ts: -------------------------------------------------------------------------------- 1 | import type { SIWEMessage } from '@metamask/controller-utils'; 2 | 3 | import type { AbstractMessageParams } from './AbstractMessageManager'; 4 | 5 | // Below types are have been moved into KeyringController, but are still exported here for backwards compatibility. 6 | 7 | export type SignTypedDataMessageV3V4 = { 8 | types: Record; 9 | domain: Record; 10 | primaryType: string; 11 | message: unknown; 12 | }; 13 | 14 | export type PersonalMessageParams = { 15 | data: string; 16 | siwe?: SIWEMessage; 17 | } & AbstractMessageParams; 18 | 19 | export type TypedMessageParams = { 20 | data: Record[] | string | SignTypedDataMessageV3V4; 21 | } & AbstractMessageParams; 22 | -------------------------------------------------------------------------------- /packages/message-manager/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src" 7 | }, 8 | "references": [ 9 | { "path": "../base-controller/tsconfig.build.json" }, 10 | { "path": "../controller-utils/tsconfig.build.json" } 11 | ], 12 | "include": ["../../types", "./src"] 13 | } 14 | -------------------------------------------------------------------------------- /packages/message-manager/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./" 5 | }, 6 | "references": [ 7 | { "path": "../base-controller" }, 8 | { "path": "../controller-utils" } 9 | ], 10 | "include": ["../../types", "./src"] 11 | } 12 | -------------------------------------------------------------------------------- /packages/message-manager/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/multichain-api-middleware/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/multichain-api-middleware` 2 | 3 | JSON-RPC methods and middleware to support the the [MetaMask Multichain API](https://github.com/MetaMask/metamask-improvement-proposals/blob/main/MIPs/mip-5.md). 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/multichain-api-middleware` 8 | 9 | or 10 | 11 | `npm install @metamask/multichain-api-middleware` 12 | 13 | ## Contributing 14 | 15 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 16 | -------------------------------------------------------------------------------- /packages/multichain-api-middleware/jest.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * For a detailed explanation regarding each configuration property and type check, visit: 3 | * https://jestjs.io/docs/configuration 4 | */ 5 | 6 | const merge = require('deepmerge'); 7 | const path = require('path'); 8 | 9 | const baseConfig = require('../../jest.config.packages'); 10 | 11 | const displayName = path.basename(__dirname); 12 | 13 | module.exports = merge(baseConfig, { 14 | // The display name when running multiple projects 15 | displayName, 16 | 17 | // An object that configures minimum threshold enforcement for coverage results 18 | coverageThreshold: { 19 | global: { 20 | branches: 100, 21 | functions: 100, 22 | lines: 100, 23 | statements: 100, 24 | }, 25 | }, 26 | }); 27 | -------------------------------------------------------------------------------- /packages/multichain-api-middleware/src/handlers/types.ts: -------------------------------------------------------------------------------- 1 | import type { 2 | CaveatSpecificationConstraint, 3 | PermissionController, 4 | PermissionSpecificationConstraint, 5 | } from '@metamask/permission-controller'; 6 | 7 | /** 8 | * Multichain API notifications currently supported by/known to the wallet. 9 | */ 10 | export enum MultichainApiNotifications { 11 | sessionChanged = 'wallet_sessionChanged', 12 | walletNotify = 'wallet_notify', 13 | } 14 | type AbstractPermissionController = PermissionController< 15 | PermissionSpecificationConstraint, 16 | CaveatSpecificationConstraint 17 | >; 18 | 19 | export type GrantedPermissions = Awaited< 20 | ReturnType 21 | >[0]; 22 | -------------------------------------------------------------------------------- /packages/multichain-api-middleware/src/index.test.ts: -------------------------------------------------------------------------------- 1 | import * as allExports from '.'; 2 | 3 | describe('@metamask/multichain-api-middleware', () => { 4 | it('has expected JavaScript exports', () => { 5 | expect(Object.keys(allExports)).toMatchInlineSnapshot(` 6 | Array [ 7 | "walletCreateSession", 8 | "walletGetSession", 9 | "walletInvokeMethod", 10 | "walletRevokeSession", 11 | "multichainMethodCallValidatorMiddleware", 12 | "MultichainMiddlewareManager", 13 | "MultichainSubscriptionManager", 14 | "MultichainApiNotifications", 15 | ] 16 | `); 17 | }); 18 | }); 19 | -------------------------------------------------------------------------------- /packages/multichain-api-middleware/src/index.ts: -------------------------------------------------------------------------------- 1 | export { walletCreateSession } from './handlers/wallet-createSession'; 2 | export { walletGetSession } from './handlers/wallet-getSession'; 3 | export { walletInvokeMethod } from './handlers/wallet-invokeMethod'; 4 | export { walletRevokeSession } from './handlers/wallet-revokeSession'; 5 | 6 | export { multichainMethodCallValidatorMiddleware } from './middlewares/multichainMethodCallValidatorMiddleware'; 7 | export { MultichainMiddlewareManager } from './middlewares/MultichainMiddlewareManager'; 8 | export { MultichainSubscriptionManager } from './middlewares/MultichainSubscriptionManager'; 9 | export { MultichainApiNotifications } from './handlers/types'; 10 | -------------------------------------------------------------------------------- /packages/multichain-api-middleware/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "resolveJsonModule": true, 6 | "outDir": "./dist", 7 | "rootDir": "./src" 8 | }, 9 | "references": [ 10 | { "path": "../chain-agnostic-permission/tsconfig.build.json" }, 11 | { "path": "../json-rpc-engine/tsconfig.build.json" }, 12 | { "path": "../network-controller/tsconfig.build.json" }, 13 | { "path": "../permission-controller/tsconfig.build.json" } 14 | ], 15 | "include": ["../../types", "./src"] 16 | } 17 | -------------------------------------------------------------------------------- /packages/multichain-api-middleware/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "resolveJsonModule": true, 6 | "rootDir": "../.." 7 | }, 8 | "references": [ 9 | { "path": "../chain-agnostic-permission" }, 10 | { "path": "../json-rpc-engine" }, 11 | { "path": "../network-controller" }, 12 | { "path": "../permission-controller" }, 13 | { "path": "../multichain-transactions-controller" } 14 | ], 15 | "include": ["../../types", "./src"] 16 | } 17 | -------------------------------------------------------------------------------- /packages/multichain-api-middleware/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/multichain-network-controller/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/multichain-network-controller` 2 | 3 | ... 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/multichain-network-controller` 8 | 9 | or 10 | 11 | `npm install @metamask/multichain-network-controller` 12 | 13 | ## Contributing 14 | 15 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 16 | -------------------------------------------------------------------------------- /packages/multichain-network-controller/src/MultichainNetworkService/AbstractMultichainNetworkService.ts: -------------------------------------------------------------------------------- 1 | import type { PublicInterface } from '@metamask/utils'; 2 | 3 | import type { MultichainNetworkService } from './MultichainNetworkService'; 4 | 5 | /** 6 | * A service object which is responsible for fetching network activity data. 7 | */ 8 | export type AbstractMultichainNetworkService = 9 | PublicInterface; 10 | -------------------------------------------------------------------------------- /packages/multichain-network-controller/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src" 7 | }, 8 | "references": [ 9 | { "path": "../accounts-controller/tsconfig.build.json" }, 10 | { "path": "../base-controller/tsconfig.build.json" }, 11 | { "path": "../controller-utils/tsconfig.build.json" }, 12 | { "path": "../network-controller/tsconfig.build.json" }, 13 | { "path": "../keyring-controller/tsconfig.build.json" } 14 | ], 15 | "include": ["../../types", "./src"] 16 | } 17 | -------------------------------------------------------------------------------- /packages/multichain-network-controller/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./" 5 | }, 6 | "references": [ 7 | { "path": "../accounts-controller" }, 8 | { "path": "../base-controller" }, 9 | { "path": "../controller-utils" }, 10 | { "path": "../network-controller" }, 11 | { "path": "../keyring-controller" } 12 | ], 13 | "include": ["../../types", "./src", "./tests"] 14 | } 15 | -------------------------------------------------------------------------------- /packages/multichain-network-controller/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/multichain-transactions-controller/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/multichain-transactions-controller` 2 | 3 | This package is responsible for getting transactions from our Bitcoin and Solana snaps. 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/multichain-transactions-controller` 8 | 9 | or 10 | 11 | `npm install @metamask/multichain-transactions-controller` 12 | 13 | ## Contributing 14 | 15 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 16 | -------------------------------------------------------------------------------- /packages/multichain-transactions-controller/src/index.ts: -------------------------------------------------------------------------------- 1 | export { MultichainTransactionsController } from './MultichainTransactionsController'; 2 | export type { 3 | MultichainTransactionsControllerState, 4 | PaginationOptions, 5 | TransactionStateEntry, 6 | MultichainTransactionsControllerStateChange, 7 | MultichainTransactionsControllerGetStateAction, 8 | MultichainTransactionsControllerTransactionSubmittedEvent, 9 | MultichainTransactionsControllerTransactionConfirmedEvent, 10 | } from './MultichainTransactionsController'; 11 | export { MultichainNetwork, MultichainNativeAsset } from './constants'; 12 | -------------------------------------------------------------------------------- /packages/multichain-transactions-controller/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src" 7 | }, 8 | "references": [ 9 | { "path": "../accounts-controller/tsconfig.build.json" }, 10 | { "path": "../base-controller/tsconfig.build.json" }, 11 | { "path": "../keyring-controller/tsconfig.build.json" }, 12 | { "path": "../polling-controller/tsconfig.build.json" } 13 | ], 14 | "include": ["../../types", "./src"] 15 | } 16 | -------------------------------------------------------------------------------- /packages/multichain-transactions-controller/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./" 5 | }, 6 | "references": [ 7 | { "path": "../accounts-controller" }, 8 | { "path": "../base-controller" }, 9 | { "path": "../keyring-controller" }, 10 | { "path": "../polling-controller" } 11 | ], 12 | "include": ["../../types", "./src"] 13 | } 14 | -------------------------------------------------------------------------------- /packages/multichain-transactions-controller/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/multichain/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/multichain` 2 | 3 | Provides types, helpers, adapters, and wrappers for facilitating CAIP Multichain sessions 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/multichain` 8 | 9 | or 10 | 11 | `npm install @metamask/multichain` 12 | 13 | ## Contributing 14 | 15 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 16 | -------------------------------------------------------------------------------- /packages/multichain/jest.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * For a detailed explanation regarding each configuration property and type check, visit: 3 | * https://jestjs.io/docs/configuration 4 | */ 5 | 6 | const merge = require('deepmerge'); 7 | const path = require('path'); 8 | 9 | const baseConfig = require('../../jest.config.packages'); 10 | 11 | const displayName = path.basename(__dirname); 12 | 13 | module.exports = merge(baseConfig, { 14 | // The display name when running multiple projects 15 | displayName, 16 | 17 | // An object that configures minimum threshold enforcement for coverage results 18 | coverageThreshold: { 19 | global: { 20 | branches: 100, 21 | functions: 100, 22 | lines: 100, 23 | statements: 100, 24 | }, 25 | }, 26 | }); 27 | -------------------------------------------------------------------------------- /packages/multichain/src/constants/permissions.ts: -------------------------------------------------------------------------------- 1 | export enum CaveatTypes { 2 | RestrictReturnedAccounts = 'restrictReturnedAccounts', 3 | RestrictNetworkSwitching = 'restrictNetworkSwitching', 4 | } 5 | 6 | export enum EndowmentTypes { 7 | PermittedChains = 'endowment:permitted-chains', 8 | } 9 | 10 | export enum RestrictedMethods { 11 | EthAccounts = 'eth_accounts', 12 | } 13 | -------------------------------------------------------------------------------- /packages/multichain/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src", 7 | "resolveJsonModule": true 8 | }, 9 | "references": [ 10 | { 11 | "path": "../network-controller/tsconfig.build.json" 12 | }, 13 | { 14 | "path": "../permission-controller/tsconfig.build.json" 15 | } 16 | ], 17 | "include": ["../../types", "./src"] 18 | } 19 | -------------------------------------------------------------------------------- /packages/multichain/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./" 5 | }, 6 | "references": [ 7 | { 8 | "path": "../network-controller" 9 | }, 10 | { 11 | "path": "../permission-controller" 12 | } 13 | ], 14 | "include": ["../../types", "./src"] 15 | } 16 | -------------------------------------------------------------------------------- /packages/multichain/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/name-controller/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/name-controller` 2 | 3 | Stores and suggests names for values such as Ethereum addresses. 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/name-controller` 8 | 9 | or 10 | 11 | `npm install @metamask/name-controller` 12 | 13 | ## Contributing 14 | 15 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 16 | -------------------------------------------------------------------------------- /packages/name-controller/jest.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * For a detailed explanation regarding each configuration property and type check, visit: 3 | * https://jestjs.io/docs/configuration 4 | */ 5 | 6 | const merge = require('deepmerge'); 7 | const path = require('path'); 8 | 9 | const baseConfig = require('../../jest.config.packages'); 10 | 11 | const displayName = path.basename(__dirname); 12 | 13 | module.exports = merge(baseConfig, { 14 | // The display name when running multiple projects 15 | displayName, 16 | 17 | // An object that configures minimum threshold enforcement for coverage results 18 | coverageThreshold: { 19 | global: { 20 | branches: 100, 21 | functions: 100, 22 | lines: 100, 23 | statements: 100, 24 | }, 25 | }, 26 | }); 27 | -------------------------------------------------------------------------------- /packages/name-controller/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './NameController'; 2 | export * from './types'; 3 | export * from './providers/ens'; 4 | export * from './providers/etherscan'; 5 | export * from './providers/token'; 6 | export * from './providers/lens'; 7 | -------------------------------------------------------------------------------- /packages/name-controller/src/logger.ts: -------------------------------------------------------------------------------- 1 | import { createProjectLogger, createModuleLogger } from '@metamask/utils'; 2 | 3 | export const projectLogger = createProjectLogger('name-controller'); 4 | 5 | export { createModuleLogger }; 6 | -------------------------------------------------------------------------------- /packages/name-controller/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src" 7 | }, 8 | "references": [ 9 | { 10 | "path": "../base-controller/tsconfig.build.json" 11 | } 12 | ], 13 | "include": ["../../types", "./src"] 14 | } 15 | -------------------------------------------------------------------------------- /packages/name-controller/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./" 5 | }, 6 | "references": [ 7 | { 8 | "path": "../base-controller" 9 | } 10 | ], 11 | "include": ["../../types", "./src"] 12 | } 13 | -------------------------------------------------------------------------------- /packages/name-controller/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/network-controller/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/network-controller` 2 | 3 | Provides an interface to the currently selected network via a MetaMask-compatible provider object. 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/network-controller` 8 | 9 | or 10 | 11 | `npm install @metamask/network-controller` 12 | 13 | ## Contributing 14 | 15 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 16 | -------------------------------------------------------------------------------- /packages/network-controller/src/logger.ts: -------------------------------------------------------------------------------- 1 | import { createProjectLogger, createModuleLogger } from '@metamask/utils'; 2 | 3 | export const projectLogger = createProjectLogger('network-controller'); 4 | 5 | export { createModuleLogger }; 6 | -------------------------------------------------------------------------------- /packages/network-controller/src/rpc-service/abstract-rpc-service.ts: -------------------------------------------------------------------------------- 1 | import type { RpcServiceRequestable } from './rpc-service-requestable'; 2 | 3 | /** 4 | * The interface for a service class responsible for making a request to an RPC 5 | * endpoint or a group of RPC endpoints. 6 | */ 7 | export type AbstractRpcService = RpcServiceRequestable & { 8 | /** 9 | * The URL of the RPC endpoint. 10 | */ 11 | endpointUrl: URL; 12 | }; 13 | -------------------------------------------------------------------------------- /packages/network-controller/src/rpc-service/shared.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Equivalent to the built-in `FetchOptions` type, but renamed for clarity. 3 | */ 4 | export type FetchOptions = RequestInit; 5 | 6 | /** 7 | * Extends an event listener that Cockatiel uses so that when it is called, more 8 | * data can be supplied in the event object. 9 | */ 10 | export type AddToCockatielEventData = 11 | EventListener extends (data: infer Data) => void 12 | ? // Prevent Data from being split if it's a type union 13 | [Data] extends [void] 14 | ? (data: AdditionalData) => void 15 | : (data: Data & AdditionalData) => void 16 | : never; 17 | -------------------------------------------------------------------------------- /packages/network-controller/tests/create-network-client.test.ts: -------------------------------------------------------------------------------- 1 | import { NetworkClientType } from '../src/types'; 2 | import { testsForProviderType } from './provider-api-tests/shared-tests'; 3 | 4 | for (const clientType of Object.values(NetworkClientType)) { 5 | describe(`createNetworkClient - ${clientType}`, () => { 6 | testsForProviderType(clientType); 7 | }); 8 | } 9 | -------------------------------------------------------------------------------- /packages/network-controller/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src" 7 | }, 8 | "references": [ 9 | { "path": "../base-controller/tsconfig.build.json" }, 10 | { "path": "../controller-utils/tsconfig.build.json" }, 11 | { "path": "../eth-json-rpc-provider/tsconfig.build.json" }, 12 | { "path": "../json-rpc-engine/tsconfig.build.json" }, 13 | { "path": "../error-reporting-service/tsconfig.build.json" } 14 | ], 15 | "include": ["../../types", "./src"] 16 | } 17 | -------------------------------------------------------------------------------- /packages/network-controller/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "rootDir": "../.." 6 | }, 7 | "references": [ 8 | { "path": "../base-controller" }, 9 | { "path": "../controller-utils" }, 10 | { "path": "../eth-json-rpc-provider" }, 11 | { "path": "../json-rpc-engine" }, 12 | { "path": "../error-reporting-service" } 13 | ], 14 | "include": ["../../types", "../../tests", "./src", "./tests"] 15 | } 16 | -------------------------------------------------------------------------------- /packages/network-controller/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/notification-services-controller/notification-services/mocks/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0.0", 3 | "private": true, 4 | "description": "", 5 | "license": "MIT", 6 | "sideEffects": false, 7 | "main": "../../dist/NotificationServicesController/mocks/index.cjs", 8 | "types": "../../dist/NotificationServicesController/mocks/index.d.cts" 9 | } 10 | -------------------------------------------------------------------------------- /packages/notification-services-controller/notification-services/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0.0", 3 | "private": true, 4 | "description": "", 5 | "license": "MIT", 6 | "sideEffects": false, 7 | "main": "../dist/NotificationServicesController/index.cjs", 8 | "types": "../dist/NotificationServicesController/index.d.cts" 9 | } 10 | -------------------------------------------------------------------------------- /packages/notification-services-controller/notification-services/ui/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0.0", 3 | "private": true, 4 | "description": "", 5 | "license": "MIT", 6 | "sideEffects": false, 7 | "main": "../../dist/NotificationServicesController/ui/index.cjs", 8 | "types": "../../dist/NotificationServicesController/ui/index.d.cts" 9 | } 10 | -------------------------------------------------------------------------------- /packages/notification-services-controller/push-services/mocks/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0.0", 3 | "private": true, 4 | "description": "", 5 | "license": "MIT", 6 | "sideEffects": false, 7 | "main": "../../dist/NotificationServicesPushController/mocks/index.cjs", 8 | "types": "../../dist/NotificationServicesPushController/mocks/index.d.cts" 9 | } 10 | -------------------------------------------------------------------------------- /packages/notification-services-controller/push-services/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0.0", 3 | "private": true, 4 | "description": "", 5 | "license": "MIT", 6 | "sideEffects": false, 7 | "main": "../dist/NotificationServicesPushController/index.cjs", 8 | "types": "../dist/NotificationServicesPushController/index.d.cts" 9 | } 10 | -------------------------------------------------------------------------------- /packages/notification-services-controller/push-services/web/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0.0", 3 | "private": true, 4 | "description": "", 5 | "license": "MIT", 6 | "sideEffects": false, 7 | "main": "../../dist/NotificationServicesPushController/web/index.cjs", 8 | "types": "../../dist/NotificationServicesPushController/web/index.d.cts" 9 | } 10 | -------------------------------------------------------------------------------- /packages/notification-services-controller/src/NotificationServicesController/__fixtures__/mockAddresses.ts: -------------------------------------------------------------------------------- 1 | export const ADDRESS_1 = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045'; 2 | export const ADDRESS_2 = '0x0B3EAEd916519668491dB56c612Ff9B919288b65'; 3 | -------------------------------------------------------------------------------- /packages/notification-services-controller/src/NotificationServicesController/constants/constants.ts: -------------------------------------------------------------------------------- 1 | export const USER_STORAGE_VERSION = '1'; 2 | 3 | // Force cast. We don't really care about the type here since we treat it as a unique symbol 4 | export const USER_STORAGE_VERSION_KEY: unique symbol = 'v' as never; 5 | -------------------------------------------------------------------------------- /packages/notification-services-controller/src/NotificationServicesController/constants/index.ts: -------------------------------------------------------------------------------- 1 | export * from './constants'; 2 | export * from './notification-schema'; 3 | -------------------------------------------------------------------------------- /packages/notification-services-controller/src/NotificationServicesController/index.ts: -------------------------------------------------------------------------------- 1 | import Controller from './NotificationServicesController'; 2 | 3 | const NotificationServicesController = Controller; 4 | export { Controller }; 5 | export default NotificationServicesController; 6 | export * from './NotificationServicesController'; 7 | export type * as Types from './types'; 8 | export type * from './types'; 9 | export * as Processors from './processors'; 10 | export * from './processors'; 11 | export * as Constants from './constants'; 12 | export * from './constants'; 13 | export * as Mocks from './mocks'; 14 | export * as UI from './ui'; 15 | export * from '../shared'; 16 | -------------------------------------------------------------------------------- /packages/notification-services-controller/src/NotificationServicesController/mocks/index.ts: -------------------------------------------------------------------------------- 1 | export * from './mock-feature-announcements'; 2 | export * from './mock-notification-trigger'; 3 | export * from './mock-notification-user-storage'; 4 | export * from './mock-raw-notifications'; 5 | export * from './mockResponses'; 6 | export * from './mock-snap-notification'; 7 | -------------------------------------------------------------------------------- /packages/notification-services-controller/src/NotificationServicesController/mocks/mock-notification-trigger.ts: -------------------------------------------------------------------------------- 1 | import { v4 as uuidv4 } from 'uuid'; 2 | 3 | import type { NotificationTrigger } from '../utils/utils'; 4 | 5 | /** 6 | * Mocking Utility - create a mock Notification Trigger 7 | * 8 | * @param override - provide any override configuration for the mock 9 | * @returns a mock Notification Trigger 10 | */ 11 | export function createMockNotificationTrigger( 12 | override?: Partial, 13 | ): NotificationTrigger { 14 | return { 15 | id: uuidv4(), 16 | address: '0xFAKE_ADDRESS', 17 | chainId: '1', 18 | kind: 'eth_sent', 19 | enabled: true, 20 | ...override, 21 | }; 22 | } 23 | -------------------------------------------------------------------------------- /packages/notification-services-controller/src/NotificationServicesController/processors/index.ts: -------------------------------------------------------------------------------- 1 | export * from './process-feature-announcement'; 2 | export * from './process-notifications'; 3 | export * from './process-onchain-notifications'; 4 | -------------------------------------------------------------------------------- /packages/notification-services-controller/src/NotificationServicesController/processors/process-onchain-notifications.ts: -------------------------------------------------------------------------------- 1 | import type { INotification } from '../types/notification/notification'; 2 | import type { OnChainRawNotification } from '../types/on-chain-notification/on-chain-notification'; 3 | 4 | /** 5 | * Processes On-Chain notifications to a normalized notification 6 | * 7 | * @param notification - On-Chain Notification 8 | * @returns Normalized Notification 9 | */ 10 | export function processOnChainNotification( 11 | notification: OnChainRawNotification, 12 | ): INotification { 13 | return { 14 | ...notification, 15 | id: notification.id, 16 | createdAt: new Date(notification.created_at).toISOString(), 17 | isRead: !notification.unread, 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /packages/notification-services-controller/src/NotificationServicesController/types/feature-announcement/index.ts: -------------------------------------------------------------------------------- 1 | export type * from './feature-announcement'; 2 | export type * from './type-links'; 3 | export type * from './type-feature-announcement'; 4 | -------------------------------------------------------------------------------- /packages/notification-services-controller/src/NotificationServicesController/types/index.ts: -------------------------------------------------------------------------------- 1 | export type * from './feature-announcement'; 2 | export type * from './notification'; 3 | export type * from './on-chain-notification'; 4 | export type * from './user-storage'; 5 | export type * from './snaps/snaps'; 6 | -------------------------------------------------------------------------------- /packages/notification-services-controller/src/NotificationServicesController/types/notification/index.ts: -------------------------------------------------------------------------------- 1 | export type * from './notification'; 2 | -------------------------------------------------------------------------------- /packages/notification-services-controller/src/NotificationServicesController/types/on-chain-notification/index.ts: -------------------------------------------------------------------------------- 1 | export type * from './on-chain-notification'; 2 | -------------------------------------------------------------------------------- /packages/notification-services-controller/src/NotificationServicesController/types/snaps/index.ts: -------------------------------------------------------------------------------- 1 | export type * from './snaps'; 2 | -------------------------------------------------------------------------------- /packages/notification-services-controller/src/NotificationServicesController/types/snaps/snaps.ts: -------------------------------------------------------------------------------- 1 | import type { TRIGGER_TYPES } from '../../constants'; 2 | 3 | export type ExpandedView = { 4 | title: string; 5 | interfaceId: string; 6 | footerLink?: { href: string; text: string }; 7 | }; 8 | 9 | export type RawSnapNotificationData = 10 | | { 11 | message: string; 12 | origin: string; 13 | } 14 | | { message: string; origin: string; detailedView: ExpandedView }; 15 | 16 | export type RawSnapNotification = { 17 | type: TRIGGER_TYPES.SNAP; 18 | data: RawSnapNotificationData; 19 | readDate: string | null; 20 | }; 21 | -------------------------------------------------------------------------------- /packages/notification-services-controller/src/NotificationServicesController/types/type-utils.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Computes and combines intersection types for a more "prettier" type (more human readable) 3 | */ 4 | export type Compute = Item extends Item 5 | ? { [K in keyof Item]: Item[K] } 6 | : never; 7 | -------------------------------------------------------------------------------- /packages/notification-services-controller/src/NotificationServicesController/types/user-storage/index.ts: -------------------------------------------------------------------------------- 1 | export type * from './user-storage'; 2 | -------------------------------------------------------------------------------- /packages/notification-services-controller/src/NotificationServicesController/ui/index.ts: -------------------------------------------------------------------------------- 1 | export * from './constants'; 2 | -------------------------------------------------------------------------------- /packages/notification-services-controller/src/NotificationServicesPushController/__fixtures__/mockServices.ts: -------------------------------------------------------------------------------- 1 | import nock from 'nock'; 2 | 3 | import { getMockUpdatePushNotificationLinksResponse } from '../mocks/mockResponse'; 4 | 5 | type MockReply = { 6 | status: nock.StatusCode; 7 | body?: nock.Body; 8 | }; 9 | 10 | export const mockEndpointUpdatePushNotificationLinks = ( 11 | mockReply?: MockReply, 12 | ) => { 13 | const mockResponse = getMockUpdatePushNotificationLinksResponse(); 14 | const reply = mockReply ?? { 15 | status: 200, 16 | body: mockResponse.response, 17 | }; 18 | 19 | const mockEndpoint = nock(mockResponse.url).post('').reply(reply.status); 20 | 21 | return mockEndpoint; 22 | }; 23 | -------------------------------------------------------------------------------- /packages/notification-services-controller/src/NotificationServicesPushController/index.ts: -------------------------------------------------------------------------------- 1 | import Controller from './NotificationServicesPushController'; 2 | 3 | const NotificationServicesPushController = Controller; 4 | export { Controller }; 5 | export default NotificationServicesPushController; 6 | export * from './NotificationServicesPushController'; 7 | export type * as Types from './types'; 8 | export type * from './types'; 9 | export * as Utils from './utils'; 10 | export * from './utils'; 11 | export * as Mocks from './mocks'; 12 | -------------------------------------------------------------------------------- /packages/notification-services-controller/src/NotificationServicesPushController/mocks/index.ts: -------------------------------------------------------------------------------- 1 | export * from './mockResponse'; 2 | -------------------------------------------------------------------------------- /packages/notification-services-controller/src/NotificationServicesPushController/services/endpoints.ts: -------------------------------------------------------------------------------- 1 | const url = 'https://push.api.cx.metamask.io'; 2 | export const REGISTRATION_TOKENS_ENDPOINT = `${url}/v1/link`; 3 | -------------------------------------------------------------------------------- /packages/notification-services-controller/src/NotificationServicesPushController/types/index.ts: -------------------------------------------------------------------------------- 1 | export type * from './firebase'; 2 | export type * from './push-service-interface'; 3 | -------------------------------------------------------------------------------- /packages/notification-services-controller/src/NotificationServicesPushController/utils/index.ts: -------------------------------------------------------------------------------- 1 | export * from './get-notification-data'; 2 | export * from './get-notification-message'; 3 | -------------------------------------------------------------------------------- /packages/notification-services-controller/src/NotificationServicesPushController/web/index.ts: -------------------------------------------------------------------------------- 1 | export { 2 | createRegToken, 3 | deleteRegToken, 4 | createSubscribeToPushNotifications, 5 | } from './push-utils'; 6 | -------------------------------------------------------------------------------- /packages/notification-services-controller/src/index.ts: -------------------------------------------------------------------------------- 1 | export * as NotificationServicesController from './NotificationServicesController'; 2 | export * as NotificationServicesPushController from './NotificationServicesPushController'; 3 | -------------------------------------------------------------------------------- /packages/notification-services-controller/src/shared/index.ts: -------------------------------------------------------------------------------- 1 | export * from './is-onchain-notification'; 2 | export * from './to-raw-notification'; 3 | -------------------------------------------------------------------------------- /packages/notification-services-controller/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src", 7 | "skipLibCheck": true 8 | }, 9 | "references": [ 10 | { 11 | "path": "../base-controller/tsconfig.build.json" 12 | }, 13 | { 14 | "path": "../profile-sync-controller/tsconfig.build.json" 15 | }, 16 | { 17 | "path": "../keyring-controller/tsconfig.build.json" 18 | } 19 | ], 20 | "include": ["../../types", "./src"], 21 | "exclude": [ 22 | "./jest.config.packages.ts", 23 | "**/*.test.ts", 24 | "**/jest.config.ts", 25 | "**/__fixtures__/" 26 | ] 27 | } 28 | -------------------------------------------------------------------------------- /packages/notification-services-controller/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./" 5 | }, 6 | "references": [ 7 | { 8 | "path": "../base-controller" 9 | }, 10 | { 11 | "path": "../profile-sync-controller" 12 | }, 13 | { 14 | "path": "../keyring-controller" 15 | } 16 | ], 17 | "include": ["../../types", "./src"] 18 | } 19 | -------------------------------------------------------------------------------- /packages/notification-services-controller/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/permission-controller/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/permission-controller` 2 | 3 | Mediates access to JSON-RPC methods, used to interact with pieces of the MetaMask stack, via middleware for `@metamask/json-rpc-engine`. 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/permission-controller` 8 | 9 | or 10 | 11 | `npm install @metamask/permission-controller` 12 | 13 | ## Understanding 14 | 15 | Please read the [Architecture][./architecture.md] document for more on how PermissionController works and how to use it. 16 | 17 | ## Contributing 18 | 19 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 20 | -------------------------------------------------------------------------------- /packages/permission-controller/jest.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * For a detailed explanation regarding each configuration property and type check, visit: 3 | * https://jestjs.io/docs/configuration 4 | */ 5 | 6 | const merge = require('deepmerge'); 7 | const path = require('path'); 8 | 9 | const baseConfig = require('../../jest.config.packages'); 10 | 11 | const displayName = path.basename(__dirname); 12 | 13 | module.exports = merge(baseConfig, { 14 | // The display name when running multiple projects 15 | displayName, 16 | 17 | // An object that configures minimum threshold enforcement for coverage results 18 | coverageThreshold: { 19 | global: { 20 | branches: 100, 21 | functions: 100, 22 | lines: 100, 23 | statements: 100, 24 | }, 25 | }, 26 | }); 27 | -------------------------------------------------------------------------------- /packages/permission-controller/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Caveat'; 2 | export * from './errors'; 3 | export * from './Permission'; 4 | export * from './PermissionController'; 5 | export type { 6 | ExtractSpecifications, 7 | HandlerMiddlewareFunction, 8 | HookNames, 9 | PermittedHandlerExport, 10 | } from './utils'; 11 | export { MethodNames } from './utils'; 12 | export * as permissionRpcMethods from './rpc-methods'; 13 | export * from './SubjectMetadataController'; 14 | -------------------------------------------------------------------------------- /packages/permission-controller/src/rpc-methods/index.ts: -------------------------------------------------------------------------------- 1 | import type { GetPermissionsHooks } from './getPermissions'; 2 | import { getPermissionsHandler } from './getPermissions'; 3 | import type { RequestPermissionsHooks } from './requestPermissions'; 4 | import { requestPermissionsHandler } from './requestPermissions'; 5 | import type { RevokePermissionsHooks } from './revokePermissions'; 6 | import { revokePermissionsHandler } from './revokePermissions'; 7 | 8 | export type PermittedRpcMethodHooks = RequestPermissionsHooks & 9 | GetPermissionsHooks & 10 | RevokePermissionsHooks; 11 | 12 | export const handlers = [ 13 | requestPermissionsHandler, 14 | getPermissionsHandler, 15 | revokePermissionsHandler, 16 | ] as const; 17 | -------------------------------------------------------------------------------- /packages/permission-controller/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src" 7 | }, 8 | "references": [ 9 | { "path": "../approval-controller/tsconfig.build.json" }, 10 | { "path": "../base-controller/tsconfig.build.json" }, 11 | { "path": "../controller-utils/tsconfig.build.json" }, 12 | { "path": "../json-rpc-engine/tsconfig.build.json" } 13 | ], 14 | "include": ["../../types", "./src"] 15 | } 16 | -------------------------------------------------------------------------------- /packages/permission-controller/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./" 5 | }, 6 | "references": [ 7 | { "path": "../approval-controller" }, 8 | { "path": "../base-controller" }, 9 | { "path": "../controller-utils" }, 10 | { "path": "../json-rpc-engine" } 11 | ], 12 | "include": ["../../types", "./src"] 13 | } 14 | -------------------------------------------------------------------------------- /packages/permission-controller/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/permission-log-controller/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/permission-log-controller` 2 | 3 | Controller with middleware for logging requests and responses to restricted and permissions-related methods. 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/permission-log-controller` 8 | 9 | or 10 | 11 | `npm install @metamask/permission-log-controller` 12 | 13 | ## Contributing 14 | 15 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 16 | -------------------------------------------------------------------------------- /packages/permission-log-controller/jest.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * For a detailed explanation regarding each configuration property and type check, visit: 3 | * https://jestjs.io/docs/configuration 4 | */ 5 | 6 | const merge = require('deepmerge'); 7 | const path = require('path'); 8 | 9 | const baseConfig = require('../../jest.config.packages'); 10 | 11 | const displayName = path.basename(__dirname); 12 | 13 | module.exports = merge(baseConfig, { 14 | // The display name when running multiple projects 15 | displayName, 16 | 17 | // An object that configures minimum threshold enforcement for coverage results 18 | coverageThreshold: { 19 | global: { 20 | branches: 100, 21 | functions: 100, 22 | lines: 100, 23 | statements: 100, 24 | }, 25 | }, 26 | }); 27 | -------------------------------------------------------------------------------- /packages/permission-log-controller/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './PermissionLogController'; 2 | -------------------------------------------------------------------------------- /packages/permission-log-controller/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | import * as allExports from '../src'; 2 | 3 | describe('Package exports', () => { 4 | it('has expected exports', () => { 5 | expect(Object.keys(allExports)).toMatchInlineSnapshot(` 6 | Array [ 7 | "PermissionLogController", 8 | ] 9 | `); 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /packages/permission-log-controller/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src" 7 | }, 8 | "references": [ 9 | { "path": "../base-controller/tsconfig.build.json" }, 10 | { "path": "../json-rpc-engine/tsconfig.build.json" } 11 | ], 12 | "include": ["../../types", "./src"] 13 | } 14 | -------------------------------------------------------------------------------- /packages/permission-log-controller/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./" 5 | }, 6 | "references": [ 7 | { "path": "../base-controller" }, 8 | { "path": "../json-rpc-engine" } 9 | ], 10 | "include": ["../../types", "./src", "./tests"] 11 | } 12 | -------------------------------------------------------------------------------- /packages/permission-log-controller/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/phishing-controller/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/phishing-controller` 2 | 3 | Maintains a periodically updated list of approved and unapproved website origins. 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/phishing-controller` 8 | 9 | or 10 | 11 | `npm install @metamask/phishing-controller` 12 | 13 | ## Contributing 14 | 15 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 16 | -------------------------------------------------------------------------------- /packages/phishing-controller/jest.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * For a detailed explanation regarding each configuration property and type check, visit: 3 | * https://jestjs.io/docs/configuration 4 | */ 5 | 6 | const merge = require('deepmerge'); 7 | const path = require('path'); 8 | 9 | const baseConfig = require('../../jest.config.packages'); 10 | 11 | const displayName = path.basename(__dirname); 12 | 13 | module.exports = merge(baseConfig, { 14 | // The display name when running multiple projects 15 | displayName, 16 | 17 | // An object that configures minimum threshold enforcement for coverage results 18 | coverageThreshold: { 19 | global: { 20 | branches: 100, 21 | functions: 100, 22 | lines: 100, 23 | statements: 100, 24 | }, 25 | }, 26 | }); 27 | -------------------------------------------------------------------------------- /packages/phishing-controller/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './PhishingController'; 2 | export type { 3 | LegacyPhishingDetectorList, 4 | PhishingDetectorList, 5 | FuzzyTolerance, 6 | PhishingDetectorOptions, 7 | PhishingDetectorConfiguration, 8 | } from './PhishingDetector'; 9 | export { PhishingDetector } from './PhishingDetector'; 10 | export type { PhishingDetectionScanResult } from './types'; 11 | export { PhishingDetectorResultType, RecommendedAction } from './types'; 12 | -------------------------------------------------------------------------------- /packages/phishing-controller/src/tests/utils.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Formats a hostname into a URL so we can parse it correctly 3 | * and pass full URLs into the PhishingDetector class. Previously 4 | * only hostnames were supported, but now only full URLs are 5 | * supported since we want to block IPFS CIDs. 6 | * 7 | * @param hostname - the hostname of the URL. 8 | * @returns the href property of a URL object. 9 | */ 10 | export const formatHostnameToUrl = (hostname: string): string => { 11 | let url = ''; 12 | try { 13 | url = new URL(hostname).href; 14 | } catch (e) { 15 | url = new URL(['https://', hostname].join('')).href; 16 | } 17 | return url; 18 | }; 19 | -------------------------------------------------------------------------------- /packages/phishing-controller/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src" 7 | }, 8 | "references": [ 9 | { "path": "../base-controller/tsconfig.build.json" }, 10 | { "path": "../controller-utils/tsconfig.build.json" } 11 | ], 12 | "include": ["../../types", "./src"] 13 | } 14 | -------------------------------------------------------------------------------- /packages/phishing-controller/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./" 5 | }, 6 | "references": [ 7 | { "path": "../base-controller" }, 8 | { "path": "../controller-utils" } 9 | ], 10 | "include": ["../../types", "./src", "./tests"] 11 | } 12 | -------------------------------------------------------------------------------- /packages/phishing-controller/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/polling-controller/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/polling-controller` 2 | 3 | PollingController is used as the base for all controllers that need to poll for updates based on `networkClientId`. 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/polling-controller` 8 | 9 | or 10 | 11 | `npm install @metamask/polling-controller` 12 | 13 | ## Contributing 14 | 15 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 16 | -------------------------------------------------------------------------------- /packages/polling-controller/src/index.ts: -------------------------------------------------------------------------------- 1 | export { 2 | BlockTrackerPollingControllerOnly, 3 | BlockTrackerPollingController, 4 | } from './BlockTrackerPollingController'; 5 | 6 | export { 7 | StaticIntervalPollingControllerOnly, 8 | StaticIntervalPollingController, 9 | } from './StaticIntervalPollingController'; 10 | 11 | export type { IPollingController } from './types'; 12 | -------------------------------------------------------------------------------- /packages/polling-controller/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src" 7 | }, 8 | "references": [ 9 | { "path": "../base-controller/tsconfig.build.json" }, 10 | { "path": "../controller-utils/tsconfig.build.json" }, 11 | { "path": "../network-controller/tsconfig.build.json" } 12 | ], 13 | "include": ["../../types", "./src"] 14 | } 15 | -------------------------------------------------------------------------------- /packages/polling-controller/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "rootDir": "../.." 6 | }, 7 | "references": [ 8 | { "path": "../base-controller" }, 9 | { "path": "../controller-utils" }, 10 | { "path": "../network-controller" } 11 | ], 12 | "include": ["../../types", "./src", "../../tests"] 13 | } 14 | -------------------------------------------------------------------------------- /packages/polling-controller/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/preferences-controller/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/preferences-controller` 2 | 3 | Manages user-configurable settings for MetaMask. 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/preferences-controller` 8 | 9 | or 10 | 11 | `npm install @metamask/preferences-controller` 12 | 13 | ## Contributing 14 | 15 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 16 | -------------------------------------------------------------------------------- /packages/preferences-controller/src/constants.ts: -------------------------------------------------------------------------------- 1 | export const ETHERSCAN_SUPPORTED_CHAIN_IDS = { 2 | MAINNET: '0x1', 3 | GOERLI: '0x5', 4 | BSC: '0x38', 5 | BSC_TESTNET: '0x61', 6 | OPTIMISM: '0xa', 7 | OPTIMISM_SEPOLIA: '0xaa37dc', 8 | POLYGON: '0x89', 9 | POLYGON_TESTNET: '0x13881', 10 | AVALANCHE: '0xa86a', 11 | AVALANCHE_TESTNET: '0xa869', 12 | FANTOM: '0xfa', 13 | FANTOM_TESTNET: '0xfa2', 14 | SEPOLIA: '0xaa36a7', 15 | LINEA_GOERLI: '0xe704', 16 | LINEA_SEPOLIA: '0xe705', 17 | LINEA_MAINNET: '0xe708', 18 | MOONBEAM: '0x504', 19 | MOONBEAM_TESTNET: '0x507', 20 | MOONRIVER: '0x505', 21 | GNOSIS: '0x64', 22 | } as const; 23 | -------------------------------------------------------------------------------- /packages/preferences-controller/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './PreferencesController'; 2 | export { ETHERSCAN_SUPPORTED_CHAIN_IDS } from './constants'; 3 | -------------------------------------------------------------------------------- /packages/preferences-controller/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src" 7 | }, 8 | "references": [ 9 | { "path": "../base-controller/tsconfig.build.json" }, 10 | { "path": "../controller-utils/tsconfig.build.json" }, 11 | { "path": "../keyring-controller/tsconfig.build.json" } 12 | ], 13 | "include": ["../../types", "./src"] 14 | } 15 | -------------------------------------------------------------------------------- /packages/preferences-controller/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./" 5 | }, 6 | "references": [ 7 | { "path": "../base-controller" }, 8 | { "path": "../controller-utils" }, 9 | { "path": "../keyring-controller" } 10 | ], 11 | "include": ["../../types", "./src"] 12 | } 13 | -------------------------------------------------------------------------------- /packages/preferences-controller/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/profile-sync-controller/auth/mocks/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0.0", 3 | "private": true, 4 | "description": "", 5 | "license": "MIT", 6 | "sideEffects": false, 7 | "main": "../../dist/controllers/authentication/mocks/index.cjs", 8 | "types": "../../dist/controllers/authentication/mocks/index.d.cts" 9 | } 10 | -------------------------------------------------------------------------------- /packages/profile-sync-controller/auth/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0.0", 3 | "private": true, 4 | "description": "", 5 | "license": "MIT", 6 | "sideEffects": false, 7 | "main": "../dist/controllers/authentication/index.cjs", 8 | "types": "../dist/controllers/authentication/index.d.cts" 9 | } 10 | -------------------------------------------------------------------------------- /packages/profile-sync-controller/sdk/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0.0", 3 | "private": true, 4 | "description": "", 5 | "license": "MIT", 6 | "sideEffects": false, 7 | "main": "../dist/sdk/index.cjs", 8 | "types": "../dist/sdk/index.d.cts" 9 | } 10 | -------------------------------------------------------------------------------- /packages/profile-sync-controller/src/controllers/authentication/index.ts: -------------------------------------------------------------------------------- 1 | import Controller from './AuthenticationController'; 2 | 3 | const AuthenticationController = Controller; 4 | export { Controller }; 5 | export default AuthenticationController; 6 | export * from './AuthenticationController'; 7 | export * as Mocks from './mocks'; 8 | -------------------------------------------------------------------------------- /packages/profile-sync-controller/src/controllers/authentication/mocks/index.ts: -------------------------------------------------------------------------------- 1 | export * from './mockResponses'; 2 | -------------------------------------------------------------------------------- /packages/profile-sync-controller/src/controllers/index.ts: -------------------------------------------------------------------------------- 1 | export * as Authentication from './authentication'; 2 | export * as UserStorage from './user-storage'; 3 | -------------------------------------------------------------------------------- /packages/profile-sync-controller/src/controllers/user-storage/constants.ts: -------------------------------------------------------------------------------- 1 | export const BACKUPANDSYNC_FEATURES = { 2 | main: 'main', 3 | accountSyncing: 'accountSyncing', 4 | } as const; 5 | -------------------------------------------------------------------------------- /packages/profile-sync-controller/src/controllers/user-storage/index.ts: -------------------------------------------------------------------------------- 1 | import Controller from './UserStorageController'; 2 | 3 | const UserStorageController = Controller; 4 | export { Controller }; 5 | export default UserStorageController; 6 | export * from './UserStorageController'; 7 | export * as Mocks from './mocks'; 8 | export * from './constants'; 9 | export * from '../../shared/encryption'; 10 | export * from '../../shared/storage-schema'; 11 | -------------------------------------------------------------------------------- /packages/profile-sync-controller/src/controllers/user-storage/mocks/index.ts: -------------------------------------------------------------------------------- 1 | export * from './mockResponses'; 2 | export * from './mockStorage'; 3 | -------------------------------------------------------------------------------- /packages/profile-sync-controller/src/index.ts: -------------------------------------------------------------------------------- 1 | export * as SDK from './sdk'; 2 | export * as AuthenticationController from './controllers/authentication'; 3 | export * as UserStorageController from './controllers/user-storage'; 4 | -------------------------------------------------------------------------------- /packages/profile-sync-controller/src/sdk/index.ts: -------------------------------------------------------------------------------- 1 | export * from './authentication'; 2 | export * from './user-storage'; 3 | export * from './errors'; 4 | export * from './utils/messaging-signing-snap-requests'; 5 | export * from '../shared/encryption'; 6 | export * from '../shared/env'; 7 | export * from '../shared/storage-schema'; 8 | -------------------------------------------------------------------------------- /packages/profile-sync-controller/src/sdk/utils/validate-login-response.ts: -------------------------------------------------------------------------------- 1 | import type { LoginResponse } from '../authentication'; 2 | 3 | /** 4 | * Validates Shape is LoginResponse 5 | * NOTE - validation is pretty loose, we can improve this by using external libs like Zod for improved/tighter validation 6 | * 7 | * @param input - unknown/untyped input 8 | * @returns boolean if input is LoginResponse 9 | */ 10 | export function validateLoginResponse(input: unknown): input is LoginResponse { 11 | const assumedInput = input as LoginResponse; 12 | 13 | if (!assumedInput) { 14 | return false; 15 | } 16 | 17 | if (!assumedInput?.token || !assumedInput?.profile) { 18 | return false; 19 | } 20 | 21 | return true; 22 | } 23 | -------------------------------------------------------------------------------- /packages/profile-sync-controller/src/shared/encryption/constants.ts: -------------------------------------------------------------------------------- 1 | // Nonce/Key Sizes 2 | export const ALGORITHM_NONCE_SIZE = 12; // 12 bytes 3 | export const ALGORITHM_KEY_SIZE = 16; // 16 bytes 4 | 5 | // Scrypt settings 6 | // see: https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html#scrypt 7 | export const SCRYPT_SALT_SIZE = 16; // 16 bytes 8 | export const SCRYPT_N = 2 ** 17; // CPU/memory cost parameter (must be a power of 2, > 1) 9 | export const SCRYPT_r = 8; // Block size parameter 10 | export const SCRYPT_p = 1; // Parallelization parameter 11 | 12 | export const SHARED_SALT = new Uint8Array([ 13 | 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 14 | ]); 15 | -------------------------------------------------------------------------------- /packages/profile-sync-controller/src/shared/encryption/index.ts: -------------------------------------------------------------------------------- 1 | import Encryption from './encryption'; 2 | 3 | export { Encryption }; 4 | export * from './encryption'; 5 | export default Encryption; 6 | -------------------------------------------------------------------------------- /packages/profile-sync-controller/src/shared/encryption/utils.ts: -------------------------------------------------------------------------------- 1 | export const byteArrayToBase64 = (byteArray: Uint8Array) => { 2 | return Buffer.from(byteArray).toString('base64'); 3 | }; 4 | 5 | export const base64ToByteArray = (base64: string) => { 6 | return new Uint8Array(Buffer.from(base64, 'base64')); 7 | }; 8 | 9 | export const bytesToUtf8 = (byteArray: Uint8Array) => { 10 | const decoder = new TextDecoder('utf-8'); 11 | return decoder.decode(byteArray); 12 | }; 13 | 14 | export const stringToByteArray = (str: string) => { 15 | return new TextEncoder().encode(str); 16 | }; 17 | -------------------------------------------------------------------------------- /packages/profile-sync-controller/src/shared/types/encryption.ts: -------------------------------------------------------------------------------- 1 | export declare type NativeScrypt = ( 2 | passwd: Uint8Array, 3 | salt: Uint8Array, 4 | N: number, 5 | r: number, 6 | p: number, 7 | size: number, 8 | ) => Promise; 9 | -------------------------------------------------------------------------------- /packages/profile-sync-controller/src/shared/types/services.ts: -------------------------------------------------------------------------------- 1 | import type { Platform } from '../env'; 2 | 3 | export type ClientMetaMetrics = { 4 | metametricsId: string; 5 | agent: Platform.EXTENSION | Platform.MOBILE; 6 | }; 7 | 8 | export type MetaMetricsAuth = { 9 | getMetaMetricsId: () => 10 | | ClientMetaMetrics['metametricsId'] 11 | | Promise; 12 | agent: ClientMetaMetrics['agent']; 13 | }; 14 | -------------------------------------------------------------------------------- /packages/profile-sync-controller/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src", 7 | "skipLibCheck": true 8 | }, 9 | "references": [ 10 | { "path": "../base-controller/tsconfig.build.json" }, 11 | { "path": "../keyring-controller/tsconfig.build.json" }, 12 | { "path": "../accounts-controller/tsconfig.build.json" }, 13 | { "path": "../network-controller/tsconfig.build.json" } 14 | ], 15 | "include": ["../../types", "./src"], 16 | "exclude": [ 17 | "./jest.config.packages.ts", 18 | "**/*.test.ts", 19 | "**/jest.config.ts", 20 | "**/__fixtures__/" 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /packages/profile-sync-controller/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./" 5 | }, 6 | "references": [ 7 | { "path": "../base-controller" }, 8 | { "path": "../keyring-controller" }, 9 | { "path": "../accounts-controller" }, 10 | { "path": "../network-controller" } 11 | ], 12 | "include": ["../../types", "./src"] 13 | } 14 | -------------------------------------------------------------------------------- /packages/profile-sync-controller/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/profile-sync-controller/user-storage/mocks/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0.0", 3 | "private": true, 4 | "description": "", 5 | "license": "MIT", 6 | "sideEffects": false, 7 | "main": "../../dist/controllers/user-storage/mocks/index.cjs", 8 | "types": "../../dist/types/controllers/user-storage/mocks/index.d.cts" 9 | } 10 | -------------------------------------------------------------------------------- /packages/profile-sync-controller/user-storage/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0.0", 3 | "private": true, 4 | "description": "", 5 | "license": "MIT", 6 | "sideEffects": false, 7 | "main": "../dist/controllers/user-storage/index.cjs", 8 | "types": "../dist/controllers/user-storage/index.d.cts" 9 | } 10 | -------------------------------------------------------------------------------- /packages/queued-request-controller/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/queued-request-controller` 2 | 3 | Includes a controller and middleware that implements a request queue. A request queue allows for intelligently switching of the globally selected network based on the dapps selected network. It ultimately allows us to handle requests with an intended destination network that is different than the currently selected network. 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/queued-request-controller` 8 | 9 | or 10 | 11 | `npm install @metamask/queued-request-controller` 12 | 13 | ## Contributing 14 | 15 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 16 | -------------------------------------------------------------------------------- /packages/queued-request-controller/src/types.ts: -------------------------------------------------------------------------------- 1 | import type { NetworkClientId } from '@metamask/network-controller'; 2 | import type { JsonRpcRequest } from '@metamask/utils'; 3 | 4 | export type QueuedRequestMiddlewareJsonRpcRequest = JsonRpcRequest & { 5 | networkClientId: NetworkClientId; 6 | origin: string; 7 | }; 8 | -------------------------------------------------------------------------------- /packages/queued-request-controller/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src" 7 | }, 8 | "references": [ 9 | { "path": "../base-controller/tsconfig.build.json" }, 10 | { "path": "../network-controller/tsconfig.build.json" }, 11 | { "path": "../selected-network-controller/tsconfig.build.json" }, 12 | { "path": "../controller-utils/tsconfig.build.json" }, 13 | { "path": "../json-rpc-engine/tsconfig.build.json" } 14 | ], 15 | "include": ["../../types", "./src"] 16 | } 17 | -------------------------------------------------------------------------------- /packages/queued-request-controller/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "rootDir": "../.." 6 | }, 7 | "references": [ 8 | { 9 | "path": "../base-controller" 10 | }, 11 | { 12 | "path": "../network-controller" 13 | }, 14 | { 15 | "path": "../selected-network-controller" 16 | }, 17 | { 18 | "path": "../controller-utils" 19 | }, 20 | { 21 | "path": "../json-rpc-engine" 22 | } 23 | ], 24 | "include": ["../../types", "../../tests", "./src", "./tests"] 25 | } 26 | -------------------------------------------------------------------------------- /packages/queued-request-controller/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/rate-limit-controller/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/rate-limit-controller` 2 | 3 | Contains logic for rate-limiting API endpoints by requesting origin. 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/rate-limit-controller` 8 | 9 | or 10 | 11 | `npm install @metamask/rate-limit-controller` 12 | 13 | ## Contributing 14 | 15 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 16 | -------------------------------------------------------------------------------- /packages/rate-limit-controller/src/index.ts: -------------------------------------------------------------------------------- 1 | export type { 2 | RateLimitedApi, 3 | RateLimitedApiMap, 4 | RateLimitedRequests, 5 | RateLimitControllerActions, 6 | RateLimitControllerCallApiAction, 7 | RateLimitControllerGetStateAction, 8 | RateLimitControllerEvents, 9 | RateLimitControllerStateChangeEvent, 10 | RateLimitMessenger, 11 | RateLimitState, 12 | } from './RateLimitController'; 13 | export { RateLimitController } from './RateLimitController'; 14 | -------------------------------------------------------------------------------- /packages/rate-limit-controller/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src" 7 | }, 8 | "references": [{ "path": "../base-controller/tsconfig.build.json" }], 9 | "include": ["../../types", "./src"] 10 | } 11 | -------------------------------------------------------------------------------- /packages/rate-limit-controller/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./" 5 | }, 6 | "references": [{ "path": "../base-controller" }], 7 | "include": ["../../types", "./src"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/rate-limit-controller/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/remote-feature-flag-controller/LICENSE: -------------------------------------------------------------------------------- 1 | This project is licensed under either of 2 | 3 | * MIT license ([LICENSE.MIT](LICENSE.MIT)) 4 | * Apache License, Version 2.0 ([LICENSE.APACHE2](LICENSE.APACHE2)) 5 | 6 | at your option. -------------------------------------------------------------------------------- /packages/remote-feature-flag-controller/src/constants.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * ClientConfig API base URL. 3 | */ 4 | export const BASE_URL = 'https://client-config.api.cx.metamask.io/v1'; 5 | -------------------------------------------------------------------------------- /packages/remote-feature-flag-controller/src/index.ts: -------------------------------------------------------------------------------- 1 | export { RemoteFeatureFlagController } from './remote-feature-flag-controller'; 2 | export type { RemoteFeatureFlagControllerMessenger } from './remote-feature-flag-controller'; 3 | export { 4 | ClientType, 5 | DistributionType, 6 | EnvironmentType, 7 | } from './remote-feature-flag-controller-types'; 8 | 9 | export type { 10 | RemoteFeatureFlagControllerState, 11 | RemoteFeatureFlagControllerGetStateAction, 12 | FeatureFlags, 13 | } from './remote-feature-flag-controller-types'; 14 | export { ClientConfigApiService } from './client-config-api-service/client-config-api-service'; 15 | export { generateDeterministicRandomNumber } from './utils/user-segmentation-utils'; 16 | -------------------------------------------------------------------------------- /packages/remote-feature-flag-controller/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src" 7 | }, 8 | "references": [{ "path": "../base-controller/tsconfig.build.json" }], 9 | "include": ["../../types", "./src"] 10 | } 11 | -------------------------------------------------------------------------------- /packages/remote-feature-flag-controller/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./" 5 | }, 6 | "references": [{ "path": "../../packages/base-controller" }], 7 | "include": ["../../types", "./src"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/remote-feature-flag-controller/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/sample-controllers/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All notable changes to this project will be documented in this file. 4 | 5 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), 6 | and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). 7 | 8 | ## [Unreleased] 9 | 10 | ### Changed 11 | 12 | - Bump `@metamask/base-controller` from ^8.0.0 to ^8.0.1 ([#5722](https://github.com/MetaMask/core/pull/5722)) 13 | 14 | ## [0.1.0] 15 | 16 | ### Added 17 | 18 | - Initial release of @metamask/sample-controllers. 19 | 20 | [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/sample-controllers@0.1.0...HEAD 21 | [0.1.0]: https://github.com/MetaMask/core/releases/tag/@metamask/sample-controllers@0.1.0 22 | -------------------------------------------------------------------------------- /packages/sample-controllers/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/sample-controllers` 2 | 3 | This package is designed to illustrate best practices for controller packages and controller files, including tests. 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/sample-controllers` 8 | 9 | or 10 | 11 | `npm install @metamask/sample-controllers` 12 | 13 | ## Contributing 14 | 15 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 16 | -------------------------------------------------------------------------------- /packages/sample-controllers/jest.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * For a detailed explanation regarding each configuration property and type check, visit: 3 | * https://jestjs.io/docs/configuration 4 | */ 5 | 6 | const merge = require('deepmerge'); 7 | const path = require('path'); 8 | 9 | const baseConfig = require('../../jest.config.packages'); 10 | 11 | const displayName = path.basename(__dirname); 12 | 13 | module.exports = merge(baseConfig, { 14 | // The display name when running multiple projects 15 | displayName, 16 | 17 | // An object that configures minimum threshold enforcement for coverage results 18 | coverageThreshold: { 19 | global: { 20 | branches: 100, 21 | functions: 100, 22 | lines: 100, 23 | statements: 100, 24 | }, 25 | }, 26 | }); 27 | -------------------------------------------------------------------------------- /packages/sample-controllers/src/index.test.ts: -------------------------------------------------------------------------------- 1 | import * as allExports from '.'; 2 | 3 | describe('@metamask/sample-controllers', () => { 4 | it('has expected JavaScript exports', () => { 5 | expect(Object.keys(allExports)).toMatchInlineSnapshot(` 6 | Array [ 7 | "getDefaultSampleGasPricesControllerState", 8 | "SampleGasPricesController", 9 | "SamplePetnamesController", 10 | "SampleGasPricesService", 11 | ] 12 | `); 13 | }); 14 | }); 15 | -------------------------------------------------------------------------------- /packages/sample-controllers/src/sample-gas-prices-service/index.test.ts: -------------------------------------------------------------------------------- 1 | import * as allExports from '.'; 2 | 3 | describe('@metamask/sample-controllers/sample-gas-prices-service', () => { 4 | it('has expected JavaScript exports', () => { 5 | expect(Object.keys(allExports)).toMatchInlineSnapshot(` 6 | Array [ 7 | "SampleGasPricesService", 8 | ] 9 | `); 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /packages/sample-controllers/src/sample-gas-prices-service/index.ts: -------------------------------------------------------------------------------- 1 | export { type SampleAbstractGasPricesService } from './sample-abstract-gas-prices-service'; 2 | export { SampleGasPricesService } from './sample-gas-prices-service'; 3 | -------------------------------------------------------------------------------- /packages/sample-controllers/src/sample-gas-prices-service/sample-abstract-gas-prices-service.ts: -------------------------------------------------------------------------------- 1 | import type { PublicInterface } from '@metamask/utils'; 2 | 3 | import type { SampleGasPricesService } from './sample-gas-prices-service'; 4 | 5 | /** 6 | * A service object which is responsible for fetching gas prices. 7 | */ 8 | export type SampleAbstractGasPricesService = 9 | PublicInterface; 10 | -------------------------------------------------------------------------------- /packages/sample-controllers/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src" 7 | }, 8 | "references": [ 9 | { "path": "../../packages/base-controller/tsconfig.build.json" }, 10 | { "path": "../../packages/network-controller/tsconfig.build.json" } 11 | ], 12 | "include": ["../../types", "./src"] 13 | } 14 | -------------------------------------------------------------------------------- /packages/sample-controllers/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/seedless-onboarding-controller/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/seedless-onboarding-controller` 2 | 3 | Backup and rehydrate SRP(s) using social login and password 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/seedless-onboarding-controller` 8 | 9 | or 10 | 11 | `npm install @metamask/seedless-onboarding-controller` 12 | 13 | ## Contributing 14 | 15 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 16 | -------------------------------------------------------------------------------- /packages/seedless-onboarding-controller/jest.environment.js: -------------------------------------------------------------------------------- 1 | const NodeEnvironment = require('jest-environment-node'); 2 | 3 | /** 4 | * SeedlessOnboardingController depends on @noble/hashes, which as of 1.7.1 relies on the 5 | * Web Crypto API in Node and browsers. 6 | */ 7 | class CustomTestEnvironment extends NodeEnvironment { 8 | async setup() { 9 | await super.setup(); 10 | if (typeof this.global.crypto === 'undefined') { 11 | this.global.crypto = require('crypto').webcrypto; 12 | } 13 | } 14 | } 15 | 16 | module.exports = CustomTestEnvironment; 17 | -------------------------------------------------------------------------------- /packages/seedless-onboarding-controller/src/logger.ts: -------------------------------------------------------------------------------- 1 | import { createProjectLogger, createModuleLogger } from '@metamask/utils'; 2 | 3 | import { controllerName } from './constants'; 4 | 5 | export const projectLogger = createProjectLogger(controllerName); 6 | 7 | export { createModuleLogger }; 8 | -------------------------------------------------------------------------------- /packages/seedless-onboarding-controller/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src" 7 | }, 8 | "references": [ 9 | { 10 | "path": "../base-controller/tsconfig.build.json" 11 | }, 12 | { 13 | "path": "../message-manager/tsconfig.build.json" 14 | }, 15 | { 16 | "path": "../keyring-controller/tsconfig.build.json" 17 | } 18 | ], 19 | "include": ["../../types", "./src"] 20 | } 21 | -------------------------------------------------------------------------------- /packages/seedless-onboarding-controller/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./" 5 | }, 6 | "references": [ 7 | { 8 | "path": "../base-controller" 9 | }, 10 | { 11 | "path": "../message-manager" 12 | }, 13 | { 14 | "path": "../keyring-controller" 15 | } 16 | ], 17 | "include": ["../../types", "./src", "./tests"] 18 | } 19 | -------------------------------------------------------------------------------- /packages/seedless-onboarding-controller/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/selected-network-controller/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/selected-network-controller` 2 | 3 | Provides an interface to the currently selected networkClientId for a given domain. 4 | 5 | Domain here means one of two things: 6 | 7 | - the jsonrpc request originated from a dapp (domain is the origin/url of the dapp) 8 | - the jsonrpc request originated interally to metamask (the domain is here is 'metamask') 9 | 10 | ## Installation 11 | 12 | `yarn add @metamask/selected-network-controller` 13 | 14 | or 15 | 16 | `npm install @metamask/selected-network-controller` 17 | 18 | ## Contributing 19 | 20 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 21 | -------------------------------------------------------------------------------- /packages/selected-network-controller/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src" 7 | }, 8 | "references": [ 9 | { "path": "../base-controller/tsconfig.build.json" }, 10 | { "path": "../network-controller/tsconfig.build.json" }, 11 | { "path": "../json-rpc-engine/tsconfig.build.json" }, 12 | { "path": "../permission-controller/tsconfig.build.json" } 13 | ], 14 | "include": ["../../types", "./src"] 15 | } 16 | -------------------------------------------------------------------------------- /packages/selected-network-controller/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "rootDir": "../.." 6 | }, 7 | "references": [ 8 | { 9 | "path": "../base-controller" 10 | }, 11 | { 12 | "path": "../network-controller" 13 | }, 14 | { 15 | "path": "../json-rpc-engine" 16 | }, 17 | { 18 | "path": "../permission-controller" 19 | } 20 | ], 21 | "include": ["../../types", "../../tests", "./src", "./tests"] 22 | } 23 | -------------------------------------------------------------------------------- /packages/selected-network-controller/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/signature-controller/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/signature-controller` 2 | 3 | Processes signing requests in order to sign arbitrary or typed data. 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/signature-controller` 8 | 9 | or 10 | 11 | `npm install @metamask/signature-controller` 12 | 13 | ## Compatibility 14 | 15 | This package relies implicitly upon the `EventEmitter` module. This module is available natively in Node.js, but when using this package for the browser, make sure to use a polyfill such as `events`. 16 | 17 | ## Contributing 18 | 19 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 20 | -------------------------------------------------------------------------------- /packages/signature-controller/jest.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * For a detailed explanation regarding each configuration property and type check, visit: 3 | * https://jestjs.io/docs/configuration 4 | */ 5 | 6 | const merge = require('deepmerge'); 7 | const path = require('path'); 8 | 9 | const baseConfig = require('../../jest.config.packages'); 10 | 11 | const displayName = path.basename(__dirname); 12 | 13 | module.exports = merge(baseConfig, { 14 | // The display name when running multiple projects 15 | displayName, 16 | 17 | // An object that configures minimum threshold enforcement for coverage results 18 | coverageThreshold: { 19 | global: { 20 | branches: 100, 21 | functions: 100, 22 | lines: 100, 23 | statements: 100, 24 | }, 25 | }, 26 | }); 27 | -------------------------------------------------------------------------------- /packages/signature-controller/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './SignatureController'; 2 | export * from './types'; 3 | -------------------------------------------------------------------------------- /packages/signature-controller/src/logger.ts: -------------------------------------------------------------------------------- 1 | /* istanbul ignore file */ 2 | 3 | import { createProjectLogger, createModuleLogger } from '@metamask/utils'; 4 | 5 | export const projectLogger = createProjectLogger('signature-controller'); 6 | 7 | export { createModuleLogger }; 8 | -------------------------------------------------------------------------------- /packages/signature-controller/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./" 5 | }, 6 | "references": [ 7 | { 8 | "path": "../accounts-controller" 9 | }, 10 | { 11 | "path": "../approval-controller" 12 | }, 13 | { 14 | "path": "../base-controller" 15 | }, 16 | { 17 | "path": "../controller-utils" 18 | }, 19 | { 20 | "path": "../message-manager" 21 | }, 22 | { 23 | "path": "../keyring-controller" 24 | }, 25 | { 26 | "path": "../logging-controller" 27 | }, 28 | { 29 | "path": "../network-controller" 30 | } 31 | ], 32 | "include": ["../../types", "./src"] 33 | } 34 | -------------------------------------------------------------------------------- /packages/signature-controller/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/token-search-discovery-controller/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/token-search-discovery-controller` 2 | 3 | Manages token search and discovery through the Portfolio API. 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/token-search-discovery-controller` 8 | 9 | or 10 | 11 | `npm install @metamask/token-search-discovery-controller` 12 | 13 | ## Contributing 14 | 15 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 16 | -------------------------------------------------------------------------------- /packages/token-search-discovery-controller/src/test/constants.ts: -------------------------------------------------------------------------------- 1 | export const TEST_API_URLS = { 2 | BASE_URL: 'https://mock-api.test', 3 | PORTFOLIO_API: 'https://mock-portfolio-api.test', 4 | } as const; 5 | -------------------------------------------------------------------------------- /packages/token-search-discovery-controller/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src" 7 | }, 8 | "references": [{ "path": "../base-controller/tsconfig.build.json" }], 9 | "include": ["../../types", "./src"] 10 | } 11 | -------------------------------------------------------------------------------- /packages/token-search-discovery-controller/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./" 5 | }, 6 | "references": [{ "path": "../../packages/base-controller" }], 7 | "include": ["../../types", "./src"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/token-search-discovery-controller/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/transaction-controller/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/transaction-controller` 2 | 3 | Stores transactions alongside their periodically updated statuses and manages interactions such as approval and cancellation. 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/transaction-controller` 8 | 9 | or 10 | 11 | `npm install @metamask/transaction-controller` 12 | 13 | ## Compatibility 14 | 15 | This package relies implicitly upon the `EventEmitter` module. This module is available natively in Node.js, but when using this package for the browser, make sure to use a polyfill such as `events`. 16 | 17 | ## Contributing 18 | 19 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 20 | -------------------------------------------------------------------------------- /packages/transaction-controller/src/logger.ts: -------------------------------------------------------------------------------- 1 | /* istanbul ignore file */ 2 | 3 | import { createProjectLogger, createModuleLogger } from '@metamask/utils'; 4 | 5 | export const projectLogger = createProjectLogger('transaction-controller'); 6 | 7 | export const incomingTransactionsLogger = createModuleLogger( 8 | projectLogger, 9 | 'incoming-transactions', 10 | ); 11 | 12 | export { createModuleLogger }; 13 | -------------------------------------------------------------------------------- /packages/transaction-controller/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src" 7 | }, 8 | "references": [ 9 | { "path": "../accounts-controller/tsconfig.build.json" }, 10 | { "path": "../approval-controller/tsconfig.build.json" }, 11 | { "path": "../base-controller/tsconfig.build.json" }, 12 | { "path": "../controller-utils/tsconfig.build.json" }, 13 | { "path": "../gas-fee-controller/tsconfig.build.json" }, 14 | { "path": "../network-controller/tsconfig.build.json" }, 15 | { "path": "../remote-feature-flag-controller/tsconfig.build.json" } 16 | ], 17 | "include": ["../../types", "./src"] 18 | } 19 | -------------------------------------------------------------------------------- /packages/transaction-controller/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "target": "ES2022" 6 | }, 7 | "references": [ 8 | { "path": "../accounts-controller" }, 9 | { "path": "../approval-controller" }, 10 | { "path": "../base-controller" }, 11 | { "path": "../controller-utils" }, 12 | { "path": "../gas-fee-controller" }, 13 | { "path": "../network-controller" }, 14 | { "path": "../remote-feature-flag-controller" } 15 | ], 16 | "include": ["../../types", "./src", "./tests"] 17 | } 18 | -------------------------------------------------------------------------------- /packages/transaction-controller/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /packages/user-operation-controller/README.md: -------------------------------------------------------------------------------- 1 | # `@metamask/user-operation-controller` 2 | 3 | Creates user operations and manages their life cycle. 4 | 5 | ## Installation 6 | 7 | `yarn add @metamask/user-operation-controller` 8 | 9 | or 10 | 11 | `npm install @metamask/user-operation-controller` 12 | 13 | ## Compatibility 14 | 15 | This package relies implicitly upon the `EventEmitter` module. This module is available natively in Node.js, but when using this package for the browser, make sure to use a polyfill such as `events`. 16 | 17 | ## Contributing 18 | 19 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 20 | -------------------------------------------------------------------------------- /packages/user-operation-controller/src/constants.ts: -------------------------------------------------------------------------------- 1 | export const EMPTY_BYTES = '0x'; 2 | export const ADDRESS_ZERO = '0x0000000000000000000000000000000000000000'; 3 | export const VALUE_ZERO = '0x0'; 4 | -------------------------------------------------------------------------------- /packages/user-operation-controller/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './UserOperationController'; 2 | export * from './types'; 3 | -------------------------------------------------------------------------------- /packages/user-operation-controller/src/logger.ts: -------------------------------------------------------------------------------- 1 | /* istanbul ignore file */ 2 | 3 | import { createProjectLogger, createModuleLogger } from '@metamask/utils'; 4 | 5 | export const projectLogger = createProjectLogger('user-operation-controller'); 6 | 7 | export { createModuleLogger }; 8 | -------------------------------------------------------------------------------- /packages/user-operation-controller/src/utils/chain-id.test.ts: -------------------------------------------------------------------------------- 1 | import { toEip155ChainId } from './chain-id'; 2 | 3 | describe('chain-id', () => { 4 | describe('toEip155ChainId', () => { 5 | it('converts hex to integer number', () => { 6 | expect(toEip155ChainId('0x1')).toBe('1'); 7 | }); 8 | 9 | it('converts integer number back to their original reprensentation', () => { 10 | expect(toEip155ChainId('1')).toBe('1'); 11 | }); 12 | 13 | it("uses the original chain id if it's not a number", () => { 14 | const chainId = 'not-a-number'; 15 | expect(toEip155ChainId(chainId)).toBe(chainId); 16 | }); 17 | }); 18 | }); 19 | -------------------------------------------------------------------------------- /packages/user-operation-controller/src/utils/chain-id.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Converts a chain ID string to a compliant CAIP-2 chain ID reference for EIP-155 chains. 3 | * 4 | * @param chainId - Chain ID string 5 | * @returns An CAIP-2 chain ID reference for EIP-155 chains. 6 | */ 7 | export function toEip155ChainId(chainId: string): string { 8 | const chainIdNumber = Number(chainId); 9 | 10 | // If for some reason the chainId isn't convertible to a decimal integer representation, we fallback 11 | // to the initial `chainId`. 12 | return Number.isInteger(chainIdNumber) ? chainIdNumber.toString() : chainId; 13 | } 14 | -------------------------------------------------------------------------------- /packages/user-operation-controller/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./" 5 | }, 6 | "references": [ 7 | { 8 | "path": "../base-controller" 9 | }, 10 | { 11 | "path": "../controller-utils" 12 | }, 13 | { 14 | "path": "../gas-fee-controller" 15 | }, 16 | { 17 | "path": "../keyring-controller" 18 | }, 19 | { 20 | "path": "../network-controller" 21 | }, 22 | { 23 | "path": "../polling-controller" 24 | }, 25 | { 26 | "path": "../transaction-controller" 27 | } 28 | ], 29 | "include": ["../../types", "./src"] 30 | } 31 | -------------------------------------------------------------------------------- /packages/user-operation-controller/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /release.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "versioningStrategy": "independent" 3 | } 4 | -------------------------------------------------------------------------------- /scripts/create-package/README.md: -------------------------------------------------------------------------------- 1 | # `create-package` 2 | 3 | This directory contains our CLI for creating new monorepo packages. 4 | For details, please see [the monorepo contributor documentation](../../docs/contributing.md#adding-new-packages). 5 | -------------------------------------------------------------------------------- /scripts/create-package/constants.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * The monorepo files that need to be parsed or modified. 3 | */ 4 | export enum MonorepoFiles { 5 | PackageJson = 'package.json', 6 | TsConfig = 'tsconfig.json', 7 | TsConfigBuild = 'tsconfig.build.json', 8 | } 9 | 10 | /** 11 | * Placeholder values in package template files that need to be replaced with 12 | * actual values corresponding to the new package. 13 | */ 14 | export enum Placeholders { 15 | CurrentYear = 'CURRENT_YEAR', 16 | NodeVersions = 'NODE_VERSIONS', 17 | PackageName = 'PACKAGE_NAME', 18 | PackageDescription = 'PACKAGE_DESCRIPTION', 19 | PackageDirectoryName = 'PACKAGE_DIRECTORY_NAME', 20 | } 21 | -------------------------------------------------------------------------------- /scripts/create-package/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Entry point file for the `create-package` CLI. 3 | */ 4 | 5 | import cli from './cli'; 6 | import { commands } from './commands'; 7 | 8 | cli(process.argv, commands).catch((error) => { 9 | console.error(error); 10 | process.exitCode = 1; 11 | }); 12 | -------------------------------------------------------------------------------- /scripts/create-package/package-template/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All notable changes to this project will be documented in this file. 4 | 5 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), 6 | and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). 7 | 8 | ## [Unreleased] 9 | 10 | [Unreleased]: https://github.com/MetaMask/core/ 11 | -------------------------------------------------------------------------------- /scripts/create-package/package-template/README.md: -------------------------------------------------------------------------------- 1 | # `PACKAGE_NAME` 2 | 3 | PACKAGE_DESCRIPTION 4 | 5 | ## Installation 6 | 7 | `yarn add PACKAGE_NAME` 8 | 9 | or 10 | 11 | `npm install PACKAGE_NAME` 12 | 13 | ## Contributing 14 | 15 | This package is part of a monorepo. Instructions for contributing can be found in the [monorepo README](https://github.com/MetaMask/core#readme). 16 | -------------------------------------------------------------------------------- /scripts/create-package/package-template/src/index.test.ts: -------------------------------------------------------------------------------- 1 | import greeter from '.'; 2 | 3 | describe('Test', () => { 4 | it('greets', () => { 5 | const name = 'Huey'; 6 | const result = greeter(name); 7 | expect(result).toBe('Hello, Huey!'); 8 | }); 9 | }); 10 | -------------------------------------------------------------------------------- /scripts/create-package/package-template/src/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Example function that returns a greeting for the given name. 3 | * 4 | * @param name - The name to greet. 5 | * @returns The greeting. 6 | */ 7 | export default function greeter(name: string): string { 8 | return `Hello, ${name}!`; 9 | } 10 | -------------------------------------------------------------------------------- /scripts/create-package/package-template/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.build.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist", 6 | "rootDir": "./src" 7 | }, 8 | "references": [], 9 | "include": ["../../types", "./src"] 10 | } 11 | -------------------------------------------------------------------------------- /scripts/create-package/package-template/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.packages.json", 3 | "compilerOptions": { 4 | "baseUrl": "./" 5 | }, 6 | "references": [], 7 | "include": ["../../types", "./src"] 8 | } 9 | -------------------------------------------------------------------------------- /scripts/create-package/package-template/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "excludePrivate": true, 4 | "hideGenerator": true, 5 | "out": "docs", 6 | "tsconfig": "./tsconfig.build.json" 7 | } 8 | -------------------------------------------------------------------------------- /scripts/create-package/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.scripts.json", 3 | "compilerOptions": { 4 | "baseUrl": "./" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /scripts/list-workspace-versions.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | if [[ "$1" == "--json" ]]; then 4 | yarn workspaces list --json --no-private | \ 5 | jq --raw-output '.location' | \ 6 | xargs -I{} cat '{}/package.json' | \ 7 | jq --slurp 'map({name, version})' 8 | else 9 | yarn workspaces list --json --no-private | \ 10 | jq --raw-output '.location' | \ 11 | xargs -I{} cat '{}/package.json' | \ 12 | jq --raw-output '"\(.name) \(.version)"' | \ 13 | xargs printf '%40s %s\n' 14 | fi 15 | -------------------------------------------------------------------------------- /scripts/prepack.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -x 4 | set -e 5 | set -o pipefail 6 | 7 | if [[ -n $SKIP_PREPACK ]]; then 8 | echo "Notice: skipping prepack." 9 | exit 0 10 | fi 11 | 12 | yarn build 13 | -------------------------------------------------------------------------------- /scripts/prepare-preview-builds.jq: -------------------------------------------------------------------------------- 1 | # The name is overwritten, causing the package to get published under a 2 | # different NPM scope than non-preview builds. 3 | .name |= sub("@metamask/"; "\($npm_scope)/") | 4 | 5 | # The prerelease version is overwritten, preserving the non-prerelease portion 6 | # of the version. Technically we'd want to bump the non-prerelease portion as 7 | # well if we wanted this to be SemVer-compliant, but it was simpler not to. 8 | # This is just for testing, it doesn't need to strictly follow SemVer. 9 | .version |= split("-")[0] + "-preview-\($hash)" 10 | -------------------------------------------------------------------------------- /scripts/update-changelog.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -euo pipefail 4 | 5 | # Get the current package name 6 | if [[ $# -eq 0 ]]; then 7 | echo "Missing package name." 8 | exit 1 9 | fi 10 | 11 | package_name="$1" 12 | shift # remove package name from arguments 13 | 14 | # Get the current git branch 15 | branch=$(git rev-parse --abbrev-ref HEAD) 16 | 17 | if [[ $branch =~ ^release/ ]]; then 18 | yarn auto-changelog update --prettier --tag-prefix "${package_name}@" --rc "$@" 19 | else 20 | yarn auto-changelog update --prettier --tag-prefix "${package_name}@" "$@" 21 | fi 22 | -------------------------------------------------------------------------------- /scripts/validate-changelog.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -euo pipefail 4 | 5 | if [[ $# -eq 0 ]]; then 6 | echo "Missing package name." 7 | exit 1 8 | fi 9 | 10 | package_name="$1" 11 | shift # remove package name from arguments 12 | 13 | if [[ "${GITHUB_REF:-}" =~ '^release/' ]]; then 14 | yarn auto-changelog validate --prettier --tag-prefix "${package_name}@" --rc "$@" 15 | else 16 | yarn auto-changelog validate --prettier --tag-prefix "${package_name}@" "$@" 17 | fi 18 | -------------------------------------------------------------------------------- /tests/scripts-setup.ts: -------------------------------------------------------------------------------- 1 | // If the code-under-test sets `process.exitCode`, the test process can exit with that code without 2 | // any error messages. 3 | // This ensures that an error message is shown explaining the reason for the failure. We can unset 4 | // the exit code in each affected test as part of the cleanup steps. 5 | afterEach(() => { 6 | if (process.exitCode !== undefined && process.exitCode !== 0) { 7 | throw new Error(`Non-zero exit code: ${String(process.exitCode)}`); 8 | } 9 | }); 10 | 11 | // Signals that this is a module not a script 12 | export {}; 13 | -------------------------------------------------------------------------------- /tests/setup.ts: -------------------------------------------------------------------------------- 1 | import 'isomorphic-fetch'; 2 | -------------------------------------------------------------------------------- /tests/setupAfterEnv/index.ts: -------------------------------------------------------------------------------- 1 | import './matchers'; 2 | import './nock'; 3 | -------------------------------------------------------------------------------- /tests/setupAfterEnv/nock.ts: -------------------------------------------------------------------------------- 1 | import nock from 'nock'; 2 | 3 | beforeEach(() => { 4 | nock.disableNetConnect(); 5 | }); 6 | 7 | afterEach(() => { 8 | nock.cleanAll(); 9 | nock.enableNetConnect(); 10 | }); 11 | -------------------------------------------------------------------------------- /tsconfig.packages.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.packages.json", 3 | "compilerOptions": { 4 | "declaration": true, 5 | "declarationMap": true, 6 | "emitDeclarationOnly": true, 7 | "inlineSources": true, 8 | "sourceMap": true 9 | }, 10 | "exclude": ["./jest.config.packages.ts", "**/*.test.ts", "**/jest.config.ts"] 11 | } 12 | -------------------------------------------------------------------------------- /tsconfig.packages.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "esModuleInterop": true, 5 | "lib": ["ES2020", "DOM"], 6 | "module": "Node16", 7 | "moduleResolution": "Node16", 8 | /** 9 | * Here we ensure that TypeScript resolves `@metamask/*` imports to the 10 | * uncompiled source code for packages that live in this repo. 11 | * 12 | * NOTE: This must be synchronized with the `moduleNameMapper` option in 13 | * `jest.config.packages.js`. 14 | */ 15 | "paths": { 16 | "@metamask/*": ["../*/src"] 17 | }, 18 | "strict": true, 19 | "target": "ES2020" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /tsconfig.scripts.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": "./", 4 | "esModuleInterop": true, 5 | "exactOptionalPropertyTypes": true, 6 | "forceConsistentCasingInFileNames": true, 7 | "lib": ["ES2020"], 8 | "module": "Node16", 9 | "moduleResolution": "Node16", 10 | "noEmit": true, 11 | "noErrorTruncation": true, 12 | "noUncheckedIndexedAccess": true, 13 | "strict": true, 14 | "target": "es2020" 15 | }, 16 | "include": ["./scripts/**/*.ts"], 17 | "exclude": ["**/node_modules"] 18 | } 19 | -------------------------------------------------------------------------------- /types/@metamask/contract-metadata.d.ts: -------------------------------------------------------------------------------- 1 | declare module '@metamask/contract-metadata'; 2 | -------------------------------------------------------------------------------- /types/@metamask/eth-json-rpc-filters.d.ts: -------------------------------------------------------------------------------- 1 | declare module '@metamask/eth-json-rpc-filters/subscriptionManager'; 2 | -------------------------------------------------------------------------------- /types/@metamask/ethjs-provider-http.d.ts: -------------------------------------------------------------------------------- 1 | declare module '@metamask/ethjs-provider-http'; 2 | -------------------------------------------------------------------------------- /types/@metamask/ethjs-unit.d.ts: -------------------------------------------------------------------------------- 1 | declare module '@metamask/ethjs-unit'; 2 | -------------------------------------------------------------------------------- /types/@metamask/metamask-eth-abis.d.ts: -------------------------------------------------------------------------------- 1 | declare module '@metamask/metamask-eth-abis'; 2 | -------------------------------------------------------------------------------- /types/eth-ens-namehash.d.ts: -------------------------------------------------------------------------------- 1 | declare module 'eth-ens-namehash'; 2 | -------------------------------------------------------------------------------- /types/eth-json-rpc-infura/src/createProvider.d.ts: -------------------------------------------------------------------------------- 1 | declare module 'eth-json-rpc-infura/src/createProvider'; 2 | -------------------------------------------------------------------------------- /types/ethereum-ens-network-map.d.ts: -------------------------------------------------------------------------------- 1 | declare module 'ethereum-ens-network-map'; 2 | -------------------------------------------------------------------------------- /types/ethjs-query.d.ts: -------------------------------------------------------------------------------- 1 | declare module '@metamask/ethjs-query'; 2 | -------------------------------------------------------------------------------- /types/single-call-balance-checker-abi.d.ts: -------------------------------------------------------------------------------- 1 | declare module 'single-call-balance-checker-abi'; 2 | --------------------------------------------------------------------------------