@atproto/bsky 0.0.225 → 0.0.227

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 (360) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/api/app/bsky/bookmark/getBookmarks.d.ts.map +1 -1
  3. package/dist/api/app/bsky/bookmark/getBookmarks.js +1 -1
  4. package/dist/api/app/bsky/bookmark/getBookmarks.js.map +1 -1
  5. package/dist/api/app/bsky/contact/getMatches.d.ts.map +1 -1
  6. package/dist/api/app/bsky/contact/getMatches.js +1 -1
  7. package/dist/api/app/bsky/contact/getMatches.js.map +1 -1
  8. package/dist/api/app/bsky/feed/getTimeline.d.ts +2 -4
  9. package/dist/api/app/bsky/feed/getTimeline.d.ts.map +1 -1
  10. package/dist/api/app/bsky/feed/getTimeline.js +1 -1
  11. package/dist/api/app/bsky/feed/getTimeline.js.map +1 -1
  12. package/dist/api/app/bsky/graph/getBlocks.d.ts.map +1 -1
  13. package/dist/api/app/bsky/graph/getBlocks.js +1 -1
  14. package/dist/api/app/bsky/graph/getBlocks.js.map +1 -1
  15. package/dist/api/app/bsky/graph/getKnownFollowers.d.ts.map +1 -1
  16. package/dist/api/app/bsky/graph/getKnownFollowers.js +1 -1
  17. package/dist/api/app/bsky/graph/getKnownFollowers.js.map +1 -1
  18. package/dist/api/app/bsky/graph/getListBlocks.d.ts.map +1 -1
  19. package/dist/api/app/bsky/graph/getListBlocks.js +1 -1
  20. package/dist/api/app/bsky/graph/getListBlocks.js.map +1 -1
  21. package/dist/api/app/bsky/graph/getListMutes.d.ts.map +1 -1
  22. package/dist/api/app/bsky/graph/getListMutes.js +1 -1
  23. package/dist/api/app/bsky/graph/getListMutes.js.map +1 -1
  24. package/dist/api/app/bsky/graph/getListsWithMembership.js +1 -1
  25. package/dist/api/app/bsky/graph/getListsWithMembership.js.map +1 -1
  26. package/dist/api/app/bsky/graph/getMutes.d.ts.map +1 -1
  27. package/dist/api/app/bsky/graph/getMutes.js +1 -1
  28. package/dist/api/app/bsky/graph/getMutes.js.map +1 -1
  29. package/dist/api/app/bsky/graph/getStarterPacksWithMembership.js +1 -1
  30. package/dist/api/app/bsky/graph/getStarterPacksWithMembership.js.map +1 -1
  31. package/dist/api/app/bsky/notification/listActivitySubscriptions.js +1 -1
  32. package/dist/api/app/bsky/notification/listActivitySubscriptions.js.map +1 -1
  33. package/dist/api/app/bsky/notification/listNotifications.d.ts.map +1 -1
  34. package/dist/api/app/bsky/notification/listNotifications.js +1 -1
  35. package/dist/api/app/bsky/notification/listNotifications.js.map +1 -1
  36. package/dist/data-plane/client/index.d.ts.map +1 -1
  37. package/dist/data-plane/client/index.js +2 -0
  38. package/dist/data-plane/client/index.js.map +1 -1
  39. package/dist/data-plane/client/util.d.ts +2 -1
  40. package/dist/data-plane/client/util.d.ts.map +1 -1
  41. package/dist/data-plane/client/util.js +6 -1
  42. package/dist/data-plane/client/util.js.map +1 -1
  43. package/dist/data-plane/client/util.test.d.ts +2 -0
  44. package/dist/data-plane/client/util.test.d.ts.map +1 -0
  45. package/dist/data-plane/client/util.test.js +33 -0
  46. package/dist/data-plane/client/util.test.js.map +1 -0
  47. package/dist/data-plane/server/routes/profile.d.ts.map +1 -1
  48. package/dist/data-plane/server/routes/profile.js +3 -0
  49. package/dist/data-plane/server/routes/profile.js.map +1 -1
  50. package/dist/hydration/actor.d.ts +1 -0
  51. package/dist/hydration/actor.d.ts.map +1 -1
  52. package/dist/hydration/actor.js +1 -0
  53. package/dist/hydration/actor.js.map +1 -1
  54. package/dist/hydration/hydrator.d.ts +3 -0
  55. package/dist/hydration/hydrator.d.ts.map +1 -1
  56. package/dist/hydration/hydrator.js.map +1 -1
  57. package/dist/lexicons/app/bsky/actor/defs.defs.d.ts +1 -0
  58. package/dist/lexicons/app/bsky/actor/defs.defs.d.ts.map +1 -1
  59. package/dist/lexicons/app/bsky/actor/defs.defs.js +1 -0
  60. package/dist/lexicons/app/bsky/actor/defs.defs.js.map +1 -1
  61. package/dist/lexicons/chat/bsky/actor/declaration.defs.d.ts +14 -0
  62. package/dist/lexicons/chat/bsky/actor/declaration.defs.d.ts.map +1 -1
  63. package/dist/lexicons/chat/bsky/actor/declaration.defs.js +1 -0
  64. package/dist/lexicons/chat/bsky/actor/declaration.defs.js.map +1 -1
  65. package/dist/lexicons/chat/bsky/actor/defs.defs.d.ts +35 -0
  66. package/dist/lexicons/chat/bsky/actor/defs.defs.d.ts.map +1 -1
  67. package/dist/lexicons/chat/bsky/actor/defs.defs.js +17 -1
  68. package/dist/lexicons/chat/bsky/actor/defs.defs.js.map +1 -1
  69. package/dist/lexicons/chat/bsky/authFullChatClient.defs.js +1 -1
  70. package/dist/lexicons/chat/bsky/authFullChatClient.defs.js.map +1 -1
  71. package/dist/lexicons/chat/bsky/convo/acceptConvo.defs.d.ts +2 -1
  72. package/dist/lexicons/chat/bsky/convo/acceptConvo.defs.d.ts.map +1 -1
  73. package/dist/lexicons/chat/bsky/convo/acceptConvo.defs.js +2 -1
  74. package/dist/lexicons/chat/bsky/convo/acceptConvo.defs.js.map +1 -1
  75. package/dist/lexicons/chat/bsky/convo/addReaction.defs.d.ts +1 -1
  76. package/dist/lexicons/chat/bsky/convo/addReaction.defs.d.ts.map +1 -1
  77. package/dist/lexicons/chat/bsky/convo/addReaction.defs.js +7 -1
  78. package/dist/lexicons/chat/bsky/convo/addReaction.defs.js.map +1 -1
  79. package/dist/lexicons/chat/bsky/convo/defs.defs.d.ts +470 -3
  80. package/dist/lexicons/chat/bsky/convo/defs.defs.d.ts.map +1 -1
  81. package/dist/lexicons/chat/bsky/convo/defs.defs.js +235 -2
  82. package/dist/lexicons/chat/bsky/convo/defs.defs.js.map +1 -1
  83. package/dist/lexicons/chat/bsky/convo/deleteMessageForSelf.defs.d.ts +2 -1
  84. package/dist/lexicons/chat/bsky/convo/deleteMessageForSelf.defs.d.ts.map +1 -1
  85. package/dist/lexicons/chat/bsky/convo/deleteMessageForSelf.defs.js +2 -1
  86. package/dist/lexicons/chat/bsky/convo/deleteMessageForSelf.defs.js.map +1 -1
  87. package/dist/lexicons/chat/bsky/convo/getConvo.defs.d.ts +2 -1
  88. package/dist/lexicons/chat/bsky/convo/getConvo.defs.d.ts.map +1 -1
  89. package/dist/lexicons/chat/bsky/convo/getConvo.defs.js +2 -1
  90. package/dist/lexicons/chat/bsky/convo/getConvo.defs.js.map +1 -1
  91. package/dist/lexicons/chat/bsky/convo/getConvoAvailability.defs.d.ts +1 -1
  92. package/dist/lexicons/chat/bsky/convo/getConvoAvailability.defs.d.ts.map +1 -1
  93. package/dist/lexicons/chat/bsky/convo/getConvoAvailability.defs.js +1 -1
  94. package/dist/lexicons/chat/bsky/convo/getConvoAvailability.defs.js.map +1 -1
  95. package/dist/lexicons/chat/bsky/convo/getConvoForMembers.defs.d.ts +2 -1
  96. package/dist/lexicons/chat/bsky/convo/getConvoForMembers.defs.d.ts.map +1 -1
  97. package/dist/lexicons/chat/bsky/convo/getConvoForMembers.defs.js +8 -1
  98. package/dist/lexicons/chat/bsky/convo/getConvoForMembers.defs.js.map +1 -1
  99. package/dist/lexicons/chat/bsky/convo/getConvoMembers.d.ts +3 -0
  100. package/dist/lexicons/chat/bsky/convo/getConvoMembers.d.ts.map +1 -0
  101. package/dist/lexicons/chat/bsky/convo/getConvoMembers.defs.d.ts +26 -0
  102. package/dist/lexicons/chat/bsky/convo/getConvoMembers.defs.d.ts.map +1 -0
  103. package/dist/lexicons/chat/bsky/convo/getConvoMembers.defs.js +55 -0
  104. package/dist/lexicons/chat/bsky/convo/getConvoMembers.defs.js.map +1 -0
  105. package/dist/lexicons/chat/bsky/convo/getConvoMembers.js +45 -0
  106. package/dist/lexicons/chat/bsky/convo/getConvoMembers.js.map +1 -0
  107. package/dist/lexicons/chat/bsky/convo/getLog.defs.d.ts +2 -2
  108. package/dist/lexicons/chat/bsky/convo/getLog.defs.d.ts.map +1 -1
  109. package/dist/lexicons/chat/bsky/convo/getLog.defs.js +17 -0
  110. package/dist/lexicons/chat/bsky/convo/getLog.defs.js.map +1 -1
  111. package/dist/lexicons/chat/bsky/convo/getMessages.defs.d.ts +4 -3
  112. package/dist/lexicons/chat/bsky/convo/getMessages.defs.d.ts.map +1 -1
  113. package/dist/lexicons/chat/bsky/convo/getMessages.defs.js +3 -1
  114. package/dist/lexicons/chat/bsky/convo/getMessages.defs.js.map +1 -1
  115. package/dist/lexicons/chat/bsky/convo/leaveConvo.defs.d.ts +2 -1
  116. package/dist/lexicons/chat/bsky/convo/leaveConvo.defs.d.ts.map +1 -1
  117. package/dist/lexicons/chat/bsky/convo/leaveConvo.defs.js +2 -1
  118. package/dist/lexicons/chat/bsky/convo/leaveConvo.defs.js.map +1 -1
  119. package/dist/lexicons/chat/bsky/convo/listConvoRequests.d.ts +3 -0
  120. package/dist/lexicons/chat/bsky/convo/listConvoRequests.d.ts.map +1 -0
  121. package/dist/lexicons/chat/bsky/convo/listConvoRequests.defs.d.ts +25 -0
  122. package/dist/lexicons/chat/bsky/convo/listConvoRequests.defs.d.ts.map +1 -0
  123. package/dist/lexicons/chat/bsky/convo/listConvoRequests.defs.js +58 -0
  124. package/dist/lexicons/chat/bsky/convo/listConvoRequests.defs.js.map +1 -0
  125. package/dist/lexicons/chat/bsky/convo/listConvoRequests.js +45 -0
  126. package/dist/lexicons/chat/bsky/convo/listConvoRequests.js.map +1 -0
  127. package/dist/lexicons/chat/bsky/convo/listConvos.defs.d.ts +7 -0
  128. package/dist/lexicons/chat/bsky/convo/listConvos.defs.d.ts.map +1 -1
  129. package/dist/lexicons/chat/bsky/convo/listConvos.defs.js +2 -0
  130. package/dist/lexicons/chat/bsky/convo/listConvos.defs.js.map +1 -1
  131. package/dist/lexicons/chat/bsky/convo/lockConvo.d.ts +3 -0
  132. package/dist/lexicons/chat/bsky/convo/lockConvo.d.ts.map +1 -0
  133. package/dist/lexicons/chat/bsky/convo/lockConvo.defs.d.ts +22 -0
  134. package/dist/lexicons/chat/bsky/convo/lockConvo.defs.d.ts.map +1 -0
  135. package/dist/lexicons/chat/bsky/convo/lockConvo.defs.js +50 -0
  136. package/dist/lexicons/chat/bsky/convo/lockConvo.defs.js.map +1 -0
  137. package/dist/lexicons/chat/bsky/convo/lockConvo.js +45 -0
  138. package/dist/lexicons/chat/bsky/convo/lockConvo.js.map +1 -0
  139. package/dist/lexicons/chat/bsky/convo/muteConvo.defs.d.ts +2 -1
  140. package/dist/lexicons/chat/bsky/convo/muteConvo.defs.d.ts.map +1 -1
  141. package/dist/lexicons/chat/bsky/convo/muteConvo.defs.js +2 -1
  142. package/dist/lexicons/chat/bsky/convo/muteConvo.defs.js.map +1 -1
  143. package/dist/lexicons/chat/bsky/convo/removeReaction.defs.d.ts +1 -1
  144. package/dist/lexicons/chat/bsky/convo/removeReaction.defs.d.ts.map +1 -1
  145. package/dist/lexicons/chat/bsky/convo/removeReaction.defs.js +6 -1
  146. package/dist/lexicons/chat/bsky/convo/removeReaction.defs.js.map +1 -1
  147. package/dist/lexicons/chat/bsky/convo/sendMessage.defs.d.ts +2 -1
  148. package/dist/lexicons/chat/bsky/convo/sendMessage.defs.d.ts.map +1 -1
  149. package/dist/lexicons/chat/bsky/convo/sendMessage.defs.js +2 -1
  150. package/dist/lexicons/chat/bsky/convo/sendMessage.defs.js.map +1 -1
  151. package/dist/lexicons/chat/bsky/convo/sendMessageBatch.defs.d.ts +2 -1
  152. package/dist/lexicons/chat/bsky/convo/sendMessageBatch.defs.d.ts.map +1 -1
  153. package/dist/lexicons/chat/bsky/convo/sendMessageBatch.defs.js +2 -1
  154. package/dist/lexicons/chat/bsky/convo/sendMessageBatch.defs.js.map +1 -1
  155. package/dist/lexicons/chat/bsky/convo/unlockConvo.d.ts +3 -0
  156. package/dist/lexicons/chat/bsky/convo/unlockConvo.d.ts.map +1 -0
  157. package/dist/lexicons/chat/bsky/convo/unlockConvo.defs.d.ts +22 -0
  158. package/dist/lexicons/chat/bsky/convo/unlockConvo.defs.d.ts.map +1 -0
  159. package/dist/lexicons/chat/bsky/convo/unlockConvo.defs.js +50 -0
  160. package/dist/lexicons/chat/bsky/convo/unlockConvo.defs.js.map +1 -0
  161. package/dist/lexicons/chat/bsky/convo/unlockConvo.js +45 -0
  162. package/dist/lexicons/chat/bsky/convo/unlockConvo.js.map +1 -0
  163. package/dist/lexicons/chat/bsky/convo/unmuteConvo.defs.d.ts +2 -1
  164. package/dist/lexicons/chat/bsky/convo/unmuteConvo.defs.d.ts.map +1 -1
  165. package/dist/lexicons/chat/bsky/convo/unmuteConvo.defs.js +2 -1
  166. package/dist/lexicons/chat/bsky/convo/unmuteConvo.defs.js.map +1 -1
  167. package/dist/lexicons/chat/bsky/convo/updateAllRead.defs.d.ts +1 -0
  168. package/dist/lexicons/chat/bsky/convo/updateAllRead.defs.d.ts.map +1 -1
  169. package/dist/lexicons/chat/bsky/convo/updateAllRead.defs.js +1 -0
  170. package/dist/lexicons/chat/bsky/convo/updateAllRead.defs.js.map +1 -1
  171. package/dist/lexicons/chat/bsky/convo/updateRead.defs.d.ts +2 -1
  172. package/dist/lexicons/chat/bsky/convo/updateRead.defs.d.ts.map +1 -1
  173. package/dist/lexicons/chat/bsky/convo/updateRead.defs.js +2 -1
  174. package/dist/lexicons/chat/bsky/convo/updateRead.defs.js.map +1 -1
  175. package/dist/lexicons/chat/bsky/convo.d.ts +4 -0
  176. package/dist/lexicons/chat/bsky/convo.d.ts.map +1 -1
  177. package/dist/lexicons/chat/bsky/convo.js +5 -1
  178. package/dist/lexicons/chat/bsky/convo.js.map +1 -1
  179. package/dist/lexicons/chat/bsky/group/addMembers.d.ts +3 -0
  180. package/dist/lexicons/chat/bsky/group/addMembers.d.ts.map +1 -0
  181. package/dist/lexicons/chat/bsky/group/addMembers.defs.d.ts +31 -0
  182. package/dist/lexicons/chat/bsky/group/addMembers.defs.d.ts.map +1 -0
  183. package/dist/lexicons/chat/bsky/group/addMembers.defs.js +65 -0
  184. package/dist/lexicons/chat/bsky/group/addMembers.defs.js.map +1 -0
  185. package/dist/lexicons/chat/bsky/group/addMembers.js +45 -0
  186. package/dist/lexicons/chat/bsky/group/addMembers.js.map +1 -0
  187. package/dist/lexicons/chat/bsky/group/approveJoinRequest.d.ts +3 -0
  188. package/dist/lexicons/chat/bsky/group/approveJoinRequest.d.ts.map +1 -0
  189. package/dist/lexicons/chat/bsky/group/approveJoinRequest.defs.d.ts +28 -0
  190. package/dist/lexicons/chat/bsky/group/approveJoinRequest.defs.d.ts.map +1 -0
  191. package/dist/lexicons/chat/bsky/group/approveJoinRequest.defs.js +50 -0
  192. package/dist/lexicons/chat/bsky/group/approveJoinRequest.defs.js.map +1 -0
  193. package/dist/lexicons/chat/bsky/group/approveJoinRequest.js +45 -0
  194. package/dist/lexicons/chat/bsky/group/approveJoinRequest.js.map +1 -0
  195. package/dist/lexicons/chat/bsky/group/createGroup.d.ts +3 -0
  196. package/dist/lexicons/chat/bsky/group/createGroup.d.ts.map +1 -0
  197. package/dist/lexicons/chat/bsky/group/createGroup.defs.d.ts +36 -0
  198. package/dist/lexicons/chat/bsky/group/createGroup.defs.d.ts.map +1 -0
  199. package/dist/lexicons/chat/bsky/group/createGroup.defs.js +59 -0
  200. package/dist/lexicons/chat/bsky/group/createGroup.defs.js.map +1 -0
  201. package/dist/lexicons/chat/bsky/group/createGroup.js +45 -0
  202. package/dist/lexicons/chat/bsky/group/createGroup.js.map +1 -0
  203. package/dist/lexicons/chat/bsky/group/createJoinLink.d.ts +3 -0
  204. package/dist/lexicons/chat/bsky/group/createJoinLink.d.ts.map +1 -0
  205. package/dist/lexicons/chat/bsky/group/createJoinLink.defs.d.ts +26 -0
  206. package/dist/lexicons/chat/bsky/group/createJoinLink.defs.d.ts.map +1 -0
  207. package/dist/lexicons/chat/bsky/group/createJoinLink.defs.js +54 -0
  208. package/dist/lexicons/chat/bsky/group/createJoinLink.defs.js.map +1 -0
  209. package/dist/lexicons/chat/bsky/group/createJoinLink.js +45 -0
  210. package/dist/lexicons/chat/bsky/group/createJoinLink.js.map +1 -0
  211. package/dist/lexicons/chat/bsky/group/defs.d.ts +3 -0
  212. package/dist/lexicons/chat/bsky/group/defs.d.ts.map +1 -0
  213. package/dist/lexicons/chat/bsky/group/defs.defs.d.ts +47 -0
  214. package/dist/lexicons/chat/bsky/group/defs.defs.d.ts.map +1 -0
  215. package/dist/lexicons/chat/bsky/group/defs.defs.js +69 -0
  216. package/dist/lexicons/chat/bsky/group/defs.defs.js.map +1 -0
  217. package/dist/lexicons/chat/bsky/group/defs.js +45 -0
  218. package/dist/lexicons/chat/bsky/group/defs.js.map +1 -0
  219. package/dist/lexicons/chat/bsky/group/disableJoinLink.d.ts +3 -0
  220. package/dist/lexicons/chat/bsky/group/disableJoinLink.d.ts.map +1 -0
  221. package/dist/lexicons/chat/bsky/group/disableJoinLink.defs.d.ts +22 -0
  222. package/dist/lexicons/chat/bsky/group/disableJoinLink.defs.d.ts.map +1 -0
  223. package/dist/lexicons/chat/bsky/group/disableJoinLink.defs.js +50 -0
  224. package/dist/lexicons/chat/bsky/group/disableJoinLink.defs.js.map +1 -0
  225. package/dist/lexicons/chat/bsky/group/disableJoinLink.js +45 -0
  226. package/dist/lexicons/chat/bsky/group/disableJoinLink.js.map +1 -0
  227. package/dist/lexicons/chat/bsky/group/editGroup.d.ts +3 -0
  228. package/dist/lexicons/chat/bsky/group/editGroup.d.ts.map +1 -0
  229. package/dist/lexicons/chat/bsky/group/editGroup.defs.d.ts +32 -0
  230. package/dist/lexicons/chat/bsky/group/editGroup.defs.d.ts.map +1 -0
  231. package/dist/lexicons/chat/bsky/group/editGroup.defs.js +53 -0
  232. package/dist/lexicons/chat/bsky/group/editGroup.defs.js.map +1 -0
  233. package/dist/lexicons/chat/bsky/group/editGroup.js +45 -0
  234. package/dist/lexicons/chat/bsky/group/editGroup.js.map +1 -0
  235. package/dist/lexicons/chat/bsky/group/editJoinLink.d.ts +3 -0
  236. package/dist/lexicons/chat/bsky/group/editJoinLink.d.ts.map +1 -0
  237. package/dist/lexicons/chat/bsky/group/editJoinLink.defs.d.ts +26 -0
  238. package/dist/lexicons/chat/bsky/group/editJoinLink.defs.d.ts.map +1 -0
  239. package/dist/lexicons/chat/bsky/group/editJoinLink.defs.js +54 -0
  240. package/dist/lexicons/chat/bsky/group/editJoinLink.defs.js.map +1 -0
  241. package/dist/lexicons/chat/bsky/group/editJoinLink.js +45 -0
  242. package/dist/lexicons/chat/bsky/group/editJoinLink.js.map +1 -0
  243. package/dist/lexicons/chat/bsky/group/enableJoinLink.d.ts +3 -0
  244. package/dist/lexicons/chat/bsky/group/enableJoinLink.d.ts.map +1 -0
  245. package/dist/lexicons/chat/bsky/group/enableJoinLink.defs.d.ts +22 -0
  246. package/dist/lexicons/chat/bsky/group/enableJoinLink.defs.d.ts.map +1 -0
  247. package/dist/lexicons/chat/bsky/group/enableJoinLink.defs.js +50 -0
  248. package/dist/lexicons/chat/bsky/group/enableJoinLink.defs.js.map +1 -0
  249. package/dist/lexicons/chat/bsky/group/enableJoinLink.js +45 -0
  250. package/dist/lexicons/chat/bsky/group/enableJoinLink.js.map +1 -0
  251. package/dist/lexicons/chat/bsky/group/getGroupPublicInfo.d.ts +3 -0
  252. package/dist/lexicons/chat/bsky/group/getGroupPublicInfo.d.ts.map +1 -0
  253. package/dist/lexicons/chat/bsky/group/getGroupPublicInfo.defs.d.ts +20 -0
  254. package/dist/lexicons/chat/bsky/group/getGroupPublicInfo.defs.d.ts.map +1 -0
  255. package/dist/lexicons/chat/bsky/group/getGroupPublicInfo.defs.js +50 -0
  256. package/dist/lexicons/chat/bsky/group/getGroupPublicInfo.defs.js.map +1 -0
  257. package/dist/lexicons/chat/bsky/group/getGroupPublicInfo.js +45 -0
  258. package/dist/lexicons/chat/bsky/group/getGroupPublicInfo.js.map +1 -0
  259. package/dist/lexicons/chat/bsky/group/listJoinRequests.d.ts +3 -0
  260. package/dist/lexicons/chat/bsky/group/listJoinRequests.d.ts.map +1 -0
  261. package/dist/lexicons/chat/bsky/group/listJoinRequests.defs.d.ts +26 -0
  262. package/dist/lexicons/chat/bsky/group/listJoinRequests.defs.d.ts.map +1 -0
  263. package/dist/lexicons/chat/bsky/group/listJoinRequests.defs.js +55 -0
  264. package/dist/lexicons/chat/bsky/group/listJoinRequests.defs.js.map +1 -0
  265. package/dist/lexicons/chat/bsky/group/listJoinRequests.js +45 -0
  266. package/dist/lexicons/chat/bsky/group/listJoinRequests.js.map +1 -0
  267. package/dist/lexicons/chat/bsky/group/rejectJoinRequest.d.ts +3 -0
  268. package/dist/lexicons/chat/bsky/group/rejectJoinRequest.d.ts.map +1 -0
  269. package/dist/lexicons/chat/bsky/group/rejectJoinRequest.defs.d.ts +23 -0
  270. package/dist/lexicons/chat/bsky/group/rejectJoinRequest.defs.d.ts.map +1 -0
  271. package/dist/lexicons/chat/bsky/group/rejectJoinRequest.defs.js +14 -0
  272. package/dist/lexicons/chat/bsky/group/rejectJoinRequest.defs.js.map +1 -0
  273. package/dist/lexicons/chat/bsky/group/rejectJoinRequest.js +45 -0
  274. package/dist/lexicons/chat/bsky/group/rejectJoinRequest.js.map +1 -0
  275. package/dist/lexicons/chat/bsky/group/removeMembers.d.ts +3 -0
  276. package/dist/lexicons/chat/bsky/group/removeMembers.d.ts.map +1 -0
  277. package/dist/lexicons/chat/bsky/group/removeMembers.defs.d.ts +28 -0
  278. package/dist/lexicons/chat/bsky/group/removeMembers.defs.d.ts.map +1 -0
  279. package/dist/lexicons/chat/bsky/group/removeMembers.defs.js +53 -0
  280. package/dist/lexicons/chat/bsky/group/removeMembers.defs.js.map +1 -0
  281. package/dist/lexicons/chat/bsky/group/removeMembers.js +45 -0
  282. package/dist/lexicons/chat/bsky/group/removeMembers.js.map +1 -0
  283. package/dist/lexicons/chat/bsky/group/requestJoin.d.ts +3 -0
  284. package/dist/lexicons/chat/bsky/group/requestJoin.d.ts.map +1 -0
  285. package/dist/lexicons/chat/bsky/group/requestJoin.defs.d.ts +28 -0
  286. package/dist/lexicons/chat/bsky/group/requestJoin.defs.d.ts.map +1 -0
  287. package/dist/lexicons/chat/bsky/group/requestJoin.defs.js +58 -0
  288. package/dist/lexicons/chat/bsky/group/requestJoin.defs.js.map +1 -0
  289. package/dist/lexicons/chat/bsky/group/requestJoin.js +45 -0
  290. package/dist/lexicons/chat/bsky/group/requestJoin.js.map +1 -0
  291. package/dist/lexicons/chat/bsky/group.d.ts +15 -0
  292. package/dist/lexicons/chat/bsky/group.d.ts.map +1 -0
  293. package/dist/lexicons/chat/bsky/group.js +54 -0
  294. package/dist/lexicons/chat/bsky/group.js.map +1 -0
  295. package/dist/lexicons/chat/bsky/moderation/getMessageContext.defs.d.ts +2 -2
  296. package/dist/lexicons/chat/bsky/moderation/getMessageContext.defs.d.ts.map +1 -1
  297. package/dist/lexicons/chat/bsky/moderation/getMessageContext.defs.js +1 -0
  298. package/dist/lexicons/chat/bsky/moderation/getMessageContext.defs.js.map +1 -1
  299. package/dist/lexicons/chat/bsky/moderation/subscribeModEvents.d.ts +3 -0
  300. package/dist/lexicons/chat/bsky/moderation/subscribeModEvents.d.ts.map +1 -0
  301. package/dist/lexicons/chat/bsky/moderation/subscribeModEvents.defs.d.ts +32 -0
  302. package/dist/lexicons/chat/bsky/moderation/subscribeModEvents.defs.d.ts.map +1 -0
  303. package/dist/lexicons/chat/bsky/moderation/subscribeModEvents.defs.js +23 -0
  304. package/dist/lexicons/chat/bsky/moderation/subscribeModEvents.defs.js.map +1 -0
  305. package/dist/lexicons/chat/bsky/moderation/subscribeModEvents.js +45 -0
  306. package/dist/lexicons/chat/bsky/moderation/subscribeModEvents.js.map +1 -0
  307. package/dist/lexicons/chat/bsky/moderation.d.ts +1 -0
  308. package/dist/lexicons/chat/bsky/moderation.d.ts.map +1 -1
  309. package/dist/lexicons/chat/bsky/moderation.js +2 -1
  310. package/dist/lexicons/chat/bsky/moderation.js.map +1 -1
  311. package/dist/lexicons/chat/bsky.d.ts +1 -0
  312. package/dist/lexicons/chat/bsky.d.ts.map +1 -1
  313. package/dist/lexicons/chat/bsky.js +2 -1
  314. package/dist/lexicons/chat/bsky.js.map +1 -1
  315. package/dist/proto/bsky_pb.d.ts +4 -0
  316. package/dist/proto/bsky_pb.d.ts.map +1 -1
  317. package/dist/proto/bsky_pb.js +10 -0
  318. package/dist/proto/bsky_pb.js.map +1 -1
  319. package/dist/proto/bsync_connect.d.ts +10 -1
  320. package/dist/proto/bsync_connect.d.ts.map +1 -1
  321. package/dist/proto/bsync_connect.js +9 -0
  322. package/dist/proto/bsync_connect.js.map +1 -1
  323. package/dist/proto/bsync_pb.d.ts +38 -0
  324. package/dist/proto/bsync_pb.d.ts.map +1 -1
  325. package/dist/proto/bsync_pb.js +113 -1
  326. package/dist/proto/bsync_pb.js.map +1 -1
  327. package/dist/views/index.d.ts +2 -1
  328. package/dist/views/index.d.ts.map +1 -1
  329. package/dist/views/index.js +10 -8
  330. package/dist/views/index.js.map +1 -1
  331. package/dist/views/types.d.ts +1 -0
  332. package/dist/views/types.d.ts.map +1 -1
  333. package/dist/views/types.js.map +1 -1
  334. package/package.json +7 -7
  335. package/proto/bsky.proto +1 -0
  336. package/src/api/app/bsky/bookmark/getBookmarks.ts +3 -6
  337. package/src/api/app/bsky/contact/getMatches.ts +3 -6
  338. package/src/api/app/bsky/feed/getTimeline.ts +3 -6
  339. package/src/api/app/bsky/graph/getBlocks.ts +3 -6
  340. package/src/api/app/bsky/graph/getKnownFollowers.ts +3 -6
  341. package/src/api/app/bsky/graph/getListBlocks.ts +3 -6
  342. package/src/api/app/bsky/graph/getListMutes.ts +3 -6
  343. package/src/api/app/bsky/graph/getListsWithMembership.ts +3 -3
  344. package/src/api/app/bsky/graph/getMutes.ts +3 -6
  345. package/src/api/app/bsky/graph/getStarterPacksWithMembership.ts +3 -3
  346. package/src/api/app/bsky/notification/listActivitySubscriptions.ts +3 -3
  347. package/src/api/app/bsky/notification/listNotifications.ts +3 -6
  348. package/src/data-plane/client/index.ts +2 -0
  349. package/src/data-plane/client/util.test.ts +39 -0
  350. package/src/data-plane/client/util.ts +9 -1
  351. package/src/data-plane/server/routes/profile.ts +4 -0
  352. package/src/hydration/actor.ts +2 -0
  353. package/src/hydration/hydrator.ts +2 -0
  354. package/src/proto/bsky_pb.ts +6 -0
  355. package/src/proto/bsync_connect.ts +10 -1
  356. package/src/proto/bsync_pb.ts +80 -0
  357. package/src/views/index.ts +11 -8
  358. package/src/views/types.ts +1 -0
  359. package/tests/views/profile.test.ts +64 -0
  360. package/tsconfig.build.tsbuildinfo +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/views/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { HOUR, MINUTE, mapDefined } from '@atproto/common'\nimport {\n $Typed,\n Un$Typed,\n Unknown$TypedObject,\n UriString,\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'\nimport { FeedItem, Like, Post, Repost } from '../hydration/feed'\nimport { Follow, Verification } from '../hydration/graph'\nimport { HydrationState } from '../hydration/hydrator'\nimport { Label } from '../hydration/label'\nimport { RecordInfo, parseString } from '../hydration/util'\nimport { ImageUriBuilder } from '../image/uri'\nimport { app } from '../lexicons/index.js'\nimport { Notification } from '../proto/bsky_pb'\nimport {\n postUriToPostgateUri,\n postUriToThreadgateUri,\n safePinnedPost,\n uriToDid,\n uriToDid as creatorFromUri,\n} from '../util/uris'\nimport {\n ThreadItemValueBlocked,\n ThreadItemValueNoUnauthenticated,\n ThreadItemValueNotFound,\n ThreadItemValuePost,\n ThreadOtherAnchorPostNode,\n ThreadOtherItemValuePost,\n ThreadOtherPostNode,\n ThreadTree,\n ThreadTreeVisible,\n sortTrimFlattenThreadTree,\n} from './threads-v2'\nimport {\n ActivitySubscription,\n BlockedPost,\n BookmarkView,\n Embed,\n EmbedView,\n ExternalEmbed,\n ExternalEmbedView,\n FeedViewPost,\n FollowRecord,\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 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 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 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'\n\nconst notificationDeletedRecord =\n app.bsky.notification.defs.recordDeleted.$build({})\n\n// Pre-computed CID for the `notificationDeletedRecord`.\nconst notificationDeletedRecordCid =\n 'bafyreidad6nyekfa4a67yfb573ptxiv6s7kyxyg2ra6qbbemcruadvtuim'\n\nexport class Views {\n public imgUriBuilder: ImageUriBuilder = this.opts.imgUriBuilder\n public videoUriBuilder: VideoUriBuilder = this.opts.videoUriBuilder\n public indexedAtEpoch: Date | undefined = this.opts.indexedAtEpoch\n private threadTagsBumpDown: readonly string[] = this.opts.threadTagsBumpDown\n private threadTagsHide: readonly string[] = this.opts.threadTagsHide\n private visibilityTagHide: string = this.opts.visibilityTagHide\n private visibilityTagRankPrefix: string = this.opts.visibilityTagRankPrefix\n constructor(\n private opts: {\n imgUriBuilder: ImageUriBuilder\n videoUriBuilder: VideoUriBuilder\n indexedAtEpoch: Date | undefined\n threadTagsBumpDown: readonly string[]\n threadTagsHide: readonly string[]\n visibilityTagHide: string\n visibilityTagRankPrefix: string\n },\n ) {}\n\n // Actor\n // ------------\n\n actorIsNoHosted(did: 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 // @TODO apply default chat policy?\n chat: actor.allowIncomingChatsFrom\n ? { allowIncoming: actor.allowIncomingChatsFrom }\n : undefined,\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.make(\n did,\n app.bsky.actor.profile.$nsid,\n 'self',\n ).toString()\n const labels = [\n ...(state.labels?.getBySubject(did) ?? []),\n ...(state.labels?.getBySubject(profileUri) ?? []),\n ...this.selfLabels({\n uri: profileUri,\n cid: actor.profileCid?.toString(),\n record: actor.profile,\n }),\n ]\n return {\n did,\n handle: actor.handle ?? INVALID_HANDLE,\n displayName: actor.profile?.displayName,\n pronouns: actor.profile?.pronouns,\n avatar: actor.profile?.avatar\n ? this.imgUriBuilder.getPresetUri(\n 'avatar',\n did,\n 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 // @TODO apply default chat policy?\n chat: actor.allowIncomingChatsFrom\n ? { allowIncoming: actor.allowIncomingChatsFrom }\n : undefined,\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 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 const isValid =\n !!displayName &&\n displayName === actor.profile?.displayName &&\n !!handle &&\n handle === actor.handle\n\n return {\n issuer,\n uri,\n isValid,\n createdAt,\n }\n },\n )\n const hasValidVerification = verifications.some((v) => v.isValid)\n\n const verifiedStatus = verifications.length\n ? hasValidVerification && !isImpersonation\n ? 'valid'\n : 'invalid'\n : 'none'\n const trustedVerifierStatus = actor.trustedVerifier\n ? isImpersonation\n ? 'invalid'\n : 'valid'\n : 'none'\n\n if (\n verifications.length === 0 &&\n verifiedStatus === 'none' &&\n trustedVerifierStatus === 'none'\n ) {\n return undefined\n }\n\n return {\n verifications,\n verifiedStatus,\n trustedVerifierStatus,\n }\n }\n\n status(did: 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.make(did, app.bsky.actor.status.$nsid, 'self').toString()\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)\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.make(\n did,\n app.bsky.labeler.service.$type,\n 'self',\n ).toString()\n const labels = [\n ...(state.labels?.getBySubject(uri) ?? []),\n ...this.selfLabels({\n uri,\n cid: labeler.cid.toString(),\n record: labeler.record,\n }),\n ]\n\n return {\n uri,\n cid: labeler.cid.toString(),\n creator,\n likeCount: aggs?.likes ?? 0,\n viewer: viewer\n ? {\n like: viewer.like,\n }\n : undefined,\n indexedAt: this.indexedAt(labeler).toISOString() 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 (isExternalEmbedType(embed)) {\n return this.externalEmbed(creatorFromUri(postUri), embed)\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 externalEmbed(\n did: DidString,\n embed: ExternalEmbed,\n ): $Typed<ExternalEmbedView> {\n const { uri, title, description, thumb } = embed.external\n return app.bsky.embed.external.view.$build({\n external: {\n uri,\n title,\n description,\n thumb: thumb\n ? this.imgUriBuilder.getPresetUri(\n 'feed_thumbnail',\n did,\n getBlobCidString(thumb),\n )\n : undefined,\n },\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<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 (isExternalEmbedType(embed.media)) {\n mediaEmbed = this.externalEmbed(creator, embed.media)\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"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/views/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { HOUR, MINUTE, mapDefined } from '@atproto/common'\nimport {\n $Typed,\n Un$Typed,\n Unknown$TypedObject,\n UriString,\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'\nimport { FeedItem, Like, Post, Repost } from '../hydration/feed'\nimport { Follow, Verification } from '../hydration/graph'\nimport { HydrationState } from '../hydration/hydrator'\nimport { Label } from '../hydration/label'\nimport { RecordInfo, parseString } from '../hydration/util'\nimport { ImageUriBuilder } from '../image/uri'\nimport { app } from '../lexicons/index.js'\nimport { Notification } from '../proto/bsky_pb'\nimport {\n postUriToPostgateUri,\n postUriToThreadgateUri,\n safePinnedPost,\n uriToDid,\n uriToDid as creatorFromUri,\n} from '../util/uris'\nimport {\n ThreadItemValueBlocked,\n ThreadItemValueNoUnauthenticated,\n ThreadItemValueNotFound,\n ThreadItemValuePost,\n ThreadOtherAnchorPostNode,\n ThreadOtherItemValuePost,\n ThreadOtherPostNode,\n ThreadTree,\n ThreadTreeVisible,\n sortTrimFlattenThreadTree,\n} from './threads-v2'\nimport {\n ActivitySubscription,\n BlockedPost,\n BookmarkView,\n Embed,\n EmbedView,\n ExternalEmbed,\n ExternalEmbedView,\n FeedViewPost,\n FollowRecord,\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 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 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'\n\nconst notificationDeletedRecord =\n app.bsky.notification.defs.recordDeleted.$build({})\n\n// Pre-computed CID for the `notificationDeletedRecord`.\nconst notificationDeletedRecordCid =\n 'bafyreidad6nyekfa4a67yfb573ptxiv6s7kyxyg2ra6qbbemcruadvtuim'\n\nexport class Views {\n public imgUriBuilder: ImageUriBuilder = this.opts.imgUriBuilder\n public videoUriBuilder: VideoUriBuilder = this.opts.videoUriBuilder\n public indexedAtEpoch: Date | undefined = this.opts.indexedAtEpoch\n private threadTagsBumpDown: readonly string[] = this.opts.threadTagsBumpDown\n private threadTagsHide: readonly string[] = this.opts.threadTagsHide\n private visibilityTagHide: string = this.opts.visibilityTagHide\n private visibilityTagRankPrefix: string = this.opts.visibilityTagRankPrefix\n constructor(\n private opts: {\n imgUriBuilder: ImageUriBuilder\n videoUriBuilder: VideoUriBuilder\n indexedAtEpoch: Date | undefined\n threadTagsBumpDown: readonly string[]\n threadTagsHide: readonly string[]\n visibilityTagHide: string\n visibilityTagRankPrefix: string\n },\n ) {}\n\n // Actor\n // ------------\n\n actorIsNoHosted(did: 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.make(\n did,\n app.bsky.actor.profile.$nsid,\n 'self',\n ).toString()\n const labels = [\n ...(state.labels?.getBySubject(did) ?? []),\n ...(state.labels?.getBySubject(profileUri) ?? []),\n ...this.selfLabels({\n uri: profileUri,\n cid: actor.profileCid?.toString(),\n record: actor.profile,\n }),\n ]\n return {\n did,\n handle: actor.handle ?? INVALID_HANDLE,\n displayName: actor.profile?.displayName,\n pronouns: actor.profile?.pronouns,\n avatar: actor.profile?.avatar\n ? this.imgUriBuilder.getPresetUri(\n 'avatar',\n did,\n 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 const isValid =\n !!displayName &&\n displayName === actor.profile?.displayName &&\n !!handle &&\n handle === actor.handle\n\n return {\n issuer,\n uri,\n isValid,\n createdAt,\n }\n },\n )\n const hasValidVerification = verifications.some((v) => v.isValid)\n\n const verifiedStatus = verifications.length\n ? hasValidVerification && !isImpersonation\n ? 'valid'\n : 'invalid'\n : 'none'\n const trustedVerifierStatus = actor.trustedVerifier\n ? isImpersonation\n ? 'invalid'\n : 'valid'\n : 'none'\n\n if (\n verifications.length === 0 &&\n verifiedStatus === 'none' &&\n trustedVerifierStatus === 'none'\n ) {\n return undefined\n }\n\n return {\n verifications,\n verifiedStatus,\n trustedVerifierStatus,\n }\n }\n\n status(did: 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.make(did, app.bsky.actor.status.$nsid, 'self').toString()\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)\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.make(\n did,\n app.bsky.labeler.service.$type,\n 'self',\n ).toString()\n const labels = [\n ...(state.labels?.getBySubject(uri) ?? []),\n ...this.selfLabels({\n uri,\n cid: labeler.cid.toString(),\n record: labeler.record,\n }),\n ]\n\n return {\n uri,\n cid: labeler.cid.toString(),\n creator,\n likeCount: aggs?.likes ?? 0,\n viewer: viewer\n ? {\n like: viewer.like,\n }\n : undefined,\n indexedAt: this.indexedAt(labeler).toISOString() 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 (isExternalEmbedType(embed)) {\n return this.externalEmbed(creatorFromUri(postUri), embed)\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 externalEmbed(\n did: DidString,\n embed: ExternalEmbed,\n ): $Typed<ExternalEmbedView> {\n const { uri, title, description, thumb } = embed.external\n return app.bsky.embed.external.view.$build({\n external: {\n uri,\n title,\n description,\n thumb: thumb\n ? this.imgUriBuilder.getPresetUri(\n 'feed_thumbnail',\n did,\n getBlobCidString(thumb),\n )\n : undefined,\n },\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<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 (isExternalEmbedType(embed.media)) {\n mediaEmbed = this.externalEmbed(creator, embed.media)\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"]}