|
|
|
|
|
|
|
import { createSelector } from 'reselect'
|
|
|
|
import {
|
|
|
|
CAVEAT_NAMES,
|
|
|
|
} from '../../../app/scripts/controllers/permissions/enums'
|
|
|
|
|
|
|
|
const permissionsSelector = (state, origin) => {
|
|
|
|
return origin && state.metamask.domains && state.metamask.domains[origin]
|
|
|
|
}
|
|
|
|
|
|
|
|
// all permissions for the origin probably too expensive for deep equality check
|
|
|
|
const accountsPermissionSelector = createSelector(
|
|
|
|
permissionsSelector,
|
|
|
|
(domain = {}) => {
|
|
|
|
|
|
|
|
return (
|
|
|
|
Array.isArray(domain.permissions)
|
|
|
|
? domain.permissions.find(
|
|
|
|
(perm) => perm.parentCapability === 'eth_accounts'
|
|
|
|
)
|
|
|
|
: {}
|
|
|
|
)
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Selects the permitted accounts from an eth_accounts permission.
|
|
|
|
* Expects input from accountsPermissionsSelector.
|
|
|
|
* @returns - An empty array or an array of accounts.
|
|
|
|
*/
|
|
|
|
export const getPermittedAccounts = createSelector(
|
|
|
|
accountsPermissionSelector, // deep equal check performed on this output
|
|
|
|
(accountsPermission = {}) => {
|
|
|
|
|
|
|
|
const accountsCaveat = (
|
|
|
|
Array.isArray(accountsPermission.caveats) &&
|
|
|
|
accountsPermission.caveats.find(
|
|
|
|
(c) => c.name === CAVEAT_NAMES.exposedAccounts
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
return (
|
|
|
|
accountsCaveat && Array.isArray(accountsCaveat.value)
|
|
|
|
? accountsCaveat.value
|
|
|
|
: []
|
|
|
|
)
|
|
|
|
}
|
|
|
|
)
|