Skip to content

Commit 1dc0169

Browse files
committed
fix(cardano-services-client): map blockfrost asset metadata files src from array to string
also log nft metadata mapping errors
1 parent de59fcb commit 1dc0169

File tree

3 files changed

+33
-8
lines changed

3 files changed

+33
-8
lines changed

packages/cardano-services-client/src/AssetInfoProvider/BlockfrostAssetProvider.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ export class BlockfrostAssetProvider extends BlockfrostProvider implements Asset
2727
.onchain_metadata!.files.map((file): Asset.NftMetadataFile | null => {
2828
const mediaType = file.mediaType as string | undefined;
2929
const fileName = file.name as string | undefined;
30-
const src = file.src as string | undefined;
30+
const src = this.metadatumToString(file.src as string | string[] | undefined);
3131
if (!src || !mediaType) return null;
3232
try {
3333
return {
@@ -36,7 +36,8 @@ export class BlockfrostAssetProvider extends BlockfrostProvider implements Asset
3636
otherProperties: this.mapNftMetadataOtherProperties(file),
3737
src: Asset.Uri(src)
3838
};
39-
} catch {
39+
} catch (error) {
40+
this.logger.warn('Failed to parse onchain_metadata file', file, error);
4041
return null;
4142
}
4243
})
@@ -50,7 +51,8 @@ export class BlockfrostAssetProvider extends BlockfrostProvider implements Asset
5051
otherProperties: this.mapNftMetadataOtherProperties(asset.onchain_metadata),
5152
version: '1.0'
5253
};
53-
} catch {
54+
} catch (error) {
55+
this.logger.warn('Failed to parse nft metadata', asset, error);
5456
return null;
5557
}
5658
}
@@ -130,6 +132,7 @@ export class BlockfrostAssetProvider extends BlockfrostProvider implements Asset
130132
tokenMetadata: extraData?.tokenMetadata ? this.mapTokenMetadata(assetId, response) : null
131133
};
132134
} catch (error) {
135+
this.logger.error('getAsset failed', assetId, extraData);
133136
throw this.toProviderError(error);
134137
}
135138
}

packages/cardano-services-client/src/blockfrost/BlockfrostProvider.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,12 @@ const toProviderFailure = (status: number | undefined): ProviderFailure => {
2626
};
2727

2828
export abstract class BlockfrostProvider implements Provider {
29-
#logger: Logger;
29+
protected logger: Logger;
3030
#client: BlockfrostClient;
3131

3232
constructor(client: BlockfrostClient, logger: Logger) {
3333
this.#client = client;
34-
this.#logger = contextLogger(logger, this.constructor.name);
34+
this.logger = contextLogger(logger, this.constructor.name);
3535
}
3636

3737
/**
@@ -40,12 +40,12 @@ export abstract class BlockfrostProvider implements Provider {
4040
*/
4141
protected async request<T>(endpoint: string): Promise<T> {
4242
try {
43-
this.#logger.debug('request', endpoint);
43+
this.logger.debug('request', endpoint);
4444
const response = await this.#client.request<T>(endpoint);
45-
this.#logger.debug('response', response);
45+
this.logger.debug('response', response);
4646
return response;
4747
} catch (error) {
48-
this.#logger.error('error', error);
48+
this.logger.error('error', error);
4949
throw this.toProviderError(error);
5050
}
5151
}

packages/cardano-services-client/test/AssetInfoProvider/BlockfrostAssetProvider.test.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,5 +169,27 @@ describe('BlockfrostAssetProvider', () => {
169169
tokenMetadata: null
170170
});
171171
});
172+
173+
test('file src as array', async () => {
174+
mockResponses(request, [
175+
[
176+
`assets/${mockedAssetId}`,
177+
{
178+
...mockedAssetResponse,
179+
onchain_metadata: {
180+
...mockedAssetResponse.onchain_metadata,
181+
files: [{ mediaType: 'image/png', src: ['http://', 'some.png'] }]
182+
}
183+
}
184+
]
185+
]);
186+
187+
const response = await provider.getAsset({
188+
assetId: mockedAssetId,
189+
extraData: { nftMetadata: true }
190+
});
191+
192+
expect(response.nftMetadata!.files![0].src).toBe('http://some.png');
193+
});
172194
});
173195
});

0 commit comments

Comments
 (0)