Hey is a decentralized and permissionless social media app built with Lens Protocol 馃尶
at main 79 lines 2.3 kB view raw
1import { PLACEHOLDER_IMAGE } from "@hey/data/constants"; 2import type { PostMetadataFragment } from "@hey/indexer"; 3import type { AttachmentData, MetadataAsset } from "@hey/types/misc"; 4import getAttachmentsData from "./getAttachmentsData"; 5import sanitizeDStorageUrl from "./sanitizeDStorageUrl"; 6 7const getPostData = ( 8 metadata: PostMetadataFragment 9): { 10 asset?: MetadataAsset; 11 attachments?: AttachmentData[]; 12 content?: string; 13} | null => { 14 switch (metadata.__typename) { 15 case "ArticleMetadata": 16 case "ThreeDMetadata": 17 case "LinkMetadata": 18 case "EmbedMetadata": 19 case "EventMetadata": 20 case "TransactionMetadata": 21 case "MintMetadata": 22 case "LivestreamMetadata": 23 case "CheckingInMetadata": 24 case "SpaceMetadata": 25 return { 26 attachments: getAttachmentsData(metadata.attachments), 27 content: metadata.content 28 }; 29 case "TextOnlyMetadata": 30 case "StoryMetadata": 31 return { content: metadata.content }; 32 case "ImageMetadata": 33 return { 34 asset: { 35 type: "Image", 36 uri: sanitizeDStorageUrl(metadata.image.item) 37 }, 38 attachments: getAttachmentsData(metadata.attachments), 39 content: metadata.content 40 }; 41 case "AudioMetadata": { 42 const audioAttachments = getAttachmentsData(metadata.attachments)[0]; 43 44 return { 45 asset: { 46 artist: 47 metadata.audio.artist ?? audioAttachments?.artist ?? undefined, 48 cover: sanitizeDStorageUrl( 49 metadata.audio.cover || 50 audioAttachments?.coverUri || 51 PLACEHOLDER_IMAGE 52 ), 53 title: metadata.title || "Untitled", 54 type: "Audio", 55 uri: metadata.audio.item || audioAttachments?.uri 56 }, 57 content: metadata.content 58 }; 59 } 60 case "VideoMetadata": { 61 const videoAttachments = getAttachmentsData(metadata.attachments)[0]; 62 63 return { 64 asset: { 65 cover: sanitizeDStorageUrl( 66 metadata.video.cover || videoAttachments?.coverUri 67 ), 68 type: "Video", 69 uri: sanitizeDStorageUrl(metadata.video.item || videoAttachments?.uri) 70 }, 71 content: metadata.content 72 }; 73 } 74 default: 75 return null; 76 } 77}; 78 79export default getPostData;