Skip to content

feat(statics): add runtime validation for AMS token metadata (CGD-748)#8925

Draft
bitgo-ai-agent-dev[bot] wants to merge 1 commit into
masterfrom
cgd-748-ams-token-metadata-validation
Draft

feat(statics): add runtime validation for AMS token metadata (CGD-748)#8925
bitgo-ai-agent-dev[bot] wants to merge 1 commit into
masterfrom
cgd-748-ams-token-metadata-validation

Conversation

@bitgo-ai-agent-dev
Copy link
Copy Markdown

Summary

  • Add validateAmsTokenConfig and validateTrimmedAmsTokenConfig functions to @bitgo/statics that validate AMS token metadata at the boundary before it reaches coin factory constructors
  • Guard decimalPlaces against NaN, Infinity, negative values, and non-integers that would corrupt Math.pow(10, decimalPlaces) in getBaseFactor() implementations
  • Guard features / additionalFeatures / excludedFeatures arrays against unknown string values that bypass contract address format checks
  • Guard required string fields (id, name, fullName, family, asset) against missing or empty values

Changes

  • modules/statics/src/coins.ts: Two new exported validation functions; validateAmsTokenConfig called at the top of createToken(); validateTrimmedAmsTokenConfig called in createTokenMapUsingTrimmedConfigDetails() (skip-and-warn on invalid) and createTokenUsingTrimmedConfigDetails() (throws on invalid)
  • modules/statics/test/unit/coins.ts: 21 new unit tests covering valid configs, each invalid field case, and integration with createToken / createTokenMapUsingTrimmedConfigDetails

Test plan

  • yarn unit-test --scope @bitgo/statics passes (29,120 tests including 21 new)
  • yarn unit-test --scope @bitgo/statics -- --grep validateAmsTokenConfig — 14 passing
  • yarn unit-test --scope @bitgo/statics -- --grep validateTrimmedAmsTokenConfig — 7 passing
  • No existing tests broken

Fixes: CGD-748 / IS-783

🤖 Generated with Ralph

Add validateAmsTokenConfig and validateTrimmedAmsTokenConfig functions
that verify required fields, decimalPlaces (finite non-negative integer),
and feature arrays (only known CoinFeature values) before AMS token
metadata is used to construct coin objects.

- decimalPlaces: guards against NaN, Infinity, negatives, non-integers
  that would corrupt Math.pow(10, decimalPlaces) in getBaseFactor()
- features / additionalFeatures / excludedFeatures: guards against
  unknown string values that could bypass contract address checks
- Required string fields: guards against missing or empty values

Validation is called in createToken(), createTokenUsingTrimmedConfigDetails(),
and createTokenMapUsingTrimmedConfigDetails() (where invalid tokens are
skipped with a console.warn rather than throwing).

21 new unit tests cover valid configs, each invalid case, and the
integration with createToken / createTokenMapUsingTrimmedConfigDetails.

Ticket: CGD-748
Session-Id: 8c327ce7-3f5a-40aa-9516-1aa73939d1e1
Task-Id: 5aa45fd0-f207-4868-8327-1d13d7a1e234
@linear-code
Copy link
Copy Markdown

linear-code Bot commented Jun 3, 2026

CGD-748

@bitgo-ai-agent-dev bitgo-ai-agent-dev Bot force-pushed the cgd-748-ams-token-metadata-validation branch from b85745b to f98d813 Compare June 3, 2026 06:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant