diff --git a/dist/TokensController.js b/dist/TokensController.js index 0e03b88e8a46dce73a5cc87fb432b0b2431b3797..fc8893fa6bad76d65aa34fa1bfb0b233b1259ae6 100644 --- a/dist/TokensController.js +++ b/dist/TokensController.js @@ -25,13 +25,6 @@ const base_controller_1 = require("@metamask/base-controller"); const controller_utils_1 = require("@metamask/controller-utils"); const assetsUtil_1 = require("./assetsUtil"); const token_service_1 = require("./token-service"); -var SuggestedAssetStatus; -(function (SuggestedAssetStatus) { - SuggestedAssetStatus["accepted"] = "accepted"; - SuggestedAssetStatus["failed"] = "failed"; - SuggestedAssetStatus["pending"] = "pending"; - SuggestedAssetStatus["rejected"] = "rejected"; -})(SuggestedAssetStatus || (SuggestedAssetStatus = {})); /** * The name of the {@link TokensController}. */ @@ -93,10 +86,6 @@ class TokensController extends base_controller_1.BaseController { }); }); } - failSuggestedAsset(suggestedAssetMeta, error) { - const failedSuggestedAssetMeta = Object.assign(Object.assign({}, suggestedAssetMeta), { status: SuggestedAssetStatus.failed, error }); - this.hub.emit(`${suggestedAssetMeta.id}:finished`, failedSuggestedAssetMeta); - } /** * Fetch metadata for a token. * @@ -412,9 +401,10 @@ class TokensController extends base_controller_1.BaseController { _generateRandomId() { return (0, uuid_1.v1)(); } + // THIS PATCHED METHOD HAS ALREADY BEEN RELEASED IN VERSION 8.0.0 of @metamask/assets-controllers /** - * Adds a new suggestedAsset to state. Parameters will be validated according to - * asset type being watched. A `:pending` hub event will be emitted once added. + * Adds a new suggestedAsset to the list of watched assets. + * Parameters will be validated according to the asset type being watched. * * @param asset - The asset to be watched. For now only ERC20 tokens are accepted. * @param type - The asset type. @@ -423,103 +413,22 @@ class TokensController extends base_controller_1.BaseController { */ watchAsset(asset, type, interactingAddress) { return __awaiter(this, void 0, void 0, function* () { + if (type !== controller_utils_1.ERC20) { + throw new Error(`Asset of type ${type} not supported`); + } const { selectedAddress } = this.config; const suggestedAssetMeta = { asset, id: this._generateRandomId(), - status: SuggestedAssetStatus.pending, time: Date.now(), type, interactingAddress: interactingAddress || selectedAddress, }; - try { - switch (type) { - case 'ERC20': - (0, assetsUtil_1.validateTokenToWatch)(asset); - break; - default: - throw new Error(`Asset of type ${type} not supported`); - } - } - catch (error) { - this.failSuggestedAsset(suggestedAssetMeta, error); - return Promise.reject(error); - } - const result = new Promise((resolve, reject) => { - this.hub.once(`${suggestedAssetMeta.id}:finished`, (meta) => { - switch (meta.status) { - case SuggestedAssetStatus.accepted: - return resolve(meta.asset.address); - case SuggestedAssetStatus.rejected: - return reject(new Error('User rejected to watch the asset.')); - case SuggestedAssetStatus.failed: - return reject(new Error(meta.error.message)); - /* istanbul ignore next */ - default: - return reject(new Error(`Unknown status: ${meta.status}`)); - } - }); - }); - const { suggestedAssets } = this.state; - suggestedAssets.push(suggestedAssetMeta); - this.update({ suggestedAssets: [...suggestedAssets] }); - this._requestApproval(suggestedAssetMeta); - return { result, suggestedAssetMeta }; - }); - } - /** - * Accepts to watch an asset and updates it's status and deletes the suggestedAsset from state, - * adding the asset to corresponding asset state. In this case ERC20 tokens. - * A `:finished` hub event is fired after accepted or failure. - * - * @param suggestedAssetID - The ID of the suggestedAsset to accept. - */ - acceptWatchAsset(suggestedAssetID) { - return __awaiter(this, void 0, void 0, function* () { - const { selectedAddress } = this.config; - const { suggestedAssets } = this.state; - const index = suggestedAssets.findIndex(({ id }) => suggestedAssetID === id); - const suggestedAssetMeta = suggestedAssets[index]; - try { - switch (suggestedAssetMeta.type) { - case 'ERC20': - const { address, symbol, decimals, image } = suggestedAssetMeta.asset; - yield this.addToken(address, symbol, decimals, image, (suggestedAssetMeta === null || suggestedAssetMeta === void 0 ? void 0 : suggestedAssetMeta.interactingAddress) || selectedAddress); - this._acceptApproval(suggestedAssetID); - const acceptedSuggestedAssetMeta = Object.assign(Object.assign({}, suggestedAssetMeta), { status: SuggestedAssetStatus.accepted }); - this.hub.emit(`${suggestedAssetMeta.id}:finished`, acceptedSuggestedAssetMeta); - break; - default: - throw new Error(`Asset of type ${suggestedAssetMeta.type} not supported`); - } - } - catch (error) { - this.failSuggestedAsset(suggestedAssetMeta, error); - this._rejectApproval(suggestedAssetID); - } - const newSuggestedAssets = suggestedAssets.filter(({ id }) => id !== suggestedAssetID); - this.update({ suggestedAssets: [...newSuggestedAssets] }); + (0, assetsUtil_1.validateTokenToWatch)(asset); + yield this._requestApproval(suggestedAssetMeta); + yield this.addToken(asset.address, asset.symbol, asset.decimals, asset.image, suggestedAssetMeta.interactingAddress); }); } - /** - * Rejects a watchAsset request based on its ID by setting its status to "rejected" - * and emitting a `:finished` hub event. - * - * @param suggestedAssetID - The ID of the suggestedAsset to accept. - */ - rejectWatchAsset(suggestedAssetID) { - const { suggestedAssets } = this.state; - const index = suggestedAssets.findIndex(({ id }) => suggestedAssetID === id); - const suggestedAssetMeta = suggestedAssets[index]; - if (!suggestedAssetMeta) { - return; - } - const rejectedSuggestedAssetMeta = Object.assign(Object.assign({}, suggestedAssetMeta), { status: SuggestedAssetStatus.rejected }); - this.hub.emit(`${suggestedAssetMeta.id}:finished`, rejectedSuggestedAssetMeta); - const newSuggestedAssets = suggestedAssets.filter(({ id }) => id !== suggestedAssetID); - this.update({ suggestedAssets: [...newSuggestedAssets] }); - this._rejectApproval(suggestedAssetID); - } /** * Takes a new tokens and ignoredTokens array for the current network/account combination * and returns new allTokens and allIgnoredTokens state to update to. @@ -576,43 +485,26 @@ class TokensController extends base_controller_1.BaseController { clearIgnoredTokens() { this.update({ ignoredTokens: [], allIgnoredTokens: {} }); } + // THIS PATCHED METHOD HAS ALREADY BEEN RELEASED IN VERSION 8.0.0 of @metamask/assets-controllers _requestApproval(suggestedAssetMeta) { - this.messagingSystem - .call('ApprovalController:addRequest', { - id: suggestedAssetMeta.id, - origin: controller_utils_1.ORIGIN_METAMASK, - type: controller_utils_1.ApprovalType.WatchAsset, - requestData: { + return __awaiter(this, void 0, void 0, function* () { + return this.messagingSystem.call('ApprovalController:addRequest', { id: suggestedAssetMeta.id, - interactingAddress: suggestedAssetMeta.interactingAddress, - asset: { - address: suggestedAssetMeta.asset.address, - decimals: suggestedAssetMeta.asset.decimals, - symbol: suggestedAssetMeta.asset.symbol, - image: suggestedAssetMeta.asset.image || null, + origin: controller_utils_1.ORIGIN_METAMASK, + type: controller_utils_1.ApprovalType.WatchAsset, + requestData: { + id: suggestedAssetMeta.id, + interactingAddress: suggestedAssetMeta.interactingAddress, + asset: { + address: suggestedAssetMeta.asset.address, + decimals: suggestedAssetMeta.asset.decimals, + symbol: suggestedAssetMeta.asset.symbol, + image: suggestedAssetMeta.asset.image || null, + }, }, - }, - }, true) - .catch(() => { - // Intentionally ignored as promise not currently used + }, true); }); } - _acceptApproval(approvalRequestId) { - try { - this.messagingSystem.call('ApprovalController:acceptRequest', approvalRequestId); - } - catch (error) { - console.error('Failed to accept token watch approval request', error); - } - } - _rejectApproval(approvalRequestId) { - try { - this.messagingSystem.call('ApprovalController:rejectRequest', approvalRequestId, new Error('Rejected')); - } - catch (messageCallError) { - console.error('Failed to reject token watch approval request', messageCallError); - } - } } exports.TokensController = TokensController; exports.default = TokensController;