UNPKG

@yoroi/api

Version:
52 lines (51 loc) 1.58 kB
"use strict"; import { createTypeGuardFromSchema, fetcher } from '@yoroi/common'; import { z } from 'zod'; import { getTokenIdentity } from '../translators/helpers/getTokenIdentity'; export const getTokenSupply = (baseUrl, request = fetcher) => async tokenIds => { if (tokenIds.length === 0) { return Promise.resolve({}); } const assetsMap = new Map(tokenIds.map(id => { const { policyId: policy, assetName: nameHex } = getTokenIdentity(id); return [id, { policy, nameHex }]; })); const payload = { assets: Array.from(assetsMap.values()) }; return request({ url: `${baseUrl}/multiAsset/supply?numberFormat=string`, data: payload, method: 'POST', headers: { 'Content-Type': 'application/json' } }).then(response => { const parsedResponse = parseTokenSupplyResponse(response); if (!parsedResponse) return Promise.reject(new Error('Invalid asset supplies')); const result = {}; const supplies = parsedResponse.supplies; Array.from(assetsMap.entries()).forEach(([id, { policy, nameHex }]) => { const tokenId = `${policy}.${nameHex}`; result[id] = supplies[tokenId] ?? null; }); return Promise.resolve(result); }); }; const TokenSupplySchema = z.object({ supplies: z.record(z.string().nullable()) }); export const isTokenSupplyResponse = createTypeGuardFromSchema(TokenSupplySchema); export const parseTokenSupplyResponse = data => { return isTokenSupplyResponse(data) ? data : undefined; }; //# sourceMappingURL=token-supply.js.map