@yoroi/api
Version:
The API package of Yoroi SDK
52 lines (51 loc) • 1.58 kB
JavaScript
;
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