mirror of
https://github.com/trezor/trezor-suite.git
synced 2026-03-04 06:25:11 +01:00
62 lines
1.8 KiB
TypeScript
62 lines
1.8 KiB
TypeScript
/* eslint-disable no-console */
|
|
import {
|
|
AdvancedTokenStructure,
|
|
SimpleTokenStructure,
|
|
TokenStructureType,
|
|
} from '../../src/tokenDefinitionsTypes';
|
|
import { NFTS_PER_PAGE, NFT_LIST_URL } from '../constants';
|
|
import { NftData } from '../types';
|
|
|
|
const fetchNftPage = async (page: number, assetPlatformId: string): Promise<NftData[]> => {
|
|
const params = new URLSearchParams({
|
|
page: page.toString(),
|
|
per_page: NFTS_PER_PAGE.toString(),
|
|
asset_platform_id: assetPlatformId,
|
|
});
|
|
|
|
const options = {
|
|
method: 'GET',
|
|
headers: { 'x-cg-pro-api-key': process.env.COINGECKO_API_KEY! },
|
|
};
|
|
|
|
try {
|
|
const response = await fetch(`${NFT_LIST_URL}?${params.toString()}`, options);
|
|
|
|
if (!response.ok) {
|
|
const { error } = await response.json();
|
|
|
|
throw new Error(`${error}, status: ${response.status}`);
|
|
}
|
|
|
|
return await response.json();
|
|
} catch (error) {
|
|
throw new Error(error);
|
|
}
|
|
};
|
|
|
|
export const fetchNftData = async (assetPlatformId: string, structure: TokenStructureType) => {
|
|
console.log('Start fetching NFT data for:', assetPlatformId, 'platform');
|
|
|
|
let page = 1;
|
|
let allData: NftData[] = [];
|
|
|
|
while (true) {
|
|
const data = await fetchNftPage(page, assetPlatformId);
|
|
allData = allData.concat(data);
|
|
page++;
|
|
if (data.length < NFTS_PER_PAGE) break;
|
|
}
|
|
|
|
console.log('Number of NFT records fetched:', allData.length);
|
|
|
|
if (structure === TokenStructureType.ADVANCED) {
|
|
return allData.reduce<AdvancedTokenStructure>((acc, { contract_address, symbol, name }) => {
|
|
acc[contract_address] = { symbol, name };
|
|
|
|
return acc;
|
|
}, {});
|
|
}
|
|
|
|
return [...new Set(allData.map(item => item.contract_address))] as SimpleTokenStructure;
|
|
};
|