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