@atproto/bsky 0.0.253 → 0.0.255

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.
Files changed (899) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/dist/api/age-assurance/index.d.ts +1 -1
  3. package/dist/api/age-assurance/index.d.ts.map +1 -1
  4. package/dist/api/age-assurance/index.js.map +1 -1
  5. package/dist/api/age-assurance/redirects/kws-age-verified.d.ts +2 -2
  6. package/dist/api/age-assurance/redirects/kws-age-verified.d.ts.map +1 -1
  7. package/dist/api/age-assurance/redirects/kws-age-verified.js.map +1 -1
  8. package/dist/api/age-assurance/stash.d.ts +2 -2
  9. package/dist/api/age-assurance/stash.d.ts.map +1 -1
  10. package/dist/api/age-assurance/stash.js.map +1 -1
  11. package/dist/api/age-assurance/types.d.ts +3 -3
  12. package/dist/api/age-assurance/types.d.ts.map +1 -1
  13. package/dist/api/age-assurance/types.js.map +1 -1
  14. package/dist/api/age-assurance/util.d.ts +2 -2
  15. package/dist/api/age-assurance/util.d.ts.map +1 -1
  16. package/dist/api/age-assurance/util.js.map +1 -1
  17. package/dist/api/age-assurance/webhooks/kws-age-verified.d.ts +2 -2
  18. package/dist/api/age-assurance/webhooks/kws-age-verified.d.ts.map +1 -1
  19. package/dist/api/age-assurance/webhooks/kws-age-verified.js.map +1 -1
  20. package/dist/api/app/bsky/actor/getProfile.d.ts +2 -2
  21. package/dist/api/app/bsky/actor/getProfile.d.ts.map +1 -1
  22. package/dist/api/app/bsky/actor/getProfile.js.map +1 -1
  23. package/dist/api/app/bsky/actor/getProfiles.d.ts +2 -2
  24. package/dist/api/app/bsky/actor/getProfiles.d.ts.map +1 -1
  25. package/dist/api/app/bsky/actor/getProfiles.js.map +1 -1
  26. package/dist/api/app/bsky/actor/getSuggestions.d.ts +2 -2
  27. package/dist/api/app/bsky/actor/getSuggestions.d.ts.map +1 -1
  28. package/dist/api/app/bsky/actor/getSuggestions.js.map +1 -1
  29. package/dist/api/app/bsky/actor/searchActors.d.ts +2 -2
  30. package/dist/api/app/bsky/actor/searchActors.d.ts.map +1 -1
  31. package/dist/api/app/bsky/actor/searchActors.js.map +1 -1
  32. package/dist/api/app/bsky/actor/searchActorsTypeahead.d.ts +2 -2
  33. package/dist/api/app/bsky/actor/searchActorsTypeahead.d.ts.map +1 -1
  34. package/dist/api/app/bsky/actor/searchActorsTypeahead.js.map +1 -1
  35. package/dist/api/app/bsky/ageassurance/begin.d.ts +2 -2
  36. package/dist/api/app/bsky/ageassurance/begin.d.ts.map +1 -1
  37. package/dist/api/app/bsky/ageassurance/begin.js.map +1 -1
  38. package/dist/api/app/bsky/ageassurance/getConfig.d.ts +2 -2
  39. package/dist/api/app/bsky/ageassurance/getConfig.d.ts.map +1 -1
  40. package/dist/api/app/bsky/ageassurance/getConfig.js.map +1 -1
  41. package/dist/api/app/bsky/ageassurance/getState.d.ts +2 -2
  42. package/dist/api/app/bsky/ageassurance/getState.d.ts.map +1 -1
  43. package/dist/api/app/bsky/ageassurance/getState.js.map +1 -1
  44. package/dist/api/app/bsky/bookmark/createBookmark.d.ts +2 -2
  45. package/dist/api/app/bsky/bookmark/createBookmark.d.ts.map +1 -1
  46. package/dist/api/app/bsky/bookmark/createBookmark.js.map +1 -1
  47. package/dist/api/app/bsky/bookmark/deleteBookmark.d.ts +2 -2
  48. package/dist/api/app/bsky/bookmark/deleteBookmark.d.ts.map +1 -1
  49. package/dist/api/app/bsky/bookmark/deleteBookmark.js.map +1 -1
  50. package/dist/api/app/bsky/bookmark/getBookmarks.d.ts +2 -2
  51. package/dist/api/app/bsky/bookmark/getBookmarks.d.ts.map +1 -1
  52. package/dist/api/app/bsky/bookmark/getBookmarks.js.map +1 -1
  53. package/dist/api/app/bsky/contact/dismissMatch.d.ts +2 -2
  54. package/dist/api/app/bsky/contact/dismissMatch.d.ts.map +1 -1
  55. package/dist/api/app/bsky/contact/dismissMatch.js.map +1 -1
  56. package/dist/api/app/bsky/contact/getMatches.d.ts +2 -2
  57. package/dist/api/app/bsky/contact/getMatches.d.ts.map +1 -1
  58. package/dist/api/app/bsky/contact/getMatches.js.map +1 -1
  59. package/dist/api/app/bsky/contact/getSyncStatus.d.ts +2 -2
  60. package/dist/api/app/bsky/contact/getSyncStatus.d.ts.map +1 -1
  61. package/dist/api/app/bsky/contact/getSyncStatus.js.map +1 -1
  62. package/dist/api/app/bsky/contact/importContacts.d.ts +2 -2
  63. package/dist/api/app/bsky/contact/importContacts.d.ts.map +1 -1
  64. package/dist/api/app/bsky/contact/importContacts.js.map +1 -1
  65. package/dist/api/app/bsky/contact/removeData.d.ts +2 -2
  66. package/dist/api/app/bsky/contact/removeData.d.ts.map +1 -1
  67. package/dist/api/app/bsky/contact/removeData.js.map +1 -1
  68. package/dist/api/app/bsky/contact/sendNotification.d.ts +2 -2
  69. package/dist/api/app/bsky/contact/sendNotification.d.ts.map +1 -1
  70. package/dist/api/app/bsky/contact/sendNotification.js.map +1 -1
  71. package/dist/api/app/bsky/contact/startPhoneVerification.d.ts +2 -2
  72. package/dist/api/app/bsky/contact/startPhoneVerification.d.ts.map +1 -1
  73. package/dist/api/app/bsky/contact/startPhoneVerification.js.map +1 -1
  74. package/dist/api/app/bsky/contact/util.d.ts +2 -2
  75. package/dist/api/app/bsky/contact/util.d.ts.map +1 -1
  76. package/dist/api/app/bsky/contact/util.js.map +1 -1
  77. package/dist/api/app/bsky/contact/verifyPhone.d.ts +2 -2
  78. package/dist/api/app/bsky/contact/verifyPhone.d.ts.map +1 -1
  79. package/dist/api/app/bsky/contact/verifyPhone.js.map +1 -1
  80. package/dist/api/app/bsky/draft/createDraft.d.ts +2 -2
  81. package/dist/api/app/bsky/draft/createDraft.d.ts.map +1 -1
  82. package/dist/api/app/bsky/draft/createDraft.js.map +1 -1
  83. package/dist/api/app/bsky/draft/deleteDraft.d.ts +2 -2
  84. package/dist/api/app/bsky/draft/deleteDraft.d.ts.map +1 -1
  85. package/dist/api/app/bsky/draft/deleteDraft.js.map +1 -1
  86. package/dist/api/app/bsky/draft/getDrafts.d.ts +2 -2
  87. package/dist/api/app/bsky/draft/getDrafts.d.ts.map +1 -1
  88. package/dist/api/app/bsky/draft/getDrafts.js.map +1 -1
  89. package/dist/api/app/bsky/draft/updateDraft.d.ts +2 -2
  90. package/dist/api/app/bsky/draft/updateDraft.d.ts.map +1 -1
  91. package/dist/api/app/bsky/draft/updateDraft.js.map +1 -1
  92. package/dist/api/app/bsky/embed/getEmbedExternalView.d.ts +2 -2
  93. package/dist/api/app/bsky/embed/getEmbedExternalView.d.ts.map +1 -1
  94. package/dist/api/app/bsky/embed/getEmbedExternalView.js.map +1 -1
  95. package/dist/api/app/bsky/feed/getActorFeeds.d.ts +2 -2
  96. package/dist/api/app/bsky/feed/getActorFeeds.d.ts.map +1 -1
  97. package/dist/api/app/bsky/feed/getActorFeeds.js.map +1 -1
  98. package/dist/api/app/bsky/feed/getActorLikes.d.ts +2 -2
  99. package/dist/api/app/bsky/feed/getActorLikes.d.ts.map +1 -1
  100. package/dist/api/app/bsky/feed/getActorLikes.js.map +1 -1
  101. package/dist/api/app/bsky/feed/getAuthorFeed.d.ts +7 -7
  102. package/dist/api/app/bsky/feed/getAuthorFeed.d.ts.map +1 -1
  103. package/dist/api/app/bsky/feed/getAuthorFeed.js.map +1 -1
  104. package/dist/api/app/bsky/feed/getFeed.d.ts +3 -3
  105. package/dist/api/app/bsky/feed/getFeed.d.ts.map +1 -1
  106. package/dist/api/app/bsky/feed/getFeed.js.map +1 -1
  107. package/dist/api/app/bsky/feed/getFeedGenerator.d.ts +2 -2
  108. package/dist/api/app/bsky/feed/getFeedGenerator.d.ts.map +1 -1
  109. package/dist/api/app/bsky/feed/getFeedGenerator.js.map +1 -1
  110. package/dist/api/app/bsky/feed/getFeedGenerators.d.ts +2 -2
  111. package/dist/api/app/bsky/feed/getFeedGenerators.d.ts.map +1 -1
  112. package/dist/api/app/bsky/feed/getFeedGenerators.js.map +1 -1
  113. package/dist/api/app/bsky/feed/getLikes.d.ts +2 -2
  114. package/dist/api/app/bsky/feed/getLikes.d.ts.map +1 -1
  115. package/dist/api/app/bsky/feed/getLikes.js.map +1 -1
  116. package/dist/api/app/bsky/feed/getListFeed.d.ts +6 -6
  117. package/dist/api/app/bsky/feed/getListFeed.d.ts.map +1 -1
  118. package/dist/api/app/bsky/feed/getListFeed.js.map +1 -1
  119. package/dist/api/app/bsky/feed/getPostThread.d.ts +2 -2
  120. package/dist/api/app/bsky/feed/getPostThread.d.ts.map +1 -1
  121. package/dist/api/app/bsky/feed/getPostThread.js.map +1 -1
  122. package/dist/api/app/bsky/feed/getPosts.d.ts +2 -2
  123. package/dist/api/app/bsky/feed/getPosts.d.ts.map +1 -1
  124. package/dist/api/app/bsky/feed/getPosts.js.map +1 -1
  125. package/dist/api/app/bsky/feed/getQuotes.d.ts +2 -2
  126. package/dist/api/app/bsky/feed/getQuotes.d.ts.map +1 -1
  127. package/dist/api/app/bsky/feed/getQuotes.js.map +1 -1
  128. package/dist/api/app/bsky/feed/getRepostedBy.d.ts +2 -2
  129. package/dist/api/app/bsky/feed/getRepostedBy.d.ts.map +1 -1
  130. package/dist/api/app/bsky/feed/getRepostedBy.js.map +1 -1
  131. package/dist/api/app/bsky/feed/getSuggestedFeeds.d.ts +2 -2
  132. package/dist/api/app/bsky/feed/getSuggestedFeeds.d.ts.map +1 -1
  133. package/dist/api/app/bsky/feed/getSuggestedFeeds.js.map +1 -1
  134. package/dist/api/app/bsky/feed/getTimeline.d.ts +6 -6
  135. package/dist/api/app/bsky/feed/getTimeline.d.ts.map +1 -1
  136. package/dist/api/app/bsky/feed/getTimeline.js.map +1 -1
  137. package/dist/api/app/bsky/feed/searchPosts.d.ts +2 -2
  138. package/dist/api/app/bsky/feed/searchPosts.d.ts.map +1 -1
  139. package/dist/api/app/bsky/feed/searchPosts.js +11 -3
  140. package/dist/api/app/bsky/feed/searchPosts.js.map +1 -1
  141. package/dist/api/app/bsky/feed/searchPostsV2.d.ts +2 -2
  142. package/dist/api/app/bsky/feed/searchPostsV2.d.ts.map +1 -1
  143. package/dist/api/app/bsky/feed/searchPostsV2.js +10 -2
  144. package/dist/api/app/bsky/feed/searchPostsV2.js.map +1 -1
  145. package/dist/api/app/bsky/graph/getActorStarterPacks.d.ts +2 -2
  146. package/dist/api/app/bsky/graph/getActorStarterPacks.d.ts.map +1 -1
  147. package/dist/api/app/bsky/graph/getActorStarterPacks.js.map +1 -1
  148. package/dist/api/app/bsky/graph/getBlocks.d.ts +2 -2
  149. package/dist/api/app/bsky/graph/getBlocks.d.ts.map +1 -1
  150. package/dist/api/app/bsky/graph/getBlocks.js.map +1 -1
  151. package/dist/api/app/bsky/graph/getFollowers.d.ts +2 -2
  152. package/dist/api/app/bsky/graph/getFollowers.d.ts.map +1 -1
  153. package/dist/api/app/bsky/graph/getFollowers.js.map +1 -1
  154. package/dist/api/app/bsky/graph/getFollows.d.ts +2 -2
  155. package/dist/api/app/bsky/graph/getFollows.d.ts.map +1 -1
  156. package/dist/api/app/bsky/graph/getFollows.js.map +1 -1
  157. package/dist/api/app/bsky/graph/getKnownFollowers.d.ts +2 -2
  158. package/dist/api/app/bsky/graph/getKnownFollowers.d.ts.map +1 -1
  159. package/dist/api/app/bsky/graph/getKnownFollowers.js.map +1 -1
  160. package/dist/api/app/bsky/graph/getList.d.ts +2 -2
  161. package/dist/api/app/bsky/graph/getList.d.ts.map +1 -1
  162. package/dist/api/app/bsky/graph/getList.js.map +1 -1
  163. package/dist/api/app/bsky/graph/getListBlocks.d.ts +2 -2
  164. package/dist/api/app/bsky/graph/getListBlocks.d.ts.map +1 -1
  165. package/dist/api/app/bsky/graph/getListBlocks.js.map +1 -1
  166. package/dist/api/app/bsky/graph/getListMutes.d.ts +2 -2
  167. package/dist/api/app/bsky/graph/getListMutes.d.ts.map +1 -1
  168. package/dist/api/app/bsky/graph/getListMutes.js.map +1 -1
  169. package/dist/api/app/bsky/graph/getLists.d.ts +2 -2
  170. package/dist/api/app/bsky/graph/getLists.d.ts.map +1 -1
  171. package/dist/api/app/bsky/graph/getLists.js.map +1 -1
  172. package/dist/api/app/bsky/graph/getListsWithMembership.d.ts +2 -2
  173. package/dist/api/app/bsky/graph/getListsWithMembership.d.ts.map +1 -1
  174. package/dist/api/app/bsky/graph/getListsWithMembership.js.map +1 -1
  175. package/dist/api/app/bsky/graph/getMutes.d.ts +2 -2
  176. package/dist/api/app/bsky/graph/getMutes.d.ts.map +1 -1
  177. package/dist/api/app/bsky/graph/getMutes.js.map +1 -1
  178. package/dist/api/app/bsky/graph/getRelationships.d.ts +2 -2
  179. package/dist/api/app/bsky/graph/getRelationships.d.ts.map +1 -1
  180. package/dist/api/app/bsky/graph/getRelationships.js.map +1 -1
  181. package/dist/api/app/bsky/graph/getStarterPack.d.ts +2 -2
  182. package/dist/api/app/bsky/graph/getStarterPack.d.ts.map +1 -1
  183. package/dist/api/app/bsky/graph/getStarterPack.js.map +1 -1
  184. package/dist/api/app/bsky/graph/getStarterPacks.d.ts +2 -2
  185. package/dist/api/app/bsky/graph/getStarterPacks.d.ts.map +1 -1
  186. package/dist/api/app/bsky/graph/getStarterPacks.js.map +1 -1
  187. package/dist/api/app/bsky/graph/getStarterPacksWithMembership.d.ts +2 -2
  188. package/dist/api/app/bsky/graph/getStarterPacksWithMembership.d.ts.map +1 -1
  189. package/dist/api/app/bsky/graph/getStarterPacksWithMembership.js.map +1 -1
  190. package/dist/api/app/bsky/graph/getSuggestedFollowsByActor.d.ts +2 -2
  191. package/dist/api/app/bsky/graph/getSuggestedFollowsByActor.d.ts.map +1 -1
  192. package/dist/api/app/bsky/graph/getSuggestedFollowsByActor.js.map +1 -1
  193. package/dist/api/app/bsky/graph/muteActor.d.ts +2 -2
  194. package/dist/api/app/bsky/graph/muteActor.d.ts.map +1 -1
  195. package/dist/api/app/bsky/graph/muteActor.js.map +1 -1
  196. package/dist/api/app/bsky/graph/muteActorList.d.ts +2 -2
  197. package/dist/api/app/bsky/graph/muteActorList.d.ts.map +1 -1
  198. package/dist/api/app/bsky/graph/muteActorList.js.map +1 -1
  199. package/dist/api/app/bsky/graph/muteThread.d.ts +2 -2
  200. package/dist/api/app/bsky/graph/muteThread.d.ts.map +1 -1
  201. package/dist/api/app/bsky/graph/muteThread.js.map +1 -1
  202. package/dist/api/app/bsky/graph/searchStarterPacks.d.ts +2 -2
  203. package/dist/api/app/bsky/graph/searchStarterPacks.d.ts.map +1 -1
  204. package/dist/api/app/bsky/graph/searchStarterPacks.js.map +1 -1
  205. package/dist/api/app/bsky/graph/unmuteActor.d.ts +2 -2
  206. package/dist/api/app/bsky/graph/unmuteActor.d.ts.map +1 -1
  207. package/dist/api/app/bsky/graph/unmuteActor.js.map +1 -1
  208. package/dist/api/app/bsky/graph/unmuteActorList.d.ts +2 -2
  209. package/dist/api/app/bsky/graph/unmuteActorList.d.ts.map +1 -1
  210. package/dist/api/app/bsky/graph/unmuteActorList.js.map +1 -1
  211. package/dist/api/app/bsky/graph/unmuteThread.d.ts +2 -2
  212. package/dist/api/app/bsky/graph/unmuteThread.d.ts.map +1 -1
  213. package/dist/api/app/bsky/graph/unmuteThread.js.map +1 -1
  214. package/dist/api/app/bsky/labeler/getServices.d.ts +2 -2
  215. package/dist/api/app/bsky/labeler/getServices.d.ts.map +1 -1
  216. package/dist/api/app/bsky/labeler/getServices.js.map +1 -1
  217. package/dist/api/app/bsky/notification/getPreferences.d.ts +2 -2
  218. package/dist/api/app/bsky/notification/getPreferences.d.ts.map +1 -1
  219. package/dist/api/app/bsky/notification/getPreferences.js.map +1 -1
  220. package/dist/api/app/bsky/notification/getUnreadCount.d.ts +2 -2
  221. package/dist/api/app/bsky/notification/getUnreadCount.d.ts.map +1 -1
  222. package/dist/api/app/bsky/notification/getUnreadCount.js.map +1 -1
  223. package/dist/api/app/bsky/notification/listActivitySubscriptions.d.ts +2 -2
  224. package/dist/api/app/bsky/notification/listActivitySubscriptions.d.ts.map +1 -1
  225. package/dist/api/app/bsky/notification/listActivitySubscriptions.js.map +1 -1
  226. package/dist/api/app/bsky/notification/listNotifications.d.ts +2 -2
  227. package/dist/api/app/bsky/notification/listNotifications.d.ts.map +1 -1
  228. package/dist/api/app/bsky/notification/listNotifications.js.map +1 -1
  229. package/dist/api/app/bsky/notification/putActivitySubscription.d.ts +2 -2
  230. package/dist/api/app/bsky/notification/putActivitySubscription.d.ts.map +1 -1
  231. package/dist/api/app/bsky/notification/putActivitySubscription.js.map +1 -1
  232. package/dist/api/app/bsky/notification/putPreferences.d.ts +2 -2
  233. package/dist/api/app/bsky/notification/putPreferences.d.ts.map +1 -1
  234. package/dist/api/app/bsky/notification/putPreferences.js.map +1 -1
  235. package/dist/api/app/bsky/notification/putPreferencesV2.d.ts +2 -2
  236. package/dist/api/app/bsky/notification/putPreferencesV2.d.ts.map +1 -1
  237. package/dist/api/app/bsky/notification/putPreferencesV2.js.map +1 -1
  238. package/dist/api/app/bsky/notification/registerPush.d.ts +2 -2
  239. package/dist/api/app/bsky/notification/registerPush.d.ts.map +1 -1
  240. package/dist/api/app/bsky/notification/registerPush.js.map +1 -1
  241. package/dist/api/app/bsky/notification/unregisterPush.d.ts +2 -2
  242. package/dist/api/app/bsky/notification/unregisterPush.d.ts.map +1 -1
  243. package/dist/api/app/bsky/notification/unregisterPush.js.map +1 -1
  244. package/dist/api/app/bsky/notification/updateSeen.d.ts +2 -2
  245. package/dist/api/app/bsky/notification/updateSeen.d.ts.map +1 -1
  246. package/dist/api/app/bsky/notification/updateSeen.js.map +1 -1
  247. package/dist/api/app/bsky/notification/util.d.ts +2 -2
  248. package/dist/api/app/bsky/notification/util.d.ts.map +1 -1
  249. package/dist/api/app/bsky/notification/util.js.map +1 -1
  250. package/dist/api/app/bsky/unspecced/getAgeAssuranceState.d.ts +2 -2
  251. package/dist/api/app/bsky/unspecced/getAgeAssuranceState.d.ts.map +1 -1
  252. package/dist/api/app/bsky/unspecced/getAgeAssuranceState.js.map +1 -1
  253. package/dist/api/app/bsky/unspecced/getConfig.d.ts +2 -2
  254. package/dist/api/app/bsky/unspecced/getConfig.d.ts.map +1 -1
  255. package/dist/api/app/bsky/unspecced/getConfig.js.map +1 -1
  256. package/dist/api/app/bsky/unspecced/getOnboardingSuggestedStarterPacks.d.ts +2 -2
  257. package/dist/api/app/bsky/unspecced/getOnboardingSuggestedStarterPacks.d.ts.map +1 -1
  258. package/dist/api/app/bsky/unspecced/getOnboardingSuggestedStarterPacks.js.map +1 -1
  259. package/dist/api/app/bsky/unspecced/getPopularFeedGenerators.d.ts +2 -2
  260. package/dist/api/app/bsky/unspecced/getPopularFeedGenerators.d.ts.map +1 -1
  261. package/dist/api/app/bsky/unspecced/getPopularFeedGenerators.js.map +1 -1
  262. package/dist/api/app/bsky/unspecced/getPostThreadOtherV2.d.ts +2 -2
  263. package/dist/api/app/bsky/unspecced/getPostThreadOtherV2.d.ts.map +1 -1
  264. package/dist/api/app/bsky/unspecced/getPostThreadOtherV2.js.map +1 -1
  265. package/dist/api/app/bsky/unspecced/getPostThreadV2.d.ts +2 -2
  266. package/dist/api/app/bsky/unspecced/getPostThreadV2.d.ts.map +1 -1
  267. package/dist/api/app/bsky/unspecced/getPostThreadV2.js.map +1 -1
  268. package/dist/api/app/bsky/unspecced/getSuggestedFeeds.d.ts +2 -2
  269. package/dist/api/app/bsky/unspecced/getSuggestedFeeds.d.ts.map +1 -1
  270. package/dist/api/app/bsky/unspecced/getSuggestedFeeds.js.map +1 -1
  271. package/dist/api/app/bsky/unspecced/getSuggestedOnboardingUsers.d.ts +2 -2
  272. package/dist/api/app/bsky/unspecced/getSuggestedOnboardingUsers.d.ts.map +1 -1
  273. package/dist/api/app/bsky/unspecced/getSuggestedOnboardingUsers.js.map +1 -1
  274. package/dist/api/app/bsky/unspecced/getSuggestedStarterPacks.d.ts +2 -2
  275. package/dist/api/app/bsky/unspecced/getSuggestedStarterPacks.d.ts.map +1 -1
  276. package/dist/api/app/bsky/unspecced/getSuggestedStarterPacks.js.map +1 -1
  277. package/dist/api/app/bsky/unspecced/getSuggestedUsers.d.ts +2 -2
  278. package/dist/api/app/bsky/unspecced/getSuggestedUsers.d.ts.map +1 -1
  279. package/dist/api/app/bsky/unspecced/getSuggestedUsers.js.map +1 -1
  280. package/dist/api/app/bsky/unspecced/getSuggestedUsersForDiscover.d.ts +2 -2
  281. package/dist/api/app/bsky/unspecced/getSuggestedUsersForDiscover.d.ts.map +1 -1
  282. package/dist/api/app/bsky/unspecced/getSuggestedUsersForDiscover.js.map +1 -1
  283. package/dist/api/app/bsky/unspecced/getSuggestedUsersForExplore.d.ts +2 -2
  284. package/dist/api/app/bsky/unspecced/getSuggestedUsersForExplore.d.ts.map +1 -1
  285. package/dist/api/app/bsky/unspecced/getSuggestedUsersForExplore.js.map +1 -1
  286. package/dist/api/app/bsky/unspecced/getSuggestedUsersForSeeMore.d.ts +2 -2
  287. package/dist/api/app/bsky/unspecced/getSuggestedUsersForSeeMore.d.ts.map +1 -1
  288. package/dist/api/app/bsky/unspecced/getSuggestedUsersForSeeMore.js.map +1 -1
  289. package/dist/api/app/bsky/unspecced/getTaggedSuggestions.d.ts +2 -2
  290. package/dist/api/app/bsky/unspecced/getTaggedSuggestions.d.ts.map +1 -1
  291. package/dist/api/app/bsky/unspecced/getTaggedSuggestions.js.map +1 -1
  292. package/dist/api/app/bsky/unspecced/getTrendingTopics.d.ts +2 -2
  293. package/dist/api/app/bsky/unspecced/getTrendingTopics.d.ts.map +1 -1
  294. package/dist/api/app/bsky/unspecced/getTrendingTopics.js.map +1 -1
  295. package/dist/api/app/bsky/unspecced/getTrends.d.ts +2 -2
  296. package/dist/api/app/bsky/unspecced/getTrends.d.ts.map +1 -1
  297. package/dist/api/app/bsky/unspecced/getTrends.js.map +1 -1
  298. package/dist/api/app/bsky/unspecced/initAgeAssurance.d.ts +2 -2
  299. package/dist/api/app/bsky/unspecced/initAgeAssurance.d.ts.map +1 -1
  300. package/dist/api/app/bsky/unspecced/initAgeAssurance.js.map +1 -1
  301. package/dist/api/blob-dispatcher.d.ts +2 -2
  302. package/dist/api/blob-dispatcher.d.ts.map +1 -1
  303. package/dist/api/blob-dispatcher.js.map +1 -1
  304. package/dist/api/blob-resolver.d.ts +6 -6
  305. package/dist/api/blob-resolver.d.ts.map +1 -1
  306. package/dist/api/blob-resolver.js.map +1 -1
  307. package/dist/api/com/atproto/admin/getAccountInfos.d.ts +2 -2
  308. package/dist/api/com/atproto/admin/getAccountInfos.d.ts.map +1 -1
  309. package/dist/api/com/atproto/admin/getAccountInfos.js.map +1 -1
  310. package/dist/api/com/atproto/admin/getSubjectStatus.d.ts +2 -2
  311. package/dist/api/com/atproto/admin/getSubjectStatus.d.ts.map +1 -1
  312. package/dist/api/com/atproto/admin/getSubjectStatus.js.map +1 -1
  313. package/dist/api/com/atproto/admin/updateSubjectStatus.d.ts +2 -2
  314. package/dist/api/com/atproto/admin/updateSubjectStatus.d.ts.map +1 -1
  315. package/dist/api/com/atproto/admin/updateSubjectStatus.js.map +1 -1
  316. package/dist/api/com/atproto/identity/resolveHandle.d.ts +2 -2
  317. package/dist/api/com/atproto/identity/resolveHandle.d.ts.map +1 -1
  318. package/dist/api/com/atproto/identity/resolveHandle.js.map +1 -1
  319. package/dist/api/com/atproto/label/queryLabels.d.ts +2 -2
  320. package/dist/api/com/atproto/label/queryLabels.d.ts.map +1 -1
  321. package/dist/api/com/atproto/label/queryLabels.js.map +1 -1
  322. package/dist/api/com/atproto/repo/getRecord.d.ts +2 -2
  323. package/dist/api/com/atproto/repo/getRecord.d.ts.map +1 -1
  324. package/dist/api/com/atproto/repo/getRecord.js.map +1 -1
  325. package/dist/api/com/atproto/temp/fetchLabels.d.ts +2 -2
  326. package/dist/api/com/atproto/temp/fetchLabels.d.ts.map +1 -1
  327. package/dist/api/com/atproto/temp/fetchLabels.js.map +1 -1
  328. package/dist/api/external.d.ts +1 -1
  329. package/dist/api/external.d.ts.map +1 -1
  330. package/dist/api/external.js.map +1 -1
  331. package/dist/api/health.d.ts +1 -1
  332. package/dist/api/health.d.ts.map +1 -1
  333. package/dist/api/health.js.map +1 -1
  334. package/dist/api/index.d.ts +2 -2
  335. package/dist/api/index.d.ts.map +1 -1
  336. package/dist/api/index.js.map +1 -1
  337. package/dist/api/internal/bsky/actor/getProfiles.d.ts +2 -2
  338. package/dist/api/internal/bsky/actor/getProfiles.d.ts.map +1 -1
  339. package/dist/api/internal/bsky/actor/getProfiles.js.map +1 -1
  340. package/dist/api/kws/api.d.ts +2 -2
  341. package/dist/api/kws/api.d.ts.map +1 -1
  342. package/dist/api/kws/api.js.map +1 -1
  343. package/dist/api/kws/index.d.ts +1 -1
  344. package/dist/api/kws/index.d.ts.map +1 -1
  345. package/dist/api/kws/index.js.map +1 -1
  346. package/dist/api/kws/types.d.ts +3 -3
  347. package/dist/api/kws/types.d.ts.map +1 -1
  348. package/dist/api/kws/types.js.map +1 -1
  349. package/dist/api/kws/util.d.ts +4 -4
  350. package/dist/api/kws/util.d.ts.map +1 -1
  351. package/dist/api/kws/util.js.map +1 -1
  352. package/dist/api/kws/webhook.d.ts +2 -2
  353. package/dist/api/kws/webhook.d.ts.map +1 -1
  354. package/dist/api/kws/webhook.js.map +1 -1
  355. package/dist/api/sitemap.d.ts +1 -1
  356. package/dist/api/sitemap.d.ts.map +1 -1
  357. package/dist/api/sitemap.js.map +1 -1
  358. package/dist/api/util.d.ts +3 -3
  359. package/dist/api/util.d.ts.map +1 -1
  360. package/dist/api/util.js.map +1 -1
  361. package/dist/api/well-known.d.ts +1 -1
  362. package/dist/api/well-known.d.ts.map +1 -1
  363. package/dist/api/well-known.js.map +1 -1
  364. package/dist/auth-verifier.d.ts +5 -5
  365. package/dist/auth-verifier.d.ts.map +1 -1
  366. package/dist/auth-verifier.js +1 -1
  367. package/dist/auth-verifier.js.map +1 -1
  368. package/dist/bsync.d.ts +2 -2
  369. package/dist/bsync.d.ts.map +1 -1
  370. package/dist/bsync.js.map +1 -1
  371. package/dist/cache/read-through.d.ts +1 -1
  372. package/dist/cache/read-through.d.ts.map +1 -1
  373. package/dist/cache/read-through.js.map +1 -1
  374. package/dist/config.d.ts +1 -1
  375. package/dist/config.d.ts.map +1 -1
  376. package/dist/config.js.map +1 -1
  377. package/dist/context.d.ts +18 -18
  378. package/dist/context.d.ts.map +1 -1
  379. package/dist/context.js.map +1 -1
  380. package/dist/courier.d.ts +2 -2
  381. package/dist/courier.d.ts.map +1 -1
  382. package/dist/courier.js.map +1 -1
  383. package/dist/data-plane/client/hosts.d.ts +1 -1
  384. package/dist/data-plane/client/hosts.d.ts.map +1 -1
  385. package/dist/data-plane/client/hosts.js.map +1 -1
  386. package/dist/data-plane/client/index.d.ts +2 -2
  387. package/dist/data-plane/client/index.d.ts.map +1 -1
  388. package/dist/data-plane/client/index.js.map +1 -1
  389. package/dist/data-plane/client/util.d.ts +1 -1
  390. package/dist/data-plane/client/util.d.ts.map +1 -1
  391. package/dist/data-plane/client/util.js.map +1 -1
  392. package/dist/data-plane/server/bsync-subscription.d.ts +2 -2
  393. package/dist/data-plane/server/bsync-subscription.d.ts.map +1 -1
  394. package/dist/data-plane/server/bsync-subscription.js +1 -1
  395. package/dist/data-plane/server/bsync-subscription.js.map +1 -1
  396. package/dist/data-plane/server/db/database-schema.d.ts +44 -44
  397. package/dist/data-plane/server/db/database-schema.d.ts.map +1 -1
  398. package/dist/data-plane/server/db/database-schema.js.map +1 -1
  399. package/dist/data-plane/server/db/db.d.ts +2 -2
  400. package/dist/data-plane/server/db/db.d.ts.map +1 -1
  401. package/dist/data-plane/server/db/db.js.map +1 -1
  402. package/dist/data-plane/server/db/migrations/20230309T045948368Z-init.d.ts +1 -1
  403. package/dist/data-plane/server/db/migrations/20230309T045948368Z-init.d.ts.map +1 -1
  404. package/dist/data-plane/server/db/migrations/20230309T045948368Z-init.js.map +1 -1
  405. package/dist/data-plane/server/db/migrations/20230408T152211201Z-notification-init.d.ts +1 -1
  406. package/dist/data-plane/server/db/migrations/20230408T152211201Z-notification-init.d.ts.map +1 -1
  407. package/dist/data-plane/server/db/migrations/20230408T152211201Z-notification-init.js.map +1 -1
  408. package/dist/data-plane/server/db/migrations/20230417T210628672Z-moderation-init.d.ts +1 -1
  409. package/dist/data-plane/server/db/migrations/20230417T210628672Z-moderation-init.d.ts.map +1 -1
  410. package/dist/data-plane/server/db/migrations/20230417T210628672Z-moderation-init.js.map +1 -1
  411. package/dist/data-plane/server/db/migrations/20230420T211446071Z-did-cache.d.ts +1 -1
  412. package/dist/data-plane/server/db/migrations/20230420T211446071Z-did-cache.d.ts.map +1 -1
  413. package/dist/data-plane/server/db/migrations/20230420T211446071Z-did-cache.js.map +1 -1
  414. package/dist/data-plane/server/db/migrations/20230427T194702079Z-notif-record-index.d.ts +1 -1
  415. package/dist/data-plane/server/db/migrations/20230427T194702079Z-notif-record-index.d.ts.map +1 -1
  416. package/dist/data-plane/server/db/migrations/20230427T194702079Z-notif-record-index.js.map +1 -1
  417. package/dist/data-plane/server/db/migrations/20230605T144730094Z-post-profile-aggs.d.ts +1 -1
  418. package/dist/data-plane/server/db/migrations/20230605T144730094Z-post-profile-aggs.d.ts.map +1 -1
  419. package/dist/data-plane/server/db/migrations/20230605T144730094Z-post-profile-aggs.js.map +1 -1
  420. package/dist/data-plane/server/db/migrations/20230607T211442112Z-feed-generator-init.d.ts +1 -1
  421. package/dist/data-plane/server/db/migrations/20230607T211442112Z-feed-generator-init.d.ts.map +1 -1
  422. package/dist/data-plane/server/db/migrations/20230607T211442112Z-feed-generator-init.js.map +1 -1
  423. package/dist/data-plane/server/db/migrations/20230608T155101190Z-algo-whats-hot-view.d.ts +1 -1
  424. package/dist/data-plane/server/db/migrations/20230608T155101190Z-algo-whats-hot-view.d.ts.map +1 -1
  425. package/dist/data-plane/server/db/migrations/20230608T155101190Z-algo-whats-hot-view.js.map +1 -1
  426. package/dist/data-plane/server/db/migrations/20230608T201813132Z-mute-lists.d.ts +1 -1
  427. package/dist/data-plane/server/db/migrations/20230608T201813132Z-mute-lists.d.ts.map +1 -1
  428. package/dist/data-plane/server/db/migrations/20230608T201813132Z-mute-lists.js.map +1 -1
  429. package/dist/data-plane/server/db/migrations/20230608T205147239Z-mutes.d.ts +1 -1
  430. package/dist/data-plane/server/db/migrations/20230608T205147239Z-mutes.d.ts.map +1 -1
  431. package/dist/data-plane/server/db/migrations/20230608T205147239Z-mutes.js.map +1 -1
  432. package/dist/data-plane/server/db/migrations/20230609T153623961Z-blocks.d.ts +1 -1
  433. package/dist/data-plane/server/db/migrations/20230609T153623961Z-blocks.d.ts.map +1 -1
  434. package/dist/data-plane/server/db/migrations/20230609T153623961Z-blocks.js.map +1 -1
  435. package/dist/data-plane/server/db/migrations/20230609T232122649Z-actor-deletion-indexes.d.ts +1 -1
  436. package/dist/data-plane/server/db/migrations/20230609T232122649Z-actor-deletion-indexes.d.ts.map +1 -1
  437. package/dist/data-plane/server/db/migrations/20230609T232122649Z-actor-deletion-indexes.js.map +1 -1
  438. package/dist/data-plane/server/db/migrations/20230610T203555962Z-suggested-follows.d.ts +1 -1
  439. package/dist/data-plane/server/db/migrations/20230610T203555962Z-suggested-follows.d.ts.map +1 -1
  440. package/dist/data-plane/server/db/migrations/20230610T203555962Z-suggested-follows.js.map +1 -1
  441. package/dist/data-plane/server/db/migrations/20230611T215300060Z-actor-state.d.ts +1 -1
  442. package/dist/data-plane/server/db/migrations/20230611T215300060Z-actor-state.d.ts.map +1 -1
  443. package/dist/data-plane/server/db/migrations/20230611T215300060Z-actor-state.js.map +1 -1
  444. package/dist/data-plane/server/db/migrations/20230620T161134972Z-post-langs.d.ts +1 -1
  445. package/dist/data-plane/server/db/migrations/20230620T161134972Z-post-langs.d.ts.map +1 -1
  446. package/dist/data-plane/server/db/migrations/20230620T161134972Z-post-langs.js.map +1 -1
  447. package/dist/data-plane/server/db/migrations/20230627T212437895Z-optional-handle.d.ts +1 -1
  448. package/dist/data-plane/server/db/migrations/20230627T212437895Z-optional-handle.d.ts.map +1 -1
  449. package/dist/data-plane/server/db/migrations/20230627T212437895Z-optional-handle.js.map +1 -1
  450. package/dist/data-plane/server/db/migrations/20230629T220835893Z-remove-post-hierarchy.d.ts +1 -1
  451. package/dist/data-plane/server/db/migrations/20230629T220835893Z-remove-post-hierarchy.d.ts.map +1 -1
  452. package/dist/data-plane/server/db/migrations/20230629T220835893Z-remove-post-hierarchy.js.map +1 -1
  453. package/dist/data-plane/server/db/migrations/20230703T045536691Z-feed-and-label-indices.d.ts +1 -1
  454. package/dist/data-plane/server/db/migrations/20230703T045536691Z-feed-and-label-indices.d.ts.map +1 -1
  455. package/dist/data-plane/server/db/migrations/20230703T045536691Z-feed-and-label-indices.js.map +1 -1
  456. package/dist/data-plane/server/db/migrations/20230720T164800037Z-posts-cursor-idx.d.ts +1 -1
  457. package/dist/data-plane/server/db/migrations/20230720T164800037Z-posts-cursor-idx.d.ts.map +1 -1
  458. package/dist/data-plane/server/db/migrations/20230720T164800037Z-posts-cursor-idx.js.map +1 -1
  459. package/dist/data-plane/server/db/migrations/20230807T035309811Z-feed-item-delete-invite-for-user-idx.d.ts +1 -1
  460. package/dist/data-plane/server/db/migrations/20230807T035309811Z-feed-item-delete-invite-for-user-idx.d.ts.map +1 -1
  461. package/dist/data-plane/server/db/migrations/20230807T035309811Z-feed-item-delete-invite-for-user-idx.js.map +1 -1
  462. package/dist/data-plane/server/db/migrations/20230808T172902639Z-repo-rev.d.ts +1 -1
  463. package/dist/data-plane/server/db/migrations/20230808T172902639Z-repo-rev.d.ts.map +1 -1
  464. package/dist/data-plane/server/db/migrations/20230808T172902639Z-repo-rev.js.map +1 -1
  465. package/dist/data-plane/server/db/migrations/20230810T203349843Z-action-duration.d.ts +1 -1
  466. package/dist/data-plane/server/db/migrations/20230810T203349843Z-action-duration.d.ts.map +1 -1
  467. package/dist/data-plane/server/db/migrations/20230810T203349843Z-action-duration.js.map +1 -1
  468. package/dist/data-plane/server/db/migrations/20230817T195936007Z-native-notifications.d.ts +1 -1
  469. package/dist/data-plane/server/db/migrations/20230817T195936007Z-native-notifications.d.ts.map +1 -1
  470. package/dist/data-plane/server/db/migrations/20230817T195936007Z-native-notifications.js.map +1 -1
  471. package/dist/data-plane/server/db/migrations/20230830T205507322Z-suggested-feeds.d.ts +1 -1
  472. package/dist/data-plane/server/db/migrations/20230830T205507322Z-suggested-feeds.d.ts.map +1 -1
  473. package/dist/data-plane/server/db/migrations/20230830T205507322Z-suggested-feeds.js.map +1 -1
  474. package/dist/data-plane/server/db/migrations/20230904T211011773Z-block-lists.d.ts +1 -1
  475. package/dist/data-plane/server/db/migrations/20230904T211011773Z-block-lists.d.ts.map +1 -1
  476. package/dist/data-plane/server/db/migrations/20230904T211011773Z-block-lists.js.map +1 -1
  477. package/dist/data-plane/server/db/migrations/20230906T222220386Z-thread-gating.d.ts +1 -1
  478. package/dist/data-plane/server/db/migrations/20230906T222220386Z-thread-gating.d.ts.map +1 -1
  479. package/dist/data-plane/server/db/migrations/20230906T222220386Z-thread-gating.js.map +1 -1
  480. package/dist/data-plane/server/db/migrations/20230920T213858047Z-add-tags-to-post.d.ts +1 -1
  481. package/dist/data-plane/server/db/migrations/20230920T213858047Z-add-tags-to-post.d.ts.map +1 -1
  482. package/dist/data-plane/server/db/migrations/20230920T213858047Z-add-tags-to-post.js.map +1 -1
  483. package/dist/data-plane/server/db/migrations/20230929T192920807Z-record-cursor-indexes.d.ts +1 -1
  484. package/dist/data-plane/server/db/migrations/20230929T192920807Z-record-cursor-indexes.d.ts.map +1 -1
  485. package/dist/data-plane/server/db/migrations/20230929T192920807Z-record-cursor-indexes.js.map +1 -1
  486. package/dist/data-plane/server/db/migrations/20231003T202833377Z-create-moderation-subject-status.d.ts +1 -1
  487. package/dist/data-plane/server/db/migrations/20231003T202833377Z-create-moderation-subject-status.d.ts.map +1 -1
  488. package/dist/data-plane/server/db/migrations/20231003T202833377Z-create-moderation-subject-status.js.map +1 -1
  489. package/dist/data-plane/server/db/migrations/20231220T225126090Z-blob-takedowns.d.ts +1 -1
  490. package/dist/data-plane/server/db/migrations/20231220T225126090Z-blob-takedowns.d.ts.map +1 -1
  491. package/dist/data-plane/server/db/migrations/20231220T225126090Z-blob-takedowns.js.map +1 -1
  492. package/dist/data-plane/server/db/migrations/20240124T023719200Z-tagged-suggestions.d.ts +1 -1
  493. package/dist/data-plane/server/db/migrations/20240124T023719200Z-tagged-suggestions.d.ts.map +1 -1
  494. package/dist/data-plane/server/db/migrations/20240124T023719200Z-tagged-suggestions.js.map +1 -1
  495. package/dist/data-plane/server/db/migrations/20240226T225725627Z-labelers.d.ts +1 -1
  496. package/dist/data-plane/server/db/migrations/20240226T225725627Z-labelers.d.ts.map +1 -1
  497. package/dist/data-plane/server/db/migrations/20240226T225725627Z-labelers.js.map +1 -1
  498. package/dist/data-plane/server/db/migrations/20240530T170337073Z-account-deactivation.d.ts +1 -1
  499. package/dist/data-plane/server/db/migrations/20240530T170337073Z-account-deactivation.d.ts.map +1 -1
  500. package/dist/data-plane/server/db/migrations/20240530T170337073Z-account-deactivation.js.map +1 -1
  501. package/dist/data-plane/server/db/migrations/20240606T171229898Z-thread-mutes.d.ts +1 -1
  502. package/dist/data-plane/server/db/migrations/20240606T171229898Z-thread-mutes.d.ts.map +1 -1
  503. package/dist/data-plane/server/db/migrations/20240606T171229898Z-thread-mutes.js.map +1 -1
  504. package/dist/data-plane/server/db/migrations/20240606T222548219Z-starter-packs.d.ts +1 -1
  505. package/dist/data-plane/server/db/migrations/20240606T222548219Z-starter-packs.d.ts.map +1 -1
  506. package/dist/data-plane/server/db/migrations/20240606T222548219Z-starter-packs.js.map +1 -1
  507. package/dist/data-plane/server/db/migrations/20240719T203853939Z-priority-notifs.d.ts +1 -1
  508. package/dist/data-plane/server/db/migrations/20240719T203853939Z-priority-notifs.d.ts.map +1 -1
  509. package/dist/data-plane/server/db/migrations/20240719T203853939Z-priority-notifs.js.map +1 -1
  510. package/dist/data-plane/server/db/migrations/20240723T220700077Z-quotes-post-aggs.d.ts +1 -1
  511. package/dist/data-plane/server/db/migrations/20240723T220700077Z-quotes-post-aggs.d.ts.map +1 -1
  512. package/dist/data-plane/server/db/migrations/20240723T220700077Z-quotes-post-aggs.js.map +1 -1
  513. package/dist/data-plane/server/db/migrations/20240723T220703655Z-quotes.d.ts +1 -1
  514. package/dist/data-plane/server/db/migrations/20240723T220703655Z-quotes.d.ts.map +1 -1
  515. package/dist/data-plane/server/db/migrations/20240723T220703655Z-quotes.js.map +1 -1
  516. package/dist/data-plane/server/db/migrations/20240801T193939827Z-post-gate.d.ts +1 -1
  517. package/dist/data-plane/server/db/migrations/20240801T193939827Z-post-gate.d.ts.map +1 -1
  518. package/dist/data-plane/server/db/migrations/20240801T193939827Z-post-gate.js.map +1 -1
  519. package/dist/data-plane/server/db/migrations/20240808T224251220Z-post-gate-flags.d.ts +1 -1
  520. package/dist/data-plane/server/db/migrations/20240808T224251220Z-post-gate-flags.d.ts.map +1 -1
  521. package/dist/data-plane/server/db/migrations/20240808T224251220Z-post-gate-flags.js.map +1 -1
  522. package/dist/data-plane/server/db/migrations/20240829T211238293Z-simplify-actor-sync.d.ts +1 -1
  523. package/dist/data-plane/server/db/migrations/20240829T211238293Z-simplify-actor-sync.d.ts.map +1 -1
  524. package/dist/data-plane/server/db/migrations/20240829T211238293Z-simplify-actor-sync.js.map +1 -1
  525. package/dist/data-plane/server/db/migrations/20240831T134810923Z-pinned-posts.d.ts +1 -1
  526. package/dist/data-plane/server/db/migrations/20240831T134810923Z-pinned-posts.d.ts.map +1 -1
  527. package/dist/data-plane/server/db/migrations/20240831T134810923Z-pinned-posts.js.map +1 -1
  528. package/dist/data-plane/server/db/migrations/20241114T153108102Z-add-starter-packs-name.d.ts +1 -1
  529. package/dist/data-plane/server/db/migrations/20241114T153108102Z-add-starter-packs-name.d.ts.map +1 -1
  530. package/dist/data-plane/server/db/migrations/20241114T153108102Z-add-starter-packs-name.js.map +1 -1
  531. package/dist/data-plane/server/db/migrations/20250116T222618297Z-post-embed-video.d.ts +1 -1
  532. package/dist/data-plane/server/db/migrations/20250116T222618297Z-post-embed-video.d.ts.map +1 -1
  533. package/dist/data-plane/server/db/migrations/20250116T222618297Z-post-embed-video.js.map +1 -1
  534. package/dist/data-plane/server/db/migrations/20250207T174822012Z-add-label-exp.d.ts +1 -1
  535. package/dist/data-plane/server/db/migrations/20250207T174822012Z-add-label-exp.d.ts.map +1 -1
  536. package/dist/data-plane/server/db/migrations/20250207T174822012Z-add-label-exp.js.map +1 -1
  537. package/dist/data-plane/server/db/migrations/20250404T163421487Z-verifications.d.ts +1 -1
  538. package/dist/data-plane/server/db/migrations/20250404T163421487Z-verifications.d.ts.map +1 -1
  539. package/dist/data-plane/server/db/migrations/20250404T163421487Z-verifications.js.map +1 -1
  540. package/dist/data-plane/server/db/migrations/20250526T023712742Z-like-repost-via.d.ts +1 -1
  541. package/dist/data-plane/server/db/migrations/20250526T023712742Z-like-repost-via.d.ts.map +1 -1
  542. package/dist/data-plane/server/db/migrations/20250526T023712742Z-like-repost-via.js.map +1 -1
  543. package/dist/data-plane/server/db/migrations/20250528T221913281Z-add-record-tags.d.ts +1 -1
  544. package/dist/data-plane/server/db/migrations/20250528T221913281Z-add-record-tags.d.ts.map +1 -1
  545. package/dist/data-plane/server/db/migrations/20250528T221913281Z-add-record-tags.js.map +1 -1
  546. package/dist/data-plane/server/db/migrations/20250602T190357447Z-add-private-data.d.ts +1 -1
  547. package/dist/data-plane/server/db/migrations/20250602T190357447Z-add-private-data.d.ts.map +1 -1
  548. package/dist/data-plane/server/db/migrations/20250602T190357447Z-add-private-data.js.map +1 -1
  549. package/dist/data-plane/server/db/migrations/20250611T140649895Z-add-activity-subscription.d.ts +1 -1
  550. package/dist/data-plane/server/db/migrations/20250611T140649895Z-add-activity-subscription.d.ts.map +1 -1
  551. package/dist/data-plane/server/db/migrations/20250611T140649895Z-add-activity-subscription.js.map +1 -1
  552. package/dist/data-plane/server/db/migrations/20250627T025331240Z-add-actor-age-assurance-columns.d.ts +1 -1
  553. package/dist/data-plane/server/db/migrations/20250627T025331240Z-add-actor-age-assurance-columns.d.ts.map +1 -1
  554. package/dist/data-plane/server/db/migrations/20250627T025331240Z-add-actor-age-assurance-columns.js.map +1 -1
  555. package/dist/data-plane/server/db/migrations/20250812T183735692Z-add-bookmarks.d.ts +1 -1
  556. package/dist/data-plane/server/db/migrations/20250812T183735692Z-add-bookmarks.d.ts.map +1 -1
  557. package/dist/data-plane/server/db/migrations/20250812T183735692Z-add-bookmarks.js.map +1 -1
  558. package/dist/data-plane/server/db/migrations/20250813T174955711Z-add-post-agg-bookmarks.d.ts +1 -1
  559. package/dist/data-plane/server/db/migrations/20250813T174955711Z-add-post-agg-bookmarks.d.ts.map +1 -1
  560. package/dist/data-plane/server/db/migrations/20250813T174955711Z-add-post-agg-bookmarks.js.map +1 -1
  561. package/dist/data-plane/server/db/migrations/20251120T004738098Z-update-actor-age-assurance-v2.d.ts +1 -1
  562. package/dist/data-plane/server/db/migrations/20251120T004738098Z-update-actor-age-assurance-v2.d.ts.map +1 -1
  563. package/dist/data-plane/server/db/migrations/20251120T004738098Z-update-actor-age-assurance-v2.js.map +1 -1
  564. package/dist/data-plane/server/db/migrations/20260112T133951271Z-add-drafts.d.ts +1 -1
  565. package/dist/data-plane/server/db/migrations/20260112T133951271Z-add-drafts.d.ts.map +1 -1
  566. package/dist/data-plane/server/db/migrations/20260112T133951271Z-add-drafts.js.map +1 -1
  567. package/dist/data-plane/server/db/migrations/20260604T224952774Z-post-embed-gallery-image.d.ts +1 -1
  568. package/dist/data-plane/server/db/migrations/20260604T224952774Z-post-embed-gallery-image.d.ts.map +1 -1
  569. package/dist/data-plane/server/db/migrations/20260604T224952774Z-post-embed-gallery-image.js.map +1 -1
  570. package/dist/data-plane/server/db/migrations/provider.d.ts +2 -2
  571. package/dist/data-plane/server/db/migrations/provider.d.ts.map +1 -1
  572. package/dist/data-plane/server/db/migrations/provider.js.map +1 -1
  573. package/dist/data-plane/server/db/pagination.d.ts +2 -2
  574. package/dist/data-plane/server/db/pagination.d.ts.map +1 -1
  575. package/dist/data-plane/server/db/pagination.js.map +1 -1
  576. package/dist/data-plane/server/db/tables/actor-block.d.ts +1 -1
  577. package/dist/data-plane/server/db/tables/actor-block.d.ts.map +1 -1
  578. package/dist/data-plane/server/db/tables/actor-block.js.map +1 -1
  579. package/dist/data-plane/server/db/tables/actor.d.ts +1 -1
  580. package/dist/data-plane/server/db/tables/actor.d.ts.map +1 -1
  581. package/dist/data-plane/server/db/tables/actor.js.map +1 -1
  582. package/dist/data-plane/server/db/tables/did-cache.d.ts +1 -1
  583. package/dist/data-plane/server/db/tables/did-cache.d.ts.map +1 -1
  584. package/dist/data-plane/server/db/tables/did-cache.js.map +1 -1
  585. package/dist/data-plane/server/db/tables/feed-generator.d.ts +1 -1
  586. package/dist/data-plane/server/db/tables/feed-generator.d.ts.map +1 -1
  587. package/dist/data-plane/server/db/tables/feed-generator.js.map +1 -1
  588. package/dist/data-plane/server/db/tables/follow.d.ts +1 -1
  589. package/dist/data-plane/server/db/tables/follow.d.ts.map +1 -1
  590. package/dist/data-plane/server/db/tables/follow.js.map +1 -1
  591. package/dist/data-plane/server/db/tables/labeler.d.ts +1 -1
  592. package/dist/data-plane/server/db/tables/labeler.d.ts.map +1 -1
  593. package/dist/data-plane/server/db/tables/labeler.js.map +1 -1
  594. package/dist/data-plane/server/db/tables/like.d.ts +1 -1
  595. package/dist/data-plane/server/db/tables/like.d.ts.map +1 -1
  596. package/dist/data-plane/server/db/tables/like.js.map +1 -1
  597. package/dist/data-plane/server/db/tables/list-block.d.ts +1 -1
  598. package/dist/data-plane/server/db/tables/list-block.d.ts.map +1 -1
  599. package/dist/data-plane/server/db/tables/list-block.js.map +1 -1
  600. package/dist/data-plane/server/db/tables/list-item.d.ts +1 -1
  601. package/dist/data-plane/server/db/tables/list-item.d.ts.map +1 -1
  602. package/dist/data-plane/server/db/tables/list-item.js.map +1 -1
  603. package/dist/data-plane/server/db/tables/list.d.ts +1 -1
  604. package/dist/data-plane/server/db/tables/list.d.ts.map +1 -1
  605. package/dist/data-plane/server/db/tables/list.js.map +1 -1
  606. package/dist/data-plane/server/db/tables/notification.d.ts +1 -1
  607. package/dist/data-plane/server/db/tables/notification.d.ts.map +1 -1
  608. package/dist/data-plane/server/db/tables/notification.js.map +1 -1
  609. package/dist/data-plane/server/db/tables/post-agg.d.ts +1 -1
  610. package/dist/data-plane/server/db/tables/post-agg.d.ts.map +1 -1
  611. package/dist/data-plane/server/db/tables/post-agg.js.map +1 -1
  612. package/dist/data-plane/server/db/tables/post.d.ts +1 -1
  613. package/dist/data-plane/server/db/tables/post.d.ts.map +1 -1
  614. package/dist/data-plane/server/db/tables/post.js.map +1 -1
  615. package/dist/data-plane/server/db/tables/profile-agg.d.ts +1 -1
  616. package/dist/data-plane/server/db/tables/profile-agg.d.ts.map +1 -1
  617. package/dist/data-plane/server/db/tables/profile-agg.js.map +1 -1
  618. package/dist/data-plane/server/db/tables/quote.d.ts +1 -1
  619. package/dist/data-plane/server/db/tables/quote.d.ts.map +1 -1
  620. package/dist/data-plane/server/db/tables/quote.js.map +1 -1
  621. package/dist/data-plane/server/db/tables/record.d.ts +1 -1
  622. package/dist/data-plane/server/db/tables/record.d.ts.map +1 -1
  623. package/dist/data-plane/server/db/tables/record.js.map +1 -1
  624. package/dist/data-plane/server/db/tables/repost.d.ts +1 -1
  625. package/dist/data-plane/server/db/tables/repost.d.ts.map +1 -1
  626. package/dist/data-plane/server/db/tables/repost.js.map +1 -1
  627. package/dist/data-plane/server/db/tables/starter-pack.d.ts +1 -1
  628. package/dist/data-plane/server/db/tables/starter-pack.d.ts.map +1 -1
  629. package/dist/data-plane/server/db/tables/starter-pack.js.map +1 -1
  630. package/dist/data-plane/server/db/tables/verification.d.ts +1 -1
  631. package/dist/data-plane/server/db/tables/verification.d.ts.map +1 -1
  632. package/dist/data-plane/server/db/tables/verification.js.map +1 -1
  633. package/dist/data-plane/server/db/types.d.ts +1 -1
  634. package/dist/data-plane/server/db/types.d.ts.map +1 -1
  635. package/dist/data-plane/server/db/types.js.map +1 -1
  636. package/dist/data-plane/server/db/util.d.ts +2 -2
  637. package/dist/data-plane/server/db/util.d.ts.map +1 -1
  638. package/dist/data-plane/server/db/util.js.map +1 -1
  639. package/dist/data-plane/server/index.d.ts +2 -2
  640. package/dist/data-plane/server/index.d.ts.map +1 -1
  641. package/dist/data-plane/server/index.js.map +1 -1
  642. package/dist/data-plane/server/indexing/index.d.ts +5 -5
  643. package/dist/data-plane/server/indexing/index.d.ts.map +1 -1
  644. package/dist/data-plane/server/indexing/index.js.map +1 -1
  645. package/dist/data-plane/server/indexing/plugins/block.d.ts +2 -2
  646. package/dist/data-plane/server/indexing/plugins/block.d.ts.map +1 -1
  647. package/dist/data-plane/server/indexing/plugins/block.js.map +1 -1
  648. package/dist/data-plane/server/indexing/plugins/chat-declaration.d.ts +2 -2
  649. package/dist/data-plane/server/indexing/plugins/chat-declaration.d.ts.map +1 -1
  650. package/dist/data-plane/server/indexing/plugins/chat-declaration.js.map +1 -1
  651. package/dist/data-plane/server/indexing/plugins/feed-generator.d.ts +2 -2
  652. package/dist/data-plane/server/indexing/plugins/feed-generator.d.ts.map +1 -1
  653. package/dist/data-plane/server/indexing/plugins/feed-generator.js.map +1 -1
  654. package/dist/data-plane/server/indexing/plugins/follow.d.ts +2 -2
  655. package/dist/data-plane/server/indexing/plugins/follow.d.ts.map +1 -1
  656. package/dist/data-plane/server/indexing/plugins/follow.js.map +1 -1
  657. package/dist/data-plane/server/indexing/plugins/germ-declaration.d.ts +2 -2
  658. package/dist/data-plane/server/indexing/plugins/germ-declaration.d.ts.map +1 -1
  659. package/dist/data-plane/server/indexing/plugins/germ-declaration.js.map +1 -1
  660. package/dist/data-plane/server/indexing/plugins/labeler.d.ts +2 -2
  661. package/dist/data-plane/server/indexing/plugins/labeler.d.ts.map +1 -1
  662. package/dist/data-plane/server/indexing/plugins/labeler.js.map +1 -1
  663. package/dist/data-plane/server/indexing/plugins/like.d.ts +2 -2
  664. package/dist/data-plane/server/indexing/plugins/like.d.ts.map +1 -1
  665. package/dist/data-plane/server/indexing/plugins/like.js.map +1 -1
  666. package/dist/data-plane/server/indexing/plugins/list-block.d.ts +2 -2
  667. package/dist/data-plane/server/indexing/plugins/list-block.d.ts.map +1 -1
  668. package/dist/data-plane/server/indexing/plugins/list-block.js.map +1 -1
  669. package/dist/data-plane/server/indexing/plugins/list-item.d.ts +2 -2
  670. package/dist/data-plane/server/indexing/plugins/list-item.d.ts.map +1 -1
  671. package/dist/data-plane/server/indexing/plugins/list-item.js.map +1 -1
  672. package/dist/data-plane/server/indexing/plugins/list.d.ts +2 -2
  673. package/dist/data-plane/server/indexing/plugins/list.d.ts.map +1 -1
  674. package/dist/data-plane/server/indexing/plugins/list.js.map +1 -1
  675. package/dist/data-plane/server/indexing/plugins/notif-declaration.d.ts +2 -2
  676. package/dist/data-plane/server/indexing/plugins/notif-declaration.d.ts.map +1 -1
  677. package/dist/data-plane/server/indexing/plugins/notif-declaration.js.map +1 -1
  678. package/dist/data-plane/server/indexing/plugins/post-gate.d.ts +2 -2
  679. package/dist/data-plane/server/indexing/plugins/post-gate.d.ts.map +1 -1
  680. package/dist/data-plane/server/indexing/plugins/post-gate.js.map +1 -1
  681. package/dist/data-plane/server/indexing/plugins/post.d.ts +4 -4
  682. package/dist/data-plane/server/indexing/plugins/post.d.ts.map +1 -1
  683. package/dist/data-plane/server/indexing/plugins/post.js.map +1 -1
  684. package/dist/data-plane/server/indexing/plugins/profile.d.ts +2 -2
  685. package/dist/data-plane/server/indexing/plugins/profile.d.ts.map +1 -1
  686. package/dist/data-plane/server/indexing/plugins/profile.js.map +1 -1
  687. package/dist/data-plane/server/indexing/plugins/repost.d.ts +2 -2
  688. package/dist/data-plane/server/indexing/plugins/repost.d.ts.map +1 -1
  689. package/dist/data-plane/server/indexing/plugins/repost.js.map +1 -1
  690. package/dist/data-plane/server/indexing/plugins/starter-pack.d.ts +2 -2
  691. package/dist/data-plane/server/indexing/plugins/starter-pack.d.ts.map +1 -1
  692. package/dist/data-plane/server/indexing/plugins/starter-pack.js.map +1 -1
  693. package/dist/data-plane/server/indexing/plugins/status.d.ts +2 -2
  694. package/dist/data-plane/server/indexing/plugins/status.d.ts.map +1 -1
  695. package/dist/data-plane/server/indexing/plugins/status.js.map +1 -1
  696. package/dist/data-plane/server/indexing/plugins/thread-gate.d.ts +2 -2
  697. package/dist/data-plane/server/indexing/plugins/thread-gate.d.ts.map +1 -1
  698. package/dist/data-plane/server/indexing/plugins/thread-gate.js.map +1 -1
  699. package/dist/data-plane/server/indexing/plugins/verification.d.ts +2 -2
  700. package/dist/data-plane/server/indexing/plugins/verification.d.ts.map +1 -1
  701. package/dist/data-plane/server/indexing/plugins/verification.js.map +1 -1
  702. package/dist/data-plane/server/indexing/processor.d.ts +6 -6
  703. package/dist/data-plane/server/indexing/processor.d.ts.map +1 -1
  704. package/dist/data-plane/server/indexing/processor.js +1 -1
  705. package/dist/data-plane/server/indexing/processor.js.map +1 -1
  706. package/dist/data-plane/server/routes/activity-subscription.d.ts +3 -3
  707. package/dist/data-plane/server/routes/activity-subscription.d.ts.map +1 -1
  708. package/dist/data-plane/server/routes/activity-subscription.js.map +1 -1
  709. package/dist/data-plane/server/routes/blocks.d.ts +3 -3
  710. package/dist/data-plane/server/routes/blocks.d.ts.map +1 -1
  711. package/dist/data-plane/server/routes/blocks.js.map +1 -1
  712. package/dist/data-plane/server/routes/bookmarks.d.ts +3 -3
  713. package/dist/data-plane/server/routes/bookmarks.d.ts.map +1 -1
  714. package/dist/data-plane/server/routes/bookmarks.js.map +1 -1
  715. package/dist/data-plane/server/routes/drafts.d.ts +3 -3
  716. package/dist/data-plane/server/routes/drafts.d.ts.map +1 -1
  717. package/dist/data-plane/server/routes/drafts.js.map +1 -1
  718. package/dist/data-plane/server/routes/feed-gens.d.ts +3 -3
  719. package/dist/data-plane/server/routes/feed-gens.d.ts.map +1 -1
  720. package/dist/data-plane/server/routes/feed-gens.js.map +1 -1
  721. package/dist/data-plane/server/routes/feeds.d.ts +3 -3
  722. package/dist/data-plane/server/routes/feeds.d.ts.map +1 -1
  723. package/dist/data-plane/server/routes/feeds.js.map +1 -1
  724. package/dist/data-plane/server/routes/follows.d.ts +3 -3
  725. package/dist/data-plane/server/routes/follows.d.ts.map +1 -1
  726. package/dist/data-plane/server/routes/follows.js.map +1 -1
  727. package/dist/data-plane/server/routes/identity.d.ts +4 -4
  728. package/dist/data-plane/server/routes/identity.d.ts.map +1 -1
  729. package/dist/data-plane/server/routes/identity.js +1 -1
  730. package/dist/data-plane/server/routes/identity.js.map +1 -1
  731. package/dist/data-plane/server/routes/index.d.ts +3 -3
  732. package/dist/data-plane/server/routes/index.d.ts.map +1 -1
  733. package/dist/data-plane/server/routes/index.js.map +1 -1
  734. package/dist/data-plane/server/routes/interactions.d.ts +3 -3
  735. package/dist/data-plane/server/routes/interactions.d.ts.map +1 -1
  736. package/dist/data-plane/server/routes/interactions.js.map +1 -1
  737. package/dist/data-plane/server/routes/labels.d.ts +3 -3
  738. package/dist/data-plane/server/routes/labels.d.ts.map +1 -1
  739. package/dist/data-plane/server/routes/labels.js.map +1 -1
  740. package/dist/data-plane/server/routes/likes.d.ts +3 -3
  741. package/dist/data-plane/server/routes/likes.d.ts.map +1 -1
  742. package/dist/data-plane/server/routes/likes.js.map +1 -1
  743. package/dist/data-plane/server/routes/lists.d.ts +3 -3
  744. package/dist/data-plane/server/routes/lists.d.ts.map +1 -1
  745. package/dist/data-plane/server/routes/lists.js.map +1 -1
  746. package/dist/data-plane/server/routes/moderation.d.ts +3 -3
  747. package/dist/data-plane/server/routes/moderation.d.ts.map +1 -1
  748. package/dist/data-plane/server/routes/moderation.js.map +1 -1
  749. package/dist/data-plane/server/routes/mutes.d.ts +3 -3
  750. package/dist/data-plane/server/routes/mutes.d.ts.map +1 -1
  751. package/dist/data-plane/server/routes/mutes.js.map +1 -1
  752. package/dist/data-plane/server/routes/notifs.d.ts +4 -4
  753. package/dist/data-plane/server/routes/notifs.d.ts.map +1 -1
  754. package/dist/data-plane/server/routes/notifs.js.map +1 -1
  755. package/dist/data-plane/server/routes/profile.d.ts +3 -3
  756. package/dist/data-plane/server/routes/profile.d.ts.map +1 -1
  757. package/dist/data-plane/server/routes/profile.js +1 -1
  758. package/dist/data-plane/server/routes/profile.js.map +1 -1
  759. package/dist/data-plane/server/routes/quotes.d.ts +3 -3
  760. package/dist/data-plane/server/routes/quotes.d.ts.map +1 -1
  761. package/dist/data-plane/server/routes/quotes.js.map +1 -1
  762. package/dist/data-plane/server/routes/records.d.ts +3 -3
  763. package/dist/data-plane/server/routes/records.d.ts.map +1 -1
  764. package/dist/data-plane/server/routes/records.js.map +1 -1
  765. package/dist/data-plane/server/routes/relationships.d.ts +3 -3
  766. package/dist/data-plane/server/routes/relationships.d.ts.map +1 -1
  767. package/dist/data-plane/server/routes/relationships.js.map +1 -1
  768. package/dist/data-plane/server/routes/reposts.d.ts +3 -3
  769. package/dist/data-plane/server/routes/reposts.d.ts.map +1 -1
  770. package/dist/data-plane/server/routes/reposts.js.map +1 -1
  771. package/dist/data-plane/server/routes/search.d.ts +3 -3
  772. package/dist/data-plane/server/routes/search.d.ts.map +1 -1
  773. package/dist/data-plane/server/routes/search.js.map +1 -1
  774. package/dist/data-plane/server/routes/site-standard.d.ts +3 -3
  775. package/dist/data-plane/server/routes/site-standard.d.ts.map +1 -1
  776. package/dist/data-plane/server/routes/site-standard.js.map +1 -1
  777. package/dist/data-plane/server/routes/sitemap.d.ts +2 -2
  778. package/dist/data-plane/server/routes/sitemap.d.ts.map +1 -1
  779. package/dist/data-plane/server/routes/sitemap.js.map +1 -1
  780. package/dist/data-plane/server/routes/starter-packs.d.ts +3 -3
  781. package/dist/data-plane/server/routes/starter-packs.d.ts.map +1 -1
  782. package/dist/data-plane/server/routes/starter-packs.js.map +1 -1
  783. package/dist/data-plane/server/routes/suggestions.d.ts +3 -3
  784. package/dist/data-plane/server/routes/suggestions.d.ts.map +1 -1
  785. package/dist/data-plane/server/routes/suggestions.js.map +1 -1
  786. package/dist/data-plane/server/routes/sync.d.ts +3 -3
  787. package/dist/data-plane/server/routes/sync.d.ts.map +1 -1
  788. package/dist/data-plane/server/routes/sync.js.map +1 -1
  789. package/dist/data-plane/server/routes/threads.d.ts +3 -3
  790. package/dist/data-plane/server/routes/threads.d.ts.map +1 -1
  791. package/dist/data-plane/server/routes/threads.js.map +1 -1
  792. package/dist/data-plane/server/subscription.d.ts +2 -2
  793. package/dist/data-plane/server/subscription.d.ts.map +1 -1
  794. package/dist/data-plane/server/subscription.js +1 -1
  795. package/dist/data-plane/server/subscription.js.map +1 -1
  796. package/dist/data-plane/server/util.d.ts +2 -2
  797. package/dist/data-plane/server/util.d.ts.map +1 -1
  798. package/dist/data-plane/server/util.js.map +1 -1
  799. package/dist/error.d.ts +1 -1
  800. package/dist/error.d.ts.map +1 -1
  801. package/dist/error.js.map +1 -1
  802. package/dist/etcd.d.ts +1 -1
  803. package/dist/etcd.d.ts.map +1 -1
  804. package/dist/etcd.js.map +1 -1
  805. package/dist/feature-gates/index.d.ts +1 -1
  806. package/dist/feature-gates/index.d.ts.map +1 -1
  807. package/dist/feature-gates/index.js +1 -0
  808. package/dist/feature-gates/index.js.map +1 -1
  809. package/dist/feature-gates/types.d.ts +1 -1
  810. package/dist/feature-gates/types.d.ts.map +1 -1
  811. package/dist/feature-gates/types.js.map +1 -1
  812. package/dist/feature-gates/utils.d.ts +2 -2
  813. package/dist/feature-gates/utils.d.ts.map +1 -1
  814. package/dist/feature-gates/utils.js.map +1 -1
  815. package/dist/hydration/actor.d.ts +7 -5
  816. package/dist/hydration/actor.d.ts.map +1 -1
  817. package/dist/hydration/actor.js +2 -0
  818. package/dist/hydration/actor.js.map +1 -1
  819. package/dist/hydration/external.d.ts +4 -4
  820. package/dist/hydration/external.d.ts.map +1 -1
  821. package/dist/hydration/external.js +1 -1
  822. package/dist/hydration/external.js.map +1 -1
  823. package/dist/hydration/feed.d.ts +4 -4
  824. package/dist/hydration/feed.d.ts.map +1 -1
  825. package/dist/hydration/feed.js.map +1 -1
  826. package/dist/hydration/graph.d.ts +5 -5
  827. package/dist/hydration/graph.d.ts.map +1 -1
  828. package/dist/hydration/graph.js +1 -1
  829. package/dist/hydration/graph.js.map +1 -1
  830. package/dist/hydration/hydrator.d.ts +11 -11
  831. package/dist/hydration/hydrator.d.ts.map +1 -1
  832. package/dist/hydration/hydrator.js +1 -1
  833. package/dist/hydration/hydrator.js.map +1 -1
  834. package/dist/hydration/label.d.ts +5 -5
  835. package/dist/hydration/label.d.ts.map +1 -1
  836. package/dist/hydration/label.js +1 -1
  837. package/dist/hydration/label.js.map +1 -1
  838. package/dist/hydration/util.d.ts +3 -3
  839. package/dist/hydration/util.d.ts.map +1 -1
  840. package/dist/hydration/util.js.map +1 -1
  841. package/dist/image/invalidator.d.ts +1 -1
  842. package/dist/image/invalidator.d.ts.map +1 -1
  843. package/dist/image/invalidator.js.map +1 -1
  844. package/dist/image/server.d.ts +3 -3
  845. package/dist/image/server.d.ts.map +1 -1
  846. package/dist/image/server.js.map +1 -1
  847. package/dist/image/sharp.d.ts +2 -2
  848. package/dist/image/sharp.d.ts.map +1 -1
  849. package/dist/image/sharp.js.map +1 -1
  850. package/dist/image/uri.d.ts +2 -2
  851. package/dist/image/uri.d.ts.map +1 -1
  852. package/dist/image/uri.js.map +1 -1
  853. package/dist/index.d.ts +3 -3
  854. package/dist/index.d.ts.map +1 -1
  855. package/dist/index.js.map +1 -1
  856. package/dist/kws.d.ts +2 -2
  857. package/dist/kws.d.ts.map +1 -1
  858. package/dist/kws.js.map +1 -1
  859. package/dist/lexicons/app/bsky/actor/defs.defs.d.ts +6 -0
  860. package/dist/lexicons/app/bsky/actor/defs.defs.d.ts.map +1 -1
  861. package/dist/lexicons/app/bsky/actor/defs.defs.js +1 -0
  862. package/dist/lexicons/app/bsky/actor/defs.defs.js.map +1 -1
  863. package/dist/logger.d.ts +1 -1
  864. package/dist/logger.d.ts.map +1 -1
  865. package/dist/logger.js.map +1 -1
  866. package/dist/pipeline.d.ts +1 -1
  867. package/dist/pipeline.d.ts.map +1 -1
  868. package/dist/pipeline.js.map +1 -1
  869. package/dist/rolodex.d.ts +2 -2
  870. package/dist/rolodex.d.ts.map +1 -1
  871. package/dist/rolodex.js.map +1 -1
  872. package/dist/stash.d.ts +2 -2
  873. package/dist/stash.d.ts.map +1 -1
  874. package/dist/stash.js.map +1 -1
  875. package/dist/util/http.d.ts +1 -1
  876. package/dist/util/http.d.ts.map +1 -1
  877. package/dist/util/http.js.map +1 -1
  878. package/dist/util/standard-site.d.ts +1 -1
  879. package/dist/util/standard-site.d.ts.map +1 -1
  880. package/dist/util/standard-site.js.map +1 -1
  881. package/dist/util/uris.d.ts +2 -2
  882. package/dist/util/uris.d.ts.map +1 -1
  883. package/dist/util/uris.js.map +1 -1
  884. package/dist/util.d.ts +1 -1
  885. package/dist/util.d.ts.map +1 -1
  886. package/dist/util.js.map +1 -1
  887. package/dist/views/index.d.ts +11 -11
  888. package/dist/views/index.d.ts.map +1 -1
  889. package/dist/views/index.js.map +1 -1
  890. package/dist/views/threads-v2.d.ts +3 -3
  891. package/dist/views/threads-v2.d.ts.map +1 -1
  892. package/dist/views/threads-v2.js.map +1 -1
  893. package/dist/views/types.d.ts +1 -1
  894. package/dist/views/types.d.ts.map +1 -1
  895. package/dist/views/types.js.map +1 -1
  896. package/dist/views/util.d.ts +2 -2
  897. package/dist/views/util.d.ts.map +1 -1
  898. package/dist/views/util.js.map +1 -1
  899. package/package.json +14 -14
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/views/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { HOUR, MINUTE, dedupeStrs, mapDefined } from '@atproto/common'\nimport {\n $Typed,\n Un$Typed,\n Unknown$TypedObject,\n UriString,\n atUri,\n getBlobCidString,\n} from '@atproto/lex'\nimport {\n AtUri,\n AtUriString,\n DatetimeString,\n DidString,\n INVALID_HANDLE,\n normalizeDatetimeAlways,\n} from '@atproto/syntax'\nimport { Actor, ProfileViewerState } from '../hydration/actor.js'\nimport {\n AssociatedSiteStandardRecord,\n SiteStandardDocument,\n SiteStandardPublication,\n getSiteStandardRecordsFromHydrationMapsByRefs,\n} from '../hydration/external.js'\nimport { FeedItem, Like, Post, Repost } from '../hydration/feed.js'\nimport { Follow, Verification } from '../hydration/graph.js'\nimport { HydrationState } from '../hydration/hydrator.js'\nimport { Label } from '../hydration/label.js'\nimport { RecordInfo, parseString } from '../hydration/util.js'\nimport { ImageUriBuilder } from '../image/uri.js'\nimport { app, site } from '../lexicons/index.js'\nimport { viewsLogger } from '../logger.js'\nimport { Notification } from '../proto/bsky_pb.js'\nimport {\n estimateReadingTimeMinutes,\n validateStandardSiteForUrl,\n} from '../util/standard-site.js'\nimport {\n postUriToPostgateUri,\n postUriToThreadgateUri,\n safePinnedPost,\n uriToDid,\n uriToDid as creatorFromUri,\n} from '../util/uris.js'\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.js'\nimport {\n ActivitySubscription,\n BlockedPost,\n BookmarkView,\n Embed,\n EmbedView,\n ExternalEmbed,\n ExternalEmbedColorRgb,\n ExternalEmbedSourceThemeView,\n ExternalEmbedSourceView,\n ExternalEmbedView,\n FeedViewPost,\n FollowRecord,\n GalleryEmbed,\n GalleryEmbedView,\n GalleryImageEmbed,\n GalleryImageEmbedView,\n GeneratorView,\n GetPostThreadV2QueryParams,\n ImagesEmbed,\n ImagesEmbedView,\n KnownFollowers,\n LabelerRecord,\n LabelerView,\n LabelerViewDetailed,\n LikeRecord,\n ListItemView,\n ListView,\n ListViewBasic,\n MaybePostView,\n NotFoundPost,\n NotificationRecordDeleted,\n NotificationView,\n PostEmbedView,\n PostRecord,\n PostView,\n ProfileAssociatedActivitySubscription,\n ProfileAssociatedChat,\n ProfileRecord,\n ProfileView,\n ProfileViewBasic,\n ProfileViewDetailed,\n ProfileViewer,\n ReasonPin,\n ReasonRepost,\n RecordEmbed,\n RecordEmbedView,\n RecordEmbedViewInternal,\n RecordWithMedia,\n RecordWithMediaView,\n ReplyRef,\n RepostRecord,\n SiteStandardPublicationRecord,\n StarterPackView,\n StarterPackViewBasic,\n StatusView,\n ThreadItem,\n ThreadOtherItem,\n ThreadViewPost,\n ThreadgateView,\n VerificationRecord,\n VerificationState,\n VerificationView,\n VideoEmbed,\n VideoEmbedView,\n isExternalEmbedType,\n isGalleryEmbedType,\n isGalleryImageEmbedType,\n isImagesEmbedType,\n isLabelerRecordType,\n isListRuleType,\n isPostRecordType,\n isPostViewType,\n isProfileRecordType,\n isRecordEmbedType,\n isRecordWithMediaType,\n isSelfLabelsType,\n isVideoEmbedType,\n} from './types.js'\nimport { VideoUriBuilder, parsePostgate, parseThreadGate } from './util.js'\n\nconst notificationDeletedRecord =\n app.bsky.notification.defs.recordDeleted.$build({})\n\n// Pre-computed CID for the `notificationDeletedRecord`.\nconst notificationDeletedRecordCid =\n 'bafyreidad6nyekfa4a67yfb573ptxiv6s7kyxyg2ra6qbbemcruadvtuim'\n\n// Soft-limit for `app.bsky.embed.gallery#main.items`. The lexicon's\n// schema-level cap is 20, but clients are expected to enforce a soft limit\n// of 10 today. The AppView trims defensively at the view boundary.\nconst GALLERY_SOFT_LIMIT = 10\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: DidString, state: HydrationState): boolean {\n return (\n this.actorIsDeactivated(did, state) || this.actorIsTakendown(did, state)\n )\n }\n\n actorIsDeactivated(did: DidString, state: HydrationState): boolean {\n if (state.actors?.get(did)?.upstreamStatus === 'deactivated') return true\n return false\n }\n\n actorIsTakendown(did: DidString, 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: DidString, state: HydrationState): boolean {\n if (state.ctx?.skipViewerBlocks) return false\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: DidString, 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(\n viewer: ProfileViewerState,\n state: HydrationState,\n ): undefined | AtUriString {\n return (\n viewer.blockingByList && this.recordActive(viewer.blockingByList, state)\n )\n }\n\n blockedByList(\n viewer: ProfileViewerState,\n state: HydrationState,\n ): undefined | AtUriString {\n return (\n viewer.blockedByList && this.recordActive(viewer.blockedByList, state)\n )\n }\n\n mutedByList(\n viewer: ProfileViewerState,\n state: HydrationState,\n ): undefined | AtUriString {\n return viewer.mutedByList && this.recordActive(viewer.mutedByList, state)\n }\n\n recordActive(\n uri: AtUriString,\n state: HydrationState,\n ): AtUriString | undefined {\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?: DidString; uri?: AtUriString },\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: AtUriString,\n rootPostUri: AtUriString,\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: DidString,\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 getBlobCidString(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 chat: this.profileAssociatedChat(actor),\n activitySubscription: this.profileAssociatedActivitySubscription(actor),\n germ: actor.germ?.record.messageMe\n ? {\n showButtonTo: actor.germ.record.messageMe.showButtonTo,\n messageMeUrl: actor.germ.record.messageMe.messageMeUrl,\n }\n : undefined,\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: DidString,\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() as DatetimeString)\n : undefined,\n }\n }\n\n profileBasic(\n did: DidString,\n state: HydrationState,\n ): Un$Typed<ProfileViewBasic> | undefined {\n const actor = state.actors?.get(did)\n if (!actor) return\n const profileUri = atUri(did, app.bsky.actor.profile)\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 getBlobCidString(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 chat: this.profileAssociatedChat(actor),\n activitySubscription: this.profileAssociatedActivitySubscription(actor),\n germ: actor.germ?.record.messageMe\n ? {\n showButtonTo: actor.germ.record.messageMe.showButtonTo,\n messageMeUrl: actor.germ.record.messageMe.messageMeUrl,\n }\n : undefined,\n },\n viewer: this.profileViewer(did, state),\n labels,\n createdAt: actor.createdAt\n ? (actor.createdAt.toISOString() as DatetimeString)\n : undefined,\n verification: this.verification(did, state),\n status: this.status(did, state),\n debug: state.ctx?.includeDebugField ? actor.debug : undefined,\n }\n }\n\n profileAssociatedChat(actor: Actor): ProfileAssociatedChat | undefined {\n if (!actor.allowIncomingChatsFrom) return undefined\n return {\n allowIncoming: actor.allowIncomingChatsFrom,\n allowGroupInvites: actor.allowGroupChatInvitesFrom,\n }\n }\n\n profileAssociatedActivitySubscription(\n actor: Actor,\n ): ProfileAssociatedActivitySubscription {\n return { allowSubscriptions: actor.allowActivitySubscriptionsFrom }\n }\n\n profileKnownFollowers(\n did: DidString,\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(\n did: DidString,\n state: HydrationState,\n ): 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: DidString,\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: DidString, state: HydrationState): UriString | 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: DidString,\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: DidString,\n state: HydrationState,\n ): VerificationState | undefined {\n const actor = state.actors?.get(did)\n if (!actor) return\n\n // Currently, the handle comes as \"handle.invalid\" from the production dataplane.\n // But the contract allows for empty handle, so we cover both cases.\n if (!actor.handle || actor.handle === INVALID_HANDLE) return\n\n const isImpersonation = state.labels?.get(did)?.isImpersonation\n\n const verifications = actor.verifications.map(\n ({ issuer, uri, displayName, handle, createdAt }): VerificationView => {\n // @NOTE: We don't factor-in impersonation when evaluating the validity of each verification,\n // only in the overall profile verification validity.\n // The verification record's `displayName`/`handle` are the *subject's* snapshot at\n // verification time; we compare them to the subject's current values to determine validity.\n const isValid =\n !!displayName &&\n displayName === actor.profile?.displayName &&\n !!handle &&\n handle === actor.handle\n\n // Expose the *issuer's* current handle/displayName, sourced from the\n // issuer's hydrated actor record (see `Hydrator.hydrateProfiles`).\n const issuerActor = state.actors?.get(issuer)\n\n return {\n issuer,\n issuerDisplayName: issuerActor?.profile?.displayName,\n issuerHandle: issuerActor?.handle,\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: DidString, state: HydrationState): StatusView | undefined {\n const actor = state.actors?.get(did)\n if (!actor?.status) return\n\n const isViewerStatusOwner = did === state.ctx?.viewer\n const { status } = actor\n const { record, sortedAt, cid, takedownRef } = status\n const isTakenDown = !!takedownRef\n\n /*\n * Manual filter for takendown status records. If this is ever removed, we\n * need to reinstate `includeTakedowns` handling in the `Actor.getActors`\n * hydrator.\n */\n if (isTakenDown && !isViewerStatusOwner) {\n return undefined\n }\n\n const uri = atUri(did, app.bsky.actor.status)\n const labels = state.labels?.getBySubject(uri)\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() as DatetimeString)\n : undefined\n\n const isActive = expiresAtMs ? expiresAtMs > Date.now() : undefined\n\n const response: StatusView = {\n uri,\n cid,\n record: record,\n status: record.status,\n embed:\n record.embed && isExternalEmbedType(record.embed)\n ? this.externalEmbed(did, record.embed, state)\n : undefined,\n labels,\n expiresAt,\n isActive,\n }\n\n if (isViewerStatusOwner) {\n response.isDisabled = isTakenDown\n }\n\n return response\n }\n\n blockedProfileViewer(\n did: DidString,\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(\n uri: AtUriString,\n state: HydrationState,\n ): 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() as DatetimeString,\n }\n }\n\n listBasic(\n uri: AtUriString,\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 getBlobCidString(list.record.avatar),\n )\n : undefined,\n listItemCount: listAgg?.listItems ?? 0,\n indexedAt: this.indexedAt(list).toISOString() as DatetimeString,\n labels,\n viewer: listViewer\n ? {\n muted: !!listViewer.viewerMuted,\n blocked: listViewer.viewerListBlockUri,\n }\n : undefined,\n }\n }\n\n listItemView(\n uri: AtUriString,\n did: DidString,\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: AtUriString,\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.did, 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() as DatetimeString,\n }\n }\n\n starterPack(\n uri: AtUriString,\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?: AtUriString\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 !isPostRecordType(record) &&\n !isProfileRecordType(record) &&\n !isLabelerRecordType(record)\n ) {\n return []\n }\n\n // Ignore if no labels defines\n if (\n !record.labels ||\n !isSelfLabelsType(record.labels) ||\n !record.labels.values.length\n ) {\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() as DatetimeString)\n return record.labels.values.map(({ val }) => {\n return { src, uri, cid, val, cts }\n })\n }\n\n labeler(\n did: DidString,\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(did, app.bsky.labeler.service)\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() as DatetimeString,\n labels,\n }\n }\n\n labelerDetailed(\n did: DidString,\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: AtUriString,\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 getBlobCidString(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() as DatetimeString,\n }\n }\n\n threadgate(\n uri: AtUriString,\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 (!isListRuleType(rule)) return\n return this.listBasic(rule.list, state)\n }),\n }\n }\n\n post(\n uri: AtUriString,\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.did\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() as DatetimeString,\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(\n uri: AtUriString,\n state: HydrationState,\n ): Un$Typed<ReplyRef> | undefined {\n const postRecord = state.posts?.get(uri)?.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 (isPostViewType(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 (isPostViewType(root) && (childBlocks?.root || parentBlocks?.root)) {\n root = this.blockedPost(root.uri, root.author.did, state)\n }\n }\n let grandparentAuthor: ProfileViewBasic | undefined\n if (isPostViewType(parent)) {\n // @NOTE The \"parent.record\" property is of type \"unknown\" in the lexicon\n // schema, which means that it is typed as LexMap here. In order to avoid\n // (expensive) validation using \"isPostRecord(parent.record)\", we only\n // check that the \"$type\" property is a post record type, then use a\n // try/catch to \"validate\" the post uri.\n if (isPostRecordType(parent.record) && parent.record.reply != null) {\n const uri = (parent.record.reply as any).parent?.uri\n if (typeof uri === 'string') {\n try {\n grandparentAuthor = this.profileBasic(creatorFromUri(uri), state)\n } catch {\n // ignore (just as if validation had failed)\n }\n }\n }\n }\n return {\n root,\n parent,\n grandparentAuthor,\n }\n }\n\n maybePost(uri: AtUriString, 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 app.bsky.feed.defs.postView.$build(post)\n }\n\n blockedPost(\n uri: AtUriString,\n authorDid: DidString,\n state: HydrationState,\n ): $Typed<BlockedPost> {\n return app.bsky.feed.defs.blockedPost.$build({\n uri,\n blocked: true,\n author: {\n did: authorDid,\n viewer: this.blockedProfileViewer(authorDid, state),\n },\n })\n }\n\n notFoundPost(uri: AtUriString): $Typed<NotFoundPost> {\n return app.bsky.feed.defs.notFoundPost.$build({\n uri,\n notFound: true,\n })\n }\n\n reasonRepost(\n uri: AtUriString,\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 app.bsky.feed.defs.reasonRepost.$build({\n by: creator,\n uri,\n cid: repost.cid,\n indexedAt: this.indexedAt(repost).toISOString() as DatetimeString,\n })\n }\n\n reasonPin(): $Typed<ReasonPin> {\n return app.bsky.feed.defs.reasonPin.$build({})\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 !== app.bsky.feed.post.$type) return\n\n const item = this.maybePost(atUri.href, state)\n return {\n createdAt: bookmark.indexedAt\n ? (bookmark.indexedAt.toISOString() as DatetimeString)\n : undefined,\n subject: {\n uri: atUri.href,\n cid: bookmark.subjectCid,\n },\n item,\n }\n }\n\n // Threads\n // ------------\n\n thread(\n skele: { anchor: AtUriString; uris: AtUriString[] },\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<AtUriString, AtUriString[]> = {}\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 app.bsky.feed.defs.threadViewPost.$build({\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: AtUriString,\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 app.bsky.feed.defs.threadViewPost.$build({\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: AtUriString,\n rootUri: AtUriString,\n childrenByParentUri: Record<AtUriString, AtUriString[]>,\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 app.bsky.feed.defs.threadViewPost.$build({\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: AtUriString; uris: AtUriString[] },\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?.features.checkGate(\n state.ctx.features.Gate.ThreadsReplyRankingExplorationEnable,\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: AtUriString\n opDid: DidString\n rootUri: AtUriString\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: AtUriString\n isOPThread: boolean\n opDid: string\n rootUri: AtUriString\n childrenByParentUri: Record<AtUriString, AtUriString[]>\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: AtUriString[] = 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: AtUriString\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: app.bsky.unspecced.defs.threadItemPost.$build({\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: AtUriString\n depth: number\n }): ThreadItemValueNoUnauthenticated {\n return {\n uri,\n depth,\n value: app.bsky.unspecced.defs.threadItemNoUnauthenticated.$build({}),\n }\n }\n\n private threadV2ItemNotFound({\n uri,\n depth,\n }: {\n uri: AtUriString\n depth: number\n }): ThreadItemValueNotFound {\n return {\n uri,\n depth,\n value: app.bsky.unspecced.defs.threadItemNotFound.$build({}),\n }\n }\n\n private threadV2ItemBlocked({\n uri,\n depth,\n authorDid,\n state,\n }: {\n uri: AtUriString\n depth: number\n authorDid: DidString\n state: HydrationState\n }): ThreadItemValueBlocked {\n return {\n uri,\n depth,\n value: app.bsky.unspecced.defs.threadItemBlocked.$build({\n author: {\n did: authorDid,\n viewer: this.blockedProfileViewer(authorDid, state),\n },\n }),\n }\n }\n\n threadOtherV2(\n skeleton: { anchor: AtUriString; uris: AtUriString[] },\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?.features.checkGate(\n state.ctx.features.Gate.ThreadsReplyRankingExplorationEnable,\n ),\n )\n }\n\n private threadOtherV2Replies(\n {\n parentUri,\n rootUri,\n childrenByParentUri,\n below,\n depth,\n }: {\n parentUri: AtUriString\n rootUri: AtUriString\n childrenByParentUri: Record<AtUriString, AtUriString[]>\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: AtUriString[] = 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: AtUriString\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: AtUriString\n }): ThreadOtherItemValuePost {\n const base = this.threadOtherV2ItemPostAnchor({ depth, uri })\n return {\n ...base,\n value: app.bsky.unspecced.defs.threadItemPost.$build({\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: AtUriString\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: AtUriString\n uri: AtUriString\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?.features.checkGate(\n state.ctx.features.Gate.ThreadsReplyRankingExplorationEnable,\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 isPostRecordType(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: AtUriString,\n uris: AtUriString[],\n state: HydrationState,\n ): Record<AtUriString, AtUriString[]> {\n // Groups children of each parent.\n const includedPosts = new Set<AtUriString>([anchorUri])\n const childrenByParentUri: Record<AtUriString, AtUriString[]> = {}\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: AtUriString,\n embed: $Typed<Embed> | Unknown$TypedObject,\n state: HydrationState,\n depth: number,\n ): $Typed<EmbedView> | undefined {\n if (isImagesEmbedType(embed)) {\n return this.imagesEmbed(creatorFromUri(postUri), embed)\n } else if (isVideoEmbedType(embed)) {\n return this.videoEmbed(creatorFromUri(postUri), embed)\n } else if (isGalleryEmbedType(embed)) {\n return this.galleryEmbed(creatorFromUri(postUri), embed)\n } else if (isExternalEmbedType(embed)) {\n return this.externalEmbed(creatorFromUri(postUri), embed, state)\n } else if (isRecordEmbedType(embed)) {\n return this.recordEmbed(postUri, embed, state, depth)\n } else if (isRecordWithMediaType(embed)) {\n return this.recordWithMediaEmbed(postUri, embed, state, depth)\n } else {\n return undefined\n }\n }\n\n imagesEmbed(did: DidString, embed: ImagesEmbed): $Typed<ImagesEmbedView> {\n const imgViews = embed.images.map((img) => ({\n thumb: this.imgUriBuilder.getPresetUri(\n 'feed_thumbnail',\n did,\n getBlobCidString(img.image),\n ),\n fullsize: this.imgUriBuilder.getPresetUri(\n 'feed_fullsize',\n did,\n getBlobCidString(img.image),\n ),\n alt: img.alt,\n aspectRatio: img.aspectRatio,\n }))\n return app.bsky.embed.images.view.$build({\n images: imgViews,\n })\n }\n\n videoEmbed(did: DidString, embed: VideoEmbed): $Typed<VideoEmbedView> {\n const cid = getBlobCidString(embed.video)\n return app.bsky.embed.video.view.$build({\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 presentation: embed.presentation,\n })\n }\n\n galleryEmbed(did: DidString, embed: GalleryEmbed): $Typed<GalleryEmbedView> {\n // The lexicon's schema-level cap is 20, but clients are expected to\n // enforce a soft limit of 10. Trim defensively at the view boundary so\n // viewers see at most 10 items regardless of what was authored.\n const items = embed.items.slice(0, GALLERY_SOFT_LIMIT).flatMap((item) => {\n const view = this.galleryItemView(did, item)\n return view ? [view] : []\n })\n return app.bsky.embed.gallery.view.$build({ items })\n }\n\n private galleryItemView(\n did: DidString,\n item: GalleryEmbed['items'][number],\n ): $Typed<GalleryImageEmbedView> | undefined {\n if (isGalleryImageEmbedType(item)) {\n return this.galleryImageView(did, item)\n }\n return undefined\n }\n\n private galleryImageView(\n did: DidString,\n item: GalleryImageEmbed,\n ): $Typed<GalleryImageEmbedView> {\n return app.bsky.embed.gallery.viewImage.$build({\n thumbnail: this.imgUriBuilder.getPresetUri(\n 'feed_thumbnail',\n did,\n getBlobCidString(item.image),\n ),\n fullsize: this.imgUriBuilder.getPresetUri(\n 'feed_fullsize',\n did,\n getBlobCidString(item.image),\n ),\n alt: item.alt,\n aspectRatio: item.aspectRatio,\n })\n }\n\n externalEmbed(\n did: DidString,\n embed: ExternalEmbed,\n state: HydrationState,\n ): $Typed<ExternalEmbedView> {\n // Start from the post-author-supplied embed values, then spread the\n // SS-derived view on top so any field the hydrated doc/publication\n // supplies wins (title, description, thumb, source, etc). When no SS\n // records were hydrated `ssView` is `undefined` and the spread is a\n // no-op, leaving the base values in place. `associatedRefs` is set\n // last because the post is authoritative about what was pinned.\n const ssView = this.externalEmbedFromStandardSite({\n associatedRefs: embed.external.associatedRefs,\n state,\n assumedUrl: embed.external.uri,\n })\n // The author-supplied (scraped) thumbnail always wins when present —\n // it's the per-article OG image. Only when the embed has no thumb do\n // we fall back to whatever the SS overlay provides (the document's\n // `coverImage`). `thumb` is set after the `...ssView` spread so the\n // overlay's `coverImage`-derived thumb can't clobber the embed's.\n const embeddedThumb = embed.external.thumb\n ? this.imgUriBuilder.getPresetUri(\n 'feed_thumbnail',\n did,\n getBlobCidString(embed.external.thumb),\n )\n : undefined\n return app.bsky.embed.external.view.$build({\n external: {\n uri: embed.external.uri,\n title: embed.external.title,\n description: embed.external.description,\n ...ssView,\n thumb: embeddedThumb ?? ssView?.thumb,\n associatedRefs: embed.external.associatedRefs,\n },\n })\n }\n\n /**\n * Read-path entry point: caller has the post's `external.associatedRefs[]`\n * and the global hydration state, and we resolve the matching SS records\n * by ref. Used by `externalEmbed`.\n *\n * Returns a fully-populated `viewExternal['external']` shape (including\n * the required `uri`/`title`/`description`), or `undefined` if the\n * records didn't hydrate, didn't pass URL validation, or couldn't\n * supply the required fields. Callers spread the result over a base\n * view to layer SS-derived fields on top of post-author-supplied ones.\n *\n * `assumedUrl` is the canonical web URL the embed claims to represent\n * (the post's `external.uri` on the read path, the request's `url` on\n * compose). Validation logic uses it to confirm the SS records actually\n * back that URL, and the same value is echoed back as `uri` on the\n * returned overlay.\n */\n externalEmbedFromStandardSite({\n associatedRefs,\n state,\n assumedUrl,\n }: {\n associatedRefs: ExternalEmbed['external']['associatedRefs']\n state: HydrationState\n assumedUrl: string\n }): ExternalEmbedView['external'] | undefined {\n const { document, publication } =\n getSiteStandardRecordsFromHydrationMapsByRefs(\n associatedRefs,\n state.siteStandardDocuments,\n state.siteStandardPublications,\n )\n return this.externalEmbedFromStandardSiteRecords({\n document,\n publication,\n state,\n assumedUrl,\n })\n }\n\n /**\n * Compose-path entry point: caller already knows which document and\n * publication backed the request and has them in hand (e.g. from\n * iterating the SS hydration maps directly). Skips the by-ref lookup\n * that `externalEmbedFromStandardSite` does. Used by\n * `getEmbedExternalView`.\n *\n * Returns a fully-populated `viewExternal['external']` shape (including\n * the required `uri`/`title`/`description`), or `undefined` if any of\n * the validation gates rejected the pair or the records couldn't\n * supply the required fields.\n *\n * `state` is still needed for label hydration. `assumedUrl` is the\n * canonical web URL the embed claims to represent (the post's\n * `external.uri` on the read path, the request's `url` on compose);\n * validation logic uses it to confirm the SS records actually back that\n * URL, and the same value is echoed back as `uri` on the returned\n * overlay.\n */\n externalEmbedFromStandardSiteRecords({\n document,\n publication,\n state,\n assumedUrl,\n }: {\n document: AssociatedSiteStandardRecord<SiteStandardDocument> | undefined\n publication:\n | AssociatedSiteStandardRecord<SiteStandardPublication>\n | undefined\n state: HydrationState\n assumedUrl: string\n }): ExternalEmbedView['external'] | undefined {\n // Three layers of validation gate this overlay:\n //\n // 1. Hydrator nulls taken-down records and mirrors the null across\n // doc/pub pairs (see `actionSiteStandardTakedownLabels` in\n // `hydration/hydrator.ts`).\n // 2. The lookups guarantee structural agreement between doc and pub\n // — matching `site`/`uri`, no orphan doc claiming a missing\n // publication (see `getSiteStandardRecordsFromHydrationMapsByRefs`\n // and `…ByDocumentUri` in `hydration/external.ts`).\n // 3. `validateStandardSiteForUrl` below checks that the records back\n // the URL the embed claims (see `util/standard-site.ts`).\n //\n // If any layer rejected, callers see `undefined` and fall back to the\n // bare embed rather than render partial / disagreeing enrichment.\n if (!document && !publication) return undefined\n if (!validateStandardSiteForUrl(document, publication, assumedUrl)) {\n viewsLogger.warn(\n {\n documentUri: document?.ref.uri,\n publicationUri: publication?.ref.uri,\n },\n 'site.standard URL validation failed',\n )\n return undefined\n }\n\n // viewExternal requires `title` and `description`. If neither side of\n // the pair supplies usable values for both, there's no enrichment to\n // render — return undefined and let the caller fall back.\n let title: string\n let description: string\n if (document?.info.record) {\n // Treat the document as authoritative for both fields as a unit, so\n // we never blend a doc's title with a publication's description.\n title = document.info.record.title\n description = document.info.record.description ?? ''\n } else if (publication) {\n title = publication.info.record.name\n description = publication.info.record.description ?? ''\n } else {\n return undefined\n }\n\n // if we don't have a title at this point, something is wrong with the SS\n // record (it's a required field) and therefore the enrichment isn't worth\n // showing\n if (!title) return undefined\n\n const overlay: ExternalEmbedView['external'] = {\n // @ts-ignore this is mis-typed\n uri: assumedUrl,\n title,\n description,\n }\n\n const docCover = document?.info.record.coverImage\n if (docCover) {\n overlay.thumb = this.imgUriBuilder.getPresetUri(\n 'feed_thumbnail',\n creatorFromUri(document.ref.uri),\n getBlobCidString(docCover),\n )\n }\n\n if (document?.info.record.publishedAt) {\n overlay.createdAt = document.info.record.publishedAt\n }\n if (document?.info.record.updatedAt) {\n overlay.updatedAt = document.info.record.updatedAt\n }\n const readingTime = document?.info.record.textContent\n ? estimateReadingTimeMinutes(document.info.record.textContent)\n : undefined\n if (readingTime !== undefined) overlay.readingTime = readingTime\n\n // Merge labels applied to either the document or the publication onto the\n // same `viewExternal.labels` array — clients moderate the embed as single\n // unit, so doc-scoped and publication-scoped labels end up in the same\n // bucket.\n const labels = [\n ...(document ? state.labels?.getBySubject(document.ref.uri) ?? [] : []),\n ...(publication\n ? state.labels?.getBySubject(publication.ref.uri) ?? []\n : []),\n ]\n if (labels.length) overlay.labels = labels\n\n if (publication) {\n overlay.source = this.externalEmbedSource(publication)\n }\n\n // Profiles of the owners of the records backing this embed. Hydrator\n // covers these DIDs alongside post-author profiles, so misses here\n // only happen when an actor is unavailable (suspended, deleted, etc.)\n // — drop those rather than emit `undefined` slots.\n const uniqueDids = dedupeStrs(\n mapDefined([document?.ref.uri, publication?.ref.uri], (uri) =>\n uri ? uriToDid(uri) : undefined,\n ) as DidString[],\n )\n const associatedProfiles = mapDefined(uniqueDids, (did) =>\n this.profileBasic(did, state),\n ) as ProfileViewBasic[]\n if (associatedProfiles.length)\n overlay.associatedProfiles = associatedProfiles\n\n return overlay\n }\n\n externalEmbedSource(\n publication: AssociatedSiteStandardRecord<SiteStandardPublication>,\n ): $Typed<ExternalEmbedSourceView> {\n const { record } = publication.info\n const pubDid = creatorFromUri(publication.ref.uri)\n return app.bsky.embed.external.viewExternalSource.$build({\n uri: record.url,\n icon: record.icon\n ? this.imgUriBuilder.getPresetUri(\n 'avatar',\n pubDid,\n getBlobCidString(record.icon),\n )\n : undefined,\n title: record.name,\n description: record.description,\n theme: record.basicTheme\n ? externalEmbedSourceTheme(record.basicTheme)\n : undefined,\n })\n }\n\n embedNotFound(uri: AtUriString): $Typed<RecordEmbedView> {\n return app.bsky.embed.record.view.$build({\n record: app.bsky.embed.record.viewNotFound.$build({\n uri,\n notFound: true,\n }),\n })\n }\n\n embedDetached(uri: AtUriString): $Typed<RecordEmbedView> {\n return app.bsky.embed.record.view.$build({\n record: app.bsky.embed.record.viewDetached.$build({\n uri,\n detached: true,\n }),\n })\n }\n\n embedBlocked(\n uri: AtUriString,\n state: HydrationState,\n ): $Typed<RecordEmbedView> {\n const creator = creatorFromUri(uri)\n return app.bsky.embed.record.view.$build({\n record: app.bsky.embed.record.viewBlocked.$build({\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: AtUriString,\n state: HydrationState,\n depth: number,\n ): $Typed<PostEmbedView> | undefined {\n const postView = this.post(uri, state, depth)\n if (!postView) return\n return app.bsky.embed.record.viewRecord.$build({\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: AtUriString,\n embed: RecordEmbed,\n state: HydrationState,\n depth: number,\n withTypeTag: false,\n ): RecordEmbedView\n recordEmbed(\n postUri: AtUriString,\n embed: RecordEmbed,\n state: HydrationState,\n depth: number,\n withTypeTag?: true,\n ): $Typed<RecordEmbedView>\n recordEmbed(\n postUri: AtUriString,\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.did, 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 === app.bsky.feed.post.$type) {\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 === app.bsky.feed.generator.$type) {\n const view = this.feedGenerator(uri, state)\n if (!view) return this.embedNotFound(uri)\n return this.recordEmbedWrapper(\n app.bsky.feed.defs.generatorView.$build(view),\n withTypeTag,\n )\n } else if (parsedUri.collection === app.bsky.graph.list.$type) {\n const view = this.list(uri, state)\n if (!view) return this.embedNotFound(uri)\n return this.recordEmbedWrapper(\n app.bsky.graph.defs.listView.$build(view),\n withTypeTag,\n )\n } else if (parsedUri.collection === app.bsky.labeler.service.$type) {\n const view = this.labeler(parsedUri.did, state)\n if (!view) return this.embedNotFound(uri)\n return this.recordEmbedWrapper(\n app.bsky.labeler.defs.labelerView.$build(view),\n withTypeTag,\n )\n } else if (parsedUri.collection === app.bsky.graph.starterpack.$type) {\n const view = this.starterPackBasic(uri, state)\n if (!view) return this.embedNotFound(uri)\n return this.recordEmbedWrapper(\n app.bsky.graph.defs.starterPackViewBasic.$build(view),\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 ): RecordEmbedView {\n return withTypeTag\n ? app.bsky.embed.record.view.$build({ record })\n : { record }\n }\n\n recordWithMediaEmbed(\n postUri: AtUriString,\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<GalleryEmbedView>\n | $Typed<ExternalEmbedView>\n if (isImagesEmbedType(embed.media)) {\n mediaEmbed = this.imagesEmbed(creator, embed.media)\n } else if (isVideoEmbedType(embed.media)) {\n mediaEmbed = this.videoEmbed(creator, embed.media)\n } else if (isGalleryEmbedType(embed.media)) {\n mediaEmbed = this.galleryEmbed(creator, embed.media)\n } else if (isExternalEmbedType(embed.media)) {\n mediaEmbed = this.externalEmbed(creator, embed.media, state)\n } else {\n return\n }\n return app.bsky.embed.recordWithMedia.view.$build({\n media: mediaEmbed,\n record: this.recordEmbed(postUri, embed.record, state, depth, false),\n })\n }\n\n userReplyDisabled(\n uri: AtUriString,\n state: HydrationState,\n ): boolean | undefined {\n const post = state.posts?.get(uri)\n if (post?.violatesThreadGate) {\n return true\n }\n const rootUriStr = 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: AtUriString,\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: AtUriString, 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\n const author = this.profile(uri.did, 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 === app.bsky.feed.post.$type) {\n recordInfo = state.posts?.get(notif.uri as AtUriString)\n } else if (uri.collection === app.bsky.feed.like.$type) {\n recordInfo = state.likes?.get(notif.uri as AtUriString)\n } else if (uri.collection === app.bsky.feed.repost.$type) {\n recordInfo = state.reposts?.get(notif.uri as AtUriString)\n } else if (uri.collection === app.bsky.graph.follow.$type) {\n recordInfo = state.follows?.get(notif.uri as AtUriString)\n } else if (uri.collection === app.bsky.graph.verification.$type) {\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 as AtUriString) ?? {\n record: notificationDeletedRecord,\n cid: notificationDeletedRecordCid,\n }\n } else if (uri.collection === app.bsky.actor.profile.$type) {\n const actor = state.actors?.get(author.did)\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 } satisfies RecordInfo<ProfileRecord>)\n : undefined\n }\n if (!recordInfo) return\n\n const labels = state.labels?.getBySubject(notif.uri as AtUriString) ?? []\n const selfLabels = this.selfLabels({\n uri: parseString<AtUriString>(notif.uri),\n cid: recordInfo.cid,\n record: recordInfo.record,\n })\n const indexedAt = notif.timestamp.toDate().toISOString()\n return {\n uri: notif.uri as AtUriString,\n cid: recordInfo.cid,\n author,\n reason: notif.reason,\n reasonSubject: parseString<AtUriString>(notif.reasonSubject),\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() as DatetimeString,\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: AtUriString, post: Post): AtUriString => {\n return post.record.reply?.root.uri ?? uri\n}\n\nconst externalEmbedSourceTheme = (\n theme: SiteStandardPublicationRecord['basicTheme'],\n): ExternalEmbedSourceThemeView | undefined => {\n if (!theme) return undefined\n const view: ExternalEmbedSourceThemeView = {}\n const background = colorRGB(theme.background)\n const foreground = colorRGB(theme.foreground)\n const accent = colorRGB(theme.accent)\n const accentForeground = colorRGB(theme.accentForeground)\n if (background) view.backgroundRGB = background\n if (foreground) view.foregroundRGB = foreground\n if (accent) view.accentRGB = accent\n if (accentForeground) view.accentForegroundRGB = accentForeground\n // No fields set -> don't decorate the view at all.\n return Object.keys(view).length === 0 ? undefined : view\n}\n\nconst colorRGB = (\n color: { $type?: unknown } | undefined,\n): ExternalEmbedColorRgb | undefined => {\n if (!color || !site.standard.theme.color.rgb.isTypeOf(color)) return undefined\n // `isTypeOf` narrows $type but not the shape; pull rgb fields off the\n // unchecked input. Records that fail full validation are dropped above\n // by the SS record parser, so by the time we get here the shape matches.\n const { r, g, b } = color as unknown as { r: number; g: number; b: number }\n return app.bsky.embed.external.colorRGB.$build({ r, g, b })\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/views/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { HOUR, MINUTE, dedupeStrs, mapDefined } from '@atproto/common'\nimport {\n type $Typed,\n type Un$Typed,\n type Unknown$TypedObject,\n type UriString,\n atUri,\n getBlobCidString,\n} from '@atproto/lex'\nimport {\n AtUri,\n type AtUriString,\n type DatetimeString,\n type DidString,\n INVALID_HANDLE,\n normalizeDatetimeAlways,\n} from '@atproto/syntax'\nimport type { Actor, ProfileViewerState } from '../hydration/actor.js'\nimport {\n type AssociatedSiteStandardRecord,\n type SiteStandardDocument,\n type SiteStandardPublication,\n getSiteStandardRecordsFromHydrationMapsByRefs,\n} from '../hydration/external.js'\nimport type { FeedItem, Like, Post, Repost } from '../hydration/feed.js'\nimport type { Follow, Verification } from '../hydration/graph.js'\nimport type { HydrationState } from '../hydration/hydrator.js'\nimport type { Label } from '../hydration/label.js'\nimport { type RecordInfo, parseString } from '../hydration/util.js'\nimport type { ImageUriBuilder } from '../image/uri.js'\nimport { app, site } from '../lexicons/index.js'\nimport { viewsLogger } from '../logger.js'\nimport type { Notification } from '../proto/bsky_pb.js'\nimport {\n estimateReadingTimeMinutes,\n validateStandardSiteForUrl,\n} from '../util/standard-site.js'\nimport {\n postUriToPostgateUri,\n postUriToThreadgateUri,\n safePinnedPost,\n uriToDid,\n uriToDid as creatorFromUri,\n} from '../util/uris.js'\nimport {\n type ThreadItemValueBlocked,\n type ThreadItemValueNoUnauthenticated,\n type ThreadItemValueNotFound,\n type ThreadItemValuePost,\n type ThreadOtherAnchorPostNode,\n type ThreadOtherItemValuePost,\n type ThreadOtherPostNode,\n type ThreadTree,\n type ThreadTreeVisible,\n sortTrimFlattenThreadTree,\n} from './threads-v2.js'\nimport {\n type ActivitySubscription,\n type BlockedPost,\n type BookmarkView,\n type Embed,\n type EmbedView,\n type ExternalEmbed,\n type ExternalEmbedColorRgb,\n type ExternalEmbedSourceThemeView,\n type ExternalEmbedSourceView,\n type ExternalEmbedView,\n type FeedViewPost,\n type FollowRecord,\n type GalleryEmbed,\n type GalleryEmbedView,\n type GalleryImageEmbed,\n type GalleryImageEmbedView,\n type GeneratorView,\n type GetPostThreadV2QueryParams,\n type ImagesEmbed,\n type ImagesEmbedView,\n type KnownFollowers,\n type LabelerRecord,\n type LabelerView,\n type LabelerViewDetailed,\n type LikeRecord,\n type ListItemView,\n type ListView,\n type ListViewBasic,\n type MaybePostView,\n type NotFoundPost,\n type NotificationRecordDeleted,\n type NotificationView,\n type PostEmbedView,\n type PostRecord,\n type PostView,\n type ProfileAssociatedActivitySubscription,\n type ProfileAssociatedChat,\n type ProfileRecord,\n type ProfileView,\n type ProfileViewBasic,\n type ProfileViewDetailed,\n type ProfileViewer,\n type ReasonPin,\n type ReasonRepost,\n type RecordEmbed,\n type RecordEmbedView,\n type RecordEmbedViewInternal,\n type RecordWithMedia,\n type RecordWithMediaView,\n type ReplyRef,\n type RepostRecord,\n type SiteStandardPublicationRecord,\n type StarterPackView,\n type StarterPackViewBasic,\n type StatusView,\n type ThreadItem,\n type ThreadOtherItem,\n type ThreadViewPost,\n type ThreadgateView,\n type VerificationRecord,\n type VerificationState,\n type VerificationView,\n type VideoEmbed,\n type VideoEmbedView,\n isExternalEmbedType,\n isGalleryEmbedType,\n isGalleryImageEmbedType,\n isImagesEmbedType,\n isLabelerRecordType,\n isListRuleType,\n isPostRecordType,\n isPostViewType,\n isProfileRecordType,\n isRecordEmbedType,\n isRecordWithMediaType,\n isSelfLabelsType,\n isVideoEmbedType,\n} from './types.js'\nimport { type VideoUriBuilder, parsePostgate, parseThreadGate } from './util.js'\n\nconst notificationDeletedRecord =\n app.bsky.notification.defs.recordDeleted.$build({})\n\n// Pre-computed CID for the `notificationDeletedRecord`.\nconst notificationDeletedRecordCid =\n 'bafyreidad6nyekfa4a67yfb573ptxiv6s7kyxyg2ra6qbbemcruadvtuim'\n\n// Soft-limit for `app.bsky.embed.gallery#main.items`. The lexicon's\n// schema-level cap is 20, but clients are expected to enforce a soft limit\n// of 10 today. The AppView trims defensively at the view boundary.\nconst GALLERY_SOFT_LIMIT = 10\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: DidString, state: HydrationState): boolean {\n return (\n this.actorIsDeactivated(did, state) || this.actorIsTakendown(did, state)\n )\n }\n\n actorIsDeactivated(did: DidString, state: HydrationState): boolean {\n if (state.actors?.get(did)?.upstreamStatus === 'deactivated') return true\n return false\n }\n\n actorIsTakendown(did: DidString, 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: DidString, state: HydrationState): boolean {\n if (state.ctx?.skipViewerBlocks) return false\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: DidString, 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(\n viewer: ProfileViewerState,\n state: HydrationState,\n ): undefined | AtUriString {\n return (\n viewer.blockingByList && this.recordActive(viewer.blockingByList, state)\n )\n }\n\n blockedByList(\n viewer: ProfileViewerState,\n state: HydrationState,\n ): undefined | AtUriString {\n return (\n viewer.blockedByList && this.recordActive(viewer.blockedByList, state)\n )\n }\n\n mutedByList(\n viewer: ProfileViewerState,\n state: HydrationState,\n ): undefined | AtUriString {\n return viewer.mutedByList && this.recordActive(viewer.mutedByList, state)\n }\n\n recordActive(\n uri: AtUriString,\n state: HydrationState,\n ): AtUriString | undefined {\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?: DidString; uri?: AtUriString },\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: AtUriString,\n rootPostUri: AtUriString,\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: DidString,\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 getBlobCidString(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 chat: this.profileAssociatedChat(actor),\n activitySubscription: this.profileAssociatedActivitySubscription(actor),\n germ: actor.germ?.record.messageMe\n ? {\n showButtonTo: actor.germ.record.messageMe.showButtonTo,\n messageMeUrl: actor.germ.record.messageMe.messageMeUrl,\n }\n : undefined,\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: DidString,\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() as DatetimeString)\n : undefined,\n }\n }\n\n profileBasic(\n did: DidString,\n state: HydrationState,\n ): Un$Typed<ProfileViewBasic> | undefined {\n const actor = state.actors?.get(did)\n if (!actor) return\n const profileUri = atUri(did, app.bsky.actor.profile)\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 getBlobCidString(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 chat: this.profileAssociatedChat(actor),\n activitySubscription: this.profileAssociatedActivitySubscription(actor),\n germ: actor.germ?.record.messageMe\n ? {\n showButtonTo: actor.germ.record.messageMe.showButtonTo,\n messageMeUrl: actor.germ.record.messageMe.messageMeUrl,\n }\n : undefined,\n },\n viewer: this.profileViewer(did, state),\n labels,\n createdAt: actor.createdAt\n ? (actor.createdAt.toISOString() as DatetimeString)\n : undefined,\n verification: this.verification(did, state),\n status: this.status(did, state),\n debug: state.ctx?.includeDebugField ? actor.debug : undefined,\n }\n }\n\n profileAssociatedChat(actor: Actor): ProfileAssociatedChat | undefined {\n if (!actor.allowIncomingChatsFrom) return undefined\n return {\n allowIncoming: actor.allowIncomingChatsFrom,\n allowGroupInvites: actor.allowGroupChatInvitesFrom,\n }\n }\n\n profileAssociatedActivitySubscription(\n actor: Actor,\n ): ProfileAssociatedActivitySubscription {\n return { allowSubscriptions: actor.allowActivitySubscriptionsFrom }\n }\n\n profileKnownFollowers(\n did: DidString,\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(\n did: DidString,\n state: HydrationState,\n ): 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: DidString,\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: DidString, state: HydrationState): UriString | 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: DidString,\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: DidString,\n state: HydrationState,\n ): VerificationState | undefined {\n const actor = state.actors?.get(did)\n if (!actor) return\n\n // Currently, the handle comes as \"handle.invalid\" from the production dataplane.\n // But the contract allows for empty handle, so we cover both cases.\n if (!actor.handle || actor.handle === INVALID_HANDLE) return\n\n const isImpersonation = state.labels?.get(did)?.isImpersonation\n\n const verifications = actor.verifications.map(\n ({ issuer, uri, displayName, handle, createdAt }): VerificationView => {\n // @NOTE: We don't factor-in impersonation when evaluating the validity of each verification,\n // only in the overall profile verification validity.\n // The verification record's `displayName`/`handle` are the *subject's* snapshot at\n // verification time; we compare them to the subject's current values to determine validity.\n const isValid =\n !!displayName &&\n displayName === actor.profile?.displayName &&\n !!handle &&\n handle === actor.handle\n\n // Expose the *issuer's* current handle/displayName, sourced from the\n // issuer's hydrated actor record (see `Hydrator.hydrateProfiles`).\n const issuerActor = state.actors?.get(issuer)\n\n return {\n issuer,\n issuerDisplayName: issuerActor?.profile?.displayName,\n issuerHandle: issuerActor?.handle,\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: DidString, state: HydrationState): StatusView | undefined {\n const actor = state.actors?.get(did)\n if (!actor?.status) return\n\n const isViewerStatusOwner = did === state.ctx?.viewer\n const { status } = actor\n const { record, sortedAt, cid, takedownRef } = status\n const isTakenDown = !!takedownRef\n\n /*\n * Manual filter for takendown status records. If this is ever removed, we\n * need to reinstate `includeTakedowns` handling in the `Actor.getActors`\n * hydrator.\n */\n if (isTakenDown && !isViewerStatusOwner) {\n return undefined\n }\n\n const uri = atUri(did, app.bsky.actor.status)\n const labels = state.labels?.getBySubject(uri)\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() as DatetimeString)\n : undefined\n\n const isActive = expiresAtMs ? expiresAtMs > Date.now() : undefined\n\n const response: StatusView = {\n uri,\n cid,\n record: record,\n status: record.status,\n embed:\n record.embed && isExternalEmbedType(record.embed)\n ? this.externalEmbed(did, record.embed, state)\n : undefined,\n labels,\n expiresAt,\n isActive,\n }\n\n if (isViewerStatusOwner) {\n response.isDisabled = isTakenDown\n }\n\n return response\n }\n\n blockedProfileViewer(\n did: DidString,\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(\n uri: AtUriString,\n state: HydrationState,\n ): 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() as DatetimeString,\n }\n }\n\n listBasic(\n uri: AtUriString,\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 getBlobCidString(list.record.avatar),\n )\n : undefined,\n listItemCount: listAgg?.listItems ?? 0,\n indexedAt: this.indexedAt(list).toISOString() as DatetimeString,\n labels,\n viewer: listViewer\n ? {\n muted: !!listViewer.viewerMuted,\n blocked: listViewer.viewerListBlockUri,\n }\n : undefined,\n }\n }\n\n listItemView(\n uri: AtUriString,\n did: DidString,\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: AtUriString,\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.did, 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() as DatetimeString,\n }\n }\n\n starterPack(\n uri: AtUriString,\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?: AtUriString\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 !isPostRecordType(record) &&\n !isProfileRecordType(record) &&\n !isLabelerRecordType(record)\n ) {\n return []\n }\n\n // Ignore if no labels defines\n if (\n !record.labels ||\n !isSelfLabelsType(record.labels) ||\n !record.labels.values.length\n ) {\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() as DatetimeString)\n return record.labels.values.map(({ val }) => {\n return { src, uri, cid, val, cts }\n })\n }\n\n labeler(\n did: DidString,\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(did, app.bsky.labeler.service)\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() as DatetimeString,\n labels,\n }\n }\n\n labelerDetailed(\n did: DidString,\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: AtUriString,\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 getBlobCidString(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() as DatetimeString,\n }\n }\n\n threadgate(\n uri: AtUriString,\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 (!isListRuleType(rule)) return\n return this.listBasic(rule.list, state)\n }),\n }\n }\n\n post(\n uri: AtUriString,\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.did\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() as DatetimeString,\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(\n uri: AtUriString,\n state: HydrationState,\n ): Un$Typed<ReplyRef> | undefined {\n const postRecord = state.posts?.get(uri)?.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 (isPostViewType(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 (isPostViewType(root) && (childBlocks?.root || parentBlocks?.root)) {\n root = this.blockedPost(root.uri, root.author.did, state)\n }\n }\n let grandparentAuthor: ProfileViewBasic | undefined\n if (isPostViewType(parent)) {\n // @NOTE The \"parent.record\" property is of type \"unknown\" in the lexicon\n // schema, which means that it is typed as LexMap here. In order to avoid\n // (expensive) validation using \"isPostRecord(parent.record)\", we only\n // check that the \"$type\" property is a post record type, then use a\n // try/catch to \"validate\" the post uri.\n if (isPostRecordType(parent.record) && parent.record.reply != null) {\n const uri = (parent.record.reply as any).parent?.uri\n if (typeof uri === 'string') {\n try {\n grandparentAuthor = this.profileBasic(creatorFromUri(uri), state)\n } catch {\n // ignore (just as if validation had failed)\n }\n }\n }\n }\n return {\n root,\n parent,\n grandparentAuthor,\n }\n }\n\n maybePost(uri: AtUriString, 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 app.bsky.feed.defs.postView.$build(post)\n }\n\n blockedPost(\n uri: AtUriString,\n authorDid: DidString,\n state: HydrationState,\n ): $Typed<BlockedPost> {\n return app.bsky.feed.defs.blockedPost.$build({\n uri,\n blocked: true,\n author: {\n did: authorDid,\n viewer: this.blockedProfileViewer(authorDid, state),\n },\n })\n }\n\n notFoundPost(uri: AtUriString): $Typed<NotFoundPost> {\n return app.bsky.feed.defs.notFoundPost.$build({\n uri,\n notFound: true,\n })\n }\n\n reasonRepost(\n uri: AtUriString,\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 app.bsky.feed.defs.reasonRepost.$build({\n by: creator,\n uri,\n cid: repost.cid,\n indexedAt: this.indexedAt(repost).toISOString() as DatetimeString,\n })\n }\n\n reasonPin(): $Typed<ReasonPin> {\n return app.bsky.feed.defs.reasonPin.$build({})\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 !== app.bsky.feed.post.$type) return\n\n const item = this.maybePost(atUri.href, state)\n return {\n createdAt: bookmark.indexedAt\n ? (bookmark.indexedAt.toISOString() as DatetimeString)\n : undefined,\n subject: {\n uri: atUri.href,\n cid: bookmark.subjectCid,\n },\n item,\n }\n }\n\n // Threads\n // ------------\n\n thread(\n skele: { anchor: AtUriString; uris: AtUriString[] },\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<AtUriString, AtUriString[]> = {}\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 app.bsky.feed.defs.threadViewPost.$build({\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: AtUriString,\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 app.bsky.feed.defs.threadViewPost.$build({\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: AtUriString,\n rootUri: AtUriString,\n childrenByParentUri: Record<AtUriString, AtUriString[]>,\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 app.bsky.feed.defs.threadViewPost.$build({\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: AtUriString; uris: AtUriString[] },\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?.features.checkGate(\n state.ctx.features.Gate.ThreadsReplyRankingExplorationEnable,\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: AtUriString\n opDid: DidString\n rootUri: AtUriString\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: AtUriString\n isOPThread: boolean\n opDid: string\n rootUri: AtUriString\n childrenByParentUri: Record<AtUriString, AtUriString[]>\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: AtUriString[] = 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: AtUriString\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: app.bsky.unspecced.defs.threadItemPost.$build({\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: AtUriString\n depth: number\n }): ThreadItemValueNoUnauthenticated {\n return {\n uri,\n depth,\n value: app.bsky.unspecced.defs.threadItemNoUnauthenticated.$build({}),\n }\n }\n\n private threadV2ItemNotFound({\n uri,\n depth,\n }: {\n uri: AtUriString\n depth: number\n }): ThreadItemValueNotFound {\n return {\n uri,\n depth,\n value: app.bsky.unspecced.defs.threadItemNotFound.$build({}),\n }\n }\n\n private threadV2ItemBlocked({\n uri,\n depth,\n authorDid,\n state,\n }: {\n uri: AtUriString\n depth: number\n authorDid: DidString\n state: HydrationState\n }): ThreadItemValueBlocked {\n return {\n uri,\n depth,\n value: app.bsky.unspecced.defs.threadItemBlocked.$build({\n author: {\n did: authorDid,\n viewer: this.blockedProfileViewer(authorDid, state),\n },\n }),\n }\n }\n\n threadOtherV2(\n skeleton: { anchor: AtUriString; uris: AtUriString[] },\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?.features.checkGate(\n state.ctx.features.Gate.ThreadsReplyRankingExplorationEnable,\n ),\n )\n }\n\n private threadOtherV2Replies(\n {\n parentUri,\n rootUri,\n childrenByParentUri,\n below,\n depth,\n }: {\n parentUri: AtUriString\n rootUri: AtUriString\n childrenByParentUri: Record<AtUriString, AtUriString[]>\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: AtUriString[] = 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: AtUriString\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: AtUriString\n }): ThreadOtherItemValuePost {\n const base = this.threadOtherV2ItemPostAnchor({ depth, uri })\n return {\n ...base,\n value: app.bsky.unspecced.defs.threadItemPost.$build({\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: AtUriString\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: AtUriString\n uri: AtUriString\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?.features.checkGate(\n state.ctx.features.Gate.ThreadsReplyRankingExplorationEnable,\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 isPostRecordType(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: AtUriString,\n uris: AtUriString[],\n state: HydrationState,\n ): Record<AtUriString, AtUriString[]> {\n // Groups children of each parent.\n const includedPosts = new Set<AtUriString>([anchorUri])\n const childrenByParentUri: Record<AtUriString, AtUriString[]> = {}\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: AtUriString,\n embed: $Typed<Embed> | Unknown$TypedObject,\n state: HydrationState,\n depth: number,\n ): $Typed<EmbedView> | undefined {\n if (isImagesEmbedType(embed)) {\n return this.imagesEmbed(creatorFromUri(postUri), embed)\n } else if (isVideoEmbedType(embed)) {\n return this.videoEmbed(creatorFromUri(postUri), embed)\n } else if (isGalleryEmbedType(embed)) {\n return this.galleryEmbed(creatorFromUri(postUri), embed)\n } else if (isExternalEmbedType(embed)) {\n return this.externalEmbed(creatorFromUri(postUri), embed, state)\n } else if (isRecordEmbedType(embed)) {\n return this.recordEmbed(postUri, embed, state, depth)\n } else if (isRecordWithMediaType(embed)) {\n return this.recordWithMediaEmbed(postUri, embed, state, depth)\n } else {\n return undefined\n }\n }\n\n imagesEmbed(did: DidString, embed: ImagesEmbed): $Typed<ImagesEmbedView> {\n const imgViews = embed.images.map((img) => ({\n thumb: this.imgUriBuilder.getPresetUri(\n 'feed_thumbnail',\n did,\n getBlobCidString(img.image),\n ),\n fullsize: this.imgUriBuilder.getPresetUri(\n 'feed_fullsize',\n did,\n getBlobCidString(img.image),\n ),\n alt: img.alt,\n aspectRatio: img.aspectRatio,\n }))\n return app.bsky.embed.images.view.$build({\n images: imgViews,\n })\n }\n\n videoEmbed(did: DidString, embed: VideoEmbed): $Typed<VideoEmbedView> {\n const cid = getBlobCidString(embed.video)\n return app.bsky.embed.video.view.$build({\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 presentation: embed.presentation,\n })\n }\n\n galleryEmbed(did: DidString, embed: GalleryEmbed): $Typed<GalleryEmbedView> {\n // The lexicon's schema-level cap is 20, but clients are expected to\n // enforce a soft limit of 10. Trim defensively at the view boundary so\n // viewers see at most 10 items regardless of what was authored.\n const items = embed.items.slice(0, GALLERY_SOFT_LIMIT).flatMap((item) => {\n const view = this.galleryItemView(did, item)\n return view ? [view] : []\n })\n return app.bsky.embed.gallery.view.$build({ items })\n }\n\n private galleryItemView(\n did: DidString,\n item: GalleryEmbed['items'][number],\n ): $Typed<GalleryImageEmbedView> | undefined {\n if (isGalleryImageEmbedType(item)) {\n return this.galleryImageView(did, item)\n }\n return undefined\n }\n\n private galleryImageView(\n did: DidString,\n item: GalleryImageEmbed,\n ): $Typed<GalleryImageEmbedView> {\n return app.bsky.embed.gallery.viewImage.$build({\n thumbnail: this.imgUriBuilder.getPresetUri(\n 'feed_thumbnail',\n did,\n getBlobCidString(item.image),\n ),\n fullsize: this.imgUriBuilder.getPresetUri(\n 'feed_fullsize',\n did,\n getBlobCidString(item.image),\n ),\n alt: item.alt,\n aspectRatio: item.aspectRatio,\n })\n }\n\n externalEmbed(\n did: DidString,\n embed: ExternalEmbed,\n state: HydrationState,\n ): $Typed<ExternalEmbedView> {\n // Start from the post-author-supplied embed values, then spread the\n // SS-derived view on top so any field the hydrated doc/publication\n // supplies wins (title, description, thumb, source, etc). When no SS\n // records were hydrated `ssView` is `undefined` and the spread is a\n // no-op, leaving the base values in place. `associatedRefs` is set\n // last because the post is authoritative about what was pinned.\n const ssView = this.externalEmbedFromStandardSite({\n associatedRefs: embed.external.associatedRefs,\n state,\n assumedUrl: embed.external.uri,\n })\n // The author-supplied (scraped) thumbnail always wins when present —\n // it's the per-article OG image. Only when the embed has no thumb do\n // we fall back to whatever the SS overlay provides (the document's\n // `coverImage`). `thumb` is set after the `...ssView` spread so the\n // overlay's `coverImage`-derived thumb can't clobber the embed's.\n const embeddedThumb = embed.external.thumb\n ? this.imgUriBuilder.getPresetUri(\n 'feed_thumbnail',\n did,\n getBlobCidString(embed.external.thumb),\n )\n : undefined\n return app.bsky.embed.external.view.$build({\n external: {\n uri: embed.external.uri,\n title: embed.external.title,\n description: embed.external.description,\n ...ssView,\n thumb: embeddedThumb ?? ssView?.thumb,\n associatedRefs: embed.external.associatedRefs,\n },\n })\n }\n\n /**\n * Read-path entry point: caller has the post's `external.associatedRefs[]`\n * and the global hydration state, and we resolve the matching SS records\n * by ref. Used by `externalEmbed`.\n *\n * Returns a fully-populated `viewExternal['external']` shape (including\n * the required `uri`/`title`/`description`), or `undefined` if the\n * records didn't hydrate, didn't pass URL validation, or couldn't\n * supply the required fields. Callers spread the result over a base\n * view to layer SS-derived fields on top of post-author-supplied ones.\n *\n * `assumedUrl` is the canonical web URL the embed claims to represent\n * (the post's `external.uri` on the read path, the request's `url` on\n * compose). Validation logic uses it to confirm the SS records actually\n * back that URL, and the same value is echoed back as `uri` on the\n * returned overlay.\n */\n externalEmbedFromStandardSite({\n associatedRefs,\n state,\n assumedUrl,\n }: {\n associatedRefs: ExternalEmbed['external']['associatedRefs']\n state: HydrationState\n assumedUrl: string\n }): ExternalEmbedView['external'] | undefined {\n const { document, publication } =\n getSiteStandardRecordsFromHydrationMapsByRefs(\n associatedRefs,\n state.siteStandardDocuments,\n state.siteStandardPublications,\n )\n return this.externalEmbedFromStandardSiteRecords({\n document,\n publication,\n state,\n assumedUrl,\n })\n }\n\n /**\n * Compose-path entry point: caller already knows which document and\n * publication backed the request and has them in hand (e.g. from\n * iterating the SS hydration maps directly). Skips the by-ref lookup\n * that `externalEmbedFromStandardSite` does. Used by\n * `getEmbedExternalView`.\n *\n * Returns a fully-populated `viewExternal['external']` shape (including\n * the required `uri`/`title`/`description`), or `undefined` if any of\n * the validation gates rejected the pair or the records couldn't\n * supply the required fields.\n *\n * `state` is still needed for label hydration. `assumedUrl` is the\n * canonical web URL the embed claims to represent (the post's\n * `external.uri` on the read path, the request's `url` on compose);\n * validation logic uses it to confirm the SS records actually back that\n * URL, and the same value is echoed back as `uri` on the returned\n * overlay.\n */\n externalEmbedFromStandardSiteRecords({\n document,\n publication,\n state,\n assumedUrl,\n }: {\n document: AssociatedSiteStandardRecord<SiteStandardDocument> | undefined\n publication:\n | AssociatedSiteStandardRecord<SiteStandardPublication>\n | undefined\n state: HydrationState\n assumedUrl: string\n }): ExternalEmbedView['external'] | undefined {\n // Three layers of validation gate this overlay:\n //\n // 1. Hydrator nulls taken-down records and mirrors the null across\n // doc/pub pairs (see `actionSiteStandardTakedownLabels` in\n // `hydration/hydrator.ts`).\n // 2. The lookups guarantee structural agreement between doc and pub\n // — matching `site`/`uri`, no orphan doc claiming a missing\n // publication (see `getSiteStandardRecordsFromHydrationMapsByRefs`\n // and `…ByDocumentUri` in `hydration/external.ts`).\n // 3. `validateStandardSiteForUrl` below checks that the records back\n // the URL the embed claims (see `util/standard-site.ts`).\n //\n // If any layer rejected, callers see `undefined` and fall back to the\n // bare embed rather than render partial / disagreeing enrichment.\n if (!document && !publication) return undefined\n if (!validateStandardSiteForUrl(document, publication, assumedUrl)) {\n viewsLogger.warn(\n {\n documentUri: document?.ref.uri,\n publicationUri: publication?.ref.uri,\n },\n 'site.standard URL validation failed',\n )\n return undefined\n }\n\n // viewExternal requires `title` and `description`. If neither side of\n // the pair supplies usable values for both, there's no enrichment to\n // render — return undefined and let the caller fall back.\n let title: string\n let description: string\n if (document?.info.record) {\n // Treat the document as authoritative for both fields as a unit, so\n // we never blend a doc's title with a publication's description.\n title = document.info.record.title\n description = document.info.record.description ?? ''\n } else if (publication) {\n title = publication.info.record.name\n description = publication.info.record.description ?? ''\n } else {\n return undefined\n }\n\n // if we don't have a title at this point, something is wrong with the SS\n // record (it's a required field) and therefore the enrichment isn't worth\n // showing\n if (!title) return undefined\n\n const overlay: ExternalEmbedView['external'] = {\n // @ts-ignore this is mis-typed\n uri: assumedUrl,\n title,\n description,\n }\n\n const docCover = document?.info.record.coverImage\n if (docCover) {\n overlay.thumb = this.imgUriBuilder.getPresetUri(\n 'feed_thumbnail',\n creatorFromUri(document.ref.uri),\n getBlobCidString(docCover),\n )\n }\n\n if (document?.info.record.publishedAt) {\n overlay.createdAt = document.info.record.publishedAt\n }\n if (document?.info.record.updatedAt) {\n overlay.updatedAt = document.info.record.updatedAt\n }\n const readingTime = document?.info.record.textContent\n ? estimateReadingTimeMinutes(document.info.record.textContent)\n : undefined\n if (readingTime !== undefined) overlay.readingTime = readingTime\n\n // Merge labels applied to either the document or the publication onto the\n // same `viewExternal.labels` array — clients moderate the embed as single\n // unit, so doc-scoped and publication-scoped labels end up in the same\n // bucket.\n const labels = [\n ...(document ? state.labels?.getBySubject(document.ref.uri) ?? [] : []),\n ...(publication\n ? state.labels?.getBySubject(publication.ref.uri) ?? []\n : []),\n ]\n if (labels.length) overlay.labels = labels\n\n if (publication) {\n overlay.source = this.externalEmbedSource(publication)\n }\n\n // Profiles of the owners of the records backing this embed. Hydrator\n // covers these DIDs alongside post-author profiles, so misses here\n // only happen when an actor is unavailable (suspended, deleted, etc.)\n // — drop those rather than emit `undefined` slots.\n const uniqueDids = dedupeStrs(\n mapDefined([document?.ref.uri, publication?.ref.uri], (uri) =>\n uri ? uriToDid(uri) : undefined,\n ) as DidString[],\n )\n const associatedProfiles = mapDefined(uniqueDids, (did) =>\n this.profileBasic(did, state),\n ) as ProfileViewBasic[]\n if (associatedProfiles.length)\n overlay.associatedProfiles = associatedProfiles\n\n return overlay\n }\n\n externalEmbedSource(\n publication: AssociatedSiteStandardRecord<SiteStandardPublication>,\n ): $Typed<ExternalEmbedSourceView> {\n const { record } = publication.info\n const pubDid = creatorFromUri(publication.ref.uri)\n return app.bsky.embed.external.viewExternalSource.$build({\n uri: record.url,\n icon: record.icon\n ? this.imgUriBuilder.getPresetUri(\n 'avatar',\n pubDid,\n getBlobCidString(record.icon),\n )\n : undefined,\n title: record.name,\n description: record.description,\n theme: record.basicTheme\n ? externalEmbedSourceTheme(record.basicTheme)\n : undefined,\n })\n }\n\n embedNotFound(uri: AtUriString): $Typed<RecordEmbedView> {\n return app.bsky.embed.record.view.$build({\n record: app.bsky.embed.record.viewNotFound.$build({\n uri,\n notFound: true,\n }),\n })\n }\n\n embedDetached(uri: AtUriString): $Typed<RecordEmbedView> {\n return app.bsky.embed.record.view.$build({\n record: app.bsky.embed.record.viewDetached.$build({\n uri,\n detached: true,\n }),\n })\n }\n\n embedBlocked(\n uri: AtUriString,\n state: HydrationState,\n ): $Typed<RecordEmbedView> {\n const creator = creatorFromUri(uri)\n return app.bsky.embed.record.view.$build({\n record: app.bsky.embed.record.viewBlocked.$build({\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: AtUriString,\n state: HydrationState,\n depth: number,\n ): $Typed<PostEmbedView> | undefined {\n const postView = this.post(uri, state, depth)\n if (!postView) return\n return app.bsky.embed.record.viewRecord.$build({\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: AtUriString,\n embed: RecordEmbed,\n state: HydrationState,\n depth: number,\n withTypeTag: false,\n ): RecordEmbedView\n recordEmbed(\n postUri: AtUriString,\n embed: RecordEmbed,\n state: HydrationState,\n depth: number,\n withTypeTag?: true,\n ): $Typed<RecordEmbedView>\n recordEmbed(\n postUri: AtUriString,\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.did, 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 === app.bsky.feed.post.$type) {\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 === app.bsky.feed.generator.$type) {\n const view = this.feedGenerator(uri, state)\n if (!view) return this.embedNotFound(uri)\n return this.recordEmbedWrapper(\n app.bsky.feed.defs.generatorView.$build(view),\n withTypeTag,\n )\n } else if (parsedUri.collection === app.bsky.graph.list.$type) {\n const view = this.list(uri, state)\n if (!view) return this.embedNotFound(uri)\n return this.recordEmbedWrapper(\n app.bsky.graph.defs.listView.$build(view),\n withTypeTag,\n )\n } else if (parsedUri.collection === app.bsky.labeler.service.$type) {\n const view = this.labeler(parsedUri.did, state)\n if (!view) return this.embedNotFound(uri)\n return this.recordEmbedWrapper(\n app.bsky.labeler.defs.labelerView.$build(view),\n withTypeTag,\n )\n } else if (parsedUri.collection === app.bsky.graph.starterpack.$type) {\n const view = this.starterPackBasic(uri, state)\n if (!view) return this.embedNotFound(uri)\n return this.recordEmbedWrapper(\n app.bsky.graph.defs.starterPackViewBasic.$build(view),\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 ): RecordEmbedView {\n return withTypeTag\n ? app.bsky.embed.record.view.$build({ record })\n : { record }\n }\n\n recordWithMediaEmbed(\n postUri: AtUriString,\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<GalleryEmbedView>\n | $Typed<ExternalEmbedView>\n if (isImagesEmbedType(embed.media)) {\n mediaEmbed = this.imagesEmbed(creator, embed.media)\n } else if (isVideoEmbedType(embed.media)) {\n mediaEmbed = this.videoEmbed(creator, embed.media)\n } else if (isGalleryEmbedType(embed.media)) {\n mediaEmbed = this.galleryEmbed(creator, embed.media)\n } else if (isExternalEmbedType(embed.media)) {\n mediaEmbed = this.externalEmbed(creator, embed.media, state)\n } else {\n return\n }\n return app.bsky.embed.recordWithMedia.view.$build({\n media: mediaEmbed,\n record: this.recordEmbed(postUri, embed.record, state, depth, false),\n })\n }\n\n userReplyDisabled(\n uri: AtUriString,\n state: HydrationState,\n ): boolean | undefined {\n const post = state.posts?.get(uri)\n if (post?.violatesThreadGate) {\n return true\n }\n const rootUriStr = 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: AtUriString,\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: AtUriString, 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\n const author = this.profile(uri.did, 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 === app.bsky.feed.post.$type) {\n recordInfo = state.posts?.get(notif.uri as AtUriString)\n } else if (uri.collection === app.bsky.feed.like.$type) {\n recordInfo = state.likes?.get(notif.uri as AtUriString)\n } else if (uri.collection === app.bsky.feed.repost.$type) {\n recordInfo = state.reposts?.get(notif.uri as AtUriString)\n } else if (uri.collection === app.bsky.graph.follow.$type) {\n recordInfo = state.follows?.get(notif.uri as AtUriString)\n } else if (uri.collection === app.bsky.graph.verification.$type) {\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 as AtUriString) ?? {\n record: notificationDeletedRecord,\n cid: notificationDeletedRecordCid,\n }\n } else if (uri.collection === app.bsky.actor.profile.$type) {\n const actor = state.actors?.get(author.did)\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 } satisfies RecordInfo<ProfileRecord>)\n : undefined\n }\n if (!recordInfo) return\n\n const labels = state.labels?.getBySubject(notif.uri as AtUriString) ?? []\n const selfLabels = this.selfLabels({\n uri: parseString<AtUriString>(notif.uri),\n cid: recordInfo.cid,\n record: recordInfo.record,\n })\n const indexedAt = notif.timestamp.toDate().toISOString()\n return {\n uri: notif.uri as AtUriString,\n cid: recordInfo.cid,\n author,\n reason: notif.reason,\n reasonSubject: parseString<AtUriString>(notif.reasonSubject),\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() as DatetimeString,\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: AtUriString, post: Post): AtUriString => {\n return post.record.reply?.root.uri ?? uri\n}\n\nconst externalEmbedSourceTheme = (\n theme: SiteStandardPublicationRecord['basicTheme'],\n): ExternalEmbedSourceThemeView | undefined => {\n if (!theme) return undefined\n const view: ExternalEmbedSourceThemeView = {}\n const background = colorRGB(theme.background)\n const foreground = colorRGB(theme.foreground)\n const accent = colorRGB(theme.accent)\n const accentForeground = colorRGB(theme.accentForeground)\n if (background) view.backgroundRGB = background\n if (foreground) view.foregroundRGB = foreground\n if (accent) view.accentRGB = accent\n if (accentForeground) view.accentForegroundRGB = accentForeground\n // No fields set -> don't decorate the view at all.\n return Object.keys(view).length === 0 ? undefined : view\n}\n\nconst colorRGB = (\n color: { $type?: unknown } | undefined,\n): ExternalEmbedColorRgb | undefined => {\n if (!color || !site.standard.theme.color.rgb.isTypeOf(color)) return undefined\n // `isTypeOf` narrows $type but not the shape; pull rgb fields off the\n // unchecked input. Records that fail full validation are dropped above\n // by the SS record parser, so by the time we get here the shape matches.\n const { r, g, b } = color as unknown as { r: number; g: number; b: number }\n return app.bsky.embed.external.colorRGB.$build({ r, g, b })\n}\n"]}