UNPKG

@yoroi/portfolio

Version:

The Portfolio package of Yoroi SDK

71 lines (58 loc) 2.41 kB
import {Api, App, Portfolio} from '@yoroi/types' import {z} from 'zod' import {responseRecordWithCacheSchemaMaker} from './response-record-with-cache-schema-maker' import {TokenSourceSchema} from './token-source' import {TokenIdSchema} from './token-id' import {cacheRecordSchemaMaker} from '@yoroi/common' const DiscoverySourceSchema = z.object({ name: TokenSourceSchema, decimals: TokenSourceSchema, ticker: TokenSourceSchema, symbol: TokenSourceSchema, originalImage: TokenSourceSchema, description: TokenSourceSchema, website: TokenSourceSchema, }) const DiscoveryOriginalMetadataSchema = z.object({ filteredMintMetadatum: z.record(z.unknown()).nullable(), referenceDatum: z.record(z.unknown()).nullable(), tokenRegistry: z.record(z.unknown()).nullable(), }) export const TokenDiscoverySchema = z.object({ id: TokenIdSchema, source: DiscoverySourceSchema, originalMetadata: DiscoveryOriginalMetadataSchema, supply: z.string(), }) export const isTokenDiscovery = ( data: unknown, ): data is Portfolio.Token.Discovery => TokenDiscoverySchema.safeParse(data).success export const parseTokenDiscovery = ( data: unknown, ): Portfolio.Token.Discovery | undefined => { return isTokenDiscovery(data) ? data : undefined } export const TokenDiscoveryResponseWithCacheRecordSchema = responseRecordWithCacheSchemaMaker(TokenDiscoverySchema) export const isTokenDiscoveryResponseWithCacheRecord = ( data: unknown, ): data is Api.ResponseWithCache<Portfolio.Token.Discovery> => TokenDiscoveryResponseWithCacheRecordSchema.safeParse(data).success export const parseTokenDiscoveryResponseWithCacheRecord = ( data: unknown, ): Api.ResponseWithCache<Portfolio.Token.Discovery> | undefined => { return isTokenDiscoveryResponseWithCacheRecord(data) ? data : undefined } export const TokenDiscoveryWithCacheRecordSchema = // zod doesn't work with string templates yet, check TokenIdSchema for more info cacheRecordSchemaMaker<Portfolio.Token.Discovery>(TokenDiscoverySchema as any) export const isTokenDiscoveryWithCacheRecord = ( data: unknown, ): data is App.CacheRecord<Portfolio.Token.Discovery> => TokenDiscoveryWithCacheRecordSchema.safeParse(data).success export const parseTokenDiscoveryWithCacheRecord = ( data: unknown, ): App.CacheRecord<Portfolio.Token.Discovery> | undefined => { return isTokenDiscoveryWithCacheRecord(data) ? data : undefined }