@metamask-previews/client-utils 2.1.1-preview-abca9bcea → 3.0.0-preview-0a30e47
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 +12 -2
- package/dist/formatters/{create-formatters.d.mts → create-formatters.d.ts} +1 -1
- package/dist/formatters/create-formatters.d.ts.map +1 -0
- package/dist/formatters/{create-formatters.mjs → create-formatters.js} +4 -4
- package/dist/formatters/create-formatters.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/mappers/{api-transaction-mapper.d.cts → api-transaction-mapper.d.ts} +3 -3
- package/dist/mappers/api-transaction-mapper.d.ts.map +1 -0
- package/dist/mappers/{api-transaction-mapper.mjs → api-transaction-mapper.js} +6 -6
- package/dist/mappers/api-transaction-mapper.js.map +1 -0
- package/dist/mappers/constants.d.ts +26 -0
- package/dist/mappers/constants.d.ts.map +1 -0
- package/dist/mappers/{constants.mjs → constants.js} +1 -1
- package/dist/mappers/constants.js.map +1 -0
- package/dist/mappers/helpers/{caip.d.cts → caip.d.ts} +2 -2
- package/dist/mappers/helpers/caip.d.ts.map +1 -0
- package/dist/mappers/helpers/{caip.mjs → caip.js} +6 -6
- package/dist/mappers/helpers/caip.js.map +1 -0
- package/dist/mappers/helpers/{token-metadata.d.cts → token-metadata.d.ts} +2 -2
- package/dist/mappers/helpers/token-metadata.d.ts.map +1 -0
- package/dist/mappers/helpers/{token-metadata.mjs → token-metadata.js} +4 -11
- package/dist/mappers/helpers/token-metadata.js.map +1 -0
- package/dist/mappers/helpers/{transactions.d.mts → transactions.d.ts} +5 -5
- package/dist/mappers/helpers/transactions.d.ts.map +1 -0
- package/dist/mappers/helpers/{transactions.mjs → transactions.js} +6 -6
- package/dist/mappers/helpers/transactions.js.map +1 -0
- package/dist/mappers/{keyring-transaction-mapper.d.cts → keyring-transaction-mapper.d.ts} +3 -3
- package/dist/mappers/keyring-transaction-mapper.d.ts.map +1 -0
- package/dist/mappers/{keyring-transaction-mapper.mjs → keyring-transaction-mapper.js} +2 -2
- package/dist/mappers/keyring-transaction-mapper.js.map +1 -0
- package/dist/mappers/{local-transaction-mapper.d.cts → local-transaction-mapper.d.ts} +3 -3
- package/dist/mappers/local-transaction-mapper.d.ts.map +1 -0
- package/dist/mappers/{local-transaction-mapper.mjs → local-transaction-mapper.js} +8 -8
- package/dist/mappers/local-transaction-mapper.js.map +1 -0
- package/dist/mappers/{ramps-order-mapper.d.cts → ramps-order-mapper.d.ts} +2 -2
- package/dist/mappers/ramps-order-mapper.d.ts.map +1 -0
- package/dist/mappers/{ramps-order-mapper.mjs → ramps-order-mapper.js} +3 -3
- package/dist/mappers/ramps-order-mapper.js.map +1 -0
- package/dist/{types.d.cts → types.d.ts} +3 -3
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +15 -19
- package/dist/formatters/create-formatters.cjs +0 -238
- package/dist/formatters/create-formatters.cjs.map +0 -1
- package/dist/formatters/create-formatters.d.cts +0 -19
- package/dist/formatters/create-formatters.d.cts.map +0 -1
- package/dist/formatters/create-formatters.d.mts.map +0 -1
- package/dist/formatters/create-formatters.mjs.map +0 -1
- package/dist/index.cjs +0 -14
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts +0 -9
- package/dist/index.d.cts.map +0 -1
- package/dist/index.d.mts +0 -9
- package/dist/index.d.mts.map +0 -1
- package/dist/index.mjs +0 -6
- package/dist/index.mjs.map +0 -1
- package/dist/mappers/api-transaction-mapper.cjs +0 -316
- package/dist/mappers/api-transaction-mapper.cjs.map +0 -1
- package/dist/mappers/api-transaction-mapper.d.cts.map +0 -1
- package/dist/mappers/api-transaction-mapper.d.mts +0 -15
- package/dist/mappers/api-transaction-mapper.d.mts.map +0 -1
- package/dist/mappers/api-transaction-mapper.mjs.map +0 -1
- package/dist/mappers/constants.cjs +0 -47
- package/dist/mappers/constants.cjs.map +0 -1
- package/dist/mappers/constants.d.cts +0 -26
- package/dist/mappers/constants.d.cts.map +0 -1
- package/dist/mappers/constants.d.mts +0 -26
- package/dist/mappers/constants.d.mts.map +0 -1
- package/dist/mappers/constants.mjs.map +0 -1
- package/dist/mappers/helpers/caip.cjs +0 -140
- package/dist/mappers/helpers/caip.cjs.map +0 -1
- package/dist/mappers/helpers/caip.d.cts.map +0 -1
- package/dist/mappers/helpers/caip.d.mts +0 -32
- package/dist/mappers/helpers/caip.d.mts.map +0 -1
- package/dist/mappers/helpers/caip.mjs.map +0 -1
- package/dist/mappers/helpers/token-metadata.cjs +0 -31
- package/dist/mappers/helpers/token-metadata.cjs.map +0 -1
- package/dist/mappers/helpers/token-metadata.d.cts.map +0 -1
- package/dist/mappers/helpers/token-metadata.d.mts +0 -8
- package/dist/mappers/helpers/token-metadata.d.mts.map +0 -1
- package/dist/mappers/helpers/token-metadata.mjs.map +0 -1
- package/dist/mappers/helpers/transactions.cjs +0 -254
- package/dist/mappers/helpers/transactions.cjs.map +0 -1
- package/dist/mappers/helpers/transactions.d.cts +0 -51
- package/dist/mappers/helpers/transactions.d.cts.map +0 -1
- package/dist/mappers/helpers/transactions.d.mts.map +0 -1
- package/dist/mappers/helpers/transactions.mjs.map +0 -1
- package/dist/mappers/keyring-transaction-mapper.cjs +0 -201
- package/dist/mappers/keyring-transaction-mapper.cjs.map +0 -1
- package/dist/mappers/keyring-transaction-mapper.d.cts.map +0 -1
- package/dist/mappers/keyring-transaction-mapper.d.mts +0 -26
- package/dist/mappers/keyring-transaction-mapper.d.mts.map +0 -1
- package/dist/mappers/keyring-transaction-mapper.mjs.map +0 -1
- package/dist/mappers/local-transaction-mapper.cjs +0 -436
- package/dist/mappers/local-transaction-mapper.cjs.map +0 -1
- package/dist/mappers/local-transaction-mapper.d.cts.map +0 -1
- package/dist/mappers/local-transaction-mapper.d.mts +0 -20
- package/dist/mappers/local-transaction-mapper.d.mts.map +0 -1
- package/dist/mappers/local-transaction-mapper.mjs.map +0 -1
- package/dist/mappers/ramps-order-mapper.cjs +0 -145
- package/dist/mappers/ramps-order-mapper.cjs.map +0 -1
- package/dist/mappers/ramps-order-mapper.d.cts.map +0 -1
- package/dist/mappers/ramps-order-mapper.d.mts +0 -50
- package/dist/mappers/ramps-order-mapper.d.mts.map +0 -1
- package/dist/mappers/ramps-order-mapper.mjs.map +0 -1
- package/dist/types.cjs +0 -3
- package/dist/types.cjs.map +0 -1
- package/dist/types.d.cts.map +0 -1
- package/dist/types.d.mts +0 -114
- package/dist/types.d.mts.map +0 -1
- package/dist/types.mjs +0 -2
- package/dist/types.mjs.map +0 -1
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
export declare const supplyMethodIds: Set<string>;
|
|
2
|
-
export declare const withdrawMethodIds: Set<string>;
|
|
3
|
-
export declare const wrapMethodIds: Set<string>;
|
|
4
|
-
export declare const unwrapMethodIds: Set<string>;
|
|
5
|
-
export declare const permit2ApproveMethodId = "0x87517c45";
|
|
6
|
-
export declare const tokenTransferLogTopicHash = "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef";
|
|
7
|
-
export declare const nativeTokenAddress = "0x0000000000000000000000000000000000000000";
|
|
8
|
-
export declare const nativeTokenDecimals = 18;
|
|
9
|
-
export declare const swapsWrappedTokensAddresses: {
|
|
10
|
-
readonly '0x1': "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2";
|
|
11
|
-
readonly '0x539': "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2";
|
|
12
|
-
readonly '0x38': "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c";
|
|
13
|
-
readonly '0x89': "0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270";
|
|
14
|
-
readonly '0x5': "0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6";
|
|
15
|
-
readonly '0xa86a': "0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7";
|
|
16
|
-
readonly '0xa': "0x4200000000000000000000000000000000000006";
|
|
17
|
-
readonly '0xa4b1': "0x82af49447d8a07e3bd95bd0d56f35241523fbab1";
|
|
18
|
-
readonly '0x144': "0x5AEa5775959fBC2557Cc8789bC1bf90A239D9a91";
|
|
19
|
-
readonly '0xe708': "0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f";
|
|
20
|
-
readonly '0x2105': "0x4200000000000000000000000000000000000006";
|
|
21
|
-
readonly '0x531': "0xe30fedd158a2e3b13e9badaeabafc5516e95e8c7";
|
|
22
|
-
readonly '0x8f': "0x3bd359c1119da7da1d913d1c4d2b7c461115433a";
|
|
23
|
-
readonly '0x3e7': "0x5555555555555555555555555555555555555555";
|
|
24
|
-
readonly '0x10e6': "0x4200000000000000000000000000000000000006";
|
|
25
|
-
};
|
|
26
|
-
//# sourceMappingURL=constants.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.mts","sourceRoot":"","sources":["../../src/mappers/constants.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,eAAe,aAK1B,CAAC;AAOH,eAAO,MAAM,iBAAiB,aAI5B,CAAC;AAEH,eAAO,MAAM,aAAa,aAA0B,CAAC;AACrD,eAAO,MAAM,eAAe,aAA0B,CAAC;AAEvD,eAAO,MAAM,sBAAsB,eAAe,CAAC;AAEnD,eAAO,MAAM,yBAAyB,uEACgC,CAAC;AAEvE,eAAO,MAAM,kBAAkB,+CAA+C,CAAC;AAE/E,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;CAgB9B,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants.mjs","sourceRoot":"","sources":["../../src/mappers/constants.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,MAAM,kBAAkB,GAAG,YAAY,CAAC;AACxC,MAAM,kBAAkB,GAAG,YAAY,CAAC;AACxC,MAAM,mBAAmB,GAAG,YAAY,CAAC,CAAC,mCAAmC;AAC7E,MAAM,yBAAyB,GAAG,YAAY,CAAC,CAAC,iCAAiC;AAEjF,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IACrC,kBAAkB;IAClB,kBAAkB;IAClB,mBAAmB;IACnB,yBAAyB;CAC1B,CAAC,CAAC;AAEH,sCAAsC;AACtC,MAAM,oBAAoB,GAAG,YAAY,CAAC;AAC1C,MAAM,yBAAyB,GAAG,YAAY,CAAC;AAC/C,MAAM,sBAAsB,GAAG,YAAY,CAAC;AAE5C,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IACvC,oBAAoB;IACpB,yBAAyB;IACzB,sBAAsB;CACvB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;AACrD,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;AAEvD,MAAM,CAAC,MAAM,sBAAsB,GAAG,YAAY,CAAC;AAEnD,MAAM,CAAC,MAAM,yBAAyB,GACpC,oEAAoE,CAAC;AAEvE,MAAM,CAAC,MAAM,kBAAkB,GAAG,4CAA4C,CAAC;AAE/E,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAEtC,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,KAAK,EAAE,4CAA4C;IACnD,OAAO,EAAE,4CAA4C;IACrD,MAAM,EAAE,4CAA4C;IACpD,MAAM,EAAE,4CAA4C;IACpD,KAAK,EAAE,4CAA4C;IACnD,QAAQ,EAAE,4CAA4C;IACtD,KAAK,EAAE,4CAA4C;IACnD,QAAQ,EAAE,4CAA4C;IACtD,OAAO,EAAE,4CAA4C;IACrD,QAAQ,EAAE,4CAA4C;IACtD,QAAQ,EAAE,4CAA4C;IACtD,OAAO,EAAE,4CAA4C;IACrD,MAAM,EAAE,4CAA4C;IACpD,OAAO,EAAE,4CAA4C;IACrD,QAAQ,EAAE,4CAA4C;CAC9C,CAAC","sourcesContent":["// Known method IDs for supply/deposit calls\nconst aaveSupplyMethodId = '0x617ba037';\nconst lidoSubmitMethodId = '0xa1903eab';\nconst lidoDepositMethodId = '0x8a99b4f2'; // MM staking contract Lido deposit\nconst rocketPoolDepositMethodId = '0xfa4bbb71'; // MM staking contract RP deposit\n\nexport const supplyMethodIds = new Set([\n aaveSupplyMethodId,\n lidoSubmitMethodId,\n lidoDepositMethodId,\n rocketPoolDepositMethodId,\n]);\n\n// Known method IDs for withdraw calls\nconst aaveWithdrawMethodId = '0x69328dec';\nconst lidoClaimWithdrawMethodId = '0xf8444436';\nconst rocketPoolBurnMethodId = '0x42966c68';\n\nexport const withdrawMethodIds = new Set([\n aaveWithdrawMethodId,\n lidoClaimWithdrawMethodId,\n rocketPoolBurnMethodId,\n]);\n\nexport const wrapMethodIds = new Set(['0xd0e30db0']);\nexport const unwrapMethodIds = new Set(['0x2e1a7d4d']);\n\nexport const permit2ApproveMethodId = '0x87517c45';\n\nexport const tokenTransferLogTopicHash =\n '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef';\n\nexport const nativeTokenAddress = '0x0000000000000000000000000000000000000000';\n\nexport const nativeTokenDecimals = 18;\n\nexport const swapsWrappedTokensAddresses = {\n '0x1': '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',\n '0x539': '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',\n '0x38': '0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c',\n '0x89': '0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270',\n '0x5': '0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6',\n '0xa86a': '0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7',\n '0xa': '0x4200000000000000000000000000000000000006',\n '0xa4b1': '0x82af49447d8a07e3bd95bd0d56f35241523fbab1',\n '0x144': '0x5AEa5775959fBC2557Cc8789bC1bf90A239D9a91',\n '0xe708': '0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f',\n '0x2105': '0x4200000000000000000000000000000000000006',\n '0x531': '0xe30fedd158a2e3b13e9badaeabafc5516e95e8c7',\n '0x8f': '0x3bd359c1119da7da1d913d1c4d2b7c461115433a',\n '0x3e7': '0x5555555555555555555555555555555555555555',\n '0x10e6': '0x4200000000000000000000000000000000000006',\n} as const;\n"]}
|
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.formatAddressToAssetId = exports.getNativeAsset = exports.resolveNativeAssetId = exports.formatChainIdToCaip = void 0;
|
|
7
|
-
const controller_utils_1 = require("@metamask/controller-utils");
|
|
8
|
-
// @ts-expect-error: No type definitions for '@metamask/slip44'
|
|
9
|
-
const slip44_1 = __importDefault(require("@metamask/slip44"));
|
|
10
|
-
const utils_1 = require("@metamask/utils");
|
|
11
|
-
const eth_chainlist_1 = require("eth-chainlist");
|
|
12
|
-
const constants_js_1 = require("../constants.cjs");
|
|
13
|
-
const slip44BySymbol = (() => {
|
|
14
|
-
const coinTypeBySymbol = new Map();
|
|
15
|
-
for (const [coinType, entry] of Object.entries(slip44_1.default)) {
|
|
16
|
-
const normalizedSymbol = entry.symbol.toUpperCase();
|
|
17
|
-
if (!coinTypeBySymbol.has(normalizedSymbol)) {
|
|
18
|
-
coinTypeBySymbol.set(normalizedSymbol, coinType);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
return coinTypeBySymbol;
|
|
22
|
-
})();
|
|
23
|
-
function getCoinType(symbol) {
|
|
24
|
-
const normalizedSymbol = symbol.toUpperCase();
|
|
25
|
-
return (slip44BySymbol.get(normalizedSymbol) ??
|
|
26
|
-
(normalizedSymbol === 'POL' ? slip44BySymbol.get('MATIC') : undefined));
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Normalizes a hex, decimal, numeric, or CAIP chain id to its CAIP-2 form.
|
|
30
|
-
* Only EVM (eip155) chains are normalized here; CAIP ids are returned as-is.
|
|
31
|
-
*
|
|
32
|
-
* @param chainId - Hex (`0x1`), numeric, decimal string, or CAIP chain id.
|
|
33
|
-
* @returns The CAIP-2 chain id, or `undefined` when it can't be normalized.
|
|
34
|
-
*/
|
|
35
|
-
function formatChainIdToCaip(chainId) {
|
|
36
|
-
if (typeof chainId === 'number') {
|
|
37
|
-
return `eip155:${chainId}`;
|
|
38
|
-
}
|
|
39
|
-
if (chainId.includes(':')) {
|
|
40
|
-
return chainId;
|
|
41
|
-
}
|
|
42
|
-
if (chainId.startsWith('0x')) {
|
|
43
|
-
const reference = Number.parseInt(chainId, 16);
|
|
44
|
-
return Number.isNaN(reference) ? undefined : `eip155:${reference}`;
|
|
45
|
-
}
|
|
46
|
-
if (chainId === '') {
|
|
47
|
-
return undefined;
|
|
48
|
-
}
|
|
49
|
-
const reference = Number(chainId);
|
|
50
|
-
return Number.isNaN(reference) ? undefined : `eip155:${reference}`;
|
|
51
|
-
}
|
|
52
|
-
exports.formatChainIdToCaip = formatChainIdToCaip;
|
|
53
|
-
function resolveNativeAssetId(chainId, symbol) {
|
|
54
|
-
if (chainId === undefined) {
|
|
55
|
-
return undefined;
|
|
56
|
-
}
|
|
57
|
-
const caipChainId = formatChainIdToCaip(chainId);
|
|
58
|
-
if (!caipChainId) {
|
|
59
|
-
return undefined;
|
|
60
|
-
}
|
|
61
|
-
const { namespace, reference } = (0, utils_1.parseCaipChainId)(caipChainId);
|
|
62
|
-
const assetReference = symbol ? getCoinType(symbol) : undefined;
|
|
63
|
-
if (assetReference) {
|
|
64
|
-
return (0, utils_1.toCaipAssetType)(namespace, reference, 'slip44', assetReference);
|
|
65
|
-
}
|
|
66
|
-
if (namespace === utils_1.KnownCaipNamespace.Eip155) {
|
|
67
|
-
return (getNativeAsset(caipChainId)?.assetId ??
|
|
68
|
-
(0, utils_1.toCaipAssetType)(namespace, reference, 'erc20', constants_js_1.nativeTokenAddress));
|
|
69
|
-
}
|
|
70
|
-
return undefined;
|
|
71
|
-
}
|
|
72
|
-
exports.resolveNativeAssetId = resolveNativeAssetId;
|
|
73
|
-
/**
|
|
74
|
-
* Resolves EVM native symbol, decimals, and CAIP asset id for a chain.
|
|
75
|
-
* Prefers eth-chainlist slip44 except testnet coin type 1, then falls back to
|
|
76
|
-
* `@metamask/slip44` by native symbol.
|
|
77
|
-
*
|
|
78
|
-
* @param chainId - CAIP-2 chain id (eip155 only).
|
|
79
|
-
* @returns Native asset metadata, or undefined when it cannot be resolved.
|
|
80
|
-
*/
|
|
81
|
-
function getNativeAsset(chainId) {
|
|
82
|
-
const { namespace, reference } = (0, utils_1.parseCaipChainId)(chainId);
|
|
83
|
-
if (namespace !== utils_1.KnownCaipNamespace.Eip155) {
|
|
84
|
-
return undefined;
|
|
85
|
-
}
|
|
86
|
-
const chain = (0, eth_chainlist_1.getChainById)(Number(reference));
|
|
87
|
-
if (!chain) {
|
|
88
|
-
return undefined;
|
|
89
|
-
}
|
|
90
|
-
const { nativeCurrency, slip44 } = chain;
|
|
91
|
-
if (!nativeCurrency?.symbol) {
|
|
92
|
-
return undefined;
|
|
93
|
-
}
|
|
94
|
-
const slip44TestnetCoinType = 1;
|
|
95
|
-
const assetReference = typeof slip44 === 'number' && slip44 !== slip44TestnetCoinType
|
|
96
|
-
? String(slip44)
|
|
97
|
-
: getCoinType(nativeCurrency.symbol);
|
|
98
|
-
const assetId = assetReference
|
|
99
|
-
? (0, utils_1.toCaipAssetType)(namespace, reference, 'slip44', assetReference)
|
|
100
|
-
: (0, utils_1.toCaipAssetType)(namespace, reference, 'erc20', constants_js_1.nativeTokenAddress);
|
|
101
|
-
return {
|
|
102
|
-
symbol: nativeCurrency.symbol,
|
|
103
|
-
decimals: nativeCurrency.decimals ?? constants_js_1.nativeTokenDecimals,
|
|
104
|
-
assetId,
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
exports.getNativeAsset = getNativeAsset;
|
|
108
|
-
function isNativeAddress(address) {
|
|
109
|
-
const normalized = address.toLowerCase();
|
|
110
|
-
return (normalized === constants_js_1.nativeTokenAddress ||
|
|
111
|
-
normalized === '0x0' ||
|
|
112
|
-
/^0x0+$/u.test(normalized));
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Encodes an EVM token address + chain id into a CAIP-19 asset id.
|
|
116
|
-
*
|
|
117
|
-
* @param address - Hex contract address, native sentinel, or CAIP asset id.
|
|
118
|
-
* @param chainId - CAIP-2 or hex chain id.
|
|
119
|
-
* @returns The CAIP-19 asset id, or `undefined` when it can't be encoded.
|
|
120
|
-
*/
|
|
121
|
-
function formatAddressToAssetId(address, chainId) {
|
|
122
|
-
if ((0, utils_1.isCaipAssetType)(address)) {
|
|
123
|
-
return address;
|
|
124
|
-
}
|
|
125
|
-
const caipChainId = chainId ? formatChainIdToCaip(chainId) : undefined;
|
|
126
|
-
if (!caipChainId) {
|
|
127
|
-
return undefined;
|
|
128
|
-
}
|
|
129
|
-
if (isNativeAddress(address)) {
|
|
130
|
-
return undefined;
|
|
131
|
-
}
|
|
132
|
-
const checksummedAddress = (0, controller_utils_1.toChecksumHexAddress)(address);
|
|
133
|
-
if (!(0, utils_1.isStrictHexString)(checksummedAddress)) {
|
|
134
|
-
return undefined;
|
|
135
|
-
}
|
|
136
|
-
const { namespace, reference } = (0, utils_1.parseCaipChainId)(caipChainId);
|
|
137
|
-
return (0, utils_1.toCaipAssetType)(namespace, reference, 'erc20', checksummedAddress);
|
|
138
|
-
}
|
|
139
|
-
exports.formatAddressToAssetId = formatAddressToAssetId;
|
|
140
|
-
//# sourceMappingURL=caip.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"caip.cjs","sourceRoot":"","sources":["../../../src/mappers/helpers/caip.ts"],"names":[],"mappings":"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","sourcesContent":["import { toChecksumHexAddress } from '@metamask/controller-utils';\n// @ts-expect-error: No type definitions for '@metamask/slip44'\nimport slip44data from '@metamask/slip44';\nimport type { CaipAssetType, CaipChainId, Hex } from '@metamask/utils';\nimport {\n isCaipAssetType,\n isStrictHexString,\n KnownCaipNamespace,\n parseCaipChainId,\n toCaipAssetType,\n} from '@metamask/utils';\nimport { getChainById } from 'eth-chainlist';\n\nimport { nativeTokenAddress, nativeTokenDecimals } from '../constants.js';\n\nconst slip44BySymbol = ((): Map<string, string> => {\n const coinTypeBySymbol = new Map<string, string>();\n\n for (const [coinType, entry] of Object.entries(\n slip44data as Record<string, { symbol: string }>,\n )) {\n const normalizedSymbol = entry.symbol.toUpperCase();\n\n if (!coinTypeBySymbol.has(normalizedSymbol)) {\n coinTypeBySymbol.set(normalizedSymbol, coinType);\n }\n }\n\n return coinTypeBySymbol;\n})();\n\nfunction getCoinType(symbol: string): string | undefined {\n const normalizedSymbol = symbol.toUpperCase();\n return (\n slip44BySymbol.get(normalizedSymbol) ??\n (normalizedSymbol === 'POL' ? slip44BySymbol.get('MATIC') : undefined)\n );\n}\n\n/**\n * Normalizes a hex, decimal, numeric, or CAIP chain id to its CAIP-2 form.\n * Only EVM (eip155) chains are normalized here; CAIP ids are returned as-is.\n *\n * @param chainId - Hex (`0x1`), numeric, decimal string, or CAIP chain id.\n * @returns The CAIP-2 chain id, or `undefined` when it can't be normalized.\n */\nexport function formatChainIdToCaip(\n chainId: string | number,\n): CaipChainId | undefined {\n if (typeof chainId === 'number') {\n return `eip155:${chainId}`;\n }\n\n if (chainId.includes(':')) {\n return chainId as CaipChainId;\n }\n\n if (chainId.startsWith('0x')) {\n const reference = Number.parseInt(chainId, 16);\n return Number.isNaN(reference) ? undefined : `eip155:${reference}`;\n }\n\n if (chainId === '') {\n return undefined;\n }\n\n const reference = Number(chainId);\n return Number.isNaN(reference) ? undefined : `eip155:${reference}`;\n}\n\nexport function resolveNativeAssetId(\n chainId: string | number | undefined,\n symbol: string | undefined,\n): CaipAssetType | undefined {\n if (chainId === undefined) {\n return undefined;\n }\n\n const caipChainId = formatChainIdToCaip(chainId);\n\n if (!caipChainId) {\n return undefined;\n }\n\n const { namespace, reference } = parseCaipChainId(caipChainId);\n const assetReference = symbol ? getCoinType(symbol) : undefined;\n\n if (assetReference) {\n return toCaipAssetType(namespace, reference, 'slip44', assetReference);\n }\n\n if (namespace === KnownCaipNamespace.Eip155) {\n return (\n getNativeAsset(caipChainId)?.assetId ??\n toCaipAssetType(namespace, reference, 'erc20', nativeTokenAddress)\n );\n }\n\n return undefined;\n}\n\n/**\n * Resolves EVM native symbol, decimals, and CAIP asset id for a chain.\n * Prefers eth-chainlist slip44 except testnet coin type 1, then falls back to\n * `@metamask/slip44` by native symbol.\n *\n * @param chainId - CAIP-2 chain id (eip155 only).\n * @returns Native asset metadata, or undefined when it cannot be resolved.\n */\nexport function getNativeAsset(chainId: CaipChainId):\n | {\n symbol: string;\n decimals: number;\n assetId: CaipAssetType;\n }\n | undefined {\n const { namespace, reference } = parseCaipChainId(chainId);\n if (namespace !== KnownCaipNamespace.Eip155) {\n return undefined;\n }\n\n const chain = getChainById(Number(reference));\n if (!chain) {\n return undefined;\n }\n\n const { nativeCurrency, slip44 } = chain;\n if (!nativeCurrency?.symbol) {\n return undefined;\n }\n\n const slip44TestnetCoinType = 1;\n const assetReference =\n typeof slip44 === 'number' && slip44 !== slip44TestnetCoinType\n ? String(slip44)\n : getCoinType(nativeCurrency.symbol);\n\n const assetId = assetReference\n ? toCaipAssetType(namespace, reference, 'slip44', assetReference)\n : toCaipAssetType(namespace, reference, 'erc20', nativeTokenAddress);\n\n return {\n symbol: nativeCurrency.symbol,\n decimals: nativeCurrency.decimals ?? nativeTokenDecimals,\n assetId,\n };\n}\n\nfunction isNativeAddress(address: string): boolean {\n const normalized = address.toLowerCase();\n return (\n normalized === nativeTokenAddress ||\n normalized === '0x0' ||\n /^0x0+$/u.test(normalized)\n );\n}\n\n/**\n * Encodes an EVM token address + chain id into a CAIP-19 asset id.\n *\n * @param address - Hex contract address, native sentinel, or CAIP asset id.\n * @param chainId - CAIP-2 or hex chain id.\n * @returns The CAIP-19 asset id, or `undefined` when it can't be encoded.\n */\nexport function formatAddressToAssetId(\n address: Hex | CaipAssetType | string,\n chainId?: CaipChainId | Hex,\n): CaipAssetType | undefined {\n if (isCaipAssetType(address)) {\n return address;\n }\n\n const caipChainId = chainId ? formatChainIdToCaip(chainId) : undefined;\n\n if (!caipChainId) {\n return undefined;\n }\n\n if (isNativeAddress(address)) {\n return undefined;\n }\n\n const checksummedAddress = toChecksumHexAddress(address);\n\n if (!isStrictHexString(checksummedAddress)) {\n return undefined;\n }\n\n const { namespace, reference } = parseCaipChainId(caipChainId);\n\n return toCaipAssetType(namespace, reference, 'erc20', checksummedAddress);\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"caip.d.cts","sourceRoot":"","sources":["../../../src/mappers/helpers/caip.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,EAAE,wBAAwB;AAoCvE;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,GAAG,MAAM,GACvB,WAAW,GAAG,SAAS,CAoBzB;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,EACpC,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,aAAa,GAAG,SAAS,CA0B3B;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,GAC/C;IACE,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,aAAa,CAAC;CACxB,GACD,SAAS,CA+BZ;AAWD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,GAAG,GAAG,aAAa,GAAG,MAAM,EACrC,OAAO,CAAC,EAAE,WAAW,GAAG,GAAG,GAC1B,aAAa,GAAG,SAAS,CAwB3B"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import type { CaipAssetType, CaipChainId, Hex } from "@metamask/utils";
|
|
2
|
-
/**
|
|
3
|
-
* Normalizes a hex, decimal, numeric, or CAIP chain id to its CAIP-2 form.
|
|
4
|
-
* Only EVM (eip155) chains are normalized here; CAIP ids are returned as-is.
|
|
5
|
-
*
|
|
6
|
-
* @param chainId - Hex (`0x1`), numeric, decimal string, or CAIP chain id.
|
|
7
|
-
* @returns The CAIP-2 chain id, or `undefined` when it can't be normalized.
|
|
8
|
-
*/
|
|
9
|
-
export declare function formatChainIdToCaip(chainId: string | number): CaipChainId | undefined;
|
|
10
|
-
export declare function resolveNativeAssetId(chainId: string | number | undefined, symbol: string | undefined): CaipAssetType | undefined;
|
|
11
|
-
/**
|
|
12
|
-
* Resolves EVM native symbol, decimals, and CAIP asset id for a chain.
|
|
13
|
-
* Prefers eth-chainlist slip44 except testnet coin type 1, then falls back to
|
|
14
|
-
* `@metamask/slip44` by native symbol.
|
|
15
|
-
*
|
|
16
|
-
* @param chainId - CAIP-2 chain id (eip155 only).
|
|
17
|
-
* @returns Native asset metadata, or undefined when it cannot be resolved.
|
|
18
|
-
*/
|
|
19
|
-
export declare function getNativeAsset(chainId: CaipChainId): {
|
|
20
|
-
symbol: string;
|
|
21
|
-
decimals: number;
|
|
22
|
-
assetId: CaipAssetType;
|
|
23
|
-
} | undefined;
|
|
24
|
-
/**
|
|
25
|
-
* Encodes an EVM token address + chain id into a CAIP-19 asset id.
|
|
26
|
-
*
|
|
27
|
-
* @param address - Hex contract address, native sentinel, or CAIP asset id.
|
|
28
|
-
* @param chainId - CAIP-2 or hex chain id.
|
|
29
|
-
* @returns The CAIP-19 asset id, or `undefined` when it can't be encoded.
|
|
30
|
-
*/
|
|
31
|
-
export declare function formatAddressToAssetId(address: Hex | CaipAssetType | string, chainId?: CaipChainId | Hex): CaipAssetType | undefined;
|
|
32
|
-
//# sourceMappingURL=caip.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"caip.d.mts","sourceRoot":"","sources":["../../../src/mappers/helpers/caip.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,EAAE,wBAAwB;AAoCvE;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,GAAG,MAAM,GACvB,WAAW,GAAG,SAAS,CAoBzB;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,EACpC,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,aAAa,GAAG,SAAS,CA0B3B;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,GAC/C;IACE,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,aAAa,CAAC;CACxB,GACD,SAAS,CA+BZ;AAWD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,GAAG,GAAG,aAAa,GAAG,MAAM,EACrC,OAAO,CAAC,EAAE,WAAW,GAAG,GAAG,GAC1B,aAAa,GAAG,SAAS,CAwB3B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"caip.mjs","sourceRoot":"","sources":["../../../src/mappers/helpers/caip.ts"],"names":[],"mappings":"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","sourcesContent":["import { toChecksumHexAddress } from '@metamask/controller-utils';\n// @ts-expect-error: No type definitions for '@metamask/slip44'\nimport slip44data from '@metamask/slip44';\nimport type { CaipAssetType, CaipChainId, Hex } from '@metamask/utils';\nimport {\n isCaipAssetType,\n isStrictHexString,\n KnownCaipNamespace,\n parseCaipChainId,\n toCaipAssetType,\n} from '@metamask/utils';\nimport { getChainById } from 'eth-chainlist';\n\nimport { nativeTokenAddress, nativeTokenDecimals } from '../constants.js';\n\nconst slip44BySymbol = ((): Map<string, string> => {\n const coinTypeBySymbol = new Map<string, string>();\n\n for (const [coinType, entry] of Object.entries(\n slip44data as Record<string, { symbol: string }>,\n )) {\n const normalizedSymbol = entry.symbol.toUpperCase();\n\n if (!coinTypeBySymbol.has(normalizedSymbol)) {\n coinTypeBySymbol.set(normalizedSymbol, coinType);\n }\n }\n\n return coinTypeBySymbol;\n})();\n\nfunction getCoinType(symbol: string): string | undefined {\n const normalizedSymbol = symbol.toUpperCase();\n return (\n slip44BySymbol.get(normalizedSymbol) ??\n (normalizedSymbol === 'POL' ? slip44BySymbol.get('MATIC') : undefined)\n );\n}\n\n/**\n * Normalizes a hex, decimal, numeric, or CAIP chain id to its CAIP-2 form.\n * Only EVM (eip155) chains are normalized here; CAIP ids are returned as-is.\n *\n * @param chainId - Hex (`0x1`), numeric, decimal string, or CAIP chain id.\n * @returns The CAIP-2 chain id, or `undefined` when it can't be normalized.\n */\nexport function formatChainIdToCaip(\n chainId: string | number,\n): CaipChainId | undefined {\n if (typeof chainId === 'number') {\n return `eip155:${chainId}`;\n }\n\n if (chainId.includes(':')) {\n return chainId as CaipChainId;\n }\n\n if (chainId.startsWith('0x')) {\n const reference = Number.parseInt(chainId, 16);\n return Number.isNaN(reference) ? undefined : `eip155:${reference}`;\n }\n\n if (chainId === '') {\n return undefined;\n }\n\n const reference = Number(chainId);\n return Number.isNaN(reference) ? undefined : `eip155:${reference}`;\n}\n\nexport function resolveNativeAssetId(\n chainId: string | number | undefined,\n symbol: string | undefined,\n): CaipAssetType | undefined {\n if (chainId === undefined) {\n return undefined;\n }\n\n const caipChainId = formatChainIdToCaip(chainId);\n\n if (!caipChainId) {\n return undefined;\n }\n\n const { namespace, reference } = parseCaipChainId(caipChainId);\n const assetReference = symbol ? getCoinType(symbol) : undefined;\n\n if (assetReference) {\n return toCaipAssetType(namespace, reference, 'slip44', assetReference);\n }\n\n if (namespace === KnownCaipNamespace.Eip155) {\n return (\n getNativeAsset(caipChainId)?.assetId ??\n toCaipAssetType(namespace, reference, 'erc20', nativeTokenAddress)\n );\n }\n\n return undefined;\n}\n\n/**\n * Resolves EVM native symbol, decimals, and CAIP asset id for a chain.\n * Prefers eth-chainlist slip44 except testnet coin type 1, then falls back to\n * `@metamask/slip44` by native symbol.\n *\n * @param chainId - CAIP-2 chain id (eip155 only).\n * @returns Native asset metadata, or undefined when it cannot be resolved.\n */\nexport function getNativeAsset(chainId: CaipChainId):\n | {\n symbol: string;\n decimals: number;\n assetId: CaipAssetType;\n }\n | undefined {\n const { namespace, reference } = parseCaipChainId(chainId);\n if (namespace !== KnownCaipNamespace.Eip155) {\n return undefined;\n }\n\n const chain = getChainById(Number(reference));\n if (!chain) {\n return undefined;\n }\n\n const { nativeCurrency, slip44 } = chain;\n if (!nativeCurrency?.symbol) {\n return undefined;\n }\n\n const slip44TestnetCoinType = 1;\n const assetReference =\n typeof slip44 === 'number' && slip44 !== slip44TestnetCoinType\n ? String(slip44)\n : getCoinType(nativeCurrency.symbol);\n\n const assetId = assetReference\n ? toCaipAssetType(namespace, reference, 'slip44', assetReference)\n : toCaipAssetType(namespace, reference, 'erc20', nativeTokenAddress);\n\n return {\n symbol: nativeCurrency.symbol,\n decimals: nativeCurrency.decimals ?? nativeTokenDecimals,\n assetId,\n };\n}\n\nfunction isNativeAddress(address: string): boolean {\n const normalized = address.toLowerCase();\n return (\n normalized === nativeTokenAddress ||\n normalized === '0x0' ||\n /^0x0+$/u.test(normalized)\n );\n}\n\n/**\n * Encodes an EVM token address + chain id into a CAIP-19 asset id.\n *\n * @param address - Hex contract address, native sentinel, or CAIP asset id.\n * @param chainId - CAIP-2 or hex chain id.\n * @returns The CAIP-19 asset id, or `undefined` when it can't be encoded.\n */\nexport function formatAddressToAssetId(\n address: Hex | CaipAssetType | string,\n chainId?: CaipChainId | Hex,\n): CaipAssetType | undefined {\n if (isCaipAssetType(address)) {\n return address;\n }\n\n const caipChainId = chainId ? formatChainIdToCaip(chainId) : undefined;\n\n if (!caipChainId) {\n return undefined;\n }\n\n if (isNativeAddress(address)) {\n return undefined;\n }\n\n const checksummedAddress = toChecksumHexAddress(address);\n\n if (!isStrictHexString(checksummedAddress)) {\n return undefined;\n }\n\n const { namespace, reference } = parseCaipChainId(caipChainId);\n\n return toCaipAssetType(namespace, reference, 'erc20', checksummedAddress);\n}\n"]}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.getKnownTokenMetadata = void 0;
|
|
7
|
-
const contract_metadata_1 = __importDefault(require("@metamask/contract-metadata"));
|
|
8
|
-
const controller_utils_1 = require("@metamask/controller-utils");
|
|
9
|
-
const caip_js_1 = require("./caip.cjs");
|
|
10
|
-
const mainnetTokens = contract_metadata_1.default;
|
|
11
|
-
const mainnetAssetIdPrefix = 'eip155:1/';
|
|
12
|
-
function getKnownTokenMetadata(chainId, contractAddress) {
|
|
13
|
-
if (!contractAddress) {
|
|
14
|
-
return undefined;
|
|
15
|
-
}
|
|
16
|
-
const assetId = (0, caip_js_1.formatAddressToAssetId)(contractAddress, chainId);
|
|
17
|
-
if (!assetId?.startsWith(mainnetAssetIdPrefix)) {
|
|
18
|
-
return undefined;
|
|
19
|
-
}
|
|
20
|
-
const entry = mainnetTokens[(0, controller_utils_1.toChecksumHexAddress)(contractAddress)];
|
|
21
|
-
if (!entry) {
|
|
22
|
-
return undefined;
|
|
23
|
-
}
|
|
24
|
-
return {
|
|
25
|
-
symbol: entry.symbol,
|
|
26
|
-
decimals: entry.decimals,
|
|
27
|
-
assetId,
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
exports.getKnownTokenMetadata = getKnownTokenMetadata;
|
|
31
|
-
//# sourceMappingURL=token-metadata.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"token-metadata.cjs","sourceRoot":"","sources":["../../../src/mappers/helpers/token-metadata.ts"],"names":[],"mappings":";;;;;;AAAA,oFAAsD;AACtD,iEAAkE;AAGlE,wCAAmD;AAenD,MAAM,aAAa,GAAG,2BAAoD,CAAC;AAE3E,MAAM,oBAAoB,GAAG,WAAW,CAAC;AAEzC,SAAgB,qBAAqB,CACnC,OAA0B,EAC1B,eAAwB;IAExB,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,OAAO,GAAG,IAAA,gCAAsB,EAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IAEjE,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC;QAC/C,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GAAG,aAAa,CAAC,IAAA,uCAAoB,EAAC,eAAe,CAAC,CAAC,CAAC;IAEnE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO;QACL,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,OAAO;KACR,CAAC;AACJ,CAAC;AAzBD,sDAyBC","sourcesContent":["import contractMap from '@metamask/contract-metadata';\nimport { toChecksumHexAddress } from '@metamask/controller-utils';\nimport type { CaipChainId, Hex } from '@metamask/utils';\n\nimport { formatAddressToAssetId } from './caip.js';\n\nexport type KnownTokenMetadata = {\n symbol?: string;\n decimals?: number;\n assetId?: string;\n};\n\ntype ContractMetadataEntry = {\n name?: string;\n symbol?: string;\n decimals?: number;\n erc20?: boolean;\n};\n\nconst mainnetTokens = contractMap as Record<string, ContractMetadataEntry>;\n\nconst mainnetAssetIdPrefix = 'eip155:1/';\n\nexport function getKnownTokenMetadata(\n chainId: CaipChainId | Hex,\n contractAddress?: string,\n): KnownTokenMetadata | undefined {\n if (!contractAddress) {\n return undefined;\n }\n\n const assetId = formatAddressToAssetId(contractAddress, chainId);\n\n if (!assetId?.startsWith(mainnetAssetIdPrefix)) {\n return undefined;\n }\n\n const entry = mainnetTokens[toChecksumHexAddress(contractAddress)];\n\n if (!entry) {\n return undefined;\n }\n\n return {\n symbol: entry.symbol,\n decimals: entry.decimals,\n assetId,\n };\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"token-metadata.d.cts","sourceRoot":"","sources":["../../../src/mappers/helpers/token-metadata.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,wBAAwB;AAIxD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAaF,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,WAAW,GAAG,GAAG,EAC1B,eAAe,CAAC,EAAE,MAAM,GACvB,kBAAkB,GAAG,SAAS,CAsBhC"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { CaipChainId, Hex } from "@metamask/utils";
|
|
2
|
-
export type KnownTokenMetadata = {
|
|
3
|
-
symbol?: string;
|
|
4
|
-
decimals?: number;
|
|
5
|
-
assetId?: string;
|
|
6
|
-
};
|
|
7
|
-
export declare function getKnownTokenMetadata(chainId: CaipChainId | Hex, contractAddress?: string): KnownTokenMetadata | undefined;
|
|
8
|
-
//# sourceMappingURL=token-metadata.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"token-metadata.d.mts","sourceRoot":"","sources":["../../../src/mappers/helpers/token-metadata.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,wBAAwB;AAIxD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAaF,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,WAAW,GAAG,GAAG,EAC1B,eAAe,CAAC,EAAE,MAAM,GACvB,kBAAkB,GAAG,SAAS,CAsBhC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"token-metadata.mjs","sourceRoot":"","sources":["../../../src/mappers/helpers/token-metadata.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,YAAW,oCAAoC;;AACtD,OAAO,EAAE,oBAAoB,EAAE,mCAAmC;AAGlE,OAAO,EAAE,sBAAsB,EAAE,mBAAkB;AAenD,MAAM,aAAa,GAAG,WAAoD,CAAC;AAE3E,MAAM,oBAAoB,GAAG,WAAW,CAAC;AAEzC,MAAM,UAAU,qBAAqB,CACnC,OAA0B,EAC1B,eAAwB;IAExB,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,OAAO,GAAG,sBAAsB,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IAEjE,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC;QAC/C,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GAAG,aAAa,CAAC,oBAAoB,CAAC,eAAe,CAAC,CAAC,CAAC;IAEnE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO;QACL,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,OAAO;KACR,CAAC;AACJ,CAAC","sourcesContent":["import contractMap from '@metamask/contract-metadata';\nimport { toChecksumHexAddress } from '@metamask/controller-utils';\nimport type { CaipChainId, Hex } from '@metamask/utils';\n\nimport { formatAddressToAssetId } from './caip.js';\n\nexport type KnownTokenMetadata = {\n symbol?: string;\n decimals?: number;\n assetId?: string;\n};\n\ntype ContractMetadataEntry = {\n name?: string;\n symbol?: string;\n decimals?: number;\n erc20?: boolean;\n};\n\nconst mainnetTokens = contractMap as Record<string, ContractMetadataEntry>;\n\nconst mainnetAssetIdPrefix = 'eip155:1/';\n\nexport function getKnownTokenMetadata(\n chainId: CaipChainId | Hex,\n contractAddress?: string,\n): KnownTokenMetadata | undefined {\n if (!contractAddress) {\n return undefined;\n }\n\n const assetId = formatAddressToAssetId(contractAddress, chainId);\n\n if (!assetId?.startsWith(mainnetAssetIdPrefix)) {\n return undefined;\n }\n\n const entry = mainnetTokens[toChecksumHexAddress(contractAddress)];\n\n if (!entry) {\n return undefined;\n }\n\n return {\n symbol: entry.symbol,\n decimals: entry.decimals,\n assetId,\n };\n}\n"]}
|
|
@@ -1,254 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getTokenMetadataFromKnownToken = exports.getTokenAmountFromTransfer = exports.parseValueTransfers = exports.getNftPaymentTransfer = exports.isNftStandard = exports.getLocalTransactionStatus = exports.getLocalTransactionFees = exports.getFees = void 0;
|
|
4
|
-
const controller_utils_1 = require("@metamask/controller-utils");
|
|
5
|
-
const transaction_controller_1 = require("@metamask/transaction-controller");
|
|
6
|
-
const constants_js_1 = require("../constants.cjs");
|
|
7
|
-
const caip_js_1 = require("./caip.cjs");
|
|
8
|
-
const token_metadata_js_1 = require("./token-metadata.cjs");
|
|
9
|
-
function calculateNetworkFee(gasUsed, gasPrice) {
|
|
10
|
-
if (gasUsed === undefined || gasPrice === undefined) {
|
|
11
|
-
return undefined;
|
|
12
|
-
}
|
|
13
|
-
try {
|
|
14
|
-
return String(BigInt(gasUsed) * BigInt(gasPrice));
|
|
15
|
-
}
|
|
16
|
-
catch {
|
|
17
|
-
return undefined;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
function toNetworkFee(amount, chainId, symbol) {
|
|
21
|
-
const nativeAsset = (0, caip_js_1.getNativeAsset)(chainId);
|
|
22
|
-
if (nativeAsset) {
|
|
23
|
-
return {
|
|
24
|
-
type: 'base',
|
|
25
|
-
amount,
|
|
26
|
-
decimals: constants_js_1.nativeTokenDecimals,
|
|
27
|
-
assetType: 'native',
|
|
28
|
-
symbol: symbol ?? nativeAsset.symbol,
|
|
29
|
-
assetId: nativeAsset.assetId,
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
const assetId = symbol ? (0, caip_js_1.resolveNativeAssetId)(chainId, symbol) : undefined;
|
|
33
|
-
return {
|
|
34
|
-
type: 'base',
|
|
35
|
-
amount,
|
|
36
|
-
decimals: constants_js_1.nativeTokenDecimals,
|
|
37
|
-
assetType: 'native',
|
|
38
|
-
...(symbol ? { symbol } : {}),
|
|
39
|
-
...(assetId ? { assetId } : {}),
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
function getAssetTypeFromTransferType(transferType) {
|
|
43
|
-
if (transferType === 'normal' || transferType === 'internal') {
|
|
44
|
-
return 'native';
|
|
45
|
-
}
|
|
46
|
-
if (transferType === 'erc20') {
|
|
47
|
-
return 'erc20';
|
|
48
|
-
}
|
|
49
|
-
if (transferType === controller_utils_1.ERC721.toLowerCase() || transferType === 'erc721') {
|
|
50
|
-
return 'erc721';
|
|
51
|
-
}
|
|
52
|
-
if (transferType === controller_utils_1.ERC1155.toLowerCase() || transferType === 'erc1155') {
|
|
53
|
-
return 'erc1155';
|
|
54
|
-
}
|
|
55
|
-
return undefined;
|
|
56
|
-
}
|
|
57
|
-
function getNetworkFee(transaction) {
|
|
58
|
-
const chainId = (0, caip_js_1.formatChainIdToCaip)(transaction.chainId);
|
|
59
|
-
if (!chainId) {
|
|
60
|
-
return undefined;
|
|
61
|
-
}
|
|
62
|
-
const amount = calculateNetworkFee(transaction.gasUsed, transaction.effectiveGasPrice);
|
|
63
|
-
if (!amount) {
|
|
64
|
-
return undefined;
|
|
65
|
-
}
|
|
66
|
-
return toNetworkFee(amount, chainId);
|
|
67
|
-
}
|
|
68
|
-
function getFees(transaction) {
|
|
69
|
-
const networkFee = getNetworkFee(transaction);
|
|
70
|
-
return networkFee ? [networkFee] : undefined;
|
|
71
|
-
}
|
|
72
|
-
exports.getFees = getFees;
|
|
73
|
-
function getLocalTransactionFees(transactionGroup) {
|
|
74
|
-
const { primaryTransaction, nativeAssetSymbol } = transactionGroup;
|
|
75
|
-
const chainId = (0, caip_js_1.formatChainIdToCaip)(primaryTransaction.chainId);
|
|
76
|
-
if (!chainId) {
|
|
77
|
-
return undefined;
|
|
78
|
-
}
|
|
79
|
-
const amount = calculateNetworkFee(primaryTransaction.txReceipt?.gasUsed, primaryTransaction.txReceipt?.effectiveGasPrice ??
|
|
80
|
-
primaryTransaction.txParams?.gasPrice);
|
|
81
|
-
if (!amount) {
|
|
82
|
-
return undefined;
|
|
83
|
-
}
|
|
84
|
-
return [toNetworkFee(amount, chainId, nativeAssetSymbol)];
|
|
85
|
-
}
|
|
86
|
-
exports.getLocalTransactionFees = getLocalTransactionFees;
|
|
87
|
-
const inProgressTransactionStatuses = [
|
|
88
|
-
transaction_controller_1.TransactionStatus.unapproved,
|
|
89
|
-
transaction_controller_1.TransactionStatus.approved,
|
|
90
|
-
transaction_controller_1.TransactionStatus.signed,
|
|
91
|
-
transaction_controller_1.TransactionStatus.submitted,
|
|
92
|
-
];
|
|
93
|
-
const transactionGroupCancelledStatus = 'cancelled';
|
|
94
|
-
const smartTransactionStatus = {
|
|
95
|
-
cancelled: 'cancelled',
|
|
96
|
-
pending: 'pending',
|
|
97
|
-
success: 'success',
|
|
98
|
-
};
|
|
99
|
-
function getTransactionStatusKey(transaction) {
|
|
100
|
-
const { type, status } = transaction;
|
|
101
|
-
const receiptStatus = transaction.txReceipt?.status;
|
|
102
|
-
if (receiptStatus === '0x0') {
|
|
103
|
-
return transaction_controller_1.TransactionStatus.failed;
|
|
104
|
-
}
|
|
105
|
-
if (status === transaction_controller_1.TransactionStatus.confirmed &&
|
|
106
|
-
type === transaction_controller_1.TransactionType.cancel) {
|
|
107
|
-
return transactionGroupCancelledStatus;
|
|
108
|
-
}
|
|
109
|
-
return transaction.status;
|
|
110
|
-
}
|
|
111
|
-
function getLocalTransactionStatus({ primaryTransaction, initialTransaction, }) {
|
|
112
|
-
if (initialTransaction.isSmartTransaction) {
|
|
113
|
-
const smartStatus = initialTransaction.status;
|
|
114
|
-
if (smartStatus === smartTransactionStatus.pending) {
|
|
115
|
-
return 'pending';
|
|
116
|
-
}
|
|
117
|
-
if (smartStatus === smartTransactionStatus.success) {
|
|
118
|
-
return 'success';
|
|
119
|
-
}
|
|
120
|
-
if (smartStatus === smartTransactionStatus.cancelled) {
|
|
121
|
-
return 'failed';
|
|
122
|
-
}
|
|
123
|
-
return 'pending';
|
|
124
|
-
}
|
|
125
|
-
const statusKey = getTransactionStatusKey(primaryTransaction);
|
|
126
|
-
if (statusKey === transaction_controller_1.TransactionStatus.confirmed) {
|
|
127
|
-
return 'success';
|
|
128
|
-
}
|
|
129
|
-
if (statusKey === transaction_controller_1.TransactionStatus.cancelled ||
|
|
130
|
-
statusKey === transactionGroupCancelledStatus ||
|
|
131
|
-
statusKey === transaction_controller_1.TransactionStatus.dropped ||
|
|
132
|
-
statusKey === transaction_controller_1.TransactionStatus.failed ||
|
|
133
|
-
statusKey === transaction_controller_1.TransactionStatus.rejected) {
|
|
134
|
-
return 'failed';
|
|
135
|
-
}
|
|
136
|
-
if (inProgressTransactionStatuses.includes(statusKey)) {
|
|
137
|
-
return 'pending';
|
|
138
|
-
}
|
|
139
|
-
return 'pending';
|
|
140
|
-
}
|
|
141
|
-
exports.getLocalTransactionStatus = getLocalTransactionStatus;
|
|
142
|
-
function isNftStandard(value) {
|
|
143
|
-
return value === controller_utils_1.ERC721.toLowerCase() || value === controller_utils_1.ERC1155.toLowerCase();
|
|
144
|
-
}
|
|
145
|
-
exports.isNftStandard = isNftStandard;
|
|
146
|
-
function getNftPaymentTransfer({ side, sentTransfer, receivedTransfer, sentNativeTransfer, nftCounterparty, transactionFrom, transactionTo, subjectAddress, }) {
|
|
147
|
-
const isFungible = (transfer) => Boolean(transfer && !isNftStandard(transfer.transferType));
|
|
148
|
-
if (side === 'buy') {
|
|
149
|
-
for (const transfer of [sentNativeTransfer, sentTransfer]) {
|
|
150
|
-
if (!transfer || !isFungible(transfer)) {
|
|
151
|
-
continue;
|
|
152
|
-
}
|
|
153
|
-
// Only count a payment that goes to the NFT counterparty (direct sale) or
|
|
154
|
-
// to the contract being called (marketplace/router). This avoids treating
|
|
155
|
-
// an unrelated native send in the same transaction as the NFT payment.
|
|
156
|
-
if ((0, controller_utils_1.isEqualCaseInsensitive)(transfer.to, nftCounterparty) ||
|
|
157
|
-
(0, controller_utils_1.isEqualCaseInsensitive)(transfer.to, transactionTo)) {
|
|
158
|
-
return transfer;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
return undefined;
|
|
162
|
-
}
|
|
163
|
-
if (!receivedTransfer || !isFungible(receivedTransfer)) {
|
|
164
|
-
return undefined;
|
|
165
|
-
}
|
|
166
|
-
if ((0, controller_utils_1.isEqualCaseInsensitive)(receivedTransfer.from, nftCounterparty) ||
|
|
167
|
-
(transactionFrom &&
|
|
168
|
-
!(0, controller_utils_1.isEqualCaseInsensitive)(transactionFrom, subjectAddress) &&
|
|
169
|
-
(0, controller_utils_1.isEqualCaseInsensitive)(receivedTransfer.from, transactionFrom))) {
|
|
170
|
-
return receivedTransfer;
|
|
171
|
-
}
|
|
172
|
-
return undefined;
|
|
173
|
-
}
|
|
174
|
-
exports.getNftPaymentTransfer = getNftPaymentTransfer;
|
|
175
|
-
const resolveAssetId = (chainId, contractAddress) => {
|
|
176
|
-
if (!contractAddress) {
|
|
177
|
-
return undefined;
|
|
178
|
-
}
|
|
179
|
-
return (0, caip_js_1.formatAddressToAssetId)(contractAddress, chainId);
|
|
180
|
-
};
|
|
181
|
-
/**
|
|
182
|
-
* Resolves the user's primary send and receive legs from indexed value transfers.
|
|
183
|
-
* Prefers a receive whose symbol differs from the sent leg so dust does not win.
|
|
184
|
-
*
|
|
185
|
-
* @param valueTransfers - Indexed value transfers from the Accounts API.
|
|
186
|
-
* @param subjectAddress - The account address to match transfers against.
|
|
187
|
-
* @returns The primary sent and received transfers for the account.
|
|
188
|
-
*/
|
|
189
|
-
function parseValueTransfers(valueTransfers, subjectAddress) {
|
|
190
|
-
const sent = valueTransfers?.filter(({ from }) => (0, controller_utils_1.isEqualCaseInsensitive)(from, subjectAddress));
|
|
191
|
-
const received = valueTransfers?.filter(({ to }) => (0, controller_utils_1.isEqualCaseInsensitive)(to, subjectAddress));
|
|
192
|
-
const sentTransfer = sent?.[0];
|
|
193
|
-
const receivedTransfer = received?.find(({ symbol }) => symbol !== sentTransfer?.symbol) ??
|
|
194
|
-
received?.[0];
|
|
195
|
-
const sentNativeTransfer = sent?.find(({ transferType }) => transferType === 'normal');
|
|
196
|
-
const sentNftTransfer = sent?.find(({ transferType }) => isNftStandard(transferType));
|
|
197
|
-
const receivedNftTransfer = received?.find(({ transferType }) => isNftStandard(transferType));
|
|
198
|
-
return {
|
|
199
|
-
sentTransfer,
|
|
200
|
-
receivedTransfer,
|
|
201
|
-
sentNativeTransfer,
|
|
202
|
-
sentNftTransfer,
|
|
203
|
-
receivedNftTransfer,
|
|
204
|
-
};
|
|
205
|
-
}
|
|
206
|
-
exports.parseValueTransfers = parseValueTransfers;
|
|
207
|
-
function getTokenAmountFromTransfer(transfer, direction, chainId) {
|
|
208
|
-
if (!transfer) {
|
|
209
|
-
return undefined;
|
|
210
|
-
}
|
|
211
|
-
const { transferType, amount } = transfer;
|
|
212
|
-
const isNftTransfer = isNftStandard(transferType);
|
|
213
|
-
const symbol = isNftTransfer
|
|
214
|
-
? transfer.name || transfer.symbol
|
|
215
|
-
: transfer.symbol;
|
|
216
|
-
if (!symbol && amount === undefined) {
|
|
217
|
-
return undefined;
|
|
218
|
-
}
|
|
219
|
-
const hasTransferAmount = !isNftTransfer && amount !== null && amount !== undefined;
|
|
220
|
-
const assetType = getAssetTypeFromTransferType(transferType);
|
|
221
|
-
let assetId;
|
|
222
|
-
if (assetType === 'native') {
|
|
223
|
-
assetId = (0, caip_js_1.resolveNativeAssetId)(chainId, symbol);
|
|
224
|
-
}
|
|
225
|
-
else if (transfer && !isNftTransfer) {
|
|
226
|
-
assetId = resolveAssetId(chainId, transfer.contractAddress);
|
|
227
|
-
}
|
|
228
|
-
return {
|
|
229
|
-
direction,
|
|
230
|
-
...(hasTransferAmount ? { amount: String(amount) } : {}),
|
|
231
|
-
...(transfer.decimal === undefined ? {} : { decimals: transfer.decimal }),
|
|
232
|
-
...(symbol ? { symbol } : {}),
|
|
233
|
-
...(assetId ? { assetId } : {}),
|
|
234
|
-
...(assetType ? { assetType } : {}),
|
|
235
|
-
};
|
|
236
|
-
}
|
|
237
|
-
exports.getTokenAmountFromTransfer = getTokenAmountFromTransfer;
|
|
238
|
-
function getTokenMetadataFromKnownToken(contractAddress, direction, chainId) {
|
|
239
|
-
const tokenMetadata = (0, token_metadata_js_1.getKnownTokenMetadata)(chainId, contractAddress);
|
|
240
|
-
if (!tokenMetadata) {
|
|
241
|
-
return undefined;
|
|
242
|
-
}
|
|
243
|
-
return {
|
|
244
|
-
direction,
|
|
245
|
-
assetType: 'erc20',
|
|
246
|
-
...(tokenMetadata.symbol ? { symbol: tokenMetadata.symbol } : {}),
|
|
247
|
-
...(tokenMetadata.decimals === undefined
|
|
248
|
-
? {}
|
|
249
|
-
: { decimals: tokenMetadata.decimals }),
|
|
250
|
-
...(tokenMetadata.assetId ? { assetId: tokenMetadata.assetId } : {}),
|
|
251
|
-
};
|
|
252
|
-
}
|
|
253
|
-
exports.getTokenMetadataFromKnownToken = getTokenMetadataFromKnownToken;
|
|
254
|
-
//# sourceMappingURL=transactions.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transactions.cjs","sourceRoot":"","sources":["../../../src/mappers/helpers/transactions.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ERC721,\n ERC1155,\n isEqualCaseInsensitive as equalsIgnoreCase,\n} from '@metamask/controller-utils';\nimport type { V1TransactionByHashResponse } from '@metamask/core-backend';\nimport type { TransactionMeta } from '@metamask/transaction-controller';\nimport {\n TransactionStatus,\n TransactionType,\n} from '@metamask/transaction-controller';\nimport type { CaipChainId, Hex } from '@metamask/utils';\n\nimport type {\n AssetType,\n Fee,\n Status,\n TokenAmount,\n ValueTransfer,\n} from '../../types.js';\nimport { nativeTokenDecimals } from '../constants.js';\nimport {\n formatAddressToAssetId,\n formatChainIdToCaip,\n getNativeAsset,\n resolveNativeAssetId,\n} from './caip.js';\nimport { getKnownTokenMetadata } from './token-metadata.js';\n\n// Adds optional `isSmartTransaction` to `TransactionMeta`.\nexport type TransactionGroup = {\n hasCancelled: boolean;\n hasRetried: boolean;\n initialTransaction: TransactionMeta & { isSmartTransaction?: boolean };\n nonce: Hex;\n primaryTransaction: TransactionMeta;\n transactions: TransactionMeta[];\n};\n\nfunction calculateNetworkFee(\n gasUsed: string | number | undefined,\n gasPrice: string | number | undefined,\n): string | undefined {\n if (gasUsed === undefined || gasPrice === undefined) {\n return undefined;\n }\n\n try {\n return String(BigInt(gasUsed) * BigInt(gasPrice));\n } catch {\n return undefined;\n }\n}\n\nfunction toNetworkFee(\n amount: string,\n chainId: CaipChainId,\n symbol?: string,\n): Fee {\n const nativeAsset = getNativeAsset(chainId);\n\n if (nativeAsset) {\n return {\n type: 'base',\n amount,\n decimals: nativeTokenDecimals,\n assetType: 'native',\n symbol: symbol ?? nativeAsset.symbol,\n assetId: nativeAsset.assetId,\n };\n }\n\n const assetId = symbol ? resolveNativeAssetId(chainId, symbol) : undefined;\n\n return {\n type: 'base',\n amount,\n decimals: nativeTokenDecimals,\n assetType: 'native',\n ...(symbol ? { symbol } : {}),\n ...(assetId ? { assetId } : {}),\n };\n}\n\nfunction getAssetTypeFromTransferType(\n transferType: string | undefined,\n): AssetType | undefined {\n if (transferType === 'normal' || transferType === 'internal') {\n return 'native';\n }\n\n if (transferType === 'erc20') {\n return 'erc20';\n }\n\n if (transferType === ERC721.toLowerCase() || transferType === 'erc721') {\n return 'erc721';\n }\n\n if (transferType === ERC1155.toLowerCase() || transferType === 'erc1155') {\n return 'erc1155';\n }\n\n return undefined;\n}\n\nfunction getNetworkFee(\n transaction: V1TransactionByHashResponse,\n): Fee | undefined {\n const chainId = formatChainIdToCaip(transaction.chainId);\n\n if (!chainId) {\n return undefined;\n }\n\n const amount = calculateNetworkFee(\n transaction.gasUsed,\n transaction.effectiveGasPrice,\n );\n\n if (!amount) {\n return undefined;\n }\n\n return toNetworkFee(amount, chainId);\n}\n\nexport function getFees(\n transaction: V1TransactionByHashResponse,\n): Fee[] | undefined {\n const networkFee = getNetworkFee(transaction);\n\n return networkFee ? [networkFee] : undefined;\n}\n\nexport function getLocalTransactionFees(\n transactionGroup: Pick<TransactionGroup, 'primaryTransaction'> & {\n nativeAssetSymbol?: string;\n },\n): Fee[] | undefined {\n const { primaryTransaction, nativeAssetSymbol } = transactionGroup;\n const chainId = formatChainIdToCaip(primaryTransaction.chainId);\n\n if (!chainId) {\n return undefined;\n }\n\n const amount = calculateNetworkFee(\n primaryTransaction.txReceipt?.gasUsed,\n primaryTransaction.txReceipt?.effectiveGasPrice ??\n primaryTransaction.txParams?.gasPrice,\n );\n\n if (!amount) {\n return undefined;\n }\n\n return [toNetworkFee(amount, chainId, nativeAssetSymbol)];\n}\n\nconst inProgressTransactionStatuses = [\n TransactionStatus.unapproved,\n TransactionStatus.approved,\n TransactionStatus.signed,\n TransactionStatus.submitted,\n];\n\nconst transactionGroupCancelledStatus = 'cancelled';\n\nconst smartTransactionStatus = {\n cancelled: 'cancelled',\n pending: 'pending',\n success: 'success',\n} as const;\n\nfunction getTransactionStatusKey(\n transaction: TransactionGroup['primaryTransaction'],\n): string {\n const { type, status } = transaction;\n const receiptStatus = transaction.txReceipt?.status;\n\n if (receiptStatus === '0x0') {\n return TransactionStatus.failed;\n }\n\n if (\n status === TransactionStatus.confirmed &&\n type === TransactionType.cancel\n ) {\n return transactionGroupCancelledStatus;\n }\n\n return transaction.status;\n}\n\nexport function getLocalTransactionStatus({\n primaryTransaction,\n initialTransaction,\n}: {\n primaryTransaction: TransactionGroup['primaryTransaction'];\n initialTransaction: TransactionGroup['initialTransaction'];\n}): Status {\n if (initialTransaction.isSmartTransaction) {\n const smartStatus = initialTransaction.status as string | undefined;\n\n if (smartStatus === smartTransactionStatus.pending) {\n return 'pending';\n }\n\n if (smartStatus === smartTransactionStatus.success) {\n return 'success';\n }\n\n if (smartStatus === smartTransactionStatus.cancelled) {\n return 'failed';\n }\n\n return 'pending';\n }\n\n const statusKey = getTransactionStatusKey(primaryTransaction);\n\n if (statusKey === TransactionStatus.confirmed) {\n return 'success';\n }\n\n if (\n statusKey === TransactionStatus.cancelled ||\n statusKey === transactionGroupCancelledStatus ||\n statusKey === TransactionStatus.dropped ||\n statusKey === TransactionStatus.failed ||\n statusKey === TransactionStatus.rejected\n ) {\n return 'failed';\n }\n\n if (\n inProgressTransactionStatuses.includes(\n statusKey as (typeof inProgressTransactionStatuses)[number],\n )\n ) {\n return 'pending';\n }\n\n return 'pending';\n}\n\nexport function isNftStandard(value?: string): boolean {\n return value === ERC721.toLowerCase() || value === ERC1155.toLowerCase();\n}\n\nexport function getNftPaymentTransfer({\n side,\n sentTransfer,\n receivedTransfer,\n sentNativeTransfer,\n nftCounterparty,\n transactionFrom,\n transactionTo,\n subjectAddress,\n}: {\n side: 'buy' | 'sell';\n sentTransfer?: ValueTransfer;\n receivedTransfer?: ValueTransfer;\n sentNativeTransfer?: ValueTransfer;\n nftCounterparty: string;\n transactionFrom?: string;\n transactionTo?: string;\n subjectAddress: string;\n}): ValueTransfer | undefined {\n const isFungible = (transfer?: ValueTransfer): boolean =>\n Boolean(transfer && !isNftStandard(transfer.transferType));\n\n if (side === 'buy') {\n for (const transfer of [sentNativeTransfer, sentTransfer]) {\n if (!transfer || !isFungible(transfer)) {\n continue;\n }\n\n // Only count a payment that goes to the NFT counterparty (direct sale) or\n // to the contract being called (marketplace/router). This avoids treating\n // an unrelated native send in the same transaction as the NFT payment.\n if (\n equalsIgnoreCase(transfer.to, nftCounterparty) ||\n equalsIgnoreCase(transfer.to, transactionTo as string)\n ) {\n return transfer;\n }\n }\n\n return undefined;\n }\n\n if (!receivedTransfer || !isFungible(receivedTransfer)) {\n return undefined;\n }\n\n if (\n equalsIgnoreCase(receivedTransfer.from, nftCounterparty) ||\n (transactionFrom &&\n !equalsIgnoreCase(transactionFrom, subjectAddress) &&\n equalsIgnoreCase(receivedTransfer.from, transactionFrom))\n ) {\n return receivedTransfer;\n }\n\n return undefined;\n}\n\nconst resolveAssetId = (\n chainId: CaipChainId,\n contractAddress: string | undefined,\n): string | undefined => {\n if (!contractAddress) {\n return undefined;\n }\n\n return formatAddressToAssetId(contractAddress, chainId);\n};\n\n/**\n * Resolves the user's primary send and receive legs from indexed value transfers.\n * Prefers a receive whose symbol differs from the sent leg so dust does not win.\n *\n * @param valueTransfers - Indexed value transfers from the Accounts API.\n * @param subjectAddress - The account address to match transfers against.\n * @returns The primary sent and received transfers for the account.\n */\nexport function parseValueTransfers(\n valueTransfers: ValueTransfer[] | undefined,\n subjectAddress: string,\n): {\n sentTransfer: ValueTransfer | undefined;\n receivedTransfer: ValueTransfer | undefined;\n sentNativeTransfer: ValueTransfer | undefined;\n sentNftTransfer: ValueTransfer | undefined;\n receivedNftTransfer: ValueTransfer | undefined;\n} {\n const sent = valueTransfers?.filter(({ from }) =>\n equalsIgnoreCase(from, subjectAddress),\n );\n const received = valueTransfers?.filter(({ to }) =>\n equalsIgnoreCase(to, subjectAddress),\n );\n\n const sentTransfer = sent?.[0];\n\n const receivedTransfer =\n received?.find(({ symbol }) => symbol !== sentTransfer?.symbol) ??\n received?.[0];\n\n const sentNativeTransfer = sent?.find(\n ({ transferType }) => transferType === 'normal',\n );\n\n const sentNftTransfer = sent?.find(({ transferType }) =>\n isNftStandard(transferType),\n );\n const receivedNftTransfer = received?.find(({ transferType }) =>\n isNftStandard(transferType),\n );\n\n return {\n sentTransfer,\n receivedTransfer,\n sentNativeTransfer,\n sentNftTransfer,\n receivedNftTransfer,\n };\n}\n\nexport function getTokenAmountFromTransfer(\n transfer: ValueTransfer | undefined,\n direction: TokenAmount['direction'],\n chainId: CaipChainId,\n): TokenAmount | undefined {\n if (!transfer) {\n return undefined;\n }\n\n const { transferType, amount } = transfer;\n const isNftTransfer = isNftStandard(transferType);\n const symbol = isNftTransfer\n ? transfer.name || transfer.symbol\n : transfer.symbol;\n\n if (!symbol && amount === undefined) {\n return undefined;\n }\n\n const hasTransferAmount =\n !isNftTransfer && amount !== null && amount !== undefined;\n const assetType = getAssetTypeFromTransferType(transferType);\n\n let assetId: string | undefined;\n if (assetType === 'native') {\n assetId = resolveNativeAssetId(chainId, symbol);\n } else if (transfer && !isNftTransfer) {\n assetId = resolveAssetId(chainId, transfer.contractAddress);\n }\n\n return {\n direction,\n ...(hasTransferAmount ? { amount: String(amount) } : {}),\n ...(transfer.decimal === undefined ? {} : { decimals: transfer.decimal }),\n ...(symbol ? { symbol } : {}),\n ...(assetId ? { assetId } : {}),\n ...(assetType ? { assetType } : {}),\n };\n}\n\nexport function getTokenMetadataFromKnownToken(\n contractAddress: string | undefined,\n direction: TokenAmount['direction'],\n chainId: CaipChainId,\n): TokenAmount | undefined {\n const tokenMetadata = getKnownTokenMetadata(chainId, contractAddress);\n\n if (!tokenMetadata) {\n return undefined;\n }\n\n return {\n direction,\n assetType: 'erc20',\n ...(tokenMetadata.symbol ? { symbol: tokenMetadata.symbol } : {}),\n ...(tokenMetadata.decimals === undefined\n ? {}\n : { decimals: tokenMetadata.decimals }),\n ...(tokenMetadata.assetId ? { assetId: tokenMetadata.assetId } : {}),\n };\n}\n"]}
|