Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 30 additions & 1 deletion modules/statics/src/coins.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ import {
} from './account';
import { ofcToken } from './ofc';
import { BaseCoin, CoinFeature, DynamicCoin } from './base';
import { AmsTokenConfig, TrimmedAmsTokenConfig } from './tokenConfig';
import { AmsNetworkConfigMap, AmsTokenConfig, TrimmedAmsTokenConfig } from './tokenConfig';
import { CoinMap } from './map';
import { BaseNetwork, getNetwork, getNetworksMap, NetworkType } from './networks';
import { networkFeatureMapForTokens } from './networkFeatureMapForTokens';
Expand Down Expand Up @@ -471,6 +471,35 @@ export function createTokenMapUsingConfigDetails(tokenConfigMap: Record<string,
return CoinMap.fromCoins(Array.from(BaseCoins.values()));
}

/**
* Enrich base chain coins (isToken=false) with features from the AMS networks map.
*
* createTokenMapUsingTrimmedConfigDetails reads features for base chains from
* TrimmedAmsTokenConfig.additionalFeatures. The assetsList endpoint returns base chains with no features;
* features are in the networks endpoint (/api/v1/networks/:network), matched by coin.network.name === networksEntry.name.
*
* Coins that already have additionalFeatures defined are left unchanged.
* Coins whose network.name has no match in networksMap are left unchanged (empty features).
*/
export function enrichBaseChainFeatures(
coinTokenMap: Record<string, TrimmedAmsTokenConfig[]>,
networksMap: AmsNetworkConfigMap
): Record<string, TrimmedAmsTokenConfig[]> {
const featuresByNetworkName = new Map<string, string[]>(
Object.values(networksMap).map((net): [string, string[]] => [net.name, net.features])
);
return Object.fromEntries(
Object.entries(coinTokenMap).map(([key, coins]) => [
key,
coins.map((coin) => {
if (coin.isToken || coin.additionalFeatures !== undefined) return coin;
const features = featuresByNetworkName.get(coin.network.name);
return features !== undefined ? { ...coin, additionalFeatures: features } : coin;
}),
])
);
}

export function createTokenMapUsingTrimmedConfigDetails(
reducedTokenConfigMap: Record<string, TrimmedAmsTokenConfig[]>
): CoinMap {
Expand Down
8 changes: 7 additions & 1 deletion modules/statics/src/tokenConfig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ import {
} from './account';
import { CoinFamily, CoinKind, BaseCoin, CoinFeature } from './base';
import { coins } from './coins';
import { EthereumNetwork, Networks, NetworkType } from './networks';
import { DynamicNetworkOptions, EthereumNetwork, Networks, NetworkType } from './networks';
import { OfcCoin } from './ofc';

export interface BaseTokenConfig {
Expand Down Expand Up @@ -289,6 +289,12 @@ export interface AmsTokenConfig {
policyId?: string;
}

export interface AmsNetworkConfig extends DynamicNetworkOptions {
features: CoinFeature[];
}

export type AmsNetworkConfigMap = Record<string, AmsNetworkConfig>;

export interface TrimmedAmsNetworkConfig {
name: string;
}
Expand Down
Loading