@metamask/assets-controllers 47.0.0 → 49.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +40 -1
- package/dist/AccountTrackerController.cjs.map +1 -1
- package/dist/AccountTrackerController.d.cts +8 -3
- package/dist/AccountTrackerController.d.cts.map +1 -1
- package/dist/AccountTrackerController.d.mts +8 -3
- package/dist/AccountTrackerController.d.mts.map +1 -1
- package/dist/AccountTrackerController.mjs.map +1 -1
- package/dist/AssetsContractController.cjs +3 -3
- package/dist/AssetsContractController.cjs.map +1 -1
- package/dist/AssetsContractController.d.cts +3 -3
- package/dist/AssetsContractController.d.cts.map +1 -1
- package/dist/AssetsContractController.d.mts +3 -3
- package/dist/AssetsContractController.d.mts.map +1 -1
- package/dist/AssetsContractController.mjs +3 -3
- package/dist/AssetsContractController.mjs.map +1 -1
- package/dist/CurrencyRateController.cjs.map +1 -1
- package/dist/CurrencyRateController.d.cts +2 -2
- package/dist/CurrencyRateController.d.cts.map +1 -1
- package/dist/CurrencyRateController.d.mts +2 -2
- package/dist/CurrencyRateController.d.mts.map +1 -1
- package/dist/CurrencyRateController.mjs.map +1 -1
- package/dist/MultichainAssetsController/MultichainAssetsController.cjs +324 -0
- package/dist/MultichainAssetsController/MultichainAssetsController.cjs.map +1 -0
- package/dist/MultichainAssetsController/MultichainAssetsController.d.cts +66 -0
- package/dist/MultichainAssetsController/MultichainAssetsController.d.cts.map +1 -0
- package/dist/MultichainAssetsController/MultichainAssetsController.d.mts +66 -0
- package/dist/MultichainAssetsController/MultichainAssetsController.d.mts.map +1 -0
- package/dist/MultichainAssetsController/MultichainAssetsController.mjs +319 -0
- package/dist/MultichainAssetsController/MultichainAssetsController.mjs.map +1 -0
- package/dist/MultichainAssetsController/index.cjs +7 -0
- package/dist/MultichainAssetsController/index.cjs.map +1 -0
- package/dist/MultichainAssetsController/index.d.cts +3 -0
- package/dist/MultichainAssetsController/index.d.cts.map +1 -0
- package/dist/MultichainAssetsController/index.d.mts +3 -0
- package/dist/MultichainAssetsController/index.d.mts.map +1 -0
- package/dist/MultichainAssetsController/index.mjs +2 -0
- package/dist/MultichainAssetsController/index.mjs.map +1 -0
- package/dist/MultichainAssetsController/utils.cjs +26 -0
- package/dist/MultichainAssetsController/utils.cjs.map +1 -0
- package/dist/MultichainAssetsController/utils.d.cts +13 -0
- package/dist/MultichainAssetsController/utils.d.cts.map +1 -0
- package/dist/MultichainAssetsController/utils.d.mts +13 -0
- package/dist/MultichainAssetsController/utils.d.mts.map +1 -0
- package/dist/MultichainAssetsController/utils.mjs +22 -0
- package/dist/MultichainAssetsController/utils.mjs.map +1 -0
- package/dist/MultichainAssetsRatesController/MultichainAssetsRatesController.cjs +205 -0
- package/dist/MultichainAssetsRatesController/MultichainAssetsRatesController.cjs.map +1 -0
- package/dist/MultichainAssetsRatesController/MultichainAssetsRatesController.d.cts +124 -0
- package/dist/MultichainAssetsRatesController/MultichainAssetsRatesController.d.cts.map +1 -0
- package/dist/MultichainAssetsRatesController/MultichainAssetsRatesController.d.mts +124 -0
- package/dist/MultichainAssetsRatesController/MultichainAssetsRatesController.d.mts.map +1 -0
- package/dist/MultichainAssetsRatesController/MultichainAssetsRatesController.mjs +200 -0
- package/dist/MultichainAssetsRatesController/MultichainAssetsRatesController.mjs.map +1 -0
- package/dist/MultichainAssetsRatesController/constant.cjs +83 -0
- package/dist/MultichainAssetsRatesController/constant.cjs.map +1 -0
- package/dist/MultichainAssetsRatesController/constant.d.cts +9 -0
- package/dist/MultichainAssetsRatesController/constant.d.cts.map +1 -0
- package/dist/MultichainAssetsRatesController/constant.d.mts +9 -0
- package/dist/MultichainAssetsRatesController/constant.d.mts.map +1 -0
- package/dist/MultichainAssetsRatesController/constant.mjs +80 -0
- package/dist/MultichainAssetsRatesController/constant.mjs.map +1 -0
- package/dist/MultichainAssetsRatesController/index.cjs +7 -0
- package/dist/MultichainAssetsRatesController/index.cjs.map +1 -0
- package/dist/MultichainAssetsRatesController/index.d.cts +3 -0
- package/dist/MultichainAssetsRatesController/index.d.cts.map +1 -0
- package/dist/MultichainAssetsRatesController/index.d.mts +3 -0
- package/dist/MultichainAssetsRatesController/index.d.mts.map +1 -0
- package/dist/MultichainAssetsRatesController/index.mjs +2 -0
- package/dist/MultichainAssetsRatesController/index.mjs.map +1 -0
- package/dist/MultichainBalancesController/MultichainBalancesController.cjs +52 -78
- package/dist/MultichainBalancesController/MultichainBalancesController.cjs.map +1 -1
- package/dist/MultichainBalancesController/MultichainBalancesController.d.cts +7 -26
- package/dist/MultichainBalancesController/MultichainBalancesController.d.cts.map +1 -1
- package/dist/MultichainBalancesController/MultichainBalancesController.d.mts +7 -26
- package/dist/MultichainBalancesController/MultichainBalancesController.d.mts.map +1 -1
- package/dist/MultichainBalancesController/MultichainBalancesController.mjs +52 -78
- package/dist/MultichainBalancesController/MultichainBalancesController.mjs.map +1 -1
- package/dist/MultichainBalancesController/index.cjs +1 -8
- package/dist/MultichainBalancesController/index.cjs.map +1 -1
- package/dist/MultichainBalancesController/index.d.cts +1 -3
- package/dist/MultichainBalancesController/index.d.cts.map +1 -1
- package/dist/MultichainBalancesController/index.d.mts +1 -3
- package/dist/MultichainBalancesController/index.d.mts.map +1 -1
- package/dist/MultichainBalancesController/index.mjs +0 -2
- package/dist/MultichainBalancesController/index.mjs.map +1 -1
- package/dist/NftController.cjs +1 -1
- package/dist/NftController.cjs.map +1 -1
- package/dist/NftController.d.cts +3 -3
- package/dist/NftController.d.cts.map +1 -1
- package/dist/NftController.d.mts +3 -3
- package/dist/NftController.d.mts.map +1 -1
- package/dist/NftController.mjs +1 -1
- package/dist/NftController.mjs.map +1 -1
- package/dist/NftDetectionController.cjs.map +1 -1
- package/dist/NftDetectionController.d.cts +2 -2
- package/dist/NftDetectionController.d.cts.map +1 -1
- package/dist/NftDetectionController.d.mts +2 -2
- package/dist/NftDetectionController.d.mts.map +1 -1
- package/dist/NftDetectionController.mjs.map +1 -1
- package/dist/RatesController/types.cjs.map +1 -1
- package/dist/RatesController/types.d.cts +2 -2
- package/dist/RatesController/types.d.cts.map +1 -1
- package/dist/RatesController/types.d.mts +2 -2
- package/dist/RatesController/types.d.mts.map +1 -1
- package/dist/RatesController/types.mjs.map +1 -1
- package/dist/TokenBalancesController.cjs.map +1 -1
- package/dist/TokenBalancesController.d.cts +6 -4
- package/dist/TokenBalancesController.d.cts.map +1 -1
- package/dist/TokenBalancesController.d.mts +6 -4
- package/dist/TokenBalancesController.d.mts.map +1 -1
- package/dist/TokenBalancesController.mjs.map +1 -1
- package/dist/TokenDetectionController.cjs +1 -1
- package/dist/TokenDetectionController.cjs.map +1 -1
- package/dist/TokenDetectionController.d.cts +2 -2
- package/dist/TokenDetectionController.d.cts.map +1 -1
- package/dist/TokenDetectionController.d.mts +2 -2
- package/dist/TokenDetectionController.d.mts.map +1 -1
- package/dist/TokenDetectionController.mjs +1 -1
- package/dist/TokenDetectionController.mjs.map +1 -1
- package/dist/TokenListController.cjs +1 -1
- package/dist/TokenListController.cjs.map +1 -1
- package/dist/TokenListController.d.cts +3 -3
- package/dist/TokenListController.d.cts.map +1 -1
- package/dist/TokenListController.d.mts +3 -3
- package/dist/TokenListController.d.mts.map +1 -1
- package/dist/TokenListController.mjs +1 -1
- package/dist/TokenListController.mjs.map +1 -1
- package/dist/TokenRatesController.cjs +1 -1
- package/dist/TokenRatesController.cjs.map +1 -1
- package/dist/TokenRatesController.d.cts +3 -3
- package/dist/TokenRatesController.d.cts.map +1 -1
- package/dist/TokenRatesController.d.mts +3 -3
- package/dist/TokenRatesController.d.mts.map +1 -1
- package/dist/TokenRatesController.mjs +1 -1
- package/dist/TokenRatesController.mjs.map +1 -1
- package/dist/TokensController.cjs +9 -6
- package/dist/TokensController.cjs.map +1 -1
- package/dist/TokensController.d.cts +3 -3
- package/dist/TokensController.d.cts.map +1 -1
- package/dist/TokensController.d.mts +3 -3
- package/dist/TokensController.d.mts.map +1 -1
- package/dist/TokensController.mjs +9 -6
- package/dist/TokensController.mjs.map +1 -1
- package/dist/index.cjs +7 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +6 -2
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +6 -2
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +3 -3
- package/dist/index.mjs.map +1 -1
- package/dist/token-prices-service/codefi-v2.d.cts +1 -1
- package/dist/token-prices-service/codefi-v2.d.mts +1 -1
- package/package.json +18 -15
- package/dist/MultichainBalancesController/BalancesTracker.cjs +0 -122
- package/dist/MultichainBalancesController/BalancesTracker.cjs.map +0 -1
- package/dist/MultichainBalancesController/BalancesTracker.d.cts +0 -54
- package/dist/MultichainBalancesController/BalancesTracker.d.cts.map +0 -1
- package/dist/MultichainBalancesController/BalancesTracker.d.mts +0 -54
- package/dist/MultichainBalancesController/BalancesTracker.d.mts.map +0 -1
- package/dist/MultichainBalancesController/BalancesTracker.mjs +0 -118
- package/dist/MultichainBalancesController/BalancesTracker.mjs.map +0 -1
- package/dist/MultichainBalancesController/Poller.cjs +0 -45
- package/dist/MultichainBalancesController/Poller.cjs.map +0 -1
- package/dist/MultichainBalancesController/Poller.d.cts +0 -7
- package/dist/MultichainBalancesController/Poller.d.cts.map +0 -1
- package/dist/MultichainBalancesController/Poller.d.mts +0 -7
- package/dist/MultichainBalancesController/Poller.d.mts.map +0 -1
- package/dist/MultichainBalancesController/Poller.mjs +0 -41
- package/dist/MultichainBalancesController/Poller.mjs.map +0 -1
- package/dist/MultichainBalancesController/constants.cjs +0 -45
- package/dist/MultichainBalancesController/constants.cjs.map +0 -1
- package/dist/MultichainBalancesController/constants.d.cts +0 -29
- package/dist/MultichainBalancesController/constants.d.cts.map +0 -1
- package/dist/MultichainBalancesController/constants.d.mts +0 -29
- package/dist/MultichainBalancesController/constants.d.mts.map +0 -1
- package/dist/MultichainBalancesController/constants.mjs +0 -42
- package/dist/MultichainBalancesController/constants.mjs.map +0 -1
- package/dist/MultichainBalancesController/error.cjs +0 -18
- package/dist/MultichainBalancesController/error.cjs.map +0 -1
- package/dist/MultichainBalancesController/error.d.cts +0 -7
- package/dist/MultichainBalancesController/error.d.cts.map +0 -1
- package/dist/MultichainBalancesController/error.d.mts +0 -7
- package/dist/MultichainBalancesController/error.d.mts.map +0 -1
- package/dist/MultichainBalancesController/error.mjs +0 -13
- package/dist/MultichainBalancesController/error.mjs.map +0 -1
- package/dist/MultichainBalancesController/utils.cjs +0 -73
- package/dist/MultichainBalancesController/utils.cjs.map +0 -1
- package/dist/MultichainBalancesController/utils.d.cts +0 -36
- package/dist/MultichainBalancesController/utils.d.cts.map +0 -1
- package/dist/MultichainBalancesController/utils.d.mts +0 -36
- package/dist/MultichainBalancesController/utils.d.mts.map +0 -1
- package/dist/MultichainBalancesController/utils.mjs +0 -66
- package/dist/MultichainBalancesController/utils.mjs.map +0 -1
|
@@ -3,19 +3,11 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
3
3
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
4
4
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
5
5
|
};
|
|
6
|
-
var
|
|
7
|
-
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
8
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
9
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
10
|
-
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
11
|
-
};
|
|
12
|
-
var _MultichainBalancesController_instances, _MultichainBalancesController_tracker, _MultichainBalancesController_listMultichainAccounts, _MultichainBalancesController_listAccounts, _MultichainBalancesController_getAccount, _MultichainBalancesController_updateBalance, _MultichainBalancesController_isNonEvmAccount, _MultichainBalancesController_handleOnAccountAdded, _MultichainBalancesController_handleOnAccountRemoved, _MultichainBalancesController_getBalances, _MultichainBalancesController_getClient;
|
|
6
|
+
var _MultichainBalancesController_instances, _MultichainBalancesController_updateBalance, _MultichainBalancesController_listMultichainAccounts, _MultichainBalancesController_listAccounts, _MultichainBalancesController_listAccountAssets, _MultichainBalancesController_getAccount, _MultichainBalancesController_isNonEvmAccount, _MultichainBalancesController_handleOnAccountBalancesUpdated, _MultichainBalancesController_handleOnAccountRemoved, _MultichainBalancesController_getBalances, _MultichainBalancesController_getClient;
|
|
13
7
|
import { BaseController } from "@metamask/base-controller";
|
|
14
8
|
import { isEvmAccountType } from "@metamask/keyring-api";
|
|
15
9
|
import { KeyringClient } from "@metamask/keyring-snap-client";
|
|
16
10
|
import { HandlerType } from "@metamask/snaps-utils";
|
|
17
|
-
import { BalancesTracker, NETWORK_ASSETS_MAP } from "./index.mjs";
|
|
18
|
-
import { getScopeForAccount, getBlockTimeForAccount } from "./utils.mjs";
|
|
19
11
|
const controllerName = 'MultichainBalancesController';
|
|
20
12
|
/**
|
|
21
13
|
* Constructs the default {@link MultichainBalancesController} state. This allows
|
|
@@ -57,28 +49,22 @@ export class MultichainBalancesController extends BaseController {
|
|
|
57
49
|
},
|
|
58
50
|
});
|
|
59
51
|
_MultichainBalancesController_instances.add(this);
|
|
60
|
-
|
|
61
|
-
__classPrivateFieldSet(this, _MultichainBalancesController_tracker, new BalancesTracker(async (accountId) => await __classPrivateFieldGet(this, _MultichainBalancesController_instances, "m", _MultichainBalancesController_updateBalance).call(this, accountId)), "f");
|
|
62
|
-
// Register all non-EVM accounts into the tracker
|
|
52
|
+
// Fetch initial balances for all non-EVM accounts
|
|
63
53
|
for (const account of __classPrivateFieldGet(this, _MultichainBalancesController_instances, "m", _MultichainBalancesController_listAccounts).call(this)) {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
54
|
+
// Fetching the balance is asynchronous and we cannot use `await` here.
|
|
55
|
+
// eslint-disable-next-line no-void
|
|
56
|
+
void this.updateBalance(account.id);
|
|
67
57
|
}
|
|
68
|
-
this.messagingSystem.subscribe('AccountsController:accountAdded', (account) => __classPrivateFieldGet(this, _MultichainBalancesController_instances, "m", _MultichainBalancesController_handleOnAccountAdded).call(this, account));
|
|
69
58
|
this.messagingSystem.subscribe('AccountsController:accountRemoved', (account) => __classPrivateFieldGet(this, _MultichainBalancesController_instances, "m", _MultichainBalancesController_handleOnAccountRemoved).call(this, account));
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
*/
|
|
80
|
-
stop() {
|
|
81
|
-
__classPrivateFieldGet(this, _MultichainBalancesController_tracker, "f").stop();
|
|
59
|
+
this.messagingSystem.subscribe('AccountsController:accountBalancesUpdated', (balanceUpdate) => __classPrivateFieldGet(this, _MultichainBalancesController_instances, "m", _MultichainBalancesController_handleOnAccountBalancesUpdated).call(this, balanceUpdate));
|
|
60
|
+
// TODO: Maybe add a MultichainAssetsController:accountAssetListUpdated event instead of using the entire state.
|
|
61
|
+
// Since MultichainAssetsController already listens for the AccountsController:accountAdded, we can rely in it for that event
|
|
62
|
+
// and not listen for it also here, in this controller, since it would be redundant
|
|
63
|
+
this.messagingSystem.subscribe('MultichainAssetsController:stateChange', async (assetsState) => {
|
|
64
|
+
for (const accountId of Object.keys(assetsState.accountsAssets)) {
|
|
65
|
+
await __classPrivateFieldGet(this, _MultichainBalancesController_instances, "m", _MultichainBalancesController_updateBalance).call(this, accountId, assetsState.accountsAssets[accountId]);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
82
68
|
}
|
|
83
69
|
/**
|
|
84
70
|
* Updates the balances of one account. This method doesn't return
|
|
@@ -87,69 +73,60 @@ export class MultichainBalancesController extends BaseController {
|
|
|
87
73
|
* @param accountId - The account ID.
|
|
88
74
|
*/
|
|
89
75
|
async updateBalance(accountId) {
|
|
90
|
-
|
|
91
|
-
// the "AccountsController:accountAdded" is fired.
|
|
92
|
-
await __classPrivateFieldGet(this, _MultichainBalancesController_tracker, "f").updateBalance(accountId);
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Updates the balances of all supported accounts. This method doesn't return
|
|
96
|
-
* anything, but it updates the state of the controller.
|
|
97
|
-
*/
|
|
98
|
-
async updateBalances() {
|
|
99
|
-
await __classPrivateFieldGet(this, _MultichainBalancesController_tracker, "f").updateBalances();
|
|
76
|
+
await __classPrivateFieldGet(this, _MultichainBalancesController_instances, "m", _MultichainBalancesController_updateBalance).call(this, accountId, __classPrivateFieldGet(this, _MultichainBalancesController_instances, "m", _MultichainBalancesController_listAccountAssets).call(this, accountId));
|
|
100
77
|
}
|
|
101
78
|
}
|
|
102
|
-
|
|
79
|
+
_MultichainBalancesController_instances = new WeakSet(), _MultichainBalancesController_updateBalance =
|
|
80
|
+
/**
|
|
81
|
+
* Updates the balances of one account. This method doesn't return
|
|
82
|
+
* anything, but it updates the state of the controller.
|
|
83
|
+
*
|
|
84
|
+
* @param accountId - The account ID.
|
|
85
|
+
* @param assets - The list of asset types for this account to upadte.
|
|
86
|
+
*/
|
|
87
|
+
async function _MultichainBalancesController_updateBalance(accountId, assets) {
|
|
88
|
+
try {
|
|
89
|
+
const account = __classPrivateFieldGet(this, _MultichainBalancesController_instances, "m", _MultichainBalancesController_getAccount).call(this, accountId);
|
|
90
|
+
if (account.metadata.snap) {
|
|
91
|
+
const accountBalance = await __classPrivateFieldGet(this, _MultichainBalancesController_instances, "m", _MultichainBalancesController_getBalances).call(this, account.id, account.metadata.snap.id, assets);
|
|
92
|
+
this.update((state) => {
|
|
93
|
+
state.balances[accountId] = accountBalance;
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
// FIXME: Maybe we shouldn't catch all errors here since this method is also being
|
|
99
|
+
// used in the public methods. This means if something else uses `updateBalance` it
|
|
100
|
+
// won't be able to catch and gets the error itself...
|
|
101
|
+
console.error(`Failed to fetch balances for account ${accountId}:`, error);
|
|
102
|
+
}
|
|
103
|
+
}, _MultichainBalancesController_listMultichainAccounts = function _MultichainBalancesController_listMultichainAccounts() {
|
|
103
104
|
return this.messagingSystem.call('AccountsController:listMultichainAccounts');
|
|
104
105
|
}, _MultichainBalancesController_listAccounts = function _MultichainBalancesController_listAccounts() {
|
|
105
106
|
const accounts = __classPrivateFieldGet(this, _MultichainBalancesController_instances, "m", _MultichainBalancesController_listMultichainAccounts).call(this);
|
|
106
107
|
return accounts.filter((account) => __classPrivateFieldGet(this, _MultichainBalancesController_instances, "m", _MultichainBalancesController_isNonEvmAccount).call(this, account));
|
|
108
|
+
}, _MultichainBalancesController_listAccountAssets = function _MultichainBalancesController_listAccountAssets(accountId) {
|
|
109
|
+
// TODO: Add an action `MultichainAssetsController:getAccountAssets` maybe?
|
|
110
|
+
const assetsState = this.messagingSystem.call('MultichainAssetsController:getState');
|
|
111
|
+
return assetsState.accountsAssets[accountId] ?? [];
|
|
107
112
|
}, _MultichainBalancesController_getAccount = function _MultichainBalancesController_getAccount(accountId) {
|
|
108
113
|
const account = __classPrivateFieldGet(this, _MultichainBalancesController_instances, "m", _MultichainBalancesController_listAccounts).call(this).find((multichainAccount) => multichainAccount.id === accountId);
|
|
109
114
|
if (!account) {
|
|
110
115
|
throw new Error(`Unknown account: ${accountId}`);
|
|
111
116
|
}
|
|
112
117
|
return account;
|
|
113
|
-
}, _MultichainBalancesController_updateBalance =
|
|
114
|
-
/**
|
|
115
|
-
* Updates the balances of one account. This method doesn't return
|
|
116
|
-
* anything, but it updates the state of the controller.
|
|
117
|
-
*
|
|
118
|
-
* @param accountId - The account ID.
|
|
119
|
-
*/
|
|
120
|
-
async function _MultichainBalancesController_updateBalance(accountId) {
|
|
121
|
-
const account = __classPrivateFieldGet(this, _MultichainBalancesController_instances, "m", _MultichainBalancesController_getAccount).call(this, accountId);
|
|
122
|
-
if (account.metadata.snap) {
|
|
123
|
-
const scope = getScopeForAccount(account);
|
|
124
|
-
const assetTypes = NETWORK_ASSETS_MAP[scope];
|
|
125
|
-
const accountBalance = await __classPrivateFieldGet(this, _MultichainBalancesController_instances, "m", _MultichainBalancesController_getBalances).call(this, account.id, account.metadata.snap.id, assetTypes);
|
|
126
|
-
this.update((state) => {
|
|
127
|
-
state.balances[accountId] = accountBalance;
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
118
|
}, _MultichainBalancesController_isNonEvmAccount = function _MultichainBalancesController_isNonEvmAccount(account) {
|
|
131
119
|
return (!isEvmAccountType(account.type) &&
|
|
132
120
|
// Non-EVM accounts are backed by a Snap for now
|
|
133
121
|
account.metadata.snap !== undefined);
|
|
134
|
-
},
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
// Nothing to do here for EVM accounts
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
__classPrivateFieldGet(this, _MultichainBalancesController_tracker, "f").track(account.id, getBlockTimeForAccount(account.type));
|
|
146
|
-
// NOTE: Unfortunately, we cannot update the balance right away here, because
|
|
147
|
-
// messenger's events are running synchronously and fetching the balance is
|
|
148
|
-
// asynchronous.
|
|
149
|
-
// Updating the balance here would resume at some point but the event emitter
|
|
150
|
-
// will not `await` this (so we have no real control "when" the balance will
|
|
151
|
-
// really be updated), see:
|
|
152
|
-
// - https://github.com/MetaMask/core/blob/v213.0.0/packages/accounts-controller/src/AccountsController.ts#L1036-L1039
|
|
122
|
+
}, _MultichainBalancesController_handleOnAccountBalancesUpdated = function _MultichainBalancesController_handleOnAccountBalancesUpdated(balanceUpdate) {
|
|
123
|
+
this.update((state) => {
|
|
124
|
+
Object.entries(balanceUpdate.balances).forEach(([accountId, assetBalances]) => {
|
|
125
|
+
if (accountId in state.balances) {
|
|
126
|
+
Object.assign(state.balances[accountId], assetBalances);
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
});
|
|
153
130
|
}, _MultichainBalancesController_handleOnAccountRemoved =
|
|
154
131
|
/**
|
|
155
132
|
* Handles changes when a new account has been removed.
|
|
@@ -157,9 +134,6 @@ async function _MultichainBalancesController_handleOnAccountAdded(account) {
|
|
|
157
134
|
* @param accountId - The account ID being removed.
|
|
158
135
|
*/
|
|
159
136
|
async function _MultichainBalancesController_handleOnAccountRemoved(accountId) {
|
|
160
|
-
if (__classPrivateFieldGet(this, _MultichainBalancesController_tracker, "f").isTracked(accountId)) {
|
|
161
|
-
__classPrivateFieldGet(this, _MultichainBalancesController_tracker, "f").untrack(accountId);
|
|
162
|
-
}
|
|
163
137
|
if (accountId in this.state.balances) {
|
|
164
138
|
this.update((state) => {
|
|
165
139
|
delete state.balances[accountId];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultichainBalancesController.mjs","sourceRoot":"","sources":["../../src/MultichainBalancesController/MultichainBalancesController.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n AccountsControllerAccountAddedEvent,\n AccountsControllerAccountRemovedEvent,\n AccountsControllerListMultichainAccountsAction,\n} from '@metamask/accounts-controller';\nimport {\n BaseController,\n type ControllerGetStateAction,\n type ControllerStateChangeEvent,\n type RestrictedControllerMessenger,\n} from '@metamask/base-controller';\nimport { isEvmAccountType } from '@metamask/keyring-api';\nimport type { Balance, CaipAssetType } from '@metamask/keyring-api';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\nimport { KeyringClient } from '@metamask/keyring-snap-client';\nimport type { HandleSnapRequest } from '@metamask/snaps-controllers';\nimport type { SnapId } from '@metamask/snaps-sdk';\nimport { HandlerType } from '@metamask/snaps-utils';\nimport type { Json, JsonRpcRequest } from '@metamask/utils';\nimport type { Draft } from 'immer';\n\nimport { BalancesTracker, NETWORK_ASSETS_MAP } from '.';\nimport { getScopeForAccount, getBlockTimeForAccount } from './utils';\n\nconst controllerName = 'MultichainBalancesController';\n\n/**\n * State used by the {@link MultichainBalancesController} to cache account balances.\n */\nexport type MultichainBalancesControllerState = {\n balances: {\n [account: string]: {\n [asset: string]: {\n amount: string;\n unit: string;\n };\n };\n };\n};\n\n/**\n * Constructs the default {@link MultichainBalancesController} state. This allows\n * consumers to provide a partial state object when initializing the controller\n * and also helps in constructing complete state objects for this controller in\n * tests.\n *\n * @returns The default {@link MultichainBalancesController} state.\n */\nexport function getDefaultMultichainBalancesControllerState(): MultichainBalancesControllerState {\n return { balances: {} };\n}\n\n/**\n * Returns the state of the {@link MultichainBalancesController}.\n */\nexport type MultichainBalancesControllerGetStateAction =\n ControllerGetStateAction<\n typeof controllerName,\n MultichainBalancesControllerState\n >;\n\n/**\n * Updates the balances of all supported accounts.\n */\nexport type MultichainBalancesControllerUpdateBalancesAction = {\n type: `${typeof controllerName}:updateBalances`;\n handler: MultichainBalancesController['updateBalances'];\n};\n\n/**\n * Event emitted when the state of the {@link MultichainBalancesController} changes.\n */\nexport type MultichainBalancesControllerStateChange =\n ControllerStateChangeEvent<\n typeof controllerName,\n MultichainBalancesControllerState\n >;\n\n/**\n * Actions exposed by the {@link MultichainBalancesController}.\n */\nexport type MultichainBalancesControllerActions =\n | MultichainBalancesControllerGetStateAction\n | MultichainBalancesControllerUpdateBalancesAction;\n\n/**\n * Events emitted by {@link MultichainBalancesController}.\n */\nexport type MultichainBalancesControllerEvents =\n MultichainBalancesControllerStateChange;\n\n/**\n * Actions that this controller is allowed to call.\n */\ntype AllowedActions =\n | HandleSnapRequest\n | AccountsControllerListMultichainAccountsAction;\n\n/**\n * Events that this controller is allowed to subscribe.\n */\ntype AllowedEvents =\n | AccountsControllerAccountAddedEvent\n | AccountsControllerAccountRemovedEvent;\n\n/**\n * Messenger type for the MultichainBalancesController.\n */\nexport type MultichainBalancesControllerMessenger =\n RestrictedControllerMessenger<\n typeof controllerName,\n MultichainBalancesControllerActions | AllowedActions,\n MultichainBalancesControllerEvents | AllowedEvents,\n AllowedActions['type'],\n AllowedEvents['type']\n >;\n\n/**\n * {@link MultichainBalancesController}'s metadata.\n *\n * This allows us to choose if fields of the state should be persisted or not\n * using the `persist` flag; and if they can be sent to Sentry or not, using\n * the `anonymous` flag.\n */\nconst balancesControllerMetadata = {\n balances: {\n persist: true,\n anonymous: false,\n },\n};\n\n/**\n * The MultichainBalancesController is responsible for fetching and caching account\n * balances.\n */\nexport class MultichainBalancesController extends BaseController<\n typeof controllerName,\n MultichainBalancesControllerState,\n MultichainBalancesControllerMessenger\n> {\n #tracker: BalancesTracker;\n\n constructor({\n messenger,\n state = {},\n }: {\n messenger: MultichainBalancesControllerMessenger;\n state?: Partial<MultichainBalancesControllerState>;\n }) {\n super({\n messenger,\n name: controllerName,\n metadata: balancesControllerMetadata,\n state: {\n ...getDefaultMultichainBalancesControllerState(),\n ...state,\n },\n });\n\n this.#tracker = new BalancesTracker(\n async (accountId: string) => await this.#updateBalance(accountId),\n );\n\n // Register all non-EVM accounts into the tracker\n for (const account of this.#listAccounts()) {\n if (this.#isNonEvmAccount(account)) {\n this.#tracker.track(account.id, getBlockTimeForAccount(account.type));\n }\n }\n\n this.messagingSystem.subscribe(\n 'AccountsController:accountAdded',\n (account) => this.#handleOnAccountAdded(account),\n );\n this.messagingSystem.subscribe(\n 'AccountsController:accountRemoved',\n (account) => this.#handleOnAccountRemoved(account),\n );\n }\n\n /**\n * Starts the polling process.\n */\n start(): void {\n this.#tracker.start();\n }\n\n /**\n * Stops the polling process.\n */\n stop(): void {\n this.#tracker.stop();\n }\n\n /**\n * Updates the balances of one account. This method doesn't return\n * anything, but it updates the state of the controller.\n *\n * @param accountId - The account ID.\n */\n async updateBalance(accountId: string): Promise<void> {\n // NOTE: No need to track the account here, since we start tracking those when\n // the \"AccountsController:accountAdded\" is fired.\n await this.#tracker.updateBalance(accountId);\n }\n\n /**\n * Updates the balances of all supported accounts. This method doesn't return\n * anything, but it updates the state of the controller.\n */\n async updateBalances(): Promise<void> {\n await this.#tracker.updateBalances();\n }\n\n /**\n * Lists the multichain accounts coming from the `AccountsController`.\n *\n * @returns A list of multichain accounts.\n */\n #listMultichainAccounts(): InternalAccount[] {\n return this.messagingSystem.call(\n 'AccountsController:listMultichainAccounts',\n );\n }\n\n /**\n * Lists the accounts that we should get balances for.\n *\n * @returns A list of accounts that we should get balances for.\n */\n #listAccounts(): InternalAccount[] {\n const accounts = this.#listMultichainAccounts();\n\n return accounts.filter((account) => this.#isNonEvmAccount(account));\n }\n\n /**\n * Get a non-EVM account from its ID.\n *\n * @param accountId - The account ID.\n * @returns The non-EVM account.\n */\n #getAccount(accountId: string): InternalAccount {\n const account: InternalAccount | undefined = this.#listAccounts().find(\n (multichainAccount) => multichainAccount.id === accountId,\n );\n\n if (!account) {\n throw new Error(`Unknown account: ${accountId}`);\n }\n\n return account;\n }\n\n /**\n * Updates the balances of one account. This method doesn't return\n * anything, but it updates the state of the controller.\n *\n * @param accountId - The account ID.\n */\n\n async #updateBalance(accountId: string) {\n const account = this.#getAccount(accountId);\n\n if (account.metadata.snap) {\n const scope = getScopeForAccount(account);\n const assetTypes = NETWORK_ASSETS_MAP[scope];\n\n const accountBalance = await this.#getBalances(\n account.id,\n account.metadata.snap.id,\n assetTypes,\n );\n\n this.update((state: Draft<MultichainBalancesControllerState>) => {\n state.balances[accountId] = accountBalance;\n });\n }\n }\n\n /**\n * Checks for non-EVM accounts.\n *\n * @param account - The new account to be checked.\n * @returns True if the account is a non-EVM account, false otherwise.\n */\n #isNonEvmAccount(account: InternalAccount): boolean {\n return (\n !isEvmAccountType(account.type) &&\n // Non-EVM accounts are backed by a Snap for now\n account.metadata.snap !== undefined\n );\n }\n\n /**\n * Handles changes when a new account has been added.\n *\n * @param account - The new account being added.\n */\n async #handleOnAccountAdded(account: InternalAccount): Promise<void> {\n if (!this.#isNonEvmAccount(account)) {\n // Nothing to do here for EVM accounts\n return;\n }\n\n this.#tracker.track(account.id, getBlockTimeForAccount(account.type));\n // NOTE: Unfortunately, we cannot update the balance right away here, because\n // messenger's events are running synchronously and fetching the balance is\n // asynchronous.\n // Updating the balance here would resume at some point but the event emitter\n // will not `await` this (so we have no real control \"when\" the balance will\n // really be updated), see:\n // - https://github.com/MetaMask/core/blob/v213.0.0/packages/accounts-controller/src/AccountsController.ts#L1036-L1039\n }\n\n /**\n * Handles changes when a new account has been removed.\n *\n * @param accountId - The account ID being removed.\n */\n async #handleOnAccountRemoved(accountId: string): Promise<void> {\n if (this.#tracker.isTracked(accountId)) {\n this.#tracker.untrack(accountId);\n }\n\n if (accountId in this.state.balances) {\n this.update((state: Draft<MultichainBalancesControllerState>) => {\n delete state.balances[accountId];\n });\n }\n }\n\n /**\n * Get the balances for an account.\n *\n * @param accountId - ID of the account to get balances for.\n * @param snapId - ID of the Snap which manages the account.\n * @param assetTypes - Array of asset types to get balances for.\n * @returns A map of asset types to balances.\n */\n async #getBalances(\n accountId: string,\n snapId: string,\n assetTypes: CaipAssetType[],\n ): Promise<Record<CaipAssetType, Balance>> {\n return await this.#getClient(snapId).getAccountBalances(\n accountId,\n assetTypes,\n );\n }\n\n /**\n * Gets a `KeyringClient` for a Snap.\n *\n * @param snapId - ID of the Snap to get the client for.\n * @returns A `KeyringClient` for the Snap.\n */\n #getClient(snapId: string): KeyringClient {\n return new KeyringClient({\n send: async (request: JsonRpcRequest) =>\n (await this.messagingSystem.call('SnapController:handleRequest', {\n snapId: snapId as SnapId,\n origin: 'metamask',\n handler: HandlerType.OnKeyringRequest,\n request,\n })) as Promise<Json>,\n });\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"MultichainBalancesController.mjs","sourceRoot":"","sources":["../../src/MultichainBalancesController/MultichainBalancesController.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n AccountsControllerAccountAddedEvent,\n AccountsControllerAccountRemovedEvent,\n AccountsControllerListMultichainAccountsAction,\n AccountsControllerAccountBalancesUpdatesEvent,\n} from '@metamask/accounts-controller';\nimport {\n BaseController,\n type ControllerGetStateAction,\n type ControllerStateChangeEvent,\n type RestrictedMessenger,\n} from '@metamask/base-controller';\nimport { isEvmAccountType } from '@metamask/keyring-api';\nimport type {\n Balance,\n CaipAssetType,\n AccountBalancesUpdatedEventPayload,\n} from '@metamask/keyring-api';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\nimport { KeyringClient } from '@metamask/keyring-snap-client';\nimport type { HandleSnapRequest } from '@metamask/snaps-controllers';\nimport type { SnapId } from '@metamask/snaps-sdk';\nimport { HandlerType } from '@metamask/snaps-utils';\nimport type { Json, JsonRpcRequest } from '@metamask/utils';\nimport type { Draft } from 'immer';\n\nimport type {\n MultichainAssetsControllerGetStateAction,\n MultichainAssetsControllerState,\n MultichainAssetsControllerStateChangeEvent,\n} from '../MultichainAssetsController';\n\nconst controllerName = 'MultichainBalancesController';\n\n/**\n * State used by the {@link MultichainBalancesController} to cache account balances.\n */\nexport type MultichainBalancesControllerState = {\n balances: {\n [account: string]: {\n [asset: string]: {\n amount: string;\n unit: string;\n };\n };\n };\n};\n\n/**\n * Constructs the default {@link MultichainBalancesController} state. This allows\n * consumers to provide a partial state object when initializing the controller\n * and also helps in constructing complete state objects for this controller in\n * tests.\n *\n * @returns The default {@link MultichainBalancesController} state.\n */\nexport function getDefaultMultichainBalancesControllerState(): MultichainBalancesControllerState {\n return { balances: {} };\n}\n\n/**\n * Returns the state of the {@link MultichainBalancesController}.\n */\nexport type MultichainBalancesControllerGetStateAction =\n ControllerGetStateAction<\n typeof controllerName,\n MultichainBalancesControllerState\n >;\n\n/**\n * Event emitted when the state of the {@link MultichainBalancesController} changes.\n */\nexport type MultichainBalancesControllerStateChange =\n ControllerStateChangeEvent<\n typeof controllerName,\n MultichainBalancesControllerState\n >;\n\n/**\n * Actions exposed by the {@link MultichainBalancesController}.\n */\nexport type MultichainBalancesControllerActions =\n MultichainBalancesControllerGetStateAction;\n\n/**\n * Events emitted by {@link MultichainBalancesController}.\n */\nexport type MultichainBalancesControllerEvents =\n MultichainBalancesControllerStateChange;\n\n/**\n * Actions that this controller is allowed to call.\n */\ntype AllowedActions =\n | HandleSnapRequest\n | AccountsControllerListMultichainAccountsAction\n | MultichainAssetsControllerGetStateAction;\n\n/**\n * Events that this controller is allowed to subscribe.\n */\ntype AllowedEvents =\n | AccountsControllerAccountAddedEvent\n | AccountsControllerAccountRemovedEvent\n | AccountsControllerAccountBalancesUpdatesEvent\n | MultichainAssetsControllerStateChangeEvent;\n\n/**\n * Messenger type for the MultichainBalancesController.\n */\nexport type MultichainBalancesControllerMessenger = RestrictedMessenger<\n typeof controllerName,\n MultichainBalancesControllerActions | AllowedActions,\n MultichainBalancesControllerEvents | AllowedEvents,\n AllowedActions['type'],\n AllowedEvents['type']\n>;\n\n/**\n * {@link MultichainBalancesController}'s metadata.\n *\n * This allows us to choose if fields of the state should be persisted or not\n * using the `persist` flag; and if they can be sent to Sentry or not, using\n * the `anonymous` flag.\n */\nconst balancesControllerMetadata = {\n balances: {\n persist: true,\n anonymous: false,\n },\n};\n\n/**\n * The MultichainBalancesController is responsible for fetching and caching account\n * balances.\n */\nexport class MultichainBalancesController extends BaseController<\n typeof controllerName,\n MultichainBalancesControllerState,\n MultichainBalancesControllerMessenger\n> {\n constructor({\n messenger,\n state = {},\n }: {\n messenger: MultichainBalancesControllerMessenger;\n state?: Partial<MultichainBalancesControllerState>;\n }) {\n super({\n messenger,\n name: controllerName,\n metadata: balancesControllerMetadata,\n state: {\n ...getDefaultMultichainBalancesControllerState(),\n ...state,\n },\n });\n\n // Fetch initial balances for all non-EVM accounts\n for (const account of this.#listAccounts()) {\n // Fetching the balance is asynchronous and we cannot use `await` here.\n // eslint-disable-next-line no-void\n void this.updateBalance(account.id);\n }\n\n this.messagingSystem.subscribe(\n 'AccountsController:accountRemoved',\n (account: string) => this.#handleOnAccountRemoved(account),\n );\n this.messagingSystem.subscribe(\n 'AccountsController:accountBalancesUpdated',\n (balanceUpdate: AccountBalancesUpdatedEventPayload) =>\n this.#handleOnAccountBalancesUpdated(balanceUpdate),\n );\n // TODO: Maybe add a MultichainAssetsController:accountAssetListUpdated event instead of using the entire state.\n // Since MultichainAssetsController already listens for the AccountsController:accountAdded, we can rely in it for that event\n // and not listen for it also here, in this controller, since it would be redundant\n this.messagingSystem.subscribe(\n 'MultichainAssetsController:stateChange',\n async (assetsState: MultichainAssetsControllerState) => {\n for (const accountId of Object.keys(assetsState.accountsAssets)) {\n await this.#updateBalance(\n accountId,\n assetsState.accountsAssets[accountId],\n );\n }\n },\n );\n }\n\n /**\n * Updates the balances of one account. This method doesn't return\n * anything, but it updates the state of the controller.\n *\n * @param accountId - The account ID.\n * @param assets - The list of asset types for this account to upadte.\n */\n async #updateBalance(\n accountId: string,\n assets: CaipAssetType[],\n ): Promise<void> {\n try {\n const account = this.#getAccount(accountId);\n\n if (account.metadata.snap) {\n const accountBalance = await this.#getBalances(\n account.id,\n account.metadata.snap.id,\n assets,\n );\n\n this.update((state: Draft<MultichainBalancesControllerState>) => {\n state.balances[accountId] = accountBalance;\n });\n }\n } catch (error) {\n // FIXME: Maybe we shouldn't catch all errors here since this method is also being\n // used in the public methods. This means if something else uses `updateBalance` it\n // won't be able to catch and gets the error itself...\n console.error(\n `Failed to fetch balances for account ${accountId}:`,\n error,\n );\n }\n }\n\n /**\n * Updates the balances of one account. This method doesn't return\n * anything, but it updates the state of the controller.\n *\n * @param accountId - The account ID.\n */\n async updateBalance(accountId: string): Promise<void> {\n await this.#updateBalance(accountId, this.#listAccountAssets(accountId));\n }\n\n /**\n * Lists the multichain accounts coming from the `AccountsController`.\n *\n * @returns A list of multichain accounts.\n */\n #listMultichainAccounts(): InternalAccount[] {\n return this.messagingSystem.call(\n 'AccountsController:listMultichainAccounts',\n );\n }\n\n /**\n * Lists the accounts that we should get balances for.\n *\n * @returns A list of accounts that we should get balances for.\n */\n #listAccounts(): InternalAccount[] {\n const accounts = this.#listMultichainAccounts();\n\n return accounts.filter((account) => this.#isNonEvmAccount(account));\n }\n\n /**\n * Lists the accounts assets.\n *\n * @param accountId - The account ID.\n * @returns The list of assets for this account, returns an empty list if none.\n */\n #listAccountAssets(accountId: string): CaipAssetType[] {\n // TODO: Add an action `MultichainAssetsController:getAccountAssets` maybe?\n const assetsState = this.messagingSystem.call(\n 'MultichainAssetsController:getState',\n );\n\n return assetsState.accountsAssets[accountId] ?? [];\n }\n\n /**\n * Get a non-EVM account from its ID.\n *\n * @param accountId - The account ID.\n * @returns The non-EVM account.\n */\n #getAccount(accountId: string): InternalAccount {\n const account: InternalAccount | undefined = this.#listAccounts().find(\n (multichainAccount) => multichainAccount.id === accountId,\n );\n\n if (!account) {\n throw new Error(`Unknown account: ${accountId}`);\n }\n\n return account;\n }\n\n /**\n * Checks for non-EVM accounts.\n *\n * @param account - The new account to be checked.\n * @returns True if the account is a non-EVM account, false otherwise.\n */\n #isNonEvmAccount(account: InternalAccount): boolean {\n return (\n !isEvmAccountType(account.type) &&\n // Non-EVM accounts are backed by a Snap for now\n account.metadata.snap !== undefined\n );\n }\n\n /**\n * Handles balance updates received from the AccountsController.\n *\n * @param balanceUpdate - The balance update event containing new balances.\n */\n #handleOnAccountBalancesUpdated(\n balanceUpdate: AccountBalancesUpdatedEventPayload,\n ): void {\n this.update((state: Draft<MultichainBalancesControllerState>) => {\n Object.entries(balanceUpdate.balances).forEach(\n ([accountId, assetBalances]) => {\n if (accountId in state.balances) {\n Object.assign(state.balances[accountId], assetBalances);\n }\n },\n );\n });\n }\n\n /**\n * Handles changes when a new account has been removed.\n *\n * @param accountId - The account ID being removed.\n */\n async #handleOnAccountRemoved(accountId: string): Promise<void> {\n if (accountId in this.state.balances) {\n this.update((state: Draft<MultichainBalancesControllerState>) => {\n delete state.balances[accountId];\n });\n }\n }\n\n /**\n * Get the balances for an account.\n *\n * @param accountId - ID of the account to get balances for.\n * @param snapId - ID of the Snap which manages the account.\n * @param assetTypes - Array of asset types to get balances for.\n * @returns A map of asset types to balances.\n */\n async #getBalances(\n accountId: string,\n snapId: string,\n assetTypes: CaipAssetType[],\n ): Promise<Record<CaipAssetType, Balance>> {\n return await this.#getClient(snapId).getAccountBalances(\n accountId,\n assetTypes,\n );\n }\n\n /**\n * Gets a `KeyringClient` for a Snap.\n *\n * @param snapId - ID of the Snap to get the client for.\n * @returns A `KeyringClient` for the Snap.\n */\n #getClient(snapId: string): KeyringClient {\n return new KeyringClient({\n send: async (request: JsonRpcRequest) =>\n (await this.messagingSystem.call('SnapController:handleRequest', {\n snapId: snapId as SnapId,\n origin: 'metamask',\n handler: HandlerType.OnKeyringRequest,\n request,\n })) as Promise<Json>,\n });\n }\n}\n"]}
|
|
@@ -1,13 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
var BalancesTracker_1 = require("./BalancesTracker.cjs");
|
|
5
|
-
Object.defineProperty(exports, "BalancesTracker", { enumerable: true, get: function () { return BalancesTracker_1.BalancesTracker; } });
|
|
3
|
+
exports.MultichainBalancesController = void 0;
|
|
6
4
|
var MultichainBalancesController_1 = require("./MultichainBalancesController.cjs");
|
|
7
5
|
Object.defineProperty(exports, "MultichainBalancesController", { enumerable: true, get: function () { return MultichainBalancesController_1.MultichainBalancesController; } });
|
|
8
|
-
var constants_1 = require("./constants.cjs");
|
|
9
|
-
Object.defineProperty(exports, "BALANCE_UPDATE_INTERVALS", { enumerable: true, get: function () { return constants_1.BALANCE_UPDATE_INTERVALS; } });
|
|
10
|
-
Object.defineProperty(exports, "NETWORK_ASSETS_MAP", { enumerable: true, get: function () { return constants_1.NETWORK_ASSETS_MAP; } });
|
|
11
|
-
Object.defineProperty(exports, "MultichainNetworks", { enumerable: true, get: function () { return constants_1.MultichainNetworks; } });
|
|
12
|
-
Object.defineProperty(exports, "MultichainNativeAssets", { enumerable: true, get: function () { return constants_1.MultichainNativeAssets; } });
|
|
13
6
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../src/MultichainBalancesController/index.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../src/MultichainBalancesController/index.ts"],"names":[],"mappings":";;;AAAA,mFAA8E;AAArE,4IAAA,4BAA4B,OAAA","sourcesContent":["export { MultichainBalancesController } from './MultichainBalancesController';\nexport type {\n MultichainBalancesControllerState,\n MultichainBalancesControllerGetStateAction,\n MultichainBalancesControllerStateChange,\n MultichainBalancesControllerActions,\n MultichainBalancesControllerEvents,\n MultichainBalancesControllerMessenger,\n} from './MultichainBalancesController';\n"]}
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
export { BalancesTracker } from "./BalancesTracker.cjs";
|
|
2
1
|
export { MultichainBalancesController } from "./MultichainBalancesController.cjs";
|
|
3
|
-
export {
|
|
4
|
-
export type { MultichainBalancesControllerState, MultichainBalancesControllerGetStateAction, MultichainBalancesControllerUpdateBalancesAction, MultichainBalancesControllerStateChange, MultichainBalancesControllerActions, MultichainBalancesControllerEvents, MultichainBalancesControllerMessenger, } from "./MultichainBalancesController.cjs";
|
|
2
|
+
export type { MultichainBalancesControllerState, MultichainBalancesControllerGetStateAction, MultichainBalancesControllerStateChange, MultichainBalancesControllerActions, MultichainBalancesControllerEvents, MultichainBalancesControllerMessenger, } from "./MultichainBalancesController.cjs";
|
|
5
3
|
//# sourceMappingURL=index.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../src/MultichainBalancesController/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../src/MultichainBalancesController/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,2CAAuC;AAC9E,YAAY,EACV,iCAAiC,EACjC,0CAA0C,EAC1C,uCAAuC,EACvC,mCAAmC,EACnC,kCAAkC,EAClC,qCAAqC,GACtC,2CAAuC"}
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
export { BalancesTracker } from "./BalancesTracker.mjs";
|
|
2
1
|
export { MultichainBalancesController } from "./MultichainBalancesController.mjs";
|
|
3
|
-
export {
|
|
4
|
-
export type { MultichainBalancesControllerState, MultichainBalancesControllerGetStateAction, MultichainBalancesControllerUpdateBalancesAction, MultichainBalancesControllerStateChange, MultichainBalancesControllerActions, MultichainBalancesControllerEvents, MultichainBalancesControllerMessenger, } from "./MultichainBalancesController.mjs";
|
|
2
|
+
export type { MultichainBalancesControllerState, MultichainBalancesControllerGetStateAction, MultichainBalancesControllerStateChange, MultichainBalancesControllerActions, MultichainBalancesControllerEvents, MultichainBalancesControllerMessenger, } from "./MultichainBalancesController.mjs";
|
|
5
3
|
//# sourceMappingURL=index.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/MultichainBalancesController/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/MultichainBalancesController/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,2CAAuC;AAC9E,YAAY,EACV,iCAAiC,EACjC,0CAA0C,EAC1C,uCAAuC,EACvC,mCAAmC,EACnC,kCAAkC,EAClC,qCAAqC,GACtC,2CAAuC"}
|
|
@@ -1,4 +1,2 @@
|
|
|
1
|
-
export { BalancesTracker } from "./BalancesTracker.mjs";
|
|
2
1
|
export { MultichainBalancesController } from "./MultichainBalancesController.mjs";
|
|
3
|
-
export { BALANCE_UPDATE_INTERVALS, NETWORK_ASSETS_MAP, MultichainNetworks, MultichainNativeAssets } from "./constants.mjs";
|
|
4
2
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/MultichainBalancesController/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/MultichainBalancesController/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,2CAAuC","sourcesContent":["export { MultichainBalancesController } from './MultichainBalancesController';\nexport type {\n MultichainBalancesControllerState,\n MultichainBalancesControllerGetStateAction,\n MultichainBalancesControllerStateChange,\n MultichainBalancesControllerActions,\n MultichainBalancesControllerEvents,\n MultichainBalancesControllerMessenger,\n} from './MultichainBalancesController';\n"]}
|
package/dist/NftController.cjs
CHANGED
|
@@ -59,7 +59,7 @@ class NftController extends base_controller_1.BaseController {
|
|
|
59
59
|
* @param options.isIpfsGatewayEnabled - Controls whether IPFS is enabled or not.
|
|
60
60
|
* @param options.onNftAdded - Callback that is called when an NFT is added. Currently used pass data
|
|
61
61
|
* for tracking the NFT added event.
|
|
62
|
-
* @param options.messenger - The
|
|
62
|
+
* @param options.messenger - The messenger.
|
|
63
63
|
* @param options.state - Initial state to set on this controller.
|
|
64
64
|
*/
|
|
65
65
|
constructor({ chainId: initialChainId, ipfsGateway = controller_utils_1.IPFS_DEFAULT_GATEWAY_URL, openSeaEnabled = false, useIpfsSubdomains = true, isIpfsGatewayEnabled = true, onNftAdded, messenger, state = {}, }) {
|