Hey is a decentralized and permissionless social media app built with Lens Protocol 馃尶
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;