From 8aa0f3afe88b8b4ed734bdcdd7543303fe1b6a60 Mon Sep 17 00:00:00 2001 From: ost-ptk Date: Tue, 9 Jun 2026 13:52:55 +0300 Subject: [PATCH] feat(dto): support `contractPackageHash` for CsprTrade URLs - Updated common.ts to include `contractPackageHash` in `getMarketDataProviderUrl` for token-specific URLs - Enhanced DTOs to pass `contractPackageHash` where applicable - Added tests to validate behavior with and without `contractPackageHash` --- src/data/dto/common.test.ts | 8 +++++++- src/data/dto/common.ts | 5 ++++- src/data/dto/deploys/Cep18DeployDto.ts | 1 + src/data/dto/deploys/Cep18transferDeployDto.ts | 1 + src/data/dto/tokens.ts | 1 + 5 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/data/dto/common.test.ts b/src/data/dto/common.test.ts index 2a0ad38..16eb2b3 100644 --- a/src/data/dto/common.test.ts +++ b/src/data/dto/common.test.ts @@ -92,7 +92,13 @@ describe('dto/common helpers', () => { }); describe('getMarketDataProviderUrl', () => { - it('handles CsprTrade', () => { + it('handles CsprTrade with contract package hash', () => { + expect(getMarketDataProviderUrl('CsprTrade', null, null, 'cph-123')).toBe( + 'https://cspr.trade/token-details/cph-123', + ); + }); + + it('falls back to cspr.trade homepage without package hash', () => { expect(getMarketDataProviderUrl('CsprTrade')).toBe('https://cspr.trade/'); }); diff --git a/src/data/dto/common.ts b/src/data/dto/common.ts index dab19fa..d0bbb61 100644 --- a/src/data/dto/common.ts +++ b/src/data/dto/common.ts @@ -94,10 +94,13 @@ export function getMarketDataProviderUrl( marketDataProvider: Maybe, coingeckoId?: string | null, latestVersionContractHash?: string | null, + contractPackageHash?: string | null, ) { switch (marketDataProvider) { case 'CsprTrade': - return 'https://cspr.trade/'; // TODO link to token page + return contractPackageHash + ? `https://cspr.trade/token-details/${contractPackageHash}` + : 'https://cspr.trade/'; case 'CoinGecko': return coingeckoId ? `https://www.coingecko.com/en/coins/${coingeckoId}` : null; case 'FriendlyMarket': diff --git a/src/data/dto/deploys/Cep18DeployDto.ts b/src/data/dto/deploys/Cep18DeployDto.ts index 3bce092..cfc281e 100644 --- a/src/data/dto/deploys/Cep18DeployDto.ts +++ b/src/data/dto/deploys/Cep18DeployDto.ts @@ -69,6 +69,7 @@ export class Cep18DeployDto extends DeployDto implements ICep18Deploy { this.marketDataProvider, data?.contract_package?.coingecko_id, data?.contract_package?.latest_version_contract_hash, + data?.contract_package?.contract_package_hash, ); } diff --git a/src/data/dto/deploys/Cep18transferDeployDto.ts b/src/data/dto/deploys/Cep18transferDeployDto.ts index 571f9e7..ae4d1ad 100644 --- a/src/data/dto/deploys/Cep18transferDeployDto.ts +++ b/src/data/dto/deploys/Cep18transferDeployDto.ts @@ -96,6 +96,7 @@ export class Cep18TransferDeployDto implements ICep18Deploy { this.marketDataProvider, data?.contract_package?.coingecko_id, data?.contract_package?.latest_version_contract_hash, + data?.contract_package?.contract_package_hash, ); } diff --git a/src/data/dto/tokens.ts b/src/data/dto/tokens.ts index 380bd58..c4c5ceb 100644 --- a/src/data/dto/tokens.ts +++ b/src/data/dto/tokens.ts @@ -46,6 +46,7 @@ export class TokenDto implements ITokenWithFiatBalance { this.marketDataProvider, apiToken?.coingecko_id, apiToken?.latest_version_contract_hash, + this.contractPackageHash, ); }