UNPKG

@yoroi/api

Version:
77 lines (76 loc) 2.43 kB
"use strict"; import { createTypeGuardFromSchema, fetcher, isRecord } from '@yoroi/common'; import { z } from 'zod'; import { asSubject } from '../translators/transformers/asSubject'; export const getOffChainMetadata = (baseUrl, request = fetcher) => { const getTokenRegistryRecord = tokenId => request({ url: `${baseUrl}/metadata/${asSubject(tokenId)}`, method: 'GET', headers: { 'Content-Type': 'application/json' } }).then(response => { if (!isRecord(response)) return Promise.resolve({ [tokenId]: emptyOffChainMetadataRecord }); const parsedEntry = parseTokenRegistryEntry(response); if (parsedEntry) { return Promise.resolve({ [tokenId]: { tokenRegistry: parsedEntry, isValid: true } }); } return Promise.resolve({ [tokenId]: { tokenRegistry: response, isValid: false } }); }).catch(_e => Promise.resolve({ [tokenId]: emptyOffChainMetadataRecord })); return tokenIds => Promise.all(tokenIds.map(tokenId => getTokenRegistryRecord(tokenId))).then(responses => { const result = {}; responses.forEach(response => { Object.assign(result, response); }); return result; }); }; const TokenRegistryPropertyNumberSchema = z.object({ signatures: z.array(z.object({ publicKey: z.string(), signature: z.string() })), sequenceNumber: z.number(), value: z.number().optional() }); const TokenRegistryPropertyStringSchema = z.object({ signatures: z.array(z.object({ publicKey: z.string(), signature: z.string() })), sequenceNumber: z.number(), value: z.string().optional() }); const TokenRegistryEntrySchema = z.object({ subject: z.string(), name: TokenRegistryPropertyStringSchema, description: TokenRegistryPropertyStringSchema.optional(), policy: z.string().optional(), logo: TokenRegistryPropertyStringSchema.optional(), ticker: TokenRegistryPropertyStringSchema.optional(), url: TokenRegistryPropertyStringSchema.optional(), decimals: TokenRegistryPropertyNumberSchema.optional() }); export const isTokenRegistryEntry = createTypeGuardFromSchema(TokenRegistryEntrySchema); const parseTokenRegistryEntry = data => { return isTokenRegistryEntry(data) ? data : undefined; }; export const emptyOffChainMetadataRecord = { tokenRegistry: undefined, isValid: false }; //# sourceMappingURL=token-offchain-metadata.js.map