@atproto/bsky 0.0.206 → 0.0.208

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/views/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { HOUR, MINUTE, mapDefined } from '@atproto/common'\nimport { AtUri, INVALID_HANDLE, normalizeDatetimeAlways } from '@atproto/syntax'\nimport { FeatureGateID } from '../feature-gates'\nimport { Actor, ProfileViewerState } from '../hydration/actor'\nimport { FeedItem, Like, Post, Repost } from '../hydration/feed'\nimport { Follow, Verification } from '../hydration/graph'\nimport { HydrationState } from '../hydration/hydrator'\nimport { Label } from '../hydration/label'\nimport { RecordInfo } from '../hydration/util'\nimport { ImageUriBuilder } from '../image/uri'\nimport { ids } from '../lexicon/lexicons'\nimport {\n KnownFollowers,\n ProfileAssociatedActivitySubscription,\n ProfileView,\n ProfileViewBasic,\n ProfileViewDetailed,\n StatusView,\n VerificationState,\n VerificationView,\n ViewerState as ProfileViewer,\n} from '../lexicon/types/app/bsky/actor/defs'\nimport {\n Record as ProfileRecord,\n isRecord as isProfileRecord,\n} from '../lexicon/types/app/bsky/actor/profile'\nimport { BookmarkView } from '../lexicon/types/app/bsky/bookmark/defs'\nimport {\n BlockedPost,\n FeedViewPost,\n GeneratorView,\n NotFoundPost,\n PostView,\n ReasonPin,\n ReasonRepost,\n ReplyRef,\n ThreadViewPost,\n ThreadgateView,\n isPostView,\n} from '../lexicon/types/app/bsky/feed/defs'\nimport { Record as LikeRecord } from '../lexicon/types/app/bsky/feed/like'\nimport {\n Record as PostRecord,\n isRecord as isPostRecord,\n} from '../lexicon/types/app/bsky/feed/post'\nimport { Record as RepostRecord } from '../lexicon/types/app/bsky/feed/repost'\nimport { isListRule } from '../lexicon/types/app/bsky/feed/threadgate'\nimport {\n ListItemView,\n ListView,\n ListViewBasic,\n StarterPackView,\n StarterPackViewBasic,\n} from '../lexicon/types/app/bsky/graph/defs'\nimport { Record as FollowRecord } from '../lexicon/types/app/bsky/graph/follow'\nimport { Record as VerificationRecord } from '../lexicon/types/app/bsky/graph/verification'\nimport {\n LabelerView,\n LabelerViewDetailed,\n} from '../lexicon/types/app/bsky/labeler/defs'\nimport {\n Record as LabelerRecord,\n isRecord as isLabelerRecord,\n} from '../lexicon/types/app/bsky/labeler/service'\nimport {\n ActivitySubscription,\n RecordDeleted as NotificationRecordDeleted,\n} from '../lexicon/types/app/bsky/notification/defs'\nimport { ThreadItem as ThreadOtherItem } from '../lexicon/types/app/bsky/unspecced/getPostThreadOtherV2'\nimport {\n QueryParams as GetPostThreadV2QueryParams,\n ThreadItem,\n} from '../lexicon/types/app/bsky/unspecced/getPostThreadV2'\nimport { isSelfLabels } from '../lexicon/types/com/atproto/label/defs'\nimport { $Typed, Un$Typed } from '../lexicon/util'\nimport { Notification } from '../proto/bsky_pb'\nimport {\n postUriToPostgateUri,\n postUriToThreadgateUri,\n safePinnedPost,\n uriToDid,\n uriToDid as creatorFromUri,\n} from '../util/uris'\nimport {\n ThreadItemValueBlocked,\n ThreadItemValueNoUnauthenticated,\n ThreadItemValueNotFound,\n ThreadItemValuePost,\n ThreadOtherAnchorPostNode,\n ThreadOtherItemValuePost,\n ThreadOtherPostNode,\n ThreadTree,\n ThreadTreeVisible,\n sortTrimFlattenThreadTree,\n} from './threads-v2'\nimport {\n Embed,\n EmbedBlocked,\n EmbedDetached,\n EmbedNotFound,\n EmbedView,\n ExternalEmbed,\n ExternalEmbedView,\n ImagesEmbed,\n ImagesEmbedView,\n MaybePostView,\n NotificationView,\n PostEmbedView,\n RecordEmbed,\n RecordEmbedView,\n RecordEmbedViewInternal,\n RecordWithMedia,\n RecordWithMediaView,\n VideoEmbed,\n VideoEmbedView,\n isExternalEmbed,\n isImagesEmbed,\n isRecordEmbed,\n isRecordWithMedia,\n isVideoEmbed,\n} from './types'\nimport {\n VideoUriBuilder,\n cidFromBlobJson,\n parsePostgate,\n parseThreadGate,\n} from './util'\n\nconst notificationDeletedRecord = {\n $type: 'app.bsky.notification.defs#recordDeleted' as const,\n}\n\n// Pre-computed CID for the `notificationDeletedRecord`.\nconst notificationDeletedRecordCid =\n 'bafyreidad6nyekfa4a67yfb573ptxiv6s7kyxyg2ra6qbbemcruadvtuim'\n\nexport class Views {\n public imgUriBuilder: ImageUriBuilder = this.opts.imgUriBuilder\n public videoUriBuilder: VideoUriBuilder = this.opts.videoUriBuilder\n public indexedAtEpoch: Date | undefined = this.opts.indexedAtEpoch\n private threadTagsBumpDown: readonly string[] = this.opts.threadTagsBumpDown\n private threadTagsHide: readonly string[] = this.opts.threadTagsHide\n private visibilityTagHide: string = this.opts.visibilityTagHide\n private visibilityTagRankPrefix: string = this.opts.visibilityTagRankPrefix\n constructor(\n private opts: {\n imgUriBuilder: ImageUriBuilder\n videoUriBuilder: VideoUriBuilder\n indexedAtEpoch: Date | undefined\n threadTagsBumpDown: readonly string[]\n threadTagsHide: readonly string[]\n visibilityTagHide: string\n visibilityTagRankPrefix: string\n },\n ) {}\n\n // Actor\n // ------------\n\n actorIsNoHosted(did: string, state: HydrationState): boolean {\n return (\n this.actorIsDeactivated(did, state) || this.actorIsTakendown(did, state)\n )\n }\n\n actorIsDeactivated(did: string, state: HydrationState): boolean {\n if (state.actors?.get(did)?.upstreamStatus === 'deactivated') return true\n return false\n }\n\n actorIsTakendown(did: string, state: HydrationState): boolean {\n const actor = state.actors?.get(did)\n if (actor?.takedownRef) return true\n if (actor?.upstreamStatus === 'takendown') return true\n if (actor?.upstreamStatus === 'suspended') return true\n if (state.labels?.get(did)?.isTakendown) return true\n return false\n }\n\n noUnauthenticatedPost(state: HydrationState, post: PostView): boolean {\n const isNoUnauthenticated = post.author.labels?.some(\n (l) => l.val === '!no-unauthenticated',\n )\n return !state.ctx?.viewer && !!isNoUnauthenticated\n }\n\n viewerBlockExists(did: string, state: HydrationState): boolean {\n const viewer = state.profileViewers?.get(did)\n if (!viewer) return false\n return !!(\n viewer.blockedBy ||\n viewer.blocking ||\n this.blockedByList(viewer, state) ||\n this.blockingByList(viewer, state)\n )\n }\n\n viewerMuteExists(did: string, state: HydrationState): boolean {\n const viewer = state.profileViewers?.get(did)\n if (!viewer) return false\n return !!(viewer.muted || this.mutedByList(viewer, state))\n }\n\n blockingByList(viewer: ProfileViewerState, state: HydrationState) {\n return (\n viewer.blockingByList && this.recordActive(viewer.blockingByList, state)\n )\n }\n\n blockedByList(viewer: ProfileViewerState, state: HydrationState) {\n return (\n viewer.blockedByList && this.recordActive(viewer.blockedByList, state)\n )\n }\n\n mutedByList(viewer: ProfileViewerState, state: HydrationState) {\n return viewer.mutedByList && this.recordActive(viewer.mutedByList, state)\n }\n\n recordActive(uri: string, state: HydrationState) {\n const did = uriToDid(uri)\n const actor = state.actors?.get(did)\n if (!actor || this.actorIsTakendown(did, state)) {\n // actor may not be present when takedowns are eagerly applied during hydration.\n // so it's important to _try_ to hydrate the actor for records checked this way.\n return\n }\n return uri\n }\n\n viewerSeesNeedsReview(\n { did, uri }: { did?: string; uri?: string },\n state: HydrationState,\n ): boolean {\n const { labels, profileViewers, ctx } = state\n did = did || (uri && uriToDid(uri))\n if (!did) {\n return true\n }\n if (\n labels?.get(did)?.needsReview ||\n (uri && labels?.get(uri)?.needsReview)\n ) {\n // content marked as needs review\n return ctx?.viewer === did || !!profileViewers?.get(did)?.following\n }\n return true\n }\n\n replyIsHiddenByThreadgate(\n replyUri: string,\n rootPostUri: string,\n state: HydrationState,\n ) {\n const threadgateUri = postUriToThreadgateUri(rootPostUri)\n const threadgate = state.threadgates?.get(threadgateUri)\n return !!threadgate?.record?.hiddenReplies?.includes(replyUri)\n }\n\n profileDetailed(\n did: string,\n state: HydrationState,\n ): Un$Typed<ProfileViewDetailed> | undefined {\n const actor = state.actors?.get(did)\n if (!actor) return\n const baseView = this.profile(did, state)\n if (!baseView) return\n const knownFollowers = this.knownFollowers(did, state)\n const profileAggs = state.profileAggs?.get(did)\n\n return {\n ...baseView,\n website: this.profileWebsite(did, state),\n viewer: baseView.viewer\n ? {\n ...baseView.viewer,\n knownFollowers,\n }\n : undefined,\n banner: actor.profile?.banner\n ? this.imgUriBuilder.getPresetUri(\n 'banner',\n did,\n cidFromBlobJson(actor.profile.banner),\n )\n : undefined,\n followersCount: profileAggs?.followers ?? 0,\n followsCount: profileAggs?.follows ?? 0,\n postsCount: profileAggs?.posts ?? 0,\n associated: {\n lists: profileAggs?.lists,\n feedgens: profileAggs?.feeds,\n starterPacks: profileAggs?.starterPacks,\n labeler: actor.isLabeler,\n // @TODO apply default chat policy?\n chat: actor.allowIncomingChatsFrom\n ? { allowIncoming: actor.allowIncomingChatsFrom }\n : undefined,\n activitySubscription: this.profileAssociatedActivitySubscription(actor),\n },\n joinedViaStarterPack: actor.profile?.joinedViaStarterPack\n ? this.starterPackBasic(actor.profile.joinedViaStarterPack.uri, state)\n : undefined,\n pinnedPost: safePinnedPost(actor.profile?.pinnedPost),\n }\n }\n profile(\n did: string,\n state: HydrationState,\n ): Un$Typed<ProfileView> | undefined {\n const actor = state.actors?.get(did)\n if (!actor) return\n const basicView = this.profileBasic(did, state)\n if (!basicView) return\n return {\n ...basicView,\n description: actor.profile?.description || undefined,\n indexedAt:\n actor.indexedAt && actor.sortedAt\n ? this.indexedAt({\n sortedAt: actor.sortedAt,\n indexedAt: actor.indexedAt,\n }).toISOString()\n : undefined,\n }\n }\n\n profileBasic(\n did: string,\n state: HydrationState,\n ): Un$Typed<ProfileViewBasic> | undefined {\n const actor = state.actors?.get(did)\n if (!actor) return\n const profileUri = AtUri.make(\n did,\n ids.AppBskyActorProfile,\n 'self',\n ).toString()\n const labels = [\n ...(state.labels?.getBySubject(did) ?? []),\n ...(state.labels?.getBySubject(profileUri) ?? []),\n ...this.selfLabels({\n uri: profileUri,\n cid: actor.profileCid?.toString(),\n record: actor.profile,\n }),\n ]\n return {\n did,\n handle: actor.handle ?? INVALID_HANDLE,\n displayName: actor.profile?.displayName,\n pronouns: actor.profile?.pronouns,\n avatar: actor.profile?.avatar\n ? this.imgUriBuilder.getPresetUri(\n 'avatar',\n did,\n cidFromBlobJson(actor.profile.avatar),\n )\n : undefined,\n // associated.feedgens and associated.lists info not necessarily included\n // on profile and profile-basic views, but should be on profile-detailed.\n associated: {\n labeler: actor.isLabeler ? true : undefined,\n // @TODO apply default chat policy?\n chat: actor.allowIncomingChatsFrom\n ? { allowIncoming: actor.allowIncomingChatsFrom }\n : undefined,\n activitySubscription: this.profileAssociatedActivitySubscription(actor),\n },\n viewer: this.profileViewer(did, state),\n labels,\n createdAt: actor.createdAt?.toISOString(),\n verification: this.verification(did, state),\n status: this.status(did, state),\n debug: state.ctx?.includeDebugField ? actor.debug : undefined,\n }\n }\n\n profileAssociatedActivitySubscription(\n actor: Actor,\n ): ProfileAssociatedActivitySubscription {\n return { allowSubscriptions: actor.allowActivitySubscriptionsFrom }\n }\n\n profileKnownFollowers(\n did: string,\n state: HydrationState,\n ): ProfileView | undefined {\n const actor = state.actors?.get(did)\n if (!actor) return\n const baseView = this.profile(did, state)\n if (!baseView) return\n const knownFollowers = this.knownFollowers(did, state)\n return {\n ...baseView,\n viewer: baseView.viewer\n ? {\n ...baseView.viewer,\n knownFollowers,\n }\n : undefined,\n }\n }\n\n profileViewer(did: string, state: HydrationState): ProfileViewer | undefined {\n const viewer = state.profileViewers?.get(did)\n if (!viewer) return\n const blockedByList = this.blockedByList(viewer, state)\n const blockedByUri = viewer.blockedBy || blockedByList\n const blockingByList = this.blockingByList(viewer, state)\n const blockingUri = viewer.blocking || blockingByList\n const block = !!blockedByUri || !!blockingUri\n const mutedByList = this.mutedByList(viewer, state)\n return {\n muted: !!(viewer.muted || mutedByList),\n mutedByList: mutedByList ? this.listBasic(mutedByList, state) : undefined,\n blockedBy: !!blockedByUri,\n blocking: blockingUri,\n blockingByList: blockingByList\n ? this.listBasic(blockingByList, state)\n : undefined,\n following: viewer.following && !block ? viewer.following : undefined,\n followedBy: viewer.followedBy && !block ? viewer.followedBy : undefined,\n activitySubscription: this.profileViewerActivitySubscription(\n viewer,\n did,\n state,\n ),\n }\n }\n\n profileViewerActivitySubscription(\n profileViewer: ProfileViewerState,\n did: string,\n state: HydrationState,\n ): ActivitySubscription | undefined {\n const actor = state.actors?.get(did)\n if (!actor) return undefined\n\n const activitySubscription = state.activitySubscriptions?.get(did)\n if (!activitySubscription) return undefined\n\n const allowFrom = actor.allowActivitySubscriptionsFrom\n const actorFollowsViewer = !!profileViewer.followedBy\n const viewerFollowsActor = !!profileViewer.following\n if (\n (allowFrom === 'followers' && viewerFollowsActor) ||\n (allowFrom === 'mutuals' && actorFollowsViewer && viewerFollowsActor)\n ) {\n return activitySubscription\n }\n return undefined\n }\n\n profileWebsite(did: string, state: HydrationState): string | undefined {\n const actor = state.actors?.get(did)\n if (!actor?.profile?.website) return\n const { website } = actor.profile\n\n // The record property accepts any URI, but we don't want\n // to pass the client any schemes other than HTTPS.\n return website.startsWith('https://') ? website : undefined\n }\n\n knownFollowers(\n did: string,\n state: HydrationState,\n ): KnownFollowers | undefined {\n const knownFollowers = state.knownFollowers?.get(did)\n if (!knownFollowers) return\n const blocks = state.bidirectionalBlocks?.get(did)\n const followers = mapDefined(knownFollowers.followers, (followerDid) => {\n if (this.viewerBlockExists(followerDid, state)) {\n return undefined\n }\n if (blocks?.get(followerDid)) {\n return undefined\n }\n if (this.actorIsNoHosted(followerDid, state)) {\n // @TODO only needed right now to work around getProfile's { includeTakedowns: true }\n return undefined\n }\n return this.profileBasic(followerDid, state)\n })\n return { count: knownFollowers.count, followers }\n }\n\n verification(\n did: string,\n state: HydrationState,\n ): VerificationState | undefined {\n const actor = state.actors?.get(did)\n if (!actor) return\n\n const isImpersonation = state.labels?.get(did)?.isImpersonation\n\n const verifications: VerificationView[] = actor.verifications.map(\n ({ issuer, uri, displayName, handle, createdAt }) => {\n // @NOTE: We don't factor-in impersonation when evaluating the validity of each verification,\n // only in the overall profile verification validity.\n const isValid =\n !!displayName &&\n displayName === actor.profile?.displayName &&\n !!handle &&\n handle === actor.handle\n\n return {\n issuer,\n uri,\n isValid,\n createdAt,\n }\n },\n )\n const hasValidVerification = verifications.some((v) => v.isValid)\n\n const verifiedStatus = verifications.length\n ? hasValidVerification && !isImpersonation\n ? 'valid'\n : 'invalid'\n : 'none'\n const trustedVerifierStatus = actor.trustedVerifier\n ? isImpersonation\n ? 'invalid'\n : 'valid'\n : 'none'\n\n if (\n verifications.length === 0 &&\n verifiedStatus === 'none' &&\n trustedVerifierStatus === 'none'\n ) {\n return undefined\n }\n\n return {\n verifications,\n verifiedStatus,\n trustedVerifierStatus,\n }\n }\n\n status(did: string, state: HydrationState): StatusView | undefined {\n const actor = state.actors?.get(did)\n if (!actor?.status) return\n\n const { status } = actor\n const { record, sortedAt } = status\n\n const minDuration = 5 * MINUTE\n const maxDuration = 4 * HOUR\n\n const expiresAtMs = record.durationMinutes\n ? sortedAt.getTime() +\n Math.max(\n Math.min(record.durationMinutes * MINUTE, maxDuration),\n minDuration,\n )\n : undefined\n const expiresAt = expiresAtMs\n ? new Date(expiresAtMs).toISOString()\n : undefined\n\n const isActive = expiresAtMs ? expiresAtMs > Date.now() : undefined\n\n return {\n record: record,\n status: record.status,\n embed: isExternalEmbed(record.embed)\n ? this.externalEmbed(did, record.embed)\n : undefined,\n expiresAt,\n isActive,\n }\n }\n\n blockedProfileViewer(\n did: string,\n state: HydrationState,\n ): ProfileViewer | undefined {\n const viewer = state.profileViewers?.get(did)\n if (!viewer) return\n const blockedByUri = viewer.blockedBy || this.blockedByList(viewer, state)\n const blockingUri = viewer.blocking || this.blockingByList(viewer, state)\n return {\n blockedBy: !!blockedByUri,\n blocking: blockingUri,\n }\n }\n\n // Graph\n // ------------\n\n list(uri: string, state: HydrationState): Un$Typed<ListView> | undefined {\n const creatorDid = creatorFromUri(uri)\n const list = state.lists?.get(uri)\n if (!list) return\n const creator = this.profile(creatorDid, state)\n if (!creator) return\n const basicView = this.listBasic(uri, state)\n if (!basicView) return\n\n return {\n ...basicView,\n creator,\n description: list.record.description,\n descriptionFacets: list.record.descriptionFacets,\n indexedAt: this.indexedAt(list).toISOString(),\n }\n }\n\n listBasic(\n uri: string,\n state: HydrationState,\n ): Un$Typed<ListViewBasic> | undefined {\n const list = state.lists?.get(uri)\n if (!list) {\n return undefined\n }\n const listAgg = state.listAggs?.get(uri)\n const listViewer = state.listViewers?.get(uri)\n const labels = state.labels?.getBySubject(uri) ?? []\n const creator = creatorFromUri(uri)\n return {\n uri,\n cid: list.cid,\n name: list.record.name,\n purpose: list.record.purpose,\n avatar: list.record.avatar\n ? this.imgUriBuilder.getPresetUri(\n 'avatar',\n creator,\n cidFromBlobJson(list.record.avatar),\n )\n : undefined,\n listItemCount: listAgg?.listItems ?? 0,\n indexedAt: this.indexedAt(list).toISOString(),\n labels,\n viewer: listViewer\n ? {\n muted: !!listViewer.viewerMuted,\n blocked: listViewer.viewerListBlockUri,\n }\n : undefined,\n }\n }\n\n listItemView(\n uri: string,\n did: string,\n state: HydrationState,\n ): Un$Typed<ListItemView> | undefined {\n const subject = this.profile(did, state)\n if (!subject) return\n return { uri, subject }\n }\n\n starterPackBasic(\n uri: string,\n state: HydrationState,\n ): Un$Typed<StarterPackViewBasic> | undefined {\n const sp = state.starterPacks?.get(uri)\n if (!sp) return\n const parsedUri = new AtUri(uri)\n const creator = this.profileBasic(parsedUri.hostname, state)\n if (!creator) return\n const agg = state.starterPackAggs?.get(uri)\n const labels = state.labels?.getBySubject(uri) ?? []\n return {\n uri,\n cid: sp.cid,\n record: sp.record,\n creator,\n joinedAllTimeCount: agg?.joinedAllTime ?? 0,\n joinedWeekCount: agg?.joinedWeek ?? 0,\n labels,\n indexedAt: this.indexedAt(sp).toISOString(),\n }\n }\n\n starterPack(\n uri: string,\n state: HydrationState,\n ): Un$Typed<StarterPackView> | undefined {\n const sp = state.starterPacks?.get(uri)\n const basicView = this.starterPackBasic(uri, state)\n if (!sp || !basicView) return\n const agg = state.starterPackAggs?.get(uri)\n const feeds = mapDefined(sp.record.feeds ?? [], (feed) =>\n this.feedGenerator(feed.uri, state),\n )\n const list = this.listBasic(sp.record.list, state)\n const listItemsSample = mapDefined(agg?.listItemSampleUris ?? [], (uri) => {\n const li = state.listItems?.get(uri)\n if (!li) return\n const subject = this.profile(li.record.subject, state)\n if (!subject) return\n return { uri, subject }\n })\n return {\n ...basicView,\n feeds,\n list,\n listItemsSample,\n }\n }\n\n // Labels\n // ------------\n\n selfLabels({\n uri,\n cid,\n record,\n }: {\n uri?: string\n cid?: string\n record?:\n | PostRecord\n | LikeRecord\n | RepostRecord\n | FollowRecord\n | ProfileRecord\n | LabelerRecord\n | VerificationRecord\n | NotificationRecordDeleted\n }): Label[] {\n if (!uri || !cid || !record) return []\n\n // Only these have a \"labels\" property:\n if (\n !isPostRecord(record) &&\n !isProfileRecord(record) &&\n !isLabelerRecord(record)\n ) {\n return []\n }\n\n // Ignore if no labels defines\n if (!isSelfLabels(record.labels) || !record.labels.values.length) {\n return []\n }\n\n const src = creatorFromUri(uri) // record creator\n const cts =\n typeof record.createdAt === 'string'\n ? normalizeDatetimeAlways(record.createdAt)\n : new Date(0).toISOString()\n return record.labels.values.map(({ val }) => {\n return { src, uri, cid, val, cts }\n })\n }\n\n labeler(\n did: string,\n state: HydrationState,\n ): Un$Typed<LabelerView> | undefined {\n const labeler = state.labelers?.get(did)\n if (!labeler) return\n const creator = this.profile(did, state)\n if (!creator) return\n const viewer = state.labelerViewers?.get(did)\n const aggs = state.labelerAggs?.get(did)\n\n const uri = AtUri.make(did, ids.AppBskyLabelerService, 'self').toString()\n const labels = [\n ...(state.labels?.getBySubject(uri) ?? []),\n ...this.selfLabels({\n uri,\n cid: labeler.cid.toString(),\n record: labeler.record,\n }),\n ]\n\n return {\n uri,\n cid: labeler.cid.toString(),\n creator,\n likeCount: aggs?.likes ?? 0,\n viewer: viewer\n ? {\n like: viewer.like,\n }\n : undefined,\n indexedAt: this.indexedAt(labeler).toISOString(),\n labels,\n }\n }\n\n labelerDetailed(\n did: string,\n state: HydrationState,\n ): Un$Typed<LabelerViewDetailed> | undefined {\n const baseView = this.labeler(did, state)\n if (!baseView) return\n const labeler = state.labelers?.get(did)\n if (!labeler) return\n\n return {\n ...baseView,\n policies: labeler.record.policies,\n reasonTypes: labeler.record.reasonTypes,\n subjectTypes: labeler.record.subjectTypes,\n subjectCollections: labeler.record.subjectCollections,\n }\n }\n\n // Feed\n // ------------\n\n feedItemBlocksAndMutes(\n item: FeedItem,\n state: HydrationState,\n ): {\n originatorMuted: boolean\n originatorBlocked: boolean\n authorMuted: boolean\n authorBlocked: boolean\n ancestorAuthorBlocked: boolean\n } {\n const authorDid = creatorFromUri(item.post.uri)\n const originatorDid = item.repost\n ? creatorFromUri(item.repost.uri)\n : authorDid\n const post = state.posts?.get(item.post.uri)\n const parentUri = post?.record.reply?.parent.uri\n const parentAuthorDid = parentUri && creatorFromUri(parentUri)\n const parent = parentUri ? state.posts?.get(parentUri) : undefined\n const grandparentUri = parent?.record.reply?.parent.uri\n const grandparentAuthorDid =\n grandparentUri && creatorFromUri(grandparentUri)\n return {\n originatorMuted: this.viewerMuteExists(originatorDid, state),\n originatorBlocked: this.viewerBlockExists(originatorDid, state),\n authorMuted: this.viewerMuteExists(authorDid, state),\n authorBlocked: this.viewerBlockExists(authorDid, state),\n ancestorAuthorBlocked:\n (!!parentAuthorDid && this.viewerBlockExists(parentAuthorDid, state)) ||\n (!!grandparentAuthorDid &&\n this.viewerBlockExists(grandparentAuthorDid, state)),\n }\n }\n\n feedGenerator(\n uri: string,\n state: HydrationState,\n ): Un$Typed<GeneratorView> | undefined {\n const feedgen = state.feedgens?.get(uri)\n if (!feedgen) return\n const creatorDid = creatorFromUri(uri)\n const creator = this.profile(creatorDid, state)\n if (!creator) return\n const viewer = state.feedgenViewers?.get(uri)\n const aggs = state.feedgenAggs?.get(uri)\n const labels = state.labels?.getBySubject(uri) ?? []\n\n return {\n uri,\n cid: feedgen.cid,\n did: feedgen.record.did,\n creator,\n displayName: feedgen.record.displayName,\n description: feedgen.record.description,\n descriptionFacets: feedgen.record.descriptionFacets,\n avatar: feedgen.record.avatar\n ? this.imgUriBuilder.getPresetUri(\n 'avatar',\n creatorDid,\n cidFromBlobJson(feedgen.record.avatar),\n )\n : undefined,\n likeCount: aggs?.likes ?? 0,\n acceptsInteractions: feedgen.record.acceptsInteractions,\n labels,\n viewer: viewer\n ? {\n like: viewer.like,\n }\n : undefined,\n contentMode: feedgen.record.contentMode,\n indexedAt: this.indexedAt(feedgen).toISOString(),\n }\n }\n\n threadgate(\n uri: string,\n state: HydrationState,\n ): Un$Typed<ThreadgateView> | undefined {\n const gate = state.threadgates?.get(uri)\n if (!gate) return\n return {\n uri,\n cid: gate.cid,\n record: gate.record,\n lists: mapDefined(gate.record.allow ?? [], (rule) => {\n if (!isListRule(rule)) return\n return this.listBasic(rule.list, state)\n }),\n }\n }\n\n post(\n uri: string,\n state: HydrationState,\n depth = 0,\n ): Un$Typed<PostView> | undefined {\n const post = state.posts?.get(uri)\n if (!post) return\n const parsedUri = new AtUri(uri)\n const authorDid = parsedUri.hostname\n const author = this.profileBasic(authorDid, state)\n if (!author) return\n const aggs = state.postAggs?.get(uri)\n const viewer = state.postViewers?.get(uri)\n const threadgateUri = postUriToThreadgateUri(uri)\n const labels = [\n ...(state.labels?.getBySubject(uri) ?? []),\n ...this.selfLabels({\n uri,\n cid: post.cid,\n record: post.record,\n }),\n ]\n return {\n uri,\n cid: post.cid,\n author,\n record: post.record,\n embed:\n depth < 2 && post.record.embed\n ? this.embed(uri, post.record.embed, state, depth + 1)\n : undefined,\n bookmarkCount: aggs?.bookmarks ?? 0,\n replyCount: aggs?.replies ?? 0,\n repostCount: aggs?.reposts ?? 0,\n likeCount: aggs?.likes ?? 0,\n quoteCount: aggs?.quotes ?? 0,\n indexedAt: this.indexedAt(post).toISOString(),\n viewer: viewer\n ? {\n repost: viewer.repost,\n like: viewer.like,\n bookmarked: viewer.bookmarked,\n threadMuted: viewer.threadMuted,\n replyDisabled: this.userReplyDisabled(uri, state),\n embeddingDisabled: this.userPostEmbeddingDisabled(uri, state),\n pinned: this.viewerPinned(uri, state, authorDid),\n }\n : undefined,\n labels,\n threadgate: !post.record.reply // only hydrate gate on root post\n ? this.threadgate(threadgateUri, state)\n : undefined,\n debug: state.ctx?.includeDebugField\n ? { post: post.debug, author: author.debug }\n : undefined,\n }\n }\n\n feedViewPost(\n item: FeedItem,\n state: HydrationState,\n ): Un$Typed<FeedViewPost> | undefined {\n const postInfo = state.posts?.get(item.post.uri)\n let reason: $Typed<ReasonRepost> | $Typed<ReasonPin> | undefined\n if (item.authorPinned) {\n reason = this.reasonPin()\n } else if (item.repost) {\n const repost = state.reposts?.get(item.repost.uri)\n if (!repost) return\n if (repost.record.subject.uri !== item.post.uri) return\n reason = this.reasonRepost(item.repost.uri, repost, state)\n if (!reason) return\n }\n const post = this.post(item.post.uri, state)\n if (!post) return\n const reply = !postInfo?.violatesThreadGate\n ? this.replyRef(item.post.uri, state)\n : undefined\n return {\n post,\n reason,\n reply,\n }\n }\n\n replyRef(uri: string, state: HydrationState): Un$Typed<ReplyRef> | undefined {\n const postRecord = state.posts?.get(uri.toString())?.record\n if (!postRecord?.reply) return\n let root = this.maybePost(postRecord.reply.root.uri, state)\n let parent = this.maybePost(postRecord.reply.parent.uri, state)\n if (!state.ctx?.include3pBlocks) {\n const childBlocks = state.postBlocks?.get(uri)\n const parentBlocks = state.postBlocks?.get(parent.uri)\n // if child blocks parent, block parent\n if (isPostView(parent) && childBlocks?.parent) {\n parent = this.blockedPost(parent.uri, parent.author.did, state)\n }\n // if child or parent blocks root, block root\n if (isPostView(root) && (childBlocks?.root || parentBlocks?.root)) {\n root = this.blockedPost(root.uri, root.author.did, state)\n }\n }\n let grandparentAuthor: ProfileViewBasic | undefined\n if (\n isPostView(parent) &&\n isPostRecord(parent.record) &&\n parent.record.reply\n ) {\n grandparentAuthor = this.profileBasic(\n // @ts-expect-error isValidPostRecord(parent.record) should be used but the \"parent\" is not IPDL decoded\n creatorFromUri(parent.record.reply.parent.uri),\n state,\n )\n }\n return {\n root,\n parent,\n grandparentAuthor,\n }\n }\n\n maybePost(uri: string, state: HydrationState): $Typed<MaybePostView> {\n const post = this.post(uri, state)\n if (!post) {\n return this.notFoundPost(uri)\n }\n if (this.viewerBlockExists(post.author.did, state)) {\n return this.blockedPost(uri, post.author.did, state)\n }\n return {\n ...post,\n $type: 'app.bsky.feed.defs#postView',\n }\n }\n\n blockedPost(\n uri: string,\n authorDid: string,\n state: HydrationState,\n ): $Typed<BlockedPost> {\n return {\n $type: 'app.bsky.feed.defs#blockedPost',\n uri,\n blocked: true,\n author: {\n did: authorDid,\n viewer: this.blockedProfileViewer(authorDid, state),\n },\n }\n }\n\n notFoundPost(uri: string): $Typed<NotFoundPost> {\n return {\n $type: 'app.bsky.feed.defs#notFoundPost',\n uri,\n notFound: true,\n }\n }\n\n reasonRepost(\n uri: string,\n repost: Repost,\n state: HydrationState,\n ): $Typed<ReasonRepost> | undefined {\n const creatorDid = creatorFromUri(uri)\n const creator = this.profileBasic(creatorDid, state)\n if (!creator) return\n return {\n $type: 'app.bsky.feed.defs#reasonRepost',\n by: creator,\n uri,\n cid: repost.cid,\n indexedAt: this.indexedAt(repost).toISOString(),\n }\n }\n\n reasonPin(): $Typed<ReasonPin> {\n return {\n $type: 'app.bsky.feed.defs#reasonPin',\n }\n }\n\n // Bookmarks\n // ------------\n bookmark(\n key: string,\n state: HydrationState,\n ): Un$Typed<BookmarkView> | undefined {\n const viewer = state.ctx?.viewer\n if (!viewer) return\n\n const bookmark = state.bookmarks?.get(viewer)?.get(key)\n if (!bookmark) return\n\n const atUri = new AtUri(bookmark.subjectUri)\n if (atUri.collection !== ids.AppBskyFeedPost) return\n\n const item = this.maybePost(bookmark.subjectUri, state)\n return {\n createdAt: bookmark.indexedAt?.toDate().toISOString(),\n subject: {\n uri: bookmark.subjectUri,\n cid: bookmark.subjectCid,\n },\n item,\n }\n }\n\n // Threads\n // ------------\n\n thread(\n skele: { anchor: string; uris: string[] },\n state: HydrationState,\n opts: { height: number; depth: number },\n ): $Typed<ThreadViewPost> | $Typed<NotFoundPost> | $Typed<BlockedPost> {\n const { anchor, uris } = skele\n const post = this.post(anchor, state)\n const postInfo = state.posts?.get(anchor)\n if (!postInfo || !post) return this.notFoundPost(anchor)\n if (this.viewerBlockExists(post.author.did, state)) {\n return this.blockedPost(anchor, post.author.did, state)\n }\n const includedPosts = new Set<string>([anchor])\n const childrenByParentUri: Record<string, string[]> = {}\n uris.forEach((uri) => {\n const post = state.posts?.get(uri)\n const parentUri = post?.record.reply?.parent.uri\n if (!parentUri) return\n if (includedPosts.has(uri)) return\n includedPosts.add(uri)\n childrenByParentUri[parentUri] ??= []\n childrenByParentUri[parentUri].push(uri)\n })\n const rootUri = getRootUri(anchor, postInfo)\n const violatesThreadGate = postInfo.violatesThreadGate\n\n return {\n $type: 'app.bsky.feed.defs#threadViewPost',\n post,\n parent: !violatesThreadGate\n ? this.threadParent(anchor, rootUri, state, opts.height)\n : undefined,\n replies: !violatesThreadGate\n ? this.threadReplies(\n anchor,\n rootUri,\n childrenByParentUri,\n state,\n opts.depth,\n )\n : undefined,\n threadContext: {\n rootAuthorLike: state.threadContexts?.get(post.uri)?.like,\n },\n }\n }\n\n threadParent(\n childUri: string,\n rootUri: string,\n state: HydrationState,\n height: number,\n ):\n | $Typed<ThreadViewPost>\n | $Typed<NotFoundPost>\n | $Typed<BlockedPost>\n | undefined {\n if (height < 1) return undefined\n const parentUri = state.posts?.get(childUri)?.record.reply?.parent.uri\n if (!parentUri) return undefined\n if (\n !state.ctx?.include3pBlocks &&\n state.postBlocks?.get(childUri)?.parent\n ) {\n return this.blockedPost(parentUri, creatorFromUri(parentUri), state)\n }\n const post = this.post(parentUri, state)\n const postInfo = state.posts?.get(parentUri)\n if (!postInfo || !post) return this.notFoundPost(parentUri)\n if (rootUri !== getRootUri(parentUri, postInfo)) return // outside thread boundary\n if (this.viewerBlockExists(post.author.did, state)) {\n return this.blockedPost(parentUri, post.author.did, state)\n }\n return {\n $type: 'app.bsky.feed.defs#threadViewPost',\n post,\n parent: this.threadParent(parentUri, rootUri, state, height - 1),\n threadContext: {\n rootAuthorLike: state.threadContexts?.get(post.uri)?.like,\n },\n }\n }\n\n threadReplies(\n parentUri: string,\n rootUri: string,\n childrenByParentUri: Record<string, string[]>,\n state: HydrationState,\n depth: number,\n ): ($Typed<ThreadViewPost> | $Typed<BlockedPost>)[] | undefined {\n if (depth < 1) return undefined\n const childrenUris = childrenByParentUri[parentUri] ?? []\n return mapDefined(childrenUris, (uri) => {\n const postInfo = state.posts?.get(uri)\n if (postInfo?.violatesThreadGate) {\n return undefined\n }\n if (!state.ctx?.include3pBlocks && state.postBlocks?.get(uri)?.parent) {\n return undefined\n }\n const post = this.post(uri, state)\n if (!postInfo || !post) {\n // in the future we might consider keeping a placeholder for deleted\n // posts that have replies under them, but not supported at the moment.\n // this case is mostly likely hit when a takedown was applied to a post.\n return undefined\n }\n if (rootUri !== getRootUri(uri, postInfo)) return // outside thread boundary\n if (this.viewerBlockExists(post.author.did, state)) {\n return this.blockedPost(uri, post.author.did, state)\n }\n if (!this.viewerSeesNeedsReview({ uri, did: post.author.did }, state)) {\n return undefined\n }\n return {\n $type: 'app.bsky.feed.defs#threadViewPost',\n post,\n replies: this.threadReplies(\n uri,\n rootUri,\n childrenByParentUri,\n state,\n depth - 1,\n ),\n threadContext: {\n rootAuthorLike: state.threadContexts?.get(post.uri)?.like,\n },\n }\n })\n }\n\n // Threads V2\n // ------------\n\n threadV2(\n skeleton: { anchor: string; uris: string[] },\n state: HydrationState,\n {\n above,\n below,\n branchingFactor,\n sort,\n }: {\n above: number\n below: number\n branchingFactor: number\n sort: GetPostThreadV2QueryParams['sort']\n },\n ): { hasOtherReplies: boolean; thread: ThreadItem[] } {\n const { anchor: anchorUri, uris } = skeleton\n\n // Not found.\n const postView = this.post(anchorUri, state)\n const post = state.posts?.get(anchorUri)\n if (!post || !postView) {\n return {\n hasOtherReplies: false,\n thread: [\n this.threadV2ItemNotFound({\n uri: anchorUri,\n depth: 0,\n }),\n ],\n }\n }\n\n // Blocked (only 1p for anchor).\n if (this.viewerBlockExists(postView.author.did, state)) {\n return {\n hasOtherReplies: false,\n thread: [\n this.threadV2ItemBlocked({\n uri: anchorUri,\n depth: 0,\n authorDid: postView.author.did,\n state,\n }),\n ],\n }\n }\n\n const childrenByParentUri = this.groupThreadChildrenByParent(\n anchorUri,\n uris,\n state,\n )\n const rootUri = getRootUri(anchorUri, post)\n const opDid = uriToDid(rootUri)\n const authorDid = postView.author.did\n const isOPPost = authorDid === opDid\n const anchorViolatesThreadGate = post.violatesThreadGate\n\n // Builds the parent tree, and whether it is a contiguous OP thread.\n const parentTree = !anchorViolatesThreadGate\n ? this.threadV2Parent(\n {\n childUri: anchorUri,\n opDid,\n rootUri,\n\n above,\n depth: -1,\n },\n state,\n )\n : undefined\n\n const { tree: parent, isOPThread: isOPThreadFromRootToParent } =\n parentTree ?? { tree: undefined, isOPThread: false }\n\n const isOPThread = parent\n ? isOPThreadFromRootToParent && isOPPost\n : isOPPost\n\n const anchorDepth = 0 // The depth of the anchor post is always 0.\n let anchorTree: ThreadTree\n let hasOtherReplies = false\n\n if (this.noUnauthenticatedPost(state, postView)) {\n anchorTree = {\n type: 'noUnauthenticated',\n item: this.threadV2ItemNoUnauthenticated({\n uri: anchorUri,\n depth: anchorDepth,\n }),\n parent,\n }\n } else {\n const { replies, hasOtherReplies: hasOtherRepliesShadow } =\n !anchorViolatesThreadGate\n ? this.threadV2Replies(\n {\n parentUri: anchorUri,\n isOPThread,\n opDid,\n rootUri,\n childrenByParentUri,\n below,\n depth: 1,\n branchingFactor,\n },\n state,\n )\n : { replies: undefined, hasOtherReplies: false }\n hasOtherReplies = hasOtherRepliesShadow\n\n anchorTree = {\n type: 'post',\n item: this.threadV2ItemPost({\n depth: anchorDepth,\n isOPThread,\n postView,\n repliesAllowance: Infinity, // While we don't have pagination.\n uri: anchorUri,\n }),\n tags: post.tags,\n hasOPLike: !!state.threadContexts?.get(postView.uri)?.like,\n parent,\n replies,\n }\n }\n\n const thread = sortTrimFlattenThreadTree(\n anchorTree,\n {\n opDid,\n branchingFactor,\n sort,\n viewer: state.ctx?.viewer ?? null,\n threadTagsBumpDown: this.threadTagsBumpDown,\n threadTagsHide: this.threadTagsHide,\n visibilityTagRankPrefix: this.visibilityTagRankPrefix,\n },\n state.ctx?.featureGates.get(\n FeatureGateID.ThreadsV2ReplyRankingExploration,\n ),\n )\n\n return {\n hasOtherReplies,\n thread,\n }\n }\n\n private threadV2Parent(\n {\n childUri,\n opDid,\n rootUri,\n above,\n depth,\n }: {\n childUri: string\n opDid: string\n rootUri: string\n above: number\n depth: number\n },\n state: HydrationState,\n ): { tree: ThreadTreeVisible; isOPThread: boolean } | undefined {\n // Reached the `above` limit.\n if (Math.abs(depth) > above) {\n return undefined\n }\n\n // Not found.\n const uri = state.posts?.get(childUri)?.record.reply?.parent.uri\n if (!uri) {\n return undefined\n }\n const postView = this.post(uri, state)\n const post = state.posts?.get(uri)\n if (!post || !postView) {\n return {\n tree: {\n type: 'notFound',\n item: this.threadV2ItemNotFound({ uri, depth }),\n },\n isOPThread: false,\n }\n }\n if (rootUri !== getRootUri(uri, post)) {\n // Outside thread boundary.\n return undefined\n }\n\n // Blocked (1p and 3p for parent).\n const authorDid = postView.author.did\n const has1pBlock = this.viewerBlockExists(authorDid, state)\n const has3pBlock =\n !state.ctx?.include3pBlocks && state.postBlocks?.get(childUri)?.parent\n if (has1pBlock || has3pBlock) {\n return {\n tree: {\n type: 'blocked',\n item: this.threadV2ItemBlocked({\n uri,\n depth,\n authorDid,\n state,\n }),\n },\n isOPThread: false,\n }\n }\n\n // Recurse up.\n const parentTree = this.threadV2Parent(\n {\n childUri: uri,\n opDid,\n rootUri,\n above,\n depth: depth - 1,\n },\n state,\n )\n const { tree: parent, isOPThread: isOPThreadFromRootToParent } =\n parentTree ?? { tree: undefined, isOPThread: false }\n\n const isOPPost = authorDid === opDid\n const isOPThread = parent\n ? isOPThreadFromRootToParent && isOPPost\n : isOPPost\n\n if (this.noUnauthenticatedPost(state, postView)) {\n return {\n tree: {\n type: 'noUnauthenticated',\n item: this.threadV2ItemNoUnauthenticated({\n uri,\n depth,\n }),\n parent,\n },\n isOPThread,\n }\n }\n\n const parentUri = post.record.reply?.parent.uri\n const hasMoreParents = !!parentUri && !parent\n\n return {\n tree: {\n type: 'post',\n item: this.threadV2ItemPost({\n depth,\n isOPThread,\n moreParents: hasMoreParents,\n postView,\n uri,\n }),\n tags: post.tags,\n hasOPLike: !!state.threadContexts?.get(postView.uri)?.like,\n parent,\n replies: undefined,\n },\n isOPThread,\n }\n }\n\n private threadV2Replies(\n {\n parentUri,\n isOPThread: isOPThreadFromRootToParent,\n opDid,\n rootUri,\n childrenByParentUri,\n below,\n depth,\n branchingFactor,\n }: {\n parentUri: string\n isOPThread: boolean\n opDid: string\n rootUri: string\n childrenByParentUri: Record<string, string[]>\n below: number\n depth: number\n branchingFactor: number\n },\n state: HydrationState,\n ): { replies: ThreadTreeVisible[] | undefined; hasOtherReplies: boolean } {\n // Reached the `below` limit.\n if (depth > below) {\n return { replies: undefined, hasOtherReplies: false }\n }\n\n const childrenUris = childrenByParentUri[parentUri] ?? []\n let hasOtherReplies = false\n const replies = mapDefined(childrenUris, (uri) => {\n const replyInclusion = this.checkThreadV2ReplyInclusion({\n uri,\n rootUri,\n state,\n })\n if (!replyInclusion) {\n return undefined\n }\n const { authorDid, post, postView } = replyInclusion\n\n // Hidden.\n const { isOther } = this.isOtherThreadPost(\n { post, postView, rootUri, uri },\n state,\n )\n if (isOther) {\n // Only care about anchor replies\n if (depth === 1) {\n hasOtherReplies = true\n }\n return undefined\n }\n\n // Recurse down.\n const isOPThread = isOPThreadFromRootToParent && authorDid === opDid\n const { replies: nestedReplies } = this.threadV2Replies(\n {\n parentUri: uri,\n isOPThread,\n opDid,\n rootUri,\n childrenByParentUri,\n below,\n depth: depth + 1,\n branchingFactor,\n },\n state,\n )\n\n const reachedDepth = depth === below\n const repliesAllowance = reachedDepth ? 0 : branchingFactor\n\n const tree: ThreadTree = {\n type: 'post',\n item: this.threadV2ItemPost({\n depth,\n isOPThread,\n postView,\n repliesAllowance,\n uri,\n }),\n tags: post.tags,\n hasOPLike: !!state.threadContexts?.get(postView.uri)?.like,\n parent: undefined,\n replies: nestedReplies,\n }\n\n return tree\n })\n\n return {\n replies,\n hasOtherReplies,\n }\n }\n\n private threadV2ItemPost({\n depth,\n isOPThread,\n moreParents,\n postView,\n repliesAllowance,\n uri,\n }: {\n depth: number\n isOPThread: boolean\n moreParents?: boolean\n postView: PostView\n repliesAllowance?: number\n uri: string\n }): ThreadItemValuePost {\n const moreReplies =\n repliesAllowance === undefined\n ? 0\n : Math.max((postView.replyCount ?? 0) - repliesAllowance, 0)\n\n return {\n uri,\n depth,\n value: {\n $type: 'app.bsky.unspecced.defs#threadItemPost',\n post: postView,\n moreParents: moreParents ?? false,\n moreReplies,\n opThread: isOPThread,\n hiddenByThreadgate: false, // Hidden posts are handled by threadOtherV2\n mutedByViewer: false, // Hidden posts are handled by threadOtherV2\n },\n }\n }\n\n private threadV2ItemNoUnauthenticated({\n uri,\n depth,\n }: {\n uri: string\n depth: number\n }): ThreadItemValueNoUnauthenticated {\n return {\n uri,\n depth,\n value: {\n $type: 'app.bsky.unspecced.defs#threadItemNoUnauthenticated',\n },\n }\n }\n\n private threadV2ItemNotFound({\n uri,\n depth,\n }: {\n uri: string\n depth: number\n }): ThreadItemValueNotFound {\n return {\n uri,\n depth,\n value: {\n $type: 'app.bsky.unspecced.defs#threadItemNotFound',\n },\n }\n }\n\n private threadV2ItemBlocked({\n uri,\n depth,\n authorDid,\n state,\n }: {\n uri: string\n depth: number\n authorDid: string\n state: HydrationState\n }): ThreadItemValueBlocked {\n return {\n uri,\n depth,\n value: {\n $type: 'app.bsky.unspecced.defs#threadItemBlocked',\n author: {\n did: authorDid,\n viewer: this.blockedProfileViewer(authorDid, state),\n },\n },\n }\n }\n\n threadOtherV2(\n skeleton: { anchor: string; uris: string[] },\n state: HydrationState,\n {\n below,\n branchingFactor,\n }: {\n below: number\n branchingFactor: number\n },\n ): ThreadOtherItem[] {\n const { anchor: anchorUri, uris } = skeleton\n\n // Not found.\n const postView = this.post(anchorUri, state)\n const post = state.posts?.get(anchorUri)\n if (!post || !postView) {\n return []\n }\n\n // Blocked (only 1p for anchor).\n if (this.viewerBlockExists(postView.author.did, state)) {\n return []\n }\n\n const childrenByParentUri = this.groupThreadChildrenByParent(\n anchorUri,\n uris,\n state,\n )\n const rootUri = getRootUri(anchorUri, post)\n const opDid = uriToDid(rootUri)\n\n const anchorTree: ThreadOtherAnchorPostNode = {\n type: 'hiddenAnchor',\n item: this.threadOtherV2ItemPostAnchor({ depth: 0, uri: anchorUri }),\n replies: this.threadOtherV2Replies(\n {\n parentUri: anchorUri,\n rootUri,\n childrenByParentUri,\n below,\n depth: 1,\n },\n state,\n ),\n }\n\n return sortTrimFlattenThreadTree(\n anchorTree,\n {\n opDid,\n branchingFactor,\n viewer: state.ctx?.viewer ?? null,\n threadTagsBumpDown: this.threadTagsBumpDown,\n threadTagsHide: this.threadTagsHide,\n visibilityTagRankPrefix: this.visibilityTagRankPrefix,\n },\n state.ctx?.featureGates.get(\n FeatureGateID.ThreadsV2ReplyRankingExploration,\n ),\n )\n }\n\n private threadOtherV2Replies(\n {\n parentUri,\n rootUri,\n childrenByParentUri,\n below,\n depth,\n }: {\n parentUri: string\n rootUri: string\n childrenByParentUri: Record<string, string[]>\n below: number\n depth: number\n },\n state: HydrationState,\n ): ThreadOtherPostNode[] | undefined {\n // Reached the `below` limit.\n if (depth > below) {\n return undefined\n }\n\n const childrenUris = childrenByParentUri[parentUri] ?? []\n return mapDefined(childrenUris, (uri) => {\n const replyInclusion = this.checkThreadV2ReplyInclusion({\n uri,\n rootUri,\n state,\n })\n if (!replyInclusion) {\n return undefined\n }\n const { post, postView } = replyInclusion\n\n // Other posts to pull out\n const { isOther, hiddenByThreadgate, mutedByViewer } =\n this.isOtherThreadPost({ post, postView, rootUri, uri }, state)\n if (isOther) {\n // Only show hidden anchor replies, not all hidden.\n if (depth > 1) {\n return undefined\n }\n } else if (depth === 1) {\n // Don't include non-hidden anchor replies.\n return undefined\n }\n\n // Recurse down.\n const replies = this.threadOtherV2Replies(\n {\n parentUri: uri,\n rootUri,\n childrenByParentUri,\n below,\n depth: depth + 1,\n },\n state,\n )\n\n const item = this.threadOtherV2ItemPost({\n depth,\n hiddenByThreadgate,\n mutedByViewer,\n postView,\n uri,\n })\n\n const tree: ThreadOtherPostNode = {\n type: 'hiddenPost',\n item: item,\n tags: post.tags,\n replies,\n }\n\n return tree\n })\n }\n\n private threadOtherV2ItemPostAnchor({\n depth,\n uri,\n }: {\n depth: number\n uri: string\n }): ThreadOtherAnchorPostNode['item'] {\n return {\n uri,\n depth,\n // In hidden replies, the anchor value is undefined, so it doesn't include the anchor in the result.\n // This is helpful so we can use the same internal structure for hidden and non-hidden, while omitting anchor for hidden.\n value: undefined,\n }\n }\n\n private threadOtherV2ItemPost({\n depth,\n hiddenByThreadgate,\n mutedByViewer,\n postView,\n uri,\n }: {\n depth: number\n hiddenByThreadgate: boolean\n mutedByViewer: boolean\n postView: PostView\n uri: string\n }): ThreadOtherItemValuePost {\n const base = this.threadOtherV2ItemPostAnchor({ depth, uri })\n return {\n ...base,\n value: {\n $type: 'app.bsky.unspecced.defs#threadItemPost',\n post: postView,\n hiddenByThreadgate,\n mutedByViewer,\n moreParents: false, // \"Other\" replies don't have parents.\n moreReplies: 0, // \"Other\" replies don't have replies hydrated.\n opThread: false, // \"Other\" replies don't contain OP threads.\n },\n }\n }\n\n private checkThreadV2ReplyInclusion({\n uri,\n rootUri,\n state,\n }: {\n uri: string\n rootUri: string\n state: HydrationState\n }): {\n authorDid: string\n post: Post\n postView: PostView\n } | null {\n // Not found.\n const post = state.posts?.get(uri)\n if (post?.violatesThreadGate) {\n return null\n }\n const postView = this.post(uri, state)\n if (!post || !postView) {\n return null\n }\n const authorDid = postView.author.did\n if (rootUri !== getRootUri(uri, post)) {\n // outside thread boundary\n return null\n }\n\n // Blocked (1p and 3p for replies).\n const has1pBlock = this.viewerBlockExists(authorDid, state)\n const has3pBlock =\n !state.ctx?.include3pBlocks && state.postBlocks?.get(uri)?.parent\n if (has1pBlock || has3pBlock) {\n return null\n }\n if (!this.viewerSeesNeedsReview({ uri, did: authorDid }, state)) {\n return null\n }\n\n // No unauthenticated.\n if (this.noUnauthenticatedPost(state, postView)) {\n return null\n }\n\n return { authorDid, post, postView }\n }\n\n private isOtherThreadPost(\n {\n post,\n postView,\n rootUri,\n uri,\n }: {\n post: Post\n postView: PostView\n rootUri: string\n uri: string\n },\n state: HydrationState,\n ): {\n isOther: boolean\n hiddenByTag: boolean\n hiddenByThreadgate: boolean\n mutedByViewer: boolean\n } {\n const opDid = creatorFromUri(rootUri)\n const authorDid = creatorFromUri(uri)\n\n let hiddenByTag = false\n if (\n state.ctx?.featureGates.get(\n FeatureGateID.ThreadsV2ReplyRankingExploration,\n )\n ) {\n hiddenByTag = authorDid !== opDid && post.tags.has(this.visibilityTagHide)\n } else {\n const showBecauseFollowing = !!postView.author.viewer?.following\n hiddenByTag =\n authorDid !== opDid &&\n authorDid !== state.ctx?.viewer &&\n !showBecauseFollowing &&\n this.threadTagsHide.some((t) => post.tags.has(t))\n }\n\n const hiddenByThreadgate =\n state.ctx?.viewer !== authorDid &&\n this.replyIsHiddenByThreadgate(uri, rootUri, state)\n\n const mutedByViewer = this.viewerMuteExists(authorDid, state)\n const isPushPin =\n isPostRecord(post.record) && post.record.text.trim() === '📌'\n\n return {\n isOther: hiddenByTag || hiddenByThreadgate || mutedByViewer || isPushPin,\n hiddenByTag,\n hiddenByThreadgate,\n mutedByViewer,\n }\n }\n\n private groupThreadChildrenByParent(\n anchorUri: string,\n uris: string[],\n state: HydrationState,\n ): Record<string, string[]> {\n // Groups children of each parent.\n const includedPosts = new Set<string>([anchorUri])\n const childrenByParentUri: Record<string, string[]> = {}\n uris.forEach((uri) => {\n const post = state.posts?.get(uri)\n const parentUri = post?.record.reply?.parent.uri\n if (!parentUri) return\n if (includedPosts.has(uri)) return\n includedPosts.add(uri)\n childrenByParentUri[parentUri] ??= []\n childrenByParentUri[parentUri].push(uri)\n })\n return childrenByParentUri\n }\n\n // Embeds\n // ------------\n\n embed(\n postUri: string,\n embed: Embed | { $type: string },\n state: HydrationState,\n depth: number,\n ): $Typed<EmbedView> | undefined {\n if (isImagesEmbed(embed)) {\n return this.imagesEmbed(creatorFromUri(postUri), embed)\n } else if (isVideoEmbed(embed)) {\n return this.videoEmbed(creatorFromUri(postUri), embed)\n } else if (isExternalEmbed(embed)) {\n return this.externalEmbed(creatorFromUri(postUri), embed)\n } else if (isRecordEmbed(embed)) {\n return this.recordEmbed(postUri, embed, state, depth)\n } else if (isRecordWithMedia(embed)) {\n return this.recordWithMediaEmbed(postUri, embed, state, depth)\n } else {\n return undefined\n }\n }\n\n imagesEmbed(did: string, embed: ImagesEmbed): $Typed<ImagesEmbedView> {\n const imgViews = embed.images.map((img) => ({\n thumb: this.imgUriBuilder.getPresetUri(\n 'feed_thumbnail',\n did,\n cidFromBlobJson(img.image),\n ),\n fullsize: this.imgUriBuilder.getPresetUri(\n 'feed_fullsize',\n did,\n cidFromBlobJson(img.image),\n ),\n alt: img.alt,\n aspectRatio: img.aspectRatio,\n }))\n return {\n $type: 'app.bsky.embed.images#view',\n images: imgViews,\n }\n }\n\n videoEmbed(did: string, embed: VideoEmbed): $Typed<VideoEmbedView> {\n const cid = cidFromBlobJson(embed.video)\n return {\n $type: 'app.bsky.embed.video#view',\n cid,\n playlist: this.videoUriBuilder.playlist({ did, cid }),\n thumbnail: this.videoUriBuilder.thumbnail({ did, cid }),\n alt: embed.alt,\n aspectRatio: embed.aspectRatio,\n }\n }\n\n externalEmbed(did: string, embed: ExternalEmbed): $Typed<ExternalEmbedView> {\n const { uri, title, description, thumb } = embed.external\n return {\n $type: 'app.bsky.embed.external#view',\n external: {\n uri,\n title,\n description,\n thumb: thumb\n ? this.imgUriBuilder.getPresetUri(\n 'feed_thumbnail',\n did,\n cidFromBlobJson(thumb),\n )\n : undefined,\n },\n }\n }\n\n embedNotFound(uri: string): {\n $type: 'app.bsky.embed.record#view'\n record: $Typed<EmbedNotFound>\n } {\n return {\n $type: 'app.bsky.embed.record#view',\n record: {\n $type: 'app.bsky.embed.record#viewNotFound',\n uri,\n notFound: true,\n },\n }\n }\n\n embedDetached(uri: string): {\n $type: 'app.bsky.embed.record#view'\n record: $Typed<EmbedDetached>\n } {\n return {\n $type: 'app.bsky.embed.record#view',\n record: {\n $type: 'app.bsky.embed.record#viewDetached',\n uri,\n detached: true,\n },\n }\n }\n\n embedBlocked(\n uri: string,\n state: HydrationState,\n ): {\n $type: 'app.bsky.embed.record#view'\n record: $Typed<EmbedBlocked>\n } {\n const creator = creatorFromUri(uri)\n return {\n $type: 'app.bsky.embed.record#view',\n record: {\n $type: 'app.bsky.embed.record#viewBlocked',\n uri,\n blocked: true,\n author: {\n did: creator,\n viewer: this.blockedProfileViewer(creator, state),\n },\n },\n }\n }\n\n embedPostView(\n uri: string,\n state: HydrationState,\n depth: number,\n ): $Typed<PostEmbedView> | undefined {\n const postView = this.post(uri, state, depth)\n if (!postView) return\n return {\n $type: 'app.bsky.embed.record#viewRecord',\n uri: postView.uri,\n cid: postView.cid,\n author: postView.author,\n value: postView.record,\n labels: postView.labels,\n likeCount: postView.likeCount,\n replyCount: postView.replyCount,\n repostCount: postView.repostCount,\n quoteCount: postView.quoteCount,\n indexedAt: postView.indexedAt,\n embeds: depth > 1 ? undefined : postView.embed ? [postView.embed] : [],\n }\n }\n\n recordEmbed(\n postUri: string,\n embed: RecordEmbed,\n state: HydrationState,\n depth: number,\n withTypeTag: false,\n ): RecordEmbedView\n recordEmbed(\n postUri: string,\n embed: RecordEmbed,\n state: HydrationState,\n depth: number,\n withTypeTag?: true,\n ): $Typed<RecordEmbedView>\n recordEmbed(\n postUri: string,\n embed: RecordEmbed,\n state: HydrationState,\n depth: number,\n withTypeTag = true,\n ): RecordEmbedView {\n const uri = embed.record.uri\n const parsedUri = new AtUri(uri)\n if (\n this.viewerBlockExists(parsedUri.hostname, state) ||\n (!state.ctx?.include3pBlocks && state.postBlocks?.get(postUri)?.embed)\n ) {\n return this.embedBlocked(uri, state)\n }\n\n const post = state.posts?.get(postUri)\n if (post?.violatesEmbeddingRules) {\n return this.embedDetached(uri)\n }\n\n if (parsedUri.collection === ids.AppBskyFeedPost) {\n const view = this.embedPostView(uri, state, depth)\n if (!view) return this.embedNotFound(uri)\n const postgateRecordUri = postUriToPostgateUri(parsedUri.toString())\n const postgate = state.postgates?.get(postgateRecordUri)\n if (postgate?.record?.detachedEmbeddingUris?.includes(postUri)) {\n return this.embedDetached(uri)\n }\n return this.recordEmbedWrapper(view, withTypeTag)\n } else if (parsedUri.collection === ids.AppBskyFeedGenerator) {\n const view = this.feedGenerator(uri, state)\n if (!view) return this.embedNotFound(uri)\n return this.recordEmbedWrapper(\n { ...view, $type: 'app.bsky.feed.defs#generatorView' },\n withTypeTag,\n )\n } else if (parsedUri.collection === ids.AppBskyGraphList) {\n const view = this.list(uri, state)\n if (!view) return this.embedNotFound(uri)\n return this.recordEmbedWrapper(\n { ...view, $type: 'app.bsky.graph.defs#listView' },\n withTypeTag,\n )\n } else if (parsedUri.collection === ids.AppBskyLabelerService) {\n const view = this.labeler(parsedUri.hostname, state)\n if (!view) return this.embedNotFound(uri)\n return this.recordEmbedWrapper(\n { ...view, $type: 'app.bsky.labeler.defs#labelerView' },\n withTypeTag,\n )\n } else if (parsedUri.collection === ids.AppBskyGraphStarterpack) {\n const view = this.starterPackBasic(uri, state)\n if (!view) return this.embedNotFound(uri)\n return this.recordEmbedWrapper(\n { ...view, $type: 'app.bsky.graph.defs#starterPackViewBasic' },\n withTypeTag,\n )\n }\n return this.embedNotFound(uri)\n }\n\n private recordEmbedWrapper<T extends $Typed<RecordEmbedViewInternal>>(\n record: T,\n withTypeTag: boolean,\n ) {\n return {\n $type: withTypeTag ? ('app.bsky.embed.record#view' as const) : undefined,\n record,\n } satisfies RecordEmbedView\n }\n\n recordWithMediaEmbed(\n postUri: string,\n embed: RecordWithMedia,\n state: HydrationState,\n depth: number,\n ): $Typed<RecordWithMediaView> | undefined {\n const creator = creatorFromUri(postUri)\n let mediaEmbed:\n | $Typed<ImagesEmbedView>\n | $Typed<VideoEmbedView>\n | $Typed<ExternalEmbedView>\n if (isImagesEmbed(embed.media)) {\n mediaEmbed = this.imagesEmbed(creator, embed.media)\n } else if (isVideoEmbed(embed.media)) {\n mediaEmbed = this.videoEmbed(creator, embed.media)\n } else if (isExternalEmbed(embed.media)) {\n mediaEmbed = this.externalEmbed(creator, embed.media)\n } else {\n return\n }\n return {\n $type: 'app.bsky.embed.recordWithMedia#view',\n media: mediaEmbed,\n record: this.recordEmbed(postUri, embed.record, state, depth, false),\n }\n }\n\n userReplyDisabled(uri: string, state: HydrationState): boolean | undefined {\n const post = state.posts?.get(uri)\n if (post?.violatesThreadGate) {\n return true\n }\n const rootUriStr: string = post?.record.reply?.root.uri ?? uri\n const gate = state.threadgates?.get(\n postUriToThreadgateUri(rootUriStr),\n )?.record\n const viewer = state.ctx?.viewer\n if (!gate || !viewer) {\n return undefined\n }\n const rootPost = state.posts?.get(rootUriStr)?.record\n const ownerDid = creatorFromUri(rootUriStr)\n const {\n canReply,\n allowFollower,\n allowFollowing,\n allowListUris = [],\n } = parseThreadGate(viewer, ownerDid, rootPost ?? null, gate)\n if (canReply) {\n return false\n }\n if (allowFollower && state.profileViewers?.get(ownerDid)?.following) {\n return false\n }\n if (allowFollowing && state.profileViewers?.get(ownerDid)?.followedBy) {\n return false\n }\n for (const listUri of allowListUris) {\n const list = state.listViewers?.get(listUri)\n if (list?.viewerInList) {\n return false\n }\n }\n return true\n }\n\n userPostEmbeddingDisabled(\n uri: string,\n state: HydrationState,\n ): boolean | undefined {\n const post = state.posts?.get(uri)\n if (!post) {\n return true\n }\n const postgateRecordUri = postUriToPostgateUri(uri)\n const gate = state.postgates?.get(postgateRecordUri)?.record\n const viewerDid = state.ctx?.viewer ?? undefined\n const {\n embeddingRules: { canEmbed },\n } = parsePostgate({\n gate,\n viewerDid,\n authorDid: creatorFromUri(uri),\n })\n if (canEmbed) {\n return false\n }\n return true\n }\n\n viewerPinned(uri: string, state: HydrationState, authorDid: string) {\n if (!state.ctx?.viewer || state.ctx.viewer !== authorDid) return\n const actor = state.actors?.get(authorDid)\n if (!actor) return\n const pinnedPost = safePinnedPost(actor.profile?.pinnedPost)\n if (!pinnedPost) return undefined\n return pinnedPost.uri === uri\n }\n\n notification(\n notif: Notification,\n lastSeenAt: string | undefined,\n state: HydrationState,\n ): Un$Typed<NotificationView> | undefined {\n if (!notif.timestamp || !notif.reason) return\n const uri = new AtUri(notif.uri)\n const authorDid = uri.hostname\n const author = this.profile(authorDid, state)\n if (!author) return\n\n let recordInfo:\n | Post\n | Like\n | Repost\n | Follow\n | RecordInfo<ProfileRecord>\n | Verification\n | Pick<RecordInfo<Required<NotificationRecordDeleted>>, 'cid' | 'record'>\n | undefined\n | null\n\n if (uri.collection === ids.AppBskyFeedPost) {\n recordInfo = state.posts?.get(notif.uri)\n } else if (uri.collection === ids.AppBskyFeedLike) {\n recordInfo = state.likes?.get(notif.uri)\n } else if (uri.collection === ids.AppBskyFeedRepost) {\n recordInfo = state.reposts?.get(notif.uri)\n } else if (uri.collection === ids.AppBskyGraphFollow) {\n recordInfo = state.follows?.get(notif.uri)\n } else if (uri.collection === ids.AppBskyGraphVerification) {\n // When a verification record is removed, the record won't be found,\n // both for the `verified` and `unverified` notifications.\n recordInfo = state.verifications?.get(notif.uri) ?? {\n record: notificationDeletedRecord,\n cid: notificationDeletedRecordCid,\n }\n } else if (uri.collection === ids.AppBskyActorProfile) {\n const actor = state.actors?.get(authorDid)\n recordInfo =\n actor && actor.profile && actor.profileCid\n ? {\n record: actor.profile,\n cid: actor.profileCid,\n sortedAt: actor.sortedAt ?? new Date(0), // @NOTE will be present since profile record is present\n indexedAt: actor.indexedAt ?? new Date(0), // @NOTE will be present since profile record is present\n takedownRef: actor.profileTakedownRef,\n }\n : undefined\n }\n if (!recordInfo) return\n\n const labels = state.labels?.getBySubject(notif.uri) ?? []\n const selfLabels = this.selfLabels({\n uri: notif.uri,\n cid: recordInfo.cid,\n record: recordInfo.record,\n })\n const indexedAt = notif.timestamp.toDate().toISOString()\n return {\n uri: notif.uri,\n cid: recordInfo.cid,\n author,\n reason: notif.reason,\n reasonSubject: notif.reasonSubject || undefined,\n record: recordInfo.record,\n // @NOTE works with a hack in listNotifications so that when there's no last-seen time,\n // the user's first notification is marked unread, and all previous read. in this case,\n // the last seen time will be equal to the first notification's indexed time.\n isRead: lastSeenAt ? lastSeenAt > indexedAt : true,\n indexedAt: notif.timestamp.toDate().toISOString(),\n labels: [...labels, ...selfLabels],\n }\n }\n\n indexedAt({ sortedAt, indexedAt }: { sortedAt: Date; indexedAt: Date }) {\n if (!this.indexedAtEpoch) return sortedAt\n return indexedAt && indexedAt > this.indexedAtEpoch ? indexedAt : sortedAt\n }\n}\n\nconst getRootUri = (uri: string, post: Post): string => {\n return post.record.reply?.root.uri ?? uri\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/views/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { HOUR, MINUTE, mapDefined } from '@atproto/common'\nimport { AtUri, INVALID_HANDLE, normalizeDatetimeAlways } from '@atproto/syntax'\nimport { FeatureGateID } from '../feature-gates'\nimport { Actor, ProfileViewerState } from '../hydration/actor'\nimport { FeedItem, Like, Post, Repost } from '../hydration/feed'\nimport { Follow, Verification } from '../hydration/graph'\nimport { HydrationState } from '../hydration/hydrator'\nimport { Label } from '../hydration/label'\nimport { RecordInfo } from '../hydration/util'\nimport { ImageUriBuilder } from '../image/uri'\nimport { ids } from '../lexicon/lexicons'\nimport {\n KnownFollowers,\n ProfileAssociatedActivitySubscription,\n ProfileView,\n ProfileViewBasic,\n ProfileViewDetailed,\n StatusView,\n VerificationState,\n VerificationView,\n ViewerState as ProfileViewer,\n} from '../lexicon/types/app/bsky/actor/defs'\nimport {\n Record as ProfileRecord,\n isRecord as isProfileRecord,\n} from '../lexicon/types/app/bsky/actor/profile'\nimport { BookmarkView } from '../lexicon/types/app/bsky/bookmark/defs'\nimport {\n BlockedPost,\n FeedViewPost,\n GeneratorView,\n NotFoundPost,\n PostView,\n ReasonPin,\n ReasonRepost,\n ReplyRef,\n ThreadViewPost,\n ThreadgateView,\n isPostView,\n} from '../lexicon/types/app/bsky/feed/defs'\nimport { Record as LikeRecord } from '../lexicon/types/app/bsky/feed/like'\nimport {\n Record as PostRecord,\n isRecord as isPostRecord,\n} from '../lexicon/types/app/bsky/feed/post'\nimport { Record as RepostRecord } from '../lexicon/types/app/bsky/feed/repost'\nimport { isListRule } from '../lexicon/types/app/bsky/feed/threadgate'\nimport {\n ListItemView,\n ListView,\n ListViewBasic,\n StarterPackView,\n StarterPackViewBasic,\n} from '../lexicon/types/app/bsky/graph/defs'\nimport { Record as FollowRecord } from '../lexicon/types/app/bsky/graph/follow'\nimport { Record as VerificationRecord } from '../lexicon/types/app/bsky/graph/verification'\nimport {\n LabelerView,\n LabelerViewDetailed,\n} from '../lexicon/types/app/bsky/labeler/defs'\nimport {\n Record as LabelerRecord,\n isRecord as isLabelerRecord,\n} from '../lexicon/types/app/bsky/labeler/service'\nimport {\n ActivitySubscription,\n RecordDeleted as NotificationRecordDeleted,\n} from '../lexicon/types/app/bsky/notification/defs'\nimport { ThreadItem as ThreadOtherItem } from '../lexicon/types/app/bsky/unspecced/getPostThreadOtherV2'\nimport {\n QueryParams as GetPostThreadV2QueryParams,\n ThreadItem,\n} from '../lexicon/types/app/bsky/unspecced/getPostThreadV2'\nimport { isSelfLabels } from '../lexicon/types/com/atproto/label/defs'\nimport { $Typed, Un$Typed } from '../lexicon/util'\nimport { Notification } from '../proto/bsky_pb'\nimport {\n postUriToPostgateUri,\n postUriToThreadgateUri,\n safePinnedPost,\n uriToDid,\n uriToDid as creatorFromUri,\n} from '../util/uris'\nimport {\n ThreadItemValueBlocked,\n ThreadItemValueNoUnauthenticated,\n ThreadItemValueNotFound,\n ThreadItemValuePost,\n ThreadOtherAnchorPostNode,\n ThreadOtherItemValuePost,\n ThreadOtherPostNode,\n ThreadTree,\n ThreadTreeVisible,\n sortTrimFlattenThreadTree,\n} from './threads-v2'\nimport {\n Embed,\n EmbedBlocked,\n EmbedDetached,\n EmbedNotFound,\n EmbedView,\n ExternalEmbed,\n ExternalEmbedView,\n ImagesEmbed,\n ImagesEmbedView,\n MaybePostView,\n NotificationView,\n PostEmbedView,\n RecordEmbed,\n RecordEmbedView,\n RecordEmbedViewInternal,\n RecordWithMedia,\n RecordWithMediaView,\n VideoEmbed,\n VideoEmbedView,\n isExternalEmbed,\n isImagesEmbed,\n isRecordEmbed,\n isRecordWithMedia,\n isVideoEmbed,\n} from './types'\nimport {\n VideoUriBuilder,\n cidFromBlobJson,\n parsePostgate,\n parseThreadGate,\n} from './util'\n\nconst notificationDeletedRecord = {\n $type: 'app.bsky.notification.defs#recordDeleted' as const,\n}\n\n// Pre-computed CID for the `notificationDeletedRecord`.\nconst notificationDeletedRecordCid =\n 'bafyreidad6nyekfa4a67yfb573ptxiv6s7kyxyg2ra6qbbemcruadvtuim'\n\nexport class Views {\n public imgUriBuilder: ImageUriBuilder = this.opts.imgUriBuilder\n public videoUriBuilder: VideoUriBuilder = this.opts.videoUriBuilder\n public indexedAtEpoch: Date | undefined = this.opts.indexedAtEpoch\n private threadTagsBumpDown: readonly string[] = this.opts.threadTagsBumpDown\n private threadTagsHide: readonly string[] = this.opts.threadTagsHide\n private visibilityTagHide: string = this.opts.visibilityTagHide\n private visibilityTagRankPrefix: string = this.opts.visibilityTagRankPrefix\n constructor(\n private opts: {\n imgUriBuilder: ImageUriBuilder\n videoUriBuilder: VideoUriBuilder\n indexedAtEpoch: Date | undefined\n threadTagsBumpDown: readonly string[]\n threadTagsHide: readonly string[]\n visibilityTagHide: string\n visibilityTagRankPrefix: string\n },\n ) {}\n\n // Actor\n // ------------\n\n actorIsNoHosted(did: string, state: HydrationState): boolean {\n return (\n this.actorIsDeactivated(did, state) || this.actorIsTakendown(did, state)\n )\n }\n\n actorIsDeactivated(did: string, state: HydrationState): boolean {\n if (state.actors?.get(did)?.upstreamStatus === 'deactivated') return true\n return false\n }\n\n actorIsTakendown(did: string, state: HydrationState): boolean {\n const actor = state.actors?.get(did)\n if (actor?.takedownRef) return true\n if (actor?.upstreamStatus === 'takendown') return true\n if (actor?.upstreamStatus === 'suspended') return true\n if (state.labels?.get(did)?.isTakendown) return true\n return false\n }\n\n noUnauthenticatedPost(state: HydrationState, post: PostView): boolean {\n const isNoUnauthenticated = post.author.labels?.some(\n (l) => l.val === '!no-unauthenticated',\n )\n return !state.ctx?.viewer && !!isNoUnauthenticated\n }\n\n viewerBlockExists(did: string, state: HydrationState): boolean {\n const viewer = state.profileViewers?.get(did)\n if (!viewer) return false\n return !!(\n viewer.blockedBy ||\n viewer.blocking ||\n this.blockedByList(viewer, state) ||\n this.blockingByList(viewer, state)\n )\n }\n\n viewerMuteExists(did: string, state: HydrationState): boolean {\n const viewer = state.profileViewers?.get(did)\n if (!viewer) return false\n return !!(viewer.muted || this.mutedByList(viewer, state))\n }\n\n blockingByList(viewer: ProfileViewerState, state: HydrationState) {\n return (\n viewer.blockingByList && this.recordActive(viewer.blockingByList, state)\n )\n }\n\n blockedByList(viewer: ProfileViewerState, state: HydrationState) {\n return (\n viewer.blockedByList && this.recordActive(viewer.blockedByList, state)\n )\n }\n\n mutedByList(viewer: ProfileViewerState, state: HydrationState) {\n return viewer.mutedByList && this.recordActive(viewer.mutedByList, state)\n }\n\n recordActive(uri: string, state: HydrationState) {\n const did = uriToDid(uri)\n const actor = state.actors?.get(did)\n if (!actor || this.actorIsTakendown(did, state)) {\n // actor may not be present when takedowns are eagerly applied during hydration.\n // so it's important to _try_ to hydrate the actor for records checked this way.\n return\n }\n return uri\n }\n\n viewerSeesNeedsReview(\n { did, uri }: { did?: string; uri?: string },\n state: HydrationState,\n ): boolean {\n const { labels, profileViewers, ctx } = state\n did = did || (uri && uriToDid(uri))\n if (!did) {\n return true\n }\n if (\n labels?.get(did)?.needsReview ||\n (uri && labels?.get(uri)?.needsReview)\n ) {\n // content marked as needs review\n return ctx?.viewer === did || !!profileViewers?.get(did)?.following\n }\n return true\n }\n\n replyIsHiddenByThreadgate(\n replyUri: string,\n rootPostUri: string,\n state: HydrationState,\n ) {\n const threadgateUri = postUriToThreadgateUri(rootPostUri)\n const threadgate = state.threadgates?.get(threadgateUri)\n return !!threadgate?.record?.hiddenReplies?.includes(replyUri)\n }\n\n profileDetailed(\n did: string,\n state: HydrationState,\n ): Un$Typed<ProfileViewDetailed> | undefined {\n const actor = state.actors?.get(did)\n if (!actor) return\n const baseView = this.profile(did, state)\n if (!baseView) return\n const knownFollowers = this.knownFollowers(did, state)\n const profileAggs = state.profileAggs?.get(did)\n\n return {\n ...baseView,\n website: this.profileWebsite(did, state),\n viewer: baseView.viewer\n ? {\n ...baseView.viewer,\n knownFollowers,\n }\n : undefined,\n banner: actor.profile?.banner\n ? this.imgUriBuilder.getPresetUri(\n 'banner',\n did,\n cidFromBlobJson(actor.profile.banner),\n )\n : undefined,\n followersCount: profileAggs?.followers ?? 0,\n followsCount: profileAggs?.follows ?? 0,\n postsCount: profileAggs?.posts ?? 0,\n associated: {\n lists: profileAggs?.lists,\n feedgens: profileAggs?.feeds,\n starterPacks: profileAggs?.starterPacks,\n labeler: actor.isLabeler,\n // @TODO apply default chat policy?\n chat: actor.allowIncomingChatsFrom\n ? { allowIncoming: actor.allowIncomingChatsFrom }\n : undefined,\n activitySubscription: this.profileAssociatedActivitySubscription(actor),\n },\n joinedViaStarterPack: actor.profile?.joinedViaStarterPack\n ? this.starterPackBasic(actor.profile.joinedViaStarterPack.uri, state)\n : undefined,\n pinnedPost: safePinnedPost(actor.profile?.pinnedPost),\n }\n }\n profile(\n did: string,\n state: HydrationState,\n ): Un$Typed<ProfileView> | undefined {\n const actor = state.actors?.get(did)\n if (!actor) return\n const basicView = this.profileBasic(did, state)\n if (!basicView) return\n return {\n ...basicView,\n description: actor.profile?.description || undefined,\n indexedAt:\n actor.indexedAt && actor.sortedAt\n ? this.indexedAt({\n sortedAt: actor.sortedAt,\n indexedAt: actor.indexedAt,\n }).toISOString()\n : undefined,\n }\n }\n\n profileBasic(\n did: string,\n state: HydrationState,\n ): Un$Typed<ProfileViewBasic> | undefined {\n const actor = state.actors?.get(did)\n if (!actor) return\n const profileUri = AtUri.make(\n did,\n ids.AppBskyActorProfile,\n 'self',\n ).toString()\n const labels = [\n ...(state.labels?.getBySubject(did) ?? []),\n ...(state.labels?.getBySubject(profileUri) ?? []),\n ...this.selfLabels({\n uri: profileUri,\n cid: actor.profileCid?.toString(),\n record: actor.profile,\n }),\n ]\n return {\n did,\n handle: actor.handle ?? INVALID_HANDLE,\n displayName: actor.profile?.displayName,\n pronouns: actor.profile?.pronouns,\n avatar: actor.profile?.avatar\n ? this.imgUriBuilder.getPresetUri(\n 'avatar',\n did,\n cidFromBlobJson(actor.profile.avatar),\n )\n : undefined,\n // associated.feedgens and associated.lists info not necessarily included\n // on profile and profile-basic views, but should be on profile-detailed.\n associated: {\n labeler: actor.isLabeler ? true : undefined,\n // @TODO apply default chat policy?\n chat: actor.allowIncomingChatsFrom\n ? { allowIncoming: actor.allowIncomingChatsFrom }\n : undefined,\n activitySubscription: this.profileAssociatedActivitySubscription(actor),\n },\n viewer: this.profileViewer(did, state),\n labels,\n createdAt: actor.createdAt?.toISOString(),\n verification: this.verification(did, state),\n status: this.status(did, state),\n debug: state.ctx?.includeDebugField ? actor.debug : undefined,\n }\n }\n\n profileAssociatedActivitySubscription(\n actor: Actor,\n ): ProfileAssociatedActivitySubscription {\n return { allowSubscriptions: actor.allowActivitySubscriptionsFrom }\n }\n\n profileKnownFollowers(\n did: string,\n state: HydrationState,\n ): ProfileView | undefined {\n const actor = state.actors?.get(did)\n if (!actor) return\n const baseView = this.profile(did, state)\n if (!baseView) return\n const knownFollowers = this.knownFollowers(did, state)\n return {\n ...baseView,\n viewer: baseView.viewer\n ? {\n ...baseView.viewer,\n knownFollowers,\n }\n : undefined,\n }\n }\n\n profileViewer(did: string, state: HydrationState): ProfileViewer | undefined {\n const viewer = state.profileViewers?.get(did)\n if (!viewer) return\n const blockedByList = this.blockedByList(viewer, state)\n const blockedByUri = viewer.blockedBy || blockedByList\n const blockingByList = this.blockingByList(viewer, state)\n const blockingUri = viewer.blocking || blockingByList\n const block = !!blockedByUri || !!blockingUri\n const mutedByList = this.mutedByList(viewer, state)\n return {\n muted: !!(viewer.muted || mutedByList),\n mutedByList: mutedByList ? this.listBasic(mutedByList, state) : undefined,\n blockedBy: !!blockedByUri,\n blocking: blockingUri,\n blockingByList: blockingByList\n ? this.listBasic(blockingByList, state)\n : undefined,\n following: viewer.following && !block ? viewer.following : undefined,\n followedBy: viewer.followedBy && !block ? viewer.followedBy : undefined,\n activitySubscription: this.profileViewerActivitySubscription(\n viewer,\n did,\n state,\n ),\n }\n }\n\n profileViewerActivitySubscription(\n profileViewer: ProfileViewerState,\n did: string,\n state: HydrationState,\n ): ActivitySubscription | undefined {\n const actor = state.actors?.get(did)\n if (!actor) return undefined\n\n const activitySubscription = state.activitySubscriptions?.get(did)\n if (!activitySubscription) return undefined\n\n const allowFrom = actor.allowActivitySubscriptionsFrom\n const actorFollowsViewer = !!profileViewer.followedBy\n const viewerFollowsActor = !!profileViewer.following\n if (\n (allowFrom === 'followers' && viewerFollowsActor) ||\n (allowFrom === 'mutuals' && actorFollowsViewer && viewerFollowsActor)\n ) {\n return activitySubscription\n }\n return undefined\n }\n\n profileWebsite(did: string, state: HydrationState): string | undefined {\n const actor = state.actors?.get(did)\n if (!actor?.profile?.website) return\n const { website } = actor.profile\n\n // The record property accepts any URI, but we don't want\n // to pass the client any schemes other than HTTPS.\n return website.startsWith('https://') ? website : undefined\n }\n\n knownFollowers(\n did: string,\n state: HydrationState,\n ): KnownFollowers | undefined {\n const knownFollowers = state.knownFollowers?.get(did)\n if (!knownFollowers) return\n const blocks = state.bidirectionalBlocks?.get(did)\n const followers = mapDefined(knownFollowers.followers, (followerDid) => {\n if (this.viewerBlockExists(followerDid, state)) {\n return undefined\n }\n if (blocks?.get(followerDid)) {\n return undefined\n }\n if (this.actorIsNoHosted(followerDid, state)) {\n // @TODO only needed right now to work around getProfile's { includeTakedowns: true }\n return undefined\n }\n return this.profileBasic(followerDid, state)\n })\n return { count: knownFollowers.count, followers }\n }\n\n verification(\n did: string,\n state: HydrationState,\n ): VerificationState | undefined {\n const actor = state.actors?.get(did)\n if (!actor) return\n\n const isImpersonation = state.labels?.get(did)?.isImpersonation\n\n const verifications: VerificationView[] = actor.verifications.map(\n ({ issuer, uri, displayName, handle, createdAt }) => {\n // @NOTE: We don't factor-in impersonation when evaluating the validity of each verification,\n // only in the overall profile verification validity.\n const isValid =\n !!displayName &&\n displayName === actor.profile?.displayName &&\n !!handle &&\n handle === actor.handle\n\n return {\n issuer,\n uri,\n isValid,\n createdAt,\n }\n },\n )\n const hasValidVerification = verifications.some((v) => v.isValid)\n\n const verifiedStatus = verifications.length\n ? hasValidVerification && !isImpersonation\n ? 'valid'\n : 'invalid'\n : 'none'\n const trustedVerifierStatus = actor.trustedVerifier\n ? isImpersonation\n ? 'invalid'\n : 'valid'\n : 'none'\n\n if (\n verifications.length === 0 &&\n verifiedStatus === 'none' &&\n trustedVerifierStatus === 'none'\n ) {\n return undefined\n }\n\n return {\n verifications,\n verifiedStatus,\n trustedVerifierStatus,\n }\n }\n\n status(did: string, state: HydrationState): StatusView | undefined {\n const actor = state.actors?.get(did)\n if (!actor?.status) return\n\n const { status } = actor\n const { record, sortedAt, cid } = status\n const uri = AtUri.make(did, ids.AppBskyActorStatus, 'self').toString()\n\n const minDuration = 5 * MINUTE\n const maxDuration = 4 * HOUR\n\n const expiresAtMs = record.durationMinutes\n ? sortedAt.getTime() +\n Math.max(\n Math.min(record.durationMinutes * MINUTE, maxDuration),\n minDuration,\n )\n : undefined\n const expiresAt = expiresAtMs\n ? new Date(expiresAtMs).toISOString()\n : undefined\n\n const isActive = expiresAtMs ? expiresAtMs > Date.now() : undefined\n\n return {\n uri,\n cid,\n record: record,\n status: record.status,\n embed: isExternalEmbed(record.embed)\n ? this.externalEmbed(did, record.embed)\n : undefined,\n expiresAt,\n isActive,\n }\n }\n\n blockedProfileViewer(\n did: string,\n state: HydrationState,\n ): ProfileViewer | undefined {\n const viewer = state.profileViewers?.get(did)\n if (!viewer) return\n const blockedByUri = viewer.blockedBy || this.blockedByList(viewer, state)\n const blockingUri = viewer.blocking || this.blockingByList(viewer, state)\n return {\n blockedBy: !!blockedByUri,\n blocking: blockingUri,\n }\n }\n\n // Graph\n // ------------\n\n list(uri: string, state: HydrationState): Un$Typed<ListView> | undefined {\n const creatorDid = creatorFromUri(uri)\n const list = state.lists?.get(uri)\n if (!list) return\n const creator = this.profile(creatorDid, state)\n if (!creator) return\n const basicView = this.listBasic(uri, state)\n if (!basicView) return\n\n return {\n ...basicView,\n creator,\n description: list.record.description,\n descriptionFacets: list.record.descriptionFacets,\n indexedAt: this.indexedAt(list).toISOString(),\n }\n }\n\n listBasic(\n uri: string,\n state: HydrationState,\n ): Un$Typed<ListViewBasic> | undefined {\n const list = state.lists?.get(uri)\n if (!list) {\n return undefined\n }\n const listAgg = state.listAggs?.get(uri)\n const listViewer = state.listViewers?.get(uri)\n const labels = state.labels?.getBySubject(uri) ?? []\n const creator = creatorFromUri(uri)\n return {\n uri,\n cid: list.cid,\n name: list.record.name,\n purpose: list.record.purpose,\n avatar: list.record.avatar\n ? this.imgUriBuilder.getPresetUri(\n 'avatar',\n creator,\n cidFromBlobJson(list.record.avatar),\n )\n : undefined,\n listItemCount: listAgg?.listItems ?? 0,\n indexedAt: this.indexedAt(list).toISOString(),\n labels,\n viewer: listViewer\n ? {\n muted: !!listViewer.viewerMuted,\n blocked: listViewer.viewerListBlockUri,\n }\n : undefined,\n }\n }\n\n listItemView(\n uri: string,\n did: string,\n state: HydrationState,\n ): Un$Typed<ListItemView> | undefined {\n const subject = this.profile(did, state)\n if (!subject) return\n return { uri, subject }\n }\n\n starterPackBasic(\n uri: string,\n state: HydrationState,\n ): Un$Typed<StarterPackViewBasic> | undefined {\n const sp = state.starterPacks?.get(uri)\n if (!sp) return\n const parsedUri = new AtUri(uri)\n const creator = this.profileBasic(parsedUri.hostname, state)\n if (!creator) return\n const agg = state.starterPackAggs?.get(uri)\n const labels = state.labels?.getBySubject(uri) ?? []\n return {\n uri,\n cid: sp.cid,\n record: sp.record,\n creator,\n joinedAllTimeCount: agg?.joinedAllTime ?? 0,\n joinedWeekCount: agg?.joinedWeek ?? 0,\n labels,\n indexedAt: this.indexedAt(sp).toISOString(),\n }\n }\n\n starterPack(\n uri: string,\n state: HydrationState,\n ): Un$Typed<StarterPackView> | undefined {\n const sp = state.starterPacks?.get(uri)\n const basicView = this.starterPackBasic(uri, state)\n if (!sp || !basicView) return\n const agg = state.starterPackAggs?.get(uri)\n const feeds = mapDefined(sp.record.feeds ?? [], (feed) =>\n this.feedGenerator(feed.uri, state),\n )\n const list = this.listBasic(sp.record.list, state)\n const listItemsSample = mapDefined(agg?.listItemSampleUris ?? [], (uri) => {\n const li = state.listItems?.get(uri)\n if (!li) return\n const subject = this.profile(li.record.subject, state)\n if (!subject) return\n return { uri, subject }\n })\n return {\n ...basicView,\n feeds,\n list,\n listItemsSample,\n }\n }\n\n // Labels\n // ------------\n\n selfLabels({\n uri,\n cid,\n record,\n }: {\n uri?: string\n cid?: string\n record?:\n | PostRecord\n | LikeRecord\n | RepostRecord\n | FollowRecord\n | ProfileRecord\n | LabelerRecord\n | VerificationRecord\n | NotificationRecordDeleted\n }): Label[] {\n if (!uri || !cid || !record) return []\n\n // Only these have a \"labels\" property:\n if (\n !isPostRecord(record) &&\n !isProfileRecord(record) &&\n !isLabelerRecord(record)\n ) {\n return []\n }\n\n // Ignore if no labels defines\n if (!isSelfLabels(record.labels) || !record.labels.values.length) {\n return []\n }\n\n const src = creatorFromUri(uri) // record creator\n const cts =\n typeof record.createdAt === 'string'\n ? normalizeDatetimeAlways(record.createdAt)\n : new Date(0).toISOString()\n return record.labels.values.map(({ val }) => {\n return { src, uri, cid, val, cts }\n })\n }\n\n labeler(\n did: string,\n state: HydrationState,\n ): Un$Typed<LabelerView> | undefined {\n const labeler = state.labelers?.get(did)\n if (!labeler) return\n const creator = this.profile(did, state)\n if (!creator) return\n const viewer = state.labelerViewers?.get(did)\n const aggs = state.labelerAggs?.get(did)\n\n const uri = AtUri.make(did, ids.AppBskyLabelerService, 'self').toString()\n const labels = [\n ...(state.labels?.getBySubject(uri) ?? []),\n ...this.selfLabels({\n uri,\n cid: labeler.cid.toString(),\n record: labeler.record,\n }),\n ]\n\n return {\n uri,\n cid: labeler.cid.toString(),\n creator,\n likeCount: aggs?.likes ?? 0,\n viewer: viewer\n ? {\n like: viewer.like,\n }\n : undefined,\n indexedAt: this.indexedAt(labeler).toISOString(),\n labels,\n }\n }\n\n labelerDetailed(\n did: string,\n state: HydrationState,\n ): Un$Typed<LabelerViewDetailed> | undefined {\n const baseView = this.labeler(did, state)\n if (!baseView) return\n const labeler = state.labelers?.get(did)\n if (!labeler) return\n\n return {\n ...baseView,\n policies: labeler.record.policies,\n reasonTypes: labeler.record.reasonTypes,\n subjectTypes: labeler.record.subjectTypes,\n subjectCollections: labeler.record.subjectCollections,\n }\n }\n\n // Feed\n // ------------\n\n feedItemBlocksAndMutes(\n item: FeedItem,\n state: HydrationState,\n ): {\n originatorMuted: boolean\n originatorBlocked: boolean\n authorMuted: boolean\n authorBlocked: boolean\n ancestorAuthorBlocked: boolean\n } {\n const authorDid = creatorFromUri(item.post.uri)\n const originatorDid = item.repost\n ? creatorFromUri(item.repost.uri)\n : authorDid\n const post = state.posts?.get(item.post.uri)\n const parentUri = post?.record.reply?.parent.uri\n const parentAuthorDid = parentUri && creatorFromUri(parentUri)\n const parent = parentUri ? state.posts?.get(parentUri) : undefined\n const grandparentUri = parent?.record.reply?.parent.uri\n const grandparentAuthorDid =\n grandparentUri && creatorFromUri(grandparentUri)\n return {\n originatorMuted: this.viewerMuteExists(originatorDid, state),\n originatorBlocked: this.viewerBlockExists(originatorDid, state),\n authorMuted: this.viewerMuteExists(authorDid, state),\n authorBlocked: this.viewerBlockExists(authorDid, state),\n ancestorAuthorBlocked:\n (!!parentAuthorDid && this.viewerBlockExists(parentAuthorDid, state)) ||\n (!!grandparentAuthorDid &&\n this.viewerBlockExists(grandparentAuthorDid, state)),\n }\n }\n\n feedGenerator(\n uri: string,\n state: HydrationState,\n ): Un$Typed<GeneratorView> | undefined {\n const feedgen = state.feedgens?.get(uri)\n if (!feedgen) return\n const creatorDid = creatorFromUri(uri)\n const creator = this.profile(creatorDid, state)\n if (!creator) return\n const viewer = state.feedgenViewers?.get(uri)\n const aggs = state.feedgenAggs?.get(uri)\n const labels = state.labels?.getBySubject(uri) ?? []\n\n return {\n uri,\n cid: feedgen.cid,\n did: feedgen.record.did,\n creator,\n displayName: feedgen.record.displayName,\n description: feedgen.record.description,\n descriptionFacets: feedgen.record.descriptionFacets,\n avatar: feedgen.record.avatar\n ? this.imgUriBuilder.getPresetUri(\n 'avatar',\n creatorDid,\n cidFromBlobJson(feedgen.record.avatar),\n )\n : undefined,\n likeCount: aggs?.likes ?? 0,\n acceptsInteractions: feedgen.record.acceptsInteractions,\n labels,\n viewer: viewer\n ? {\n like: viewer.like,\n }\n : undefined,\n contentMode: feedgen.record.contentMode,\n indexedAt: this.indexedAt(feedgen).toISOString(),\n }\n }\n\n threadgate(\n uri: string,\n state: HydrationState,\n ): Un$Typed<ThreadgateView> | undefined {\n const gate = state.threadgates?.get(uri)\n if (!gate) return\n return {\n uri,\n cid: gate.cid,\n record: gate.record,\n lists: mapDefined(gate.record.allow ?? [], (rule) => {\n if (!isListRule(rule)) return\n return this.listBasic(rule.list, state)\n }),\n }\n }\n\n post(\n uri: string,\n state: HydrationState,\n depth = 0,\n ): Un$Typed<PostView> | undefined {\n const post = state.posts?.get(uri)\n if (!post) return\n const parsedUri = new AtUri(uri)\n const authorDid = parsedUri.hostname\n const author = this.profileBasic(authorDid, state)\n if (!author) return\n const aggs = state.postAggs?.get(uri)\n const viewer = state.postViewers?.get(uri)\n const threadgateUri = postUriToThreadgateUri(uri)\n const labels = [\n ...(state.labels?.getBySubject(uri) ?? []),\n ...this.selfLabels({\n uri,\n cid: post.cid,\n record: post.record,\n }),\n ]\n return {\n uri,\n cid: post.cid,\n author,\n record: post.record,\n embed:\n depth < 2 && post.record.embed\n ? this.embed(uri, post.record.embed, state, depth + 1)\n : undefined,\n bookmarkCount: aggs?.bookmarks ?? 0,\n replyCount: aggs?.replies ?? 0,\n repostCount: aggs?.reposts ?? 0,\n likeCount: aggs?.likes ?? 0,\n quoteCount: aggs?.quotes ?? 0,\n indexedAt: this.indexedAt(post).toISOString(),\n viewer: viewer\n ? {\n repost: viewer.repost,\n like: viewer.like,\n bookmarked: viewer.bookmarked,\n threadMuted: viewer.threadMuted,\n replyDisabled: this.userReplyDisabled(uri, state),\n embeddingDisabled: this.userPostEmbeddingDisabled(uri, state),\n pinned: this.viewerPinned(uri, state, authorDid),\n }\n : undefined,\n labels,\n threadgate: !post.record.reply // only hydrate gate on root post\n ? this.threadgate(threadgateUri, state)\n : undefined,\n debug: state.ctx?.includeDebugField\n ? { post: post.debug, author: author.debug }\n : undefined,\n }\n }\n\n feedViewPost(\n item: FeedItem,\n state: HydrationState,\n ): Un$Typed<FeedViewPost> | undefined {\n const postInfo = state.posts?.get(item.post.uri)\n let reason: $Typed<ReasonRepost> | $Typed<ReasonPin> | undefined\n if (item.authorPinned) {\n reason = this.reasonPin()\n } else if (item.repost) {\n const repost = state.reposts?.get(item.repost.uri)\n if (!repost) return\n if (repost.record.subject.uri !== item.post.uri) return\n reason = this.reasonRepost(item.repost.uri, repost, state)\n if (!reason) return\n }\n const post = this.post(item.post.uri, state)\n if (!post) return\n const reply = !postInfo?.violatesThreadGate\n ? this.replyRef(item.post.uri, state)\n : undefined\n return {\n post,\n reason,\n reply,\n }\n }\n\n replyRef(uri: string, state: HydrationState): Un$Typed<ReplyRef> | undefined {\n const postRecord = state.posts?.get(uri.toString())?.record\n if (!postRecord?.reply) return\n let root = this.maybePost(postRecord.reply.root.uri, state)\n let parent = this.maybePost(postRecord.reply.parent.uri, state)\n if (!state.ctx?.include3pBlocks) {\n const childBlocks = state.postBlocks?.get(uri)\n const parentBlocks = state.postBlocks?.get(parent.uri)\n // if child blocks parent, block parent\n if (isPostView(parent) && childBlocks?.parent) {\n parent = this.blockedPost(parent.uri, parent.author.did, state)\n }\n // if child or parent blocks root, block root\n if (isPostView(root) && (childBlocks?.root || parentBlocks?.root)) {\n root = this.blockedPost(root.uri, root.author.did, state)\n }\n }\n let grandparentAuthor: ProfileViewBasic | undefined\n if (\n isPostView(parent) &&\n isPostRecord(parent.record) &&\n parent.record.reply\n ) {\n grandparentAuthor = this.profileBasic(\n // @ts-expect-error isValidPostRecord(parent.record) should be used but the \"parent\" is not IPDL decoded\n creatorFromUri(parent.record.reply.parent.uri),\n state,\n )\n }\n return {\n root,\n parent,\n grandparentAuthor,\n }\n }\n\n maybePost(uri: string, state: HydrationState): $Typed<MaybePostView> {\n const post = this.post(uri, state)\n if (!post) {\n return this.notFoundPost(uri)\n }\n if (this.viewerBlockExists(post.author.did, state)) {\n return this.blockedPost(uri, post.author.did, state)\n }\n return {\n ...post,\n $type: 'app.bsky.feed.defs#postView',\n }\n }\n\n blockedPost(\n uri: string,\n authorDid: string,\n state: HydrationState,\n ): $Typed<BlockedPost> {\n return {\n $type: 'app.bsky.feed.defs#blockedPost',\n uri,\n blocked: true,\n author: {\n did: authorDid,\n viewer: this.blockedProfileViewer(authorDid, state),\n },\n }\n }\n\n notFoundPost(uri: string): $Typed<NotFoundPost> {\n return {\n $type: 'app.bsky.feed.defs#notFoundPost',\n uri,\n notFound: true,\n }\n }\n\n reasonRepost(\n uri: string,\n repost: Repost,\n state: HydrationState,\n ): $Typed<ReasonRepost> | undefined {\n const creatorDid = creatorFromUri(uri)\n const creator = this.profileBasic(creatorDid, state)\n if (!creator) return\n return {\n $type: 'app.bsky.feed.defs#reasonRepost',\n by: creator,\n uri,\n cid: repost.cid,\n indexedAt: this.indexedAt(repost).toISOString(),\n }\n }\n\n reasonPin(): $Typed<ReasonPin> {\n return {\n $type: 'app.bsky.feed.defs#reasonPin',\n }\n }\n\n // Bookmarks\n // ------------\n bookmark(\n key: string,\n state: HydrationState,\n ): Un$Typed<BookmarkView> | undefined {\n const viewer = state.ctx?.viewer\n if (!viewer) return\n\n const bookmark = state.bookmarks?.get(viewer)?.get(key)\n if (!bookmark) return\n\n const atUri = new AtUri(bookmark.subjectUri)\n if (atUri.collection !== ids.AppBskyFeedPost) return\n\n const item = this.maybePost(bookmark.subjectUri, state)\n return {\n createdAt: bookmark.indexedAt?.toDate().toISOString(),\n subject: {\n uri: bookmark.subjectUri,\n cid: bookmark.subjectCid,\n },\n item,\n }\n }\n\n // Threads\n // ------------\n\n thread(\n skele: { anchor: string; uris: string[] },\n state: HydrationState,\n opts: { height: number; depth: number },\n ): $Typed<ThreadViewPost> | $Typed<NotFoundPost> | $Typed<BlockedPost> {\n const { anchor, uris } = skele\n const post = this.post(anchor, state)\n const postInfo = state.posts?.get(anchor)\n if (!postInfo || !post) return this.notFoundPost(anchor)\n if (this.viewerBlockExists(post.author.did, state)) {\n return this.blockedPost(anchor, post.author.did, state)\n }\n const includedPosts = new Set<string>([anchor])\n const childrenByParentUri: Record<string, string[]> = {}\n uris.forEach((uri) => {\n const post = state.posts?.get(uri)\n const parentUri = post?.record.reply?.parent.uri\n if (!parentUri) return\n if (includedPosts.has(uri)) return\n includedPosts.add(uri)\n childrenByParentUri[parentUri] ??= []\n childrenByParentUri[parentUri].push(uri)\n })\n const rootUri = getRootUri(anchor, postInfo)\n const violatesThreadGate = postInfo.violatesThreadGate\n\n return {\n $type: 'app.bsky.feed.defs#threadViewPost',\n post,\n parent: !violatesThreadGate\n ? this.threadParent(anchor, rootUri, state, opts.height)\n : undefined,\n replies: !violatesThreadGate\n ? this.threadReplies(\n anchor,\n rootUri,\n childrenByParentUri,\n state,\n opts.depth,\n )\n : undefined,\n threadContext: {\n rootAuthorLike: state.threadContexts?.get(post.uri)?.like,\n },\n }\n }\n\n threadParent(\n childUri: string,\n rootUri: string,\n state: HydrationState,\n height: number,\n ):\n | $Typed<ThreadViewPost>\n | $Typed<NotFoundPost>\n | $Typed<BlockedPost>\n | undefined {\n if (height < 1) return undefined\n const parentUri = state.posts?.get(childUri)?.record.reply?.parent.uri\n if (!parentUri) return undefined\n if (\n !state.ctx?.include3pBlocks &&\n state.postBlocks?.get(childUri)?.parent\n ) {\n return this.blockedPost(parentUri, creatorFromUri(parentUri), state)\n }\n const post = this.post(parentUri, state)\n const postInfo = state.posts?.get(parentUri)\n if (!postInfo || !post) return this.notFoundPost(parentUri)\n if (rootUri !== getRootUri(parentUri, postInfo)) return // outside thread boundary\n if (this.viewerBlockExists(post.author.did, state)) {\n return this.blockedPost(parentUri, post.author.did, state)\n }\n return {\n $type: 'app.bsky.feed.defs#threadViewPost',\n post,\n parent: this.threadParent(parentUri, rootUri, state, height - 1),\n threadContext: {\n rootAuthorLike: state.threadContexts?.get(post.uri)?.like,\n },\n }\n }\n\n threadReplies(\n parentUri: string,\n rootUri: string,\n childrenByParentUri: Record<string, string[]>,\n state: HydrationState,\n depth: number,\n ): ($Typed<ThreadViewPost> | $Typed<BlockedPost>)[] | undefined {\n if (depth < 1) return undefined\n const childrenUris = childrenByParentUri[parentUri] ?? []\n return mapDefined(childrenUris, (uri) => {\n const postInfo = state.posts?.get(uri)\n if (postInfo?.violatesThreadGate) {\n return undefined\n }\n if (!state.ctx?.include3pBlocks && state.postBlocks?.get(uri)?.parent) {\n return undefined\n }\n const post = this.post(uri, state)\n if (!postInfo || !post) {\n // in the future we might consider keeping a placeholder for deleted\n // posts that have replies under them, but not supported at the moment.\n // this case is mostly likely hit when a takedown was applied to a post.\n return undefined\n }\n if (rootUri !== getRootUri(uri, postInfo)) return // outside thread boundary\n if (this.viewerBlockExists(post.author.did, state)) {\n return this.blockedPost(uri, post.author.did, state)\n }\n if (!this.viewerSeesNeedsReview({ uri, did: post.author.did }, state)) {\n return undefined\n }\n return {\n $type: 'app.bsky.feed.defs#threadViewPost',\n post,\n replies: this.threadReplies(\n uri,\n rootUri,\n childrenByParentUri,\n state,\n depth - 1,\n ),\n threadContext: {\n rootAuthorLike: state.threadContexts?.get(post.uri)?.like,\n },\n }\n })\n }\n\n // Threads V2\n // ------------\n\n threadV2(\n skeleton: { anchor: string; uris: string[] },\n state: HydrationState,\n {\n above,\n below,\n branchingFactor,\n sort,\n }: {\n above: number\n below: number\n branchingFactor: number\n sort: GetPostThreadV2QueryParams['sort']\n },\n ): { hasOtherReplies: boolean; thread: ThreadItem[] } {\n const { anchor: anchorUri, uris } = skeleton\n\n // Not found.\n const postView = this.post(anchorUri, state)\n const post = state.posts?.get(anchorUri)\n if (!post || !postView) {\n return {\n hasOtherReplies: false,\n thread: [\n this.threadV2ItemNotFound({\n uri: anchorUri,\n depth: 0,\n }),\n ],\n }\n }\n\n // Blocked (only 1p for anchor).\n if (this.viewerBlockExists(postView.author.did, state)) {\n return {\n hasOtherReplies: false,\n thread: [\n this.threadV2ItemBlocked({\n uri: anchorUri,\n depth: 0,\n authorDid: postView.author.did,\n state,\n }),\n ],\n }\n }\n\n const childrenByParentUri = this.groupThreadChildrenByParent(\n anchorUri,\n uris,\n state,\n )\n const rootUri = getRootUri(anchorUri, post)\n const opDid = uriToDid(rootUri)\n const authorDid = postView.author.did\n const isOPPost = authorDid === opDid\n const anchorViolatesThreadGate = post.violatesThreadGate\n\n // Builds the parent tree, and whether it is a contiguous OP thread.\n const parentTree = !anchorViolatesThreadGate\n ? this.threadV2Parent(\n {\n childUri: anchorUri,\n opDid,\n rootUri,\n\n above,\n depth: -1,\n },\n state,\n )\n : undefined\n\n const { tree: parent, isOPThread: isOPThreadFromRootToParent } =\n parentTree ?? { tree: undefined, isOPThread: false }\n\n const isOPThread = parent\n ? isOPThreadFromRootToParent && isOPPost\n : isOPPost\n\n const anchorDepth = 0 // The depth of the anchor post is always 0.\n let anchorTree: ThreadTree\n let hasOtherReplies = false\n\n if (this.noUnauthenticatedPost(state, postView)) {\n anchorTree = {\n type: 'noUnauthenticated',\n item: this.threadV2ItemNoUnauthenticated({\n uri: anchorUri,\n depth: anchorDepth,\n }),\n parent,\n }\n } else {\n const { replies, hasOtherReplies: hasOtherRepliesShadow } =\n !anchorViolatesThreadGate\n ? this.threadV2Replies(\n {\n parentUri: anchorUri,\n isOPThread,\n opDid,\n rootUri,\n childrenByParentUri,\n below,\n depth: 1,\n branchingFactor,\n },\n state,\n )\n : { replies: undefined, hasOtherReplies: false }\n hasOtherReplies = hasOtherRepliesShadow\n\n anchorTree = {\n type: 'post',\n item: this.threadV2ItemPost({\n depth: anchorDepth,\n isOPThread,\n postView,\n repliesAllowance: Infinity, // While we don't have pagination.\n uri: anchorUri,\n }),\n tags: post.tags,\n hasOPLike: !!state.threadContexts?.get(postView.uri)?.like,\n parent,\n replies,\n }\n }\n\n const thread = sortTrimFlattenThreadTree(\n anchorTree,\n {\n opDid,\n branchingFactor,\n sort,\n viewer: state.ctx?.viewer ?? null,\n threadTagsBumpDown: this.threadTagsBumpDown,\n threadTagsHide: this.threadTagsHide,\n visibilityTagRankPrefix: this.visibilityTagRankPrefix,\n },\n state.ctx?.featureGates.get(\n FeatureGateID.ThreadsV2ReplyRankingExploration,\n ),\n )\n\n return {\n hasOtherReplies,\n thread,\n }\n }\n\n private threadV2Parent(\n {\n childUri,\n opDid,\n rootUri,\n above,\n depth,\n }: {\n childUri: string\n opDid: string\n rootUri: string\n above: number\n depth: number\n },\n state: HydrationState,\n ): { tree: ThreadTreeVisible; isOPThread: boolean } | undefined {\n // Reached the `above` limit.\n if (Math.abs(depth) > above) {\n return undefined\n }\n\n // Not found.\n const uri = state.posts?.get(childUri)?.record.reply?.parent.uri\n if (!uri) {\n return undefined\n }\n const postView = this.post(uri, state)\n const post = state.posts?.get(uri)\n if (!post || !postView) {\n return {\n tree: {\n type: 'notFound',\n item: this.threadV2ItemNotFound({ uri, depth }),\n },\n isOPThread: false,\n }\n }\n if (rootUri !== getRootUri(uri, post)) {\n // Outside thread boundary.\n return undefined\n }\n\n // Blocked (1p and 3p for parent).\n const authorDid = postView.author.did\n const has1pBlock = this.viewerBlockExists(authorDid, state)\n const has3pBlock =\n !state.ctx?.include3pBlocks && state.postBlocks?.get(childUri)?.parent\n if (has1pBlock || has3pBlock) {\n return {\n tree: {\n type: 'blocked',\n item: this.threadV2ItemBlocked({\n uri,\n depth,\n authorDid,\n state,\n }),\n },\n isOPThread: false,\n }\n }\n\n // Recurse up.\n const parentTree = this.threadV2Parent(\n {\n childUri: uri,\n opDid,\n rootUri,\n above,\n depth: depth - 1,\n },\n state,\n )\n const { tree: parent, isOPThread: isOPThreadFromRootToParent } =\n parentTree ?? { tree: undefined, isOPThread: false }\n\n const isOPPost = authorDid === opDid\n const isOPThread = parent\n ? isOPThreadFromRootToParent && isOPPost\n : isOPPost\n\n if (this.noUnauthenticatedPost(state, postView)) {\n return {\n tree: {\n type: 'noUnauthenticated',\n item: this.threadV2ItemNoUnauthenticated({\n uri,\n depth,\n }),\n parent,\n },\n isOPThread,\n }\n }\n\n const parentUri = post.record.reply?.parent.uri\n const hasMoreParents = !!parentUri && !parent\n\n return {\n tree: {\n type: 'post',\n item: this.threadV2ItemPost({\n depth,\n isOPThread,\n moreParents: hasMoreParents,\n postView,\n uri,\n }),\n tags: post.tags,\n hasOPLike: !!state.threadContexts?.get(postView.uri)?.like,\n parent,\n replies: undefined,\n },\n isOPThread,\n }\n }\n\n private threadV2Replies(\n {\n parentUri,\n isOPThread: isOPThreadFromRootToParent,\n opDid,\n rootUri,\n childrenByParentUri,\n below,\n depth,\n branchingFactor,\n }: {\n parentUri: string\n isOPThread: boolean\n opDid: string\n rootUri: string\n childrenByParentUri: Record<string, string[]>\n below: number\n depth: number\n branchingFactor: number\n },\n state: HydrationState,\n ): { replies: ThreadTreeVisible[] | undefined; hasOtherReplies: boolean } {\n // Reached the `below` limit.\n if (depth > below) {\n return { replies: undefined, hasOtherReplies: false }\n }\n\n const childrenUris = childrenByParentUri[parentUri] ?? []\n let hasOtherReplies = false\n const replies = mapDefined(childrenUris, (uri) => {\n const replyInclusion = this.checkThreadV2ReplyInclusion({\n uri,\n rootUri,\n state,\n })\n if (!replyInclusion) {\n return undefined\n }\n const { authorDid, post, postView } = replyInclusion\n\n // Hidden.\n const { isOther } = this.isOtherThreadPost(\n { post, postView, rootUri, uri },\n state,\n )\n if (isOther) {\n // Only care about anchor replies\n if (depth === 1) {\n hasOtherReplies = true\n }\n return undefined\n }\n\n // Recurse down.\n const isOPThread = isOPThreadFromRootToParent && authorDid === opDid\n const { replies: nestedReplies } = this.threadV2Replies(\n {\n parentUri: uri,\n isOPThread,\n opDid,\n rootUri,\n childrenByParentUri,\n below,\n depth: depth + 1,\n branchingFactor,\n },\n state,\n )\n\n const reachedDepth = depth === below\n const repliesAllowance = reachedDepth ? 0 : branchingFactor\n\n const tree: ThreadTree = {\n type: 'post',\n item: this.threadV2ItemPost({\n depth,\n isOPThread,\n postView,\n repliesAllowance,\n uri,\n }),\n tags: post.tags,\n hasOPLike: !!state.threadContexts?.get(postView.uri)?.like,\n parent: undefined,\n replies: nestedReplies,\n }\n\n return tree\n })\n\n return {\n replies,\n hasOtherReplies,\n }\n }\n\n private threadV2ItemPost({\n depth,\n isOPThread,\n moreParents,\n postView,\n repliesAllowance,\n uri,\n }: {\n depth: number\n isOPThread: boolean\n moreParents?: boolean\n postView: PostView\n repliesAllowance?: number\n uri: string\n }): ThreadItemValuePost {\n const moreReplies =\n repliesAllowance === undefined\n ? 0\n : Math.max((postView.replyCount ?? 0) - repliesAllowance, 0)\n\n return {\n uri,\n depth,\n value: {\n $type: 'app.bsky.unspecced.defs#threadItemPost',\n post: postView,\n moreParents: moreParents ?? false,\n moreReplies,\n opThread: isOPThread,\n hiddenByThreadgate: false, // Hidden posts are handled by threadOtherV2\n mutedByViewer: false, // Hidden posts are handled by threadOtherV2\n },\n }\n }\n\n private threadV2ItemNoUnauthenticated({\n uri,\n depth,\n }: {\n uri: string\n depth: number\n }): ThreadItemValueNoUnauthenticated {\n return {\n uri,\n depth,\n value: {\n $type: 'app.bsky.unspecced.defs#threadItemNoUnauthenticated',\n },\n }\n }\n\n private threadV2ItemNotFound({\n uri,\n depth,\n }: {\n uri: string\n depth: number\n }): ThreadItemValueNotFound {\n return {\n uri,\n depth,\n value: {\n $type: 'app.bsky.unspecced.defs#threadItemNotFound',\n },\n }\n }\n\n private threadV2ItemBlocked({\n uri,\n depth,\n authorDid,\n state,\n }: {\n uri: string\n depth: number\n authorDid: string\n state: HydrationState\n }): ThreadItemValueBlocked {\n return {\n uri,\n depth,\n value: {\n $type: 'app.bsky.unspecced.defs#threadItemBlocked',\n author: {\n did: authorDid,\n viewer: this.blockedProfileViewer(authorDid, state),\n },\n },\n }\n }\n\n threadOtherV2(\n skeleton: { anchor: string; uris: string[] },\n state: HydrationState,\n {\n below,\n branchingFactor,\n }: {\n below: number\n branchingFactor: number\n },\n ): ThreadOtherItem[] {\n const { anchor: anchorUri, uris } = skeleton\n\n // Not found.\n const postView = this.post(anchorUri, state)\n const post = state.posts?.get(anchorUri)\n if (!post || !postView) {\n return []\n }\n\n // Blocked (only 1p for anchor).\n if (this.viewerBlockExists(postView.author.did, state)) {\n return []\n }\n\n const childrenByParentUri = this.groupThreadChildrenByParent(\n anchorUri,\n uris,\n state,\n )\n const rootUri = getRootUri(anchorUri, post)\n const opDid = uriToDid(rootUri)\n\n const anchorTree: ThreadOtherAnchorPostNode = {\n type: 'hiddenAnchor',\n item: this.threadOtherV2ItemPostAnchor({ depth: 0, uri: anchorUri }),\n replies: this.threadOtherV2Replies(\n {\n parentUri: anchorUri,\n rootUri,\n childrenByParentUri,\n below,\n depth: 1,\n },\n state,\n ),\n }\n\n return sortTrimFlattenThreadTree(\n anchorTree,\n {\n opDid,\n branchingFactor,\n viewer: state.ctx?.viewer ?? null,\n threadTagsBumpDown: this.threadTagsBumpDown,\n threadTagsHide: this.threadTagsHide,\n visibilityTagRankPrefix: this.visibilityTagRankPrefix,\n },\n state.ctx?.featureGates.get(\n FeatureGateID.ThreadsV2ReplyRankingExploration,\n ),\n )\n }\n\n private threadOtherV2Replies(\n {\n parentUri,\n rootUri,\n childrenByParentUri,\n below,\n depth,\n }: {\n parentUri: string\n rootUri: string\n childrenByParentUri: Record<string, string[]>\n below: number\n depth: number\n },\n state: HydrationState,\n ): ThreadOtherPostNode[] | undefined {\n // Reached the `below` limit.\n if (depth > below) {\n return undefined\n }\n\n const childrenUris = childrenByParentUri[parentUri] ?? []\n return mapDefined(childrenUris, (uri) => {\n const replyInclusion = this.checkThreadV2ReplyInclusion({\n uri,\n rootUri,\n state,\n })\n if (!replyInclusion) {\n return undefined\n }\n const { post, postView } = replyInclusion\n\n // Other posts to pull out\n const { isOther, hiddenByThreadgate, mutedByViewer } =\n this.isOtherThreadPost({ post, postView, rootUri, uri }, state)\n if (isOther) {\n // Only show hidden anchor replies, not all hidden.\n if (depth > 1) {\n return undefined\n }\n } else if (depth === 1) {\n // Don't include non-hidden anchor replies.\n return undefined\n }\n\n // Recurse down.\n const replies = this.threadOtherV2Replies(\n {\n parentUri: uri,\n rootUri,\n childrenByParentUri,\n below,\n depth: depth + 1,\n },\n state,\n )\n\n const item = this.threadOtherV2ItemPost({\n depth,\n hiddenByThreadgate,\n mutedByViewer,\n postView,\n uri,\n })\n\n const tree: ThreadOtherPostNode = {\n type: 'hiddenPost',\n item: item,\n tags: post.tags,\n replies,\n }\n\n return tree\n })\n }\n\n private threadOtherV2ItemPostAnchor({\n depth,\n uri,\n }: {\n depth: number\n uri: string\n }): ThreadOtherAnchorPostNode['item'] {\n return {\n uri,\n depth,\n // In hidden replies, the anchor value is undefined, so it doesn't include the anchor in the result.\n // This is helpful so we can use the same internal structure for hidden and non-hidden, while omitting anchor for hidden.\n value: undefined,\n }\n }\n\n private threadOtherV2ItemPost({\n depth,\n hiddenByThreadgate,\n mutedByViewer,\n postView,\n uri,\n }: {\n depth: number\n hiddenByThreadgate: boolean\n mutedByViewer: boolean\n postView: PostView\n uri: string\n }): ThreadOtherItemValuePost {\n const base = this.threadOtherV2ItemPostAnchor({ depth, uri })\n return {\n ...base,\n value: {\n $type: 'app.bsky.unspecced.defs#threadItemPost',\n post: postView,\n hiddenByThreadgate,\n mutedByViewer,\n moreParents: false, // \"Other\" replies don't have parents.\n moreReplies: 0, // \"Other\" replies don't have replies hydrated.\n opThread: false, // \"Other\" replies don't contain OP threads.\n },\n }\n }\n\n private checkThreadV2ReplyInclusion({\n uri,\n rootUri,\n state,\n }: {\n uri: string\n rootUri: string\n state: HydrationState\n }): {\n authorDid: string\n post: Post\n postView: PostView\n } | null {\n // Not found.\n const post = state.posts?.get(uri)\n if (post?.violatesThreadGate) {\n return null\n }\n const postView = this.post(uri, state)\n if (!post || !postView) {\n return null\n }\n const authorDid = postView.author.did\n if (rootUri !== getRootUri(uri, post)) {\n // outside thread boundary\n return null\n }\n\n // Blocked (1p and 3p for replies).\n const has1pBlock = this.viewerBlockExists(authorDid, state)\n const has3pBlock =\n !state.ctx?.include3pBlocks && state.postBlocks?.get(uri)?.parent\n if (has1pBlock || has3pBlock) {\n return null\n }\n if (!this.viewerSeesNeedsReview({ uri, did: authorDid }, state)) {\n return null\n }\n\n // No unauthenticated.\n if (this.noUnauthenticatedPost(state, postView)) {\n return null\n }\n\n return { authorDid, post, postView }\n }\n\n private isOtherThreadPost(\n {\n post,\n postView,\n rootUri,\n uri,\n }: {\n post: Post\n postView: PostView\n rootUri: string\n uri: string\n },\n state: HydrationState,\n ): {\n isOther: boolean\n hiddenByTag: boolean\n hiddenByThreadgate: boolean\n mutedByViewer: boolean\n } {\n const opDid = creatorFromUri(rootUri)\n const authorDid = creatorFromUri(uri)\n\n let hiddenByTag = false\n if (\n state.ctx?.featureGates.get(\n FeatureGateID.ThreadsV2ReplyRankingExploration,\n )\n ) {\n hiddenByTag = authorDid !== opDid && post.tags.has(this.visibilityTagHide)\n } else {\n const showBecauseFollowing = !!postView.author.viewer?.following\n hiddenByTag =\n authorDid !== opDid &&\n authorDid !== state.ctx?.viewer &&\n !showBecauseFollowing &&\n this.threadTagsHide.some((t) => post.tags.has(t))\n }\n\n const hiddenByThreadgate =\n state.ctx?.viewer !== authorDid &&\n this.replyIsHiddenByThreadgate(uri, rootUri, state)\n\n const mutedByViewer = this.viewerMuteExists(authorDid, state)\n const isPushPin =\n isPostRecord(post.record) && post.record.text.trim() === '📌'\n\n return {\n isOther: hiddenByTag || hiddenByThreadgate || mutedByViewer || isPushPin,\n hiddenByTag,\n hiddenByThreadgate,\n mutedByViewer,\n }\n }\n\n private groupThreadChildrenByParent(\n anchorUri: string,\n uris: string[],\n state: HydrationState,\n ): Record<string, string[]> {\n // Groups children of each parent.\n const includedPosts = new Set<string>([anchorUri])\n const childrenByParentUri: Record<string, string[]> = {}\n uris.forEach((uri) => {\n const post = state.posts?.get(uri)\n const parentUri = post?.record.reply?.parent.uri\n if (!parentUri) return\n if (includedPosts.has(uri)) return\n includedPosts.add(uri)\n childrenByParentUri[parentUri] ??= []\n childrenByParentUri[parentUri].push(uri)\n })\n return childrenByParentUri\n }\n\n // Embeds\n // ------------\n\n embed(\n postUri: string,\n embed: Embed | { $type: string },\n state: HydrationState,\n depth: number,\n ): $Typed<EmbedView> | undefined {\n if (isImagesEmbed(embed)) {\n return this.imagesEmbed(creatorFromUri(postUri), embed)\n } else if (isVideoEmbed(embed)) {\n return this.videoEmbed(creatorFromUri(postUri), embed)\n } else if (isExternalEmbed(embed)) {\n return this.externalEmbed(creatorFromUri(postUri), embed)\n } else if (isRecordEmbed(embed)) {\n return this.recordEmbed(postUri, embed, state, depth)\n } else if (isRecordWithMedia(embed)) {\n return this.recordWithMediaEmbed(postUri, embed, state, depth)\n } else {\n return undefined\n }\n }\n\n imagesEmbed(did: string, embed: ImagesEmbed): $Typed<ImagesEmbedView> {\n const imgViews = embed.images.map((img) => ({\n thumb: this.imgUriBuilder.getPresetUri(\n 'feed_thumbnail',\n did,\n cidFromBlobJson(img.image),\n ),\n fullsize: this.imgUriBuilder.getPresetUri(\n 'feed_fullsize',\n did,\n cidFromBlobJson(img.image),\n ),\n alt: img.alt,\n aspectRatio: img.aspectRatio,\n }))\n return {\n $type: 'app.bsky.embed.images#view',\n images: imgViews,\n }\n }\n\n videoEmbed(did: string, embed: VideoEmbed): $Typed<VideoEmbedView> {\n const cid = cidFromBlobJson(embed.video)\n return {\n $type: 'app.bsky.embed.video#view',\n cid,\n playlist: this.videoUriBuilder.playlist({ did, cid }),\n thumbnail: this.videoUriBuilder.thumbnail({ did, cid }),\n alt: embed.alt,\n aspectRatio: embed.aspectRatio,\n }\n }\n\n externalEmbed(did: string, embed: ExternalEmbed): $Typed<ExternalEmbedView> {\n const { uri, title, description, thumb } = embed.external\n return {\n $type: 'app.bsky.embed.external#view',\n external: {\n uri,\n title,\n description,\n thumb: thumb\n ? this.imgUriBuilder.getPresetUri(\n 'feed_thumbnail',\n did,\n cidFromBlobJson(thumb),\n )\n : undefined,\n },\n }\n }\n\n embedNotFound(uri: string): {\n $type: 'app.bsky.embed.record#view'\n record: $Typed<EmbedNotFound>\n } {\n return {\n $type: 'app.bsky.embed.record#view',\n record: {\n $type: 'app.bsky.embed.record#viewNotFound',\n uri,\n notFound: true,\n },\n }\n }\n\n embedDetached(uri: string): {\n $type: 'app.bsky.embed.record#view'\n record: $Typed<EmbedDetached>\n } {\n return {\n $type: 'app.bsky.embed.record#view',\n record: {\n $type: 'app.bsky.embed.record#viewDetached',\n uri,\n detached: true,\n },\n }\n }\n\n embedBlocked(\n uri: string,\n state: HydrationState,\n ): {\n $type: 'app.bsky.embed.record#view'\n record: $Typed<EmbedBlocked>\n } {\n const creator = creatorFromUri(uri)\n return {\n $type: 'app.bsky.embed.record#view',\n record: {\n $type: 'app.bsky.embed.record#viewBlocked',\n uri,\n blocked: true,\n author: {\n did: creator,\n viewer: this.blockedProfileViewer(creator, state),\n },\n },\n }\n }\n\n embedPostView(\n uri: string,\n state: HydrationState,\n depth: number,\n ): $Typed<PostEmbedView> | undefined {\n const postView = this.post(uri, state, depth)\n if (!postView) return\n return {\n $type: 'app.bsky.embed.record#viewRecord',\n uri: postView.uri,\n cid: postView.cid,\n author: postView.author,\n value: postView.record,\n labels: postView.labels,\n likeCount: postView.likeCount,\n replyCount: postView.replyCount,\n repostCount: postView.repostCount,\n quoteCount: postView.quoteCount,\n indexedAt: postView.indexedAt,\n embeds: depth > 1 ? undefined : postView.embed ? [postView.embed] : [],\n }\n }\n\n recordEmbed(\n postUri: string,\n embed: RecordEmbed,\n state: HydrationState,\n depth: number,\n withTypeTag: false,\n ): RecordEmbedView\n recordEmbed(\n postUri: string,\n embed: RecordEmbed,\n state: HydrationState,\n depth: number,\n withTypeTag?: true,\n ): $Typed<RecordEmbedView>\n recordEmbed(\n postUri: string,\n embed: RecordEmbed,\n state: HydrationState,\n depth: number,\n withTypeTag = true,\n ): RecordEmbedView {\n const uri = embed.record.uri\n const parsedUri = new AtUri(uri)\n if (\n this.viewerBlockExists(parsedUri.hostname, state) ||\n (!state.ctx?.include3pBlocks && state.postBlocks?.get(postUri)?.embed)\n ) {\n return this.embedBlocked(uri, state)\n }\n\n const post = state.posts?.get(postUri)\n if (post?.violatesEmbeddingRules) {\n return this.embedDetached(uri)\n }\n\n if (parsedUri.collection === ids.AppBskyFeedPost) {\n const view = this.embedPostView(uri, state, depth)\n if (!view) return this.embedNotFound(uri)\n const postgateRecordUri = postUriToPostgateUri(parsedUri.toString())\n const postgate = state.postgates?.get(postgateRecordUri)\n if (postgate?.record?.detachedEmbeddingUris?.includes(postUri)) {\n return this.embedDetached(uri)\n }\n return this.recordEmbedWrapper(view, withTypeTag)\n } else if (parsedUri.collection === ids.AppBskyFeedGenerator) {\n const view = this.feedGenerator(uri, state)\n if (!view) return this.embedNotFound(uri)\n return this.recordEmbedWrapper(\n { ...view, $type: 'app.bsky.feed.defs#generatorView' },\n withTypeTag,\n )\n } else if (parsedUri.collection === ids.AppBskyGraphList) {\n const view = this.list(uri, state)\n if (!view) return this.embedNotFound(uri)\n return this.recordEmbedWrapper(\n { ...view, $type: 'app.bsky.graph.defs#listView' },\n withTypeTag,\n )\n } else if (parsedUri.collection === ids.AppBskyLabelerService) {\n const view = this.labeler(parsedUri.hostname, state)\n if (!view) return this.embedNotFound(uri)\n return this.recordEmbedWrapper(\n { ...view, $type: 'app.bsky.labeler.defs#labelerView' },\n withTypeTag,\n )\n } else if (parsedUri.collection === ids.AppBskyGraphStarterpack) {\n const view = this.starterPackBasic(uri, state)\n if (!view) return this.embedNotFound(uri)\n return this.recordEmbedWrapper(\n { ...view, $type: 'app.bsky.graph.defs#starterPackViewBasic' },\n withTypeTag,\n )\n }\n return this.embedNotFound(uri)\n }\n\n private recordEmbedWrapper<T extends $Typed<RecordEmbedViewInternal>>(\n record: T,\n withTypeTag: boolean,\n ) {\n return {\n $type: withTypeTag ? ('app.bsky.embed.record#view' as const) : undefined,\n record,\n } satisfies RecordEmbedView\n }\n\n recordWithMediaEmbed(\n postUri: string,\n embed: RecordWithMedia,\n state: HydrationState,\n depth: number,\n ): $Typed<RecordWithMediaView> | undefined {\n const creator = creatorFromUri(postUri)\n let mediaEmbed:\n | $Typed<ImagesEmbedView>\n | $Typed<VideoEmbedView>\n | $Typed<ExternalEmbedView>\n if (isImagesEmbed(embed.media)) {\n mediaEmbed = this.imagesEmbed(creator, embed.media)\n } else if (isVideoEmbed(embed.media)) {\n mediaEmbed = this.videoEmbed(creator, embed.media)\n } else if (isExternalEmbed(embed.media)) {\n mediaEmbed = this.externalEmbed(creator, embed.media)\n } else {\n return\n }\n return {\n $type: 'app.bsky.embed.recordWithMedia#view',\n media: mediaEmbed,\n record: this.recordEmbed(postUri, embed.record, state, depth, false),\n }\n }\n\n userReplyDisabled(uri: string, state: HydrationState): boolean | undefined {\n const post = state.posts?.get(uri)\n if (post?.violatesThreadGate) {\n return true\n }\n const rootUriStr: string = post?.record.reply?.root.uri ?? uri\n const gate = state.threadgates?.get(\n postUriToThreadgateUri(rootUriStr),\n )?.record\n const viewer = state.ctx?.viewer\n if (!gate || !viewer) {\n return undefined\n }\n const rootPost = state.posts?.get(rootUriStr)?.record\n const ownerDid = creatorFromUri(rootUriStr)\n const {\n canReply,\n allowFollower,\n allowFollowing,\n allowListUris = [],\n } = parseThreadGate(viewer, ownerDid, rootPost ?? null, gate)\n if (canReply) {\n return false\n }\n if (allowFollower && state.profileViewers?.get(ownerDid)?.following) {\n return false\n }\n if (allowFollowing && state.profileViewers?.get(ownerDid)?.followedBy) {\n return false\n }\n for (const listUri of allowListUris) {\n const list = state.listViewers?.get(listUri)\n if (list?.viewerInList) {\n return false\n }\n }\n return true\n }\n\n userPostEmbeddingDisabled(\n uri: string,\n state: HydrationState,\n ): boolean | undefined {\n const post = state.posts?.get(uri)\n if (!post) {\n return true\n }\n const postgateRecordUri = postUriToPostgateUri(uri)\n const gate = state.postgates?.get(postgateRecordUri)?.record\n const viewerDid = state.ctx?.viewer ?? undefined\n const {\n embeddingRules: { canEmbed },\n } = parsePostgate({\n gate,\n viewerDid,\n authorDid: creatorFromUri(uri),\n })\n if (canEmbed) {\n return false\n }\n return true\n }\n\n viewerPinned(uri: string, state: HydrationState, authorDid: string) {\n if (!state.ctx?.viewer || state.ctx.viewer !== authorDid) return\n const actor = state.actors?.get(authorDid)\n if (!actor) return\n const pinnedPost = safePinnedPost(actor.profile?.pinnedPost)\n if (!pinnedPost) return undefined\n return pinnedPost.uri === uri\n }\n\n notification(\n notif: Notification,\n lastSeenAt: string | undefined,\n state: HydrationState,\n ): Un$Typed<NotificationView> | undefined {\n if (!notif.timestamp || !notif.reason) return\n const uri = new AtUri(notif.uri)\n const authorDid = uri.hostname\n const author = this.profile(authorDid, state)\n if (!author) return\n\n let recordInfo:\n | Post\n | Like\n | Repost\n | Follow\n | RecordInfo<ProfileRecord>\n | Verification\n | Pick<RecordInfo<Required<NotificationRecordDeleted>>, 'cid' | 'record'>\n | undefined\n | null\n\n if (uri.collection === ids.AppBskyFeedPost) {\n recordInfo = state.posts?.get(notif.uri)\n } else if (uri.collection === ids.AppBskyFeedLike) {\n recordInfo = state.likes?.get(notif.uri)\n } else if (uri.collection === ids.AppBskyFeedRepost) {\n recordInfo = state.reposts?.get(notif.uri)\n } else if (uri.collection === ids.AppBskyGraphFollow) {\n recordInfo = state.follows?.get(notif.uri)\n } else if (uri.collection === ids.AppBskyGraphVerification) {\n // When a verification record is removed, the record won't be found,\n // both for the `verified` and `unverified` notifications.\n recordInfo = state.verifications?.get(notif.uri) ?? {\n record: notificationDeletedRecord,\n cid: notificationDeletedRecordCid,\n }\n } else if (uri.collection === ids.AppBskyActorProfile) {\n const actor = state.actors?.get(authorDid)\n recordInfo =\n actor && actor.profile && actor.profileCid\n ? {\n record: actor.profile,\n cid: actor.profileCid,\n sortedAt: actor.sortedAt ?? new Date(0), // @NOTE will be present since profile record is present\n indexedAt: actor.indexedAt ?? new Date(0), // @NOTE will be present since profile record is present\n takedownRef: actor.profileTakedownRef,\n }\n : undefined\n }\n if (!recordInfo) return\n\n const labels = state.labels?.getBySubject(notif.uri) ?? []\n const selfLabels = this.selfLabels({\n uri: notif.uri,\n cid: recordInfo.cid,\n record: recordInfo.record,\n })\n const indexedAt = notif.timestamp.toDate().toISOString()\n return {\n uri: notif.uri,\n cid: recordInfo.cid,\n author,\n reason: notif.reason,\n reasonSubject: notif.reasonSubject || undefined,\n record: recordInfo.record,\n // @NOTE works with a hack in listNotifications so that when there's no last-seen time,\n // the user's first notification is marked unread, and all previous read. in this case,\n // the last seen time will be equal to the first notification's indexed time.\n isRead: lastSeenAt ? lastSeenAt > indexedAt : true,\n indexedAt: notif.timestamp.toDate().toISOString(),\n labels: [...labels, ...selfLabels],\n }\n }\n\n indexedAt({ sortedAt, indexedAt }: { sortedAt: Date; indexedAt: Date }) {\n if (!this.indexedAtEpoch) return sortedAt\n return indexedAt && indexedAt > this.indexedAtEpoch ? indexedAt : sortedAt\n }\n}\n\nconst getRootUri = (uri: string, post: Post): string => {\n return post.record.reply?.root.uri ?? uri\n}\n"]}