UNPKG

@yoroi/api

Version:
82 lines (81 loc) 2.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isTokenRegistryEntry = exports.getOffChainMetadata = exports.emptyOffChainMetadataRecord = void 0; var _common = require("@yoroi/common"); var _zod = require("zod"); var _asSubject = require("../translators/transformers/asSubject"); const getOffChainMetadata = (baseUrl, request = _common.fetcher) => { const getTokenRegistryRecord = tokenId => request({ url: `${baseUrl}/metadata/${(0, _asSubject.asSubject)(tokenId)}`, method: 'GET', headers: { 'Content-Type': 'application/json' } }).then(response => { if (!(0, _common.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; }); }; exports.getOffChainMetadata = getOffChainMetadata; const TokenRegistryPropertyNumberSchema = _zod.z.object({ signatures: _zod.z.array(_zod.z.object({ publicKey: _zod.z.string(), signature: _zod.z.string() })), sequenceNumber: _zod.z.number(), value: _zod.z.number().optional() }); const TokenRegistryPropertyStringSchema = _zod.z.object({ signatures: _zod.z.array(_zod.z.object({ publicKey: _zod.z.string(), signature: _zod.z.string() })), sequenceNumber: _zod.z.number(), value: _zod.z.string().optional() }); const TokenRegistryEntrySchema = _zod.z.object({ subject: _zod.z.string(), name: TokenRegistryPropertyStringSchema, description: TokenRegistryPropertyStringSchema.optional(), policy: _zod.z.string().optional(), logo: TokenRegistryPropertyStringSchema.optional(), ticker: TokenRegistryPropertyStringSchema.optional(), url: TokenRegistryPropertyStringSchema.optional(), decimals: TokenRegistryPropertyNumberSchema.optional() }); const isTokenRegistryEntry = exports.isTokenRegistryEntry = (0, _common.createTypeGuardFromSchema)(TokenRegistryEntrySchema); const parseTokenRegistryEntry = data => { return isTokenRegistryEntry(data) ? data : undefined; }; const emptyOffChainMetadataRecord = exports.emptyOffChainMetadataRecord = { tokenRegistry: undefined, isValid: false }; //# sourceMappingURL=token-offchain-metadata.js.map