-
-
Notifications
You must be signed in to change notification settings - Fork 201
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
feat: Add Multichain API to @metamask/multichain
#4813
Open
jiexi
wants to merge
202
commits into
main
Choose a base branch
from
caip-multichain-api
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+4,522
−1,041
Open
Changes from all commits
Commits
Show all changes
202 commits
Select commit
Hold shift + click to select a range
bc56104
Initial package
jiexi a4b52ad
Fix caip25Permission
jiexi 86ab58a
scopes
jiexi 186d4b3
Fix middlewares
jiexi 6a93d1d
Fix adapters except permission middleware
jiexi 231bcaa
Rename handlers js to ts
jiexi 4e52fc0
permission middleware test js ts rename
jiexi 151eaac
fix: typescript + linting (#4788)
shanejonas 85a723e
Added exports for multichain package (#4789)
shanejonas a0bb278
Add requires
jiexi 1cd8ef2
add permittedChains adapter to exports
jiexi c636def
kill scope index barrel
jiexi a6aa7c1
barrel
jiexi 42134f7
Merge branch 'main' into caip-multichain
jiexi a13b9c7
remove subjectTypes from CAIP-25 permission
jiexi 81db877
update eth accounts adapter with empty wallet and wallet:eip155 Scope…
jiexi a3fc263
fix caip25permission spec
jiexi afe5cb9
upsert empty wallet:eip155 when setting permittedChains
jiexi 9ea78be
lint
jiexi 5650d31
Rename scope.test.ts to types.test.ts
jiexi df5167e
add networkClientId type to permission-adapter-middleware
jiexi 9446b0b
fix snapshot
jiexi f65ca24
Merge branch 'main' into caip-multichain
jiexi 941849d
add KnownWalletScopeString enum
jiexi a250de2
stop upserting wallet scope in setEthAccounts()
jiexi aa7ba39
lint
jiexi 8415be6
update removeScope mutator to not revoke permission if requiredScope …
jiexi c7f510e
Fix specificationBuilder jsdoc and typing
jiexi 4afa8f8
Fix caip25permission type
jiexi 597e837
Fix caip25permission type
jiexi 1872188
small dry todo fix
adonesky1 c5d8005
another small dry
adonesky1 54f7c49
Added handler wrappers to better integrate with existing middleware (…
shanejonas ada451d
change subscriptionManager require to import
jiexi 2322e39
lint
jiexi 9b21677
Merge branch 'main' into caip-multichain
jiexi 00a41cb
Jl/caip multichain/update scope object account types (#4803)
jiexi f30dd8b
update @metamask/rpc-errors version
adonesky1 71085a0
fix merge
adonesky1 f2be8f0
Merge branch 'main' into caip-multichain
jiexi 644f4d0
Add isEqualCaseInsensitive to controller-utils
jiexi 1b78bbc
create initial multichain package
jiexi fc28c89
remove API related logic
jiexi ba25ce5
Merge branch 'initialize-caip-multichain' into caip-multichain
jiexi 4ceb118
remove api related deps
jiexi a36ec4d
Revert "remove API related logic"
jiexi 95dfbc9
Revert "remove api related deps"
jiexi 9bcf869
Fix package.json
jiexi 633485c
Merge branch 'initialize-caip-multichain' into caip-multichain
jiexi 609518a
Merge branch 'caip-multichain' into caip-multichain-api
jiexi afb2e2c
fix bad merge
jiexi 7c97afe
fix bad merge
jiexi ba210ac
Merge branch 'caip-multichain' into caip-multichain-api
jiexi 109a7bf
Update packages/controller-utils/src/util.test.ts
jiexi 1e67641
Merge branch 'controller-utils-isEqualCaseInsensitive' into initializ…
jiexi 32b213a
Merge branch 'initialize-caip-multichain' into caip-multichain
jiexi dae4f73
add account support check in validator (#4816)
jiexi b673f62
Merge branch 'caip-multichain' into caip-multichain-api
jiexi d7ed999
Merge branch 'main' into initialize-caip-multichain
jiexi b4b65e2
Merge branch 'initialize-caip-multichain' into caip-multichain
jiexi 4d752b7
Merge branch 'caip-multichain' into caip-multichain-api
jiexi fad338d
remove caip-permission-adapter-middleware
jiexi 5bf15a2
Merge branch 'caip-multichain' into caip-multichain-api
jiexi 8208931
Revert "remove caip-permission-adapter-middleware"
jiexi c5980c6
remove caip-permission-adapter-middleware from exports
jiexi 106e986
Merge branch 'caip-multichain' into caip-multichain-api
jiexi 5c6bb8f
Revert "remove caip-permission-adapter-middleware from exports"
jiexi a7a8e6e
remove types/@metamask/eth-json-rpc-filters.d.ts
jiexi 0962fb2
Merge branch 'caip-multichain' into caip-multichain-api
jiexi 54829e0
Revert "remove types/@metamask/eth-json-rpc-filters.d.ts"
jiexi 6b367f0
Merge branch 'main' into caip-multichain
adonesky1 42297f9
add back readme content
adonesky1 dc31704
Merge branch 'caip-multichain' into caip-multichain-api
jiexi 56176d1
yarn lock
jiexi 26acfcd
Merge branch 'main' into initialize-caip-multichain
jiexi 2e3bfb4
Merge branch 'initialize-caip-multichain' into caip-multichain
jiexi 89d6101
Merge remote-tracking branch 'origin/caip-multichain-api' into caip-m…
jiexi b7ea5d5
Merge branch 'caip-multichain' into caip-multichain-api
jiexi 7203358
bump network-controller dep
jiexi 046133a
add Scoped Properties to Caip25Authorization type
jiexi eea9f46
Merge branch 'main' into caip-multichain
jiexi 257618a
Merge branch 'caip-multichain' into caip-multichain-api
jiexi 67b222e
Fix ScopedProperties type
jiexi ead2f43
Merge branch 'caip-multichain' into caip-multichain-api
jiexi 009fb4a
Loosen get adapter param types (#4835)
jiexi e34032b
Merge branch 'caip-multichain' into caip-multichain-api
jiexi 0631c48
Seperate types and constants
jiexi 4685547
Merge branch 'main' into caip-multichain
jiexi 18d1112
remove jest.resetAllMocks
jiexi 1ba77c7
yarn lock
jiexi bb50a19
yarn
jiexi 7d32a0b
100% coverage
jiexi f095370
Remove accountsChanged and chainChanged from KnownNotifications (sinc…
jiexi 62929a4
Merge branch 'main' into caip-multichain
jiexi 491552f
Update packages/multichain/src/scope/transform.test.ts
jiexi bd0f50f
Merge branch 'main' into caip-multichain
jiexi 41dcc83
Merge branch 'caip-multichain' into caip-multichain-api
jiexi d80c9ce
Merge branch 'main' into caip-multichain-api
jiexi 6eb3e87
Merge branch 'main' into caip-multichain-api
jiexi 8374f37
Merge branch 'main' into caip-multichain-api
jiexi d6dfc71
Merge branch 'main' into caip-multichain-api
jiexi 0d167a3
CAIP Multichain API with permission refactor changes (#4961)
jiexi 17af395
export caipPermissionAdapterMiddleware
jiexi 62975b6
Caip multichain api normalized to internal (#4964)
jiexi 19a5983
Filter out eip1193 only methods from Eip155Methods
jiexi 439ef9b
Merge branch 'main' into caip-multichain-api
jiexi 7d61af6
export Eip1193OnlyMethods
jiexi b5d0cd7
Merge branch 'main' into caip-multichain-api
jiexi 97b4a09
Revert "export Eip1193OnlyMethods"
jiexi 6732cd9
use Eip1193OnlyMethods in adapter middleware
jiexi e03033c
expand Eip1193OnlyMethods to include meta methods
jiexi e1793ff
cleanup + add tests for MultichainSubscriptionManager
adonesky1 4c9be0e
adding tests for multichainMethodCallValidator
adonesky1 a25c05d
cleanup
adonesky1 b35bdc3
lint
adonesky1 2ad05a3
question
adonesky1 79acd26
small cleanup
adonesky1 32aa807
more cleanup
adonesky1 121ba94
remove lingering console
adonesky1 6d4bd04
this seems like a reasonable tweak (#4980)
adonesky1 3f4c297
Merge branch 'main' into caip-multichain-api
adonesky1 5a621b3
100% test coverage
adonesky1 aef155f
Merge branch 'main' into caip-multichain-api
adonesky1 944be53
Merge branch 'main' into caip-multichain-api
adonesky1 5f98801
Merge branch 'main' into caip-multichain-api
jiexi b79f827
Merge branch 'main' into caip-multichain-api
jiexi 242629d
Merge branch 'main' into caip-multichain-api
jiexi 57e6ab5
Override subscriptionManager.middleware.destroy to also remove sub en…
jiexi 0007fa5
Merge branch 'main' into caip-multichain-api
jiexi 1ec9503
stop exporting unused helpers
jiexi 02144d1
remove more unused exports
jiexi 78737cb
remove more unused exports
jiexi f8ca898
fix snapshot
jiexi e8b2487
align json-schema version
jiexi 9cfbf21
remove caip lifecycle method param types (#5031)
jiexi ca2b343
Add jsdoc
jiexi 507093e
Merge branch 'main' into caip-multichain-api
jiexi 5f96567
Jl/caip multichain api/drop unsupported methods notifications (#5039)
jiexi 40b7757
Merge branch 'main' into caip-multichain-api
jiexi 2a983d2
Merge branch 'main' into caip-multichain-api
jiexi 4542942
Merge branch 'main' into caip-multichain-api
jiexi b6765a4
Update packages/multichain/src/adapters/caip-permission-adapter-middl…
jiexi e6a3346
Update packages/multichain/src/middlewares/multichainMethodCallValida…
jiexi c0637f0
Update packages/multichain/src/handlers/wallet-getSession.test.ts
jiexi d8d90ce
Update packages/multichain/src/handlers/wallet-invokeMethod.test.ts
jiexi c102e37
Update packages/multichain/src/scope/filter.test.ts
jiexi 3d68f83
Update packages/multichain/src/adapters/caip-permission-adapter-middl…
jiexi d997b82
Update packages/multichain/src/handlers/wallet-getSession.ts
jiexi a3e9d8f
Update packages/multichain/src/handlers/wallet-invokeMethod.ts
jiexi 7f11b8a
Update packages/multichain/src/handlers/wallet-revokeSession.ts
jiexi a551ba2
Merge branch 'main' into caip-multichain-api
jiexi 6f61047
Merge remote-tracking branch 'origin/caip-multichain-api' into caip-m…
jiexi f94c4f6
Improve wallet_getSession, invokeSession, revokeSession jsdoc
jiexi d1aad26
Update packages/multichain/src/handlers/wallet-invokeMethod.ts
jiexi da3fb04
Fix walletInvokeMethodHandler type
jiexi 4a7ae5d
Update packages/multichain/src/handlers/wallet-invokeMethod.ts
jiexi c54714f
Update packages/multichain/src/middlewares/MultichainMiddlewareManage…
jiexi 840d27d
add MultichainMiddlewareManager desc
jiexi 8874ebc
add MultichainSubscriptionManager desc
jiexi c344d3d
Merge remote-tracking branch 'origin/caip-multichain-api' into caip-m…
jiexi ff57ba3
rename onNotification to notify
jiexi dc0283e
rename filter helpers
jiexi b439461
Update packages/multichain/src/middlewares/multichainMethodCallValida…
jiexi e77e87f
cleanup multichainMethodCallValidator
jiexi 5a2c8a0
Merge remote-tracking branch 'origin/caip-multichain-api' into caip-m…
jiexi 3f65e22
Add walletInvokeMethodRequest type
jiexi 1399f97
Add MultichainMiddlewareManager.test.ts to get back to 100%
jiexi 0fd56ce
fix type
jiexi bf4e136
fix types. Ignore linter prefer-spy-on
jiexi 5c79a54
Merge branch 'main' into caip-multichain-api
jiexi 7c4aa65
align package versions
jiexi 4ad37a9
fix cross-spawn
jiexi c760400
Merge branch 'main' into caip-multichain-api
jiexi 43d1dcd
hexToBigInt
jiexi 61c654a
lint
jiexi c1dd11f
add to MultichainMiddlewareManager description
adonesky1 2c085fe
Merge branch 'main' into caip-multichain-api
jiexi f550ee4
Merge remote-tracking branch 'origin/caip-multichain-api' into caip-m…
jiexi 0353672
remove getSupportedScopes
jiexi fa5b27f
improve testing of nested errors in multichainMethodCallValidator (#5…
adonesky1 cf554f8
yarn dedupe
jiexi 298fc54
Merge remote-tracking branch 'origin/caip-multichain-api' into caip-m…
jiexi d07f372
remove cross-spawn resolution
jiexi b0b350f
Merge branch 'main' into caip-multichain-api
jiexi 1c0cc44
Merge branch 'main' into caip-multichain-api
jiexi 07d969c
Replace revokePermission hook with revokePermissionForOrigin bound hook
jiexi e3def86
Merge branch 'main' into caip-multichain-api
jiexi e05b7d3
replace getCaveat with getCaveatForOrigin
jiexi 10158bd
replace getCaveat with getCaveatForOrigin (missed one)
jiexi f371565
Merge branch 'main' into caip-multichain-api
jiexi b57d706
Fix wallet-revokeSession hookNames
jiexi 6244b7b
Merge branch 'main' into caip-multichain-api
jiexi 93683d1
update thresholds
jiexi 1a87b4d
remove adapter middleware
jiexi 96f372c
Update packages/multichain/src/scope/authorization.test.ts
jiexi 8f02d61
Fix snapshot
jiexi da7aed7
Merge branch 'main' into caip-multichain-api
jiexi 0cc5cc6
Merge remote-tracking branch 'origin/caip-multichain-api' into caip-m…
jiexi 20588ef
yarn lock
jiexi e595d48
Merge branch 'main' into caip-multichain-api
jiexi a32a95b
eslint thresholds
jiexi 36449e9
fix coverage
jiexi File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
135 changes: 135 additions & 0 deletions
135
packages/multichain/src/adapters/caip-permission-adapter-session-scopes.test.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,135 @@ | ||
import { | ||
KnownNotifications, | ||
KnownRpcMethods, | ||
KnownWalletNamespaceRpcMethods, | ||
KnownWalletRpcMethods, | ||
} from '../scope/constants'; | ||
import { | ||
getInternalScopesObject, | ||
getSessionScopes, | ||
} from './caip-permission-adapter-session-scopes'; | ||
|
||
describe('CAIP-25 session scopes adapters', () => { | ||
describe('getInternalScopesObject', () => { | ||
it('returns an InternalScopesObject with only the accounts from each NormalizedScopeObject', () => { | ||
const result = getInternalScopesObject({ | ||
'wallet:eip155': { | ||
methods: ['foo', 'bar'], | ||
notifications: ['baz'], | ||
accounts: ['wallet:eip155:0xdead'], | ||
}, | ||
'eip155:1': { | ||
methods: ['eth_call'], | ||
notifications: ['eth_subscription'], | ||
accounts: ['eip155:1:0xdead', 'eip155:1:0xbeef'], | ||
}, | ||
}); | ||
|
||
expect(result).toStrictEqual({ | ||
'wallet:eip155': { | ||
accounts: ['wallet:eip155:0xdead'], | ||
}, | ||
'eip155:1': { | ||
accounts: ['eip155:1:0xdead', 'eip155:1:0xbeef'], | ||
}, | ||
}); | ||
}); | ||
}); | ||
|
||
describe('getSessionScopes', () => { | ||
it('returns a NormalizedScopesObject for the wallet scope', () => { | ||
const result = getSessionScopes({ | ||
requiredScopes: {}, | ||
optionalScopes: { | ||
wallet: { | ||
accounts: [], | ||
}, | ||
}, | ||
}); | ||
|
||
expect(result).toStrictEqual({ | ||
wallet: { | ||
methods: KnownWalletRpcMethods, | ||
notifications: [], | ||
accounts: [], | ||
}, | ||
}); | ||
}); | ||
|
||
it('returns a NormalizedScopesObject for the wallet:eip155 scope', () => { | ||
const result = getSessionScopes({ | ||
requiredScopes: {}, | ||
optionalScopes: { | ||
'wallet:eip155': { | ||
accounts: ['wallet:eip155:0xdeadbeef'], | ||
}, | ||
}, | ||
}); | ||
|
||
expect(result).toStrictEqual({ | ||
'wallet:eip155': { | ||
methods: KnownWalletNamespaceRpcMethods.eip155, | ||
notifications: [], | ||
accounts: ['wallet:eip155:0xdeadbeef'], | ||
}, | ||
}); | ||
}); | ||
|
||
it('returns a NormalizedScopesObject with empty methods and notifications for scope with wallet namespace and unknown reference', () => { | ||
const result = getSessionScopes({ | ||
requiredScopes: {}, | ||
optionalScopes: { | ||
'wallet:foobar': { | ||
accounts: ['wallet:foobar:0xdeadbeef'], | ||
}, | ||
}, | ||
}); | ||
|
||
expect(result).toStrictEqual({ | ||
'wallet:foobar': { | ||
methods: [], | ||
notifications: [], | ||
accounts: ['wallet:foobar:0xdeadbeef'], | ||
}, | ||
}); | ||
}); | ||
|
||
it('returns a NormalizedScopesObject with empty methods and notifications for scope not wallet namespace and unknown reference', () => { | ||
const result = getSessionScopes({ | ||
requiredScopes: {}, | ||
optionalScopes: { | ||
'foo:1': { | ||
accounts: ['foo:1:0xdeadbeef'], | ||
}, | ||
}, | ||
}); | ||
|
||
expect(result).toStrictEqual({ | ||
'foo:1': { | ||
methods: [], | ||
notifications: [], | ||
accounts: ['foo:1:0xdeadbeef'], | ||
}, | ||
}); | ||
}); | ||
|
||
it('returns a NormalizedScopesObject for a eip155 namespaced scope', () => { | ||
const result = getSessionScopes({ | ||
requiredScopes: {}, | ||
optionalScopes: { | ||
'eip155:1': { | ||
accounts: ['eip155:1:0xdeadbeef'], | ||
}, | ||
}, | ||
}); | ||
|
||
expect(result).toStrictEqual({ | ||
'eip155:1': { | ||
methods: KnownRpcMethods.eip155, | ||
notifications: KnownNotifications.eip155, | ||
accounts: ['eip155:1:0xdeadbeef'], | ||
}, | ||
}); | ||
}); | ||
}); | ||
}); |
101 changes: 101 additions & 0 deletions
101
packages/multichain/src/adapters/caip-permission-adapter-session-scopes.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
import { KnownCaipNamespace } from '@metamask/utils'; | ||
|
||
import type { Caip25CaveatValue } from '../caip25Permission'; | ||
import { | ||
KnownNotifications, | ||
KnownRpcMethods, | ||
KnownWalletNamespaceRpcMethods, | ||
KnownWalletRpcMethods, | ||
} from '../scope/constants'; | ||
import { mergeScopes } from '../scope/transform'; | ||
import type { | ||
InternalScopesObject, | ||
NonWalletKnownCaipNamespace, | ||
NormalizedScopesObject, | ||
} from '../scope/types'; | ||
import { parseScopeString } from '../scope/types'; | ||
|
||
/** | ||
* Converts an NormalizedScopesObject to a InternalScopesObject. | ||
* @param normalizedScopesObject - The NormalizedScopesObject to convert. | ||
* @returns An InternalScopesObject. | ||
*/ | ||
export const getInternalScopesObject = ( | ||
normalizedScopesObject: NormalizedScopesObject, | ||
) => { | ||
const internalScopes: InternalScopesObject = {}; | ||
|
||
Object.entries(normalizedScopesObject).forEach( | ||
([_scopeString, { accounts }]) => { | ||
const scopeString = _scopeString as keyof typeof normalizedScopesObject; | ||
|
||
internalScopes[scopeString] = { | ||
accounts, | ||
}; | ||
}, | ||
); | ||
|
||
return internalScopes; | ||
}; | ||
|
||
/** | ||
* Converts an InternalScopesObject to a NormalizedScopesObject. | ||
* @param internalScopesObject - The InternalScopesObject to convert. | ||
* @returns A NormalizedScopesObject. | ||
*/ | ||
const getNormalizedScopesObject = ( | ||
internalScopesObject: InternalScopesObject, | ||
) => { | ||
const normalizedScopes: NormalizedScopesObject = {}; | ||
|
||
Object.entries(internalScopesObject).forEach( | ||
([_scopeString, { accounts }]) => { | ||
const scopeString = _scopeString as keyof typeof internalScopesObject; | ||
const { namespace, reference } = parseScopeString(scopeString); | ||
let methods: string[] = []; | ||
let notifications: string[] = []; | ||
|
||
if (namespace === KnownCaipNamespace.Wallet) { | ||
if (reference) { | ||
methods = | ||
KnownWalletNamespaceRpcMethods[ | ||
reference as NonWalletKnownCaipNamespace | ||
] ?? []; | ||
} else { | ||
methods = KnownWalletRpcMethods; | ||
} | ||
} else { | ||
methods = | ||
KnownRpcMethods[namespace as NonWalletKnownCaipNamespace] ?? []; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Seems incompatible with non-EVM as well? 🤔 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. see #4813 (comment) |
||
notifications = | ||
KnownNotifications[namespace as NonWalletKnownCaipNamespace] ?? []; | ||
} | ||
|
||
normalizedScopes[scopeString] = { | ||
methods, | ||
notifications, | ||
accounts, | ||
}; | ||
}, | ||
); | ||
|
||
return normalizedScopes; | ||
}; | ||
|
||
/** | ||
* Takes the scopes from an endowment:caip25 permission caveat value, | ||
* hydrates them with supported methods and notifications, and returns a NormalizedScopesObject. | ||
* @param caip25CaveatValue - The CAIP-25 CaveatValue to convert. | ||
* @returns A NormalizedScopesObject. | ||
*/ | ||
export const getSessionScopes = ( | ||
caip25CaveatValue: Pick< | ||
Caip25CaveatValue, | ||
'requiredScopes' | 'optionalScopes' | ||
>, | ||
) => { | ||
return mergeScopes( | ||
getNormalizedScopesObject(caip25CaveatValue.requiredScopes), | ||
getNormalizedScopesObject(caip25CaveatValue.optionalScopes), | ||
); | ||
}; |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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.
Wait, so we are throwing away all of the methods etc? What is the plan then if we want to do more granular permissioning down the line, then we will require another potentially tricky migration?
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.
So we originally were including the methods in the serialized permission itself (and granularly enforcing each metho), but after discussions w/ @Gudahtt we realized that approach would