@metamask/assets-controller 5.0.1 → 6.1.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.
Files changed (78) hide show
  1. package/CHANGELOG.md +54 -1
  2. package/dist/AssetsController.cjs +172 -45
  3. package/dist/AssetsController.cjs.map +1 -1
  4. package/dist/AssetsController.d.cts +12 -4
  5. package/dist/AssetsController.d.cts.map +1 -1
  6. package/dist/AssetsController.d.mts +12 -4
  7. package/dist/AssetsController.d.mts.map +1 -1
  8. package/dist/AssetsController.mjs +173 -46
  9. package/dist/AssetsController.mjs.map +1 -1
  10. package/dist/data-sources/BackendWebsocketDataSource.cjs +48 -30
  11. package/dist/data-sources/BackendWebsocketDataSource.cjs.map +1 -1
  12. package/dist/data-sources/BackendWebsocketDataSource.d.cts +3 -1
  13. package/dist/data-sources/BackendWebsocketDataSource.d.cts.map +1 -1
  14. package/dist/data-sources/BackendWebsocketDataSource.d.mts +3 -1
  15. package/dist/data-sources/BackendWebsocketDataSource.d.mts.map +1 -1
  16. package/dist/data-sources/BackendWebsocketDataSource.mjs +48 -30
  17. package/dist/data-sources/BackendWebsocketDataSource.mjs.map +1 -1
  18. package/dist/data-sources/RpcDataSource.cjs +26 -8
  19. package/dist/data-sources/RpcDataSource.cjs.map +1 -1
  20. package/dist/data-sources/RpcDataSource.d.cts +8 -3
  21. package/dist/data-sources/RpcDataSource.d.cts.map +1 -1
  22. package/dist/data-sources/RpcDataSource.d.mts +8 -3
  23. package/dist/data-sources/RpcDataSource.d.mts.map +1 -1
  24. package/dist/data-sources/RpcDataSource.mjs +26 -8
  25. package/dist/data-sources/RpcDataSource.mjs.map +1 -1
  26. package/dist/data-sources/TokenDataSource.cjs +27 -12
  27. package/dist/data-sources/TokenDataSource.cjs.map +1 -1
  28. package/dist/data-sources/TokenDataSource.d.cts.map +1 -1
  29. package/dist/data-sources/TokenDataSource.d.mts.map +1 -1
  30. package/dist/data-sources/TokenDataSource.mjs +27 -12
  31. package/dist/data-sources/TokenDataSource.mjs.map +1 -1
  32. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.cjs +8 -0
  33. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.cjs.map +1 -1
  34. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.d.cts.map +1 -1
  35. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.d.mts.map +1 -1
  36. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.mjs +8 -0
  37. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.mjs.map +1 -1
  38. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.cjs +8 -6
  39. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.cjs.map +1 -1
  40. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.d.cts +4 -2
  41. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.d.cts.map +1 -1
  42. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.d.mts +4 -2
  43. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.d.mts.map +1 -1
  44. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.mjs +8 -6
  45. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.mjs.map +1 -1
  46. package/dist/utils/formatExchangeRatesForBridge.cjs +10 -8
  47. package/dist/utils/formatExchangeRatesForBridge.cjs.map +1 -1
  48. package/dist/utils/formatExchangeRatesForBridge.d.cts +5 -3
  49. package/dist/utils/formatExchangeRatesForBridge.d.cts.map +1 -1
  50. package/dist/utils/formatExchangeRatesForBridge.d.mts +5 -3
  51. package/dist/utils/formatExchangeRatesForBridge.d.mts.map +1 -1
  52. package/dist/utils/formatExchangeRatesForBridge.mjs +11 -9
  53. package/dist/utils/formatExchangeRatesForBridge.mjs.map +1 -1
  54. package/dist/utils/formatStateForTransactionPay.cjs +8 -6
  55. package/dist/utils/formatStateForTransactionPay.cjs.map +1 -1
  56. package/dist/utils/formatStateForTransactionPay.d.cts +2 -2
  57. package/dist/utils/formatStateForTransactionPay.d.cts.map +1 -1
  58. package/dist/utils/formatStateForTransactionPay.d.mts +2 -2
  59. package/dist/utils/formatStateForTransactionPay.d.mts.map +1 -1
  60. package/dist/utils/formatStateForTransactionPay.mjs +8 -6
  61. package/dist/utils/formatStateForTransactionPay.mjs.map +1 -1
  62. package/dist/utils/index.cjs +4 -1
  63. package/dist/utils/index.cjs.map +1 -1
  64. package/dist/utils/index.d.cts +1 -0
  65. package/dist/utils/index.d.cts.map +1 -1
  66. package/dist/utils/index.d.mts +1 -0
  67. package/dist/utils/index.d.mts.map +1 -1
  68. package/dist/utils/index.mjs +1 -0
  69. package/dist/utils/index.mjs.map +1 -1
  70. package/dist/utils/native-assets.cjs +63 -0
  71. package/dist/utils/native-assets.cjs.map +1 -0
  72. package/dist/utils/native-assets.d.cts +19 -0
  73. package/dist/utils/native-assets.d.cts.map +1 -0
  74. package/dist/utils/native-assets.d.mts +19 -0
  75. package/dist/utils/native-assets.d.mts.map +1 -0
  76. package/dist/utils/native-assets.mjs +58 -0
  77. package/dist/utils/native-assets.mjs.map +1 -0
  78. package/package.json +11 -10
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;AAAA,2DAAsD;AAA7C,oHAAA,gBAAgB,OAAA;AACzB,mFAA8E;AAArE,4IAAA,4BAA4B,OAAA;AACrC,mFAA8E;AAArE,4IAAA,4BAA4B,OAAA","sourcesContent":["export { normalizeAssetId } from './normalizeAssetId';\nexport { formatExchangeRatesForBridge } from './formatExchangeRatesForBridge';\nexport { formatStateForTransactionPay } from './formatStateForTransactionPay';\nexport type { BridgeExchangeRatesFormat } from './formatExchangeRatesForBridge';\nexport type {\n AccountForLegacyFormat,\n LegacyToken,\n TransactionPayLegacyFormat,\n} from './formatStateForTransactionPay';\n"]}
1
+ {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;AAAA,2DAAsD;AAA7C,oHAAA,gBAAgB,OAAA;AACzB,mFAA8E;AAArE,4IAAA,4BAA4B,OAAA;AACrC,mFAA8E;AAArE,4IAAA,4BAA4B,OAAA;AAOrC,qDAGyB;AAFvB,8HAAA,6BAA6B,OAAA;AAC7B,yHAAA,wBAAwB,OAAA","sourcesContent":["export { normalizeAssetId } from './normalizeAssetId';\nexport { formatExchangeRatesForBridge } from './formatExchangeRatesForBridge';\nexport { formatStateForTransactionPay } from './formatStateForTransactionPay';\nexport type { BridgeExchangeRatesFormat } from './formatExchangeRatesForBridge';\nexport type {\n AccountForLegacyFormat,\n LegacyToken,\n TransactionPayLegacyFormat,\n} from './formatStateForTransactionPay';\nexport {\n buildNativeAssetsFromConstant,\n buildNativeAssetsFromApi,\n} from './native-assets';\n"]}
@@ -3,4 +3,5 @@ export { formatExchangeRatesForBridge } from "./formatExchangeRatesForBridge.cjs
3
3
  export { formatStateForTransactionPay } from "./formatStateForTransactionPay.cjs";
4
4
  export type { BridgeExchangeRatesFormat } from "./formatExchangeRatesForBridge.cjs";
5
5
  export type { AccountForLegacyFormat, LegacyToken, TransactionPayLegacyFormat, } from "./formatStateForTransactionPay.cjs";
6
+ export { buildNativeAssetsFromConstant, buildNativeAssetsFromApi, } from "./native-assets.cjs";
6
7
  //# sourceMappingURL=index.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,+BAA2B;AACtD,OAAO,EAAE,4BAA4B,EAAE,2CAAuC;AAC9E,OAAO,EAAE,4BAA4B,EAAE,2CAAuC;AAC9E,YAAY,EAAE,yBAAyB,EAAE,2CAAuC;AAChF,YAAY,EACV,sBAAsB,EACtB,WAAW,EACX,0BAA0B,GAC3B,2CAAuC"}
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,+BAA2B;AACtD,OAAO,EAAE,4BAA4B,EAAE,2CAAuC;AAC9E,OAAO,EAAE,4BAA4B,EAAE,2CAAuC;AAC9E,YAAY,EAAE,yBAAyB,EAAE,2CAAuC;AAChF,YAAY,EACV,sBAAsB,EACtB,WAAW,EACX,0BAA0B,GAC3B,2CAAuC;AACxC,OAAO,EACL,6BAA6B,EAC7B,wBAAwB,GACzB,4BAAwB"}
@@ -3,4 +3,5 @@ export { formatExchangeRatesForBridge } from "./formatExchangeRatesForBridge.mjs
3
3
  export { formatStateForTransactionPay } from "./formatStateForTransactionPay.mjs";
4
4
  export type { BridgeExchangeRatesFormat } from "./formatExchangeRatesForBridge.mjs";
5
5
  export type { AccountForLegacyFormat, LegacyToken, TransactionPayLegacyFormat, } from "./formatStateForTransactionPay.mjs";
6
+ export { buildNativeAssetsFromConstant, buildNativeAssetsFromApi, } from "./native-assets.mjs";
6
7
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,+BAA2B;AACtD,OAAO,EAAE,4BAA4B,EAAE,2CAAuC;AAC9E,OAAO,EAAE,4BAA4B,EAAE,2CAAuC;AAC9E,YAAY,EAAE,yBAAyB,EAAE,2CAAuC;AAChF,YAAY,EACV,sBAAsB,EACtB,WAAW,EACX,0BAA0B,GAC3B,2CAAuC"}
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,+BAA2B;AACtD,OAAO,EAAE,4BAA4B,EAAE,2CAAuC;AAC9E,OAAO,EAAE,4BAA4B,EAAE,2CAAuC;AAC9E,YAAY,EAAE,yBAAyB,EAAE,2CAAuC;AAChF,YAAY,EACV,sBAAsB,EACtB,WAAW,EACX,0BAA0B,GAC3B,2CAAuC;AACxC,OAAO,EACL,6BAA6B,EAC7B,wBAAwB,GACzB,4BAAwB"}
@@ -1,4 +1,5 @@
1
1
  export { normalizeAssetId } from "./normalizeAssetId.mjs";
2
2
  export { formatExchangeRatesForBridge } from "./formatExchangeRatesForBridge.mjs";
3
3
  export { formatStateForTransactionPay } from "./formatStateForTransactionPay.mjs";
4
+ export { buildNativeAssetsFromConstant, buildNativeAssetsFromApi } from "./native-assets.mjs";
4
5
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,+BAA2B;AACtD,OAAO,EAAE,4BAA4B,EAAE,2CAAuC;AAC9E,OAAO,EAAE,4BAA4B,EAAE,2CAAuC","sourcesContent":["export { normalizeAssetId } from './normalizeAssetId';\nexport { formatExchangeRatesForBridge } from './formatExchangeRatesForBridge';\nexport { formatStateForTransactionPay } from './formatStateForTransactionPay';\nexport type { BridgeExchangeRatesFormat } from './formatExchangeRatesForBridge';\nexport type {\n AccountForLegacyFormat,\n LegacyToken,\n TransactionPayLegacyFormat,\n} from './formatStateForTransactionPay';\n"]}
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,+BAA2B;AACtD,OAAO,EAAE,4BAA4B,EAAE,2CAAuC;AAC9E,OAAO,EAAE,4BAA4B,EAAE,2CAAuC;AAO9E,OAAO,EACL,6BAA6B,EAC7B,wBAAwB,EACzB,4BAAwB","sourcesContent":["export { normalizeAssetId } from './normalizeAssetId';\nexport { formatExchangeRatesForBridge } from './formatExchangeRatesForBridge';\nexport { formatStateForTransactionPay } from './formatStateForTransactionPay';\nexport type { BridgeExchangeRatesFormat } from './formatExchangeRatesForBridge';\nexport type {\n AccountForLegacyFormat,\n LegacyToken,\n TransactionPayLegacyFormat,\n} from './formatStateForTransactionPay';\nexport {\n buildNativeAssetsFromConstant,\n buildNativeAssetsFromApi,\n} from './native-assets';\n"]}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildNativeAssetsFromApi = exports.buildNativeAssetsFromConstant = void 0;
4
+ const assets_controllers_1 = require("@metamask/assets-controllers");
5
+ const controller_utils_1 = require("@metamask/controller-utils");
6
+ const utils_1 = require("@metamask/utils");
7
+ const CHAINID_NETWORK_URL = 'https://chainid.network/chains.json';
8
+ /**
9
+ * Builds a native asset map from the hardcoded SPOT_PRICES_SUPPORT_INFO constant.
10
+ *
11
+ * @returns A record mapping CAIP-2 chain IDs to their CAIP-19 native asset IDs.
12
+ */
13
+ function buildNativeAssetsFromConstant() {
14
+ const nativeAssetsMap = {};
15
+ for (const nativeAssetId of Object.values(assets_controllers_1.SPOT_PRICES_SUPPORT_INFO)) {
16
+ const { chainId } = (0, utils_1.parseCaipAssetType)(nativeAssetId);
17
+ nativeAssetsMap[chainId] = nativeAssetId;
18
+ }
19
+ return nativeAssetsMap;
20
+ }
21
+ exports.buildNativeAssetsFromConstant = buildNativeAssetsFromConstant;
22
+ /**
23
+ * Fetches chain data from chainid.network and merges it with the seed
24
+ * native asset map built from {@link buildNativeAssetsFromConstant}.
25
+ *
26
+ * Remote entries only fill gaps — chains already present in the seed map
27
+ * are never overwritten. Invalid entries (missing/negative chainId or slip44)
28
+ * are silently skipped.
29
+ *
30
+ * @returns The merged native asset map.
31
+ */
32
+ async function buildNativeAssetsFromApi() {
33
+ const nativeAssetsMap = buildNativeAssetsFromConstant();
34
+ try {
35
+ const chains = await (0, controller_utils_1.fetchWithErrorHandling)({
36
+ url: CHAINID_NETWORK_URL,
37
+ timeout: 10000,
38
+ });
39
+ if (chains && Array.isArray(chains)) {
40
+ for (const chain of chains) {
41
+ if (!chain.chainId ||
42
+ !chain.slip44 ||
43
+ !Number.isInteger(chain.chainId) ||
44
+ chain.chainId < 1 ||
45
+ !Number.isInteger(chain.slip44) ||
46
+ chain.slip44 < 1) {
47
+ continue;
48
+ }
49
+ const caipChainId = `eip155:${chain.chainId}`;
50
+ if (!nativeAssetsMap[caipChainId]) {
51
+ nativeAssetsMap[caipChainId] =
52
+ `eip155:${chain.chainId}/slip44:${chain.slip44}`;
53
+ }
54
+ }
55
+ }
56
+ }
57
+ catch {
58
+ // Non-fatal: caller should fall back to the seed map.
59
+ }
60
+ return nativeAssetsMap;
61
+ }
62
+ exports.buildNativeAssetsFromApi = buildNativeAssetsFromApi;
63
+ //# sourceMappingURL=native-assets.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-assets.cjs","sourceRoot":"","sources":["../../src/utils/native-assets.ts"],"names":[],"mappings":";;;AAAA,qEAAwE;AACxE,iEAAoE;AACpE,2CAAqD;AAIrD,MAAM,mBAAmB,GAAG,qCAAqC,CAAC;AAOlE;;;;GAIG;AACH,SAAgB,6BAA6B;IAI3C,MAAM,eAAe,GAAmC,EAAE,CAAC;IAC3D,KAAK,MAAM,aAAa,IAAI,MAAM,CAAC,MAAM,CAAC,6CAAwB,CAAC,EAAE,CAAC;QACpE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAA,0BAAkB,EAAC,aAAa,CAAC,CAAC;QACtD,eAAe,CAAC,OAAO,CAAC,GAAG,aAAa,CAAC;IAC3C,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AAVD,sEAUC;AAED;;;;;;;;;GASG;AACI,KAAK,UAAU,wBAAwB;IAG5C,MAAM,eAAe,GAAG,6BAA6B,EAAE,CAAC;IAExD,IAAI,CAAC;QACH,MAAM,MAAM,GACV,MAAM,IAAA,yCAAsB,EAAC;YAC3B,GAAG,EAAE,mBAAmB;YACxB,OAAO,EAAE,KAAM;SAChB,CAAC,CAAC;QAEL,IAAI,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACpC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,IACE,CAAC,KAAK,CAAC,OAAO;oBACd,CAAC,KAAK,CAAC,MAAM;oBACb,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;oBAChC,KAAK,CAAC,OAAO,GAAG,CAAC;oBACjB,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;oBAC/B,KAAK,CAAC,MAAM,GAAG,CAAC,EAChB,CAAC;oBACD,SAAS;gBACX,CAAC;gBAED,MAAM,WAAW,GAAG,UAAU,KAAK,CAAC,OAAO,EAAa,CAAC;gBACzD,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC;oBAClC,eAAe,CAAC,WAAW,CAAC;wBAC1B,UAAU,KAAK,CAAC,OAAO,WAAW,KAAK,CAAC,MAAM,EAAmB,CAAC;gBACtE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,sDAAsD;IACxD,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC;AArCD,4DAqCC","sourcesContent":["import { SPOT_PRICES_SUPPORT_INFO } from '@metamask/assets-controllers';\nimport { fetchWithErrorHandling } from '@metamask/controller-utils';\nimport { parseCaipAssetType } from '@metamask/utils';\n\nimport type { Caip19AssetId, ChainId } from '../types';\n\nconst CHAINID_NETWORK_URL = 'https://chainid.network/chains.json';\n\ntype ChainIdNetworkEntry = {\n chainId: number;\n slip44?: number;\n};\n\n/**\n * Builds a native asset map from the hardcoded SPOT_PRICES_SUPPORT_INFO constant.\n *\n * @returns A record mapping CAIP-2 chain IDs to their CAIP-19 native asset IDs.\n */\nexport function buildNativeAssetsFromConstant(): Record<\n ChainId,\n Caip19AssetId\n> {\n const nativeAssetsMap: Record<ChainId, Caip19AssetId> = {};\n for (const nativeAssetId of Object.values(SPOT_PRICES_SUPPORT_INFO)) {\n const { chainId } = parseCaipAssetType(nativeAssetId);\n nativeAssetsMap[chainId] = nativeAssetId;\n }\n return nativeAssetsMap;\n}\n\n/**\n * Fetches chain data from chainid.network and merges it with the seed\n * native asset map built from {@link buildNativeAssetsFromConstant}.\n *\n * Remote entries only fill gaps — chains already present in the seed map\n * are never overwritten. Invalid entries (missing/negative chainId or slip44)\n * are silently skipped.\n *\n * @returns The merged native asset map.\n */\nexport async function buildNativeAssetsFromApi(): Promise<\n Record<ChainId, Caip19AssetId>\n> {\n const nativeAssetsMap = buildNativeAssetsFromConstant();\n\n try {\n const chains: ChainIdNetworkEntry[] | undefined =\n await fetchWithErrorHandling({\n url: CHAINID_NETWORK_URL,\n timeout: 10_000,\n });\n\n if (chains && Array.isArray(chains)) {\n for (const chain of chains) {\n if (\n !chain.chainId ||\n !chain.slip44 ||\n !Number.isInteger(chain.chainId) ||\n chain.chainId < 1 ||\n !Number.isInteger(chain.slip44) ||\n chain.slip44 < 1\n ) {\n continue;\n }\n\n const caipChainId = `eip155:${chain.chainId}` as ChainId;\n if (!nativeAssetsMap[caipChainId]) {\n nativeAssetsMap[caipChainId] =\n `eip155:${chain.chainId}/slip44:${chain.slip44}` as Caip19AssetId;\n }\n }\n }\n } catch {\n // Non-fatal: caller should fall back to the seed map.\n }\n\n return nativeAssetsMap;\n}\n"]}
@@ -0,0 +1,19 @@
1
+ import type { Caip19AssetId, ChainId } from "../types.cjs";
2
+ /**
3
+ * Builds a native asset map from the hardcoded SPOT_PRICES_SUPPORT_INFO constant.
4
+ *
5
+ * @returns A record mapping CAIP-2 chain IDs to their CAIP-19 native asset IDs.
6
+ */
7
+ export declare function buildNativeAssetsFromConstant(): Record<ChainId, Caip19AssetId>;
8
+ /**
9
+ * Fetches chain data from chainid.network and merges it with the seed
10
+ * native asset map built from {@link buildNativeAssetsFromConstant}.
11
+ *
12
+ * Remote entries only fill gaps — chains already present in the seed map
13
+ * are never overwritten. Invalid entries (missing/negative chainId or slip44)
14
+ * are silently skipped.
15
+ *
16
+ * @returns The merged native asset map.
17
+ */
18
+ export declare function buildNativeAssetsFromApi(): Promise<Record<ChainId, Caip19AssetId>>;
19
+ //# sourceMappingURL=native-assets.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-assets.d.cts","sourceRoot":"","sources":["../../src/utils/native-assets.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,qBAAiB;AASvD;;;;GAIG;AACH,wBAAgB,6BAA6B,IAAI,MAAM,CACrD,OAAO,EACP,aAAa,CACd,CAOA;AAED;;;;;;;;;GASG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CACvD,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,CAC/B,CAmCA"}
@@ -0,0 +1,19 @@
1
+ import type { Caip19AssetId, ChainId } from "../types.mjs";
2
+ /**
3
+ * Builds a native asset map from the hardcoded SPOT_PRICES_SUPPORT_INFO constant.
4
+ *
5
+ * @returns A record mapping CAIP-2 chain IDs to their CAIP-19 native asset IDs.
6
+ */
7
+ export declare function buildNativeAssetsFromConstant(): Record<ChainId, Caip19AssetId>;
8
+ /**
9
+ * Fetches chain data from chainid.network and merges it with the seed
10
+ * native asset map built from {@link buildNativeAssetsFromConstant}.
11
+ *
12
+ * Remote entries only fill gaps — chains already present in the seed map
13
+ * are never overwritten. Invalid entries (missing/negative chainId or slip44)
14
+ * are silently skipped.
15
+ *
16
+ * @returns The merged native asset map.
17
+ */
18
+ export declare function buildNativeAssetsFromApi(): Promise<Record<ChainId, Caip19AssetId>>;
19
+ //# sourceMappingURL=native-assets.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-assets.d.mts","sourceRoot":"","sources":["../../src/utils/native-assets.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,qBAAiB;AASvD;;;;GAIG;AACH,wBAAgB,6BAA6B,IAAI,MAAM,CACrD,OAAO,EACP,aAAa,CACd,CAOA;AAED;;;;;;;;;GASG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CACvD,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,CAC/B,CAmCA"}
@@ -0,0 +1,58 @@
1
+ import { SPOT_PRICES_SUPPORT_INFO } from "@metamask/assets-controllers";
2
+ import { fetchWithErrorHandling } from "@metamask/controller-utils";
3
+ import { parseCaipAssetType } from "@metamask/utils";
4
+ const CHAINID_NETWORK_URL = 'https://chainid.network/chains.json';
5
+ /**
6
+ * Builds a native asset map from the hardcoded SPOT_PRICES_SUPPORT_INFO constant.
7
+ *
8
+ * @returns A record mapping CAIP-2 chain IDs to their CAIP-19 native asset IDs.
9
+ */
10
+ export function buildNativeAssetsFromConstant() {
11
+ const nativeAssetsMap = {};
12
+ for (const nativeAssetId of Object.values(SPOT_PRICES_SUPPORT_INFO)) {
13
+ const { chainId } = parseCaipAssetType(nativeAssetId);
14
+ nativeAssetsMap[chainId] = nativeAssetId;
15
+ }
16
+ return nativeAssetsMap;
17
+ }
18
+ /**
19
+ * Fetches chain data from chainid.network and merges it with the seed
20
+ * native asset map built from {@link buildNativeAssetsFromConstant}.
21
+ *
22
+ * Remote entries only fill gaps — chains already present in the seed map
23
+ * are never overwritten. Invalid entries (missing/negative chainId or slip44)
24
+ * are silently skipped.
25
+ *
26
+ * @returns The merged native asset map.
27
+ */
28
+ export async function buildNativeAssetsFromApi() {
29
+ const nativeAssetsMap = buildNativeAssetsFromConstant();
30
+ try {
31
+ const chains = await fetchWithErrorHandling({
32
+ url: CHAINID_NETWORK_URL,
33
+ timeout: 10000,
34
+ });
35
+ if (chains && Array.isArray(chains)) {
36
+ for (const chain of chains) {
37
+ if (!chain.chainId ||
38
+ !chain.slip44 ||
39
+ !Number.isInteger(chain.chainId) ||
40
+ chain.chainId < 1 ||
41
+ !Number.isInteger(chain.slip44) ||
42
+ chain.slip44 < 1) {
43
+ continue;
44
+ }
45
+ const caipChainId = `eip155:${chain.chainId}`;
46
+ if (!nativeAssetsMap[caipChainId]) {
47
+ nativeAssetsMap[caipChainId] =
48
+ `eip155:${chain.chainId}/slip44:${chain.slip44}`;
49
+ }
50
+ }
51
+ }
52
+ }
53
+ catch {
54
+ // Non-fatal: caller should fall back to the seed map.
55
+ }
56
+ return nativeAssetsMap;
57
+ }
58
+ //# sourceMappingURL=native-assets.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-assets.mjs","sourceRoot":"","sources":["../../src/utils/native-assets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,qCAAqC;AACxE,OAAO,EAAE,sBAAsB,EAAE,mCAAmC;AACpE,OAAO,EAAE,kBAAkB,EAAE,wBAAwB;AAIrD,MAAM,mBAAmB,GAAG,qCAAqC,CAAC;AAOlE;;;;GAIG;AACH,MAAM,UAAU,6BAA6B;IAI3C,MAAM,eAAe,GAAmC,EAAE,CAAC;IAC3D,KAAK,MAAM,aAAa,IAAI,MAAM,CAAC,MAAM,CAAC,wBAAwB,CAAC,EAAE,CAAC;QACpE,MAAM,EAAE,OAAO,EAAE,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;QACtD,eAAe,CAAC,OAAO,CAAC,GAAG,aAAa,CAAC;IAC3C,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB;IAG5C,MAAM,eAAe,GAAG,6BAA6B,EAAE,CAAC;IAExD,IAAI,CAAC;QACH,MAAM,MAAM,GACV,MAAM,sBAAsB,CAAC;YAC3B,GAAG,EAAE,mBAAmB;YACxB,OAAO,EAAE,KAAM;SAChB,CAAC,CAAC;QAEL,IAAI,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACpC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,IACE,CAAC,KAAK,CAAC,OAAO;oBACd,CAAC,KAAK,CAAC,MAAM;oBACb,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;oBAChC,KAAK,CAAC,OAAO,GAAG,CAAC;oBACjB,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;oBAC/B,KAAK,CAAC,MAAM,GAAG,CAAC,EAChB,CAAC;oBACD,SAAS;gBACX,CAAC;gBAED,MAAM,WAAW,GAAG,UAAU,KAAK,CAAC,OAAO,EAAa,CAAC;gBACzD,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC;oBAClC,eAAe,CAAC,WAAW,CAAC;wBAC1B,UAAU,KAAK,CAAC,OAAO,WAAW,KAAK,CAAC,MAAM,EAAmB,CAAC;gBACtE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,sDAAsD;IACxD,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC","sourcesContent":["import { SPOT_PRICES_SUPPORT_INFO } from '@metamask/assets-controllers';\nimport { fetchWithErrorHandling } from '@metamask/controller-utils';\nimport { parseCaipAssetType } from '@metamask/utils';\n\nimport type { Caip19AssetId, ChainId } from '../types';\n\nconst CHAINID_NETWORK_URL = 'https://chainid.network/chains.json';\n\ntype ChainIdNetworkEntry = {\n chainId: number;\n slip44?: number;\n};\n\n/**\n * Builds a native asset map from the hardcoded SPOT_PRICES_SUPPORT_INFO constant.\n *\n * @returns A record mapping CAIP-2 chain IDs to their CAIP-19 native asset IDs.\n */\nexport function buildNativeAssetsFromConstant(): Record<\n ChainId,\n Caip19AssetId\n> {\n const nativeAssetsMap: Record<ChainId, Caip19AssetId> = {};\n for (const nativeAssetId of Object.values(SPOT_PRICES_SUPPORT_INFO)) {\n const { chainId } = parseCaipAssetType(nativeAssetId);\n nativeAssetsMap[chainId] = nativeAssetId;\n }\n return nativeAssetsMap;\n}\n\n/**\n * Fetches chain data from chainid.network and merges it with the seed\n * native asset map built from {@link buildNativeAssetsFromConstant}.\n *\n * Remote entries only fill gaps — chains already present in the seed map\n * are never overwritten. Invalid entries (missing/negative chainId or slip44)\n * are silently skipped.\n *\n * @returns The merged native asset map.\n */\nexport async function buildNativeAssetsFromApi(): Promise<\n Record<ChainId, Caip19AssetId>\n> {\n const nativeAssetsMap = buildNativeAssetsFromConstant();\n\n try {\n const chains: ChainIdNetworkEntry[] | undefined =\n await fetchWithErrorHandling({\n url: CHAINID_NETWORK_URL,\n timeout: 10_000,\n });\n\n if (chains && Array.isArray(chains)) {\n for (const chain of chains) {\n if (\n !chain.chainId ||\n !chain.slip44 ||\n !Number.isInteger(chain.chainId) ||\n chain.chainId < 1 ||\n !Number.isInteger(chain.slip44) ||\n chain.slip44 < 1\n ) {\n continue;\n }\n\n const caipChainId = `eip155:${chain.chainId}` as ChainId;\n if (!nativeAssetsMap[caipChainId]) {\n nativeAssetsMap[caipChainId] =\n `eip155:${chain.chainId}/slip44:${chain.slip44}` as Caip19AssetId;\n }\n }\n }\n } catch {\n // Non-fatal: caller should fall back to the seed map.\n }\n\n return nativeAssetsMap;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metamask/assets-controller",
3
- "version": "5.0.1",
3
+ "version": "6.1.0",
4
4
  "description": "Tracks assets balances/prices and handles token detection across all digital assets",
5
5
  "keywords": [
6
6
  "Ethereum",
@@ -44,8 +44,8 @@
44
44
  "build:docs": "typedoc",
45
45
  "changelog:update": "../../scripts/update-changelog.sh @metamask/assets-controller",
46
46
  "changelog:validate": "../../scripts/validate-changelog.sh @metamask/assets-controller",
47
- "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check",
48
- "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate",
47
+ "messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --formatter oxfmt --check",
48
+ "messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --formatter oxfmt --generate",
49
49
  "since-latest-release": "../../scripts/since-latest-release.sh",
50
50
  "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter",
51
51
  "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache",
@@ -56,16 +56,17 @@
56
56
  "@ethereumjs/util": "^9.1.0",
57
57
  "@ethersproject/abi": "^5.7.0",
58
58
  "@ethersproject/providers": "^5.7.0",
59
- "@metamask/account-tree-controller": "^7.0.0",
60
- "@metamask/assets-controllers": "^104.0.0",
59
+ "@metamask/account-tree-controller": "^7.1.0",
60
+ "@metamask/accounts-controller": "^37.2.0",
61
+ "@metamask/assets-controllers": "^104.3.0",
61
62
  "@metamask/base-controller": "^9.1.0",
62
63
  "@metamask/client-controller": "^1.0.1",
63
64
  "@metamask/controller-utils": "^11.20.0",
64
65
  "@metamask/core-backend": "^6.2.1",
65
- "@metamask/keyring-api": "^21.6.0",
66
+ "@metamask/keyring-api": "^23.0.1",
66
67
  "@metamask/keyring-controller": "^25.2.0",
67
- "@metamask/keyring-internal-api": "^10.0.0",
68
- "@metamask/keyring-snap-client": "^8.2.0",
68
+ "@metamask/keyring-internal-api": "^10.1.1",
69
+ "@metamask/keyring-snap-client": "^9.0.1",
69
70
  "@metamask/messenger": "^1.1.1",
70
71
  "@metamask/network-controller": "^30.0.1",
71
72
  "@metamask/network-enablement-controller": "^5.0.2",
@@ -75,7 +76,7 @@
75
76
  "@metamask/preferences-controller": "^23.1.0",
76
77
  "@metamask/snaps-controllers": "^19.0.0",
77
78
  "@metamask/snaps-utils": "^12.1.2",
78
- "@metamask/transaction-controller": "^64.2.0",
79
+ "@metamask/transaction-controller": "^64.3.0",
79
80
  "@metamask/utils": "^11.9.0",
80
81
  "async-mutex": "^0.5.0",
81
82
  "bignumber.js": "^9.1.2",
@@ -83,7 +84,7 @@
83
84
  "p-limit": "^3.1.0"
84
85
  },
85
86
  "devDependencies": {
86
- "@metamask/auto-changelog": "^6.0.0",
87
+ "@metamask/auto-changelog": "^6.1.0",
87
88
  "@ts-bridge/cli": "^0.6.4",
88
89
  "@types/jest": "^29.5.14",
89
90
  "@types/lodash": "^4.14.191",