Skip to content

feat: Allow overriding action handler in subclass#8617

Merged
Mrtenz merged 5 commits intomainfrom
mrtenz/messenger-get-action
Apr 29, 2026
Merged

feat: Allow overriding action handler in subclass#8617
Mrtenz merged 5 commits intomainfrom
mrtenz/messenger-get-action

Conversation

@Mrtenz
Copy link
Copy Markdown
Member

@Mrtenz Mrtenz commented Apr 28, 2026

Explanation

This adds a new protected getAction method to the Messenger class which returns the actual handler implementation function. In most cases this is simply the handler registered in the #actions property (i.e., through registerActionHandler).

I ran into the problem when implementing the UI messenger that no actions were registered on the UI messenger itself (since it's just a wrapper around a connection to the client background), meaning delegation does not work, and had to call the internal _internalRegisterDelegatedActionHandler method to make the UI and route messengers work. Making the getAction method overridable enables much cleaner delegation in the UI messenger. See this diff for a comparison: MetaMask/metamask-extension@3610b3b.

References

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

Note

Cursor Bugbot is generating a summary for commit 5fd10d1. Configure here.

@Mrtenz
Copy link
Copy Markdown
Member Author

Mrtenz commented Apr 28, 2026

@metamaskbot publish-preview

@Mrtenz
Copy link
Copy Markdown
Member Author

Mrtenz commented Apr 28, 2026

@metamaskbot publish-preview

@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.1.0-preview-127dac8
@metamask-previews/accounts-controller@37.2.0-preview-127dac8
@metamask-previews/address-book-controller@7.1.1-preview-127dac8
@metamask-previews/ai-controllers@0.6.3-preview-127dac8
@metamask-previews/analytics-controller@1.0.1-preview-127dac8
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-127dac8
@metamask-previews/announcement-controller@8.1.0-preview-127dac8
@metamask-previews/app-metadata-controller@2.0.1-preview-127dac8
@metamask-previews/approval-controller@9.0.1-preview-127dac8
@metamask-previews/assets-controller@6.2.0-preview-127dac8
@metamask-previews/assets-controllers@104.3.0-preview-127dac8
@metamask-previews/authenticated-user-storage@1.0.0-preview-127dac8
@metamask-previews/base-controller@9.1.0-preview-127dac8
@metamask-previews/base-data-service@0.1.1-preview-127dac8
@metamask-previews/bridge-controller@70.2.0-preview-127dac8
@metamask-previews/bridge-status-controller@71.0.0-preview-127dac8
@metamask-previews/build-utils@3.0.4-preview-127dac8
@metamask-previews/chain-agnostic-permission@1.5.0-preview-127dac8
@metamask-previews/chomp-api-service@1.0.0-preview-127dac8
@metamask-previews/claims-controller@0.5.0-preview-127dac8
@metamask-previews/client-controller@1.0.1-preview-127dac8
@metamask-previews/compliance-controller@2.0.0-preview-127dac8
@metamask-previews/composable-controller@12.0.1-preview-127dac8
@metamask-previews/config-registry-controller@0.2.0-preview-127dac8
@metamask-previews/connectivity-controller@0.2.0-preview-127dac8
@metamask-previews/controller-utils@11.20.0-preview-127dac8
@metamask-previews/core-backend@6.2.1-preview-127dac8
@metamask-previews/delegation-controller@3.0.0-preview-127dac8
@metamask-previews/earn-controller@12.0.0-preview-127dac8
@metamask-previews/eip-5792-middleware@3.0.3-preview-127dac8
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.0-preview-127dac8
@metamask-previews/eip1193-permission-middleware@1.0.3-preview-127dac8
@metamask-previews/ens-controller@19.1.1-preview-127dac8
@metamask-previews/eth-block-tracker@15.0.1-preview-127dac8
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-127dac8
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-127dac8
@metamask-previews/foundryup@1.0.1-preview-127dac8
@metamask-previews/gas-fee-controller@26.1.1-preview-127dac8
@metamask-previews/gator-permissions-controller@4.0.0-preview-127dac8
@metamask-previews/geolocation-controller@0.1.2-preview-127dac8
@metamask-previews/json-rpc-engine@10.2.4-preview-127dac8
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-127dac8
@metamask-previews/keyring-controller@25.2.0-preview-127dac8
@metamask-previews/logging-controller@8.0.1-preview-127dac8
@metamask-previews/message-manager@14.1.1-preview-127dac8
@metamask-previews/messenger@1.1.1-preview-127dac8
@metamask-previews/messenger-cli@0.2.0-preview-127dac8
@metamask-previews/money-account-balance-service@0.2.0-preview-127dac8
@metamask-previews/money-account-controller@0.1.0-preview-127dac8
@metamask-previews/money-account-upgrade-controller@1.1.0-preview-127dac8
@metamask-previews/multichain-account-service@8.0.1-preview-127dac8
@metamask-previews/multichain-api-middleware@2.0.0-preview-127dac8
@metamask-previews/multichain-network-controller@3.0.6-preview-127dac8
@metamask-previews/multichain-transactions-controller@7.0.4-preview-127dac8
@metamask-previews/name-controller@9.1.1-preview-127dac8
@metamask-previews/network-controller@30.0.1-preview-127dac8
@metamask-previews/network-enablement-controller@5.0.2-preview-127dac8
@metamask-previews/notification-services-controller@23.1.0-preview-127dac8
@metamask-previews/passkey-controller@1.0.0-preview-127dac8
@metamask-previews/permission-controller@12.3.0-preview-127dac8
@metamask-previews/permission-log-controller@5.1.0-preview-127dac8
@metamask-previews/perps-controller@4.0.0-preview-127dac8
@metamask-previews/phishing-controller@17.1.1-preview-127dac8
@metamask-previews/polling-controller@16.0.4-preview-127dac8
@metamask-previews/preferences-controller@23.1.0-preview-127dac8
@metamask-previews/profile-metrics-controller@3.1.3-preview-127dac8
@metamask-previews/profile-sync-controller@28.0.2-preview-127dac8
@metamask-previews/ramps-controller@13.2.0-preview-127dac8
@metamask-previews/rate-limit-controller@7.0.1-preview-127dac8
@metamask-previews/react-data-query@0.2.0-preview-127dac8
@metamask-previews/remote-feature-flag-controller@4.2.0-preview-127dac8
@metamask-previews/sample-controllers@4.0.4-preview-127dac8
@metamask-previews/seedless-onboarding-controller@9.1.0-preview-127dac8
@metamask-previews/selected-network-controller@26.1.0-preview-127dac8
@metamask-previews/shield-controller@5.1.1-preview-127dac8
@metamask-previews/signature-controller@39.2.0-preview-127dac8
@metamask-previews/social-controllers@2.2.0-preview-127dac8
@metamask-previews/storage-service@1.0.1-preview-127dac8
@metamask-previews/subscription-controller@6.1.2-preview-127dac8
@metamask-previews/transaction-controller@65.0.0-preview-127dac8
@metamask-previews/transaction-pay-controller@20.0.0-preview-127dac8
@metamask-previews/user-operation-controller@41.2.0-preview-127dac8

@Mrtenz
Copy link
Copy Markdown
Member Author

Mrtenz commented Apr 28, 2026

@metamaskbot publish-preview

@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.1.0-preview-427372d
@metamask-previews/accounts-controller@37.2.0-preview-427372d
@metamask-previews/address-book-controller@7.1.1-preview-427372d
@metamask-previews/ai-controllers@0.6.3-preview-427372d
@metamask-previews/analytics-controller@1.0.1-preview-427372d
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-427372d
@metamask-previews/announcement-controller@8.1.0-preview-427372d
@metamask-previews/app-metadata-controller@2.0.1-preview-427372d
@metamask-previews/approval-controller@9.0.1-preview-427372d
@metamask-previews/assets-controller@6.2.0-preview-427372d
@metamask-previews/assets-controllers@104.3.0-preview-427372d
@metamask-previews/authenticated-user-storage@1.0.0-preview-427372d
@metamask-previews/base-controller@9.1.0-preview-427372d
@metamask-previews/base-data-service@0.1.1-preview-427372d
@metamask-previews/bridge-controller@70.2.0-preview-427372d
@metamask-previews/bridge-status-controller@71.0.0-preview-427372d
@metamask-previews/build-utils@3.0.4-preview-427372d
@metamask-previews/chain-agnostic-permission@1.5.0-preview-427372d
@metamask-previews/chomp-api-service@1.0.0-preview-427372d
@metamask-previews/claims-controller@0.5.0-preview-427372d
@metamask-previews/client-controller@1.0.1-preview-427372d
@metamask-previews/compliance-controller@2.0.0-preview-427372d
@metamask-previews/composable-controller@12.0.1-preview-427372d
@metamask-previews/config-registry-controller@0.2.0-preview-427372d
@metamask-previews/connectivity-controller@0.2.0-preview-427372d
@metamask-previews/controller-utils@11.20.0-preview-427372d
@metamask-previews/core-backend@6.2.1-preview-427372d
@metamask-previews/delegation-controller@3.0.0-preview-427372d
@metamask-previews/earn-controller@12.0.0-preview-427372d
@metamask-previews/eip-5792-middleware@3.0.3-preview-427372d
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.0-preview-427372d
@metamask-previews/eip1193-permission-middleware@1.0.3-preview-427372d
@metamask-previews/ens-controller@19.1.1-preview-427372d
@metamask-previews/eth-block-tracker@15.0.1-preview-427372d
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-427372d
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-427372d
@metamask-previews/foundryup@1.0.1-preview-427372d
@metamask-previews/gas-fee-controller@26.1.1-preview-427372d
@metamask-previews/gator-permissions-controller@4.0.0-preview-427372d
@metamask-previews/geolocation-controller@0.1.2-preview-427372d
@metamask-previews/json-rpc-engine@10.2.4-preview-427372d
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-427372d
@metamask-previews/keyring-controller@25.2.0-preview-427372d
@metamask-previews/logging-controller@8.0.1-preview-427372d
@metamask-previews/message-manager@14.1.1-preview-427372d
@metamask-previews/messenger@1.1.1-preview-427372d
@metamask-previews/messenger-cli@0.2.0-preview-427372d
@metamask-previews/money-account-balance-service@0.2.0-preview-427372d
@metamask-previews/money-account-controller@0.1.0-preview-427372d
@metamask-previews/money-account-upgrade-controller@1.1.0-preview-427372d
@metamask-previews/multichain-account-service@8.0.1-preview-427372d
@metamask-previews/multichain-api-middleware@2.0.0-preview-427372d
@metamask-previews/multichain-network-controller@3.0.6-preview-427372d
@metamask-previews/multichain-transactions-controller@7.0.4-preview-427372d
@metamask-previews/name-controller@9.1.1-preview-427372d
@metamask-previews/network-controller@30.0.1-preview-427372d
@metamask-previews/network-enablement-controller@5.0.2-preview-427372d
@metamask-previews/notification-services-controller@23.1.0-preview-427372d
@metamask-previews/passkey-controller@1.0.0-preview-427372d
@metamask-previews/permission-controller@12.3.0-preview-427372d
@metamask-previews/permission-log-controller@5.1.0-preview-427372d
@metamask-previews/perps-controller@4.0.0-preview-427372d
@metamask-previews/phishing-controller@17.1.1-preview-427372d
@metamask-previews/polling-controller@16.0.4-preview-427372d
@metamask-previews/preferences-controller@23.1.0-preview-427372d
@metamask-previews/profile-metrics-controller@3.1.3-preview-427372d
@metamask-previews/profile-sync-controller@28.0.2-preview-427372d
@metamask-previews/ramps-controller@13.2.0-preview-427372d
@metamask-previews/rate-limit-controller@7.0.1-preview-427372d
@metamask-previews/react-data-query@0.2.0-preview-427372d
@metamask-previews/remote-feature-flag-controller@4.2.0-preview-427372d
@metamask-previews/sample-controllers@4.0.4-preview-427372d
@metamask-previews/seedless-onboarding-controller@9.1.0-preview-427372d
@metamask-previews/selected-network-controller@26.1.0-preview-427372d
@metamask-previews/shield-controller@5.1.1-preview-427372d
@metamask-previews/signature-controller@39.2.0-preview-427372d
@metamask-previews/social-controllers@2.2.0-preview-427372d
@metamask-previews/storage-service@1.0.1-preview-427372d
@metamask-previews/subscription-controller@6.1.2-preview-427372d
@metamask-previews/transaction-controller@65.0.0-preview-427372d
@metamask-previews/transaction-pay-controller@20.0.0-preview-427372d
@metamask-previews/user-operation-controller@41.2.0-preview-427372d

@Mrtenz Mrtenz marked this pull request as ready for review April 29, 2026 08:46
@Mrtenz Mrtenz requested a review from a team as a code owner April 29, 2026 08:46
@Mrtenz Mrtenz added this pull request to the merge queue Apr 29, 2026
Merged via the queue into main with commit c6711ba Apr 29, 2026
366 checks passed
@Mrtenz Mrtenz deleted the mrtenz/messenger-get-action branch April 29, 2026 10:15
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