Skip to content

Commit 73c8370

Browse files
Merge pull request #8422 from BitGo/CECHO-634
2 parents 8fa5743 + 0e1dd90 commit 73c8370

2 files changed

Lines changed: 37 additions & 2 deletions

File tree

modules/statics/src/coins.ts

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ import {
3131
} from './account';
3232
import { ofcToken } from './ofc';
3333
import { BaseCoin, CoinFeature, DynamicCoin } from './base';
34-
import { AmsTokenConfig, TrimmedAmsTokenConfig } from './tokenConfig';
34+
import { AmsNetworkConfigMap, AmsTokenConfig, TrimmedAmsTokenConfig } from './tokenConfig';
3535
import { CoinMap } from './map';
3636
import { BaseNetwork, getNetwork, getNetworksMap, NetworkType } from './networks';
3737
import { networkFeatureMapForTokens } from './networkFeatureMapForTokens';
@@ -471,6 +471,35 @@ export function createTokenMapUsingConfigDetails(tokenConfigMap: Record<string,
471471
return CoinMap.fromCoins(Array.from(BaseCoins.values()));
472472
}
473473

474+
/**
475+
* Enrich base chain coins (isToken=false) with features from the AMS networks map.
476+
*
477+
* createTokenMapUsingTrimmedConfigDetails reads features for base chains from
478+
* TrimmedAmsTokenConfig.additionalFeatures. The assetsList endpoint returns base chains with no features;
479+
* features are in the networks endpoint (/api/v1/networks/:network), matched by coin.network.name === networksEntry.name.
480+
*
481+
* Coins that already have additionalFeatures defined are left unchanged.
482+
* Coins whose network.name has no match in networksMap are left unchanged (empty features).
483+
*/
484+
export function enrichBaseChainFeatures(
485+
coinTokenMap: Record<string, TrimmedAmsTokenConfig[]>,
486+
networksMap: AmsNetworkConfigMap
487+
): Record<string, TrimmedAmsTokenConfig[]> {
488+
const featuresByNetworkName = new Map<string, string[]>(
489+
Object.values(networksMap).map((net): [string, string[]] => [net.name, net.features])
490+
);
491+
return Object.fromEntries(
492+
Object.entries(coinTokenMap).map(([key, coins]) => [
493+
key,
494+
coins.map((coin) => {
495+
if (coin.isToken || coin.additionalFeatures !== undefined) return coin;
496+
const features = featuresByNetworkName.get(coin.network.name);
497+
return features !== undefined ? { ...coin, additionalFeatures: features } : coin;
498+
}),
499+
])
500+
);
501+
}
502+
474503
export function createTokenMapUsingTrimmedConfigDetails(
475504
reducedTokenConfigMap: Record<string, TrimmedAmsTokenConfig[]>
476505
): CoinMap {

modules/statics/src/tokenConfig.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ import {
4242
} from './account';
4343
import { CoinFamily, CoinKind, BaseCoin, CoinFeature } from './base';
4444
import { coins } from './coins';
45-
import { EthereumNetwork, Networks, NetworkType } from './networks';
45+
import { DynamicNetworkOptions, EthereumNetwork, Networks, NetworkType } from './networks';
4646
import { OfcCoin } from './ofc';
4747

4848
export interface BaseTokenConfig {
@@ -289,6 +289,12 @@ export interface AmsTokenConfig {
289289
policyId?: string;
290290
}
291291

292+
export interface AmsNetworkConfig extends DynamicNetworkOptions {
293+
features: CoinFeature[];
294+
}
295+
296+
export type AmsNetworkConfigMap = Record<string, AmsNetworkConfig>;
297+
292298
export interface TrimmedAmsNetworkConfig {
293299
name: string;
294300
}

0 commit comments

Comments
 (0)