Skip to content

feat: Implement wallet initialization library#8838

Draft
FrederikBolding wants to merge 13 commits into
mainfrom
fb/wallet-lib-v1
Draft

feat: Implement wallet initialization library#8838
FrederikBolding wants to merge 13 commits into
mainfrom
fb/wallet-lib-v1

Conversation

@FrederikBolding
Copy link
Copy Markdown
Member

@FrederikBolding FrederikBolding commented May 18, 2026

Explanation

This PR implements a narrowly-scoped (as compared to the original feature branch) version of the wallet initialization library that only includes initializing the KeyringController. This can eventually be used to demonstrate the integration of the library into the clients and serves as the base for future work.

Overall it works in a similarly to the initialization pattern used in extension and mobile today, with some differences:

  • The entities initialized by the pattern are referred to as "instances", not "messenger clients".
  • It attempts to be less verbose as the initialization of an instance can be done in a single file exporting a single object, the InitializationConfiguration. This object contains both a function to setup the messenger and the instance.
  • It has no concept of "initialization messengers", the messenger returned from InitializationConfiguration.messenger is expected to have access to actions/events necessary to initialize and operate the instance.
  • There is no way to access the instances directly.

The Wallet instance provides access to the instances within using the messenger while also exposing a limited set of useful properties like state and controllerMetadata.

References

https://consensyssoftware.atlassian.net/browse/WPC-999

Checklist

  • I've updated the test suite for new or updated code as appropriate
  • I've updated documentation (JSDoc, Markdown, etc.) for new or updated code as appropriate
  • I've communicated my changes to consumers by updating changelogs for packages I've changed
  • I've introduced breaking changes in this PR and have prepared draft pull requests for clients and consumer packages to resolve them

@FrederikBolding
Copy link
Copy Markdown
Member Author

@metamaskbot publish-previews

@github-actions
Copy link
Copy Markdown
Contributor

Preview builds have been published. Learn how to use preview builds in other projects.

Expand for full list of packages and versions.
@metamask-previews/account-tree-controller@7.4.0-preview-598dbe642
@metamask-previews/accounts-controller@38.1.1-preview-598dbe642
@metamask-previews/address-book-controller@7.1.2-preview-598dbe642
@metamask-previews/ai-controllers@0.6.3-preview-598dbe642
@metamask-previews/analytics-controller@1.0.1-preview-598dbe642
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-598dbe642
@metamask-previews/announcement-controller@8.1.0-preview-598dbe642
@metamask-previews/app-metadata-controller@2.0.1-preview-598dbe642
@metamask-previews/approval-controller@9.0.1-preview-598dbe642
@metamask-previews/assets-controller@7.1.2-preview-598dbe642
@metamask-previews/assets-controllers@108.1.0-preview-598dbe642
@metamask-previews/authenticated-user-storage@1.0.1-preview-598dbe642
@metamask-previews/base-controller@9.1.0-preview-598dbe642
@metamask-previews/base-data-service@0.1.2-preview-598dbe642
@metamask-previews/bridge-controller@72.0.4-preview-598dbe642
@metamask-previews/bridge-status-controller@71.1.4-preview-598dbe642
@metamask-previews/build-utils@3.0.4-preview-598dbe642
@metamask-previews/chain-agnostic-permission@1.6.1-preview-598dbe642
@metamask-previews/chomp-api-service@3.1.0-preview-598dbe642
@metamask-previews/claims-controller@0.5.1-preview-598dbe642
@metamask-previews/client-controller@1.0.1-preview-598dbe642
@metamask-previews/compliance-controller@2.0.1-preview-598dbe642
@metamask-previews/composable-controller@12.0.1-preview-598dbe642
@metamask-previews/config-registry-controller@0.3.1-preview-598dbe642
@metamask-previews/connectivity-controller@0.2.0-preview-598dbe642
@metamask-previews/controller-utils@12.1.0-preview-598dbe642
@metamask-previews/core-backend@6.2.2-preview-598dbe642
@metamask-previews/delegation-controller@3.0.0-preview-598dbe642
@metamask-previews/earn-controller@12.1.2-preview-598dbe642
@metamask-previews/eip-5792-middleware@3.0.3-preview-598dbe642
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-598dbe642
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-598dbe642
@metamask-previews/ens-controller@19.1.3-preview-598dbe642
@metamask-previews/eth-block-tracker@15.0.1-preview-598dbe642
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-598dbe642
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-598dbe642
@metamask-previews/foundryup@1.0.1-preview-598dbe642
@metamask-previews/gas-fee-controller@26.2.1-preview-598dbe642
@metamask-previews/gator-permissions-controller@4.1.2-preview-598dbe642
@metamask-previews/geolocation-controller@0.1.3-preview-598dbe642
@metamask-previews/json-rpc-engine@10.5.0-preview-598dbe642
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-598dbe642
@metamask-previews/keyring-controller@25.5.0-preview-598dbe642
@metamask-previews/logging-controller@8.0.2-preview-598dbe642
@metamask-previews/message-manager@14.1.2-preview-598dbe642
@metamask-previews/messenger@1.2.0-preview-598dbe642
@metamask-previews/messenger-cli@0.2.0-preview-598dbe642
@metamask-previews/money-account-balance-service@1.0.2-preview-598dbe642
@metamask-previews/money-account-controller@0.3.0-preview-598dbe642
@metamask-previews/money-account-upgrade-controller@2.0.1-preview-598dbe642
@metamask-previews/multichain-account-service@10.0.0-preview-598dbe642
@metamask-previews/multichain-api-middleware@3.1.2-preview-598dbe642
@metamask-previews/multichain-network-controller@3.1.1-preview-598dbe642
@metamask-previews/multichain-transactions-controller@7.1.0-preview-598dbe642
@metamask-previews/name-controller@9.1.2-preview-598dbe642
@metamask-previews/network-controller@32.0.0-preview-598dbe642
@metamask-previews/network-enablement-controller@5.1.1-preview-598dbe642
@metamask-previews/notification-services-controller@23.1.1-preview-598dbe642
@metamask-previews/passkey-controller@2.0.1-preview-598dbe642
@metamask-previews/permission-controller@13.1.1-preview-598dbe642
@metamask-previews/permission-log-controller@5.1.0-preview-598dbe642
@metamask-previews/perps-controller@6.0.1-preview-598dbe642
@metamask-previews/phishing-controller@17.1.2-preview-598dbe642
@metamask-previews/polling-controller@16.0.5-preview-598dbe642
@metamask-previews/preferences-controller@23.1.0-preview-598dbe642
@metamask-previews/profile-metrics-controller@3.1.4-preview-598dbe642
@metamask-previews/profile-sync-controller@28.1.0-preview-598dbe642
@metamask-previews/ramps-controller@13.3.1-preview-598dbe642
@metamask-previews/rate-limit-controller@7.0.1-preview-598dbe642
@metamask-previews/react-data-query@0.2.0-preview-598dbe642
@metamask-previews/remote-feature-flag-controller@4.2.1-preview-598dbe642
@metamask-previews/sample-controllers@5.0.1-preview-598dbe642
@metamask-previews/seedless-onboarding-controller@9.1.0-preview-598dbe642
@metamask-previews/selected-network-controller@26.1.3-preview-598dbe642
@metamask-previews/shield-controller@5.1.2-preview-598dbe642
@metamask-previews/signature-controller@39.2.2-preview-598dbe642
@metamask-previews/snap-account-service@0.1.0-preview-598dbe642
@metamask-previews/social-controllers@2.2.1-preview-598dbe642
@metamask-previews/storage-service@1.0.1-preview-598dbe642
@metamask-previews/subscription-controller@6.1.3-preview-598dbe642
@metamask-previews/transaction-controller@65.4.0-preview-598dbe642
@metamask-previews/transaction-pay-controller@22.4.0-preview-598dbe642
@metamask-previews/user-operation-controller@41.2.2-preview-598dbe642
@metamask-previews/wallet@0.0.0-preview-598dbe642

@FrederikBolding
Copy link
Copy Markdown
Member Author

@metamaskbot publish-previews

@github-actions
Copy link
Copy Markdown
Contributor

Preview builds have been published. Learn how to use preview builds in other projects.

Expand for full list of packages and versions.
@metamask-previews/account-tree-controller@7.4.0-preview-ea54cecca
@metamask-previews/accounts-controller@38.1.1-preview-ea54cecca
@metamask-previews/address-book-controller@7.1.2-preview-ea54cecca
@metamask-previews/ai-controllers@0.6.3-preview-ea54cecca
@metamask-previews/analytics-controller@1.0.1-preview-ea54cecca
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-ea54cecca
@metamask-previews/announcement-controller@8.1.0-preview-ea54cecca
@metamask-previews/app-metadata-controller@2.0.1-preview-ea54cecca
@metamask-previews/approval-controller@9.0.1-preview-ea54cecca
@metamask-previews/assets-controller@7.1.2-preview-ea54cecca
@metamask-previews/assets-controllers@108.1.0-preview-ea54cecca
@metamask-previews/authenticated-user-storage@1.0.1-preview-ea54cecca
@metamask-previews/base-controller@9.1.0-preview-ea54cecca
@metamask-previews/base-data-service@0.1.2-preview-ea54cecca
@metamask-previews/bridge-controller@72.0.4-preview-ea54cecca
@metamask-previews/bridge-status-controller@71.1.4-preview-ea54cecca
@metamask-previews/build-utils@3.0.4-preview-ea54cecca
@metamask-previews/chain-agnostic-permission@1.6.1-preview-ea54cecca
@metamask-previews/chomp-api-service@3.1.0-preview-ea54cecca
@metamask-previews/claims-controller@0.5.1-preview-ea54cecca
@metamask-previews/client-controller@1.0.1-preview-ea54cecca
@metamask-previews/compliance-controller@2.0.1-preview-ea54cecca
@metamask-previews/composable-controller@12.0.1-preview-ea54cecca
@metamask-previews/config-registry-controller@0.3.1-preview-ea54cecca
@metamask-previews/connectivity-controller@0.2.0-preview-ea54cecca
@metamask-previews/controller-utils@12.1.0-preview-ea54cecca
@metamask-previews/core-backend@6.2.2-preview-ea54cecca
@metamask-previews/delegation-controller@3.0.0-preview-ea54cecca
@metamask-previews/earn-controller@12.1.2-preview-ea54cecca
@metamask-previews/eip-5792-middleware@3.0.3-preview-ea54cecca
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-ea54cecca
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-ea54cecca
@metamask-previews/ens-controller@19.1.3-preview-ea54cecca
@metamask-previews/eth-block-tracker@15.0.1-preview-ea54cecca
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-ea54cecca
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-ea54cecca
@metamask-previews/foundryup@1.0.1-preview-ea54cecca
@metamask-previews/gas-fee-controller@26.2.1-preview-ea54cecca
@metamask-previews/gator-permissions-controller@4.1.2-preview-ea54cecca
@metamask-previews/geolocation-controller@0.1.3-preview-ea54cecca
@metamask-previews/json-rpc-engine@10.5.0-preview-ea54cecca
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-ea54cecca
@metamask-previews/keyring-controller@25.5.0-preview-ea54cecca
@metamask-previews/logging-controller@8.0.2-preview-ea54cecca
@metamask-previews/message-manager@14.1.2-preview-ea54cecca
@metamask-previews/messenger@1.2.0-preview-ea54cecca
@metamask-previews/messenger-cli@0.2.0-preview-ea54cecca
@metamask-previews/money-account-balance-service@1.0.2-preview-ea54cecca
@metamask-previews/money-account-controller@0.3.0-preview-ea54cecca
@metamask-previews/money-account-upgrade-controller@2.0.1-preview-ea54cecca
@metamask-previews/multichain-account-service@10.0.0-preview-ea54cecca
@metamask-previews/multichain-api-middleware@3.1.2-preview-ea54cecca
@metamask-previews/multichain-network-controller@3.1.1-preview-ea54cecca
@metamask-previews/multichain-transactions-controller@7.1.0-preview-ea54cecca
@metamask-previews/name-controller@9.1.2-preview-ea54cecca
@metamask-previews/network-controller@32.0.0-preview-ea54cecca
@metamask-previews/network-enablement-controller@5.1.1-preview-ea54cecca
@metamask-previews/notification-services-controller@23.1.1-preview-ea54cecca
@metamask-previews/passkey-controller@2.0.1-preview-ea54cecca
@metamask-previews/permission-controller@13.1.1-preview-ea54cecca
@metamask-previews/permission-log-controller@5.1.0-preview-ea54cecca
@metamask-previews/perps-controller@6.0.1-preview-ea54cecca
@metamask-previews/phishing-controller@17.1.2-preview-ea54cecca
@metamask-previews/polling-controller@16.0.5-preview-ea54cecca
@metamask-previews/preferences-controller@23.1.0-preview-ea54cecca
@metamask-previews/profile-metrics-controller@3.1.4-preview-ea54cecca
@metamask-previews/profile-sync-controller@28.1.0-preview-ea54cecca
@metamask-previews/ramps-controller@13.3.1-preview-ea54cecca
@metamask-previews/rate-limit-controller@7.0.1-preview-ea54cecca
@metamask-previews/react-data-query@0.2.0-preview-ea54cecca
@metamask-previews/remote-feature-flag-controller@4.2.1-preview-ea54cecca
@metamask-previews/sample-controllers@5.0.1-preview-ea54cecca
@metamask-previews/seedless-onboarding-controller@9.1.0-preview-ea54cecca
@metamask-previews/selected-network-controller@26.1.3-preview-ea54cecca
@metamask-previews/shield-controller@5.1.2-preview-ea54cecca
@metamask-previews/signature-controller@39.2.2-preview-ea54cecca
@metamask-previews/snap-account-service@0.1.0-preview-ea54cecca
@metamask-previews/social-controllers@2.2.1-preview-ea54cecca
@metamask-previews/storage-service@1.0.1-preview-ea54cecca
@metamask-previews/subscription-controller@6.1.3-preview-ea54cecca
@metamask-previews/transaction-controller@65.4.0-preview-ea54cecca
@metamask-previews/transaction-pay-controller@22.4.0-preview-ea54cecca
@metamask-previews/user-operation-controller@41.2.2-preview-ea54cecca
@metamask-previews/wallet@0.0.0-preview-ea54cecca

@mcmire
Copy link
Copy Markdown
Contributor

mcmire commented May 18, 2026

@FrederikBolding

The entities initialized by the pattern are referred to as "instances", not "messenger clients".

Hmm. I wonder if "instances" sounds a bit too vague. It's true they are instances of classes, but then so are lots of other things.

For context, we discussed a unified term for controllers and services in this PR: https://github.com/MetaMask/decisions/pull/41#discussion_r1809429486. I had some ideas such as "messaging actor" (or just "actor"), but I think "messenger client" was the least worst option (and the one that Mark also agreed upon). "Messageable" was also a contender. Any of these options appeal to you?

Copy link
Copy Markdown
Contributor

@mcmire mcmire left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Going in a good direction. Here are some thoughts and comments.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have been advising teams not to add wildcard ("barrel") files. My understanding has been that it can increase the potential workflow of tools like ESLint (because it increases the number of routes these tools can take to find a file). There is an article I found (amazingly, from Atlassian) that goes into more detail here: https://www.atlassian.com/blog/atlassian-engineering/faster-builds-when-removing-barrel-files

What are your thoughts on this, is it possible to import these files directly where they are needed?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For the default configurations, we somewhat need a wildcard import:

import * as defaultConfigurations from './instances';

Unless we want to have an ever-growing list of imports here.

Though it isn't strictly required anywhere else, if that is the recommendation, I'm happy to follow.

export type InitializationConfiguration<Instance, InstanceMessenger> = {
name: InstanceName<Instance>;
init(args: InitFunctionArguments<Instance, InstanceMessenger>): Instance;
messenger(parent: RootMessenger): InstanceMessenger;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What do you think about calling this method getMessenger instead of just messenger?

Suggested change
messenger(parent: RootMessenger): InstanceMessenger;
getMessenger(parent: RootMessenger): InstanceMessenger;

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, that could make sense!

Comment thread packages/wallet/src/Wallet.ts Outdated
);
}

get messenger(): Readonly<RootMessenger<DefaultActions, DefaultEvents>> {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am uneasy about using getters because I feel like if something is a method then it should be obvious when calling it, rather than hiding it behind property syntax. Are we using a getter, however, for compatibility with controllers/services?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was thinking we would do something similar to BaseController where we create setters that throw so that the messenger, state etc aren't assigned to.

Comment thread packages/wallet/src/initialization/instances/keyring-controller.ts Outdated
Comment on lines +51 to +52
AllowedActions extends ActionConstraint = ActionConstraint,
AllowedEvents extends EventConstraint = EventConstraint,
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this need to take type parameters? It would be nice if RootMessenger could never be unconstrained. Would it make sense to default these type parameters to DefaultActions and DefaultEvents? Or maybe we don't need to have defaults at all?

Suggested change
AllowedActions extends ActionConstraint = ActionConstraint,
AllowedEvents extends EventConstraint = EventConstraint,
AllowedActions extends ActionConstraint,
AllowedEvents extends EventConstraint,

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Eventually it'll be useful to expand the types beyond the defaults, if possible. I removed the defaults for now, but they could probably be DefaultActions and DefaultEvents.

: unknown;

export type InitFunctionArguments<Instance, InstanceMessenger> = {
state: InstanceState<Instance>;
Copy link
Copy Markdown
Contributor

@mcmire mcmire May 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm. Services don't have state. So does this make sense as an argument to all init functions?

(Edit: I guess init functions for services don't need to care about this, is that the thought?)

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess init functions for services don't need to care about this, is that the thought

Essentially yes. Though we may be able to tighten the typing a bit by making InstanceState be null or something for services.

Comment on lines +8 to +12
initializationConfigurations?: InitializationConfiguration<
unknown,
unknown
>[];
instanceOptions?: InstanceSpecificOptions;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm a bit concerned that engineers will get confused on the difference between initializationConfigurations and instanceOptions.

Is it true that:

  1. initializationConfigurations configures an array of instances which are added on the default set of instances?
  2. instanceOptions configures constructors for default instances?

If so should we rename these options to something like this?

Suggested change
initializationConfigurations?: InitializationConfiguration<
unknown,
unknown
>[];
instanceOptions?: InstanceSpecificOptions;
additionalInitializationConfigurations?: InitializationConfiguration<
unknown,
unknown
>[];
optionsForDefaultInstances?: InstanceSpecificOptions;

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The idea was that you would use initializationConfigurations for either overriding any default configuration or adding a client-specific configuration. E.g. for controllers that only live in one of the clients.

The instanceOptions are for any options that cannot be standardized across clients, for example keyringBuilders, encryptor, infuraProjectId etc.

optionsForDefaultInstances isn't technically true since you could use it to pass options to a configuration specified in initializationConfigurations. Though I guess that is a bit pointless 😅

additionalInitializationConfigurations seems like confusing naming given the override behaviour mentioned above.

@FrederikBolding
Copy link
Copy Markdown
Member Author

@metamaskbot publish-previews

@FrederikBolding
Copy link
Copy Markdown
Member Author

@FrederikBolding

The entities initialized by the pattern are referred to as "instances", not "messenger clients".

Hmm. I wonder if "instances" sounds a bit too vague. It's true they are instances of classes, but then so are lots of other things.

For context, we discussed a unified term for controllers and services in this PR: MetaMask/decisions#41 (comment). I had some ideas such as "messaging actor" (or just "actor"), but I think "messenger client" was the least worst option (and the one that Mark also agreed upon). "Messageable" was also a contender. Any of these options appeal to you?

@mcmire I haven't spent much time thinking about this, when the prototyping started I don't believe we had adopted "messenger client" on the MetaMask clients yet. If that already is our decided preferred naming, I can make changes, but "messenger client" seems similarly vague and maybe even an overloaded term considering API clients, the MetaMask clients themselves (extension/mobile) etc.

@github-actions
Copy link
Copy Markdown
Contributor

Preview builds have been published. Learn how to use preview builds in other projects.

Expand for full list of packages and versions.
@metamask-previews/account-tree-controller@7.4.0-preview-48f8c56b7
@metamask-previews/accounts-controller@38.1.1-preview-48f8c56b7
@metamask-previews/address-book-controller@7.1.2-preview-48f8c56b7
@metamask-previews/ai-controllers@0.6.3-preview-48f8c56b7
@metamask-previews/analytics-controller@1.0.1-preview-48f8c56b7
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-48f8c56b7
@metamask-previews/announcement-controller@8.1.0-preview-48f8c56b7
@metamask-previews/app-metadata-controller@2.0.1-preview-48f8c56b7
@metamask-previews/approval-controller@9.0.1-preview-48f8c56b7
@metamask-previews/assets-controller@7.1.2-preview-48f8c56b7
@metamask-previews/assets-controllers@108.1.0-preview-48f8c56b7
@metamask-previews/authenticated-user-storage@1.0.1-preview-48f8c56b7
@metamask-previews/base-controller@9.1.0-preview-48f8c56b7
@metamask-previews/base-data-service@0.1.2-preview-48f8c56b7
@metamask-previews/bridge-controller@72.0.4-preview-48f8c56b7
@metamask-previews/bridge-status-controller@71.1.4-preview-48f8c56b7
@metamask-previews/build-utils@3.0.4-preview-48f8c56b7
@metamask-previews/chain-agnostic-permission@1.6.1-preview-48f8c56b7
@metamask-previews/chomp-api-service@3.1.0-preview-48f8c56b7
@metamask-previews/claims-controller@0.5.1-preview-48f8c56b7
@metamask-previews/client-controller@1.0.1-preview-48f8c56b7
@metamask-previews/compliance-controller@2.0.1-preview-48f8c56b7
@metamask-previews/composable-controller@12.0.1-preview-48f8c56b7
@metamask-previews/config-registry-controller@0.3.1-preview-48f8c56b7
@metamask-previews/connectivity-controller@0.2.0-preview-48f8c56b7
@metamask-previews/controller-utils@12.1.0-preview-48f8c56b7
@metamask-previews/core-backend@6.2.2-preview-48f8c56b7
@metamask-previews/delegation-controller@3.0.0-preview-48f8c56b7
@metamask-previews/earn-controller@12.1.2-preview-48f8c56b7
@metamask-previews/eip-5792-middleware@3.0.3-preview-48f8c56b7
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-48f8c56b7
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-48f8c56b7
@metamask-previews/ens-controller@19.1.3-preview-48f8c56b7
@metamask-previews/eth-block-tracker@15.0.1-preview-48f8c56b7
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-48f8c56b7
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-48f8c56b7
@metamask-previews/foundryup@1.0.1-preview-48f8c56b7
@metamask-previews/gas-fee-controller@26.2.1-preview-48f8c56b7
@metamask-previews/gator-permissions-controller@4.1.2-preview-48f8c56b7
@metamask-previews/geolocation-controller@0.1.3-preview-48f8c56b7
@metamask-previews/json-rpc-engine@10.5.0-preview-48f8c56b7
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-48f8c56b7
@metamask-previews/keyring-controller@25.5.0-preview-48f8c56b7
@metamask-previews/logging-controller@8.0.2-preview-48f8c56b7
@metamask-previews/message-manager@14.1.2-preview-48f8c56b7
@metamask-previews/messenger@1.2.0-preview-48f8c56b7
@metamask-previews/messenger-cli@0.2.0-preview-48f8c56b7
@metamask-previews/money-account-balance-service@1.0.2-preview-48f8c56b7
@metamask-previews/money-account-controller@0.3.0-preview-48f8c56b7
@metamask-previews/money-account-upgrade-controller@2.0.1-preview-48f8c56b7
@metamask-previews/multichain-account-service@10.0.0-preview-48f8c56b7
@metamask-previews/multichain-api-middleware@3.1.2-preview-48f8c56b7
@metamask-previews/multichain-network-controller@3.1.1-preview-48f8c56b7
@metamask-previews/multichain-transactions-controller@7.1.0-preview-48f8c56b7
@metamask-previews/name-controller@9.1.2-preview-48f8c56b7
@metamask-previews/network-controller@32.0.0-preview-48f8c56b7
@metamask-previews/network-enablement-controller@5.1.1-preview-48f8c56b7
@metamask-previews/notification-services-controller@23.1.1-preview-48f8c56b7
@metamask-previews/passkey-controller@2.0.1-preview-48f8c56b7
@metamask-previews/permission-controller@13.1.1-preview-48f8c56b7
@metamask-previews/permission-log-controller@5.1.0-preview-48f8c56b7
@metamask-previews/perps-controller@6.0.1-preview-48f8c56b7
@metamask-previews/phishing-controller@17.1.2-preview-48f8c56b7
@metamask-previews/polling-controller@16.0.5-preview-48f8c56b7
@metamask-previews/preferences-controller@23.1.0-preview-48f8c56b7
@metamask-previews/profile-metrics-controller@3.1.4-preview-48f8c56b7
@metamask-previews/profile-sync-controller@28.1.0-preview-48f8c56b7
@metamask-previews/ramps-controller@13.3.1-preview-48f8c56b7
@metamask-previews/rate-limit-controller@7.0.1-preview-48f8c56b7
@metamask-previews/react-data-query@0.2.0-preview-48f8c56b7
@metamask-previews/remote-feature-flag-controller@4.2.1-preview-48f8c56b7
@metamask-previews/sample-controllers@5.0.1-preview-48f8c56b7
@metamask-previews/seedless-onboarding-controller@9.1.0-preview-48f8c56b7
@metamask-previews/selected-network-controller@26.1.3-preview-48f8c56b7
@metamask-previews/shield-controller@5.1.2-preview-48f8c56b7
@metamask-previews/signature-controller@39.2.2-preview-48f8c56b7
@metamask-previews/snap-account-service@0.1.0-preview-48f8c56b7
@metamask-previews/social-controllers@2.2.1-preview-48f8c56b7
@metamask-previews/storage-service@1.0.1-preview-48f8c56b7
@metamask-previews/subscription-controller@6.1.3-preview-48f8c56b7
@metamask-previews/transaction-controller@65.4.0-preview-48f8c56b7
@metamask-previews/transaction-pay-controller@22.4.0-preview-48f8c56b7
@metamask-previews/user-operation-controller@41.2.2-preview-48f8c56b7
@metamask-previews/wallet@0.0.0-preview-48f8c56b7

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants