@metamask/assets-controllers 32.0.0 → 34.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 +95 -1
- package/dist/AccountTrackerController.js +2 -2
- package/dist/AccountTrackerController.mjs +1 -1
- package/dist/AssetsContractController.js +6 -6
- package/dist/AssetsContractController.mjs +5 -5
- package/dist/CurrencyRateController.js +3 -3
- package/dist/CurrencyRateController.mjs +2 -2
- package/dist/NftController.js +3 -3
- package/dist/NftController.mjs +2 -2
- package/dist/NftDetectionController.js +2 -2
- package/dist/NftDetectionController.mjs +1 -1
- package/dist/RatesController/RatesController.js +3 -3
- package/dist/RatesController/RatesController.mjs +2 -2
- package/dist/RatesController/index.js +3 -3
- package/dist/RatesController/index.mjs +2 -2
- package/dist/Standards/ERC20Standard.js +3 -3
- package/dist/Standards/ERC20Standard.mjs +2 -2
- package/dist/Standards/NftStandards/ERC1155/ERC1155Standard.js +3 -3
- package/dist/Standards/NftStandards/ERC1155/ERC1155Standard.mjs +2 -2
- package/dist/Standards/NftStandards/ERC721/ERC721Standard.js +3 -3
- package/dist/Standards/NftStandards/ERC721/ERC721Standard.mjs +2 -2
- package/dist/TokenBalancesController.js +2 -2
- package/dist/TokenBalancesController.mjs +1 -1
- package/dist/TokenDetectionController.js +3 -3
- package/dist/TokenDetectionController.mjs +2 -2
- package/dist/TokenListController.js +4 -4
- package/dist/TokenListController.mjs +3 -3
- package/dist/TokenRatesController.js +9 -5
- package/dist/TokenRatesController.mjs +10 -6
- package/dist/TokensController.js +6 -6
- package/dist/TokensController.mjs +5 -5
- package/dist/assetsUtil.js +2 -2
- package/dist/assetsUtil.mjs +1 -1
- package/dist/chunk-2IIQTSLV.mjs +236 -0
- package/dist/chunk-2IIQTSLV.mjs.map +1 -0
- package/dist/{chunk-4AC3X2U5.js → chunk-2NQRWANM.js} +85 -43
- package/dist/chunk-2NQRWANM.js.map +1 -0
- package/dist/{chunk-MR6EF4B7.mjs → chunk-2TSAUGE7.mjs} +43 -20
- package/dist/chunk-2TSAUGE7.mjs.map +1 -0
- package/dist/chunk-354SINOH.js +236 -0
- package/dist/chunk-354SINOH.js.map +1 -0
- package/dist/{chunk-5W5OO2Q5.mjs → chunk-47CRHAUE.mjs} +2 -2
- package/dist/chunk-47CRHAUE.mjs.map +1 -0
- package/dist/{chunk-73F3SN5O.mjs → chunk-4JLB5OIJ.mjs} +79 -37
- package/dist/chunk-4JLB5OIJ.mjs.map +1 -0
- package/dist/{chunk-D3K5MPMW.mjs → chunk-56O7BVZV.mjs} +2 -2
- package/dist/{chunk-B5YY22QQ.js → chunk-6PPM4ETZ.js} +3 -3
- package/dist/{chunk-WCCLSUOI.mjs → chunk-6VQJFTNC.mjs} +4 -4
- package/dist/chunk-6VQJFTNC.mjs.map +1 -0
- package/dist/{chunk-CGLUTXI7.js → chunk-7JWDWDXT.js} +190 -107
- package/dist/chunk-7JWDWDXT.js.map +1 -0
- package/dist/{chunk-JUI3XNEF.js → chunk-7OZL6IDY.js} +16 -9
- package/dist/chunk-7OZL6IDY.js.map +1 -0
- package/dist/{chunk-YIFA2HXH.js → chunk-F6L3DFOZ.js} +5 -3
- package/dist/chunk-F6L3DFOZ.js.map +1 -0
- package/dist/{chunk-HDI4L2DD.js → chunk-GHKGU6GK.js} +46 -23
- package/dist/chunk-GHKGU6GK.js.map +1 -0
- package/dist/{chunk-E4ECCGJV.mjs → chunk-GJCTAKK5.mjs} +197 -99
- package/dist/chunk-GJCTAKK5.mjs.map +1 -0
- package/dist/{chunk-B6W4CQOR.mjs → chunk-HJ5GXVDT.mjs} +2 -2
- package/dist/chunk-HJ5GXVDT.mjs.map +1 -0
- package/dist/chunk-HVOIBGYN.js +282 -0
- package/dist/chunk-HVOIBGYN.js.map +1 -0
- package/dist/{chunk-BOTVAG4A.js → chunk-JBF4XEGR.js} +5 -5
- package/dist/{chunk-ASA5RLBY.mjs → chunk-JEIAMJGS.mjs} +2 -2
- package/dist/{chunk-CNKVITJO.mjs → chunk-JTXPJ6TK.mjs} +4 -2
- package/dist/chunk-JTXPJ6TK.mjs.map +1 -0
- package/dist/{chunk-U3DJJN4X.js → chunk-LBJTMJFA.js} +4 -4
- package/dist/{chunk-IBK6AXPP.js → chunk-NHFZIY2K.js} +4 -4
- package/dist/chunk-NHFZIY2K.js.map +1 -0
- package/dist/{chunk-NEXY7SE2.js → chunk-NYVA7ZTQ.js} +2 -2
- package/dist/chunk-NYVA7ZTQ.js.map +1 -0
- package/dist/{chunk-UEDNQBJN.js → chunk-RPQ737HL.js} +202 -104
- package/dist/chunk-RPQ737HL.js.map +1 -0
- package/dist/{chunk-B5YVX5IO.mjs → chunk-SBWPU4VT.mjs} +4 -2
- package/dist/chunk-SBWPU4VT.mjs.map +1 -0
- package/dist/{chunk-ELSMS5S7.js → chunk-T5ZX5BV7.js} +3 -3
- package/dist/{chunk-ELSMS5S7.js.map → chunk-T5ZX5BV7.js.map} +1 -1
- package/dist/{chunk-HLCGZGPA.mjs → chunk-TWR6P5WG.mjs} +11 -7
- package/dist/chunk-TWR6P5WG.mjs.map +1 -0
- package/dist/{chunk-LZ5ZGQEX.mjs → chunk-UYH6NWKB.mjs} +2 -2
- package/dist/{chunk-Z6TBQQE5.js → chunk-V6DNVROD.js} +4 -4
- package/dist/chunk-V6DNVROD.js.map +1 -0
- package/dist/{chunk-Q5JRBGWO.mjs → chunk-VELPHITE.mjs} +2 -2
- package/dist/chunk-VELPHITE.mjs.map +1 -0
- package/dist/{chunk-62T7RKU3.mjs → chunk-W57QXOHJ.mjs} +188 -105
- package/dist/chunk-W57QXOHJ.mjs.map +1 -0
- package/dist/{chunk-PYMUBJQX.js → chunk-X4RMS365.js} +3 -3
- package/dist/chunk-X4RMS365.js.map +1 -0
- package/dist/{chunk-Y35SM7TO.mjs → chunk-XQO3EG4J.mjs} +4 -4
- package/dist/chunk-XQO3EG4J.mjs.map +1 -0
- package/dist/{chunk-QHWKLZUC.js → chunk-XSNGD5US.js} +14 -10
- package/dist/chunk-XSNGD5US.js.map +1 -0
- package/dist/{chunk-A2DDWXMS.mjs → chunk-Y45HQET7.mjs} +12 -5
- package/dist/chunk-Y45HQET7.mjs.map +1 -0
- package/dist/chunk-Z7RMCHD4.mjs +282 -0
- package/dist/chunk-Z7RMCHD4.mjs.map +1 -0
- package/dist/{chunk-WB6KJX4N.js → chunk-ZG5MS2TO.js} +4 -2
- package/dist/chunk-ZG5MS2TO.js.map +1 -0
- package/dist/crypto-compare-service/crypto-compare.js +2 -2
- package/dist/crypto-compare-service/crypto-compare.mjs +1 -1
- package/dist/crypto-compare-service/index.js +2 -2
- package/dist/crypto-compare-service/index.mjs +1 -1
- package/dist/index.js +21 -19
- package/dist/index.mjs +21 -19
- package/dist/token-prices-service/codefi-v2.js +2 -2
- package/dist/token-prices-service/codefi-v2.mjs +1 -1
- package/dist/token-prices-service/index.js +2 -2
- package/dist/token-prices-service/index.mjs +1 -1
- package/dist/token-service.js +3 -3
- package/dist/token-service.mjs +2 -2
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/types/AccountTrackerController.d.ts +53 -68
- package/dist/types/AccountTrackerController.d.ts.map +1 -1
- package/dist/types/AssetsContractController.d.ts.map +1 -1
- package/dist/types/CurrencyRateController.d.ts.map +1 -1
- package/dist/types/NftController.d.ts +4 -5
- package/dist/types/NftController.d.ts.map +1 -1
- package/dist/types/NftDetectionController.d.ts +7 -18
- package/dist/types/NftDetectionController.d.ts.map +1 -1
- package/dist/types/RatesController/RatesController.d.ts.map +1 -1
- package/dist/types/TokenBalancesController.d.ts +2 -2
- package/dist/types/TokenBalancesController.d.ts.map +1 -1
- package/dist/types/TokenDetectionController.d.ts +4 -6
- package/dist/types/TokenDetectionController.d.ts.map +1 -1
- package/dist/types/TokenListController.d.ts.map +1 -1
- package/dist/types/TokenRatesController.d.ts +72 -65
- package/dist/types/TokenRatesController.d.ts.map +1 -1
- package/dist/types/TokensController.d.ts +4 -6
- package/dist/types/TokensController.d.ts.map +1 -1
- package/dist/types/assetsUtil.d.ts.map +1 -1
- package/dist/types/crypto-compare-service/crypto-compare.d.ts.map +1 -1
- package/dist/types/index.d.ts +4 -3
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/token-prices-service/abstract-token-prices-service.d.ts +0 -1
- package/dist/types/token-prices-service/abstract-token-prices-service.d.ts.map +1 -1
- package/dist/types/token-prices-service/codefi-v2.d.ts +1 -1
- package/dist/types/token-prices-service/codefi-v2.d.ts.map +1 -1
- package/dist/types/token-service.d.ts.map +1 -1
- package/package.json +5 -5
- package/dist/chunk-4AC3X2U5.js.map +0 -1
- package/dist/chunk-543CC74T.mjs +0 -253
- package/dist/chunk-543CC74T.mjs.map +0 -1
- package/dist/chunk-5W5OO2Q5.mjs.map +0 -1
- package/dist/chunk-62T7RKU3.mjs.map +0 -1
- package/dist/chunk-65PB33TE.mjs +0 -246
- package/dist/chunk-65PB33TE.mjs.map +0 -1
- package/dist/chunk-73F3SN5O.mjs.map +0 -1
- package/dist/chunk-A2DDWXMS.mjs.map +0 -1
- package/dist/chunk-B5YVX5IO.mjs.map +0 -1
- package/dist/chunk-B6W4CQOR.mjs.map +0 -1
- package/dist/chunk-CGLUTXI7.js.map +0 -1
- package/dist/chunk-CNKVITJO.mjs.map +0 -1
- package/dist/chunk-E4ECCGJV.mjs.map +0 -1
- package/dist/chunk-GU53EI7A.js +0 -246
- package/dist/chunk-GU53EI7A.js.map +0 -1
- package/dist/chunk-HDI4L2DD.js.map +0 -1
- package/dist/chunk-HLCGZGPA.mjs.map +0 -1
- package/dist/chunk-IBK6AXPP.js.map +0 -1
- package/dist/chunk-JUI3XNEF.js.map +0 -1
- package/dist/chunk-MR6EF4B7.mjs.map +0 -1
- package/dist/chunk-NEXY7SE2.js.map +0 -1
- package/dist/chunk-PYMUBJQX.js.map +0 -1
- package/dist/chunk-Q5JRBGWO.mjs.map +0 -1
- package/dist/chunk-QFDTOEYR.js +0 -253
- package/dist/chunk-QFDTOEYR.js.map +0 -1
- package/dist/chunk-QHWKLZUC.js.map +0 -1
- package/dist/chunk-UEDNQBJN.js.map +0 -1
- package/dist/chunk-WB6KJX4N.js.map +0 -1
- package/dist/chunk-WCCLSUOI.mjs.map +0 -1
- package/dist/chunk-Y35SM7TO.mjs.map +0 -1
- package/dist/chunk-YIFA2HXH.js.map +0 -1
- package/dist/chunk-Z6TBQQE5.js.map +0 -1
- /package/dist/{chunk-D3K5MPMW.mjs.map → chunk-56O7BVZV.mjs.map} +0 -0
- /package/dist/{chunk-B5YY22QQ.js.map → chunk-6PPM4ETZ.js.map} +0 -0
- /package/dist/{chunk-BOTVAG4A.js.map → chunk-JBF4XEGR.js.map} +0 -0
- /package/dist/{chunk-ASA5RLBY.mjs.map → chunk-JEIAMJGS.mjs.map} +0 -0
- /package/dist/{chunk-U3DJJN4X.js.map → chunk-LBJTMJFA.js.map} +0 -0
- /package/dist/{chunk-LZ5ZGQEX.mjs.map → chunk-UYH6NWKB.mjs.map} +0 -0
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
import {
|
|
2
|
+
__privateAdd,
|
|
3
|
+
__privateGet,
|
|
4
|
+
__privateMethod,
|
|
5
|
+
__privateSet
|
|
6
|
+
} from "./chunk-XUI43LEZ.mjs";
|
|
7
|
+
|
|
8
|
+
// src/AccountTrackerController.ts
|
|
9
|
+
import {
|
|
10
|
+
query,
|
|
11
|
+
safelyExecuteWithTimeout,
|
|
12
|
+
toChecksumHexAddress
|
|
13
|
+
} from "@metamask/controller-utils";
|
|
14
|
+
import EthQuery from "@metamask/eth-query";
|
|
15
|
+
import { StaticIntervalPollingController } from "@metamask/polling-controller";
|
|
16
|
+
import { assert } from "@metamask/utils";
|
|
17
|
+
import { Mutex } from "async-mutex";
|
|
18
|
+
import { cloneDeep } from "lodash";
|
|
19
|
+
var controllerName = "AccountTrackerController";
|
|
20
|
+
var accountTrackerMetadata = {
|
|
21
|
+
accounts: {
|
|
22
|
+
persist: true,
|
|
23
|
+
anonymous: false
|
|
24
|
+
},
|
|
25
|
+
accountsByChainId: {
|
|
26
|
+
persist: true,
|
|
27
|
+
anonymous: false
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
var _refreshMutex, _handle, _getCurrentChainId, getCurrentChainId_fn, _getCorrectNetworkClient, getCorrectNetworkClient_fn, _getBalanceFromChain, getBalanceFromChain_fn;
|
|
31
|
+
var AccountTrackerController = class extends StaticIntervalPollingController {
|
|
32
|
+
/**
|
|
33
|
+
* Creates an AccountTracker instance.
|
|
34
|
+
*
|
|
35
|
+
* @param options - The controller options.
|
|
36
|
+
* @param options.interval - Polling interval used to fetch new account balances.
|
|
37
|
+
* @param options.state - Initial state to set on this controller.
|
|
38
|
+
* @param options.messenger - The controller messaging system.
|
|
39
|
+
*/
|
|
40
|
+
constructor({
|
|
41
|
+
interval = 1e4,
|
|
42
|
+
state,
|
|
43
|
+
messenger
|
|
44
|
+
}) {
|
|
45
|
+
const { selectedNetworkClientId } = messenger.call(
|
|
46
|
+
"NetworkController:getState"
|
|
47
|
+
);
|
|
48
|
+
const {
|
|
49
|
+
configuration: { chainId }
|
|
50
|
+
} = messenger.call(
|
|
51
|
+
"NetworkController:getNetworkClientById",
|
|
52
|
+
selectedNetworkClientId
|
|
53
|
+
);
|
|
54
|
+
super({
|
|
55
|
+
name: controllerName,
|
|
56
|
+
messenger,
|
|
57
|
+
state: {
|
|
58
|
+
accounts: {},
|
|
59
|
+
accountsByChainId: {
|
|
60
|
+
[chainId]: {}
|
|
61
|
+
},
|
|
62
|
+
...state
|
|
63
|
+
},
|
|
64
|
+
metadata: accountTrackerMetadata
|
|
65
|
+
});
|
|
66
|
+
/**
|
|
67
|
+
* Gets the current chain ID.
|
|
68
|
+
* @returns The current chain ID.
|
|
69
|
+
*/
|
|
70
|
+
__privateAdd(this, _getCurrentChainId);
|
|
71
|
+
/**
|
|
72
|
+
* Resolves a networkClientId to a network client config
|
|
73
|
+
* or globally selected network config if not provided
|
|
74
|
+
*
|
|
75
|
+
* @param networkClientId - Optional networkClientId to fetch a network client with
|
|
76
|
+
* @returns network client config
|
|
77
|
+
*/
|
|
78
|
+
__privateAdd(this, _getCorrectNetworkClient);
|
|
79
|
+
/**
|
|
80
|
+
* Fetches the balance of a given address from the blockchain.
|
|
81
|
+
*
|
|
82
|
+
* @param address - The account address to fetch the balance for.
|
|
83
|
+
* @param ethQuery - The EthQuery instance to query getBalnce with.
|
|
84
|
+
* @returns A promise that resolves to the balance in a hex string format.
|
|
85
|
+
*/
|
|
86
|
+
__privateAdd(this, _getBalanceFromChain);
|
|
87
|
+
__privateAdd(this, _refreshMutex, new Mutex());
|
|
88
|
+
__privateAdd(this, _handle, void 0);
|
|
89
|
+
this.setIntervalLength(interval);
|
|
90
|
+
this.poll();
|
|
91
|
+
this.messagingSystem.subscribe(
|
|
92
|
+
"AccountsController:selectedEvmAccountChange",
|
|
93
|
+
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
|
|
94
|
+
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
95
|
+
() => this.refresh()
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
syncAccounts(newChainId) {
|
|
99
|
+
const accounts = { ...this.state.accounts };
|
|
100
|
+
const accountsByChainId = cloneDeep(this.state.accountsByChainId);
|
|
101
|
+
const existing = Object.keys(accounts);
|
|
102
|
+
if (!accountsByChainId[newChainId]) {
|
|
103
|
+
accountsByChainId[newChainId] = {};
|
|
104
|
+
existing.forEach((address) => {
|
|
105
|
+
accountsByChainId[newChainId][address] = { balance: "0x0" };
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
const addresses = Object.values(
|
|
109
|
+
this.messagingSystem.call("AccountsController:listAccounts").map(
|
|
110
|
+
(internalAccount) => toChecksumHexAddress(internalAccount.address)
|
|
111
|
+
)
|
|
112
|
+
);
|
|
113
|
+
const newAddresses = addresses.filter(
|
|
114
|
+
(address) => !existing.includes(address)
|
|
115
|
+
);
|
|
116
|
+
const oldAddresses = existing.filter(
|
|
117
|
+
(address) => !addresses.includes(address)
|
|
118
|
+
);
|
|
119
|
+
newAddresses.forEach((address) => {
|
|
120
|
+
accounts[address] = { balance: "0x0" };
|
|
121
|
+
});
|
|
122
|
+
Object.keys(accountsByChainId).forEach((chainId) => {
|
|
123
|
+
newAddresses.forEach((address) => {
|
|
124
|
+
accountsByChainId[chainId][address] = {
|
|
125
|
+
balance: "0x0"
|
|
126
|
+
};
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
oldAddresses.forEach((address) => {
|
|
130
|
+
delete accounts[address];
|
|
131
|
+
});
|
|
132
|
+
Object.keys(accountsByChainId).forEach((chainId) => {
|
|
133
|
+
oldAddresses.forEach((address) => {
|
|
134
|
+
delete accountsByChainId[chainId][address];
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
this.update((state) => {
|
|
138
|
+
state.accounts = accounts;
|
|
139
|
+
state.accountsByChainId = accountsByChainId;
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Starts a new polling interval.
|
|
144
|
+
*
|
|
145
|
+
* @param interval - Polling interval trigger a 'refresh'.
|
|
146
|
+
*/
|
|
147
|
+
async poll(interval) {
|
|
148
|
+
if (interval) {
|
|
149
|
+
this.setIntervalLength(interval);
|
|
150
|
+
}
|
|
151
|
+
if (__privateGet(this, _handle)) {
|
|
152
|
+
clearTimeout(__privateGet(this, _handle));
|
|
153
|
+
}
|
|
154
|
+
await this.refresh();
|
|
155
|
+
__privateSet(this, _handle, setTimeout(() => {
|
|
156
|
+
this.poll(this.getIntervalLength());
|
|
157
|
+
}, this.getIntervalLength()));
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Refreshes the balances of the accounts using the networkClientId
|
|
161
|
+
*
|
|
162
|
+
* @param networkClientId - The network client ID used to get balances.
|
|
163
|
+
*/
|
|
164
|
+
async _executePoll(networkClientId) {
|
|
165
|
+
this.refresh(networkClientId);
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Refreshes the balances of the accounts depending on the multi-account setting.
|
|
169
|
+
* If multi-account is disabled, only updates the selected account balance.
|
|
170
|
+
* If multi-account is enabled, updates balances for all accounts.
|
|
171
|
+
*
|
|
172
|
+
* @param networkClientId - Optional networkClientId to fetch a network client with
|
|
173
|
+
*/
|
|
174
|
+
async refresh(networkClientId) {
|
|
175
|
+
const selectedAccount = this.messagingSystem.call(
|
|
176
|
+
"AccountsController:getSelectedAccount"
|
|
177
|
+
);
|
|
178
|
+
const releaseLock = await __privateGet(this, _refreshMutex).acquire();
|
|
179
|
+
try {
|
|
180
|
+
const { chainId, ethQuery } = __privateMethod(this, _getCorrectNetworkClient, getCorrectNetworkClient_fn).call(this, networkClientId);
|
|
181
|
+
this.syncAccounts(chainId);
|
|
182
|
+
const { accounts, accountsByChainId } = this.state;
|
|
183
|
+
const { isMultiAccountBalancesEnabled } = this.messagingSystem.call(
|
|
184
|
+
"PreferencesController:getState"
|
|
185
|
+
);
|
|
186
|
+
const accountsToUpdate = isMultiAccountBalancesEnabled ? Object.keys(accounts) : [toChecksumHexAddress(selectedAccount.address)];
|
|
187
|
+
const accountsForChain = { ...accountsByChainId[chainId] };
|
|
188
|
+
for (const address of accountsToUpdate) {
|
|
189
|
+
const balance = await __privateMethod(this, _getBalanceFromChain, getBalanceFromChain_fn).call(this, address, ethQuery);
|
|
190
|
+
if (balance) {
|
|
191
|
+
accountsForChain[address] = {
|
|
192
|
+
balance
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
this.update((state) => {
|
|
197
|
+
if (chainId === __privateMethod(this, _getCurrentChainId, getCurrentChainId_fn).call(this)) {
|
|
198
|
+
state.accounts = accountsForChain;
|
|
199
|
+
}
|
|
200
|
+
state.accountsByChainId[chainId] = accountsForChain;
|
|
201
|
+
});
|
|
202
|
+
} finally {
|
|
203
|
+
releaseLock();
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Sync accounts balances with some additional addresses.
|
|
208
|
+
*
|
|
209
|
+
* @param addresses - the additional addresses, may be hardware wallet addresses.
|
|
210
|
+
* @param networkClientId - Optional networkClientId to fetch a network client with.
|
|
211
|
+
* @returns accounts - addresses with synced balance
|
|
212
|
+
*/
|
|
213
|
+
async syncBalanceWithAddresses(addresses, networkClientId) {
|
|
214
|
+
const { ethQuery } = __privateMethod(this, _getCorrectNetworkClient, getCorrectNetworkClient_fn).call(this, networkClientId);
|
|
215
|
+
return await Promise.all(
|
|
216
|
+
addresses.map((address) => {
|
|
217
|
+
return safelyExecuteWithTimeout(async () => {
|
|
218
|
+
assert(ethQuery, "Provider not set.");
|
|
219
|
+
const balance = await query(ethQuery, "getBalance", [address]);
|
|
220
|
+
return [address, balance];
|
|
221
|
+
});
|
|
222
|
+
})
|
|
223
|
+
).then((value) => {
|
|
224
|
+
return value.reduce((obj, item) => {
|
|
225
|
+
if (!item) {
|
|
226
|
+
return obj;
|
|
227
|
+
}
|
|
228
|
+
const [address, balance] = item;
|
|
229
|
+
return {
|
|
230
|
+
...obj,
|
|
231
|
+
[address]: {
|
|
232
|
+
balance
|
|
233
|
+
}
|
|
234
|
+
};
|
|
235
|
+
}, {});
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
};
|
|
239
|
+
_refreshMutex = new WeakMap();
|
|
240
|
+
_handle = new WeakMap();
|
|
241
|
+
_getCurrentChainId = new WeakSet();
|
|
242
|
+
getCurrentChainId_fn = function() {
|
|
243
|
+
const { selectedNetworkClientId } = this.messagingSystem.call(
|
|
244
|
+
"NetworkController:getState"
|
|
245
|
+
);
|
|
246
|
+
const {
|
|
247
|
+
configuration: { chainId }
|
|
248
|
+
} = this.messagingSystem.call(
|
|
249
|
+
"NetworkController:getNetworkClientById",
|
|
250
|
+
selectedNetworkClientId
|
|
251
|
+
);
|
|
252
|
+
return chainId;
|
|
253
|
+
};
|
|
254
|
+
_getCorrectNetworkClient = new WeakSet();
|
|
255
|
+
getCorrectNetworkClient_fn = function(networkClientId) {
|
|
256
|
+
const selectedNetworkClientId = networkClientId ?? this.messagingSystem.call("NetworkController:getState").selectedNetworkClientId;
|
|
257
|
+
const {
|
|
258
|
+
configuration: { chainId },
|
|
259
|
+
provider
|
|
260
|
+
} = this.messagingSystem.call(
|
|
261
|
+
"NetworkController:getNetworkClientById",
|
|
262
|
+
selectedNetworkClientId
|
|
263
|
+
);
|
|
264
|
+
return {
|
|
265
|
+
chainId,
|
|
266
|
+
ethQuery: new EthQuery(provider)
|
|
267
|
+
};
|
|
268
|
+
};
|
|
269
|
+
_getBalanceFromChain = new WeakSet();
|
|
270
|
+
getBalanceFromChain_fn = async function(address, ethQuery) {
|
|
271
|
+
return await safelyExecuteWithTimeout(async () => {
|
|
272
|
+
assert(ethQuery, "Provider not set.");
|
|
273
|
+
return await query(ethQuery, "getBalance", [address]);
|
|
274
|
+
});
|
|
275
|
+
};
|
|
276
|
+
var AccountTrackerController_default = AccountTrackerController;
|
|
277
|
+
|
|
278
|
+
export {
|
|
279
|
+
AccountTrackerController,
|
|
280
|
+
AccountTrackerController_default
|
|
281
|
+
};
|
|
282
|
+
//# sourceMappingURL=chunk-Z7RMCHD4.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/AccountTrackerController.ts"],"sourcesContent":["import type {\n AccountsControllerSelectedEvmAccountChangeEvent,\n AccountsControllerGetSelectedAccountAction,\n AccountsControllerListAccountsAction,\n AccountsControllerSelectedAccountChangeEvent,\n} from '@metamask/accounts-controller';\nimport type {\n ControllerStateChangeEvent,\n ControllerGetStateAction,\n RestrictedControllerMessenger,\n} from '@metamask/base-controller';\nimport {\n query,\n safelyExecuteWithTimeout,\n toChecksumHexAddress,\n} from '@metamask/controller-utils';\nimport EthQuery from '@metamask/eth-query';\nimport type {\n NetworkClientId,\n NetworkControllerGetNetworkClientByIdAction,\n NetworkControllerGetStateAction,\n} from '@metamask/network-controller';\nimport { StaticIntervalPollingController } from '@metamask/polling-controller';\nimport type { PreferencesControllerGetStateAction } from '@metamask/preferences-controller';\nimport { type Hex, assert } from '@metamask/utils';\nimport { Mutex } from 'async-mutex';\nimport { cloneDeep } from 'lodash';\n\n/**\n * The name of the {@link AccountTrackerController}.\n */\nconst controllerName = 'AccountTrackerController';\n\n/**\n * @type AccountInformation\n *\n * Account information object\n * @property balance - Hex string of an account balancec in wei\n */\nexport type AccountInformation = {\n balance: string;\n};\n\n/**\n * @type AccountTrackerControllerState\n *\n * Account tracker controller state\n * @property accounts - Map of addresses to account information\n */\nexport type AccountTrackerControllerState = {\n accounts: { [address: string]: AccountInformation };\n accountsByChainId: Record<string, { [address: string]: AccountInformation }>;\n};\n\nconst accountTrackerMetadata = {\n accounts: {\n persist: true,\n anonymous: false,\n },\n accountsByChainId: {\n persist: true,\n anonymous: false,\n },\n};\n\n/**\n * The action that can be performed to get the state of the {@link AccountTrackerController}.\n */\nexport type AccountTrackerControllerGetStateAction = ControllerGetStateAction<\n typeof controllerName,\n AccountTrackerControllerState\n>;\n\n/**\n * The actions that can be performed using the {@link AccountTrackerController}.\n */\nexport type AccountTrackerControllerActions =\n AccountTrackerControllerGetStateAction;\n\n/**\n * The messenger of the {@link AccountTrackerController} for communication.\n */\nexport type AllowedActions =\n | AccountsControllerListAccountsAction\n | PreferencesControllerGetStateAction\n | AccountsControllerGetSelectedAccountAction\n | NetworkControllerGetStateAction\n | NetworkControllerGetNetworkClientByIdAction;\n\n/**\n * The event that {@link AccountTrackerController} can emit.\n */\nexport type AccountTrackerControllerStateChangeEvent =\n ControllerStateChangeEvent<\n typeof controllerName,\n AccountTrackerControllerState\n >;\n\n/**\n * The events that {@link AccountTrackerController} can emit.\n */\nexport type AccountTrackerControllerEvents =\n AccountTrackerControllerStateChangeEvent;\n\n/**\n * The external events available to the {@link AccountTrackerController}.\n */\nexport type AllowedEvents =\n | AccountsControllerSelectedEvmAccountChangeEvent\n | AccountsControllerSelectedAccountChangeEvent;\n\n/**\n * The messenger of the {@link AccountTrackerController}.\n */\nexport type AccountTrackerControllerMessenger = RestrictedControllerMessenger<\n typeof controllerName,\n AccountTrackerControllerActions | AllowedActions,\n AccountTrackerControllerEvents | AllowedEvents,\n AllowedActions['type'],\n AllowedEvents['type']\n>;\n\n/**\n * Controller that tracks the network balances for all user accounts.\n */\nexport class AccountTrackerController extends StaticIntervalPollingController<\n typeof controllerName,\n AccountTrackerControllerState,\n AccountTrackerControllerMessenger\n> {\n readonly #refreshMutex = new Mutex();\n\n #handle?: ReturnType<typeof setTimeout>;\n\n /**\n * Creates an AccountTracker instance.\n *\n * @param options - The controller options.\n * @param options.interval - Polling interval used to fetch new account balances.\n * @param options.state - Initial state to set on this controller.\n * @param options.messenger - The controller messaging system.\n */\n constructor({\n interval = 10000,\n state,\n messenger,\n }: {\n interval?: number;\n state?: Partial<AccountTrackerControllerState>;\n messenger: AccountTrackerControllerMessenger;\n }) {\n const { selectedNetworkClientId } = messenger.call(\n 'NetworkController:getState',\n );\n const {\n configuration: { chainId },\n } = messenger.call(\n 'NetworkController:getNetworkClientById',\n selectedNetworkClientId,\n );\n super({\n name: controllerName,\n messenger,\n state: {\n accounts: {},\n accountsByChainId: {\n [chainId]: {},\n },\n ...state,\n },\n metadata: accountTrackerMetadata,\n });\n this.setIntervalLength(interval);\n\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.poll();\n\n this.messagingSystem.subscribe(\n 'AccountsController:selectedEvmAccountChange',\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n () => this.refresh(),\n );\n }\n\n /**\n * Gets the current chain ID.\n * @returns The current chain ID.\n */\n #getCurrentChainId(): Hex {\n const { selectedNetworkClientId } = this.messagingSystem.call(\n 'NetworkController:getState',\n );\n const {\n configuration: { chainId },\n } = this.messagingSystem.call(\n 'NetworkController:getNetworkClientById',\n selectedNetworkClientId,\n );\n return chainId;\n }\n\n private syncAccounts(newChainId: string) {\n const accounts = { ...this.state.accounts };\n const accountsByChainId = cloneDeep(this.state.accountsByChainId);\n\n const existing = Object.keys(accounts);\n if (!accountsByChainId[newChainId]) {\n accountsByChainId[newChainId] = {};\n existing.forEach((address) => {\n accountsByChainId[newChainId][address] = { balance: '0x0' };\n });\n }\n\n // Note: The address from the preferences controller are checksummed\n // The addresses from the accounts controller are lowercased\n const addresses = Object.values(\n this.messagingSystem\n .call('AccountsController:listAccounts')\n .map((internalAccount) =>\n toChecksumHexAddress(internalAccount.address),\n ),\n );\n const newAddresses = addresses.filter(\n (address) => !existing.includes(address),\n );\n const oldAddresses = existing.filter(\n (address) => !addresses.includes(address),\n );\n newAddresses.forEach((address) => {\n accounts[address] = { balance: '0x0' };\n });\n Object.keys(accountsByChainId).forEach((chainId) => {\n newAddresses.forEach((address) => {\n accountsByChainId[chainId][address] = {\n balance: '0x0',\n };\n });\n });\n\n oldAddresses.forEach((address) => {\n delete accounts[address];\n });\n Object.keys(accountsByChainId).forEach((chainId) => {\n oldAddresses.forEach((address) => {\n delete accountsByChainId[chainId][address];\n });\n });\n\n this.update((state) => {\n state.accounts = accounts;\n state.accountsByChainId = accountsByChainId;\n });\n }\n\n /**\n * Resolves a networkClientId to a network client config\n * or globally selected network config if not provided\n *\n * @param networkClientId - Optional networkClientId to fetch a network client with\n * @returns network client config\n */\n #getCorrectNetworkClient(networkClientId?: NetworkClientId): {\n chainId: string;\n ethQuery?: EthQuery;\n } {\n const selectedNetworkClientId =\n networkClientId ??\n this.messagingSystem.call('NetworkController:getState')\n .selectedNetworkClientId;\n const {\n configuration: { chainId },\n provider,\n } = this.messagingSystem.call(\n 'NetworkController:getNetworkClientById',\n selectedNetworkClientId,\n );\n\n return {\n chainId,\n ethQuery: new EthQuery(provider),\n };\n }\n\n /**\n * Starts a new polling interval.\n *\n * @param interval - Polling interval trigger a 'refresh'.\n */\n async poll(interval?: number): Promise<void> {\n if (interval) {\n this.setIntervalLength(interval);\n }\n\n if (this.#handle) {\n clearTimeout(this.#handle);\n }\n\n await this.refresh();\n\n this.#handle = setTimeout(() => {\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.poll(this.getIntervalLength());\n }, this.getIntervalLength());\n }\n\n /**\n * Refreshes the balances of the accounts using the networkClientId\n *\n * @param networkClientId - The network client ID used to get balances.\n */\n async _executePoll(networkClientId: string): Promise<void> {\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.refresh(networkClientId);\n }\n\n /**\n * Refreshes the balances of the accounts depending on the multi-account setting.\n * If multi-account is disabled, only updates the selected account balance.\n * If multi-account is enabled, updates balances for all accounts.\n *\n * @param networkClientId - Optional networkClientId to fetch a network client with\n */\n async refresh(networkClientId?: NetworkClientId) {\n const selectedAccount = this.messagingSystem.call(\n 'AccountsController:getSelectedAccount',\n );\n const releaseLock = await this.#refreshMutex.acquire();\n try {\n const { chainId, ethQuery } =\n this.#getCorrectNetworkClient(networkClientId);\n this.syncAccounts(chainId);\n const { accounts, accountsByChainId } = this.state;\n const { isMultiAccountBalancesEnabled } = this.messagingSystem.call(\n 'PreferencesController:getState',\n );\n\n const accountsToUpdate = isMultiAccountBalancesEnabled\n ? Object.keys(accounts)\n : [toChecksumHexAddress(selectedAccount.address)];\n\n const accountsForChain = { ...accountsByChainId[chainId] };\n for (const address of accountsToUpdate) {\n const balance = await this.#getBalanceFromChain(address, ethQuery);\n if (balance) {\n accountsForChain[address] = {\n balance,\n };\n }\n }\n\n this.update((state) => {\n if (chainId === this.#getCurrentChainId()) {\n state.accounts = accountsForChain;\n }\n state.accountsByChainId[chainId] = accountsForChain;\n });\n } finally {\n releaseLock();\n }\n }\n\n /**\n * Fetches the balance of a given address from the blockchain.\n *\n * @param address - The account address to fetch the balance for.\n * @param ethQuery - The EthQuery instance to query getBalnce with.\n * @returns A promise that resolves to the balance in a hex string format.\n */\n async #getBalanceFromChain(\n address: string,\n ethQuery?: EthQuery,\n ): Promise<string | undefined> {\n return await safelyExecuteWithTimeout(async () => {\n assert(ethQuery, 'Provider not set.');\n return await query(ethQuery, 'getBalance', [address]);\n });\n }\n\n /**\n * Sync accounts balances with some additional addresses.\n *\n * @param addresses - the additional addresses, may be hardware wallet addresses.\n * @param networkClientId - Optional networkClientId to fetch a network client with.\n * @returns accounts - addresses with synced balance\n */\n async syncBalanceWithAddresses(\n addresses: string[],\n networkClientId?: NetworkClientId,\n ): Promise<Record<string, { balance: string }>> {\n const { ethQuery } = this.#getCorrectNetworkClient(networkClientId);\n\n return await Promise.all(\n addresses.map((address): Promise<[string, string] | undefined> => {\n return safelyExecuteWithTimeout(async () => {\n assert(ethQuery, 'Provider not set.');\n const balance = await query(ethQuery, 'getBalance', [address]);\n return [address, balance];\n });\n }),\n ).then((value) => {\n return value.reduce((obj, item) => {\n if (!item) {\n return obj;\n }\n\n const [address, balance] = item;\n return {\n ...obj,\n [address]: {\n balance,\n },\n };\n }, {});\n });\n }\n}\n\nexport default AccountTrackerController;\n"],"mappings":"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","names":[]}
|
|
@@ -30,7 +30,9 @@ async function fetchExchangeRate(currency, nativeCurrency, includeUSDRate) {
|
|
|
30
30
|
const usdConversionRate = Number(json.USD);
|
|
31
31
|
if (!Number.isFinite(conversionRate)) {
|
|
32
32
|
throw new Error(
|
|
33
|
-
`Invalid response for ${currency.toUpperCase()}: ${
|
|
33
|
+
`Invalid response for ${currency.toUpperCase()}: ${// TODO: Either fix this lint violation or explain why it's necessary to ignore.
|
|
34
|
+
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
|
|
35
|
+
json[currency.toUpperCase()]}`
|
|
34
36
|
);
|
|
35
37
|
}
|
|
36
38
|
if (includeUSDRate && !Number.isFinite(usdConversionRate)) {
|
|
@@ -63,4 +65,4 @@ async function fetchMultiExchangeRate(fiatCurrency, cryptocurrencies, includeUSD
|
|
|
63
65
|
|
|
64
66
|
|
|
65
67
|
exports.fetchExchangeRate = fetchExchangeRate; exports.fetchMultiExchangeRate = fetchMultiExchangeRate;
|
|
66
|
-
//# sourceMappingURL=chunk-
|
|
68
|
+
//# sourceMappingURL=chunk-ZG5MS2TO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/crypto-compare-service/crypto-compare.ts"],"names":[],"mappings":";AAAA,SAAS,mBAAmB;AAM5B,IAAM,wBAAwB,oBAAI,IAAI,CAAC,CAAC,OAAO,QAAQ,CAAC,CAAC;AAEzD,IAAM,wBAAwB;AAa9B,SAAS,cACP,iBACA,gBACA,gBACA;AACA,mBAAiB,eAAe,YAAY;AAC5C,QAAM,OAAO,sBAAsB,IAAI,cAAc,KAAK;AAC1D,SACE,GAAG,qBAAqB,oBACrB,IAAI,UAAU,gBAAgB,YAAY,CAAC,GAC3C,kBAAkB,gBAAgB,YAAY,MAAM,QAAQ,SAAS,EAAE;AAE9E;AAYA,SAAS,mBACP,OACA,OACA,iBAAiB,OACjB;AACA,QAAM,eACJ,kBAAkB,CAAC,MAAM,SAAS,KAAK,IAAI,GAAG,KAAK,SAAS;AAE9D,QAAM,SAAS,IAAI,gBAAgB;AACnC,SAAO,OAAO,SAAS,KAAK;AAC5B,SAAO,OAAO,SAAS,YAAY;AAEnC,QAAM,MAAM,IAAI,IAAI,GAAG,qBAAqB,kBAAkB;AAC9D,MAAI,SAAS,OAAO,SAAS;AAE7B,SAAO,IAAI,SAAS;AACtB;AAaA,SAAS,oBAAoB,MAA+C;AAC1E,MAAI,KAAK,aAAa,SAAS;AAC7B,UAAM,IAAI,MAAM,KAAK,OAAO;AAAA,EAC9B;AACF;AAUA,eAAsB,kBACpB,UACA,gBACA,gBAIC;AACD,QAAM,OAAO,MAAM;AAAA,IACjB,cAAc,UAAU,gBAAgB,cAAc;AAAA,EACxD;AAEA,sBAAoB,IAAI;AACxB,QAAM,iBAAiB,OAAO,KAAK,SAAS,YAAY,CAAC,CAAC;AAE1D,QAAM,oBAAoB,OAAO,KAAK,GAAG;AACzC,MAAI,CAAC,OAAO,SAAS,cAAc,GAAG;AACpC,UAAM,IAAI;AAAA,MACR,wBAAwB,SAAS,YAAY,CAAC;AAAA;AAAA,MAG5C,KAAK,SAAS,YAAY,CAAC,CAC7B;AAAA,IACF;AAAA,EACF;AAEA,MAAI,kBAAkB,CAAC,OAAO,SAAS,iBAAiB,GAAG;AAGzD,UAAM,IAAI,MAAM,2CAA2C,KAAK,GAAG,EAAE;AAAA,EACvE;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAUA,eAAsB,uBACpB,cACA,kBACA,gBACiD;AACjD,QAAM,MAAM;AAAA,IACV,OAAO,OAAO,gBAAgB,EAAE,KAAK,GAAG;AAAA,IACxC;AAAA,IACA;AAAA,EACF;AACA,QAAM,WAAW,MAAM,YAAY,GAAG;AACtC,sBAAoB,QAAQ;AAE5B,QAAM,QAAgD,CAAC;AACvD,aAAW,CAAC,gBAAgB,MAAM,KAAK,OAAO,QAAQ,QAAQ,GAGzD;AACH,UAAM,eAAe,YAAY,CAAC,IAAI;AAAA,MACpC,CAAC,aAAa,YAAY,CAAC,GAAG,OAAO,aAAa,YAAY,CAAC;AAAA,MAC/D,GAAI,kBAAkB,EAAE,KAAK,OAAO,IAAI;AAAA,IAC1C;AAAA,EACF;AAEA,SAAO;AACT","sourcesContent":["import { handleFetch } from '@metamask/controller-utils';\n\n/**\n * A map from native currency symbol to CryptoCompare identifier.\n * This is only needed when the values don't match.\n */\nconst nativeSymbolOverrides = new Map([['MNT', 'MANTLE']]);\n\nconst CRYPTO_COMPARE_DOMAIN = 'https://min-api.cryptocompare.com';\n\n/**\n * Get the CryptoCompare API URL for getting the conversion rate from the given native currency to\n * the given currency. Optionally, the conversion rate from the native currency to USD can also be\n * included in the response.\n *\n * @param currentCurrency - The currency to get a conversion rate for.\n * @param nativeCurrency - The native currency to convert from.\n * @param includeUSDRate - Whether or not the native currency to USD conversion rate should be\n * included in the response as well.\n * @returns The API URL for getting the conversion rate.\n */\nfunction getPricingURL(\n currentCurrency: string,\n nativeCurrency: string,\n includeUSDRate?: boolean,\n) {\n nativeCurrency = nativeCurrency.toUpperCase();\n const fsym = nativeSymbolOverrides.get(nativeCurrency) ?? nativeCurrency;\n return (\n `${CRYPTO_COMPARE_DOMAIN}/data/price?fsym=` +\n `${fsym}&tsyms=${currentCurrency.toUpperCase()}` +\n `${includeUSDRate && currentCurrency.toUpperCase() !== 'USD' ? ',USD' : ''}`\n );\n}\n\n/**\n * Get the CryptoCompare API URL for getting the conversion rate from a given array of native currencies\n * to the given currency. Optionally, the conversion rate from the native currency to USD can also be\n * included in the response.\n *\n * @param fsyms - The native currencies to get conversion rates for.\n * @param tsyms - The currency to convert to.\n * @param includeUSDRate - Whether or not the native currency to USD conversion rate should be included.\n * @returns The API URL for getting the conversion rates.\n */\nfunction getMultiPricingURL(\n fsyms: string,\n tsyms: string,\n includeUSDRate = false,\n) {\n const updatedTsyms =\n includeUSDRate && !tsyms.includes('USD') ? `${tsyms},USD` : tsyms;\n\n const params = new URLSearchParams();\n params.append('fsyms', fsyms);\n params.append('tsyms', updatedTsyms);\n\n const url = new URL(`${CRYPTO_COMPARE_DOMAIN}/data/pricemulti`);\n url.search = params.toString();\n\n return url.toString();\n}\n\n/**\n * Handles an error response from the CryptoCompare API.\n * Expected error response format\n * { Response: \"Error\", Message: \"...\", HasWarning: false }\n *\n * @param json - The JSON response from the CryptoCompare API.\n * @param json.Response - The response status.\n * @param json.Message - The error message.\n */\n// TODO: Either fix this lint violation or explain why it's necessary to ignore.\n// eslint-disable-next-line @typescript-eslint/naming-convention\nfunction handleErrorResponse(json: { Response?: string; Message?: string }) {\n if (json.Response === 'Error') {\n throw new Error(json.Message);\n }\n}\n\n/**\n * Fetches the exchange rate for a given currency.\n *\n * @param currency - ISO 4217 currency code.\n * @param nativeCurrency - Symbol for base asset.\n * @param includeUSDRate - Whether to add the USD rate to the fetch.\n * @returns Promise resolving to exchange rate for given currency.\n */\nexport async function fetchExchangeRate(\n currency: string,\n nativeCurrency: string,\n includeUSDRate?: boolean,\n): Promise<{\n conversionRate: number;\n usdConversionRate: number;\n}> {\n const json = await handleFetch(\n getPricingURL(currency, nativeCurrency, includeUSDRate),\n );\n\n handleErrorResponse(json);\n const conversionRate = Number(json[currency.toUpperCase()]);\n\n const usdConversionRate = Number(json.USD);\n if (!Number.isFinite(conversionRate)) {\n throw new Error(\n `Invalid response for ${currency.toUpperCase()}: ${\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n json[currency.toUpperCase()]\n }`,\n );\n }\n\n if (includeUSDRate && !Number.isFinite(usdConversionRate)) {\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n throw new Error(`Invalid response for usdConversionRate: ${json.USD}`);\n }\n\n return {\n conversionRate,\n usdConversionRate,\n };\n}\n\n/**\n * Fetches the exchange rates for multiple currencies.\n *\n * @param fiatCurrency - The currency of the rates (ISO 4217).\n * @param cryptocurrencies - The cryptocurrencies to get conversion rates for. Min length: 1. Max length: 300.\n * @param includeUSDRate - Whether to add the USD rate to the fetch.\n * @returns Promise resolving to exchange rates for given currencies.\n */\nexport async function fetchMultiExchangeRate(\n fiatCurrency: string,\n cryptocurrencies: string[],\n includeUSDRate: boolean,\n): Promise<Record<string, Record<string, string>>> {\n const url = getMultiPricingURL(\n Object.values(cryptocurrencies).join(','),\n fiatCurrency,\n includeUSDRate,\n );\n const response = await handleFetch(url);\n handleErrorResponse(response);\n\n const rates: Record<string, Record<string, string>> = {};\n for (const [cryptocurrency, values] of Object.entries(response) as [\n string,\n Record<string, string>,\n ][]) {\n rates[cryptocurrency.toLowerCase()] = {\n [fiatCurrency.toLowerCase()]: values[fiatCurrency.toUpperCase()],\n ...(includeUSDRate && { usd: values.USD }),\n };\n }\n\n return rates;\n}\n"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var _chunkZG5MS2TOjs = require('../chunk-ZG5MS2TO.js');
|
|
5
5
|
require('../chunk-Z4BLTVTB.js');
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
exports.fetchExchangeRate =
|
|
9
|
+
exports.fetchExchangeRate = _chunkZG5MS2TOjs.fetchExchangeRate; exports.fetchMultiExchangeRate = _chunkZG5MS2TOjs.fetchMultiExchangeRate;
|
|
10
10
|
//# sourceMappingURL=crypto-compare.js.map
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
var
|
|
5
|
+
var _chunkZG5MS2TOjs = require('../chunk-ZG5MS2TO.js');
|
|
6
6
|
require('../chunk-Z4BLTVTB.js');
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
exports.fetchExchangeRate =
|
|
10
|
+
exports.fetchExchangeRate = _chunkZG5MS2TOjs.fetchExchangeRate; exports.fetchMultiExchangeRate = _chunkZG5MS2TOjs.fetchMultiExchangeRate;
|
|
11
11
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js
CHANGED
|
@@ -1,59 +1,60 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});require('./chunk-OBUR4TXH.js');
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
var _chunkUEDNQBJNjs = require('./chunk-UEDNQBJN.js');
|
|
5
4
|
|
|
5
|
+
var _chunkRPQ737HLjs = require('./chunk-RPQ737HL.js');
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
var _chunkZ6TBQQE5js = require('./chunk-Z6TBQQE5.js');
|
|
9
8
|
|
|
9
|
+
var _chunkV6DNVRODjs = require('./chunk-V6DNVROD.js');
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
|
|
12
|
+
var _chunk2NQRWANMjs = require('./chunk-2NQRWANM.js');
|
|
12
13
|
require('./chunk-XC3SOOGC.js');
|
|
13
14
|
|
|
14
15
|
|
|
15
16
|
|
|
16
|
-
var
|
|
17
|
+
var _chunkF6L3DFOZjs = require('./chunk-F6L3DFOZ.js');
|
|
17
18
|
|
|
18
19
|
|
|
19
|
-
var
|
|
20
|
+
var _chunkHVOIBGYNjs = require('./chunk-HVOIBGYN.js');
|
|
20
21
|
|
|
21
22
|
|
|
22
23
|
|
|
23
24
|
|
|
24
|
-
var
|
|
25
|
-
require('./chunk-
|
|
26
|
-
require('./chunk-
|
|
27
|
-
require('./chunk-
|
|
25
|
+
var _chunkXSNGD5USjs = require('./chunk-XSNGD5US.js');
|
|
26
|
+
require('./chunk-LBJTMJFA.js');
|
|
27
|
+
require('./chunk-6PPM4ETZ.js');
|
|
28
|
+
require('./chunk-JBF4XEGR.js');
|
|
28
29
|
|
|
29
30
|
|
|
30
|
-
var
|
|
31
|
+
var _chunkT5ZX5BV7js = require('./chunk-T5ZX5BV7.js');
|
|
31
32
|
require('./chunk-7K6PSEAA.js');
|
|
32
|
-
require('./chunk-
|
|
33
|
+
require('./chunk-ZG5MS2TO.js');
|
|
33
34
|
|
|
34
35
|
|
|
35
36
|
|
|
36
|
-
var
|
|
37
|
+
var _chunk7JWDWDXTjs = require('./chunk-7JWDWDXT.js');
|
|
37
38
|
|
|
38
39
|
|
|
39
|
-
var
|
|
40
|
+
var _chunk354SINOHjs = require('./chunk-354SINOH.js');
|
|
40
41
|
require('./chunk-RGHTNZQ6.js');
|
|
41
42
|
|
|
42
43
|
|
|
43
|
-
var
|
|
44
|
+
var _chunkNHFZIY2Kjs = require('./chunk-NHFZIY2K.js');
|
|
44
45
|
|
|
45
46
|
|
|
46
|
-
var
|
|
47
|
+
var _chunkGHKGU6GKjs = require('./chunk-GHKGU6GK.js');
|
|
47
48
|
|
|
48
49
|
|
|
49
|
-
var
|
|
50
|
-
require('./chunk-
|
|
50
|
+
var _chunk7OZL6IDYjs = require('./chunk-7OZL6IDY.js');
|
|
51
|
+
require('./chunk-X4RMS365.js');
|
|
51
52
|
|
|
52
53
|
|
|
53
54
|
|
|
54
55
|
|
|
55
56
|
|
|
56
|
-
var
|
|
57
|
+
var _chunkNYVA7ZTQjs = require('./chunk-NYVA7ZTQ.js');
|
|
57
58
|
require('./chunk-Z4BLTVTB.js');
|
|
58
59
|
|
|
59
60
|
|
|
@@ -77,5 +78,6 @@ require('./chunk-Z4BLTVTB.js');
|
|
|
77
78
|
|
|
78
79
|
|
|
79
80
|
|
|
80
|
-
|
|
81
|
+
|
|
82
|
+
exports.AccountTrackerController = _chunkHVOIBGYNjs.AccountTrackerController; exports.AssetsContractController = _chunkXSNGD5USjs.AssetsContractController; exports.CodefiTokenPricesServiceV2 = _chunkV6DNVRODjs.CodefiTokenPricesServiceV2; exports.Cryptocurrency = _chunkF6L3DFOZjs.Cryptocurrency; exports.CurrencyRateController = _chunkT5ZX5BV7js.CurrencyRateController; exports.MISSING_PROVIDER_ERROR = _chunkXSNGD5USjs.MISSING_PROVIDER_ERROR; exports.NftController = _chunk7JWDWDXTjs.NftController; exports.NftDetectionController = _chunk354SINOHjs.NftDetectionController; exports.RatesController = _chunkF6L3DFOZjs.RatesController; exports.SINGLE_CALL_BALANCES_ADDRESS_BY_CHAINID = _chunkXSNGD5USjs.SINGLE_CALL_BALANCES_ADDRESS_BY_CHAINID; exports.SUPPORTED_CHAIN_IDS = _chunkV6DNVRODjs.SUPPORTED_CHAIN_IDS; exports.TokenBalancesController = _chunkNHFZIY2Kjs.TokenBalancesController; exports.TokenDetectionController = _chunkGHKGU6GKjs.TokenDetectionController; exports.TokenListController = _chunk7OZL6IDYjs.TokenListController; exports.TokenRatesController = _chunkRPQ737HLjs.TokenRatesController; exports.TokensController = _chunk2NQRWANMjs.TokensController; exports.fetchTokenContractExchangeRates = _chunkNYVA7ZTQjs.fetchTokenContractExchangeRates; exports.formatIconUrlWithProxy = _chunkNYVA7ZTQjs.formatIconUrlWithProxy; exports.getDefaultNftControllerState = _chunk7JWDWDXTjs.getDefaultNftControllerState; exports.getDefaultTokenRatesControllerState = _chunkRPQ737HLjs.getDefaultTokenRatesControllerState; exports.getFormattedIpfsUrl = _chunkNYVA7ZTQjs.getFormattedIpfsUrl; exports.isTokenDetectionSupportedForNetwork = _chunkNYVA7ZTQjs.isTokenDetectionSupportedForNetwork;
|
|
81
83
|
//# sourceMappingURL=index.js.map
|
package/dist/index.mjs
CHANGED
|
@@ -1,59 +1,60 @@
|
|
|
1
1
|
import "./chunk-27KOXCQK.mjs";
|
|
2
2
|
import {
|
|
3
|
-
TokenRatesController
|
|
4
|
-
|
|
3
|
+
TokenRatesController,
|
|
4
|
+
getDefaultTokenRatesControllerState
|
|
5
|
+
} from "./chunk-GJCTAKK5.mjs";
|
|
5
6
|
import {
|
|
6
7
|
CodefiTokenPricesServiceV2,
|
|
7
8
|
SUPPORTED_CHAIN_IDS
|
|
8
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-XQO3EG4J.mjs";
|
|
9
10
|
import {
|
|
10
11
|
TokensController
|
|
11
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-4JLB5OIJ.mjs";
|
|
12
13
|
import "./chunk-JYHAAA6W.mjs";
|
|
13
14
|
import {
|
|
14
15
|
Cryptocurrency,
|
|
15
16
|
RatesController
|
|
16
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-SBWPU4VT.mjs";
|
|
17
18
|
import {
|
|
18
19
|
AccountTrackerController
|
|
19
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-Z7RMCHD4.mjs";
|
|
20
21
|
import {
|
|
21
22
|
AssetsContractController,
|
|
22
23
|
MISSING_PROVIDER_ERROR,
|
|
23
24
|
SINGLE_CALL_BALANCES_ADDRESS_BY_CHAINID
|
|
24
|
-
} from "./chunk-
|
|
25
|
-
import "./chunk-
|
|
26
|
-
import "./chunk-
|
|
27
|
-
import "./chunk-
|
|
25
|
+
} from "./chunk-TWR6P5WG.mjs";
|
|
26
|
+
import "./chunk-JEIAMJGS.mjs";
|
|
27
|
+
import "./chunk-56O7BVZV.mjs";
|
|
28
|
+
import "./chunk-UYH6NWKB.mjs";
|
|
28
29
|
import {
|
|
29
30
|
CurrencyRateController
|
|
30
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-HJ5GXVDT.mjs";
|
|
31
32
|
import "./chunk-TTH3ES66.mjs";
|
|
32
|
-
import "./chunk-
|
|
33
|
+
import "./chunk-JTXPJ6TK.mjs";
|
|
33
34
|
import {
|
|
34
35
|
NftController,
|
|
35
36
|
getDefaultNftControllerState
|
|
36
|
-
} from "./chunk-
|
|
37
|
+
} from "./chunk-W57QXOHJ.mjs";
|
|
37
38
|
import {
|
|
38
39
|
NftDetectionController
|
|
39
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-2IIQTSLV.mjs";
|
|
40
41
|
import "./chunk-CP3HC7AQ.mjs";
|
|
41
42
|
import {
|
|
42
43
|
TokenBalancesController
|
|
43
|
-
} from "./chunk-
|
|
44
|
+
} from "./chunk-6VQJFTNC.mjs";
|
|
44
45
|
import {
|
|
45
46
|
TokenDetectionController
|
|
46
|
-
} from "./chunk-
|
|
47
|
+
} from "./chunk-2TSAUGE7.mjs";
|
|
47
48
|
import {
|
|
48
49
|
TokenListController
|
|
49
|
-
} from "./chunk-
|
|
50
|
-
import "./chunk-
|
|
50
|
+
} from "./chunk-Y45HQET7.mjs";
|
|
51
|
+
import "./chunk-47CRHAUE.mjs";
|
|
51
52
|
import {
|
|
52
53
|
fetchTokenContractExchangeRates,
|
|
53
54
|
formatIconUrlWithProxy,
|
|
54
55
|
getFormattedIpfsUrl,
|
|
55
56
|
isTokenDetectionSupportedForNetwork
|
|
56
|
-
} from "./chunk-
|
|
57
|
+
} from "./chunk-VELPHITE.mjs";
|
|
57
58
|
import "./chunk-XUI43LEZ.mjs";
|
|
58
59
|
export {
|
|
59
60
|
AccountTrackerController,
|
|
@@ -75,6 +76,7 @@ export {
|
|
|
75
76
|
fetchTokenContractExchangeRates,
|
|
76
77
|
formatIconUrlWithProxy,
|
|
77
78
|
getDefaultNftControllerState,
|
|
79
|
+
getDefaultTokenRatesControllerState,
|
|
78
80
|
getFormattedIpfsUrl,
|
|
79
81
|
isTokenDetectionSupportedForNetwork
|
|
80
82
|
};
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _chunkV6DNVRODjs = require('../chunk-V6DNVROD.js');
|
|
7
7
|
require('../chunk-Z4BLTVTB.js');
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
exports.CodefiTokenPricesServiceV2 =
|
|
13
|
+
exports.CodefiTokenPricesServiceV2 = _chunkV6DNVRODjs.CodefiTokenPricesServiceV2; exports.SUPPORTED_CHAIN_IDS = _chunkV6DNVRODjs.SUPPORTED_CHAIN_IDS; exports.SUPPORTED_CURRENCIES = _chunkV6DNVRODjs.SUPPORTED_CURRENCIES; exports.ZERO_ADDRESS = _chunkV6DNVRODjs.ZERO_ADDRESS;
|
|
14
14
|
//# sourceMappingURL=codefi-v2.js.map
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
var
|
|
5
|
+
var _chunkV6DNVRODjs = require('../chunk-V6DNVROD.js');
|
|
6
6
|
require('../chunk-Z4BLTVTB.js');
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
exports.CodefiTokenPricesServiceV2 =
|
|
10
|
+
exports.CodefiTokenPricesServiceV2 = _chunkV6DNVRODjs.CodefiTokenPricesServiceV2; exports.SUPPORTED_CHAIN_IDS = _chunkV6DNVRODjs.SUPPORTED_CHAIN_IDS;
|
|
11
11
|
//# sourceMappingURL=index.js.map
|
package/dist/token-service.js
CHANGED
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var
|
|
7
|
-
require('./chunk-
|
|
6
|
+
var _chunkX4RMS365js = require('./chunk-X4RMS365.js');
|
|
7
|
+
require('./chunk-NYVA7ZTQ.js');
|
|
8
8
|
require('./chunk-Z4BLTVTB.js');
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
exports.TOKEN_END_POINT_API =
|
|
14
|
+
exports.TOKEN_END_POINT_API = _chunkX4RMS365js.TOKEN_END_POINT_API; exports.TOKEN_METADATA_NO_SUPPORT_ERROR = _chunkX4RMS365js.TOKEN_METADATA_NO_SUPPORT_ERROR; exports.fetchTokenListByChainId = _chunkX4RMS365js.fetchTokenListByChainId; exports.fetchTokenMetadata = _chunkX4RMS365js.fetchTokenMetadata;
|
|
15
15
|
//# sourceMappingURL=token-service.js.map
|