mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
watchAsset returns result wether token was added or not
This commit is contained in:
parent
81cd29df43
commit
68c1b4c170
@ -256,7 +256,7 @@ function setupController (initState, initLangCode) {
|
||||
showUnconfirmedMessage: triggerUi,
|
||||
unlockAccountMessage: triggerUi,
|
||||
showUnapprovedTx: triggerUi,
|
||||
showAddTokenUi: triggerUi,
|
||||
showWatchAssetUi: showWatchAssetUi,
|
||||
// initial state
|
||||
initState,
|
||||
// initial locale code
|
||||
@ -444,6 +444,24 @@ function triggerUi () {
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Opens the browser popup for user confirmation of watchAsset
|
||||
* then it waits until user interact with the UI
|
||||
*/
|
||||
function showWatchAssetUi () {
|
||||
triggerUi()
|
||||
return new Promise(
|
||||
(resolve) => {
|
||||
var interval = setInterval(() => {
|
||||
if (!notificationIsOpen) {
|
||||
clearInterval(interval)
|
||||
resolve()
|
||||
}
|
||||
}, 1000)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
// On first install, open a window to MetaMask website to how-it-works.
|
||||
extension.runtime.onInstalled.addListener(function (details) {
|
||||
if ((details.reason === 'install') && (!METAMASK_DEBUG)) {
|
||||
|
@ -41,7 +41,7 @@ class PreferencesController {
|
||||
this.diagnostics = opts.diagnostics
|
||||
this.network = opts.network
|
||||
this.store = new ObservableStore(initState)
|
||||
this.showAddTokenUi = opts.showAddTokenUi
|
||||
this.showWatchAssetUi = opts.showWatchAssetUi
|
||||
this._subscribeProviderType()
|
||||
}
|
||||
// PUBLIC METHODS
|
||||
@ -82,13 +82,12 @@ class PreferencesController {
|
||||
* @param {Function} - next
|
||||
* @param {Function} - end
|
||||
*/
|
||||
requestAddToken (req, res, next, end) {
|
||||
async requestWatchAsset (req, res, next, end) {
|
||||
if (req.method === 'metamask_watchAsset') {
|
||||
const { type, options } = req.params
|
||||
switch (type) {
|
||||
case 'ERC20':
|
||||
this._handleWatchAssetERC20(options, res)
|
||||
res.result = options.address
|
||||
res.result = await this._handleWatchAssetERC20(options)
|
||||
end()
|
||||
break
|
||||
default:
|
||||
@ -521,17 +520,20 @@ class PreferencesController {
|
||||
/**
|
||||
* Handle the suggestion of an ERC20 asset through `watchAsset`
|
||||
* *
|
||||
* @param {Object} options Parameters according to addition of ERC20 token
|
||||
* @param {Boolean} assetAdded Boolean according to addition of ERC20 token
|
||||
*
|
||||
*/
|
||||
_handleWatchAssetERC20 (options) {
|
||||
async _handleWatchAssetERC20 (options) {
|
||||
// TODO handle bad parameters
|
||||
const { address, symbol, decimals, imageUrl } = options
|
||||
const rawAddress = address
|
||||
this._validateSuggestedTokenParams({ rawAddress, symbol, decimals })
|
||||
const tokenOpts = { rawAddress, decimals, symbol, imageUrl }
|
||||
this.addSuggestedToken(tokenOpts)
|
||||
this.showAddTokenUi()
|
||||
return this.showWatchAssetUi().then(() => {
|
||||
const tokenAddresses = this.getTokens().filter(token => token.address === normalizeAddress(rawAddress))
|
||||
return tokenAddresses.length > 0
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -88,7 +88,7 @@ module.exports = class MetamaskController extends EventEmitter {
|
||||
this.preferencesController = new PreferencesController({
|
||||
initState: initState.PreferencesController,
|
||||
initLangCode: opts.initLangCode,
|
||||
showAddTokenUi: opts.showAddTokenUi,
|
||||
showWatchAssetUi: opts.showWatchAssetUi,
|
||||
network: this.networkController,
|
||||
})
|
||||
|
||||
@ -1241,7 +1241,7 @@ module.exports = class MetamaskController extends EventEmitter {
|
||||
engine.push(createOriginMiddleware({ origin }))
|
||||
engine.push(createLoggerMiddleware({ origin }))
|
||||
engine.push(filterMiddleware)
|
||||
engine.push(this.preferencesController.requestAddToken.bind(this.preferencesController))
|
||||
engine.push(this.preferencesController.requestWatchAsset.bind(this.preferencesController))
|
||||
engine.push(createProviderMiddleware({ provider: this.provider }))
|
||||
|
||||
// setup connection
|
||||
|
Loading…
Reference in New Issue
Block a user