@atproto/ozone 0.1.172 → 0.1.174

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 (450) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/api/index.d.ts.map +1 -1
  3. package/dist/api/index.js +40 -0
  4. package/dist/api/index.js.map +1 -1
  5. package/dist/api/moderation/emitEvent.d.ts.map +1 -1
  6. package/dist/api/moderation/emitEvent.js +31 -0
  7. package/dist/api/moderation/emitEvent.js.map +1 -1
  8. package/dist/api/queue/assignModerator.d.ts +4 -0
  9. package/dist/api/queue/assignModerator.d.ts.map +1 -0
  10. package/dist/api/queue/assignModerator.js +28 -0
  11. package/dist/api/queue/assignModerator.js.map +1 -0
  12. package/dist/api/queue/createQueue.d.ts +4 -0
  13. package/dist/api/queue/createQueue.d.ts.map +1 -0
  14. package/dist/api/queue/createQueue.js +44 -0
  15. package/dist/api/queue/createQueue.js.map +1 -0
  16. package/dist/api/queue/deleteQueue.d.ts +4 -0
  17. package/dist/api/queue/deleteQueue.d.ts.map +1 -0
  18. package/dist/api/queue/deleteQueue.js +40 -0
  19. package/dist/api/queue/deleteQueue.js.map +1 -0
  20. package/dist/api/queue/getAssignments.d.ts +4 -0
  21. package/dist/api/queue/getAssignments.d.ts.map +1 -0
  22. package/dist/api/queue/getAssignments.js +19 -0
  23. package/dist/api/queue/getAssignments.js.map +1 -0
  24. package/dist/api/queue/listQueues.d.ts +4 -0
  25. package/dist/api/queue/listQueues.d.ts.map +1 -0
  26. package/dist/api/queue/listQueues.js +29 -0
  27. package/dist/api/queue/listQueues.js.map +1 -0
  28. package/dist/api/queue/routeReports.d.ts +4 -0
  29. package/dist/api/queue/routeReports.d.ts.map +1 -0
  30. package/dist/api/queue/routeReports.js +33 -0
  31. package/dist/api/queue/routeReports.js.map +1 -0
  32. package/dist/api/queue/unassignModerator.d.ts +4 -0
  33. package/dist/api/queue/unassignModerator.d.ts.map +1 -0
  34. package/dist/api/queue/unassignModerator.js +24 -0
  35. package/dist/api/queue/unassignModerator.js.map +1 -0
  36. package/dist/api/queue/updateQueue.d.ts +4 -0
  37. package/dist/api/queue/updateQueue.d.ts.map +1 -0
  38. package/dist/api/queue/updateQueue.js +39 -0
  39. package/dist/api/queue/updateQueue.js.map +1 -0
  40. package/dist/api/report/assignModerator.d.ts +4 -0
  41. package/dist/api/report/assignModerator.d.ts.map +1 -0
  42. package/dist/api/report/assignModerator.js +33 -0
  43. package/dist/api/report/assignModerator.js.map +1 -0
  44. package/dist/api/report/createActivity.d.ts +4 -0
  45. package/dist/api/report/createActivity.d.ts.map +1 -0
  46. package/dist/api/report/createActivity.js +44 -0
  47. package/dist/api/report/createActivity.js.map +1 -0
  48. package/dist/api/report/getAssignments.d.ts +4 -0
  49. package/dist/api/report/getAssignments.d.ts.map +1 -0
  50. package/dist/api/report/getAssignments.js +19 -0
  51. package/dist/api/report/getAssignments.js.map +1 -0
  52. package/dist/api/report/getHistoricalStats.d.ts +4 -0
  53. package/dist/api/report/getHistoricalStats.d.ts.map +1 -0
  54. package/dist/api/report/getHistoricalStats.js +32 -0
  55. package/dist/api/report/getHistoricalStats.js.map +1 -0
  56. package/dist/api/report/getLatestReport.d.ts +4 -0
  57. package/dist/api/report/getLatestReport.d.ts.map +1 -0
  58. package/dist/api/report/getLatestReport.js +31 -0
  59. package/dist/api/report/getLatestReport.js.map +1 -0
  60. package/dist/api/report/getLiveStats.d.ts +4 -0
  61. package/dist/api/report/getLiveStats.d.ts.map +1 -0
  62. package/dist/api/report/getLiveStats.js +25 -0
  63. package/dist/api/report/getLiveStats.js.map +1 -0
  64. package/dist/api/report/getReport.d.ts +4 -0
  65. package/dist/api/report/getReport.d.ts.map +1 -0
  66. package/dist/api/report/getReport.js +35 -0
  67. package/dist/api/report/getReport.js.map +1 -0
  68. package/dist/api/report/listActivities.d.ts +4 -0
  69. package/dist/api/report/listActivities.d.ts.map +1 -0
  70. package/dist/api/report/listActivities.js +25 -0
  71. package/dist/api/report/listActivities.js.map +1 -0
  72. package/dist/api/report/queryReports.d.ts +4 -0
  73. package/dist/api/report/queryReports.d.ts.map +1 -0
  74. package/dist/api/report/queryReports.js +29 -0
  75. package/dist/api/report/queryReports.js.map +1 -0
  76. package/dist/api/report/reassignQueue.d.ts +4 -0
  77. package/dist/api/report/reassignQueue.d.ts.map +1 -0
  78. package/dist/api/report/reassignQueue.js +45 -0
  79. package/dist/api/report/reassignQueue.js.map +1 -0
  80. package/dist/api/report/refreshStats.d.ts +4 -0
  81. package/dist/api/report/refreshStats.d.ts.map +1 -0
  82. package/dist/api/report/refreshStats.js +26 -0
  83. package/dist/api/report/refreshStats.js.map +1 -0
  84. package/dist/api/report/unassignModerator.d.ts +4 -0
  85. package/dist/api/report/unassignModerator.d.ts.map +1 -0
  86. package/dist/api/report/unassignModerator.js +21 -0
  87. package/dist/api/report/unassignModerator.js.map +1 -0
  88. package/dist/api/util.d.ts +2 -0
  89. package/dist/api/util.d.ts.map +1 -1
  90. package/dist/api/util.js +9 -1
  91. package/dist/api/util.js.map +1 -1
  92. package/dist/assignment/index.d.ts +89 -0
  93. package/dist/assignment/index.d.ts.map +1 -0
  94. package/dist/assignment/index.js +537 -0
  95. package/dist/assignment/index.js.map +1 -0
  96. package/dist/config/config.d.ts +14 -0
  97. package/dist/config/config.d.ts.map +1 -1
  98. package/dist/config/config.js +9 -0
  99. package/dist/config/config.js.map +1 -1
  100. package/dist/config/env.d.ts +3 -0
  101. package/dist/config/env.d.ts.map +1 -1
  102. package/dist/config/env.js +3 -0
  103. package/dist/config/env.js.map +1 -1
  104. package/dist/context.d.ts +9 -0
  105. package/dist/context.d.ts.map +1 -1
  106. package/dist/context.js +31 -10
  107. package/dist/context.js.map +1 -1
  108. package/dist/daemon/context.d.ts +6 -0
  109. package/dist/daemon/context.d.ts.map +1 -1
  110. package/dist/daemon/context.js +28 -4
  111. package/dist/daemon/context.js.map +1 -1
  112. package/dist/daemon/event-reverser.d.ts +1 -0
  113. package/dist/daemon/event-reverser.d.ts.map +1 -1
  114. package/dist/daemon/event-reverser.js +42 -1
  115. package/dist/daemon/event-reverser.js.map +1 -1
  116. package/dist/daemon/job-cursor.d.ts +5 -0
  117. package/dist/daemon/job-cursor.d.ts.map +1 -0
  118. package/dist/daemon/job-cursor.js +28 -0
  119. package/dist/daemon/job-cursor.js.map +1 -0
  120. package/dist/daemon/queue-router.d.ts +17 -0
  121. package/dist/daemon/queue-router.d.ts.map +1 -0
  122. package/dist/daemon/queue-router.js +114 -0
  123. package/dist/daemon/queue-router.js.map +1 -0
  124. package/dist/daemon/stats-computer.d.ts +51 -0
  125. package/dist/daemon/stats-computer.d.ts.map +1 -0
  126. package/dist/daemon/stats-computer.js +117 -0
  127. package/dist/daemon/stats-computer.js.map +1 -0
  128. package/dist/daemon/strike-expiry-processor.d.ts.map +1 -1
  129. package/dist/daemon/strike-expiry-processor.js +4 -19
  130. package/dist/daemon/strike-expiry-processor.js.map +1 -1
  131. package/dist/db/migrations/20260219T164523000Z-create-report-table.d.ts +4 -0
  132. package/dist/db/migrations/20260219T164523000Z-create-report-table.d.ts.map +1 -0
  133. package/dist/db/migrations/20260219T164523000Z-create-report-table.js +126 -0
  134. package/dist/db/migrations/20260219T164523000Z-create-report-table.js.map +1 -0
  135. package/dist/db/migrations/20260219T165302248Z-moderator-assignment.d.ts +4 -0
  136. package/dist/db/migrations/20260219T165302248Z-moderator-assignment.d.ts.map +1 -0
  137. package/dist/db/migrations/20260219T165302248Z-moderator-assignment.js +35 -0
  138. package/dist/db/migrations/20260219T165302248Z-moderator-assignment.js.map +1 -0
  139. package/dist/db/migrations/20260225T000000000Z-add-report-queue-table.d.ts +4 -0
  140. package/dist/db/migrations/20260225T000000000Z-add-report-queue-table.d.ts.map +1 -0
  141. package/dist/db/migrations/20260225T000000000Z-add-report-queue-table.js +36 -0
  142. package/dist/db/migrations/20260225T000000000Z-add-report-queue-table.js.map +1 -0
  143. package/dist/db/migrations/20260313T000000000Z-add-report-activity-table.d.ts +4 -0
  144. package/dist/db/migrations/20260313T000000000Z-add-report-activity-table.d.ts.map +1 -0
  145. package/dist/db/migrations/20260313T000000000Z-add-report-activity-table.js +39 -0
  146. package/dist/db/migrations/20260313T000000000Z-add-report-activity-table.js.map +1 -0
  147. package/dist/db/migrations/20260318T152058935Z-add-report-stat.d.ts +4 -0
  148. package/dist/db/migrations/20260318T152058935Z-add-report-stat.d.ts.map +1 -0
  149. package/dist/db/migrations/20260318T152058935Z-add-report-stat.js +34 -0
  150. package/dist/db/migrations/20260318T152058935Z-add-report-stat.js.map +1 -0
  151. package/dist/db/migrations/20260428T000000000Z-add-expiring-tag-table.d.ts +4 -0
  152. package/dist/db/migrations/20260428T000000000Z-add-expiring-tag-table.d.ts.map +1 -0
  153. package/dist/db/migrations/20260428T000000000Z-add-expiring-tag-table.js +32 -0
  154. package/dist/db/migrations/20260428T000000000Z-add-expiring-tag-table.js.map +1 -0
  155. package/dist/db/migrations/index.d.ts +6 -0
  156. package/dist/db/migrations/index.d.ts.map +1 -1
  157. package/dist/db/migrations/index.js +7 -1
  158. package/dist/db/migrations/index.js.map +1 -1
  159. package/dist/db/pagination.d.ts +31 -0
  160. package/dist/db/pagination.d.ts.map +1 -1
  161. package/dist/db/pagination.js +74 -1
  162. package/dist/db/pagination.js.map +1 -1
  163. package/dist/db/schema/expiring_tag.d.ts +15 -0
  164. package/dist/db/schema/expiring_tag.d.ts.map +1 -0
  165. package/dist/db/schema/expiring_tag.js +5 -0
  166. package/dist/db/schema/expiring_tag.js.map +1 -0
  167. package/dist/db/schema/index.d.ts +7 -1
  168. package/dist/db/schema/index.d.ts.map +1 -1
  169. package/dist/db/schema/index.js.map +1 -1
  170. package/dist/db/schema/moderator_assignment.d.ts +14 -0
  171. package/dist/db/schema/moderator_assignment.d.ts.map +1 -0
  172. package/dist/db/schema/moderator_assignment.js +5 -0
  173. package/dist/db/schema/moderator_assignment.js.map +1 -0
  174. package/dist/db/schema/report.d.ts +25 -0
  175. package/dist/db/schema/report.d.ts.map +1 -0
  176. package/dist/db/schema/report.js +5 -0
  177. package/dist/db/schema/report.js.map +1 -0
  178. package/dist/db/schema/report_activity.d.ts +18 -0
  179. package/dist/db/schema/report_activity.d.ts.map +1 -0
  180. package/dist/db/schema/report_activity.js +5 -0
  181. package/dist/db/schema/report_activity.js.map +1 -0
  182. package/dist/db/schema/report_queue.d.ts +19 -0
  183. package/dist/db/schema/report_queue.d.ts.map +1 -0
  184. package/dist/db/schema/report_queue.js +5 -0
  185. package/dist/db/schema/report_queue.js.map +1 -0
  186. package/dist/db/schema/report_stat.d.ts +20 -0
  187. package/dist/db/schema/report_stat.d.ts.map +1 -0
  188. package/dist/db/schema/report_stat.js +5 -0
  189. package/dist/db/schema/report_stat.js.map +1 -0
  190. package/dist/lexicon/index.d.ts +50 -0
  191. package/dist/lexicon/index.d.ts.map +1 -1
  192. package/dist/lexicon/index.js +120 -2
  193. package/dist/lexicon/index.js.map +1 -1
  194. package/dist/lexicon/lexicons.d.ts +11255 -7885
  195. package/dist/lexicon/lexicons.d.ts.map +1 -1
  196. package/dist/lexicon/lexicons.js +1900 -120
  197. package/dist/lexicon/lexicons.js.map +1 -1
  198. package/dist/lexicon/types/app/bsky/embed/external.d.ts +2 -0
  199. package/dist/lexicon/types/app/bsky/embed/external.d.ts.map +1 -1
  200. package/dist/lexicon/types/app/bsky/embed/external.js.map +1 -1
  201. package/dist/lexicon/types/chat/bsky/actor/defs.d.ts +8 -2
  202. package/dist/lexicon/types/chat/bsky/actor/defs.d.ts.map +1 -1
  203. package/dist/lexicon/types/chat/bsky/actor/defs.js +9 -0
  204. package/dist/lexicon/types/chat/bsky/actor/defs.js.map +1 -1
  205. package/dist/lexicon/types/chat/bsky/convo/defs.d.ts +37 -10
  206. package/dist/lexicon/types/chat/bsky/convo/defs.d.ts.map +1 -1
  207. package/dist/lexicon/types/chat/bsky/convo/defs.js +9 -0
  208. package/dist/lexicon/types/chat/bsky/convo/defs.js.map +1 -1
  209. package/dist/lexicon/types/chat/bsky/convo/getMessages.d.ts +3 -0
  210. package/dist/lexicon/types/chat/bsky/convo/getMessages.d.ts.map +1 -1
  211. package/dist/lexicon/types/chat/bsky/convo/getMessages.js.map +1 -1
  212. package/dist/lexicon/types/tools/ozone/moderation/defs.d.ts +2 -0
  213. package/dist/lexicon/types/tools/ozone/moderation/defs.d.ts.map +1 -1
  214. package/dist/lexicon/types/tools/ozone/moderation/defs.js.map +1 -1
  215. package/dist/lexicon/types/tools/ozone/moderation/emitEvent.d.ts +19 -0
  216. package/dist/lexicon/types/tools/ozone/moderation/emitEvent.d.ts.map +1 -1
  217. package/dist/lexicon/types/tools/ozone/moderation/emitEvent.js +9 -0
  218. package/dist/lexicon/types/tools/ozone/moderation/emitEvent.js.map +1 -1
  219. package/dist/lexicon/types/tools/ozone/queue/assignModerator.d.ts +27 -0
  220. package/dist/lexicon/types/tools/ozone/queue/assignModerator.d.ts.map +1 -0
  221. package/dist/lexicon/types/tools/ozone/queue/assignModerator.js +7 -0
  222. package/dist/lexicon/types/tools/ozone/queue/assignModerator.js.map +1 -0
  223. package/dist/lexicon/types/tools/ozone/queue/createQueue.d.ts +35 -0
  224. package/dist/lexicon/types/tools/ozone/queue/createQueue.d.ts.map +1 -0
  225. package/dist/lexicon/types/tools/ozone/queue/createQueue.js +7 -0
  226. package/dist/lexicon/types/tools/ozone/queue/createQueue.js.map +1 -0
  227. package/dist/lexicon/types/tools/ozone/queue/defs.d.ts +62 -0
  228. package/dist/lexicon/types/tools/ozone/queue/defs.d.ts.map +1 -0
  229. package/dist/lexicon/types/tools/ozone/queue/defs.js +34 -0
  230. package/dist/lexicon/types/tools/ozone/queue/defs.js.map +1 -0
  231. package/dist/lexicon/types/tools/ozone/queue/deleteQueue.d.ts +29 -0
  232. package/dist/lexicon/types/tools/ozone/queue/deleteQueue.d.ts.map +1 -0
  233. package/dist/lexicon/types/tools/ozone/queue/deleteQueue.js +7 -0
  234. package/dist/lexicon/types/tools/ozone/queue/deleteQueue.js.map +1 -0
  235. package/dist/lexicon/types/tools/ozone/queue/getAssignments.d.ts +30 -0
  236. package/dist/lexicon/types/tools/ozone/queue/getAssignments.d.ts.map +1 -0
  237. package/dist/lexicon/types/tools/ozone/queue/getAssignments.js +7 -0
  238. package/dist/lexicon/types/tools/ozone/queue/getAssignments.js.map +1 -0
  239. package/dist/lexicon/types/tools/ozone/queue/listQueues.d.ts +32 -0
  240. package/dist/lexicon/types/tools/ozone/queue/listQueues.d.ts.map +1 -0
  241. package/dist/lexicon/types/tools/ozone/queue/listQueues.js +7 -0
  242. package/dist/lexicon/types/tools/ozone/queue/listQueues.js.map +1 -0
  243. package/dist/lexicon/types/tools/ozone/queue/routeReports.d.ts +31 -0
  244. package/dist/lexicon/types/tools/ozone/queue/routeReports.d.ts.map +1 -0
  245. package/dist/lexicon/types/tools/ozone/queue/routeReports.js +7 -0
  246. package/dist/lexicon/types/tools/ozone/queue/routeReports.js.map +1 -0
  247. package/dist/lexicon/types/tools/ozone/queue/unassignModerator.d.ts +18 -0
  248. package/dist/lexicon/types/tools/ozone/queue/unassignModerator.d.ts.map +1 -0
  249. package/dist/lexicon/types/tools/ozone/queue/unassignModerator.js +7 -0
  250. package/dist/lexicon/types/tools/ozone/queue/unassignModerator.js.map +1 -0
  251. package/dist/lexicon/types/tools/ozone/queue/updateQueue.d.ts +32 -0
  252. package/dist/lexicon/types/tools/ozone/queue/updateQueue.d.ts.map +1 -0
  253. package/dist/lexicon/types/tools/ozone/queue/updateQueue.js +7 -0
  254. package/dist/lexicon/types/tools/ozone/queue/updateQueue.js.map +1 -0
  255. package/dist/lexicon/types/tools/ozone/report/assignModerator.d.ts +31 -0
  256. package/dist/lexicon/types/tools/ozone/report/assignModerator.d.ts.map +1 -0
  257. package/dist/lexicon/types/tools/ozone/report/assignModerator.js +7 -0
  258. package/dist/lexicon/types/tools/ozone/report/assignModerator.js.map +1 -0
  259. package/dist/lexicon/types/tools/ozone/report/createActivity.d.ts +37 -0
  260. package/dist/lexicon/types/tools/ozone/report/createActivity.d.ts.map +1 -0
  261. package/dist/lexicon/types/tools/ozone/report/createActivity.js +7 -0
  262. package/dist/lexicon/types/tools/ozone/report/createActivity.js.map +1 -0
  263. package/dist/lexicon/types/tools/ozone/report/defs.d.ts +185 -0
  264. package/dist/lexicon/types/tools/ozone/report/defs.d.ts.map +1 -1
  265. package/dist/lexicon/types/tools/ozone/report/defs.js +108 -0
  266. package/dist/lexicon/types/tools/ozone/report/defs.js.map +1 -1
  267. package/dist/lexicon/types/tools/ozone/report/getAssignments.d.ts +30 -0
  268. package/dist/lexicon/types/tools/ozone/report/getAssignments.d.ts.map +1 -0
  269. package/dist/lexicon/types/tools/ozone/report/getAssignments.js +7 -0
  270. package/dist/lexicon/types/tools/ozone/report/getAssignments.js.map +1 -0
  271. package/dist/lexicon/types/tools/ozone/report/getHistoricalStats.d.ts +36 -0
  272. package/dist/lexicon/types/tools/ozone/report/getHistoricalStats.d.ts.map +1 -0
  273. package/dist/lexicon/types/tools/ozone/report/getHistoricalStats.js +7 -0
  274. package/dist/lexicon/types/tools/ozone/report/getHistoricalStats.js.map +1 -0
  275. package/dist/lexicon/types/tools/ozone/report/getLatestReport.d.ts +21 -0
  276. package/dist/lexicon/types/tools/ozone/report/getLatestReport.d.ts.map +1 -0
  277. package/dist/lexicon/types/tools/ozone/report/getLatestReport.js +7 -0
  278. package/dist/lexicon/types/tools/ozone/report/getLatestReport.js.map +1 -0
  279. package/dist/lexicon/types/tools/ozone/report/getLiveStats.d.ts +27 -0
  280. package/dist/lexicon/types/tools/ozone/report/getLiveStats.d.ts.map +1 -0
  281. package/dist/lexicon/types/tools/ozone/report/getLiveStats.js +7 -0
  282. package/dist/lexicon/types/tools/ozone/report/getLiveStats.js.map +1 -0
  283. package/dist/lexicon/types/tools/ozone/report/getReport.d.ts +22 -0
  284. package/dist/lexicon/types/tools/ozone/report/getReport.d.ts.map +1 -0
  285. package/dist/lexicon/types/tools/ozone/report/getReport.js +7 -0
  286. package/dist/lexicon/types/tools/ozone/report/getReport.js.map +1 -0
  287. package/dist/lexicon/types/tools/ozone/report/listActivities.d.ts +26 -0
  288. package/dist/lexicon/types/tools/ozone/report/listActivities.d.ts.map +1 -0
  289. package/dist/lexicon/types/tools/ozone/report/listActivities.js +7 -0
  290. package/dist/lexicon/types/tools/ozone/report/listActivities.js.map +1 -0
  291. package/dist/lexicon/types/tools/ozone/report/queryReports.d.ts +48 -0
  292. package/dist/lexicon/types/tools/ozone/report/queryReports.d.ts.map +1 -0
  293. package/dist/lexicon/types/tools/ozone/report/queryReports.js +7 -0
  294. package/dist/lexicon/types/tools/ozone/report/queryReports.js.map +1 -0
  295. package/dist/lexicon/types/tools/ozone/report/reassignQueue.d.ts +31 -0
  296. package/dist/lexicon/types/tools/ozone/report/reassignQueue.d.ts.map +1 -0
  297. package/dist/lexicon/types/tools/ozone/report/reassignQueue.js +7 -0
  298. package/dist/lexicon/types/tools/ozone/report/reassignQueue.js.map +1 -0
  299. package/dist/lexicon/types/tools/ozone/report/refreshStats.d.ts +28 -0
  300. package/dist/lexicon/types/tools/ozone/report/refreshStats.d.ts.map +1 -0
  301. package/dist/lexicon/types/tools/ozone/report/refreshStats.js +7 -0
  302. package/dist/lexicon/types/tools/ozone/report/refreshStats.js.map +1 -0
  303. package/dist/lexicon/types/tools/ozone/report/unassignModerator.d.ts +25 -0
  304. package/dist/lexicon/types/tools/ozone/report/unassignModerator.d.ts.map +1 -0
  305. package/dist/lexicon/types/tools/ozone/report/unassignModerator.js +7 -0
  306. package/dist/lexicon/types/tools/ozone/report/unassignModerator.js.map +1 -0
  307. package/dist/mod-service/expiring-tags.d.ts +27 -0
  308. package/dist/mod-service/expiring-tags.d.ts.map +1 -0
  309. package/dist/mod-service/expiring-tags.js +62 -0
  310. package/dist/mod-service/expiring-tags.js.map +1 -0
  311. package/dist/mod-service/index.d.ts +3 -1
  312. package/dist/mod-service/index.d.ts.map +1 -1
  313. package/dist/mod-service/index.js +61 -2
  314. package/dist/mod-service/index.js.map +1 -1
  315. package/dist/mod-service/report.d.ts +64 -0
  316. package/dist/mod-service/report.d.ts.map +1 -0
  317. package/dist/mod-service/report.js +282 -0
  318. package/dist/mod-service/report.js.map +1 -0
  319. package/dist/mod-service/status.d.ts +24 -0
  320. package/dist/mod-service/status.d.ts.map +1 -1
  321. package/dist/queue/service.d.ts +86 -0
  322. package/dist/queue/service.d.ts.map +1 -0
  323. package/dist/queue/service.js +430 -0
  324. package/dist/queue/service.js.map +1 -0
  325. package/dist/report/activity.d.ts +77 -0
  326. package/dist/report/activity.d.ts.map +1 -0
  327. package/dist/report/activity.js +141 -0
  328. package/dist/report/activity.js.map +1 -0
  329. package/dist/report/handle-report-update.d.ts +47 -0
  330. package/dist/report/handle-report-update.d.ts.map +1 -0
  331. package/dist/report/handle-report-update.js +178 -0
  332. package/dist/report/handle-report-update.js.map +1 -0
  333. package/dist/report/reassign.d.ts +10 -0
  334. package/dist/report/reassign.d.ts.map +1 -0
  335. package/dist/report/reassign.js +75 -0
  336. package/dist/report/reassign.js.map +1 -0
  337. package/dist/report/stats.d.ts +105 -0
  338. package/dist/report/stats.d.ts.map +1 -0
  339. package/dist/report/stats.js +619 -0
  340. package/dist/report/stats.js.map +1 -0
  341. package/dist/report/views.d.ts +111 -0
  342. package/dist/report/views.d.ts.map +1 -0
  343. package/dist/report/views.js +156 -0
  344. package/dist/report/views.js.map +1 -0
  345. package/dist/team/index.d.ts +1 -0
  346. package/dist/team/index.d.ts.map +1 -1
  347. package/dist/team/index.js +11 -0
  348. package/dist/team/index.js.map +1 -1
  349. package/package.json +3 -3
  350. package/src/api/index.ts +40 -0
  351. package/src/api/moderation/emitEvent.ts +38 -0
  352. package/src/api/queue/assignModerator.ts +31 -0
  353. package/src/api/queue/createQueue.ts +62 -0
  354. package/src/api/queue/deleteQueue.ts +56 -0
  355. package/src/api/queue/getAssignments.ts +19 -0
  356. package/src/api/queue/listQueues.ts +39 -0
  357. package/src/api/queue/routeReports.ts +44 -0
  358. package/src/api/queue/unassignModerator.ts +26 -0
  359. package/src/api/queue/updateQueue.ts +54 -0
  360. package/src/api/report/assignModerator.ts +36 -0
  361. package/src/api/report/createActivity.ts +57 -0
  362. package/src/api/report/getAssignments.ts +20 -0
  363. package/src/api/report/getHistoricalStats.ts +41 -0
  364. package/src/api/report/getLatestReport.ts +44 -0
  365. package/src/api/report/getLiveStats.ts +26 -0
  366. package/src/api/report/getReport.ts +55 -0
  367. package/src/api/report/listActivities.ts +34 -0
  368. package/src/api/report/queryReports.ts +44 -0
  369. package/src/api/report/reassignQueue.ts +68 -0
  370. package/src/api/report/refreshStats.ts +27 -0
  371. package/src/api/report/unassignModerator.ts +21 -0
  372. package/src/api/util.ts +12 -0
  373. package/src/assignment/index.ts +731 -0
  374. package/src/config/config.ts +27 -0
  375. package/src/config/env.ts +8 -0
  376. package/src/context.ts +31 -0
  377. package/src/daemon/context.ts +34 -0
  378. package/src/daemon/event-reverser.ts +50 -1
  379. package/src/daemon/job-cursor.ts +33 -0
  380. package/src/daemon/queue-router.ts +101 -0
  381. package/src/daemon/stats-computer.ts +101 -0
  382. package/src/daemon/strike-expiry-processor.ts +4 -20
  383. package/src/db/migrations/20260219T164523000Z-create-report-table.ts +155 -0
  384. package/src/db/migrations/20260219T165302248Z-moderator-assignment.ts +42 -0
  385. package/src/db/migrations/20260225T000000000Z-add-report-queue-table.ts +41 -0
  386. package/src/db/migrations/20260313T000000000Z-add-report-activity-table.ts +48 -0
  387. package/src/db/migrations/20260318T152058935Z-add-report-stat.ts +35 -0
  388. package/src/db/migrations/20260428T000000000Z-add-expiring-tag-table.ts +32 -0
  389. package/src/db/migrations/index.ts +6 -0
  390. package/src/db/pagination.ts +85 -0
  391. package/src/db/schema/expiring_tag.ts +17 -0
  392. package/src/db/schema/index.ts +13 -1
  393. package/src/db/schema/moderator_assignment.ts +16 -0
  394. package/src/db/schema/report.ts +27 -0
  395. package/src/db/schema/report_activity.ts +22 -0
  396. package/src/db/schema/report_queue.ts +21 -0
  397. package/src/db/schema/report_stat.ts +27 -0
  398. package/src/lexicon/index.ts +280 -0
  399. package/src/lexicon/lexicons.ts +2083 -214
  400. package/src/lexicon/types/app/bsky/embed/external.ts +2 -0
  401. package/src/lexicon/types/chat/bsky/actor/defs.ts +17 -1
  402. package/src/lexicon/types/chat/bsky/convo/defs.ts +50 -10
  403. package/src/lexicon/types/chat/bsky/convo/getMessages.ts +3 -0
  404. package/src/lexicon/types/tools/ozone/moderation/defs.ts +2 -0
  405. package/src/lexicon/types/tools/ozone/moderation/emitEvent.ts +24 -0
  406. package/src/lexicon/types/tools/ozone/queue/assignModerator.ts +46 -0
  407. package/src/lexicon/types/tools/ozone/queue/createQueue.ts +54 -0
  408. package/src/lexicon/types/tools/ozone/queue/defs.ts +99 -0
  409. package/src/lexicon/types/tools/ozone/queue/deleteQueue.ts +48 -0
  410. package/src/lexicon/types/tools/ozone/queue/getAssignments.ts +48 -0
  411. package/src/lexicon/types/tools/ozone/queue/listQueues.ts +50 -0
  412. package/src/lexicon/types/tools/ozone/queue/routeReports.ts +50 -0
  413. package/src/lexicon/types/tools/ozone/queue/unassignModerator.ts +37 -0
  414. package/src/lexicon/types/tools/ozone/queue/updateQueue.ts +51 -0
  415. package/src/lexicon/types/tools/ozone/report/assignModerator.ts +50 -0
  416. package/src/lexicon/types/tools/ozone/report/createActivity.ts +60 -0
  417. package/src/lexicon/types/tools/ozone/report/defs.ts +327 -0
  418. package/src/lexicon/types/tools/ozone/report/getAssignments.ts +48 -0
  419. package/src/lexicon/types/tools/ozone/report/getHistoricalStats.ts +54 -0
  420. package/src/lexicon/types/tools/ozone/report/getLatestReport.ts +39 -0
  421. package/src/lexicon/types/tools/ozone/report/getLiveStats.ts +45 -0
  422. package/src/lexicon/types/tools/ozone/report/getReport.ts +38 -0
  423. package/src/lexicon/types/tools/ozone/report/listActivities.ts +44 -0
  424. package/src/lexicon/types/tools/ozone/report/queryReports.ts +72 -0
  425. package/src/lexicon/types/tools/ozone/report/reassignQueue.ts +55 -0
  426. package/src/lexicon/types/tools/ozone/report/refreshStats.ts +46 -0
  427. package/src/lexicon/types/tools/ozone/report/unassignModerator.ts +44 -0
  428. package/src/mod-service/expiring-tags.ts +98 -0
  429. package/src/mod-service/index.ts +71 -3
  430. package/src/mod-service/report.ts +408 -0
  431. package/src/queue/service.ts +599 -0
  432. package/src/report/activity.ts +234 -0
  433. package/src/report/handle-report-update.ts +209 -0
  434. package/src/report/reassign.ts +109 -0
  435. package/src/report/stats.ts +850 -0
  436. package/src/report/views.ts +241 -0
  437. package/src/team/index.ts +11 -0
  438. package/tests/expiring-tags.test.ts +231 -0
  439. package/tests/get-report.test.ts +136 -0
  440. package/tests/query-reports.test.ts +608 -0
  441. package/tests/queue-assignment.test.ts +428 -0
  442. package/tests/queue-router.test.ts +306 -0
  443. package/tests/queues.test.ts +690 -0
  444. package/tests/report-action.test.ts +308 -0
  445. package/tests/report-activity.test.ts +567 -0
  446. package/tests/report-assignment.test.ts +517 -0
  447. package/tests/report-reassign-queue.test.ts +340 -0
  448. package/tests/report-routing.test.ts +245 -0
  449. package/tests/report-stats.test.ts +545 -0
  450. package/tsconfig.build.tsbuildinfo +1 -1
@@ -2710,6 +2710,12 @@ export const schemaDict = {
2710
2710
  accept: ['image/*'],
2711
2711
  maxSize: 1000000,
2712
2712
  },
2713
+ associatedRecord: {
2714
+ type: 'string',
2715
+ format: 'at-uri',
2716
+ description:
2717
+ 'The URI of the Atmosphere record representing this external content, if it exists. Example: a site.standard.document record.',
2718
+ },
2713
2719
  },
2714
2720
  },
2715
2721
  view: {
@@ -9739,6 +9745,7 @@ export const schemaDict = {
9739
9745
  refs: [
9740
9746
  'lex:chat.bsky.actor.defs#directConvoMember',
9741
9747
  'lex:chat.bsky.actor.defs#groupConvoMember',
9748
+ 'lex:chat.bsky.actor.defs#pastGroupConvoMember',
9742
9749
  ],
9743
9750
  },
9744
9751
  },
@@ -9751,7 +9758,7 @@ export const schemaDict = {
9751
9758
  },
9752
9759
  groupConvoMember: {
9753
9760
  description:
9754
- '[NOTE: This is under active development and should be considered unstable while this note is here].',
9761
+ '[NOTE: This is under active development and should be considered unstable while this note is here]. A current group convo member.',
9755
9762
  type: 'object',
9756
9763
  required: ['role'],
9757
9764
  properties: {
@@ -9769,6 +9776,13 @@ export const schemaDict = {
9769
9776
  },
9770
9777
  },
9771
9778
  },
9779
+ pastGroupConvoMember: {
9780
+ description:
9781
+ '[NOTE: This is under active development and should be considered unstable while this note is here]. A past group convo member.',
9782
+ type: 'object',
9783
+ required: [],
9784
+ properties: {},
9785
+ },
9772
9786
  },
9773
9787
  },
9774
9788
  ChatBskyActorDeleteAccount: {
@@ -10012,6 +10026,16 @@ export const schemaDict = {
10012
10026
  },
10013
10027
  },
10014
10028
  },
10029
+ systemMessageReferredUser: {
10030
+ type: 'object',
10031
+ required: ['did'],
10032
+ properties: {
10033
+ did: {
10034
+ type: 'string',
10035
+ format: 'did',
10036
+ },
10037
+ },
10038
+ },
10015
10039
  systemMessageView: {
10016
10040
  description:
10017
10041
  '[NOTE: This is under active development and should be considered unstable while this note is here].',
@@ -10056,7 +10080,7 @@ export const schemaDict = {
10056
10080
  member: {
10057
10081
  description: 'Current view of the member who was added.',
10058
10082
  type: 'ref',
10059
- ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
10083
+ ref: 'lex:chat.bsky.convo.defs#systemMessageReferredUser',
10060
10084
  },
10061
10085
  role: {
10062
10086
  description:
@@ -10066,7 +10090,7 @@ export const schemaDict = {
10066
10090
  },
10067
10091
  addedBy: {
10068
10092
  type: 'ref',
10069
- ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
10093
+ ref: 'lex:chat.bsky.convo.defs#systemMessageReferredUser',
10070
10094
  },
10071
10095
  },
10072
10096
  },
@@ -10079,11 +10103,11 @@ export const schemaDict = {
10079
10103
  member: {
10080
10104
  description: 'Current view of the member who was removed.',
10081
10105
  type: 'ref',
10082
- ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
10106
+ ref: 'lex:chat.bsky.convo.defs#systemMessageReferredUser',
10083
10107
  },
10084
10108
  removedBy: {
10085
10109
  type: 'ref',
10086
- ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
10110
+ ref: 'lex:chat.bsky.convo.defs#systemMessageReferredUser',
10087
10111
  },
10088
10112
  },
10089
10113
  },
@@ -10096,7 +10120,7 @@ export const schemaDict = {
10096
10120
  member: {
10097
10121
  description: 'Current view of the member who joined.',
10098
10122
  type: 'ref',
10099
- ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
10123
+ ref: 'lex:chat.bsky.convo.defs#systemMessageReferredUser',
10100
10124
  },
10101
10125
  role: {
10102
10126
  description:
@@ -10108,7 +10132,7 @@ export const schemaDict = {
10108
10132
  description:
10109
10133
  'If join link was configured to require approval, this will be set to who approved the request. Undefined if approval was not required.',
10110
10134
  type: 'ref',
10111
- ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
10135
+ ref: 'lex:chat.bsky.convo.defs#systemMessageReferredUser',
10112
10136
  },
10113
10137
  },
10114
10138
  },
@@ -10121,7 +10145,7 @@ export const schemaDict = {
10121
10145
  member: {
10122
10146
  description: 'Current view of the member who left the group.',
10123
10147
  type: 'ref',
10124
- ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
10148
+ ref: 'lex:chat.bsky.convo.defs#systemMessageReferredUser',
10125
10149
  },
10126
10150
  },
10127
10151
  },
@@ -10134,7 +10158,7 @@ export const schemaDict = {
10134
10158
  lockedBy: {
10135
10159
  description: 'Current view of the member who locked the group.',
10136
10160
  type: 'ref',
10137
- ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
10161
+ ref: 'lex:chat.bsky.convo.defs#systemMessageReferredUser',
10138
10162
  },
10139
10163
  },
10140
10164
  },
@@ -10147,7 +10171,7 @@ export const schemaDict = {
10147
10171
  unlockedBy: {
10148
10172
  description: 'Current view of the member who unlocked the group.',
10149
10173
  type: 'ref',
10150
- ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
10174
+ ref: 'lex:chat.bsky.convo.defs#systemMessageReferredUser',
10151
10175
  },
10152
10176
  },
10153
10177
  },
@@ -10160,7 +10184,7 @@ export const schemaDict = {
10160
10184
  lockedBy: {
10161
10185
  description: 'Current view of the member who locked the group.',
10162
10186
  type: 'ref',
10163
- ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
10187
+ ref: 'lex:chat.bsky.convo.defs#systemMessageReferredUser',
10164
10188
  },
10165
10189
  },
10166
10190
  },
@@ -10338,7 +10362,7 @@ export const schemaDict = {
10338
10362
  description:
10339
10363
  '[NOTE: This is under active development and should be considered unstable while this note is here].',
10340
10364
  type: 'object',
10341
- required: ['name', 'lockStatus', 'memberCount'],
10365
+ required: ['name', 'lockStatus', 'memberCount', 'createdAt'],
10342
10366
  properties: {
10343
10367
  name: {
10344
10368
  type: 'string',
@@ -10351,6 +10375,10 @@ export const schemaDict = {
10351
10375
  description:
10352
10376
  'The total number of members in the group conversation.',
10353
10377
  },
10378
+ createdAt: {
10379
+ type: 'string',
10380
+ format: 'datetime',
10381
+ },
10354
10382
  joinLink: {
10355
10383
  type: 'ref',
10356
10384
  ref: 'lex:chat.bsky.group.defs#joinLinkView',
@@ -10451,6 +10479,15 @@ export const schemaDict = {
10451
10479
  'lex:chat.bsky.convo.defs#deletedMessageView',
10452
10480
  ],
10453
10481
  },
10482
+ relatedProfiles: {
10483
+ description:
10484
+ "Profiles referred to in the message view. This isn't required for compatibility, because it was added later, but should generally be present.",
10485
+ type: 'array',
10486
+ items: {
10487
+ type: 'ref',
10488
+ ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
10489
+ },
10490
+ },
10454
10491
  },
10455
10492
  },
10456
10493
  logDeleteMessage: {
@@ -10518,6 +10555,15 @@ export const schemaDict = {
10518
10555
  type: 'ref',
10519
10556
  ref: 'lex:chat.bsky.convo.defs#reactionView',
10520
10557
  },
10558
+ relatedProfiles: {
10559
+ description:
10560
+ "Profiles referred in the message and reaction views. This isn't required for compatibility, because it was added later, but should generally be present.",
10561
+ type: 'array',
10562
+ items: {
10563
+ type: 'ref',
10564
+ ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
10565
+ },
10566
+ },
10521
10567
  },
10522
10568
  },
10523
10569
  logRemoveReaction: {
@@ -10542,6 +10588,15 @@ export const schemaDict = {
10542
10588
  type: 'ref',
10543
10589
  ref: 'lex:chat.bsky.convo.defs#reactionView',
10544
10590
  },
10591
+ relatedProfiles: {
10592
+ description:
10593
+ "Profiles referred in the message and reaction views. This isn't required for compatibility, because it was added later, but should generally be present.",
10594
+ type: 'array',
10595
+ items: {
10596
+ type: 'ref',
10597
+ ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
10598
+ },
10599
+ },
10545
10600
  },
10546
10601
  },
10547
10602
  logReadConvo: {
@@ -10570,7 +10625,7 @@ export const schemaDict = {
10570
10625
  description:
10571
10626
  '[NOTE: This is under active development and should be considered unstable while this note is here]. Event indicating a member was added to a group convo. The member who was added gets a logBeginConvo (to create the convo) but also a logAddMember (to show the system message as the first message the user sees).',
10572
10627
  type: 'object',
10573
- required: ['rev', 'convoId', 'message'],
10628
+ required: ['rev', 'convoId', 'message', 'relatedProfiles'],
10574
10629
  properties: {
10575
10630
  rev: {
10576
10631
  type: 'string',
@@ -10584,13 +10639,21 @@ export const schemaDict = {
10584
10639
  type: 'ref',
10585
10640
  ref: 'lex:chat.bsky.convo.defs#systemMessageView',
10586
10641
  },
10642
+ relatedProfiles: {
10643
+ description: 'Profiles referred in the system message.',
10644
+ type: 'array',
10645
+ items: {
10646
+ type: 'ref',
10647
+ ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
10648
+ },
10649
+ },
10587
10650
  },
10588
10651
  },
10589
10652
  logRemoveMember: {
10590
10653
  description:
10591
10654
  "[NOTE: This is under active development and should be considered unstable while this note is here]. Event indicating a member was removed from a group convo. The member who was removed gets a logLeaveConvo (to leave the convo) but not a logRemoveMember (because they already left, so can't see the system message).",
10592
10655
  type: 'object',
10593
- required: ['rev', 'convoId', 'message'],
10656
+ required: ['rev', 'convoId', 'message', 'relatedProfiles'],
10594
10657
  properties: {
10595
10658
  rev: {
10596
10659
  type: 'string',
@@ -10604,13 +10667,21 @@ export const schemaDict = {
10604
10667
  type: 'ref',
10605
10668
  ref: 'lex:chat.bsky.convo.defs#systemMessageView',
10606
10669
  },
10670
+ relatedProfiles: {
10671
+ description: 'Profiles referred in the system message.',
10672
+ type: 'array',
10673
+ items: {
10674
+ type: 'ref',
10675
+ ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
10676
+ },
10677
+ },
10607
10678
  },
10608
10679
  },
10609
10680
  logMemberJoin: {
10610
10681
  description:
10611
10682
  '[NOTE: This is under active development and should be considered unstable while this note is here]. Event indicating a member joined a group convo via join link. The member who was added gets a logBeginConvo (to create the convo) but also a logMemberJoin (to show the system message as the first message the user sees).',
10612
10683
  type: 'object',
10613
- required: ['rev', 'convoId', 'message'],
10684
+ required: ['rev', 'convoId', 'message', 'relatedProfiles'],
10614
10685
  properties: {
10615
10686
  rev: {
10616
10687
  type: 'string',
@@ -10624,13 +10695,21 @@ export const schemaDict = {
10624
10695
  type: 'ref',
10625
10696
  ref: 'lex:chat.bsky.convo.defs#systemMessageView',
10626
10697
  },
10698
+ relatedProfiles: {
10699
+ description: 'Profiles referred in the system message.',
10700
+ type: 'array',
10701
+ items: {
10702
+ type: 'ref',
10703
+ ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
10704
+ },
10705
+ },
10627
10706
  },
10628
10707
  },
10629
10708
  logMemberLeave: {
10630
10709
  description:
10631
10710
  "[NOTE: This is under active development and should be considered unstable while this note is here]. Event indicating a member voluntarily left a group convo. The member who was removed gets a logLeaveConvo (to leave the convo) but not a logMemberLeave (because they already left, so can't see the system message).",
10632
10711
  type: 'object',
10633
- required: ['rev', 'convoId', 'message'],
10712
+ required: ['rev', 'convoId', 'message', 'relatedProfiles'],
10634
10713
  properties: {
10635
10714
  rev: {
10636
10715
  type: 'string',
@@ -10644,13 +10723,21 @@ export const schemaDict = {
10644
10723
  type: 'ref',
10645
10724
  ref: 'lex:chat.bsky.convo.defs#systemMessageView',
10646
10725
  },
10726
+ relatedProfiles: {
10727
+ description: 'Profiles referred in the system message.',
10728
+ type: 'array',
10729
+ items: {
10730
+ type: 'ref',
10731
+ ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
10732
+ },
10733
+ },
10647
10734
  },
10648
10735
  },
10649
10736
  logLockConvo: {
10650
10737
  description:
10651
10738
  '[NOTE: This is under active development and should be considered unstable while this note is here]. Event indicating a group convo was locked.',
10652
10739
  type: 'object',
10653
- required: ['rev', 'convoId', 'message'],
10740
+ required: ['rev', 'convoId', 'message', 'relatedProfiles'],
10654
10741
  properties: {
10655
10742
  rev: {
10656
10743
  type: 'string',
@@ -10664,13 +10751,21 @@ export const schemaDict = {
10664
10751
  type: 'ref',
10665
10752
  ref: 'lex:chat.bsky.convo.defs#systemMessageView',
10666
10753
  },
10754
+ relatedProfiles: {
10755
+ description: 'Profiles referred in the system message.',
10756
+ type: 'array',
10757
+ items: {
10758
+ type: 'ref',
10759
+ ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
10760
+ },
10761
+ },
10667
10762
  },
10668
10763
  },
10669
10764
  logUnlockConvo: {
10670
10765
  description:
10671
10766
  '[NOTE: This is under active development and should be considered unstable while this note is here]. Event indicating a group convo was unlocked.',
10672
10767
  type: 'object',
10673
- required: ['rev', 'convoId', 'message'],
10768
+ required: ['rev', 'convoId', 'message', 'relatedProfiles'],
10674
10769
  properties: {
10675
10770
  rev: {
10676
10771
  type: 'string',
@@ -10684,13 +10779,21 @@ export const schemaDict = {
10684
10779
  type: 'ref',
10685
10780
  ref: 'lex:chat.bsky.convo.defs#systemMessageView',
10686
10781
  },
10782
+ relatedProfiles: {
10783
+ description: 'Profiles referred in the system message.',
10784
+ type: 'array',
10785
+ items: {
10786
+ type: 'ref',
10787
+ ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
10788
+ },
10789
+ },
10687
10790
  },
10688
10791
  },
10689
10792
  logLockConvoPermanently: {
10690
10793
  description:
10691
10794
  '[NOTE: This is under active development and should be considered unstable while this note is here]. Event indicating a group convo was locked permanently.',
10692
10795
  type: 'object',
10693
- required: ['rev', 'convoId', 'message'],
10796
+ required: ['rev', 'convoId', 'message', 'relatedProfiles'],
10694
10797
  properties: {
10695
10798
  rev: {
10696
10799
  type: 'string',
@@ -10704,6 +10807,14 @@ export const schemaDict = {
10704
10807
  type: 'ref',
10705
10808
  ref: 'lex:chat.bsky.convo.defs#systemMessageView',
10706
10809
  },
10810
+ relatedProfiles: {
10811
+ description: 'Profiles referred in the system message.',
10812
+ type: 'array',
10813
+ items: {
10814
+ type: 'ref',
10815
+ ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
10816
+ },
10817
+ },
10707
10818
  },
10708
10819
  },
10709
10820
  logEditGroup: {
@@ -11224,6 +11335,15 @@ export const schemaDict = {
11224
11335
  ],
11225
11336
  },
11226
11337
  },
11338
+ relatedProfiles: {
11339
+ description:
11340
+ 'Set of all members who authored or reacted to the returned messages. Members referred to by system messages are also included.',
11341
+ type: 'array',
11342
+ items: {
11343
+ type: 'ref',
11344
+ ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
11345
+ },
11346
+ },
11227
11347
  },
11228
11348
  },
11229
11349
  },
@@ -18920,6 +19040,11 @@ export const schemaDict = {
18920
19040
  type: 'string',
18921
19041
  description: 'Additional comment about added/removed tags.',
18922
19042
  },
19043
+ durationInHours: {
19044
+ type: 'integer',
19045
+ description:
19046
+ 'Indicates how long the tags being added should remain before automatically being removed. Only applies to tags being added.',
19047
+ },
18923
19048
  },
18924
19049
  },
18925
19050
  accountEvent: {
@@ -19660,6 +19785,12 @@ export const schemaDict = {
19660
19785
  description:
19661
19786
  'An optional external ID for the event, used to deduplicate events from external systems. Fails when an event of same type with the same external ID exists for the same subject.',
19662
19787
  },
19788
+ reportAction: {
19789
+ type: 'ref',
19790
+ ref: 'lex:tools.ozone.moderation.emitEvent#reportAction',
19791
+ description:
19792
+ 'Optional report-level targeting. If provided, this event will be linked to specific reports and reporters may be notified.',
19793
+ },
19663
19794
  },
19664
19795
  },
19665
19796
  },
@@ -19681,6 +19812,36 @@ export const schemaDict = {
19681
19812
  },
19682
19813
  ],
19683
19814
  },
19815
+ reportAction: {
19816
+ type: 'object',
19817
+ description: 'Target specific reports when emitting a moderation event',
19818
+ properties: {
19819
+ ids: {
19820
+ type: 'array',
19821
+ items: {
19822
+ type: 'integer',
19823
+ },
19824
+ description: 'Target specific report IDs',
19825
+ },
19826
+ types: {
19827
+ type: 'array',
19828
+ items: {
19829
+ type: 'string',
19830
+ },
19831
+ description:
19832
+ 'Target reports matching these report types on the subject (fully qualified NSIDs)',
19833
+ },
19834
+ all: {
19835
+ type: 'boolean',
19836
+ description: 'Target ALL reports on the subject',
19837
+ },
19838
+ note: {
19839
+ type: 'string',
19840
+ description:
19841
+ 'Note to send to reporter(s) when actioning their report',
19842
+ },
19843
+ },
19844
+ },
19684
19845
  },
19685
19846
  },
19686
19847
  ToolsOzoneModerationGetAccountTimeline: {
@@ -20781,218 +20942,1905 @@ export const schemaDict = {
20781
20942
  },
20782
20943
  },
20783
20944
  },
20784
- ToolsOzoneReportDefs: {
20945
+ ToolsOzoneQueueAssignModerator: {
20785
20946
  lexicon: 1,
20786
- id: 'tools.ozone.report.defs',
20947
+ id: 'tools.ozone.queue.assignModerator',
20787
20948
  defs: {
20788
- reasonType: {
20789
- type: 'string',
20790
- knownValues: [
20791
- 'tools.ozone.report.defs#reasonAppeal',
20792
- 'tools.ozone.report.defs#reasonOther',
20793
- 'tools.ozone.report.defs#reasonViolenceAnimal',
20794
- 'tools.ozone.report.defs#reasonViolenceThreats',
20795
- 'tools.ozone.report.defs#reasonViolenceGraphicContent',
20796
- 'tools.ozone.report.defs#reasonViolenceGlorification',
20797
- 'tools.ozone.report.defs#reasonViolenceExtremistContent',
20798
- 'tools.ozone.report.defs#reasonViolenceTrafficking',
20799
- 'tools.ozone.report.defs#reasonViolenceOther',
20800
- 'tools.ozone.report.defs#reasonSexualAbuseContent',
20801
- 'tools.ozone.report.defs#reasonSexualNCII',
20802
- 'tools.ozone.report.defs#reasonSexualDeepfake',
20803
- 'tools.ozone.report.defs#reasonSexualAnimal',
20804
- 'tools.ozone.report.defs#reasonSexualUnlabeled',
20805
- 'tools.ozone.report.defs#reasonSexualOther',
20806
- 'tools.ozone.report.defs#reasonChildSafetyCSAM',
20807
- 'tools.ozone.report.defs#reasonChildSafetyGroom',
20808
- 'tools.ozone.report.defs#reasonChildSafetyPrivacy',
20809
- 'tools.ozone.report.defs#reasonChildSafetyHarassment',
20810
- 'tools.ozone.report.defs#reasonChildSafetyOther',
20811
- 'tools.ozone.report.defs#reasonHarassmentTroll',
20812
- 'tools.ozone.report.defs#reasonHarassmentTargeted',
20813
- 'tools.ozone.report.defs#reasonHarassmentHateSpeech',
20814
- 'tools.ozone.report.defs#reasonHarassmentDoxxing',
20815
- 'tools.ozone.report.defs#reasonHarassmentOther',
20816
- 'tools.ozone.report.defs#reasonMisleadingBot',
20817
- 'tools.ozone.report.defs#reasonMisleadingImpersonation',
20818
- 'tools.ozone.report.defs#reasonMisleadingSpam',
20819
- 'tools.ozone.report.defs#reasonMisleadingScam',
20820
- 'tools.ozone.report.defs#reasonMisleadingElections',
20821
- 'tools.ozone.report.defs#reasonMisleadingOther',
20822
- 'tools.ozone.report.defs#reasonRuleSiteSecurity',
20823
- 'tools.ozone.report.defs#reasonRuleProhibitedSales',
20824
- 'tools.ozone.report.defs#reasonRuleBanEvasion',
20825
- 'tools.ozone.report.defs#reasonRuleOther',
20826
- 'tools.ozone.report.defs#reasonSelfHarmContent',
20827
- 'tools.ozone.report.defs#reasonSelfHarmED',
20828
- 'tools.ozone.report.defs#reasonSelfHarmStunts',
20829
- 'tools.ozone.report.defs#reasonSelfHarmSubstances',
20830
- 'tools.ozone.report.defs#reasonSelfHarmOther',
20949
+ main: {
20950
+ type: 'procedure',
20951
+ description: 'Assign a user to a queue.',
20952
+ input: {
20953
+ encoding: 'application/json',
20954
+ schema: {
20955
+ type: 'object',
20956
+ required: ['queueId', 'did'],
20957
+ properties: {
20958
+ queueId: {
20959
+ type: 'integer',
20960
+ description: 'The ID of the queue to assign the user to.',
20961
+ },
20962
+ did: {
20963
+ type: 'string',
20964
+ description: 'DID to be assigned.',
20965
+ },
20966
+ },
20967
+ },
20968
+ },
20969
+ output: {
20970
+ encoding: 'application/json',
20971
+ schema: {
20972
+ type: 'ref',
20973
+ ref: 'lex:tools.ozone.queue.defs#assignmentView',
20974
+ },
20975
+ },
20976
+ errors: [
20977
+ {
20978
+ name: 'InvalidAssignment',
20979
+ description:
20980
+ 'The specified queue does not exist or is not enabled.',
20981
+ },
20831
20982
  ],
20832
20983
  },
20833
- reasonAppeal: {
20834
- type: 'token',
20835
- description: 'Appeal a previously taken moderation action',
20836
- },
20837
- reasonOther: {
20838
- type: 'token',
20839
- description: 'An issue not included in these options',
20840
- },
20841
- reasonViolenceAnimal: {
20842
- type: 'token',
20843
- description: 'Animal welfare violations',
20844
- },
20845
- reasonViolenceThreats: {
20846
- type: 'token',
20847
- description: 'Threats or incitement',
20848
- },
20849
- reasonViolenceGraphicContent: {
20850
- type: 'token',
20851
- description: 'Graphic violent content',
20852
- },
20853
- reasonViolenceGlorification: {
20854
- type: 'token',
20855
- description: 'Glorification of violence',
20856
- },
20857
- reasonViolenceExtremistContent: {
20858
- type: 'token',
20984
+ },
20985
+ },
20986
+ ToolsOzoneQueueCreateQueue: {
20987
+ lexicon: 1,
20988
+ id: 'tools.ozone.queue.createQueue',
20989
+ defs: {
20990
+ main: {
20991
+ type: 'procedure',
20859
20992
  description:
20860
- "Extremist content. These reports will be sent only be sent to the application's Moderation Authority.",
20861
- },
20862
- reasonViolenceTrafficking: {
20863
- type: 'token',
20864
- description: 'Human trafficking',
20865
- },
20866
- reasonViolenceOther: {
20867
- type: 'token',
20868
- description: 'Other violent content',
20869
- },
20870
- reasonSexualAbuseContent: {
20871
- type: 'token',
20872
- description: 'Adult sexual abuse content',
20873
- },
20874
- reasonSexualNCII: {
20875
- type: 'token',
20876
- description: 'Non-consensual intimate imagery',
20877
- },
20878
- reasonSexualDeepfake: {
20879
- type: 'token',
20880
- description: 'Deepfake adult content',
20881
- },
20882
- reasonSexualAnimal: {
20883
- type: 'token',
20884
- description: 'Animal sexual abuse',
20993
+ 'Create a new moderation queue. Will fail if the queue configuration conflicts with an existing queue.',
20994
+ input: {
20995
+ encoding: 'application/json',
20996
+ schema: {
20997
+ type: 'object',
20998
+ required: ['name', 'subjectTypes', 'reportTypes'],
20999
+ properties: {
21000
+ name: {
21001
+ type: 'string',
21002
+ description: 'Display name for the queue (must be unique)',
21003
+ },
21004
+ subjectTypes: {
21005
+ type: 'array',
21006
+ minLength: 1,
21007
+ items: {
21008
+ type: 'string',
21009
+ knownValues: ['account', 'record', 'message'],
21010
+ },
21011
+ description: 'Subject types this queue accepts',
21012
+ },
21013
+ collection: {
21014
+ type: 'string',
21015
+ format: 'nsid',
21016
+ description:
21017
+ "Collection name for record subjects. Required if subjectTypes includes 'record'.",
21018
+ },
21019
+ reportTypes: {
21020
+ type: 'array',
21021
+ items: {
21022
+ type: 'string',
21023
+ },
21024
+ minLength: 1,
21025
+ maxLength: 25,
21026
+ description: 'Report reason types (fully qualified NSIDs)',
21027
+ },
21028
+ description: {
21029
+ type: 'string',
21030
+ description: 'Optional description of the queue',
21031
+ },
21032
+ },
21033
+ },
21034
+ },
21035
+ output: {
21036
+ encoding: 'application/json',
21037
+ schema: {
21038
+ type: 'object',
21039
+ required: ['queue'],
21040
+ properties: {
21041
+ queue: {
21042
+ type: 'ref',
21043
+ ref: 'lex:tools.ozone.queue.defs#queueView',
21044
+ },
21045
+ },
21046
+ },
21047
+ },
21048
+ errors: [
21049
+ {
21050
+ name: 'ConflictingQueue',
21051
+ description:
21052
+ 'The queue configuration conflicts with an existing queue',
21053
+ },
21054
+ ],
20885
21055
  },
20886
- reasonSexualUnlabeled: {
20887
- type: 'token',
20888
- description: 'Unlabelled adult content',
21056
+ },
21057
+ },
21058
+ ToolsOzoneQueueDefs: {
21059
+ lexicon: 1,
21060
+ id: 'tools.ozone.queue.defs',
21061
+ defs: {
21062
+ queueView: {
21063
+ type: 'object',
21064
+ required: [
21065
+ 'id',
21066
+ 'name',
21067
+ 'subjectTypes',
21068
+ 'reportTypes',
21069
+ 'createdBy',
21070
+ 'createdAt',
21071
+ 'updatedAt',
21072
+ 'enabled',
21073
+ 'stats',
21074
+ ],
21075
+ properties: {
21076
+ id: {
21077
+ type: 'integer',
21078
+ description: 'Queue ID',
21079
+ },
21080
+ name: {
21081
+ type: 'string',
21082
+ description: 'Display name of the queue',
21083
+ },
21084
+ subjectTypes: {
21085
+ type: 'array',
21086
+ minLength: 1,
21087
+ items: {
21088
+ type: 'string',
21089
+ knownValues: ['account', 'record', 'message'],
21090
+ },
21091
+ description: 'Subject types this queue accepts.',
21092
+ },
21093
+ collection: {
21094
+ type: 'string',
21095
+ format: 'nsid',
21096
+ description:
21097
+ "Collection name for record subjects (e.g., 'app.bsky.feed.post')",
21098
+ },
21099
+ reportTypes: {
21100
+ type: 'array',
21101
+ items: {
21102
+ type: 'string',
21103
+ },
21104
+ minLength: 1,
21105
+ description:
21106
+ 'Report reason types this queue accepts (fully qualified NSIDs)',
21107
+ },
21108
+ description: {
21109
+ type: 'string',
21110
+ description: 'Optional description of the queue',
21111
+ },
21112
+ createdBy: {
21113
+ type: 'string',
21114
+ format: 'did',
21115
+ description: 'DID of moderator who created this queue',
21116
+ },
21117
+ createdAt: {
21118
+ type: 'string',
21119
+ format: 'datetime',
21120
+ },
21121
+ updatedAt: {
21122
+ type: 'string',
21123
+ format: 'datetime',
21124
+ },
21125
+ enabled: {
21126
+ type: 'boolean',
21127
+ description: 'Whether this queue is currently active',
21128
+ },
21129
+ deletedAt: {
21130
+ type: 'string',
21131
+ format: 'datetime',
21132
+ description: 'When the queue was deleted, if applicable',
21133
+ },
21134
+ stats: {
21135
+ type: 'ref',
21136
+ ref: 'lex:tools.ozone.queue.defs#queueStats',
21137
+ description: 'Statistics about this queue',
21138
+ },
21139
+ },
20889
21140
  },
20890
- reasonSexualOther: {
20891
- type: 'token',
20892
- description: 'Other sexual violence content',
21141
+ queueStats: {
21142
+ type: 'object',
21143
+ required: [],
21144
+ properties: {
21145
+ pendingCount: {
21146
+ type: 'integer',
21147
+ description: "Number of reports in 'open' status",
21148
+ },
21149
+ actionedCount: {
21150
+ type: 'integer',
21151
+ description: "Number of reports in 'closed' status",
21152
+ },
21153
+ escalatedCount: {
21154
+ type: 'integer',
21155
+ description: "Number of reports in 'escalated' status",
21156
+ },
21157
+ inboundCount: {
21158
+ type: 'integer',
21159
+ description: 'Reports received in this queue in the last 24 hours.',
21160
+ },
21161
+ actionRate: {
21162
+ type: 'integer',
21163
+ description:
21164
+ 'Percentage of reports actioned (actionedCount / inboundCount * 100), rounded to nearest integer. Absent when inboundCount is 0.',
21165
+ },
21166
+ avgHandlingTimeSec: {
21167
+ type: 'integer',
21168
+ description:
21169
+ 'Average time in seconds from report creation to close, for reports closed in this period.',
21170
+ },
21171
+ lastUpdated: {
21172
+ type: 'string',
21173
+ format: 'datetime',
21174
+ description: 'When these statistics were last computed',
21175
+ },
21176
+ },
20893
21177
  },
20894
- reasonChildSafetyCSAM: {
20895
- type: 'token',
20896
- description:
20897
- "Child sexual abuse material (CSAM). These reports will be sent only be sent to the application's Moderation Authority.",
21178
+ assignmentView: {
21179
+ type: 'object',
21180
+ required: ['id', 'did', 'queue', 'startAt'],
21181
+ properties: {
21182
+ id: {
21183
+ type: 'integer',
21184
+ },
21185
+ did: {
21186
+ type: 'string',
21187
+ format: 'did',
21188
+ },
21189
+ moderator: {
21190
+ type: 'ref',
21191
+ ref: 'lex:tools.ozone.team.defs#member',
21192
+ description: 'The moderator assigned to this queue',
21193
+ },
21194
+ queue: {
21195
+ type: 'ref',
21196
+ ref: 'lex:tools.ozone.queue.defs#queueView',
21197
+ },
21198
+ startAt: {
21199
+ type: 'string',
21200
+ format: 'datetime',
21201
+ },
21202
+ endAt: {
21203
+ type: 'string',
21204
+ format: 'datetime',
21205
+ },
21206
+ },
20898
21207
  },
20899
- reasonChildSafetyGroom: {
20900
- type: 'token',
21208
+ },
21209
+ },
21210
+ ToolsOzoneQueueDeleteQueue: {
21211
+ lexicon: 1,
21212
+ id: 'tools.ozone.queue.deleteQueue',
21213
+ defs: {
21214
+ main: {
21215
+ type: 'procedure',
20901
21216
  description:
20902
- "Grooming or predatory behavior. These reports will be sent only be sent to the application's Moderation Authority.",
20903
- },
20904
- reasonChildSafetyPrivacy: {
20905
- type: 'token',
20906
- description: 'Privacy violation involving a minor',
20907
- },
20908
- reasonChildSafetyHarassment: {
20909
- type: 'token',
20910
- description: 'Harassment or bullying of minors',
21217
+ 'Delete a moderation queue. Optionally migrate reports to another queue.',
21218
+ input: {
21219
+ encoding: 'application/json',
21220
+ schema: {
21221
+ type: 'object',
21222
+ required: ['queueId'],
21223
+ properties: {
21224
+ queueId: {
21225
+ type: 'integer',
21226
+ description: 'ID of the queue to delete',
21227
+ },
21228
+ migrateToQueueId: {
21229
+ type: 'integer',
21230
+ description:
21231
+ 'Optional: migrate all reports to this queue. If not specified, reports will be set to unassigned (-1).',
21232
+ },
21233
+ },
21234
+ },
21235
+ },
21236
+ output: {
21237
+ encoding: 'application/json',
21238
+ schema: {
21239
+ type: 'object',
21240
+ required: ['deleted'],
21241
+ properties: {
21242
+ deleted: {
21243
+ type: 'boolean',
21244
+ },
21245
+ reportsMigrated: {
21246
+ type: 'integer',
21247
+ description:
21248
+ 'Number of reports that were migrated (if migration occurred)',
21249
+ },
21250
+ },
21251
+ },
21252
+ },
20911
21253
  },
20912
- reasonChildSafetyOther: {
20913
- type: 'token',
21254
+ },
21255
+ },
21256
+ ToolsOzoneQueueGetAssignments: {
21257
+ lexicon: 1,
21258
+ id: 'tools.ozone.queue.getAssignments',
21259
+ defs: {
21260
+ main: {
21261
+ type: 'query',
20914
21262
  description:
20915
- "Other child safety. These reports will be sent only be sent to the application's Moderation Authority.",
20916
- },
20917
- reasonHarassmentTroll: {
20918
- type: 'token',
20919
- description: 'Trolling',
20920
- },
20921
- reasonHarassmentTargeted: {
20922
- type: 'token',
20923
- description: 'Targeted harassment',
20924
- },
20925
- reasonHarassmentHateSpeech: {
20926
- type: 'token',
20927
- description: 'Hate speech',
20928
- },
20929
- reasonHarassmentDoxxing: {
20930
- type: 'token',
20931
- description: 'Doxxing',
20932
- },
20933
- reasonHarassmentOther: {
20934
- type: 'token',
20935
- description: 'Other harassing or hateful content',
20936
- },
20937
- reasonMisleadingBot: {
20938
- type: 'token',
20939
- description: 'Fake account or bot',
20940
- },
20941
- reasonMisleadingImpersonation: {
20942
- type: 'token',
20943
- description: 'Impersonation',
20944
- },
20945
- reasonMisleadingSpam: {
20946
- type: 'token',
20947
- description: 'Spam',
20948
- },
20949
- reasonMisleadingScam: {
20950
- type: 'token',
20951
- description: 'Scam',
20952
- },
20953
- reasonMisleadingElections: {
20954
- type: 'token',
20955
- description: 'False information about elections',
20956
- },
20957
- reasonMisleadingOther: {
20958
- type: 'token',
20959
- description: 'Other misleading content',
20960
- },
20961
- reasonRuleSiteSecurity: {
20962
- type: 'token',
20963
- description: 'Hacking or system attacks',
20964
- },
20965
- reasonRuleProhibitedSales: {
20966
- type: 'token',
20967
- description: 'Promoting or selling prohibited items or services',
20968
- },
20969
- reasonRuleBanEvasion: {
20970
- type: 'token',
20971
- description: 'Banned user returning',
20972
- },
20973
- reasonRuleOther: {
20974
- type: 'token',
20975
- description: 'Other',
21263
+ 'Get moderator assignments, optionally filtered by active status, queue, or moderator.',
21264
+ parameters: {
21265
+ type: 'params',
21266
+ properties: {
21267
+ onlyActive: {
21268
+ type: 'boolean',
21269
+ default: true,
21270
+ description: 'When true, only returns active assignments.',
21271
+ },
21272
+ queueIds: {
21273
+ type: 'array',
21274
+ items: {
21275
+ type: 'integer',
21276
+ },
21277
+ description:
21278
+ 'If specified, returns assignments for these queues only.',
21279
+ },
21280
+ dids: {
21281
+ type: 'array',
21282
+ items: {
21283
+ type: 'string',
21284
+ format: 'did',
21285
+ },
21286
+ description:
21287
+ 'If specified, returns assignments for these moderators only.',
21288
+ },
21289
+ limit: {
21290
+ type: 'integer',
21291
+ minimum: 1,
21292
+ maximum: 100,
21293
+ default: 50,
21294
+ },
21295
+ cursor: {
21296
+ type: 'string',
21297
+ },
21298
+ },
21299
+ },
21300
+ output: {
21301
+ encoding: 'application/json',
21302
+ schema: {
21303
+ type: 'object',
21304
+ required: ['assignments'],
21305
+ properties: {
21306
+ cursor: {
21307
+ type: 'string',
21308
+ },
21309
+ assignments: {
21310
+ type: 'array',
21311
+ items: {
21312
+ type: 'ref',
21313
+ ref: 'lex:tools.ozone.queue.defs#assignmentView',
21314
+ },
21315
+ },
21316
+ },
21317
+ },
21318
+ },
20976
21319
  },
20977
- reasonSelfHarmContent: {
20978
- type: 'token',
20979
- description: 'Content promoting or depicting self-harm',
21320
+ },
21321
+ },
21322
+ ToolsOzoneQueueListQueues: {
21323
+ lexicon: 1,
21324
+ id: 'tools.ozone.queue.listQueues',
21325
+ defs: {
21326
+ main: {
21327
+ type: 'query',
21328
+ description: 'List all configured moderation queues with statistics.',
21329
+ parameters: {
21330
+ type: 'params',
21331
+ properties: {
21332
+ enabled: {
21333
+ type: 'boolean',
21334
+ description:
21335
+ 'Filter by enabled status. If not specified, returns all queues.',
21336
+ },
21337
+ subjectType: {
21338
+ type: 'string',
21339
+ description:
21340
+ "Filter queues that handle this subject type ('account' or 'record').",
21341
+ },
21342
+ collection: {
21343
+ type: 'string',
21344
+ description:
21345
+ "Filter queues by collection name (e.g. 'app.bsky.feed.post').",
21346
+ },
21347
+ reportTypes: {
21348
+ type: 'array',
21349
+ items: {
21350
+ type: 'string',
21351
+ },
21352
+ maxLength: 10,
21353
+ description:
21354
+ 'Filter queues that handle any of these report reason types.',
21355
+ },
21356
+ limit: {
21357
+ type: 'integer',
21358
+ minimum: 1,
21359
+ maximum: 100,
21360
+ default: 50,
21361
+ },
21362
+ cursor: {
21363
+ type: 'string',
21364
+ },
21365
+ },
21366
+ },
21367
+ output: {
21368
+ encoding: 'application/json',
21369
+ schema: {
21370
+ type: 'object',
21371
+ required: ['queues'],
21372
+ properties: {
21373
+ cursor: {
21374
+ type: 'string',
21375
+ },
21376
+ queues: {
21377
+ type: 'array',
21378
+ items: {
21379
+ type: 'ref',
21380
+ ref: 'lex:tools.ozone.queue.defs#queueView',
21381
+ },
21382
+ },
21383
+ },
21384
+ },
21385
+ },
20980
21386
  },
20981
- reasonSelfHarmED: {
20982
- type: 'token',
20983
- description: 'Eating disorders',
21387
+ },
21388
+ },
21389
+ ToolsOzoneQueueRouteReports: {
21390
+ lexicon: 1,
21391
+ id: 'tools.ozone.queue.routeReports',
21392
+ defs: {
21393
+ main: {
21394
+ type: 'procedure',
21395
+ description:
21396
+ 'Route reports within an ID range to matching queues based.',
21397
+ input: {
21398
+ encoding: 'application/json',
21399
+ schema: {
21400
+ type: 'object',
21401
+ required: ['startReportId', 'endReportId'],
21402
+ properties: {
21403
+ startReportId: {
21404
+ type: 'integer',
21405
+ description: 'Start of report ID range (inclusive).',
21406
+ },
21407
+ endReportId: {
21408
+ type: 'integer',
21409
+ description:
21410
+ 'End of report ID range (inclusive). Difference between start and end must be less than 5,000.',
21411
+ },
21412
+ },
21413
+ },
21414
+ },
21415
+ output: {
21416
+ encoding: 'application/json',
21417
+ schema: {
21418
+ type: 'object',
21419
+ required: ['assigned', 'unmatched'],
21420
+ properties: {
21421
+ assigned: {
21422
+ type: 'integer',
21423
+ description: 'The number of reports assigned to a queue.',
21424
+ },
21425
+ unmatched: {
21426
+ type: 'integer',
21427
+ description: 'The number of reports with no matching queue.',
21428
+ },
21429
+ },
21430
+ },
21431
+ },
21432
+ errors: [
21433
+ {
21434
+ name: 'OutOfRange',
21435
+ description:
21436
+ 'The request is invalid, such as missing required fields or invalid field values.',
21437
+ },
21438
+ ],
20984
21439
  },
20985
- reasonSelfHarmStunts: {
20986
- type: 'token',
20987
- description: 'Dangerous challenges or activities',
21440
+ },
21441
+ },
21442
+ ToolsOzoneQueueUnassignModerator: {
21443
+ lexicon: 1,
21444
+ id: 'tools.ozone.queue.unassignModerator',
21445
+ defs: {
21446
+ main: {
21447
+ type: 'procedure',
21448
+ description: "Remove a user's assignment from a queue.",
21449
+ input: {
21450
+ encoding: 'application/json',
21451
+ schema: {
21452
+ type: 'object',
21453
+ required: ['queueId', 'did'],
21454
+ properties: {
21455
+ queueId: {
21456
+ type: 'integer',
21457
+ description: 'The ID of the queue to unassign the user from.',
21458
+ },
21459
+ did: {
21460
+ type: 'string',
21461
+ format: 'did',
21462
+ description: 'DID to be unassigned.',
21463
+ },
21464
+ },
21465
+ },
21466
+ },
21467
+ errors: [
21468
+ {
21469
+ name: 'InvalidAssignment',
21470
+ description:
21471
+ 'No active assignment exists for the given queue and user.',
21472
+ },
21473
+ ],
20988
21474
  },
20989
- reasonSelfHarmSubstances: {
20990
- type: 'token',
20991
- description: 'Dangerous substances or drug abuse',
21475
+ },
21476
+ },
21477
+ ToolsOzoneQueueUpdateQueue: {
21478
+ lexicon: 1,
21479
+ id: 'tools.ozone.queue.updateQueue',
21480
+ defs: {
21481
+ main: {
21482
+ type: 'procedure',
21483
+ description:
21484
+ 'Update queue properties. Currently only supports updating the name and enabled status to prevent configuration conflicts.',
21485
+ input: {
21486
+ encoding: 'application/json',
21487
+ schema: {
21488
+ type: 'object',
21489
+ required: ['queueId'],
21490
+ properties: {
21491
+ queueId: {
21492
+ type: 'integer',
21493
+ description: 'ID of the queue to update',
21494
+ },
21495
+ name: {
21496
+ type: 'string',
21497
+ description: 'New display name for the queue',
21498
+ },
21499
+ enabled: {
21500
+ type: 'boolean',
21501
+ description: 'Enable or disable the queue',
21502
+ },
21503
+ description: {
21504
+ type: 'string',
21505
+ description: 'Optional description of the queue',
21506
+ },
21507
+ },
21508
+ },
21509
+ },
21510
+ output: {
21511
+ encoding: 'application/json',
21512
+ schema: {
21513
+ type: 'object',
21514
+ required: ['queue'],
21515
+ properties: {
21516
+ queue: {
21517
+ type: 'ref',
21518
+ ref: 'lex:tools.ozone.queue.defs#queueView',
21519
+ },
21520
+ },
21521
+ },
21522
+ },
20992
21523
  },
20993
- reasonSelfHarmOther: {
20994
- type: 'token',
20995
- description: 'Other dangerous content',
21524
+ },
21525
+ },
21526
+ ToolsOzoneReportAssignModerator: {
21527
+ lexicon: 1,
21528
+ id: 'tools.ozone.report.assignModerator',
21529
+ defs: {
21530
+ main: {
21531
+ type: 'procedure',
21532
+ description:
21533
+ 'Assign a report to a user. Defaults to the caller. Admins may assign to any moderator.',
21534
+ input: {
21535
+ encoding: 'application/json',
21536
+ schema: {
21537
+ type: 'object',
21538
+ required: ['reportId'],
21539
+ properties: {
21540
+ reportId: {
21541
+ type: 'integer',
21542
+ description: 'The ID of the report to assign.',
21543
+ },
21544
+ queueId: {
21545
+ type: 'integer',
21546
+ description:
21547
+ 'Optional queue ID to associate the assignment with. If not provided and the report has been assigned on a queue before, it will stay on that queue.',
21548
+ },
21549
+ did: {
21550
+ type: 'string',
21551
+ format: 'did',
21552
+ description:
21553
+ "DID to be assigned. Defaults to the caller's DID. Admins may assign to any moderator.",
21554
+ },
21555
+ isPermanent: {
21556
+ type: 'boolean',
21557
+ description:
21558
+ 'When true, the assignment has no expiry (endAt is null). Throws AlreadyAssigned if another user already has a permanent assignment on this report.',
21559
+ },
21560
+ },
21561
+ },
21562
+ },
21563
+ output: {
21564
+ encoding: 'application/json',
21565
+ schema: {
21566
+ type: 'ref',
21567
+ ref: 'lex:tools.ozone.report.defs#assignmentView',
21568
+ },
21569
+ },
21570
+ errors: [
21571
+ {
21572
+ name: 'AlreadyAssigned',
21573
+ description: 'The report is already assigned to another user.',
21574
+ },
21575
+ {
21576
+ name: 'InvalidAssignment',
21577
+ description: 'The report ID or queue ID is invalid.',
21578
+ },
21579
+ ],
21580
+ },
21581
+ },
21582
+ },
21583
+ ToolsOzoneReportCreateActivity: {
21584
+ lexicon: 1,
21585
+ id: 'tools.ozone.report.createActivity',
21586
+ defs: {
21587
+ main: {
21588
+ type: 'procedure',
21589
+ description:
21590
+ 'Register an activity on a report. For state-change activity types, validates the transition and updates report.status atomically.',
21591
+ input: {
21592
+ encoding: 'application/json',
21593
+ schema: {
21594
+ type: 'object',
21595
+ required: ['reportId', 'activity'],
21596
+ properties: {
21597
+ reportId: {
21598
+ type: 'integer',
21599
+ description: 'ID of the report to record activity on',
21600
+ },
21601
+ activity: {
21602
+ type: 'union',
21603
+ refs: [
21604
+ 'lex:tools.ozone.report.defs#queueActivity',
21605
+ 'lex:tools.ozone.report.defs#assignmentActivity',
21606
+ 'lex:tools.ozone.report.defs#escalationActivity',
21607
+ 'lex:tools.ozone.report.defs#closeActivity',
21608
+ 'lex:tools.ozone.report.defs#reopenActivity',
21609
+ 'lex:tools.ozone.report.defs#noteActivity',
21610
+ ],
21611
+ description: 'The type of activity to record.',
21612
+ },
21613
+ internalNote: {
21614
+ type: 'string',
21615
+ description:
21616
+ 'Optional moderator-only note. Not visible to reporters.',
21617
+ },
21618
+ publicNote: {
21619
+ type: 'string',
21620
+ description:
21621
+ 'Optional public-facing note, potentially visible to the reporter.',
21622
+ },
21623
+ isAutomated: {
21624
+ type: 'boolean',
21625
+ description:
21626
+ 'Set true when this activity is triggered by an automated process. Defaults to false.',
21627
+ default: false,
21628
+ },
21629
+ },
21630
+ },
21631
+ },
21632
+ output: {
21633
+ encoding: 'application/json',
21634
+ schema: {
21635
+ type: 'object',
21636
+ required: ['activity'],
21637
+ properties: {
21638
+ activity: {
21639
+ type: 'ref',
21640
+ ref: 'lex:tools.ozone.report.defs#reportActivityView',
21641
+ },
21642
+ },
21643
+ },
21644
+ },
21645
+ errors: [
21646
+ {
21647
+ name: 'ReportNotFound',
21648
+ description: 'No report exists with the given reportId',
21649
+ },
21650
+ {
21651
+ name: 'InvalidStateTransition',
21652
+ description:
21653
+ "The requested state transition is not permitted from the report's current status",
21654
+ },
21655
+ {
21656
+ name: 'AlreadyInTargetState',
21657
+ description:
21658
+ 'The report is already in the status implied by this activity type',
21659
+ },
21660
+ ],
21661
+ },
21662
+ },
21663
+ },
21664
+ ToolsOzoneReportDefs: {
21665
+ lexicon: 1,
21666
+ id: 'tools.ozone.report.defs',
21667
+ defs: {
21668
+ reasonType: {
21669
+ type: 'string',
21670
+ knownValues: [
21671
+ 'tools.ozone.report.defs#reasonAppeal',
21672
+ 'tools.ozone.report.defs#reasonOther',
21673
+ 'tools.ozone.report.defs#reasonViolenceAnimal',
21674
+ 'tools.ozone.report.defs#reasonViolenceThreats',
21675
+ 'tools.ozone.report.defs#reasonViolenceGraphicContent',
21676
+ 'tools.ozone.report.defs#reasonViolenceGlorification',
21677
+ 'tools.ozone.report.defs#reasonViolenceExtremistContent',
21678
+ 'tools.ozone.report.defs#reasonViolenceTrafficking',
21679
+ 'tools.ozone.report.defs#reasonViolenceOther',
21680
+ 'tools.ozone.report.defs#reasonSexualAbuseContent',
21681
+ 'tools.ozone.report.defs#reasonSexualNCII',
21682
+ 'tools.ozone.report.defs#reasonSexualDeepfake',
21683
+ 'tools.ozone.report.defs#reasonSexualAnimal',
21684
+ 'tools.ozone.report.defs#reasonSexualUnlabeled',
21685
+ 'tools.ozone.report.defs#reasonSexualOther',
21686
+ 'tools.ozone.report.defs#reasonChildSafetyCSAM',
21687
+ 'tools.ozone.report.defs#reasonChildSafetyGroom',
21688
+ 'tools.ozone.report.defs#reasonChildSafetyPrivacy',
21689
+ 'tools.ozone.report.defs#reasonChildSafetyHarassment',
21690
+ 'tools.ozone.report.defs#reasonChildSafetyOther',
21691
+ 'tools.ozone.report.defs#reasonHarassmentTroll',
21692
+ 'tools.ozone.report.defs#reasonHarassmentTargeted',
21693
+ 'tools.ozone.report.defs#reasonHarassmentHateSpeech',
21694
+ 'tools.ozone.report.defs#reasonHarassmentDoxxing',
21695
+ 'tools.ozone.report.defs#reasonHarassmentOther',
21696
+ 'tools.ozone.report.defs#reasonMisleadingBot',
21697
+ 'tools.ozone.report.defs#reasonMisleadingImpersonation',
21698
+ 'tools.ozone.report.defs#reasonMisleadingSpam',
21699
+ 'tools.ozone.report.defs#reasonMisleadingScam',
21700
+ 'tools.ozone.report.defs#reasonMisleadingElections',
21701
+ 'tools.ozone.report.defs#reasonMisleadingOther',
21702
+ 'tools.ozone.report.defs#reasonRuleSiteSecurity',
21703
+ 'tools.ozone.report.defs#reasonRuleProhibitedSales',
21704
+ 'tools.ozone.report.defs#reasonRuleBanEvasion',
21705
+ 'tools.ozone.report.defs#reasonRuleOther',
21706
+ 'tools.ozone.report.defs#reasonSelfHarmContent',
21707
+ 'tools.ozone.report.defs#reasonSelfHarmED',
21708
+ 'tools.ozone.report.defs#reasonSelfHarmStunts',
21709
+ 'tools.ozone.report.defs#reasonSelfHarmSubstances',
21710
+ 'tools.ozone.report.defs#reasonSelfHarmOther',
21711
+ ],
21712
+ },
21713
+ reasonAppeal: {
21714
+ type: 'token',
21715
+ description: 'Appeal a previously taken moderation action',
21716
+ },
21717
+ reasonOther: {
21718
+ type: 'token',
21719
+ description: 'An issue not included in these options',
21720
+ },
21721
+ reasonViolenceAnimal: {
21722
+ type: 'token',
21723
+ description: 'Animal welfare violations',
21724
+ },
21725
+ reasonViolenceThreats: {
21726
+ type: 'token',
21727
+ description: 'Threats or incitement',
21728
+ },
21729
+ reasonViolenceGraphicContent: {
21730
+ type: 'token',
21731
+ description: 'Graphic violent content',
21732
+ },
21733
+ reasonViolenceGlorification: {
21734
+ type: 'token',
21735
+ description: 'Glorification of violence',
21736
+ },
21737
+ reasonViolenceExtremistContent: {
21738
+ type: 'token',
21739
+ description:
21740
+ "Extremist content. These reports will be sent only be sent to the application's Moderation Authority.",
21741
+ },
21742
+ reasonViolenceTrafficking: {
21743
+ type: 'token',
21744
+ description: 'Human trafficking',
21745
+ },
21746
+ reasonViolenceOther: {
21747
+ type: 'token',
21748
+ description: 'Other violent content',
21749
+ },
21750
+ reasonSexualAbuseContent: {
21751
+ type: 'token',
21752
+ description: 'Adult sexual abuse content',
21753
+ },
21754
+ reasonSexualNCII: {
21755
+ type: 'token',
21756
+ description: 'Non-consensual intimate imagery',
21757
+ },
21758
+ reasonSexualDeepfake: {
21759
+ type: 'token',
21760
+ description: 'Deepfake adult content',
21761
+ },
21762
+ reasonSexualAnimal: {
21763
+ type: 'token',
21764
+ description: 'Animal sexual abuse',
21765
+ },
21766
+ reasonSexualUnlabeled: {
21767
+ type: 'token',
21768
+ description: 'Unlabelled adult content',
21769
+ },
21770
+ reasonSexualOther: {
21771
+ type: 'token',
21772
+ description: 'Other sexual violence content',
21773
+ },
21774
+ reasonChildSafetyCSAM: {
21775
+ type: 'token',
21776
+ description:
21777
+ "Child sexual abuse material (CSAM). These reports will be sent only be sent to the application's Moderation Authority.",
21778
+ },
21779
+ reasonChildSafetyGroom: {
21780
+ type: 'token',
21781
+ description:
21782
+ "Grooming or predatory behavior. These reports will be sent only be sent to the application's Moderation Authority.",
21783
+ },
21784
+ reasonChildSafetyPrivacy: {
21785
+ type: 'token',
21786
+ description: 'Privacy violation involving a minor',
21787
+ },
21788
+ reasonChildSafetyHarassment: {
21789
+ type: 'token',
21790
+ description: 'Harassment or bullying of minors',
21791
+ },
21792
+ reasonChildSafetyOther: {
21793
+ type: 'token',
21794
+ description:
21795
+ "Other child safety. These reports will be sent only be sent to the application's Moderation Authority.",
21796
+ },
21797
+ reasonHarassmentTroll: {
21798
+ type: 'token',
21799
+ description: 'Trolling',
21800
+ },
21801
+ reasonHarassmentTargeted: {
21802
+ type: 'token',
21803
+ description: 'Targeted harassment',
21804
+ },
21805
+ reasonHarassmentHateSpeech: {
21806
+ type: 'token',
21807
+ description: 'Hate speech',
21808
+ },
21809
+ reasonHarassmentDoxxing: {
21810
+ type: 'token',
21811
+ description: 'Doxxing',
21812
+ },
21813
+ reasonHarassmentOther: {
21814
+ type: 'token',
21815
+ description: 'Other harassing or hateful content',
21816
+ },
21817
+ reasonMisleadingBot: {
21818
+ type: 'token',
21819
+ description: 'Fake account or bot',
21820
+ },
21821
+ reasonMisleadingImpersonation: {
21822
+ type: 'token',
21823
+ description: 'Impersonation',
21824
+ },
21825
+ reasonMisleadingSpam: {
21826
+ type: 'token',
21827
+ description: 'Spam',
21828
+ },
21829
+ reasonMisleadingScam: {
21830
+ type: 'token',
21831
+ description: 'Scam',
21832
+ },
21833
+ reasonMisleadingElections: {
21834
+ type: 'token',
21835
+ description: 'False information about elections',
21836
+ },
21837
+ reasonMisleadingOther: {
21838
+ type: 'token',
21839
+ description: 'Other misleading content',
21840
+ },
21841
+ reasonRuleSiteSecurity: {
21842
+ type: 'token',
21843
+ description: 'Hacking or system attacks',
21844
+ },
21845
+ reasonRuleProhibitedSales: {
21846
+ type: 'token',
21847
+ description: 'Promoting or selling prohibited items or services',
21848
+ },
21849
+ reasonRuleBanEvasion: {
21850
+ type: 'token',
21851
+ description: 'Banned user returning',
21852
+ },
21853
+ reasonRuleOther: {
21854
+ type: 'token',
21855
+ description: 'Other',
21856
+ },
21857
+ reasonSelfHarmContent: {
21858
+ type: 'token',
21859
+ description: 'Content promoting or depicting self-harm',
21860
+ },
21861
+ reasonSelfHarmED: {
21862
+ type: 'token',
21863
+ description: 'Eating disorders',
21864
+ },
21865
+ reasonSelfHarmStunts: {
21866
+ type: 'token',
21867
+ description: 'Dangerous challenges or activities',
21868
+ },
21869
+ reasonSelfHarmSubstances: {
21870
+ type: 'token',
21871
+ description: 'Dangerous substances or drug abuse',
21872
+ },
21873
+ reasonSelfHarmOther: {
21874
+ type: 'token',
21875
+ description: 'Other dangerous content',
21876
+ },
21877
+ reportAssignment: {
21878
+ type: 'object',
21879
+ description:
21880
+ 'Information about the moderator currently assigned to a report.',
21881
+ required: ['did', 'assignedAt'],
21882
+ properties: {
21883
+ did: {
21884
+ type: 'string',
21885
+ format: 'did',
21886
+ description: 'DID of the assigned moderator',
21887
+ },
21888
+ moderator: {
21889
+ type: 'ref',
21890
+ ref: 'lex:tools.ozone.team.defs#member',
21891
+ description: 'Full member record of the assigned moderator',
21892
+ },
21893
+ assignedAt: {
21894
+ type: 'string',
21895
+ format: 'datetime',
21896
+ description: 'When the report was assigned',
21897
+ },
21898
+ },
21899
+ },
21900
+ reportView: {
21901
+ type: 'object',
21902
+ required: [
21903
+ 'id',
21904
+ 'eventId',
21905
+ 'status',
21906
+ 'subject',
21907
+ 'reportType',
21908
+ 'reportedBy',
21909
+ 'reporter',
21910
+ 'createdAt',
21911
+ ],
21912
+ properties: {
21913
+ id: {
21914
+ type: 'integer',
21915
+ description: 'Report ID',
21916
+ },
21917
+ eventId: {
21918
+ type: 'integer',
21919
+ description: 'ID of the moderation event that created this report',
21920
+ },
21921
+ status: {
21922
+ type: 'string',
21923
+ knownValues: ['open', 'closed', 'escalated', 'queued', 'assigned'],
21924
+ description: 'Current status of the report',
21925
+ },
21926
+ subject: {
21927
+ type: 'ref',
21928
+ ref: 'lex:tools.ozone.moderation.defs#subjectView',
21929
+ description: 'The subject that was reported with full details',
21930
+ },
21931
+ reportType: {
21932
+ type: 'ref',
21933
+ ref: 'lex:com.atproto.moderation.defs#reasonType',
21934
+ description: 'Type of report',
21935
+ },
21936
+ reportedBy: {
21937
+ type: 'string',
21938
+ format: 'did',
21939
+ description: 'DID of the user who made the report',
21940
+ },
21941
+ reporter: {
21942
+ type: 'ref',
21943
+ ref: 'lex:tools.ozone.moderation.defs#subjectView',
21944
+ description: 'Full subject view of the reporter account',
21945
+ },
21946
+ comment: {
21947
+ type: 'string',
21948
+ description: 'Comment provided by the reporter',
21949
+ },
21950
+ createdAt: {
21951
+ type: 'string',
21952
+ format: 'datetime',
21953
+ description: 'When the report was created',
21954
+ },
21955
+ updatedAt: {
21956
+ type: 'string',
21957
+ format: 'datetime',
21958
+ description: 'When the report was last updated',
21959
+ },
21960
+ queuedAt: {
21961
+ type: 'string',
21962
+ format: 'datetime',
21963
+ description: 'When the report was assigned to its current queue',
21964
+ },
21965
+ actionEventIds: {
21966
+ type: 'array',
21967
+ items: {
21968
+ type: 'integer',
21969
+ },
21970
+ description:
21971
+ 'Array of moderation event IDs representing actions taken on this report (sorted DESC, most recent first)',
21972
+ },
21973
+ actions: {
21974
+ type: 'array',
21975
+ items: {
21976
+ type: 'ref',
21977
+ ref: 'lex:tools.ozone.moderation.defs#modEventView',
21978
+ },
21979
+ description: 'Optional: expanded action events',
21980
+ },
21981
+ actionNote: {
21982
+ type: 'string',
21983
+ description: 'Note sent to reporter when report was actioned',
21984
+ },
21985
+ subjectStatus: {
21986
+ type: 'ref',
21987
+ ref: 'lex:tools.ozone.moderation.defs#subjectStatusView',
21988
+ description: 'Current status of the reported subject',
21989
+ },
21990
+ relatedReportCount: {
21991
+ type: 'integer',
21992
+ description: 'Number of other pending reports on the same subject',
21993
+ },
21994
+ assignment: {
21995
+ type: 'ref',
21996
+ ref: 'lex:tools.ozone.report.defs#reportAssignment',
21997
+ description:
21998
+ 'Information about moderator currently assigned to this report (if any)',
21999
+ },
22000
+ queue: {
22001
+ type: 'ref',
22002
+ ref: 'lex:tools.ozone.queue.defs#queueView',
22003
+ description: 'The queue this report is assigned to (if any)',
22004
+ },
22005
+ isMuted: {
22006
+ type: 'boolean',
22007
+ description:
22008
+ 'Whether this report is muted. A report is muted if the reporter was muted or the subject was muted at the time the report was created.',
22009
+ },
22010
+ },
22011
+ },
22012
+ queueActivity: {
22013
+ type: 'object',
22014
+ description: 'Activity recording a report being routed to a queue.',
22015
+ properties: {
22016
+ previousStatus: {
22017
+ type: 'string',
22018
+ knownValues: ['open', 'closed', 'escalated', 'queued', 'assigned'],
22019
+ description:
22020
+ "The report's status before this activity. Populated automatically from the report row; not required in input.",
22021
+ },
22022
+ },
22023
+ },
22024
+ assignmentActivity: {
22025
+ type: 'object',
22026
+ description:
22027
+ 'Activity recording a moderator being assigned to a report.',
22028
+ properties: {
22029
+ previousStatus: {
22030
+ type: 'string',
22031
+ knownValues: ['open', 'closed', 'escalated', 'queued', 'assigned'],
22032
+ description:
22033
+ "The report's status before this activity. Populated automatically from the report row; not required in input.",
22034
+ },
22035
+ },
22036
+ },
22037
+ escalationActivity: {
22038
+ type: 'object',
22039
+ description: 'Activity recording a report being escalated.',
22040
+ properties: {
22041
+ previousStatus: {
22042
+ type: 'string',
22043
+ knownValues: ['open', 'closed', 'escalated', 'queued', 'assigned'],
22044
+ description:
22045
+ "The report's status before this activity. Populated automatically from the report row; not required in input.",
22046
+ },
22047
+ },
22048
+ },
22049
+ closeActivity: {
22050
+ type: 'object',
22051
+ description: 'Activity recording a report being closed.',
22052
+ properties: {
22053
+ previousStatus: {
22054
+ type: 'string',
22055
+ knownValues: ['open', 'closed', 'escalated', 'queued', 'assigned'],
22056
+ description:
22057
+ "The report's status before this activity. Populated automatically from the report row; not required in input.",
22058
+ },
22059
+ },
22060
+ },
22061
+ reopenActivity: {
22062
+ type: 'object',
22063
+ description:
22064
+ "Activity recording a closed report being reopened. Only valid when the report is in 'closed' status.",
22065
+ properties: {
22066
+ previousStatus: {
22067
+ type: 'string',
22068
+ knownValues: ['open', 'closed', 'escalated', 'queued', 'assigned'],
22069
+ description:
22070
+ "The report's status before this activity. Populated automatically from the report row; not required in input.",
22071
+ },
22072
+ },
22073
+ },
22074
+ noteActivity: {
22075
+ type: 'object',
22076
+ description:
22077
+ 'Activity recording a note on a report. Use internalNote for moderator-only notes or publicNote for reporter-visible notes (or both).',
22078
+ properties: {},
22079
+ },
22080
+ reportActivityView: {
22081
+ type: 'object',
22082
+ description: 'A single activity entry on a report.',
22083
+ required: [
22084
+ 'id',
22085
+ 'reportId',
22086
+ 'activity',
22087
+ 'isAutomated',
22088
+ 'createdBy',
22089
+ 'createdAt',
22090
+ ],
22091
+ properties: {
22092
+ id: {
22093
+ type: 'integer',
22094
+ description: 'Activity ID',
22095
+ },
22096
+ reportId: {
22097
+ type: 'integer',
22098
+ description: 'ID of the report this activity belongs to',
22099
+ },
22100
+ activity: {
22101
+ type: 'union',
22102
+ refs: [
22103
+ 'lex:tools.ozone.report.defs#queueActivity',
22104
+ 'lex:tools.ozone.report.defs#assignmentActivity',
22105
+ 'lex:tools.ozone.report.defs#escalationActivity',
22106
+ 'lex:tools.ozone.report.defs#closeActivity',
22107
+ 'lex:tools.ozone.report.defs#reopenActivity',
22108
+ 'lex:tools.ozone.report.defs#noteActivity',
22109
+ ],
22110
+ description: 'The typed activity object describing what occurred.',
22111
+ },
22112
+ internalNote: {
22113
+ type: 'string',
22114
+ description:
22115
+ 'Optional moderator-only note. Not visible to reporters.',
22116
+ },
22117
+ publicNote: {
22118
+ type: 'string',
22119
+ description:
22120
+ 'Optional public note, potentially visible to the reporter.',
22121
+ },
22122
+ meta: {
22123
+ type: 'unknown',
22124
+ description:
22125
+ 'Extensible JSON payload for loose activity-specific metadata (e.g. assignmentId).',
22126
+ },
22127
+ isAutomated: {
22128
+ type: 'boolean',
22129
+ description:
22130
+ 'True if this activity was created by an automated process (e.g. queue router) rather than a direct human action.',
22131
+ },
22132
+ createdBy: {
22133
+ type: 'string',
22134
+ format: 'did',
22135
+ description:
22136
+ 'DID of the actor who created this activity, or the service DID for automated activities.',
22137
+ },
22138
+ moderator: {
22139
+ type: 'ref',
22140
+ ref: 'lex:tools.ozone.team.defs#member',
22141
+ description:
22142
+ 'Full member record of the moderator who created this activity',
22143
+ },
22144
+ createdAt: {
22145
+ type: 'string',
22146
+ format: 'datetime',
22147
+ description: 'When this activity was created',
22148
+ },
22149
+ },
22150
+ },
22151
+ liveStats: {
22152
+ description:
22153
+ 'Live statistics for reports for the current calendar day, filterable by queue, moderator, or report type.',
22154
+ type: 'object',
22155
+ properties: {
22156
+ pendingCount: {
22157
+ type: 'integer',
22158
+ description: 'Number of reports currently not closed.',
22159
+ },
22160
+ actionedCount: {
22161
+ type: 'integer',
22162
+ description: 'Number of reports closed today.',
22163
+ },
22164
+ escalatedCount: {
22165
+ type: 'integer',
22166
+ description: 'Number of reports escalated today.',
22167
+ },
22168
+ inboundCount: {
22169
+ type: 'integer',
22170
+ description: 'Reports received today.',
22171
+ },
22172
+ actionRate: {
22173
+ type: 'integer',
22174
+ description:
22175
+ 'Percentage of reports actioned (actionedCount / inboundCount * 100), rounded to nearest integer.',
22176
+ },
22177
+ avgHandlingTimeSec: {
22178
+ type: 'integer',
22179
+ description:
22180
+ 'Average time in seconds from report creation (or moderator assignment) to close.',
22181
+ },
22182
+ lastUpdated: {
22183
+ type: 'string',
22184
+ format: 'datetime',
22185
+ description: 'When these statistics were last computed.',
22186
+ },
22187
+ },
22188
+ },
22189
+ historicalStats: {
22190
+ description:
22191
+ 'A single daily snapshot of report statistics for a calendar date.',
22192
+ type: 'object',
22193
+ required: ['date'],
22194
+ properties: {
22195
+ date: {
22196
+ type: 'string',
22197
+ description: 'The calendar date this snapshot covers (YYYY-MM-DD).',
22198
+ },
22199
+ computedAt: {
22200
+ type: 'string',
22201
+ format: 'datetime',
22202
+ description: 'When this snapshot was last computed.',
22203
+ },
22204
+ pendingCount: {
22205
+ type: 'integer',
22206
+ description: 'Number of reports not closed at time of computation.',
22207
+ },
22208
+ actionedCount: {
22209
+ type: 'integer',
22210
+ description: 'Number of reports closed during this day.',
22211
+ },
22212
+ escalatedCount: {
22213
+ type: 'integer',
22214
+ description: 'Number of reports escalated during this day.',
22215
+ },
22216
+ inboundCount: {
22217
+ type: 'integer',
22218
+ description: 'Reports received during this day.',
22219
+ },
22220
+ actionRate: {
22221
+ type: 'integer',
22222
+ description:
22223
+ 'Percentage of reports actioned (actionedCount / inboundCount * 100), rounded to nearest integer.',
22224
+ },
22225
+ avgHandlingTimeSec: {
22226
+ type: 'integer',
22227
+ description:
22228
+ 'Average time in seconds from report creation (or moderator assignment) to close.',
22229
+ },
22230
+ },
22231
+ },
22232
+ assignmentView: {
22233
+ type: 'object',
22234
+ required: ['id', 'did', 'reportId', 'startAt'],
22235
+ properties: {
22236
+ id: {
22237
+ type: 'integer',
22238
+ },
22239
+ did: {
22240
+ type: 'string',
22241
+ format: 'did',
22242
+ },
22243
+ moderator: {
22244
+ type: 'ref',
22245
+ ref: 'lex:tools.ozone.team.defs#member',
22246
+ description: 'The moderator assigned to this report',
22247
+ },
22248
+ queue: {
22249
+ type: 'ref',
22250
+ ref: 'lex:tools.ozone.queue.defs#queueView',
22251
+ },
22252
+ reportId: {
22253
+ type: 'integer',
22254
+ },
22255
+ startAt: {
22256
+ type: 'string',
22257
+ format: 'datetime',
22258
+ },
22259
+ endAt: {
22260
+ type: 'string',
22261
+ format: 'datetime',
22262
+ },
22263
+ },
22264
+ },
22265
+ },
22266
+ },
22267
+ ToolsOzoneReportGetAssignments: {
22268
+ lexicon: 1,
22269
+ id: 'tools.ozone.report.getAssignments',
22270
+ defs: {
22271
+ main: {
22272
+ type: 'query',
22273
+ description: 'Get assignments for reports.',
22274
+ parameters: {
22275
+ type: 'params',
22276
+ properties: {
22277
+ onlyActive: {
22278
+ type: 'boolean',
22279
+ default: true,
22280
+ description: 'When true, only returns active assignments.',
22281
+ },
22282
+ reportIds: {
22283
+ type: 'array',
22284
+ items: {
22285
+ type: 'integer',
22286
+ },
22287
+ maxLength: 50,
22288
+ description:
22289
+ 'If specified, returns assignments for these reports only.',
22290
+ },
22291
+ dids: {
22292
+ type: 'array',
22293
+ items: {
22294
+ type: 'string',
22295
+ format: 'did',
22296
+ },
22297
+ maxLength: 50,
22298
+ description:
22299
+ 'If specified, returns assignments for these moderators only.',
22300
+ },
22301
+ limit: {
22302
+ type: 'integer',
22303
+ minimum: 1,
22304
+ maximum: 100,
22305
+ default: 50,
22306
+ },
22307
+ cursor: {
22308
+ type: 'string',
22309
+ },
22310
+ },
22311
+ },
22312
+ output: {
22313
+ encoding: 'application/json',
22314
+ schema: {
22315
+ type: 'object',
22316
+ required: ['assignments'],
22317
+ properties: {
22318
+ cursor: {
22319
+ type: 'string',
22320
+ },
22321
+ assignments: {
22322
+ type: 'array',
22323
+ items: {
22324
+ type: 'ref',
22325
+ ref: 'lex:tools.ozone.report.defs#assignmentView',
22326
+ },
22327
+ },
22328
+ },
22329
+ },
22330
+ },
22331
+ },
22332
+ },
22333
+ },
22334
+ ToolsOzoneReportGetHistoricalStats: {
22335
+ lexicon: 1,
22336
+ id: 'tools.ozone.report.getHistoricalStats',
22337
+ defs: {
22338
+ main: {
22339
+ type: 'query',
22340
+ description:
22341
+ 'Get historical daily report statistics. Returns a paginated list of daily stat snapshots, newest first. Filter by queue, moderator, or report type.',
22342
+ parameters: {
22343
+ type: 'params',
22344
+ properties: {
22345
+ queueId: {
22346
+ type: 'integer',
22347
+ description:
22348
+ 'Filter stats by queue. Use -1 for unqueued reports.',
22349
+ },
22350
+ moderatorDid: {
22351
+ type: 'string',
22352
+ format: 'did',
22353
+ description: 'Filter stats by moderator DID.',
22354
+ },
22355
+ reportTypes: {
22356
+ type: 'array',
22357
+ items: {
22358
+ type: 'string',
22359
+ },
22360
+ description: 'Filter stats by report types.',
22361
+ },
22362
+ startDate: {
22363
+ type: 'string',
22364
+ format: 'datetime',
22365
+ description: 'Earliest date to include (inclusive).',
22366
+ },
22367
+ endDate: {
22368
+ type: 'string',
22369
+ format: 'datetime',
22370
+ description: 'Latest date to include (inclusive).',
22371
+ },
22372
+ limit: {
22373
+ type: 'integer',
22374
+ minimum: 1,
22375
+ maximum: 100,
22376
+ default: 30,
22377
+ description: 'Maximum number of entries to return.',
22378
+ },
22379
+ cursor: {
22380
+ type: 'string',
22381
+ description: 'Pagination cursor.',
22382
+ },
22383
+ },
22384
+ },
22385
+ output: {
22386
+ encoding: 'application/json',
22387
+ schema: {
22388
+ type: 'object',
22389
+ required: ['stats'],
22390
+ properties: {
22391
+ stats: {
22392
+ type: 'array',
22393
+ items: {
22394
+ type: 'ref',
22395
+ ref: 'lex:tools.ozone.report.defs#historicalStats',
22396
+ },
22397
+ },
22398
+ cursor: {
22399
+ type: 'string',
22400
+ },
22401
+ },
22402
+ },
22403
+ },
22404
+ },
22405
+ },
22406
+ },
22407
+ ToolsOzoneReportGetLatestReport: {
22408
+ lexicon: 1,
22409
+ id: 'tools.ozone.report.getLatestReport',
22410
+ defs: {
22411
+ main: {
22412
+ type: 'query',
22413
+ description: 'Get the most recent report.',
22414
+ parameters: {
22415
+ type: 'params',
22416
+ properties: {},
22417
+ },
22418
+ output: {
22419
+ encoding: 'application/json',
22420
+ schema: {
22421
+ type: 'object',
22422
+ required: ['report'],
22423
+ properties: {
22424
+ report: {
22425
+ type: 'ref',
22426
+ ref: 'lex:tools.ozone.report.defs#reportView',
22427
+ },
22428
+ },
22429
+ },
22430
+ },
22431
+ errors: [
22432
+ {
22433
+ name: 'NotFound',
22434
+ description: 'No report found.',
22435
+ },
22436
+ ],
22437
+ },
22438
+ },
22439
+ },
22440
+ ToolsOzoneReportGetLiveStats: {
22441
+ lexicon: 1,
22442
+ id: 'tools.ozone.report.getLiveStats',
22443
+ defs: {
22444
+ main: {
22445
+ type: 'query',
22446
+ description:
22447
+ 'Get live report statistics from the past 24 hours. Filter by queue, moderator, or report type. Omit all parameters for aggregate stats.',
22448
+ parameters: {
22449
+ type: 'params',
22450
+ properties: {
22451
+ queueId: {
22452
+ type: 'integer',
22453
+ description:
22454
+ 'Filter stats by queue. Use -1 for unqueued reports.',
22455
+ },
22456
+ moderatorDid: {
22457
+ type: 'string',
22458
+ format: 'did',
22459
+ description: 'Filter stats by moderator DID.',
22460
+ },
22461
+ reportTypes: {
22462
+ type: 'array',
22463
+ items: {
22464
+ type: 'string',
22465
+ },
22466
+ description: 'Filter stats by report types.',
22467
+ },
22468
+ },
22469
+ },
22470
+ output: {
22471
+ encoding: 'application/json',
22472
+ schema: {
22473
+ type: 'object',
22474
+ required: ['stats'],
22475
+ properties: {
22476
+ stats: {
22477
+ type: 'ref',
22478
+ ref: 'lex:tools.ozone.report.defs#liveStats',
22479
+ description: 'Statistics for the requested filter.',
22480
+ },
22481
+ },
22482
+ },
22483
+ },
22484
+ },
22485
+ },
22486
+ },
22487
+ ToolsOzoneReportGetReport: {
22488
+ lexicon: 1,
22489
+ id: 'tools.ozone.report.getReport',
22490
+ defs: {
22491
+ main: {
22492
+ type: 'query',
22493
+ description: 'Get details about a single moderation report by ID.',
22494
+ parameters: {
22495
+ type: 'params',
22496
+ required: ['id'],
22497
+ properties: {
22498
+ id: {
22499
+ type: 'integer',
22500
+ description: 'The ID of the report to retrieve.',
22501
+ },
22502
+ },
22503
+ },
22504
+ output: {
22505
+ encoding: 'application/json',
22506
+ schema: {
22507
+ type: 'ref',
22508
+ ref: 'lex:tools.ozone.report.defs#reportView',
22509
+ },
22510
+ },
22511
+ errors: [
22512
+ {
22513
+ name: 'NotFound',
22514
+ description: 'No report found.',
22515
+ },
22516
+ ],
22517
+ },
22518
+ },
22519
+ },
22520
+ ToolsOzoneReportListActivities: {
22521
+ lexicon: 1,
22522
+ id: 'tools.ozone.report.listActivities',
22523
+ defs: {
22524
+ main: {
22525
+ type: 'query',
22526
+ description:
22527
+ 'List all activities for a report, sorted most-recent-first.',
22528
+ parameters: {
22529
+ type: 'params',
22530
+ required: ['reportId'],
22531
+ properties: {
22532
+ reportId: {
22533
+ type: 'integer',
22534
+ description: 'ID of the report whose activities to list',
22535
+ },
22536
+ limit: {
22537
+ type: 'integer',
22538
+ minimum: 1,
22539
+ maximum: 100,
22540
+ default: 50,
22541
+ },
22542
+ cursor: {
22543
+ type: 'string',
22544
+ },
22545
+ },
22546
+ },
22547
+ output: {
22548
+ encoding: 'application/json',
22549
+ schema: {
22550
+ type: 'object',
22551
+ required: ['activities'],
22552
+ properties: {
22553
+ activities: {
22554
+ type: 'array',
22555
+ items: {
22556
+ type: 'ref',
22557
+ ref: 'lex:tools.ozone.report.defs#reportActivityView',
22558
+ },
22559
+ },
22560
+ cursor: {
22561
+ type: 'string',
22562
+ },
22563
+ },
22564
+ },
22565
+ },
22566
+ },
22567
+ },
22568
+ },
22569
+ ToolsOzoneReportQueryReports: {
22570
+ lexicon: 1,
22571
+ id: 'tools.ozone.report.queryReports',
22572
+ defs: {
22573
+ main: {
22574
+ type: 'query',
22575
+ description:
22576
+ 'View moderation reports. Reports are individual instances of content being reported, as opposed to subject statuses which aggregate reports at the subject level.',
22577
+ parameters: {
22578
+ type: 'params',
22579
+ required: ['status'],
22580
+ properties: {
22581
+ queueId: {
22582
+ type: 'integer',
22583
+ description: 'Filter by queue ID. Use -1 for unassigned reports.',
22584
+ },
22585
+ reportTypes: {
22586
+ type: 'array',
22587
+ items: {
22588
+ type: 'string',
22589
+ },
22590
+ description:
22591
+ 'Filter by report types (fully qualified string in the format of com.atproto.moderation.defs#reason<name>).',
22592
+ },
22593
+ status: {
22594
+ type: 'string',
22595
+ knownValues: [
22596
+ 'open',
22597
+ 'closed',
22598
+ 'escalated',
22599
+ 'queued',
22600
+ 'assigned',
22601
+ ],
22602
+ description: 'Filter by report status.',
22603
+ },
22604
+ subject: {
22605
+ type: 'string',
22606
+ format: 'uri',
22607
+ description: 'Filter by subject DID or AT-URI.',
22608
+ },
22609
+ did: {
22610
+ type: 'string',
22611
+ format: 'did',
22612
+ description:
22613
+ 'Filter to reports where the subject is this DID or any record owned by this DID. Unlike `subject` (which scopes to a specific account or record), this returns all reports tied to the DID across both account-level and record-level subjects.',
22614
+ },
22615
+ subjectType: {
22616
+ type: 'string',
22617
+ description:
22618
+ 'If specified, reports of the given type (account or record) will be returned.',
22619
+ knownValues: ['account', 'record'],
22620
+ },
22621
+ collections: {
22622
+ type: 'array',
22623
+ maxLength: 20,
22624
+ description:
22625
+ "If specified, reports where the subject belongs to the given collections will be returned. When subjectType is set to 'account', this will be ignored.",
22626
+ items: {
22627
+ type: 'string',
22628
+ format: 'nsid',
22629
+ },
22630
+ },
22631
+ reportedAfter: {
22632
+ type: 'string',
22633
+ format: 'datetime',
22634
+ description: 'Retrieve reports created after a given timestamp',
22635
+ },
22636
+ reportedBefore: {
22637
+ type: 'string',
22638
+ format: 'datetime',
22639
+ description: 'Retrieve reports created before a given timestamp',
22640
+ },
22641
+ isMuted: {
22642
+ type: 'boolean',
22643
+ default: false,
22644
+ description:
22645
+ 'Filter by muted status. true returns only muted reports, false returns only unmuted reports. Defaults to false.',
22646
+ },
22647
+ assignedTo: {
22648
+ type: 'string',
22649
+ format: 'did',
22650
+ description:
22651
+ 'Filter by the DID of the moderator permanently assigned to the report.',
22652
+ },
22653
+ sortField: {
22654
+ type: 'string',
22655
+ default: 'createdAt',
22656
+ enum: ['createdAt', 'updatedAt'],
22657
+ },
22658
+ sortDirection: {
22659
+ type: 'string',
22660
+ default: 'desc',
22661
+ enum: ['asc', 'desc'],
22662
+ },
22663
+ limit: {
22664
+ type: 'integer',
22665
+ minimum: 1,
22666
+ maximum: 100,
22667
+ default: 50,
22668
+ },
22669
+ cursor: {
22670
+ type: 'string',
22671
+ },
22672
+ },
22673
+ },
22674
+ output: {
22675
+ encoding: 'application/json',
22676
+ schema: {
22677
+ type: 'object',
22678
+ required: ['reports'],
22679
+ properties: {
22680
+ cursor: {
22681
+ type: 'string',
22682
+ },
22683
+ reports: {
22684
+ type: 'array',
22685
+ items: {
22686
+ type: 'ref',
22687
+ ref: 'lex:tools.ozone.report.defs#reportView',
22688
+ },
22689
+ },
22690
+ },
22691
+ },
22692
+ },
22693
+ },
22694
+ },
22695
+ },
22696
+ ToolsOzoneReportReassignQueue: {
22697
+ lexicon: 1,
22698
+ id: 'tools.ozone.report.reassignQueue',
22699
+ defs: {
22700
+ main: {
22701
+ type: 'procedure',
22702
+ description:
22703
+ 'Manually reassign a report to a different queue (or unassign it). Records a queueActivity entry on the report.',
22704
+ input: {
22705
+ encoding: 'application/json',
22706
+ schema: {
22707
+ type: 'object',
22708
+ required: ['reportId', 'queueId'],
22709
+ properties: {
22710
+ reportId: {
22711
+ type: 'integer',
22712
+ description: 'ID of the report to reassign',
22713
+ },
22714
+ queueId: {
22715
+ type: 'integer',
22716
+ description:
22717
+ 'Target queue ID. Use -1 to unassign from any queue.',
22718
+ },
22719
+ comment: {
22720
+ type: 'string',
22721
+ description:
22722
+ 'Optional moderator-only note recorded on the resulting queueActivity as internalNote.',
22723
+ },
22724
+ },
22725
+ },
22726
+ },
22727
+ output: {
22728
+ encoding: 'application/json',
22729
+ schema: {
22730
+ type: 'object',
22731
+ required: ['report'],
22732
+ properties: {
22733
+ report: {
22734
+ type: 'ref',
22735
+ ref: 'lex:tools.ozone.report.defs#reportView',
22736
+ },
22737
+ },
22738
+ },
22739
+ },
22740
+ errors: [
22741
+ {
22742
+ name: 'ReportNotFound',
22743
+ description: 'No report exists with the given reportId',
22744
+ },
22745
+ {
22746
+ name: 'ReportClosed',
22747
+ description: 'The report is closed and cannot be reassigned',
22748
+ },
22749
+ {
22750
+ name: 'AlreadyInTargetQueue',
22751
+ description: 'The report is already assigned to the target queue',
22752
+ },
22753
+ {
22754
+ name: 'QueueNotFound',
22755
+ description: 'No active queue exists with the given queueId',
22756
+ },
22757
+ {
22758
+ name: 'QueueDisabled',
22759
+ description:
22760
+ 'The target queue is disabled and cannot receive new assignments',
22761
+ },
22762
+ ],
22763
+ },
22764
+ },
22765
+ },
22766
+ ToolsOzoneReportRefreshStats: {
22767
+ lexicon: 1,
22768
+ id: 'tools.ozone.report.refreshStats',
22769
+ defs: {
22770
+ main: {
22771
+ type: 'procedure',
22772
+ description:
22773
+ 'Recompute report statistics for a date range. Useful for backfilling after failures or data corrections.',
22774
+ input: {
22775
+ encoding: 'application/json',
22776
+ schema: {
22777
+ type: 'object',
22778
+ required: ['startDate', 'endDate'],
22779
+ properties: {
22780
+ startDate: {
22781
+ type: 'string',
22782
+ description:
22783
+ 'Start date for recomputation, inclusive (YYYY-MM-DD).',
22784
+ },
22785
+ endDate: {
22786
+ type: 'string',
22787
+ description:
22788
+ 'End date for recomputation, inclusive (YYYY-MM-DD).',
22789
+ },
22790
+ queueIds: {
22791
+ type: 'array',
22792
+ items: {
22793
+ type: 'integer',
22794
+ },
22795
+ description:
22796
+ 'Optional list of queue IDs to recompute. Omit to recompute all groups.',
22797
+ },
22798
+ },
22799
+ },
22800
+ },
22801
+ output: {
22802
+ encoding: 'application/json',
22803
+ schema: {
22804
+ type: 'object',
22805
+ properties: {},
22806
+ },
22807
+ },
22808
+ },
22809
+ },
22810
+ },
22811
+ ToolsOzoneReportUnassignModerator: {
22812
+ lexicon: 1,
22813
+ id: 'tools.ozone.report.unassignModerator',
22814
+ defs: {
22815
+ main: {
22816
+ type: 'procedure',
22817
+ description: 'Remove report assignment.',
22818
+ input: {
22819
+ encoding: 'application/json',
22820
+ schema: {
22821
+ type: 'object',
22822
+ required: ['reportId'],
22823
+ properties: {
22824
+ reportId: {
22825
+ type: 'integer',
22826
+ description: 'The ID of the report to unassign.',
22827
+ },
22828
+ },
22829
+ },
22830
+ },
22831
+ output: {
22832
+ encoding: 'application/json',
22833
+ schema: {
22834
+ type: 'ref',
22835
+ ref: 'lex:tools.ozone.report.defs#assignmentView',
22836
+ },
22837
+ },
22838
+ errors: [
22839
+ {
22840
+ name: 'InvalidAssignment',
22841
+ description: 'The report ID is invalid.',
22842
+ },
22843
+ ],
20996
22844
  },
20997
22845
  },
20998
22846
  },
@@ -23179,7 +25027,28 @@ export const ids = {
23179
25027
  ToolsOzoneModerationQueryStatuses: 'tools.ozone.moderation.queryStatuses',
23180
25028
  ToolsOzoneModerationScheduleAction: 'tools.ozone.moderation.scheduleAction',
23181
25029
  ToolsOzoneModerationSearchRepos: 'tools.ozone.moderation.searchRepos',
25030
+ ToolsOzoneQueueAssignModerator: 'tools.ozone.queue.assignModerator',
25031
+ ToolsOzoneQueueCreateQueue: 'tools.ozone.queue.createQueue',
25032
+ ToolsOzoneQueueDefs: 'tools.ozone.queue.defs',
25033
+ ToolsOzoneQueueDeleteQueue: 'tools.ozone.queue.deleteQueue',
25034
+ ToolsOzoneQueueGetAssignments: 'tools.ozone.queue.getAssignments',
25035
+ ToolsOzoneQueueListQueues: 'tools.ozone.queue.listQueues',
25036
+ ToolsOzoneQueueRouteReports: 'tools.ozone.queue.routeReports',
25037
+ ToolsOzoneQueueUnassignModerator: 'tools.ozone.queue.unassignModerator',
25038
+ ToolsOzoneQueueUpdateQueue: 'tools.ozone.queue.updateQueue',
25039
+ ToolsOzoneReportAssignModerator: 'tools.ozone.report.assignModerator',
25040
+ ToolsOzoneReportCreateActivity: 'tools.ozone.report.createActivity',
23182
25041
  ToolsOzoneReportDefs: 'tools.ozone.report.defs',
25042
+ ToolsOzoneReportGetAssignments: 'tools.ozone.report.getAssignments',
25043
+ ToolsOzoneReportGetHistoricalStats: 'tools.ozone.report.getHistoricalStats',
25044
+ ToolsOzoneReportGetLatestReport: 'tools.ozone.report.getLatestReport',
25045
+ ToolsOzoneReportGetLiveStats: 'tools.ozone.report.getLiveStats',
25046
+ ToolsOzoneReportGetReport: 'tools.ozone.report.getReport',
25047
+ ToolsOzoneReportListActivities: 'tools.ozone.report.listActivities',
25048
+ ToolsOzoneReportQueryReports: 'tools.ozone.report.queryReports',
25049
+ ToolsOzoneReportReassignQueue: 'tools.ozone.report.reassignQueue',
25050
+ ToolsOzoneReportRefreshStats: 'tools.ozone.report.refreshStats',
25051
+ ToolsOzoneReportUnassignModerator: 'tools.ozone.report.unassignModerator',
23183
25052
  ToolsOzoneSafelinkAddRule: 'tools.ozone.safelink.addRule',
23184
25053
  ToolsOzoneSafelinkDefs: 'tools.ozone.safelink.defs',
23185
25054
  ToolsOzoneSafelinkQueryEvents: 'tools.ozone.safelink.queryEvents',