@atproto/ozone 0.1.175 → 0.2.0

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 (543) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/api/chat/getConvo.d.ts +4 -0
  3. package/dist/api/chat/getConvo.d.ts.map +1 -0
  4. package/dist/api/chat/getConvo.js +18 -0
  5. package/dist/api/chat/getConvo.js.map +1 -0
  6. package/dist/api/chat/getConvoMembers.d.ts +4 -0
  7. package/dist/api/chat/getConvoMembers.d.ts.map +1 -0
  8. package/dist/api/chat/getConvoMembers.js +18 -0
  9. package/dist/api/chat/getConvoMembers.js.map +1 -0
  10. package/dist/api/chat/index.d.ts.map +1 -1
  11. package/dist/api/chat/index.js +4 -0
  12. package/dist/api/chat/index.js.map +1 -1
  13. package/dist/daemon/event-reverser.d.ts.map +1 -1
  14. package/dist/daemon/event-reverser.js +1 -0
  15. package/dist/daemon/event-reverser.js.map +1 -1
  16. package/dist/db/migrations/20260513T202941104Z-add-subject-convo-id.d.ts +4 -0
  17. package/dist/db/migrations/20260513T202941104Z-add-subject-convo-id.d.ts.map +1 -0
  18. package/dist/db/migrations/20260513T202941104Z-add-subject-convo-id.js +107 -0
  19. package/dist/db/migrations/20260513T202941104Z-add-subject-convo-id.js.map +1 -0
  20. package/dist/db/migrations/index.d.ts +1 -0
  21. package/dist/db/migrations/index.d.ts.map +1 -1
  22. package/dist/db/migrations/index.js +1 -0
  23. package/dist/db/migrations/index.js.map +1 -1
  24. package/dist/db/schema/expiring_tag.d.ts +1 -0
  25. package/dist/db/schema/expiring_tag.d.ts.map +1 -1
  26. package/dist/db/schema/expiring_tag.js.map +1 -1
  27. package/dist/db/schema/moderation_event.d.ts +2 -1
  28. package/dist/db/schema/moderation_event.d.ts.map +1 -1
  29. package/dist/db/schema/moderation_event.js.map +1 -1
  30. package/dist/db/schema/moderation_subject_status.d.ts +1 -0
  31. package/dist/db/schema/moderation_subject_status.d.ts.map +1 -1
  32. package/dist/db/schema/moderation_subject_status.js.map +1 -1
  33. package/dist/db/schema/report.d.ts +1 -0
  34. package/dist/db/schema/report.d.ts.map +1 -1
  35. package/dist/db/schema/report.js.map +1 -1
  36. package/dist/lexicon/index.d.ts +21 -2
  37. package/dist/lexicon/index.d.ts.map +1 -1
  38. package/dist/lexicon/index.js +36 -2
  39. package/dist/lexicon/index.js.map +1 -1
  40. package/dist/lexicon/lexicons.d.ts +1420 -92
  41. package/dist/lexicon/lexicons.d.ts.map +1 -1
  42. package/dist/lexicon/lexicons.js +771 -44
  43. package/dist/lexicon/lexicons.js.map +1 -1
  44. package/dist/lexicon/types/app/bsky/actor/defs.d.ts +4 -0
  45. package/dist/lexicon/types/app/bsky/actor/defs.d.ts.map +1 -1
  46. package/dist/lexicon/types/app/bsky/actor/defs.js.map +1 -1
  47. package/dist/lexicon/types/app/bsky/embed/external.d.ts +48 -2
  48. package/dist/lexicon/types/app/bsky/embed/external.d.ts.map +1 -1
  49. package/dist/lexicon/types/app/bsky/embed/external.js +21 -0
  50. package/dist/lexicon/types/app/bsky/embed/external.js.map +1 -1
  51. package/dist/lexicon/types/app/bsky/embed/getEmbedExternalView.d.ts +31 -0
  52. package/dist/lexicon/types/app/bsky/embed/getEmbedExternalView.d.ts.map +1 -0
  53. package/dist/lexicon/types/app/bsky/embed/getEmbedExternalView.js +5 -0
  54. package/dist/lexicon/types/app/bsky/embed/getEmbedExternalView.js.map +1 -0
  55. package/dist/lexicon/types/chat/bsky/actor/getStatus.d.ts +24 -0
  56. package/dist/lexicon/types/chat/bsky/actor/getStatus.d.ts.map +1 -0
  57. package/dist/lexicon/types/chat/bsky/{group/getJoinLinkPreview.js → actor/getStatus.js} +2 -2
  58. package/dist/lexicon/types/chat/bsky/actor/getStatus.js.map +1 -0
  59. package/dist/lexicon/types/chat/bsky/convo/defs.d.ts +39 -7
  60. package/dist/lexicon/types/chat/bsky/convo/defs.d.ts.map +1 -1
  61. package/dist/lexicon/types/chat/bsky/convo/defs.js +21 -0
  62. package/dist/lexicon/types/chat/bsky/convo/defs.js.map +1 -1
  63. package/dist/lexicon/types/chat/bsky/convo/getConvoForMembers.d.ts +1 -1
  64. package/dist/lexicon/types/chat/bsky/convo/getConvoForMembers.d.ts.map +1 -1
  65. package/dist/lexicon/types/chat/bsky/convo/getConvoForMembers.js.map +1 -1
  66. package/dist/lexicon/types/chat/bsky/convo/getLog.d.ts +1 -1
  67. package/dist/lexicon/types/chat/bsky/convo/getLog.d.ts.map +1 -1
  68. package/dist/lexicon/types/chat/bsky/convo/getLog.js.map +1 -1
  69. package/dist/lexicon/types/chat/bsky/convo/listConvoRequests.d.ts +1 -1
  70. package/dist/lexicon/types/chat/bsky/convo/listConvoRequests.d.ts.map +1 -1
  71. package/dist/lexicon/types/chat/bsky/convo/listConvoRequests.js.map +1 -1
  72. package/dist/lexicon/types/chat/bsky/embed/joinLink.d.ts +19 -0
  73. package/dist/lexicon/types/chat/bsky/embed/joinLink.d.ts.map +1 -0
  74. package/dist/lexicon/types/chat/bsky/embed/joinLink.js +19 -0
  75. package/dist/lexicon/types/chat/bsky/embed/joinLink.js.map +1 -0
  76. package/dist/lexicon/types/chat/bsky/group/addMembers.d.ts +1 -1
  77. package/dist/lexicon/types/chat/bsky/group/addMembers.d.ts.map +1 -1
  78. package/dist/lexicon/types/chat/bsky/group/addMembers.js.map +1 -1
  79. package/dist/lexicon/types/chat/bsky/group/createGroup.d.ts +1 -1
  80. package/dist/lexicon/types/chat/bsky/group/createGroup.d.ts.map +1 -1
  81. package/dist/lexicon/types/chat/bsky/group/createGroup.js.map +1 -1
  82. package/dist/lexicon/types/chat/bsky/group/defs.d.ts +23 -0
  83. package/dist/lexicon/types/chat/bsky/group/defs.d.ts.map +1 -1
  84. package/dist/lexicon/types/chat/bsky/group/defs.js +14 -0
  85. package/dist/lexicon/types/chat/bsky/group/defs.js.map +1 -1
  86. package/dist/lexicon/types/chat/bsky/group/{getJoinLinkPreview.d.ts → getJoinLinkPreviews.d.ts} +3 -4
  87. package/dist/lexicon/types/chat/bsky/group/getJoinLinkPreviews.d.ts.map +1 -0
  88. package/dist/lexicon/types/chat/bsky/group/getJoinLinkPreviews.js +5 -0
  89. package/dist/lexicon/types/chat/bsky/group/getJoinLinkPreviews.js.map +1 -0
  90. package/dist/lexicon/types/chat/bsky/group/listMutualGroups.d.ts +25 -0
  91. package/dist/lexicon/types/chat/bsky/group/listMutualGroups.d.ts.map +1 -0
  92. package/dist/lexicon/types/chat/bsky/group/listMutualGroups.js +5 -0
  93. package/dist/lexicon/types/chat/bsky/group/listMutualGroups.js.map +1 -0
  94. package/dist/lexicon/types/chat/bsky/group/updateJoinRequestsRead.d.ts +24 -0
  95. package/dist/lexicon/types/chat/bsky/group/updateJoinRequestsRead.d.ts.map +1 -0
  96. package/dist/lexicon/types/chat/bsky/group/updateJoinRequestsRead.js +5 -0
  97. package/dist/lexicon/types/chat/bsky/group/updateJoinRequestsRead.js.map +1 -0
  98. package/dist/lexicon/types/chat/bsky/group/withdrawJoinRequest.d.ts +24 -0
  99. package/dist/lexicon/types/chat/bsky/group/withdrawJoinRequest.d.ts.map +1 -0
  100. package/dist/lexicon/types/chat/bsky/group/withdrawJoinRequest.js +5 -0
  101. package/dist/lexicon/types/chat/bsky/group/withdrawJoinRequest.js.map +1 -0
  102. package/dist/lexicon/types/chat/bsky/moderation/defs.d.ts +42 -0
  103. package/dist/lexicon/types/chat/bsky/moderation/defs.d.ts.map +1 -0
  104. package/dist/lexicon/types/chat/bsky/moderation/defs.js +26 -0
  105. package/dist/lexicon/types/chat/bsky/moderation/defs.js.map +1 -0
  106. package/dist/lexicon/types/chat/bsky/moderation/getConvo.d.ts +23 -0
  107. package/dist/lexicon/types/chat/bsky/moderation/getConvo.d.ts.map +1 -0
  108. package/dist/lexicon/types/chat/bsky/moderation/getConvo.js +5 -0
  109. package/dist/lexicon/types/chat/bsky/moderation/getConvo.js.map +1 -0
  110. package/dist/lexicon/types/chat/bsky/moderation/getConvoMembers.d.ts +26 -0
  111. package/dist/lexicon/types/chat/bsky/moderation/getConvoMembers.d.ts.map +1 -0
  112. package/dist/lexicon/types/chat/bsky/moderation/getConvoMembers.js +5 -0
  113. package/dist/lexicon/types/chat/bsky/moderation/getConvoMembers.js.map +1 -0
  114. package/dist/lexicon/types/chat/bsky/moderation/subscribeModEvents.d.ts +14 -2
  115. package/dist/lexicon/types/chat/bsky/moderation/subscribeModEvents.d.ts.map +1 -1
  116. package/dist/lexicon/types/chat/bsky/moderation/subscribeModEvents.js +7 -0
  117. package/dist/lexicon/types/chat/bsky/moderation/subscribeModEvents.js.map +1 -1
  118. package/dist/lexicon/types/com/atproto/server/getServiceAuth.d.ts +1 -1
  119. package/dist/lexicon/types/com/atproto/server/getServiceAuth.d.ts.map +1 -1
  120. package/dist/lexicon/types/com/atproto/server/getServiceAuth.js.map +1 -1
  121. package/dist/lexicon/types/tools/ozone/moderation/defs.d.ts +10 -3
  122. package/dist/lexicon/types/tools/ozone/moderation/defs.d.ts.map +1 -1
  123. package/dist/lexicon/types/tools/ozone/moderation/defs.js +7 -0
  124. package/dist/lexicon/types/tools/ozone/moderation/defs.js.map +1 -1
  125. package/dist/lexicon/types/tools/ozone/moderation/queryEvents.d.ts +2 -2
  126. package/dist/lexicon/types/tools/ozone/moderation/queryEvents.d.ts.map +1 -1
  127. package/dist/lexicon/types/tools/ozone/moderation/queryEvents.js.map +1 -1
  128. package/dist/lexicon/types/tools/ozone/moderation/queryStatuses.d.ts +2 -2
  129. package/dist/lexicon/types/tools/ozone/moderation/queryStatuses.d.ts.map +1 -1
  130. package/dist/lexicon/types/tools/ozone/moderation/queryStatuses.js.map +1 -1
  131. package/dist/mod-service/expiring-tags.d.ts +3 -0
  132. package/dist/mod-service/expiring-tags.d.ts.map +1 -1
  133. package/dist/mod-service/expiring-tags.js +5 -2
  134. package/dist/mod-service/expiring-tags.js.map +1 -1
  135. package/dist/mod-service/index.d.ts +3 -1
  136. package/dist/mod-service/index.d.ts.map +1 -1
  137. package/dist/mod-service/index.js +48 -10
  138. package/dist/mod-service/index.js.map +1 -1
  139. package/dist/mod-service/status.d.ts +7 -1
  140. package/dist/mod-service/status.d.ts.map +1 -1
  141. package/dist/mod-service/status.js +18 -3
  142. package/dist/mod-service/status.js.map +1 -1
  143. package/dist/mod-service/subject.d.ts +38 -2
  144. package/dist/mod-service/subject.d.ts.map +1 -1
  145. package/dist/mod-service/subject.js +67 -0
  146. package/dist/mod-service/subject.js.map +1 -1
  147. package/dist/mod-service/views.d.ts +2 -1
  148. package/dist/mod-service/views.d.ts.map +1 -1
  149. package/dist/mod-service/views.js +24 -22
  150. package/dist/mod-service/views.js.map +1 -1
  151. package/dist/queue/service.d.ts.map +1 -1
  152. package/dist/queue/service.js +7 -3
  153. package/dist/queue/service.js.map +1 -1
  154. package/dist/safelink/service.d.ts +1 -1
  155. package/package.json +9 -8
  156. package/src/api/chat/getConvo.ts +23 -0
  157. package/src/api/chat/getConvoMembers.ts +23 -0
  158. package/src/api/chat/index.ts +4 -0
  159. package/src/daemon/event-reverser.ts +1 -0
  160. package/src/db/migrations/20260513T202941104Z-add-subject-convo-id.ts +114 -0
  161. package/src/db/migrations/index.ts +1 -0
  162. package/src/db/schema/expiring_tag.ts +1 -0
  163. package/src/db/schema/moderation_event.ts +2 -0
  164. package/src/db/schema/moderation_subject_status.ts +4 -0
  165. package/src/db/schema/report.ts +2 -1
  166. package/src/mod-service/expiring-tags.ts +8 -2
  167. package/src/mod-service/index.ts +52 -16
  168. package/src/mod-service/status.ts +24 -2
  169. package/src/mod-service/subject.ts +79 -1
  170. package/src/mod-service/views.ts +28 -23
  171. package/src/queue/service.ts +8 -4
  172. package/tests/__snapshots__/verification.test.ts.snap +2 -0
  173. package/tests/expiring-tags.test.ts +1 -0
  174. package/tests/moderation-events.test.ts +108 -1
  175. package/tests/moderation-status-tags.test.ts +23 -0
  176. package/tests/moderation-statuses.test.ts +82 -0
  177. package/tests/moderation.test.ts +73 -0
  178. package/tests/repo-search.test.ts +1 -1
  179. package/tsconfig.build.tsbuildinfo +1 -1
  180. package/dist/lexicon/types/chat/bsky/group/getJoinLinkPreview.d.ts.map +0 -1
  181. package/dist/lexicon/types/chat/bsky/group/getJoinLinkPreview.js.map +0 -1
  182. package/src/lexicon/index.ts +0 -4502
  183. package/src/lexicon/lexicons.ts +0 -25711
  184. package/src/lexicon/types/app/bsky/actor/defs.ts +0 -716
  185. package/src/lexicon/types/app/bsky/actor/getPreferences.ts +0 -38
  186. package/src/lexicon/types/app/bsky/actor/getProfile.ts +0 -37
  187. package/src/lexicon/types/app/bsky/actor/getProfiles.ts +0 -40
  188. package/src/lexicon/types/app/bsky/actor/getSuggestions.ts +0 -46
  189. package/src/lexicon/types/app/bsky/actor/profile.ts +0 -52
  190. package/src/lexicon/types/app/bsky/actor/putPreferences.ts +0 -34
  191. package/src/lexicon/types/app/bsky/actor/searchActors.ts +0 -46
  192. package/src/lexicon/types/app/bsky/actor/searchActorsTypeahead.ts +0 -44
  193. package/src/lexicon/types/app/bsky/actor/status.ts +0 -46
  194. package/src/lexicon/types/app/bsky/ageassurance/begin.ts +0 -54
  195. package/src/lexicon/types/app/bsky/ageassurance/defs.ts +0 -303
  196. package/src/lexicon/types/app/bsky/ageassurance/getConfig.ts +0 -34
  197. package/src/lexicon/types/app/bsky/ageassurance/getState.ts +0 -42
  198. package/src/lexicon/types/app/bsky/bookmark/createBookmark.ts +0 -35
  199. package/src/lexicon/types/app/bsky/bookmark/defs.ts +0 -54
  200. package/src/lexicon/types/app/bsky/bookmark/deleteBookmark.ts +0 -34
  201. package/src/lexicon/types/app/bsky/bookmark/getBookmarks.ts +0 -42
  202. package/src/lexicon/types/app/bsky/contact/defs.ts +0 -71
  203. package/src/lexicon/types/app/bsky/contact/dismissMatch.ts +0 -43
  204. package/src/lexicon/types/app/bsky/contact/getMatches.ts +0 -43
  205. package/src/lexicon/types/app/bsky/contact/getSyncStatus.ts +0 -39
  206. package/src/lexicon/types/app/bsky/contact/importContacts.ts +0 -54
  207. package/src/lexicon/types/app/bsky/contact/removeData.ts +0 -40
  208. package/src/lexicon/types/app/bsky/contact/sendNotification.ts +0 -44
  209. package/src/lexicon/types/app/bsky/contact/startPhoneVerification.ts +0 -43
  210. package/src/lexicon/types/app/bsky/contact/verifyPhone.ts +0 -53
  211. package/src/lexicon/types/app/bsky/draft/createDraft.ts +0 -46
  212. package/src/lexicon/types/app/bsky/draft/defs.ts +0 -212
  213. package/src/lexicon/types/app/bsky/draft/deleteDraft.ts +0 -33
  214. package/src/lexicon/types/app/bsky/draft/getDrafts.ts +0 -42
  215. package/src/lexicon/types/app/bsky/draft/updateDraft.ts +0 -34
  216. package/src/lexicon/types/app/bsky/embed/defs.ts +0 -32
  217. package/src/lexicon/types/app/bsky/embed/external.ts +0 -85
  218. package/src/lexicon/types/app/bsky/embed/images.ts +0 -86
  219. package/src/lexicon/types/app/bsky/embed/record.ts +0 -146
  220. package/src/lexicon/types/app/bsky/embed/recordWithMedia.ts +0 -59
  221. package/src/lexicon/types/app/bsky/embed/video.ts +0 -75
  222. package/src/lexicon/types/app/bsky/feed/defs.ts +0 -428
  223. package/src/lexicon/types/app/bsky/feed/describeFeedGenerator.ts +0 -70
  224. package/src/lexicon/types/app/bsky/feed/generator.ts +0 -51
  225. package/src/lexicon/types/app/bsky/feed/getActorFeeds.ts +0 -43
  226. package/src/lexicon/types/app/bsky/feed/getActorLikes.ts +0 -44
  227. package/src/lexicon/types/app/bsky/feed/getAuthorFeed.ts +0 -53
  228. package/src/lexicon/types/app/bsky/feed/getFeed.ts +0 -44
  229. package/src/lexicon/types/app/bsky/feed/getFeedGenerator.ts +0 -45
  230. package/src/lexicon/types/app/bsky/feed/getFeedGenerators.ts +0 -40
  231. package/src/lexicon/types/app/bsky/feed/getFeedSkeleton.ts +0 -47
  232. package/src/lexicon/types/app/bsky/feed/getLikes.ts +0 -65
  233. package/src/lexicon/types/app/bsky/feed/getListFeed.ts +0 -45
  234. package/src/lexicon/types/app/bsky/feed/getPostThread.ts +0 -51
  235. package/src/lexicon/types/app/bsky/feed/getPosts.ts +0 -41
  236. package/src/lexicon/types/app/bsky/feed/getQuotes.ts +0 -48
  237. package/src/lexicon/types/app/bsky/feed/getRepostedBy.ts +0 -48
  238. package/src/lexicon/types/app/bsky/feed/getSuggestedFeeds.ts +0 -42
  239. package/src/lexicon/types/app/bsky/feed/getTimeline.ts +0 -44
  240. package/src/lexicon/types/app/bsky/feed/like.ts +0 -40
  241. package/src/lexicon/types/app/bsky/feed/post.ts +0 -117
  242. package/src/lexicon/types/app/bsky/feed/postgate.ts +0 -58
  243. package/src/lexicon/types/app/bsky/feed/repost.ts +0 -40
  244. package/src/lexicon/types/app/bsky/feed/searchPosts.ts +0 -66
  245. package/src/lexicon/types/app/bsky/feed/sendInteractions.ts +0 -43
  246. package/src/lexicon/types/app/bsky/feed/threadgate.ts +0 -110
  247. package/src/lexicon/types/app/bsky/graph/block.ts +0 -39
  248. package/src/lexicon/types/app/bsky/graph/defs.ts +0 -206
  249. package/src/lexicon/types/app/bsky/graph/follow.ts +0 -40
  250. package/src/lexicon/types/app/bsky/graph/getActorStarterPacks.ts +0 -43
  251. package/src/lexicon/types/app/bsky/graph/getBlocks.ts +0 -42
  252. package/src/lexicon/types/app/bsky/graph/getFollowers.ts +0 -44
  253. package/src/lexicon/types/app/bsky/graph/getFollows.ts +0 -44
  254. package/src/lexicon/types/app/bsky/graph/getKnownFollowers.ts +0 -44
  255. package/src/lexicon/types/app/bsky/graph/getList.ts +0 -45
  256. package/src/lexicon/types/app/bsky/graph/getListBlocks.ts +0 -42
  257. package/src/lexicon/types/app/bsky/graph/getListMutes.ts +0 -42
  258. package/src/lexicon/types/app/bsky/graph/getLists.ts +0 -46
  259. package/src/lexicon/types/app/bsky/graph/getListsWithMembership.ts +0 -63
  260. package/src/lexicon/types/app/bsky/graph/getMutes.ts +0 -42
  261. package/src/lexicon/types/app/bsky/graph/getRelationships.ts +0 -49
  262. package/src/lexicon/types/app/bsky/graph/getStarterPack.ts +0 -41
  263. package/src/lexicon/types/app/bsky/graph/getStarterPacks.ts +0 -40
  264. package/src/lexicon/types/app/bsky/graph/getStarterPacksWithMembership.ts +0 -65
  265. package/src/lexicon/types/app/bsky/graph/getSuggestedFollowsByActor.ts +0 -46
  266. package/src/lexicon/types/app/bsky/graph/list.ts +0 -47
  267. package/src/lexicon/types/app/bsky/graph/listblock.ts +0 -39
  268. package/src/lexicon/types/app/bsky/graph/listitem.ts +0 -41
  269. package/src/lexicon/types/app/bsky/graph/muteActor.ts +0 -33
  270. package/src/lexicon/types/app/bsky/graph/muteActorList.ts +0 -33
  271. package/src/lexicon/types/app/bsky/graph/muteThread.ts +0 -33
  272. package/src/lexicon/types/app/bsky/graph/searchStarterPacks.ts +0 -44
  273. package/src/lexicon/types/app/bsky/graph/starterpack.ts +0 -60
  274. package/src/lexicon/types/app/bsky/graph/unmuteActor.ts +0 -33
  275. package/src/lexicon/types/app/bsky/graph/unmuteActorList.ts +0 -33
  276. package/src/lexicon/types/app/bsky/graph/unmuteThread.ts +0 -33
  277. package/src/lexicon/types/app/bsky/graph/verification.ts +0 -44
  278. package/src/lexicon/types/app/bsky/labeler/defs.ts +0 -100
  279. package/src/lexicon/types/app/bsky/labeler/getServices.ts +0 -45
  280. package/src/lexicon/types/app/bsky/labeler/service.ts +0 -48
  281. package/src/lexicon/types/app/bsky/notification/declaration.ts +0 -38
  282. package/src/lexicon/types/app/bsky/notification/defs.ts +0 -142
  283. package/src/lexicon/types/app/bsky/notification/getPreferences.ts +0 -38
  284. package/src/lexicon/types/app/bsky/notification/getUnreadCount.ts +0 -40
  285. package/src/lexicon/types/app/bsky/notification/listActivitySubscriptions.ts +0 -42
  286. package/src/lexicon/types/app/bsky/notification/listNotifications.ts +0 -87
  287. package/src/lexicon/types/app/bsky/notification/putActivitySubscription.ts +0 -46
  288. package/src/lexicon/types/app/bsky/notification/putPreferences.ts +0 -33
  289. package/src/lexicon/types/app/bsky/notification/putPreferencesV2.ts +0 -56
  290. package/src/lexicon/types/app/bsky/notification/registerPush.ts +0 -38
  291. package/src/lexicon/types/app/bsky/notification/unregisterPush.ts +0 -36
  292. package/src/lexicon/types/app/bsky/notification/updateSeen.ts +0 -33
  293. package/src/lexicon/types/app/bsky/richtext/facet.ts +0 -97
  294. package/src/lexicon/types/app/bsky/unspecced/defs.ts +0 -250
  295. package/src/lexicon/types/app/bsky/unspecced/getAgeAssuranceState.ts +0 -34
  296. package/src/lexicon/types/app/bsky/unspecced/getConfig.ts +0 -54
  297. package/src/lexicon/types/app/bsky/unspecced/getOnboardingSuggestedStarterPacks.ts +0 -40
  298. package/src/lexicon/types/app/bsky/unspecced/getOnboardingSuggestedStarterPacksSkeleton.ts +0 -41
  299. package/src/lexicon/types/app/bsky/unspecced/getOnboardingSuggestedUsersSkeleton.ts +0 -47
  300. package/src/lexicon/types/app/bsky/unspecced/getPopularFeedGenerators.ts +0 -43
  301. package/src/lexicon/types/app/bsky/unspecced/getPostThreadOtherV2.ts +0 -60
  302. package/src/lexicon/types/app/bsky/unspecced/getPostThreadV2.ts +0 -77
  303. package/src/lexicon/types/app/bsky/unspecced/getSuggestedFeeds.ts +0 -40
  304. package/src/lexicon/types/app/bsky/unspecced/getSuggestedFeedsSkeleton.ts +0 -41
  305. package/src/lexicon/types/app/bsky/unspecced/getSuggestedOnboardingUsers.ts +0 -46
  306. package/src/lexicon/types/app/bsky/unspecced/getSuggestedStarterPacks.ts +0 -40
  307. package/src/lexicon/types/app/bsky/unspecced/getSuggestedStarterPacksSkeleton.ts +0 -41
  308. package/src/lexicon/types/app/bsky/unspecced/getSuggestedUsers.ts +0 -46
  309. package/src/lexicon/types/app/bsky/unspecced/getSuggestedUsersForDiscover.ts +0 -42
  310. package/src/lexicon/types/app/bsky/unspecced/getSuggestedUsersForDiscoverSkeleton.ts +0 -43
  311. package/src/lexicon/types/app/bsky/unspecced/getSuggestedUsersForExplore.ts +0 -44
  312. package/src/lexicon/types/app/bsky/unspecced/getSuggestedUsersForExploreSkeleton.ts +0 -45
  313. package/src/lexicon/types/app/bsky/unspecced/getSuggestedUsersForSeeMore.ts +0 -44
  314. package/src/lexicon/types/app/bsky/unspecced/getSuggestedUsersForSeeMoreSkeleton.ts +0 -45
  315. package/src/lexicon/types/app/bsky/unspecced/getSuggestedUsersSkeleton.ts +0 -47
  316. package/src/lexicon/types/app/bsky/unspecced/getSuggestionsSkeleton.ts +0 -52
  317. package/src/lexicon/types/app/bsky/unspecced/getTaggedSuggestions.ts +0 -54
  318. package/src/lexicon/types/app/bsky/unspecced/getTrendingTopics.ts +0 -43
  319. package/src/lexicon/types/app/bsky/unspecced/getTrends.ts +0 -40
  320. package/src/lexicon/types/app/bsky/unspecced/getTrendsSkeleton.ts +0 -42
  321. package/src/lexicon/types/app/bsky/unspecced/initAgeAssurance.ts +0 -48
  322. package/src/lexicon/types/app/bsky/unspecced/searchActorsSkeleton.ts +0 -52
  323. package/src/lexicon/types/app/bsky/unspecced/searchPostsSkeleton.ts +0 -68
  324. package/src/lexicon/types/app/bsky/unspecced/searchStarterPacksSkeleton.ts +0 -50
  325. package/src/lexicon/types/app/bsky/video/defs.ts +0 -38
  326. package/src/lexicon/types/app/bsky/video/getJobStatus.ts +0 -40
  327. package/src/lexicon/types/app/bsky/video/getUploadLimits.ts +0 -41
  328. package/src/lexicon/types/app/bsky/video/uploadVideo.ts +0 -42
  329. package/src/lexicon/types/chat/bsky/actor/declaration.ts +0 -39
  330. package/src/lexicon/types/chat/bsky/actor/defs.ts +0 -96
  331. package/src/lexicon/types/chat/bsky/actor/deleteAccount.ts +0 -35
  332. package/src/lexicon/types/chat/bsky/actor/exportAccountData.ts +0 -33
  333. package/src/lexicon/types/chat/bsky/convo/acceptConvo.ts +0 -45
  334. package/src/lexicon/types/chat/bsky/convo/addReaction.ts +0 -52
  335. package/src/lexicon/types/chat/bsky/convo/defs.ts +0 -1058
  336. package/src/lexicon/types/chat/bsky/convo/deleteMessageForSelf.ts +0 -44
  337. package/src/lexicon/types/chat/bsky/convo/getConvo.ts +0 -41
  338. package/src/lexicon/types/chat/bsky/convo/getConvoAvailability.ts +0 -41
  339. package/src/lexicon/types/chat/bsky/convo/getConvoForMembers.ts +0 -46
  340. package/src/lexicon/types/chat/bsky/convo/getConvoMembers.ts +0 -44
  341. package/src/lexicon/types/chat/bsky/convo/getLog.ts +0 -70
  342. package/src/lexicon/types/chat/bsky/convo/getMessages.ts +0 -52
  343. package/src/lexicon/types/chat/bsky/convo/leaveConvo.ts +0 -45
  344. package/src/lexicon/types/chat/bsky/convo/listConvoRequests.ts +0 -47
  345. package/src/lexicon/types/chat/bsky/convo/listConvos.ts +0 -49
  346. package/src/lexicon/types/chat/bsky/convo/lockConvo.ts +0 -45
  347. package/src/lexicon/types/chat/bsky/convo/muteConvo.ts +0 -45
  348. package/src/lexicon/types/chat/bsky/convo/removeReaction.ts +0 -51
  349. package/src/lexicon/types/chat/bsky/convo/sendMessage.ts +0 -44
  350. package/src/lexicon/types/chat/bsky/convo/sendMessageBatch.ts +0 -61
  351. package/src/lexicon/types/chat/bsky/convo/unlockConvo.ts +0 -45
  352. package/src/lexicon/types/chat/bsky/convo/unmuteConvo.ts +0 -45
  353. package/src/lexicon/types/chat/bsky/convo/updateAllRead.ts +0 -44
  354. package/src/lexicon/types/chat/bsky/convo/updateRead.ts +0 -46
  355. package/src/lexicon/types/chat/bsky/group/addMembers.ts +0 -57
  356. package/src/lexicon/types/chat/bsky/group/approveJoinRequest.ts +0 -46
  357. package/src/lexicon/types/chat/bsky/group/createGroup.ts +0 -51
  358. package/src/lexicon/types/chat/bsky/group/createJoinLink.ts +0 -47
  359. package/src/lexicon/types/chat/bsky/group/defs.ts +0 -75
  360. package/src/lexicon/types/chat/bsky/group/disableJoinLink.ts +0 -45
  361. package/src/lexicon/types/chat/bsky/group/editGroup.ts +0 -46
  362. package/src/lexicon/types/chat/bsky/group/editJoinLink.ts +0 -47
  363. package/src/lexicon/types/chat/bsky/group/enableJoinLink.ts +0 -49
  364. package/src/lexicon/types/chat/bsky/group/getJoinLinkPreview.ts +0 -41
  365. package/src/lexicon/types/chat/bsky/group/listJoinRequests.ts +0 -44
  366. package/src/lexicon/types/chat/bsky/group/rejectJoinRequest.ts +0 -43
  367. package/src/lexicon/types/chat/bsky/group/removeMembers.ts +0 -46
  368. package/src/lexicon/types/chat/bsky/group/requestJoin.ts +0 -52
  369. package/src/lexicon/types/chat/bsky/moderation/getActorMetadata.ts +0 -59
  370. package/src/lexicon/types/chat/bsky/moderation/getMessageContext.ts +0 -52
  371. package/src/lexicon/types/chat/bsky/moderation/subscribeModEvents.ts +0 -386
  372. package/src/lexicon/types/chat/bsky/moderation/updateActorAccess.ts +0 -35
  373. package/src/lexicon/types/com/atproto/admin/defs.ts +0 -106
  374. package/src/lexicon/types/com/atproto/admin/deleteAccount.ts +0 -33
  375. package/src/lexicon/types/com/atproto/admin/disableAccountInvites.ts +0 -35
  376. package/src/lexicon/types/com/atproto/admin/disableInviteCodes.ts +0 -34
  377. package/src/lexicon/types/com/atproto/admin/enableAccountInvites.ts +0 -35
  378. package/src/lexicon/types/com/atproto/admin/getAccountInfo.ts +0 -36
  379. package/src/lexicon/types/com/atproto/admin/getAccountInfos.ts +0 -40
  380. package/src/lexicon/types/com/atproto/admin/getInviteCodes.ts +0 -43
  381. package/src/lexicon/types/com/atproto/admin/getSubjectStatus.ts +0 -49
  382. package/src/lexicon/types/com/atproto/admin/searchAccounts.ts +0 -43
  383. package/src/lexicon/types/com/atproto/admin/sendEmail.ts +0 -48
  384. package/src/lexicon/types/com/atproto/admin/updateAccountEmail.ts +0 -35
  385. package/src/lexicon/types/com/atproto/admin/updateAccountHandle.ts +0 -34
  386. package/src/lexicon/types/com/atproto/admin/updateAccountPassword.ts +0 -34
  387. package/src/lexicon/types/com/atproto/admin/updateAccountSigningKey.ts +0 -35
  388. package/src/lexicon/types/com/atproto/admin/updateSubjectStatus.ts +0 -56
  389. package/src/lexicon/types/com/atproto/identity/defs.ts +0 -34
  390. package/src/lexicon/types/com/atproto/identity/getRecommendedDidCredentials.ts +0 -41
  391. package/src/lexicon/types/com/atproto/identity/refreshIdentity.ts +0 -43
  392. package/src/lexicon/types/com/atproto/identity/requestPlcOperationSignature.ts +0 -26
  393. package/src/lexicon/types/com/atproto/identity/resolveDid.ts +0 -42
  394. package/src/lexicon/types/com/atproto/identity/resolveHandle.ts +0 -41
  395. package/src/lexicon/types/com/atproto/identity/resolveIdentity.ts +0 -38
  396. package/src/lexicon/types/com/atproto/identity/signPlcOperation.ts +0 -49
  397. package/src/lexicon/types/com/atproto/identity/submitPlcOperation.ts +0 -33
  398. package/src/lexicon/types/com/atproto/identity/updateHandle.ts +0 -34
  399. package/src/lexicon/types/com/atproto/label/defs.ts +0 -143
  400. package/src/lexicon/types/com/atproto/label/queryLabels.ts +0 -46
  401. package/src/lexicon/types/com/atproto/label/subscribeLabels.ts +0 -58
  402. package/src/lexicon/types/com/atproto/lexicon/resolveLexicon.ts +0 -46
  403. package/src/lexicon/types/com/atproto/lexicon/schema.ts +0 -38
  404. package/src/lexicon/types/com/atproto/moderation/createReport.ts +0 -80
  405. package/src/lexicon/types/com/atproto/moderation/defs.ts +0 -83
  406. package/src/lexicon/types/com/atproto/repo/applyWrites.ts +0 -158
  407. package/src/lexicon/types/com/atproto/repo/createRecord.ts +0 -59
  408. package/src/lexicon/types/com/atproto/repo/defs.ts +0 -31
  409. package/src/lexicon/types/com/atproto/repo/deleteRecord.ts +0 -54
  410. package/src/lexicon/types/com/atproto/repo/describeRepo.ts +0 -47
  411. package/src/lexicon/types/com/atproto/repo/getRecord.ts +0 -49
  412. package/src/lexicon/types/com/atproto/repo/importRepo.ts +0 -31
  413. package/src/lexicon/types/com/atproto/repo/listMissingBlobs.ts +0 -57
  414. package/src/lexicon/types/com/atproto/repo/listRecords.ts +0 -65
  415. package/src/lexicon/types/com/atproto/repo/putRecord.ts +0 -61
  416. package/src/lexicon/types/com/atproto/repo/strongRef.ts +0 -31
  417. package/src/lexicon/types/com/atproto/repo/uploadBlob.ts +0 -41
  418. package/src/lexicon/types/com/atproto/server/activateAccount.ts +0 -26
  419. package/src/lexicon/types/com/atproto/server/checkAccountStatus.ts +0 -45
  420. package/src/lexicon/types/com/atproto/server/confirmEmail.ts +0 -35
  421. package/src/lexicon/types/com/atproto/server/createAccount.ts +0 -71
  422. package/src/lexicon/types/com/atproto/server/createAppPassword.ts +0 -63
  423. package/src/lexicon/types/com/atproto/server/createInviteCode.ts +0 -44
  424. package/src/lexicon/types/com/atproto/server/createInviteCodes.ts +0 -61
  425. package/src/lexicon/types/com/atproto/server/createSession.ts +0 -59
  426. package/src/lexicon/types/com/atproto/server/deactivateAccount.ts +0 -34
  427. package/src/lexicon/types/com/atproto/server/defs.ts +0 -52
  428. package/src/lexicon/types/com/atproto/server/deleteAccount.ts +0 -36
  429. package/src/lexicon/types/com/atproto/server/deleteSession.ts +0 -27
  430. package/src/lexicon/types/com/atproto/server/describeServer.ts +0 -76
  431. package/src/lexicon/types/com/atproto/server/getAccountInviteCodes.ts +0 -43
  432. package/src/lexicon/types/com/atproto/server/getServiceAuth.ts +0 -45
  433. package/src/lexicon/types/com/atproto/server/getSession.ts +0 -45
  434. package/src/lexicon/types/com/atproto/server/listAppPasswords.ts +0 -55
  435. package/src/lexicon/types/com/atproto/server/refreshSession.ts +0 -48
  436. package/src/lexicon/types/com/atproto/server/requestAccountDelete.ts +0 -26
  437. package/src/lexicon/types/com/atproto/server/requestEmailConfirmation.ts +0 -26
  438. package/src/lexicon/types/com/atproto/server/requestEmailUpdate.ts +0 -37
  439. package/src/lexicon/types/com/atproto/server/requestPasswordReset.ts +0 -33
  440. package/src/lexicon/types/com/atproto/server/reserveSigningKey.ts +0 -45
  441. package/src/lexicon/types/com/atproto/server/resetPassword.ts +0 -35
  442. package/src/lexicon/types/com/atproto/server/revokeAppPassword.ts +0 -33
  443. package/src/lexicon/types/com/atproto/server/updateEmail.ts +0 -37
  444. package/src/lexicon/types/com/atproto/sync/defs.ts +0 -23
  445. package/src/lexicon/types/com/atproto/sync/getBlob.ts +0 -44
  446. package/src/lexicon/types/com/atproto/sync/getBlocks.ts +0 -43
  447. package/src/lexicon/types/com/atproto/sync/getCheckout.ts +0 -36
  448. package/src/lexicon/types/com/atproto/sync/getHead.ts +0 -41
  449. package/src/lexicon/types/com/atproto/sync/getHostStatus.ts +0 -47
  450. package/src/lexicon/types/com/atproto/sync/getLatestCommit.ts +0 -42
  451. package/src/lexicon/types/com/atproto/sync/getRecord.ts +0 -45
  452. package/src/lexicon/types/com/atproto/sync/getRepo.ts +0 -39
  453. package/src/lexicon/types/com/atproto/sync/getRepoStatus.ts +0 -53
  454. package/src/lexicon/types/com/atproto/sync/listBlobs.ts +0 -46
  455. package/src/lexicon/types/com/atproto/sync/listHosts.ts +0 -63
  456. package/src/lexicon/types/com/atproto/sync/listRepos.ts +0 -69
  457. package/src/lexicon/types/com/atproto/sync/listReposByCollection.ts +0 -58
  458. package/src/lexicon/types/com/atproto/sync/notifyOfUpdate.ts +0 -34
  459. package/src/lexicon/types/com/atproto/sync/requestCrawl.ts +0 -35
  460. package/src/lexicon/types/com/atproto/sync/subscribeRepos.ts +0 -179
  461. package/src/lexicon/types/com/atproto/temp/addReservedHandle.ts +0 -41
  462. package/src/lexicon/types/com/atproto/temp/checkHandleAvailability.ts +0 -99
  463. package/src/lexicon/types/com/atproto/temp/checkSignupQueue.ts +0 -39
  464. package/src/lexicon/types/com/atproto/temp/dereferenceScope.ts +0 -42
  465. package/src/lexicon/types/com/atproto/temp/fetchLabels.ts +0 -41
  466. package/src/lexicon/types/com/atproto/temp/requestPhoneVerification.ts +0 -33
  467. package/src/lexicon/types/com/atproto/temp/revokeAccountCredentials.ts +0 -33
  468. package/src/lexicon/types/tools/ozone/communication/createTemplate.ts +0 -52
  469. package/src/lexicon/types/tools/ozone/communication/defs.ts +0 -43
  470. package/src/lexicon/types/tools/ozone/communication/deleteTemplate.ts +0 -33
  471. package/src/lexicon/types/tools/ozone/communication/listTemplates.ts +0 -38
  472. package/src/lexicon/types/tools/ozone/communication/updateTemplate.ts +0 -55
  473. package/src/lexicon/types/tools/ozone/hosting/getAccountHistory.ts +0 -147
  474. package/src/lexicon/types/tools/ozone/moderation/cancelScheduledActions.ts +0 -79
  475. package/src/lexicon/types/tools/ozone/moderation/defs.ts +0 -1176
  476. package/src/lexicon/types/tools/ozone/moderation/emitEvent.ts +0 -104
  477. package/src/lexicon/types/tools/ozone/moderation/getAccountTimeline.ts +0 -105
  478. package/src/lexicon/types/tools/ozone/moderation/getEvent.ts +0 -36
  479. package/src/lexicon/types/tools/ozone/moderation/getRecord.ts +0 -38
  480. package/src/lexicon/types/tools/ozone/moderation/getRecords.ts +0 -44
  481. package/src/lexicon/types/tools/ozone/moderation/getRepo.ts +0 -37
  482. package/src/lexicon/types/tools/ozone/moderation/getReporterStats.ts +0 -40
  483. package/src/lexicon/types/tools/ozone/moderation/getRepos.ts +0 -44
  484. package/src/lexicon/types/tools/ozone/moderation/getSubjects.ts +0 -40
  485. package/src/lexicon/types/tools/ozone/moderation/listScheduledActions.ts +0 -57
  486. package/src/lexicon/types/tools/ozone/moderation/queryEvents.ts +0 -86
  487. package/src/lexicon/types/tools/ozone/moderation/queryStatuses.ts +0 -121
  488. package/src/lexicon/types/tools/ozone/moderation/scheduleAction.ts +0 -133
  489. package/src/lexicon/types/tools/ozone/moderation/searchRepos.ts +0 -45
  490. package/src/lexicon/types/tools/ozone/queue/assignModerator.ts +0 -46
  491. package/src/lexicon/types/tools/ozone/queue/createQueue.ts +0 -54
  492. package/src/lexicon/types/tools/ozone/queue/defs.ts +0 -99
  493. package/src/lexicon/types/tools/ozone/queue/deleteQueue.ts +0 -48
  494. package/src/lexicon/types/tools/ozone/queue/getAssignments.ts +0 -48
  495. package/src/lexicon/types/tools/ozone/queue/listQueues.ts +0 -50
  496. package/src/lexicon/types/tools/ozone/queue/routeReports.ts +0 -50
  497. package/src/lexicon/types/tools/ozone/queue/unassignModerator.ts +0 -37
  498. package/src/lexicon/types/tools/ozone/queue/updateQueue.ts +0 -51
  499. package/src/lexicon/types/tools/ozone/report/assignModerator.ts +0 -50
  500. package/src/lexicon/types/tools/ozone/report/createActivity.ts +0 -60
  501. package/src/lexicon/types/tools/ozone/report/defs.ts +0 -466
  502. package/src/lexicon/types/tools/ozone/report/getAssignments.ts +0 -48
  503. package/src/lexicon/types/tools/ozone/report/getHistoricalStats.ts +0 -54
  504. package/src/lexicon/types/tools/ozone/report/getLatestReport.ts +0 -39
  505. package/src/lexicon/types/tools/ozone/report/getLiveStats.ts +0 -45
  506. package/src/lexicon/types/tools/ozone/report/getReport.ts +0 -38
  507. package/src/lexicon/types/tools/ozone/report/listActivities.ts +0 -44
  508. package/src/lexicon/types/tools/ozone/report/queryReports.ts +0 -72
  509. package/src/lexicon/types/tools/ozone/report/reassignQueue.ts +0 -55
  510. package/src/lexicon/types/tools/ozone/report/refreshStats.ts +0 -46
  511. package/src/lexicon/types/tools/ozone/report/unassignModerator.ts +0 -44
  512. package/src/lexicon/types/tools/ozone/safelink/addRule.ts +0 -51
  513. package/src/lexicon/types/tools/ozone/safelink/defs.ts +0 -76
  514. package/src/lexicon/types/tools/ozone/safelink/queryEvents.ts +0 -55
  515. package/src/lexicon/types/tools/ozone/safelink/queryRules.ts +0 -61
  516. package/src/lexicon/types/tools/ozone/safelink/removeRule.ts +0 -49
  517. package/src/lexicon/types/tools/ozone/safelink/updateRule.ts +0 -51
  518. package/src/lexicon/types/tools/ozone/server/getConfig.ts +0 -78
  519. package/src/lexicon/types/tools/ozone/set/addValues.ts +0 -36
  520. package/src/lexicon/types/tools/ozone/set/defs.ts +0 -50
  521. package/src/lexicon/types/tools/ozone/set/deleteSet.ts +0 -43
  522. package/src/lexicon/types/tools/ozone/set/deleteValues.ts +0 -37
  523. package/src/lexicon/types/tools/ozone/set/getValues.ts +0 -45
  524. package/src/lexicon/types/tools/ozone/set/querySets.ts +0 -46
  525. package/src/lexicon/types/tools/ozone/set/upsertSet.ts +0 -38
  526. package/src/lexicon/types/tools/ozone/setting/defs.ts +0 -44
  527. package/src/lexicon/types/tools/ozone/setting/listOptions.ts +0 -47
  528. package/src/lexicon/types/tools/ozone/setting/removeOptions.ts +0 -42
  529. package/src/lexicon/types/tools/ozone/setting/upsertOption.ts +0 -53
  530. package/src/lexicon/types/tools/ozone/signature/defs.ts +0 -31
  531. package/src/lexicon/types/tools/ozone/signature/findCorrelation.ts +0 -40
  532. package/src/lexicon/types/tools/ozone/signature/findRelatedAccounts.ts +0 -60
  533. package/src/lexicon/types/tools/ozone/signature/searchAccounts.ts +0 -43
  534. package/src/lexicon/types/tools/ozone/team/addMember.ts +0 -49
  535. package/src/lexicon/types/tools/ozone/team/defs.ts +0 -51
  536. package/src/lexicon/types/tools/ozone/team/deleteMember.ts +0 -34
  537. package/src/lexicon/types/tools/ozone/team/listMembers.ts +0 -45
  538. package/src/lexicon/types/tools/ozone/team/updateMember.ts +0 -50
  539. package/src/lexicon/types/tools/ozone/verification/defs.ts +0 -59
  540. package/src/lexicon/types/tools/ozone/verification/grantVerifications.ts +0 -87
  541. package/src/lexicon/types/tools/ozone/verification/listVerifications.ts +0 -56
  542. package/src/lexicon/types/tools/ozone/verification/revokeVerifications.ts +0 -68
  543. package/src/lexicon/util.ts +0 -82
@@ -0,0 +1,114 @@
1
+ import { Kysely, sql } from 'kysely'
2
+
3
+ export async function up(db: Kysely<unknown>): Promise<void> {
4
+ // moderation_event
5
+ await db.schema
6
+ .alterTable('moderation_event')
7
+ .addColumn('subjectConvoId', 'varchar')
8
+ .execute()
9
+ /// broad index to support conversation-based queries
10
+ /// Users is a convo is capped at 50 so volume of matching events should be low
11
+ /// subsequent ordering and filtering will be efficient
12
+ await sql`
13
+ CREATE INDEX "moderation_event_convo_idx"
14
+ ON moderation_event("subjectConvoId")
15
+ WHERE "subjectConvoId" IS NOT NULL
16
+ `.execute(db)
17
+
18
+ // moderation_subject_status
19
+ await db.schema
20
+ .alterTable('moderation_subject_status')
21
+ .addColumn('convoId', 'varchar', (col) => col.notNull().defaultTo(''))
22
+ .execute()
23
+ /// Update unique constraint: [did, recordPath] -> [did, recordPath, convoId]
24
+ /// Create new unique index, drop old constraint, rename new index
25
+ /// Avoids gap without any constraints
26
+ await sql`
27
+ CREATE UNIQUE INDEX "moderation_status_unique_idx_new"
28
+ ON moderation_subject_status(did, "recordPath", "convoId")
29
+ `.execute(db)
30
+ await db.schema
31
+ .alterTable('moderation_subject_status')
32
+ .dropConstraint('moderation_status_unique_idx')
33
+ .execute()
34
+ await db.schema.dropIndex('moderation_status_unique_idx').ifExists().execute()
35
+ await sql`
36
+ ALTER INDEX "moderation_status_unique_idx_new"
37
+ RENAME TO "moderation_status_unique_idx"
38
+ `.execute(db)
39
+ await sql`
40
+ ALTER TABLE moderation_subject_status
41
+ ADD CONSTRAINT "moderation_status_unique_idx"
42
+ UNIQUE USING INDEX "moderation_status_unique_idx"
43
+ `.execute(db)
44
+
45
+ // expiring_tag
46
+ await db.schema
47
+ .alterTable('expiring_tag')
48
+ .addColumn('convoId', 'varchar', (col) => col.notNull().defaultTo(''))
49
+ .execute()
50
+ await db.schema
51
+ .createIndex('idx_expiring_tag_did_record_path_convo_id')
52
+ .on('expiring_tag')
53
+ .columns(['did', 'recordPath', 'convoId'])
54
+ .execute()
55
+
56
+ // report table
57
+ await db.schema
58
+ .alterTable('report')
59
+ .addColumn('subjectConvoId', 'varchar')
60
+ .execute()
61
+ await db.schema.dropIndex('idx_report_unassigned_id').execute()
62
+ await sql`CREATE INDEX idx_report_unassigned_id ON report
63
+ (id)
64
+ INCLUDE (status, "reportType", "recordPath", "subjectMessageId", "subjectConvoId")
65
+ WHERE ("queueId" IS NULL AND status != 'closed')`.execute(db)
66
+ }
67
+
68
+ export async function down(db: Kysely<unknown>): Promise<void> {
69
+ // report
70
+ await db.schema.dropIndex('idx_report_unassigned_id').execute()
71
+ await sql`CREATE INDEX idx_report_unassigned_id ON report
72
+ (id)
73
+ INCLUDE (status, "reportType", "recordPath", "subjectMessageId")
74
+ WHERE ("queueId" IS NULL AND status != 'closed')`.execute(db)
75
+ await db.schema.alterTable('report').dropColumn('subjectConvoId').execute()
76
+
77
+ // expiring_tag
78
+ await db.schema
79
+ .dropIndex('idx_expiring_tag_did_record_path_convo_id')
80
+ .execute()
81
+ await db.schema.alterTable('expiring_tag').dropColumn('convoId').execute()
82
+
83
+ // moderation_subject_status
84
+ /// Reverse the unique constraint change: [did, recordPath, convoId] -> [did, recordPath]
85
+ await sql`
86
+ CREATE UNIQUE INDEX "moderation_status_unique_idx_old"
87
+ ON moderation_subject_status(did, "recordPath")
88
+ `.execute(db)
89
+ await db.schema
90
+ .alterTable('moderation_subject_status')
91
+ .dropConstraint('moderation_status_unique_idx')
92
+ .execute()
93
+ await db.schema.dropIndex('moderation_status_unique_idx').ifExists().execute()
94
+ await sql`
95
+ ALTER INDEX "moderation_status_unique_idx_old"
96
+ RENAME TO "moderation_status_unique_idx"
97
+ `.execute(db)
98
+ await sql`
99
+ ALTER TABLE moderation_subject_status
100
+ ADD CONSTRAINT "moderation_status_unique_idx"
101
+ UNIQUE USING INDEX "moderation_status_unique_idx"
102
+ `.execute(db)
103
+ await db.schema
104
+ .alterTable('moderation_subject_status')
105
+ .dropColumn('convoId')
106
+ .execute()
107
+
108
+ // moderation_event
109
+ await db.schema.dropIndex('moderation_event_convo_idx').execute()
110
+ await db.schema
111
+ .alterTable('moderation_event')
112
+ .dropColumn('subjectConvoId')
113
+ .execute()
114
+ }
@@ -40,3 +40,4 @@ export * as _20260225T000000000Z from './20260225T000000000Z-add-report-queue-ta
40
40
  export * as _20260313T000000000Z from './20260313T000000000Z-add-report-activity-table.js'
41
41
  export * as _20260318T152058935Z from './20260318T152058935Z-add-report-stat.js'
42
42
  export * as _20260428T000000000Z from './20260428T000000000Z-add-expiring-tag-table.js'
43
+ export * as _20260513T202941104Z from './20260513T202941104Z-add-subject-convo-id.js'
@@ -7,6 +7,7 @@ export interface ExpiringTag {
7
7
  eventId: number
8
8
  did: string
9
9
  recordPath: string
10
+ convoId: string
10
11
  tag: string
11
12
  expiresAt: string
12
13
  createdBy: string
@@ -31,10 +31,12 @@ export interface ModerationEvent {
31
31
  | 'com.atproto.admin.defs#repoRef'
32
32
  | 'com.atproto.repo.strongRef'
33
33
  | 'chat.bsky.convo.defs#messageRef'
34
+ | 'chat.bsky.convo.defs#convoRef'
34
35
  subjectDid: string
35
36
  subjectUri: string | null
36
37
  subjectCid: string | null
37
38
  subjectBlobCids: string[] | null
39
+ subjectConvoId: string | null
38
40
  subjectMessageId: string | null
39
41
  createLabelVals: string | null
40
42
  negateLabelVals: string | null
@@ -10,8 +10,12 @@ export const subjectStatusTableName = 'moderation_subject_status'
10
10
 
11
11
  export interface ModerationSubjectStatus {
12
12
  id: Generated<number>
13
+
14
+ // unique columns
13
15
  did: string
14
16
  recordPath: string
17
+ convoId: string
18
+
15
19
  recordCid: string | null
16
20
  blobCids: string[] | null
17
21
  reviewState:
@@ -13,8 +13,9 @@ export interface Report {
13
13
  status: string // 'open', 'closed', 'escalated', 'queued', 'assigned'
14
14
  reportType: string // Denormalized from moderation_event.meta.reportType
15
15
  did: string // Denormalized from moderation_event.subjectDid
16
- recordPath: string // '' = account/message, 'collection/rkey' = record
16
+ recordPath: string // '' = account/message/conversation, 'collection/rkey' = record
17
17
  subjectMessageId: string | null // Denormalized from moderation_event.subjectMessageId
18
+ subjectConvoId: string | null // Denormalized from moderation_event.subjectConvoId
18
19
  createdAt: string
19
20
  updatedAt: string
20
21
  assignedTo: string | null // DID of permanently assigned moderator, null if unassigned
@@ -7,6 +7,7 @@ export type ExpiringTagRow = Selectable<ExpiringTag>
7
7
  export type ExpiringTagGroup = {
8
8
  did: string
9
9
  recordPath: string
10
+ convoId: string
10
11
  createdBy: string
11
12
  tags: string[]
12
13
  ids: number[]
@@ -18,6 +19,7 @@ export async function insertExpiringTags(
18
19
  eventId: number
19
20
  did: string
20
21
  recordPath: string
22
+ convoId: string
21
23
  tags: string[]
22
24
  expiresAt: string
23
25
  createdBy: string
@@ -30,6 +32,7 @@ export async function insertExpiringTags(
30
32
  eventId: params.eventId,
31
33
  did: params.did,
32
34
  recordPath: params.recordPath,
35
+ convoId: params.convoId,
33
36
  tag,
34
37
  expiresAt: params.expiresAt,
35
38
  createdBy: params.createdBy,
@@ -43,6 +46,7 @@ export async function removeExpiringTags(
43
46
  params: {
44
47
  did: string
45
48
  recordPath: string
49
+ convoId: string
46
50
  tags: string[]
47
51
  },
48
52
  ): Promise<void> {
@@ -50,6 +54,7 @@ export async function removeExpiringTags(
50
54
  .deleteFrom('expiring_tag')
51
55
  .where('did', '=', params.did)
52
56
  .where('recordPath', '=', params.recordPath)
57
+ .where('convoId', '=', params.convoId)
53
58
  .where('tag', 'in', params.tags)
54
59
  .execute()
55
60
  }
@@ -73,15 +78,16 @@ export async function getExpiredTags(
73
78
 
74
79
  if (!rows.length) return []
75
80
 
76
- // Group by (did, recordPath, createdBy) so each reversal event has the correct author
81
+ // Group by (did, recordPath, convoId, createdBy) so each reversal event has the correct author
77
82
  const grouped = new Map<string, ExpiringTagGroup>()
78
83
  for (const row of rows) {
79
- const key = `${row.did}|${row.recordPath}|${row.createdBy}`
84
+ const key = `${row.did}|${row.recordPath}|${row.convoId}|${row.createdBy}`
80
85
  let group = grouped.get(key)
81
86
  if (!group) {
82
87
  group = {
83
88
  did: row.did,
84
89
  recordPath: row.recordPath,
90
+ convoId: row.convoId,
85
91
  createdBy: row.createdBy,
86
92
  tags: [],
87
93
  ids: [],
@@ -235,21 +235,34 @@ export class ModerationService {
235
235
 
236
236
  if (subject) {
237
237
  const isSubjectAtUri = subject.startsWith('at://')
238
+ const subjectAtUri = isSubjectAtUri ? new AtUri(subject) : null
238
239
  const subjectDid = isSubjectAtUri ? new AtUri(subject).hostname : subject
239
240
  const subjectUri = isSubjectAtUri ? subject : null
240
241
  // regardless of subjectUri check, we always want to query against subjectDid column since that's indexed
241
242
  builder = builder.where('subjectDid', '=', subjectDid)
242
243
 
243
- // if requester wants to include all user records, let's ignore matching on subjectUri
244
+ // subjectUri or subjectConvoId
244
245
  if (!includeAllUserRecords) {
245
- builder = builder
246
- .if(!subjectUri, (q) => q.where('subjectUri', 'is', null))
247
- .if(!!subjectUri, (q) => q.where('subjectUri', '=', subjectUri))
246
+ if (subjectAtUri?.collection === 'chat.bsky.convo') {
247
+ builder = builder.where('subjectConvoId', '=', subjectAtUri.rkey)
248
+ } else if (subjectUri) {
249
+ builder = builder.where('subjectUri', '=', subjectUri)
250
+ } else {
251
+ // Account-level: subjectUri IS NULL also matches conversation events,
252
+ // so explicitly exclude them.
253
+ builder = builder
254
+ .where('subjectUri', 'is', null)
255
+ .where('subjectConvoId', 'is', null)
256
+ }
248
257
  }
249
258
  } else if (subjectType === 'account') {
250
- builder = builder.where('subjectUri', 'is', null)
259
+ builder = builder
260
+ .where('subjectUri', 'is', null)
261
+ .where('subjectConvoId', 'is', null)
251
262
  } else if (subjectType === 'record') {
252
263
  builder = builder.where('subjectUri', 'is not', null)
264
+ } else if (subjectType === 'conversation') {
265
+ builder = builder.where('subjectConvoId', 'is not', null)
253
266
  }
254
267
 
255
268
  // If subjectType is set to 'account' let that take priority and ignore collections filter
@@ -433,7 +446,9 @@ export class ModerationService {
433
446
  const subjectsToBeResolved = await this.db.db
434
447
  .selectFrom('moderation_subject_status')
435
448
  .where('did', '=', did)
436
- .where('recordPath', '!=', '')
449
+ .where((qb) =>
450
+ qb.where('recordPath', '!=', '').orWhere('convoId', '!=', ''),
451
+ )
437
452
  .where('reviewState', 'in', [REVIEWESCALATED, REVIEWOPEN])
438
453
  .selectAll()
439
454
  .execute()
@@ -686,6 +701,7 @@ export class ModerationService {
686
701
  subjectCid: subjectInfo.subjectCid,
687
702
  subjectBlobCids: jsonb(subjectInfo.subjectBlobCids),
688
703
  subjectMessageId: subjectInfo.subjectMessageId,
704
+ subjectConvoId: subjectInfo.subjectConvoId,
689
705
  modTool: modTool ? jsonb(modTool) : null,
690
706
  externalId: externalId ?? null,
691
707
  severityLevel,
@@ -712,6 +728,7 @@ export class ModerationService {
712
728
  eventId: modEvent.id,
713
729
  did: subjectInfo.subjectDid,
714
730
  recordPath: subjectInfo.subjectUri ?? '',
731
+ convoId: subjectInfo.subjectConvoId ?? '',
715
732
  tags: event.add,
716
733
  expiresAt,
717
734
  createdBy,
@@ -721,6 +738,7 @@ export class ModerationService {
721
738
  await removeExpiringTags(this.db, {
722
739
  did: subjectInfo.subjectDid,
723
740
  recordPath: subjectInfo.subjectUri ?? '',
741
+ convoId: subjectInfo.subjectConvoId ?? '',
724
742
  tags: event.remove,
725
743
  })
726
744
  }
@@ -815,6 +833,7 @@ export class ModerationService {
815
833
  .selectFrom('moderation_subject_status')
816
834
  .where('did', '=', did)
817
835
  .where('recordPath', '=', '')
836
+ .where('convoId', '=', '')
818
837
  .where('suspendUntil', '>', new Date().toISOString())
819
838
  .select('did')
820
839
  .limit(1)
@@ -1135,20 +1154,34 @@ export class ModerationService {
1135
1154
  )
1136
1155
 
1137
1156
  if (!includeAllUserRecords) {
1138
- builder = builder.where((qb) =>
1139
- subjectInfo.recordPath
1140
- ? qb.where(
1141
- 'moderation_subject_status.recordPath',
1142
- '=',
1143
- subjectInfo.recordPath,
1144
- )
1145
- : qb.where('moderation_subject_status.recordPath', '=', ''),
1146
- )
1157
+ if (subjectInfo.convoId) {
1158
+ builder = builder.where(
1159
+ 'moderation_subject_status.convoId',
1160
+ '=',
1161
+ subjectInfo.convoId,
1162
+ )
1163
+ } else if (subjectInfo.recordPath) {
1164
+ builder = builder.where(
1165
+ 'moderation_subject_status.recordPath',
1166
+ '=',
1167
+ subjectInfo.recordPath,
1168
+ )
1169
+ } else {
1170
+ // Account-level: recordPath = '' also matches conversation statuses,
1171
+ // so explicitly exclude them.
1172
+ builder = builder
1173
+ .where('moderation_subject_status.recordPath', '=', '')
1174
+ .where('moderation_subject_status.convoId', '=', '')
1175
+ }
1147
1176
  }
1148
1177
  } else if (subjectType === 'account') {
1149
- builder = builder.where('moderation_subject_status.recordPath', '=', '')
1178
+ builder = builder
1179
+ .where('moderation_subject_status.recordPath', '=', '')
1180
+ .where('moderation_subject_status.convoId', '=', '')
1150
1181
  } else if (subjectType === 'record') {
1151
1182
  builder = builder.where('moderation_subject_status.recordPath', '!=', '')
1183
+ } else if (subjectType === 'conversation') {
1184
+ builder = builder.where('moderation_subject_status.convoId', '!=', '')
1152
1185
  }
1153
1186
 
1154
1187
  // Only fetch items that belongs to the specified queue when specified
@@ -1438,6 +1471,7 @@ export class ModerationService {
1438
1471
  .selectFrom('moderation_subject_status')
1439
1472
  .where('did', '=', subject.did)
1440
1473
  .where('recordPath', '=', subject.recordPath ?? '')
1474
+ .where('convoId', '=', subject.convoId ?? '')
1441
1475
  .selectAll()
1442
1476
  .executeTakeFirst()
1443
1477
  return result ?? null
@@ -1450,6 +1484,7 @@ export class ModerationService {
1450
1484
  .selectFrom('moderation_subject_status')
1451
1485
  .where('did', '=', did)
1452
1486
  .where('recordPath', '=', '')
1487
+ .where('convoId', '=', '')
1453
1488
  .where('muteReportingUntil', '>', new Date().toISOString())
1454
1489
  .select(sql`true`.as('status'))
1455
1490
  .executeTakeFirst()
@@ -1463,6 +1498,7 @@ export class ModerationService {
1463
1498
  .selectFrom('moderation_subject_status')
1464
1499
  .where('did', '=', did)
1465
1500
  .where('recordPath', '=', '')
1501
+ .where('convoId', '=', '')
1466
1502
  .where('muteUntil', '>', new Date().toISOString())
1467
1503
  .select(sql`true`.as('status'))
1468
1504
  .executeTakeFirst()
@@ -283,6 +283,7 @@ export const adjustModerationSubjectStatus = async (
283
283
  subjectDid,
284
284
  subjectUri,
285
285
  subjectCid,
286
+ subjectConvoId,
286
287
  createdBy,
287
288
  meta,
288
289
  addedTags,
@@ -292,7 +293,10 @@ export const adjustModerationSubjectStatus = async (
292
293
  } = moderationEvent
293
294
 
294
295
  // If subjectUri exists, it's not a repoRef so pass along the uri to get identifier back
295
- const identifier = getStatusIdentifierFromSubject(subjectUri || subjectDid)
296
+ const identifier = getStatusIdentifierFromSubject(
297
+ subjectUri || subjectDid,
298
+ subjectConvoId,
299
+ )
296
300
 
297
301
  db.assertTransaction()
298
302
 
@@ -301,6 +305,7 @@ export const adjustModerationSubjectStatus = async (
301
305
  .selectFrom('moderation_subject_status')
302
306
  .where('did', '=', identifier.did)
303
307
  .where('recordPath', '=', identifier.recordPath)
308
+ .where('convoId', '=', identifier.convoId)
304
309
  // Make sure we respect other updates that may be happening at the same time
305
310
  .forUpdate()
306
311
  .selectAll()
@@ -504,14 +509,20 @@ export const adjustModerationSubjectStatus = async (
504
509
  return status || null
505
510
  }
506
511
 
512
+ /**
513
+ * Get moderation_subject_status identifier (did, recordPath, convoId).
514
+ * @note Supports addressing conversations explicitly (via convoId) and implicitly (via properly formed at-uri)
515
+ */
507
516
  export const getStatusIdentifierFromSubject = (
508
517
  subject: string | AtUri,
509
- ): { did: string; recordPath: string } => {
518
+ convoId?: string | null,
519
+ ): { did: string; recordPath: string; convoId: string } => {
510
520
  const isSubjectString = typeof subject === 'string'
511
521
  if (isSubjectString && subject.startsWith('did:')) {
512
522
  return {
513
523
  did: subject,
514
524
  recordPath: '',
525
+ convoId: convoId || '',
515
526
  }
516
527
  }
517
528
 
@@ -520,8 +531,19 @@ export const getStatusIdentifierFromSubject = (
520
531
  }
521
532
 
522
533
  const uri = isSubjectString ? new AtUri(subject) : subject
534
+
535
+ // Handle conversation URIs
536
+ if (uri.collection === 'chat.bsky.convo') {
537
+ return {
538
+ did: uri.host,
539
+ recordPath: '',
540
+ convoId: uri.rkey,
541
+ }
542
+ }
543
+
523
544
  return {
524
545
  did: uri.host,
525
546
  recordPath: `${uri.collection}/${uri.rkey}`,
547
+ convoId: '',
526
548
  }
527
549
  }
@@ -16,6 +16,9 @@ const isStrongRef = asPredicate(ComAtprotoRepoStrongRef.validateMain)
16
16
  type MessageRef = ChatBskyConvoDefs.MessageRef
17
17
  const isValidMessageRef = asPredicate(ChatBskyConvoDefs.validateMessageRef)
18
18
 
19
+ type ConvoRef = ChatBskyConvoDefs.ConvoRef
20
+ const isValidConvoRef = asPredicate(ChatBskyConvoDefs.validateConvoRef)
21
+
19
22
  const isMessageRefWithoutConvoId = (
20
23
  subject: unknown,
21
24
  ): subject is $Typed<Omit<MessageRef, 'convoId'> & { convoId?: string }> =>
@@ -41,6 +44,11 @@ export const subjectFromInput = (
41
44
  if (isValidMessageRef(subject)) {
42
45
  return new MessageSubject(subject.did, subject.convoId, subject.messageId)
43
46
  }
47
+ // @NOTE #convoRef is a new type for reporting entire conversations.
48
+ // Similar to messageRef, we take advantage of the open union to support this.
49
+ if (isValidConvoRef(subject)) {
50
+ return new ConvoSubject(subject.did, subject.convoId)
51
+ }
44
52
  // @TODO we should start to require subject.convoId is a string in order to properly validate
45
53
  // the #messageRef. temporarily allowing it to be optional as a stopgap for rollout.
46
54
  // The next "if" can be removed once convoId is consistently provided.
@@ -73,6 +81,11 @@ export const subjectFromEventRow = (row: ModerationEventRow): ModSubject => {
73
81
  const convoId =
74
82
  typeof row.meta?.['convoId'] === 'string' ? row.meta['convoId'] : ''
75
83
  return new MessageSubject(row.subjectDid, convoId, row.subjectMessageId)
84
+ } else if (
85
+ row.subjectType === 'chat.bsky.convo.defs#convoRef' &&
86
+ row.subjectConvoId
87
+ ) {
88
+ return new ConvoSubject(row.subjectDid, row.subjectConvoId)
76
89
  } else {
77
90
  return new RepoSubject(row.subjectDid)
78
91
  }
@@ -86,6 +99,9 @@ export const subjectFromStatusRow = (
86
99
  // which is what the last 2 params of .make() arguments are
87
100
  const uri = AtUri.make(row.did, ...row.recordPath.split('/')).toString()
88
101
  return new RecordSubject(uri.toString(), row.recordCid, row.blobCids ?? [])
102
+ } else if (row.convoId) {
103
+ // Conversation subject - restore from subject status row
104
+ return new ConvoSubject(row.did, row.convoId)
89
105
  } else {
90
106
  return new RepoSubject(row.did)
91
107
  }
@@ -96,28 +112,37 @@ type SubjectInfo = {
96
112
  | 'com.atproto.admin.defs#repoRef'
97
113
  | 'com.atproto.repo.strongRef'
98
114
  | 'chat.bsky.convo.defs#messageRef'
115
+ | 'chat.bsky.convo.defs#convoRef'
99
116
  subjectDid: string
100
117
  subjectUri: string | null
101
118
  subjectCid: string | null
102
119
  subjectBlobCids: string[] | null
103
120
  subjectMessageId: string | null
121
+ subjectConvoId: string | null
104
122
  meta: Record<string, string | undefined> | null
105
123
  }
106
124
 
107
125
  export interface ModSubject {
108
126
  did: string
109
127
  recordPath: string | undefined
128
+ convoId: string | undefined
110
129
  blobCids?: string[]
111
130
  isRepo(): this is RepoSubject
112
131
  isRecord(): this is RecordSubject
113
132
  isMessage(): this is MessageSubject
133
+ isConvo(): this is ConvoSubject
114
134
  info(): SubjectInfo
115
- lex(): $Typed<RepoRef> | $Typed<StrongRef> | $Typed<MessageRef>
135
+ lex():
136
+ | $Typed<RepoRef>
137
+ | $Typed<StrongRef>
138
+ | $Typed<MessageRef>
139
+ | $Typed<ConvoRef>
116
140
  }
117
141
 
118
142
  export class RepoSubject implements ModSubject {
119
143
  blobCids = undefined
120
144
  recordPath = undefined
145
+ convoId = undefined
121
146
  constructor(public did: string) {}
122
147
  isRepo(): this is RepoSubject {
123
148
  return true
@@ -128,6 +153,9 @@ export class RepoSubject implements ModSubject {
128
153
  isMessage(): this is MessageSubject {
129
154
  return false
130
155
  }
156
+ isConvo(): this is ConvoSubject {
157
+ return false
158
+ }
131
159
  info() {
132
160
  return {
133
161
  subjectType: 'com.atproto.admin.defs#repoRef' as const,
@@ -136,6 +164,7 @@ export class RepoSubject implements ModSubject {
136
164
  subjectCid: null,
137
165
  subjectBlobCids: null,
138
166
  subjectMessageId: null,
167
+ subjectConvoId: null,
139
168
  meta: null,
140
169
  }
141
170
  }
@@ -151,6 +180,7 @@ export class RecordSubject implements ModSubject {
151
180
  parsedUri: AtUri
152
181
  did: string
153
182
  recordPath: string
183
+ convoId = undefined
154
184
  constructor(
155
185
  public uri: string,
156
186
  public cid: string,
@@ -169,6 +199,9 @@ export class RecordSubject implements ModSubject {
169
199
  isMessage(): this is MessageSubject {
170
200
  return false
171
201
  }
202
+ isConvo(): this is ConvoSubject {
203
+ return false
204
+ }
172
205
  info() {
173
206
  return {
174
207
  subjectType: 'com.atproto.repo.strongRef' as const,
@@ -177,6 +210,7 @@ export class RecordSubject implements ModSubject {
177
210
  subjectCid: this.cid,
178
211
  subjectBlobCids: this.blobCids ?? [],
179
212
  subjectMessageId: null,
213
+ subjectConvoId: null,
180
214
  meta: null,
181
215
  }
182
216
  }
@@ -206,6 +240,9 @@ export class MessageSubject implements ModSubject {
206
240
  isMessage(): this is MessageSubject {
207
241
  return true
208
242
  }
243
+ isConvo(): this is ConvoSubject {
244
+ return false
245
+ }
209
246
  info() {
210
247
  return {
211
248
  subjectType: 'chat.bsky.convo.defs#messageRef' as const,
@@ -214,6 +251,7 @@ export class MessageSubject implements ModSubject {
214
251
  subjectCid: null,
215
252
  subjectBlobCids: null,
216
253
  subjectMessageId: this.messageId,
254
+ subjectConvoId: this.convoId,
217
255
  meta: { convoId: this.convoId || undefined },
218
256
  }
219
257
  }
@@ -226,3 +264,43 @@ export class MessageSubject implements ModSubject {
226
264
  }
227
265
  }
228
266
  }
267
+
268
+ export class ConvoSubject implements ModSubject {
269
+ blobCids = undefined
270
+ recordPath = undefined
271
+ constructor(
272
+ public did: string,
273
+ public convoId: string,
274
+ ) {}
275
+ isRepo(): this is RepoSubject {
276
+ return false
277
+ }
278
+ isRecord(): this is RecordSubject {
279
+ return false
280
+ }
281
+ isMessage(): this is MessageSubject {
282
+ return false
283
+ }
284
+ isConvo(): this is ConvoSubject {
285
+ return true
286
+ }
287
+ info() {
288
+ return {
289
+ subjectType: 'chat.bsky.convo.defs#convoRef' as const,
290
+ subjectDid: this.did,
291
+ subjectUri: null,
292
+ subjectCid: null,
293
+ subjectBlobCids: null,
294
+ subjectMessageId: null,
295
+ subjectConvoId: this.convoId,
296
+ meta: { convoId: this.convoId || undefined },
297
+ }
298
+ }
299
+ lex(): $Typed<ConvoRef> {
300
+ return {
301
+ $type: 'chat.bsky.convo.defs#convoRef',
302
+ did: this.did,
303
+ convoId: this.convoId,
304
+ }
305
+ }
306
+ }