Files
explore/lib/address/parseMetaPayload.ts
T
tom goriunovandGitHub 0022a641b2 More custom elements for public tags (#1939)
* More custom elements for public tags

Fixes #1935

* make URL from handle and not from tagUrl prop
2024-05-23 12:35:31 +02:00

43 lines
1.2 KiB
TypeScript

import type { AddressMetadataTag } from 'types/api/addressMetadata';
import type { AddressMetadataTagFormatted } from 'types/client/addressMetadata';
type MetaParsed = NonNullable<AddressMetadataTagFormatted['meta']>;
export default function parseMetaPayload(meta: AddressMetadataTag['meta']): AddressMetadataTagFormatted['meta'] {
try {
const parsedMeta = JSON.parse(meta || '');
if (typeof parsedMeta !== 'object' || parsedMeta === null || Array.isArray(parsedMeta)) {
throw new Error('Invalid JSON');
}
const result: AddressMetadataTagFormatted['meta'] = {};
const stringFields: Array<keyof MetaParsed> = [
'textColor',
'bgColor',
'tagIcon',
'tagUrl',
'tooltipIcon',
'tooltipTitle',
'tooltipDescription',
'tooltipUrl',
'appID',
'appMarketplaceURL',
'appLogoURL',
'appActionButtonText',
'warpcastHandle',
];
for (const stringField of stringFields) {
if (stringField in parsedMeta && typeof parsedMeta[stringField as keyof typeof parsedMeta] === 'string') {
result[stringField] = parsedMeta[stringField as keyof typeof parsedMeta];
}
}
return result;
} catch (error) {
return null;
}
}