-
-
Notifications
You must be signed in to change notification settings - Fork 200
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
QueuedRequestController: Fix list of methods that should have requests enqueued and/or switch the globally selected network #4066
Conversation
* network for the dapp. It could also be that a method expects the | ||
* globally selected network to match some value in the request params itself. | ||
*/ | ||
export const methodsRequiringNetworkSwitch = [ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Rather than describing these here as constants, perhaps we should accept them as controller or middleware options? The current set of supported methods, and whether each one has a confirmation or not, may differ between platforms. Listing this at the platform layer should let us reuse this list for other functionality as well, and it would perhaps make it less likely we'd forget to update this list after adding a new confirmation.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This would also let us ship it as a non-breaking change, as we could use the existing list as a fallback
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Great work! Looks right to me!
## Explanation <!-- Thanks for your contribution! Take a moment to answer these questions so that reviewers have the information they need to properly understand your changes: * What is the current state of things and why does it need to change? * What is the solution your changes offer and how does it work? * Are there any changes whose purpose might not obvious to those unfamiliar with the domain? * If your primary goal was to update one package but you found you had to update another one along the way, why did you do so? * If you had to upgrade a dependency, why did you do so? --> ## References <!-- Are there any issues that this pull request is tied to? Are there other links that reviewers should consult to understand these changes better? For example: * Fixes #12345 * Related to #67890 --> ## Changelog <!-- If you're making any consumer-facing changes, list those changes here as if you were updating a changelog, using the template below as a guide. (CATEGORY is one of BREAKING, ADDED, CHANGED, DEPRECATED, REMOVED, or FIXED. For security-related issues, follow the Security Advisory process.) Please take care to name the exact pieces of the API you've added or changed (e.g. types, interfaces, functions, or methods). If there are any breaking changes, make sure to offer a solution for consumers to follow once they upgrade to the changes. Finally, if you're only making changes to development scripts or tests, you may replace the template below with "None". --> ### `@metamask/queued-request-controller` - **BREAKING**: The `QueuedRequestMiddleware` constructor now requires the `methodsWithConfirmation` param which should be a list of methods that can trigger confirmations ([#4066](#4066)) - **BREAKING**: The `QueuedRequestController` constructor now requires the `methodsRequiringNetworkSwitch` param which should be a list of methods that need the globally selected network to switched to the dapp selected network before being processed ([#4066](#4066)) - **BREAKING**: Clear pending confirmations (non-queued requests) after processing revokePermissions. ([#4165](#4165)) - **BREAKING**: Flush the RequestQueue after processing revokePermissions. ([#4139](#4139)) ## 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 highlighted breaking changes using the "BREAKING" category above as appropriate --------- Co-authored-by: jiexi <[email protected]>
Explanation
Previously we were not properly enqueuing requests that could trigger a confirmation notification as well as not switching networks for methods that either require it or would exhibit unexpected UI/UX without doing so beforehand. This PR improves the specificity of which methods should be handled differently in the queued request flow which covers many methods not previously handled correctly.
References
See: MetaMask/metamask-extension#22865 (comment)
Changelog
@metamask/queued-request-controller
Added
QueuedRequestMiddleware
constructor now requires themethodsWithConfirmation
param which should be a list of methods that can trigger confirmations (#4066)QueuedRequestController
constructor now requires themethodsRequiringNetworkSwitch
param which should be a list of methods that need the globally selected network to switched to the dapp selected network before being processed (#4066)Changed
QueuedRequestController.enqueueRequest()
now ensures the globally selected network matches the dapp selected network before processing methods listed in themethodsRequiringNetworkSwitch
constructor param. This replaces the previous behavior of switching for all methods excepteth_requestAccounts
. (#4066)Checklist