Skip to content

Commit 8bb1fa4

Browse files
Merge pull request #8391 from BitGo/feat/ams-getfilteredfeatures-overload-cshld-559
feat(statics): add CoinFeature[] overload to getFilteredFeatures
2 parents 5b82c98 + 83830c2 commit 8bb1fa4

2 files changed

Lines changed: 15 additions & 13 deletions

File tree

modules/statics/src/coins/generateERC20.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { erc20, erc20Token, terc20 } from '../account';
22
import { BaseCoin, CoinFeature, UnderlyingAsset } from '../base';
33
import { AccountNetwork, EthereumNetwork, Networks } from '../networks';
4-
import { ofcerc20, tofcerc20 } from '../ofc';
4+
import { getFilteredFeatures, ofcerc20, tofcerc20 } from '../ofc';
55

66
// --- Shared config interfaces ---
77

@@ -20,6 +20,7 @@ interface BaseErc20Config {
2020
interface Erc20WithOfcConfig extends BaseErc20Config {
2121
ofcId: string;
2222
ofcName: string;
23+
ofcFeatures: CoinFeature[];
2324
ofcAddressCoin?: string;
2425
skipOfc?: false;
2526
}
@@ -35,7 +36,7 @@ type Erc20TokenConfig = Erc20Config & { network: AccountNetwork };
3536

3637
function createOfcCoin(
3738
config: Erc20WithOfcConfig,
38-
onchainFeatures: CoinFeature[],
39+
features: CoinFeature[],
3940
defaultAddressCoin: string,
4041
isTestnet: boolean
4142
) {
@@ -48,7 +49,7 @@ function createOfcCoin(
4849
config.decimalPlaces,
4950
config.asset,
5051
undefined, // kind
51-
undefined,
52+
getFilteredFeatures(features),
5253
undefined, // prefix
5354
undefined, // suffix
5455
undefined, // network
@@ -75,7 +76,7 @@ export function generateErc20Coin(config: Erc20CoinConfig): Readonly<BaseCoin>[]
7576

7677
if (config.skipOfc) return [onChain];
7778

78-
return [onChain, createOfcCoin(config, onChain.features, 'eth', false)];
79+
return [onChain, createOfcCoin(config, config.ofcFeatures ?? onChain.features, 'eth', false)];
7980
}
8081

8182
export function generateTestErc20Coin(config: Erc20CoinConfig): Readonly<BaseCoin>[] {
@@ -94,7 +95,7 @@ export function generateTestErc20Coin(config: Erc20CoinConfig): Readonly<BaseCoi
9495

9596
if (config.skipOfc) return [onChain];
9697

97-
return [onChain, createOfcCoin(config, onChain.features, 'teth', true)];
98+
return [onChain, createOfcCoin(config, config.ofcFeatures ?? onChain.features, 'teth', true)];
9899
}
99100

100101
// --- ERC20 Token generators (erc20Token for non-Ethereum EVM chains) ---

modules/statics/src/ofc.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,16 +41,17 @@ const DISALLOWED_FEATURES = [
4141
];
4242

4343
const REQUIRED_FEATURES = [CoinFeature.ACCOUNT_MODEL, CoinFeature.REQUIRES_BIG_NUMBER];
44-
/**
45-
* Get filtered features for a coin based on its suffix
46-
* @param suffix The coin suffix to look up
47-
* @returns Filtered array of CoinFeatures excluding the ones in the exclude list
48-
*/
49-
export function getFilteredFeatures(suffix: string): CoinFeature[] {
44+
export function getFilteredFeatures(suffix: string): CoinFeature[];
45+
export function getFilteredFeatures(features: CoinFeature[]): CoinFeature[];
46+
export function getFilteredFeatures(input: string | CoinFeature[]): CoinFeature[] {
47+
if (Array.isArray(input)) {
48+
const filteredFeatures = input.filter((feature) => !DISALLOWED_FEATURES.includes(feature));
49+
return [...filteredFeatures, ...REQUIRED_FEATURES];
50+
}
5051
const coinsMap = getAllCoinsAndTokensMap();
51-
if (coinsMap.has(suffix.toLowerCase())) {
52+
if (coinsMap.has(input.toLowerCase())) {
5253
const filteredFeatures = coinsMap
53-
.get(suffix.toLowerCase())
54+
.get(input.toLowerCase())
5455
.features.filter((feature) => !DISALLOWED_FEATURES.includes(feature));
5556
return [...filteredFeatures, ...REQUIRED_FEATURES];
5657
}

0 commit comments

Comments
 (0)