mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
Differentiate isEnabled and isApproved hook
This commit is contained in:
parent
3a2ade4e84
commit
573139b935
@ -27,9 +27,10 @@ var metamaskStream = new LocalMessageDuplexStream({
|
|||||||
|
|
||||||
// compose the inpage provider
|
// compose the inpage provider
|
||||||
var inpageProvider = new MetamaskInpageProvider(metamaskStream)
|
var inpageProvider = new MetamaskInpageProvider(metamaskStream)
|
||||||
|
|
||||||
// set a high max listener count to avoid unnecesary warnings
|
// set a high max listener count to avoid unnecesary warnings
|
||||||
inpageProvider.setMaxListeners(100)
|
inpageProvider.setMaxListeners(100)
|
||||||
var originApproved = false
|
var isEnabled = false
|
||||||
|
|
||||||
// Augment the provider with its enable method
|
// Augment the provider with its enable method
|
||||||
inpageProvider.enable = function () {
|
inpageProvider.enable = function () {
|
||||||
@ -38,11 +39,11 @@ inpageProvider.enable = function () {
|
|||||||
if (typeof detail.error !== 'undefined') {
|
if (typeof detail.error !== 'undefined') {
|
||||||
reject(detail.error)
|
reject(detail.error)
|
||||||
} else {
|
} else {
|
||||||
originApproved = true
|
|
||||||
inpageProvider.sendAsync({ method: 'eth_accounts', params: [] }, (error, response) => {
|
inpageProvider.sendAsync({ method: 'eth_accounts', params: [] }, (error, response) => {
|
||||||
if (error) {
|
if (error) {
|
||||||
reject(error)
|
reject(error)
|
||||||
} else {
|
} else {
|
||||||
|
isEnabled = true
|
||||||
resolve(response.result)
|
resolve(response.result)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -53,18 +54,26 @@ inpageProvider.enable = function () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
inpageProvider.isEnabled = function () {
|
inpageProvider.isEnabled = function () {
|
||||||
|
return isEnabled
|
||||||
|
}
|
||||||
|
|
||||||
|
inpageProvider.isApproved = function () {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
window.addEventListener('ethereumproviderstatus', ({ detail }) => {
|
window.addEventListener('ethereumproviderstatus', ({ detail }) => {
|
||||||
if (typeof detail.error !== 'undefined') {
|
if (typeof detail.error !== 'undefined') {
|
||||||
reject(detail.error)
|
reject(detail.error)
|
||||||
} else {
|
} else {
|
||||||
resolve(originApproved && !!detail.isEnabled)
|
resolve(!!detail.isEnabled)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
window.postMessage({ type: 'ETHEREUM_QUERY_STATUS' }, '*')
|
window.postMessage({ type: 'ETHEREUM_QUERY_STATUS' }, '*')
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inpageProvider.isUnlocked = function () {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// Work around for web3@1.0 deleting the bound `sendAsync` but not the unbound
|
// Work around for web3@1.0 deleting the bound `sendAsync` but not the unbound
|
||||||
// `sendAsync` method on the prototype, causing `this` reference issues with drizzle
|
// `sendAsync` method on the prototype, causing `this` reference issues with drizzle
|
||||||
const proxiedInpageProvider = new Proxy(inpageProvider, {
|
const proxiedInpageProvider = new Proxy(inpageProvider, {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user