Commit 420b2e3
authored
feat: add gator permissions controller (#6033)
## 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?
-->
### @metamask/gator-permissions-controller
#### Current State and Why Change is Needed
MetaMask clients currently lack a dedicated system for managing gator
permissions that are stored to profile sync via the
`@metamask/gator-permissions-snap`.
#### Solution and How It Works
This change introduces a new `@metamask/gator-permissions-controller`
package that provides a comprehensive solution for managing gator
permissions in MetaMask clients with gator-snap integration.
#### Changes That Might Not Be Obvious
- Serialization Strategy: The controller `state` uses JSON serialization
for storing permission data fetched from
`@metamask/gator-permissions-snap`, which allows for efficient storage
and retrieval while maintaining data integrity. The deserialize
permission data is represented as a list of gator permissions filtered
by permission type and chainId.
- Default Permission Structure: The controller initializes with an empty
structure for all three permission types, ensuring consistent state even
when no permissions are configured
#### Package Dependencies and Integration
The new package depends on `@metamask/snaps-controllers` as a peer
dependency, ensuring it can leverage sending RPC requests to an
installed Metamask Snap. This integration allows the
`GatorPermissionsController` to forward requests to
`@metamask/gator-permissions-snap` to fetch users' Gator permissions
that have been stored in the MetaMask Profile Sync service.
The `@metamask/gator-permissions-snap` will take on the responsibility
of authenticating with MetaMask Profile Sync service using an`SRP`
identifier via integration with `@metamask/message-signing-snap`.
#### No Dependency Upgrades Required
This is a new package that introduces new functionality without
requiring changes to existing dependencies. The package uses the current
stable versions of `@metamask/base-controller`, `@metamask/utils
`,`@metamask/snaps-sdk`, and `@metamask/snaps-utils` following the
established patterns in the MetaMask codebase.
## 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?
Are there client or consumer pull requests to adopt any breaking
changes?
For example:
* Fixes #12345
* Related to #67890
-->
Related to(MM snap-7715-permissions): [Persisting Granted Permissions
with MM Profile
Sync](MetaMask/snap-7715-permissions#84)
Requires(MM snap-7715-permissions):[Add new
permissionsProvider_getGrantedPermissions
RPC](MetaMask/snap-7715-permissions#108)
Required by(MM Extension):
MetaMask/metamask-extension#33996
### Gator Permissions Data Flow
```mermaid
graph TD
%% dApp flow for storing permissions
A[dApp<br/>client side RPC] -->|RPC| GPS[gator-permissions-snap]
C -->|WRITE| D[(permissions stored<br/>across all sites)]
%% User flow for reading permissions
E[user<br/>permissions page] -->|UI| F[MM client]
F -->|submitRequestToBackground| G[GatorPermissionsController]
G --> MSYS[messagingSystem]
MSYS -->|handleRequest| SC[SnapController]
SC -->|RPC| GPS
C -->|READ| D
%% SRP Auth
GPS -->|OAuth 2.0 Auth| MS[message-signing-snap]
MS -->|SRP identifier & signature| C[profile sync service]
%% Styling
classDef dappStyle fill:#e1f5fe,stroke:#01579b,stroke-width:2px
classDef userStyle fill:#f3e5f5,stroke:#4a148c,stroke-width:2px
classDef serviceStyle fill:#e8f5e8,stroke:#1b5e20,stroke-width:2px
classDef dataStyle fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef authStyle fill:#ffebee,stroke:#c62828,stroke-width:2px
classDef systemStyle fill:#fce4ec,stroke:#ad1457,stroke-width:2px
class A dappStyle
class E,F userStyle
class GPS,C serviceStyle
class D dataStyle
class MS authStyle
class G,MSYS,SC systemStyle
```
## Checklist
- [x] I've updated the test suite for new or updated code as appropriate
- [x] I've updated documentation (JSDoc, Markdown, etc.) for new or
updated code as appropriate
- [x] I've communicated my changes to consumers by [updating changelogs
for packages I've
changed](https://github.com/MetaMask/core/tree/main/docs/contributing.md#updating-changelogs),
highlighting breaking changes as necessary
- [x] I've prepared draft pull requests for clients and consumer
packages to resolve any breaking changes1 parent 4ce8eff commit 420b2e3
24 files changed
Lines changed: 2368 additions & 0 deletions
File tree
- .github
- packages/gator-permissions-controller
- src
- test
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
28 | 28 | | |
29 | 29 | | |
30 | 30 | | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
31 | 34 | | |
32 | 35 | | |
33 | 36 | | |
| |||
115 | 118 | | |
116 | 119 | | |
117 | 120 | | |
| 121 | + | |
| 122 | + | |
118 | 123 | | |
119 | 124 | | |
120 | 125 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
42 | 42 | | |
43 | 43 | | |
44 | 44 | | |
| 45 | + | |
45 | 46 | | |
46 | 47 | | |
47 | 48 | | |
| |||
103 | 104 | | |
104 | 105 | | |
105 | 106 | | |
| 107 | + | |
106 | 108 | | |
107 | 109 | | |
108 | 110 | | |
| |||
201 | 203 | | |
202 | 204 | | |
203 | 205 | | |
| 206 | + | |
204 | 207 | | |
205 | 208 | | |
206 | 209 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
0 commit comments