@metamask/assets-controllers 36.0.0 → 38.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 +86 -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 +3 -3
- package/dist/NftDetectionController.mjs +2 -2
- 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 +4 -4
- package/dist/TokenRatesController.mjs +3 -3
- 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-HTIZ4JKG.js → chunk-2TZK6YZA.js} +66 -43
- package/dist/chunk-2TZK6YZA.js.map +1 -0
- package/dist/{chunk-2J3CVSQ5.js → chunk-3LPQTUGG.js} +5 -5
- package/dist/{chunk-7H2V5SW4.mjs → chunk-3QDXAE2D.mjs} +2 -2
- package/dist/{chunk-PPJTMDXC.mjs → chunk-46KUC5FH.mjs} +2 -2
- package/dist/{chunk-K6DUHENW.mjs → chunk-4QZESU46.mjs} +3 -3
- package/dist/chunk-4QZESU46.mjs.map +1 -0
- package/dist/{chunk-B46K3T54.js → chunk-5QLC2MHV.js} +5 -5
- package/dist/{chunk-5IMEJ2FS.mjs → chunk-AX522TDL.mjs} +2 -2
- package/dist/{chunk-62HDABFM.mjs → chunk-AZSIKIMK.mjs} +136 -79
- package/dist/chunk-AZSIKIMK.mjs.map +1 -0
- package/dist/{chunk-Z6NCPTNT.js → chunk-BBCZM5P4.js} +3 -3
- package/dist/{chunk-24HGVPDI.mjs → chunk-BZEAPSD5.mjs} +5 -5
- package/dist/chunk-BZEAPSD5.mjs.map +1 -0
- package/dist/{chunk-RI6LDZPC.mjs → chunk-C7LNCQXM.mjs} +2 -2
- package/dist/{chunk-JTXPJ6TK.mjs → chunk-FWKV5FGP.mjs} +5 -2
- package/dist/chunk-FWKV5FGP.mjs.map +1 -0
- package/dist/{chunk-ZG5MS2TO.js → chunk-GDFLKKDY.js} +5 -2
- package/dist/chunk-GDFLKKDY.js.map +1 -0
- package/dist/{chunk-SBWPU4VT.mjs → chunk-GW6RE66P.mjs} +28 -22
- package/dist/chunk-GW6RE66P.mjs.map +1 -0
- package/dist/{chunk-4U2L56TY.js → chunk-ISK2VSBB.js} +4 -4
- package/dist/{chunk-DOCJ35CC.js → chunk-JCR4H6YL.js} +3 -3
- package/dist/{chunk-6VQJFTNC.mjs → chunk-JJX7TMH5.mjs} +8 -11
- package/dist/chunk-JJX7TMH5.mjs.map +1 -0
- package/dist/{chunk-T5ZX5BV7.js → chunk-JMZ7KWJS.js} +3 -3
- package/dist/{chunk-OJLB6FID.js → chunk-K7A3EOIM.js} +3 -3
- package/dist/{chunk-A7VI64MA.mjs → chunk-KPBNX6GP.mjs} +2 -2
- package/dist/{chunk-IJS7EZU2.js → chunk-LKVWPNXY.js} +139 -82
- package/dist/chunk-LKVWPNXY.js.map +1 -0
- package/dist/{chunk-R4HATJKU.js → chunk-MZI3SDQN.js} +7 -7
- package/dist/chunk-MZI3SDQN.js.map +1 -0
- package/dist/{chunk-TPUVGGNO.js → chunk-NDUMUEE6.js} +11 -12
- package/dist/chunk-NDUMUEE6.js.map +1 -0
- package/dist/{chunk-2YFZGRUL.mjs → chunk-S5CFNNOM.mjs} +2 -2
- package/dist/{chunk-OCV7GPA2.mjs → chunk-SK2B36Q4.mjs} +63 -40
- package/dist/chunk-SK2B36Q4.mjs.map +1 -0
- package/dist/{chunk-ZWZZUFO5.mjs → chunk-TFLYM4PY.mjs} +3 -3
- package/dist/{chunk-F6L3DFOZ.js → chunk-TIFLP53R.js} +29 -23
- package/dist/chunk-TIFLP53R.js.map +1 -0
- package/dist/{chunk-HJ5GXVDT.mjs → chunk-UKXD6WUT.mjs} +2 -2
- package/dist/{chunk-DSDI75PJ.js → chunk-UUF4E7OG.js} +6 -6
- package/dist/chunk-UUF4E7OG.js.map +1 -0
- package/dist/{chunk-RXBDSHHH.mjs → chunk-XMQA5NLX.mjs} +5 -6
- package/dist/chunk-XMQA5NLX.mjs.map +1 -0
- package/dist/{chunk-NHFZIY2K.js → chunk-YGGUAMHV.js} +7 -10
- package/dist/chunk-YGGUAMHV.js.map +1 -0
- package/dist/{chunk-3QLHZOXA.js → chunk-ZAR4BIOC.js} +7 -7
- 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 +17 -19
- package/dist/index.mjs +16 -18
- package/dist/token-service.js +3 -3
- package/dist/token-service.mjs +2 -2
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/types/AssetsContractController.d.ts +94 -56
- package/dist/types/AssetsContractController.d.ts.map +1 -1
- package/dist/types/NftController.d.ts +13 -15
- package/dist/types/NftController.d.ts.map +1 -1
- package/dist/types/RatesController/RatesController.d.ts +2 -2
- package/dist/types/RatesController/RatesController.d.ts.map +1 -1
- package/dist/types/TokenBalancesController.d.ts +6 -8
- package/dist/types/TokenBalancesController.d.ts.map +1 -1
- package/dist/types/TokenRatesController.d.ts +1 -1
- package/dist/types/TokenRatesController.d.ts.map +1 -1
- package/dist/types/TokensController.d.ts +1 -1
- package/dist/types/TokensController.d.ts.map +1 -1
- package/dist/types/assetsUtil.d.ts +3 -3
- 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/package.json +22 -20
- package/dist/chunk-24HGVPDI.mjs.map +0 -1
- package/dist/chunk-62HDABFM.mjs.map +0 -1
- package/dist/chunk-6VQJFTNC.mjs.map +0 -1
- package/dist/chunk-DSDI75PJ.js.map +0 -1
- package/dist/chunk-F6L3DFOZ.js.map +0 -1
- package/dist/chunk-HTIZ4JKG.js.map +0 -1
- package/dist/chunk-IJS7EZU2.js.map +0 -1
- package/dist/chunk-JTXPJ6TK.mjs.map +0 -1
- package/dist/chunk-K6DUHENW.mjs.map +0 -1
- package/dist/chunk-NHFZIY2K.js.map +0 -1
- package/dist/chunk-OCV7GPA2.mjs.map +0 -1
- package/dist/chunk-R4HATJKU.js.map +0 -1
- package/dist/chunk-RXBDSHHH.mjs.map +0 -1
- package/dist/chunk-SBWPU4VT.mjs.map +0 -1
- package/dist/chunk-TPUVGGNO.js.map +0 -1
- package/dist/chunk-ZG5MS2TO.js.map +0 -1
- /package/dist/{chunk-2J3CVSQ5.js.map → chunk-3LPQTUGG.js.map} +0 -0
- /package/dist/{chunk-7H2V5SW4.mjs.map → chunk-3QDXAE2D.mjs.map} +0 -0
- /package/dist/{chunk-PPJTMDXC.mjs.map → chunk-46KUC5FH.mjs.map} +0 -0
- /package/dist/{chunk-B46K3T54.js.map → chunk-5QLC2MHV.js.map} +0 -0
- /package/dist/{chunk-5IMEJ2FS.mjs.map → chunk-AX522TDL.mjs.map} +0 -0
- /package/dist/{chunk-Z6NCPTNT.js.map → chunk-BBCZM5P4.js.map} +0 -0
- /package/dist/{chunk-RI6LDZPC.mjs.map → chunk-C7LNCQXM.mjs.map} +0 -0
- /package/dist/{chunk-4U2L56TY.js.map → chunk-ISK2VSBB.js.map} +0 -0
- /package/dist/{chunk-DOCJ35CC.js.map → chunk-JCR4H6YL.js.map} +0 -0
- /package/dist/{chunk-T5ZX5BV7.js.map → chunk-JMZ7KWJS.js.map} +0 -0
- /package/dist/{chunk-OJLB6FID.js.map → chunk-K7A3EOIM.js.map} +0 -0
- /package/dist/{chunk-A7VI64MA.mjs.map → chunk-KPBNX6GP.mjs.map} +0 -0
- /package/dist/{chunk-2YFZGRUL.mjs.map → chunk-S5CFNNOM.mjs.map} +0 -0
- /package/dist/{chunk-ZWZZUFO5.mjs.map → chunk-TFLYM4PY.mjs.map} +0 -0
- /package/dist/{chunk-HJ5GXVDT.mjs.map → chunk-UKXD6WUT.mjs.map} +0 -0
- /package/dist/{chunk-3QLHZOXA.js.map → chunk-ZAR4BIOC.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/crypto-compare-service/crypto-compare.ts"],"names":[],"mappings":";AAAA,SAAS,mBAAmB;AAM5B,IAAM,wBAAwB,oBAAI,IAAI;AAAA,EACpC,CAAC,OAAO,QAAQ;AAAA,EAChB,CAAC,QAAQ,SAAS;AACpB,CAAC;AAED,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([\n ['MNT', 'MANTLE'],\n ['OMNI', 'OMNINET'],\n]);\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,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
fetchMultiExchangeRate
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-FWKV5FGP.mjs";
|
|
4
4
|
import {
|
|
5
5
|
__privateAdd,
|
|
6
6
|
__privateGet,
|
|
@@ -125,16 +125,18 @@ var RatesController = class extends BaseController {
|
|
|
125
125
|
}
|
|
126
126
|
/**
|
|
127
127
|
* Sets the list of supported cryptocurrencies.
|
|
128
|
-
* @param
|
|
128
|
+
* @param cryptocurrencies - The list of supported cryptocurrencies.
|
|
129
129
|
*/
|
|
130
|
-
async setCryptocurrencyList(
|
|
130
|
+
async setCryptocurrencyList(cryptocurrencies) {
|
|
131
131
|
await __privateMethod(this, _withLock, withLock_fn).call(this, () => {
|
|
132
|
-
this.update(
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
132
|
+
this.update(
|
|
133
|
+
(state) => {
|
|
134
|
+
return {
|
|
135
|
+
...state,
|
|
136
|
+
cryptocurrencies
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
);
|
|
138
140
|
});
|
|
139
141
|
}
|
|
140
142
|
/**
|
|
@@ -146,12 +148,14 @@ var RatesController = class extends BaseController {
|
|
|
146
148
|
throw new Error("The currency can not be an empty string");
|
|
147
149
|
}
|
|
148
150
|
await __privateMethod(this, _withLock, withLock_fn).call(this, () => {
|
|
149
|
-
this.update(
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
151
|
+
this.update(
|
|
152
|
+
(state) => {
|
|
153
|
+
return {
|
|
154
|
+
...state,
|
|
155
|
+
fiatCurrency
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
);
|
|
155
159
|
});
|
|
156
160
|
await __privateMethod(this, _updateRates, updateRates_fn).call(this);
|
|
157
161
|
}
|
|
@@ -187,12 +191,14 @@ updateRates_fn = async function() {
|
|
|
187
191
|
...__privateGet(this, _includeUsdRate) && { usdConversionRate: values.usd }
|
|
188
192
|
};
|
|
189
193
|
}
|
|
190
|
-
this.update(
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
194
|
+
this.update(
|
|
195
|
+
(state) => {
|
|
196
|
+
return {
|
|
197
|
+
...state,
|
|
198
|
+
rates: updatedRates
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
);
|
|
196
202
|
});
|
|
197
203
|
};
|
|
198
204
|
|
|
@@ -201,4 +207,4 @@ export {
|
|
|
201
207
|
Cryptocurrency,
|
|
202
208
|
RatesController
|
|
203
209
|
};
|
|
204
|
-
//# sourceMappingURL=chunk-
|
|
210
|
+
//# sourceMappingURL=chunk-GW6RE66P.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/RatesController/RatesController.ts"],"sourcesContent":["import { BaseController } from '@metamask/base-controller';\nimport { Mutex } from 'async-mutex';\nimport type { Draft } from 'immer';\n\nimport { fetchMultiExchangeRate as defaultFetchExchangeRate } from '../crypto-compare-service';\nimport type {\n ConversionRates,\n RatesControllerState,\n RatesControllerOptions,\n RatesControllerMessenger,\n} from './types';\n\nexport const name = 'RatesController';\n\nexport enum Cryptocurrency {\n Btc = 'btc',\n}\n\nconst DEFAULT_INTERVAL = 180000;\n\nconst metadata = {\n fiatCurrency: { persist: true, anonymous: true },\n rates: { persist: true, anonymous: true },\n cryptocurrencies: { persist: true, anonymous: true },\n};\n\nconst defaultState = {\n fiatCurrency: 'usd',\n rates: {\n [Cryptocurrency.Btc]: {\n conversionDate: 0,\n conversionRate: '0',\n },\n },\n cryptocurrencies: [Cryptocurrency.Btc],\n};\n\nexport class RatesController extends BaseController<\n typeof name,\n RatesControllerState,\n RatesControllerMessenger\n> {\n readonly #mutex = new Mutex();\n\n readonly #fetchMultiExchangeRate;\n\n readonly #includeUsdRate;\n\n #intervalLength: number;\n\n #intervalId: NodeJS.Timeout | undefined;\n\n /**\n * Creates a RatesController instance.\n *\n * @param options - Constructor options.\n * @param options.includeUsdRate - Keep track of the USD rate in addition to the current currency rate.\n * @param options.interval - The polling interval, in milliseconds.\n * @param options.messenger - A reference to the messaging system.\n * @param options.state - Initial state to set on this controller.\n * @param options.fetchMultiExchangeRate - Fetches the exchange rate from an external API. This option is primarily meant for use in unit tests.\n */\n constructor({\n interval = DEFAULT_INTERVAL,\n messenger,\n state,\n includeUsdRate,\n fetchMultiExchangeRate = defaultFetchExchangeRate,\n }: RatesControllerOptions) {\n super({\n name,\n metadata,\n messenger,\n state: { ...defaultState, ...state },\n });\n this.#includeUsdRate = includeUsdRate;\n this.#fetchMultiExchangeRate = fetchMultiExchangeRate;\n this.#intervalLength = interval;\n }\n\n /**\n * Executes a function `callback` within a mutex lock to ensure that only one instance of `callback` runs at a time across all invocations of `#withLock`.\n * This method is useful for synchronizing access to a resource or section of code that should not be executed concurrently.\n *\n * @template R - The return type of the function `callback`.\n * @param callback - A callback to execute once the lock is acquired. This callback can be synchronous or asynchronous.\n * @returns A promise that resolves to the result of the function `callback`. The promise is fulfilled once `callback` has completed execution.\n * @example\n * async function criticalLogic() {\n * // Critical logic code goes here.\n * }\n *\n * // Execute criticalLogic within a lock.\n * const result = await this.#withLock(criticalLogic);\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\n async #withLock<R>(callback: () => R) {\n const releaseLock = await this.#mutex.acquire();\n try {\n return callback();\n } finally {\n releaseLock();\n }\n }\n\n /**\n * Executes the polling operation to update rates.\n */\n async #executePoll(): Promise<void> {\n await this.#updateRates();\n }\n\n /**\n * Updates the rates by fetching new data.\n */\n async #updateRates(): Promise<void> {\n await this.#withLock(async () => {\n const { fiatCurrency, cryptocurrencies } = this.state;\n const response: Record<\n Cryptocurrency,\n Record<string, string>\n > = await this.#fetchMultiExchangeRate(\n fiatCurrency,\n cryptocurrencies,\n this.#includeUsdRate,\n );\n\n const updatedRates: ConversionRates = {};\n for (const [cryptocurrency, values] of Object.entries(response)) {\n updatedRates[cryptocurrency] = {\n conversionDate: Date.now(),\n conversionRate: values[fiatCurrency],\n ...(this.#includeUsdRate && { usdConversionRate: values.usd }),\n };\n }\n\n this.update(\n (state: Draft<RatesControllerState>): RatesControllerState => {\n return {\n ...state,\n rates: updatedRates,\n };\n },\n );\n });\n }\n\n /**\n * Starts the polling process.\n */\n async start(): Promise<void> {\n if (this.#intervalId) {\n return;\n }\n\n this.messagingSystem.publish(`${name}:pollingStarted`);\n\n this.#intervalId = setInterval(() => {\n this.#executePoll().catch(console.error);\n }, this.#intervalLength);\n }\n\n /**\n * Stops the polling process.\n */\n async stop(): Promise<void> {\n if (!this.#intervalId) {\n return;\n }\n\n clearInterval(this.#intervalId);\n this.#intervalId = undefined;\n this.messagingSystem.publish(`${name}:pollingStopped`);\n }\n\n /**\n * Returns the current list of cryptocurrency.\n * @returns The cryptocurrency list.\n */\n getCryptocurrencyList(): Cryptocurrency[] {\n const { cryptocurrencies } = this.state;\n return cryptocurrencies;\n }\n\n /**\n * Sets the list of supported cryptocurrencies.\n * @param cryptocurrencies - The list of supported cryptocurrencies.\n */\n async setCryptocurrencyList(\n cryptocurrencies: Cryptocurrency[],\n ): Promise<void> {\n await this.#withLock(() => {\n this.update(\n (state: Draft<RatesControllerState>): RatesControllerState => {\n return {\n ...state,\n cryptocurrencies,\n };\n },\n );\n });\n }\n\n /**\n * Sets the internal fiat currency and update rates accordingly.\n * @param fiatCurrency - The fiat currency.\n */\n async setFiatCurrency(fiatCurrency: string): Promise<void> {\n if (fiatCurrency === '') {\n throw new Error('The currency can not be an empty string');\n }\n\n await this.#withLock(() => {\n this.update(\n (state: Draft<RatesControllerState>): RatesControllerState => {\n return {\n ...state,\n fiatCurrency,\n };\n },\n );\n });\n await this.#updateRates();\n }\n}\n"],"mappings":"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","names":["Cryptocurrency","fetchMultiExchangeRate"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkMZI3SDQNjs = require('./chunk-MZI3SDQN.js');
|
|
4
4
|
|
|
5
5
|
// src/Standards/NftStandards/ERC721/ERC721Standard.ts
|
|
6
6
|
var _contracts = require('@ethersproject/contracts');
|
|
@@ -133,7 +133,7 @@ var ERC721Standard = class {
|
|
|
133
133
|
_controllerutils.safelyExecute.call(void 0, () => this.getAssetName(address)),
|
|
134
134
|
tokenId ? _controllerutils.safelyExecute.call(void 0,
|
|
135
135
|
() => this.getTokenURI(address, tokenId).then(
|
|
136
|
-
(uri) => uri.startsWith("ipfs://") ?
|
|
136
|
+
(uri) => uri.startsWith("ipfs://") ? _chunkMZI3SDQNjs.getFormattedIpfsUrl.call(void 0, ipfsGateway, uri, true) : uri
|
|
137
137
|
)
|
|
138
138
|
) : void 0
|
|
139
139
|
]);
|
|
@@ -144,7 +144,7 @@ var ERC721Standard = class {
|
|
|
144
144
|
const object = await response.json();
|
|
145
145
|
image = object?.image;
|
|
146
146
|
if (image?.startsWith("ipfs://")) {
|
|
147
|
-
image =
|
|
147
|
+
image = _chunkMZI3SDQNjs.getFormattedIpfsUrl.call(void 0, ipfsGateway, image, true);
|
|
148
148
|
}
|
|
149
149
|
} catch {
|
|
150
150
|
}
|
|
@@ -175,4 +175,4 @@ var ERC721Standard = class {
|
|
|
175
175
|
|
|
176
176
|
|
|
177
177
|
exports.ERC721Standard = ERC721Standard;
|
|
178
|
-
//# sourceMappingURL=chunk-
|
|
178
|
+
//# sourceMappingURL=chunk-ISK2VSBB.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkMZI3SDQNjs = require('./chunk-MZI3SDQN.js');
|
|
4
4
|
|
|
5
5
|
// src/Standards/ERC20Standard.ts
|
|
6
6
|
var _util = require('@ethereumjs/util');
|
|
@@ -23,7 +23,7 @@ var ERC20Standard = class {
|
|
|
23
23
|
async getBalanceOf(address, selectedAddress) {
|
|
24
24
|
const contract = new (0, _contracts.Contract)(address, _metamaskethabis.abiERC20, this.provider);
|
|
25
25
|
const balance = await contract.balanceOf(selectedAddress);
|
|
26
|
-
return
|
|
26
|
+
return _chunkMZI3SDQNjs.ethersBigNumberToBN.call(void 0, balance);
|
|
27
27
|
}
|
|
28
28
|
/**
|
|
29
29
|
* Query for the decimals for a given ERC20 asset.
|
|
@@ -112,4 +112,4 @@ var ERC20Standard = class {
|
|
|
112
112
|
|
|
113
113
|
|
|
114
114
|
exports.ERC20Standard = ERC20Standard;
|
|
115
|
-
//# sourceMappingURL=chunk-
|
|
115
|
+
//# sourceMappingURL=chunk-JCR4H6YL.js.map
|
|
@@ -5,9 +5,7 @@ import {
|
|
|
5
5
|
} from "./chunk-XUI43LEZ.mjs";
|
|
6
6
|
|
|
7
7
|
// src/TokenBalancesController.ts
|
|
8
|
-
import {
|
|
9
|
-
BaseController
|
|
10
|
-
} from "@metamask/base-controller";
|
|
8
|
+
import { BaseController } from "@metamask/base-controller";
|
|
11
9
|
import { safelyExecute, toHex } from "@metamask/controller-utils";
|
|
12
10
|
var DEFAULT_INTERVAL = 18e4;
|
|
13
11
|
var controllerName = "TokenBalancesController";
|
|
@@ -19,7 +17,7 @@ function getDefaultTokenBalancesState() {
|
|
|
19
17
|
contractBalances: {}
|
|
20
18
|
};
|
|
21
19
|
}
|
|
22
|
-
var _handle,
|
|
20
|
+
var _handle, _interval, _tokens, _disabled;
|
|
23
21
|
var TokenBalancesController = class extends BaseController {
|
|
24
22
|
/**
|
|
25
23
|
* Construct a Token Balances Controller.
|
|
@@ -28,7 +26,6 @@ var TokenBalancesController = class extends BaseController {
|
|
|
28
26
|
* @param options.interval - Polling interval used to fetch new token balances.
|
|
29
27
|
* @param options.tokens - List of tokens to track balances for.
|
|
30
28
|
* @param options.disabled - If set to true, all tracked tokens contract balances updates are blocked.
|
|
31
|
-
* @param options.getERC20BalanceOf - Gets the balance of the given account at the given contract address.
|
|
32
29
|
* @param options.state - Initial state to set on this controller.
|
|
33
30
|
* @param options.messenger - The controller restricted messenger.
|
|
34
31
|
*/
|
|
@@ -36,7 +33,6 @@ var TokenBalancesController = class extends BaseController {
|
|
|
36
33
|
interval = DEFAULT_INTERVAL,
|
|
37
34
|
tokens = [],
|
|
38
35
|
disabled = false,
|
|
39
|
-
getERC20BalanceOf,
|
|
40
36
|
messenger,
|
|
41
37
|
state = {}
|
|
42
38
|
}) {
|
|
@@ -50,7 +46,6 @@ var TokenBalancesController = class extends BaseController {
|
|
|
50
46
|
}
|
|
51
47
|
});
|
|
52
48
|
__privateAdd(this, _handle, void 0);
|
|
53
|
-
__privateAdd(this, _getERC20BalanceOf, void 0);
|
|
54
49
|
__privateAdd(this, _interval, void 0);
|
|
55
50
|
__privateAdd(this, _tokens, void 0);
|
|
56
51
|
__privateAdd(this, _disabled, void 0);
|
|
@@ -64,7 +59,6 @@ var TokenBalancesController = class extends BaseController {
|
|
|
64
59
|
this.updateBalances();
|
|
65
60
|
}
|
|
66
61
|
);
|
|
67
|
-
__privateSet(this, _getERC20BalanceOf, getERC20BalanceOf);
|
|
68
62
|
this.poll();
|
|
69
63
|
}
|
|
70
64
|
/**
|
|
@@ -110,7 +104,11 @@ var TokenBalancesController = class extends BaseController {
|
|
|
110
104
|
for (const token of __privateGet(this, _tokens)) {
|
|
111
105
|
const { address } = token;
|
|
112
106
|
try {
|
|
113
|
-
const balance = await
|
|
107
|
+
const balance = await this.messagingSystem.call(
|
|
108
|
+
"AssetsContractController:getERC20BalanceOf",
|
|
109
|
+
address,
|
|
110
|
+
selectedInternalAccount.address
|
|
111
|
+
);
|
|
114
112
|
newContractBalances[address] = toHex(balance);
|
|
115
113
|
token.hasBalanceError = false;
|
|
116
114
|
} catch (error) {
|
|
@@ -124,7 +122,6 @@ var TokenBalancesController = class extends BaseController {
|
|
|
124
122
|
}
|
|
125
123
|
};
|
|
126
124
|
_handle = new WeakMap();
|
|
127
|
-
_getERC20BalanceOf = new WeakMap();
|
|
128
125
|
_interval = new WeakMap();
|
|
129
126
|
_tokens = new WeakMap();
|
|
130
127
|
_disabled = new WeakMap();
|
|
@@ -135,4 +132,4 @@ export {
|
|
|
135
132
|
TokenBalancesController,
|
|
136
133
|
TokenBalancesController_default
|
|
137
134
|
};
|
|
138
|
-
//# sourceMappingURL=chunk-
|
|
135
|
+
//# sourceMappingURL=chunk-JJX7TMH5.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/TokenBalancesController.ts"],"sourcesContent":["import type { AccountsControllerGetSelectedAccountAction } from '@metamask/accounts-controller';\nimport type {\n RestrictedControllerMessenger,\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n} from '@metamask/base-controller';\nimport { BaseController } from '@metamask/base-controller';\nimport { safelyExecute, toHex } from '@metamask/controller-utils';\n\nimport type { AssetsContractControllerGetERC20BalanceOfAction } from './AssetsContractController';\nimport type { Token } from './TokenRatesController';\nimport type { TokensControllerStateChangeEvent } from './TokensController';\n\nconst DEFAULT_INTERVAL = 180000;\n\nconst controllerName = 'TokenBalancesController';\n\nconst metadata = {\n contractBalances: { persist: true, anonymous: false },\n};\n\n/**\n * Token balances controller options\n * @property interval - Polling interval used to fetch new token balances.\n * @property tokens - List of tokens to track balances for.\n * @property disabled - If set to true, all tracked tokens contract balances updates are blocked.\n */\ntype TokenBalancesControllerOptions = {\n interval?: number;\n tokens?: Token[];\n disabled?: boolean;\n messenger: TokenBalancesControllerMessenger;\n state?: Partial<TokenBalancesControllerState>;\n};\n\n/**\n * Represents a mapping of hash token contract addresses to their balances.\n */\ntype ContractBalances = Record<string, string>;\n\n/**\n * Token balances controller state\n * @property contractBalances - Hash of token contract addresses to balances\n */\nexport type TokenBalancesControllerState = {\n contractBalances: ContractBalances;\n};\n\nexport type TokenBalancesControllerGetStateAction = ControllerGetStateAction<\n typeof controllerName,\n TokenBalancesControllerState\n>;\n\nexport type TokenBalancesControllerActions =\n TokenBalancesControllerGetStateAction;\n\nexport type AllowedActions =\n | AccountsControllerGetSelectedAccountAction\n | AssetsContractControllerGetERC20BalanceOfAction;\n\nexport type TokenBalancesControllerStateChangeEvent =\n ControllerStateChangeEvent<\n typeof controllerName,\n TokenBalancesControllerState\n >;\n\nexport type TokenBalancesControllerEvents =\n TokenBalancesControllerStateChangeEvent;\n\nexport type AllowedEvents = TokensControllerStateChangeEvent;\n\nexport type TokenBalancesControllerMessenger = RestrictedControllerMessenger<\n typeof controllerName,\n TokenBalancesControllerActions | AllowedActions,\n TokenBalancesControllerEvents | AllowedEvents,\n AllowedActions['type'],\n AllowedEvents['type']\n>;\n\n/**\n * Get the default TokenBalancesController state.\n *\n * @returns The default TokenBalancesController state.\n */\nexport function getDefaultTokenBalancesState(): TokenBalancesControllerState {\n return {\n contractBalances: {},\n };\n}\n\n/**\n * Controller that passively polls on a set interval token balances\n * for tokens stored in the TokensController\n */\nexport class TokenBalancesController extends BaseController<\n typeof controllerName,\n TokenBalancesControllerState,\n TokenBalancesControllerMessenger\n> {\n #handle?: ReturnType<typeof setTimeout>;\n\n #interval: number;\n\n #tokens: Token[];\n\n #disabled: boolean;\n\n /**\n * Construct a Token Balances Controller.\n *\n * @param options - The controller options.\n * @param options.interval - Polling interval used to fetch new token balances.\n * @param options.tokens - List of tokens to track balances for.\n * @param options.disabled - If set to true, all tracked tokens contract balances updates are blocked.\n * @param options.state - Initial state to set on this controller.\n * @param options.messenger - The controller restricted messenger.\n */\n constructor({\n interval = DEFAULT_INTERVAL,\n tokens = [],\n disabled = false,\n messenger,\n state = {},\n }: TokenBalancesControllerOptions) {\n super({\n name: controllerName,\n metadata,\n messenger,\n state: {\n ...getDefaultTokenBalancesState(),\n ...state,\n },\n });\n\n this.#disabled = disabled;\n this.#interval = interval;\n this.#tokens = tokens;\n\n this.messagingSystem.subscribe(\n 'TokensController:stateChange',\n ({ tokens: newTokens, detectedTokens }) => {\n this.#tokens = [...newTokens, ...detectedTokens];\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.updateBalances();\n },\n );\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\n /**\n * Allows controller to update tracked tokens contract balances.\n */\n enable() {\n this.#disabled = false;\n }\n\n /**\n * Blocks controller from updating tracked tokens contract balances.\n */\n disable() {\n this.#disabled = true;\n }\n\n /**\n * Starts a new polling interval.\n *\n * @param interval - Polling interval used to fetch new token balances.\n */\n async poll(interval?: number): Promise<void> {\n if (interval) {\n this.#interval = interval;\n }\n\n if (this.#handle) {\n clearTimeout(this.#handle);\n }\n\n await safelyExecute(() => this.updateBalances());\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.#interval);\n }, this.#interval);\n }\n\n /**\n * Updates balances for all tokens.\n */\n async updateBalances() {\n if (this.#disabled) {\n return;\n }\n const selectedInternalAccount = this.messagingSystem.call(\n 'AccountsController:getSelectedAccount',\n );\n\n const newContractBalances: ContractBalances = {};\n for (const token of this.#tokens) {\n const { address } = token;\n try {\n const balance = await this.messagingSystem.call(\n 'AssetsContractController:getERC20BalanceOf',\n address,\n selectedInternalAccount.address,\n );\n newContractBalances[address] = toHex(balance);\n token.hasBalanceError = false;\n } catch (error) {\n newContractBalances[address] = toHex(0);\n token.hasBalanceError = true;\n }\n }\n\n this.update((state) => {\n state.contractBalances = newContractBalances;\n });\n }\n}\n\nexport default TokenBalancesController;\n"],"mappings":";;;;;;;AAMA,SAAS,sBAAsB;AAC/B,SAAS,eAAe,aAAa;AAMrC,IAAM,mBAAmB;AAEzB,IAAM,iBAAiB;AAEvB,IAAM,WAAW;AAAA,EACf,kBAAkB,EAAE,SAAS,MAAM,WAAW,MAAM;AACtD;AAiEO,SAAS,+BAA6D;AAC3E,SAAO;AAAA,IACL,kBAAkB,CAAC;AAAA,EACrB;AACF;AAxFA;AA8FO,IAAM,0BAAN,cAAsC,eAI3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBA,YAAY;AAAA,IACV,WAAW;AAAA,IACX,SAAS,CAAC;AAAA,IACV,WAAW;AAAA,IACX;AAAA,IACA,QAAQ,CAAC;AAAA,EACX,GAAmC;AACjC,UAAM;AAAA,MACJ,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA,OAAO;AAAA,QACL,GAAG,6BAA6B;AAAA,QAChC,GAAG;AAAA,MACL;AAAA,IACF,CAAC;AAjCH;AAEA;AAEA;AAEA;AA6BE,uBAAK,WAAY;AACjB,uBAAK,WAAY;AACjB,uBAAK,SAAU;AAEf,SAAK,gBAAgB;AAAA,MACnB;AAAA,MACA,CAAC,EAAE,QAAQ,WAAW,eAAe,MAAM;AACzC,2BAAK,SAAU,CAAC,GAAG,WAAW,GAAG,cAAc;AAG/C,aAAK,eAAe;AAAA,MACtB;AAAA,IACF;AAIA,SAAK,KAAK;AAAA,EACZ;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS;AACP,uBAAK,WAAY;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU;AACR,uBAAK,WAAY;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,KAAK,UAAkC;AAC3C,QAAI,UAAU;AACZ,yBAAK,WAAY;AAAA,IACnB;AAEA,QAAI,mBAAK,UAAS;AAChB,mBAAa,mBAAK,QAAO;AAAA,IAC3B;AAEA,UAAM,cAAc,MAAM,KAAK,eAAe,CAAC;AAE/C,uBAAK,SAAU,WAAW,MAAM;AAG9B,WAAK,KAAK,mBAAK,UAAS;AAAA,IAC1B,GAAG,mBAAK,UAAS;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAiB;AACrB,QAAI,mBAAK,YAAW;AAClB;AAAA,IACF;AACA,UAAM,0BAA0B,KAAK,gBAAgB;AAAA,MACnD;AAAA,IACF;AAEA,UAAM,sBAAwC,CAAC;AAC/C,eAAW,SAAS,mBAAK,UAAS;AAChC,YAAM,EAAE,QAAQ,IAAI;AACpB,UAAI;AACF,cAAM,UAAU,MAAM,KAAK,gBAAgB;AAAA,UACzC;AAAA,UACA;AAAA,UACA,wBAAwB;AAAA,QAC1B;AACA,4BAAoB,OAAO,IAAI,MAAM,OAAO;AAC5C,cAAM,kBAAkB;AAAA,MAC1B,SAAS,OAAO;AACd,4BAAoB,OAAO,IAAI,MAAM,CAAC;AACtC,cAAM,kBAAkB;AAAA,MAC1B;AAAA,IACF;AAEA,SAAK,OAAO,CAAC,UAAU;AACrB,YAAM,mBAAmB;AAAA,IAC3B,CAAC;AAAA,EACH;AACF;AA3HE;AAEA;AAEA;AAEA;AAuHF,IAAO,kCAAQ;","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkGDFLKKDYjs = require('./chunk-GDFLKKDY.js');
|
|
4
4
|
|
|
5
5
|
// src/CurrencyRateController.ts
|
|
6
6
|
|
|
@@ -40,7 +40,7 @@ var CurrencyRateController = class extends _pollingcontroller.StaticIntervalPoll
|
|
|
40
40
|
interval = 18e4,
|
|
41
41
|
messenger,
|
|
42
42
|
state,
|
|
43
|
-
fetchExchangeRate: fetchExchangeRate2 =
|
|
43
|
+
fetchExchangeRate: fetchExchangeRate2 = _chunkGDFLKKDYjs.fetchExchangeRate
|
|
44
44
|
}) {
|
|
45
45
|
super({
|
|
46
46
|
name,
|
|
@@ -154,4 +154,4 @@ var CurrencyRateController_default = CurrencyRateController;
|
|
|
154
154
|
|
|
155
155
|
|
|
156
156
|
exports.CurrencyRateController = CurrencyRateController; exports.CurrencyRateController_default = CurrencyRateController_default;
|
|
157
|
-
//# sourceMappingURL=chunk-
|
|
157
|
+
//# sourceMappingURL=chunk-JMZ7KWJS.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkMZI3SDQNjs = require('./chunk-MZI3SDQN.js');
|
|
4
4
|
|
|
5
5
|
// src/token-service.ts
|
|
6
6
|
|
|
@@ -38,7 +38,7 @@ async function fetchTokenListByChainId(chainId, abortSignal, { timeout = default
|
|
|
38
38
|
return void 0;
|
|
39
39
|
}
|
|
40
40
|
async function fetchTokenMetadata(chainId, tokenAddress, abortSignal, { timeout = defaultTimeout } = {}) {
|
|
41
|
-
if (!
|
|
41
|
+
if (!_chunkMZI3SDQNjs.isTokenListSupportedForNetwork.call(void 0, chainId)) {
|
|
42
42
|
throw new Error(TOKEN_METADATA_NO_SUPPORT_ERROR);
|
|
43
43
|
}
|
|
44
44
|
const tokenMetadataURL = getTokenMetadataURL(chainId, tokenAddress);
|
|
@@ -82,4 +82,4 @@ async function parseJsonResponse(apiResponse) {
|
|
|
82
82
|
|
|
83
83
|
|
|
84
84
|
exports.TOKEN_END_POINT_API = TOKEN_END_POINT_API; exports.TOKEN_METADATA_NO_SUPPORT_ERROR = TOKEN_METADATA_NO_SUPPORT_ERROR; exports.fetchTokenListByChainId = fetchTokenListByChainId; exports.fetchTokenMetadata = fetchTokenMetadata;
|
|
85
|
-
//# sourceMappingURL=chunk-
|
|
85
|
+
//# sourceMappingURL=chunk-K7A3EOIM.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ethersBigNumberToBN,
|
|
3
3
|
getFormattedIpfsUrl
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-BZEAPSD5.mjs";
|
|
5
5
|
|
|
6
6
|
// src/Standards/NftStandards/ERC1155/ERC1155Standard.ts
|
|
7
7
|
import { Contract } from "@ethersproject/contracts";
|
|
@@ -212,4 +212,4 @@ var ERC1155Standard = class {
|
|
|
212
212
|
export {
|
|
213
213
|
ERC1155Standard
|
|
214
214
|
};
|
|
215
|
-
//# sourceMappingURL=chunk-
|
|
215
|
+
//# sourceMappingURL=chunk-KPBNX6GP.mjs.map
|