@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
@@ -2601,6 +2601,11 @@ exports.schemaDict = {
2601
2601
  accept: ['image/*'],
2602
2602
  maxSize: 1000000,
2603
2603
  },
2604
+ associatedRecord: {
2605
+ type: 'string',
2606
+ format: 'at-uri',
2607
+ description: 'The URI of the Atmosphere record representing this external content, if it exists. Example: a site.standard.document record.',
2608
+ },
2604
2609
  },
2605
2610
  },
2606
2611
  view: {
@@ -9401,6 +9406,7 @@ exports.schemaDict = {
9401
9406
  refs: [
9402
9407
  'lex:chat.bsky.actor.defs#directConvoMember',
9403
9408
  'lex:chat.bsky.actor.defs#groupConvoMember',
9409
+ 'lex:chat.bsky.actor.defs#pastGroupConvoMember',
9404
9410
  ],
9405
9411
  },
9406
9412
  },
@@ -9411,7 +9417,7 @@ exports.schemaDict = {
9411
9417
  properties: {},
9412
9418
  },
9413
9419
  groupConvoMember: {
9414
- description: '[NOTE: This is under active development and should be considered unstable while this note is here].',
9420
+ description: '[NOTE: This is under active development and should be considered unstable while this note is here]. A current group convo member.',
9415
9421
  type: 'object',
9416
9422
  required: ['role'],
9417
9423
  properties: {
@@ -9427,6 +9433,12 @@ exports.schemaDict = {
9427
9433
  },
9428
9434
  },
9429
9435
  },
9436
+ pastGroupConvoMember: {
9437
+ description: '[NOTE: This is under active development and should be considered unstable while this note is here]. A past group convo member.',
9438
+ type: 'object',
9439
+ required: [],
9440
+ properties: {},
9441
+ },
9430
9442
  },
9431
9443
  },
9432
9444
  ChatBskyActorDeleteAccount: {
@@ -9662,6 +9674,16 @@ exports.schemaDict = {
9662
9674
  },
9663
9675
  },
9664
9676
  },
9677
+ systemMessageReferredUser: {
9678
+ type: 'object',
9679
+ required: ['did'],
9680
+ properties: {
9681
+ did: {
9682
+ type: 'string',
9683
+ format: 'did',
9684
+ },
9685
+ },
9686
+ },
9665
9687
  systemMessageView: {
9666
9688
  description: '[NOTE: This is under active development and should be considered unstable while this note is here].',
9667
9689
  type: 'object',
@@ -9704,7 +9726,7 @@ exports.schemaDict = {
9704
9726
  member: {
9705
9727
  description: 'Current view of the member who was added.',
9706
9728
  type: 'ref',
9707
- ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
9729
+ ref: 'lex:chat.bsky.convo.defs#systemMessageReferredUser',
9708
9730
  },
9709
9731
  role: {
9710
9732
  description: "Role the user was added to the group with. The role from 'member' will reflect the current data, not historical.",
@@ -9713,7 +9735,7 @@ exports.schemaDict = {
9713
9735
  },
9714
9736
  addedBy: {
9715
9737
  type: 'ref',
9716
- ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
9738
+ ref: 'lex:chat.bsky.convo.defs#systemMessageReferredUser',
9717
9739
  },
9718
9740
  },
9719
9741
  },
@@ -9725,11 +9747,11 @@ exports.schemaDict = {
9725
9747
  member: {
9726
9748
  description: 'Current view of the member who was removed.',
9727
9749
  type: 'ref',
9728
- ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
9750
+ ref: 'lex:chat.bsky.convo.defs#systemMessageReferredUser',
9729
9751
  },
9730
9752
  removedBy: {
9731
9753
  type: 'ref',
9732
- ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
9754
+ ref: 'lex:chat.bsky.convo.defs#systemMessageReferredUser',
9733
9755
  },
9734
9756
  },
9735
9757
  },
@@ -9741,7 +9763,7 @@ exports.schemaDict = {
9741
9763
  member: {
9742
9764
  description: 'Current view of the member who joined.',
9743
9765
  type: 'ref',
9744
- ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
9766
+ ref: 'lex:chat.bsky.convo.defs#systemMessageReferredUser',
9745
9767
  },
9746
9768
  role: {
9747
9769
  description: "Role the user was added to the group with. The role from 'member' will reflect the current data, not historical.",
@@ -9751,7 +9773,7 @@ exports.schemaDict = {
9751
9773
  approvedBy: {
9752
9774
  description: 'If join link was configured to require approval, this will be set to who approved the request. Undefined if approval was not required.',
9753
9775
  type: 'ref',
9754
- ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
9776
+ ref: 'lex:chat.bsky.convo.defs#systemMessageReferredUser',
9755
9777
  },
9756
9778
  },
9757
9779
  },
@@ -9763,7 +9785,7 @@ exports.schemaDict = {
9763
9785
  member: {
9764
9786
  description: 'Current view of the member who left the group.',
9765
9787
  type: 'ref',
9766
- ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
9788
+ ref: 'lex:chat.bsky.convo.defs#systemMessageReferredUser',
9767
9789
  },
9768
9790
  },
9769
9791
  },
@@ -9775,7 +9797,7 @@ exports.schemaDict = {
9775
9797
  lockedBy: {
9776
9798
  description: 'Current view of the member who locked the group.',
9777
9799
  type: 'ref',
9778
- ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
9800
+ ref: 'lex:chat.bsky.convo.defs#systemMessageReferredUser',
9779
9801
  },
9780
9802
  },
9781
9803
  },
@@ -9787,7 +9809,7 @@ exports.schemaDict = {
9787
9809
  unlockedBy: {
9788
9810
  description: 'Current view of the member who unlocked the group.',
9789
9811
  type: 'ref',
9790
- ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
9812
+ ref: 'lex:chat.bsky.convo.defs#systemMessageReferredUser',
9791
9813
  },
9792
9814
  },
9793
9815
  },
@@ -9799,7 +9821,7 @@ exports.schemaDict = {
9799
9821
  lockedBy: {
9800
9822
  description: 'Current view of the member who locked the group.',
9801
9823
  type: 'ref',
9802
- ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
9824
+ ref: 'lex:chat.bsky.convo.defs#systemMessageReferredUser',
9803
9825
  },
9804
9826
  },
9805
9827
  },
@@ -9967,7 +9989,7 @@ exports.schemaDict = {
9967
9989
  groupConvo: {
9968
9990
  description: '[NOTE: This is under active development and should be considered unstable while this note is here].',
9969
9991
  type: 'object',
9970
- required: ['name', 'lockStatus', 'memberCount'],
9992
+ required: ['name', 'lockStatus', 'memberCount', 'createdAt'],
9971
9993
  properties: {
9972
9994
  name: {
9973
9995
  type: 'string',
@@ -9979,6 +10001,10 @@ exports.schemaDict = {
9979
10001
  type: 'integer',
9980
10002
  description: 'The total number of members in the group conversation.',
9981
10003
  },
10004
+ createdAt: {
10005
+ type: 'string',
10006
+ format: 'datetime',
10007
+ },
9982
10008
  joinLink: {
9983
10009
  type: 'ref',
9984
10010
  ref: 'lex:chat.bsky.group.defs#joinLinkView',
@@ -10073,6 +10099,14 @@ exports.schemaDict = {
10073
10099
  'lex:chat.bsky.convo.defs#deletedMessageView',
10074
10100
  ],
10075
10101
  },
10102
+ relatedProfiles: {
10103
+ description: "Profiles referred to in the message view. This isn't required for compatibility, because it was added later, but should generally be present.",
10104
+ type: 'array',
10105
+ items: {
10106
+ type: 'ref',
10107
+ ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
10108
+ },
10109
+ },
10076
10110
  },
10077
10111
  },
10078
10112
  logDeleteMessage: {
@@ -10138,6 +10172,14 @@ exports.schemaDict = {
10138
10172
  type: 'ref',
10139
10173
  ref: 'lex:chat.bsky.convo.defs#reactionView',
10140
10174
  },
10175
+ relatedProfiles: {
10176
+ description: "Profiles referred in the message and reaction views. This isn't required for compatibility, because it was added later, but should generally be present.",
10177
+ type: 'array',
10178
+ items: {
10179
+ type: 'ref',
10180
+ ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
10181
+ },
10182
+ },
10141
10183
  },
10142
10184
  },
10143
10185
  logRemoveReaction: {
@@ -10162,6 +10204,14 @@ exports.schemaDict = {
10162
10204
  type: 'ref',
10163
10205
  ref: 'lex:chat.bsky.convo.defs#reactionView',
10164
10206
  },
10207
+ relatedProfiles: {
10208
+ description: "Profiles referred in the message and reaction views. This isn't required for compatibility, because it was added later, but should generally be present.",
10209
+ type: 'array',
10210
+ items: {
10211
+ type: 'ref',
10212
+ ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
10213
+ },
10214
+ },
10165
10215
  },
10166
10216
  },
10167
10217
  logReadConvo: {
@@ -10188,7 +10238,7 @@ exports.schemaDict = {
10188
10238
  logAddMember: {
10189
10239
  description: '[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).',
10190
10240
  type: 'object',
10191
- required: ['rev', 'convoId', 'message'],
10241
+ required: ['rev', 'convoId', 'message', 'relatedProfiles'],
10192
10242
  properties: {
10193
10243
  rev: {
10194
10244
  type: 'string',
@@ -10201,12 +10251,20 @@ exports.schemaDict = {
10201
10251
  type: 'ref',
10202
10252
  ref: 'lex:chat.bsky.convo.defs#systemMessageView',
10203
10253
  },
10254
+ relatedProfiles: {
10255
+ description: 'Profiles referred in the system message.',
10256
+ type: 'array',
10257
+ items: {
10258
+ type: 'ref',
10259
+ ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
10260
+ },
10261
+ },
10204
10262
  },
10205
10263
  },
10206
10264
  logRemoveMember: {
10207
10265
  description: "[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).",
10208
10266
  type: 'object',
10209
- required: ['rev', 'convoId', 'message'],
10267
+ required: ['rev', 'convoId', 'message', 'relatedProfiles'],
10210
10268
  properties: {
10211
10269
  rev: {
10212
10270
  type: 'string',
@@ -10219,12 +10277,20 @@ exports.schemaDict = {
10219
10277
  type: 'ref',
10220
10278
  ref: 'lex:chat.bsky.convo.defs#systemMessageView',
10221
10279
  },
10280
+ relatedProfiles: {
10281
+ description: 'Profiles referred in the system message.',
10282
+ type: 'array',
10283
+ items: {
10284
+ type: 'ref',
10285
+ ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
10286
+ },
10287
+ },
10222
10288
  },
10223
10289
  },
10224
10290
  logMemberJoin: {
10225
10291
  description: '[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).',
10226
10292
  type: 'object',
10227
- required: ['rev', 'convoId', 'message'],
10293
+ required: ['rev', 'convoId', 'message', 'relatedProfiles'],
10228
10294
  properties: {
10229
10295
  rev: {
10230
10296
  type: 'string',
@@ -10237,12 +10303,20 @@ exports.schemaDict = {
10237
10303
  type: 'ref',
10238
10304
  ref: 'lex:chat.bsky.convo.defs#systemMessageView',
10239
10305
  },
10306
+ relatedProfiles: {
10307
+ description: 'Profiles referred in the system message.',
10308
+ type: 'array',
10309
+ items: {
10310
+ type: 'ref',
10311
+ ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
10312
+ },
10313
+ },
10240
10314
  },
10241
10315
  },
10242
10316
  logMemberLeave: {
10243
10317
  description: "[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).",
10244
10318
  type: 'object',
10245
- required: ['rev', 'convoId', 'message'],
10319
+ required: ['rev', 'convoId', 'message', 'relatedProfiles'],
10246
10320
  properties: {
10247
10321
  rev: {
10248
10322
  type: 'string',
@@ -10255,12 +10329,20 @@ exports.schemaDict = {
10255
10329
  type: 'ref',
10256
10330
  ref: 'lex:chat.bsky.convo.defs#systemMessageView',
10257
10331
  },
10332
+ relatedProfiles: {
10333
+ description: 'Profiles referred in the system message.',
10334
+ type: 'array',
10335
+ items: {
10336
+ type: 'ref',
10337
+ ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
10338
+ },
10339
+ },
10258
10340
  },
10259
10341
  },
10260
10342
  logLockConvo: {
10261
10343
  description: '[NOTE: This is under active development and should be considered unstable while this note is here]. Event indicating a group convo was locked.',
10262
10344
  type: 'object',
10263
- required: ['rev', 'convoId', 'message'],
10345
+ required: ['rev', 'convoId', 'message', 'relatedProfiles'],
10264
10346
  properties: {
10265
10347
  rev: {
10266
10348
  type: 'string',
@@ -10273,12 +10355,20 @@ exports.schemaDict = {
10273
10355
  type: 'ref',
10274
10356
  ref: 'lex:chat.bsky.convo.defs#systemMessageView',
10275
10357
  },
10358
+ relatedProfiles: {
10359
+ description: 'Profiles referred in the system message.',
10360
+ type: 'array',
10361
+ items: {
10362
+ type: 'ref',
10363
+ ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
10364
+ },
10365
+ },
10276
10366
  },
10277
10367
  },
10278
10368
  logUnlockConvo: {
10279
10369
  description: '[NOTE: This is under active development and should be considered unstable while this note is here]. Event indicating a group convo was unlocked.',
10280
10370
  type: 'object',
10281
- required: ['rev', 'convoId', 'message'],
10371
+ required: ['rev', 'convoId', 'message', 'relatedProfiles'],
10282
10372
  properties: {
10283
10373
  rev: {
10284
10374
  type: 'string',
@@ -10291,12 +10381,20 @@ exports.schemaDict = {
10291
10381
  type: 'ref',
10292
10382
  ref: 'lex:chat.bsky.convo.defs#systemMessageView',
10293
10383
  },
10384
+ relatedProfiles: {
10385
+ description: 'Profiles referred in the system message.',
10386
+ type: 'array',
10387
+ items: {
10388
+ type: 'ref',
10389
+ ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
10390
+ },
10391
+ },
10294
10392
  },
10295
10393
  },
10296
10394
  logLockConvoPermanently: {
10297
10395
  description: '[NOTE: This is under active development and should be considered unstable while this note is here]. Event indicating a group convo was locked permanently.',
10298
10396
  type: 'object',
10299
- required: ['rev', 'convoId', 'message'],
10397
+ required: ['rev', 'convoId', 'message', 'relatedProfiles'],
10300
10398
  properties: {
10301
10399
  rev: {
10302
10400
  type: 'string',
@@ -10309,6 +10407,14 @@ exports.schemaDict = {
10309
10407
  type: 'ref',
10310
10408
  ref: 'lex:chat.bsky.convo.defs#systemMessageView',
10311
10409
  },
10410
+ relatedProfiles: {
10411
+ description: 'Profiles referred in the system message.',
10412
+ type: 'array',
10413
+ items: {
10414
+ type: 'ref',
10415
+ ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
10416
+ },
10417
+ },
10312
10418
  },
10313
10419
  },
10314
10420
  logEditGroup: {
@@ -10811,6 +10917,14 @@ exports.schemaDict = {
10811
10917
  ],
10812
10918
  },
10813
10919
  },
10920
+ relatedProfiles: {
10921
+ description: 'Set of all members who authored or reacted to the returned messages. Members referred to by system messages are also included.',
10922
+ type: 'array',
10923
+ items: {
10924
+ type: 'ref',
10925
+ ref: 'lex:chat.bsky.actor.defs#profileViewBasic',
10926
+ },
10927
+ },
10814
10928
  },
10815
10929
  },
10816
10930
  },
@@ -18222,6 +18336,10 @@ exports.schemaDict = {
18222
18336
  type: 'string',
18223
18337
  description: 'Additional comment about added/removed tags.',
18224
18338
  },
18339
+ durationInHours: {
18340
+ type: 'integer',
18341
+ description: 'Indicates how long the tags being added should remain before automatically being removed. Only applies to tags being added.',
18342
+ },
18225
18343
  },
18226
18344
  },
18227
18345
  accountEvent: {
@@ -18940,6 +19058,11 @@ exports.schemaDict = {
18940
19058
  type: 'string',
18941
19059
  description: '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.',
18942
19060
  },
19061
+ reportAction: {
19062
+ type: 'ref',
19063
+ ref: 'lex:tools.ozone.moderation.emitEvent#reportAction',
19064
+ description: 'Optional report-level targeting. If provided, this event will be linked to specific reports and reporters may be notified.',
19065
+ },
18943
19066
  },
18944
19067
  },
18945
19068
  },
@@ -18960,6 +19083,34 @@ exports.schemaDict = {
18960
19083
  },
18961
19084
  ],
18962
19085
  },
19086
+ reportAction: {
19087
+ type: 'object',
19088
+ description: 'Target specific reports when emitting a moderation event',
19089
+ properties: {
19090
+ ids: {
19091
+ type: 'array',
19092
+ items: {
19093
+ type: 'integer',
19094
+ },
19095
+ description: 'Target specific report IDs',
19096
+ },
19097
+ types: {
19098
+ type: 'array',
19099
+ items: {
19100
+ type: 'string',
19101
+ },
19102
+ description: 'Target reports matching these report types on the subject (fully qualified NSIDs)',
19103
+ },
19104
+ all: {
19105
+ type: 'boolean',
19106
+ description: 'Target ALL reports on the subject',
19107
+ },
19108
+ note: {
19109
+ type: 'string',
19110
+ description: 'Note to send to reporter(s) when actioning their report',
19111
+ },
19112
+ },
19113
+ },
18963
19114
  },
18964
19115
  },
18965
19116
  ToolsOzoneModerationGetAccountTimeline: {
@@ -20010,132 +20161,818 @@ exports.schemaDict = {
20010
20161
  },
20011
20162
  },
20012
20163
  },
20013
- ToolsOzoneReportDefs: {
20164
+ ToolsOzoneQueueAssignModerator: {
20014
20165
  lexicon: 1,
20015
- id: 'tools.ozone.report.defs',
20166
+ id: 'tools.ozone.queue.assignModerator',
20016
20167
  defs: {
20017
- reasonType: {
20018
- type: 'string',
20019
- knownValues: [
20020
- 'tools.ozone.report.defs#reasonAppeal',
20021
- 'tools.ozone.report.defs#reasonOther',
20022
- 'tools.ozone.report.defs#reasonViolenceAnimal',
20023
- 'tools.ozone.report.defs#reasonViolenceThreats',
20024
- 'tools.ozone.report.defs#reasonViolenceGraphicContent',
20025
- 'tools.ozone.report.defs#reasonViolenceGlorification',
20026
- 'tools.ozone.report.defs#reasonViolenceExtremistContent',
20027
- 'tools.ozone.report.defs#reasonViolenceTrafficking',
20028
- 'tools.ozone.report.defs#reasonViolenceOther',
20029
- 'tools.ozone.report.defs#reasonSexualAbuseContent',
20030
- 'tools.ozone.report.defs#reasonSexualNCII',
20031
- 'tools.ozone.report.defs#reasonSexualDeepfake',
20032
- 'tools.ozone.report.defs#reasonSexualAnimal',
20033
- 'tools.ozone.report.defs#reasonSexualUnlabeled',
20034
- 'tools.ozone.report.defs#reasonSexualOther',
20035
- 'tools.ozone.report.defs#reasonChildSafetyCSAM',
20036
- 'tools.ozone.report.defs#reasonChildSafetyGroom',
20037
- 'tools.ozone.report.defs#reasonChildSafetyPrivacy',
20038
- 'tools.ozone.report.defs#reasonChildSafetyHarassment',
20039
- 'tools.ozone.report.defs#reasonChildSafetyOther',
20040
- 'tools.ozone.report.defs#reasonHarassmentTroll',
20041
- 'tools.ozone.report.defs#reasonHarassmentTargeted',
20042
- 'tools.ozone.report.defs#reasonHarassmentHateSpeech',
20043
- 'tools.ozone.report.defs#reasonHarassmentDoxxing',
20044
- 'tools.ozone.report.defs#reasonHarassmentOther',
20045
- 'tools.ozone.report.defs#reasonMisleadingBot',
20046
- 'tools.ozone.report.defs#reasonMisleadingImpersonation',
20047
- 'tools.ozone.report.defs#reasonMisleadingSpam',
20048
- 'tools.ozone.report.defs#reasonMisleadingScam',
20049
- 'tools.ozone.report.defs#reasonMisleadingElections',
20050
- 'tools.ozone.report.defs#reasonMisleadingOther',
20051
- 'tools.ozone.report.defs#reasonRuleSiteSecurity',
20052
- 'tools.ozone.report.defs#reasonRuleProhibitedSales',
20053
- 'tools.ozone.report.defs#reasonRuleBanEvasion',
20054
- 'tools.ozone.report.defs#reasonRuleOther',
20055
- 'tools.ozone.report.defs#reasonSelfHarmContent',
20056
- 'tools.ozone.report.defs#reasonSelfHarmED',
20057
- 'tools.ozone.report.defs#reasonSelfHarmStunts',
20058
- 'tools.ozone.report.defs#reasonSelfHarmSubstances',
20059
- 'tools.ozone.report.defs#reasonSelfHarmOther',
20168
+ main: {
20169
+ type: 'procedure',
20170
+ description: 'Assign a user to a queue.',
20171
+ input: {
20172
+ encoding: 'application/json',
20173
+ schema: {
20174
+ type: 'object',
20175
+ required: ['queueId', 'did'],
20176
+ properties: {
20177
+ queueId: {
20178
+ type: 'integer',
20179
+ description: 'The ID of the queue to assign the user to.',
20180
+ },
20181
+ did: {
20182
+ type: 'string',
20183
+ description: 'DID to be assigned.',
20184
+ },
20185
+ },
20186
+ },
20187
+ },
20188
+ output: {
20189
+ encoding: 'application/json',
20190
+ schema: {
20191
+ type: 'ref',
20192
+ ref: 'lex:tools.ozone.queue.defs#assignmentView',
20193
+ },
20194
+ },
20195
+ errors: [
20196
+ {
20197
+ name: 'InvalidAssignment',
20198
+ description: 'The specified queue does not exist or is not enabled.',
20199
+ },
20060
20200
  ],
20061
20201
  },
20062
- reasonAppeal: {
20063
- type: 'token',
20064
- description: 'Appeal a previously taken moderation action',
20065
- },
20066
- reasonOther: {
20067
- type: 'token',
20068
- description: 'An issue not included in these options',
20202
+ },
20203
+ },
20204
+ ToolsOzoneQueueCreateQueue: {
20205
+ lexicon: 1,
20206
+ id: 'tools.ozone.queue.createQueue',
20207
+ defs: {
20208
+ main: {
20209
+ type: 'procedure',
20210
+ description: 'Create a new moderation queue. Will fail if the queue configuration conflicts with an existing queue.',
20211
+ input: {
20212
+ encoding: 'application/json',
20213
+ schema: {
20214
+ type: 'object',
20215
+ required: ['name', 'subjectTypes', 'reportTypes'],
20216
+ properties: {
20217
+ name: {
20218
+ type: 'string',
20219
+ description: 'Display name for the queue (must be unique)',
20220
+ },
20221
+ subjectTypes: {
20222
+ type: 'array',
20223
+ minLength: 1,
20224
+ items: {
20225
+ type: 'string',
20226
+ knownValues: ['account', 'record', 'message'],
20227
+ },
20228
+ description: 'Subject types this queue accepts',
20229
+ },
20230
+ collection: {
20231
+ type: 'string',
20232
+ format: 'nsid',
20233
+ description: "Collection name for record subjects. Required if subjectTypes includes 'record'.",
20234
+ },
20235
+ reportTypes: {
20236
+ type: 'array',
20237
+ items: {
20238
+ type: 'string',
20239
+ },
20240
+ minLength: 1,
20241
+ maxLength: 25,
20242
+ description: 'Report reason types (fully qualified NSIDs)',
20243
+ },
20244
+ description: {
20245
+ type: 'string',
20246
+ description: 'Optional description of the queue',
20247
+ },
20248
+ },
20249
+ },
20250
+ },
20251
+ output: {
20252
+ encoding: 'application/json',
20253
+ schema: {
20254
+ type: 'object',
20255
+ required: ['queue'],
20256
+ properties: {
20257
+ queue: {
20258
+ type: 'ref',
20259
+ ref: 'lex:tools.ozone.queue.defs#queueView',
20260
+ },
20261
+ },
20262
+ },
20263
+ },
20264
+ errors: [
20265
+ {
20266
+ name: 'ConflictingQueue',
20267
+ description: 'The queue configuration conflicts with an existing queue',
20268
+ },
20269
+ ],
20069
20270
  },
20070
- reasonViolenceAnimal: {
20071
- type: 'token',
20072
- description: 'Animal welfare violations',
20073
- },
20074
- reasonViolenceThreats: {
20075
- type: 'token',
20076
- description: 'Threats or incitement',
20271
+ },
20272
+ },
20273
+ ToolsOzoneQueueDefs: {
20274
+ lexicon: 1,
20275
+ id: 'tools.ozone.queue.defs',
20276
+ defs: {
20277
+ queueView: {
20278
+ type: 'object',
20279
+ required: [
20280
+ 'id',
20281
+ 'name',
20282
+ 'subjectTypes',
20283
+ 'reportTypes',
20284
+ 'createdBy',
20285
+ 'createdAt',
20286
+ 'updatedAt',
20287
+ 'enabled',
20288
+ 'stats',
20289
+ ],
20290
+ properties: {
20291
+ id: {
20292
+ type: 'integer',
20293
+ description: 'Queue ID',
20294
+ },
20295
+ name: {
20296
+ type: 'string',
20297
+ description: 'Display name of the queue',
20298
+ },
20299
+ subjectTypes: {
20300
+ type: 'array',
20301
+ minLength: 1,
20302
+ items: {
20303
+ type: 'string',
20304
+ knownValues: ['account', 'record', 'message'],
20305
+ },
20306
+ description: 'Subject types this queue accepts.',
20307
+ },
20308
+ collection: {
20309
+ type: 'string',
20310
+ format: 'nsid',
20311
+ description: "Collection name for record subjects (e.g., 'app.bsky.feed.post')",
20312
+ },
20313
+ reportTypes: {
20314
+ type: 'array',
20315
+ items: {
20316
+ type: 'string',
20317
+ },
20318
+ minLength: 1,
20319
+ description: 'Report reason types this queue accepts (fully qualified NSIDs)',
20320
+ },
20321
+ description: {
20322
+ type: 'string',
20323
+ description: 'Optional description of the queue',
20324
+ },
20325
+ createdBy: {
20326
+ type: 'string',
20327
+ format: 'did',
20328
+ description: 'DID of moderator who created this queue',
20329
+ },
20330
+ createdAt: {
20331
+ type: 'string',
20332
+ format: 'datetime',
20333
+ },
20334
+ updatedAt: {
20335
+ type: 'string',
20336
+ format: 'datetime',
20337
+ },
20338
+ enabled: {
20339
+ type: 'boolean',
20340
+ description: 'Whether this queue is currently active',
20341
+ },
20342
+ deletedAt: {
20343
+ type: 'string',
20344
+ format: 'datetime',
20345
+ description: 'When the queue was deleted, if applicable',
20346
+ },
20347
+ stats: {
20348
+ type: 'ref',
20349
+ ref: 'lex:tools.ozone.queue.defs#queueStats',
20350
+ description: 'Statistics about this queue',
20351
+ },
20352
+ },
20077
20353
  },
20078
- reasonViolenceGraphicContent: {
20079
- type: 'token',
20080
- description: 'Graphic violent content',
20354
+ queueStats: {
20355
+ type: 'object',
20356
+ required: [],
20357
+ properties: {
20358
+ pendingCount: {
20359
+ type: 'integer',
20360
+ description: "Number of reports in 'open' status",
20361
+ },
20362
+ actionedCount: {
20363
+ type: 'integer',
20364
+ description: "Number of reports in 'closed' status",
20365
+ },
20366
+ escalatedCount: {
20367
+ type: 'integer',
20368
+ description: "Number of reports in 'escalated' status",
20369
+ },
20370
+ inboundCount: {
20371
+ type: 'integer',
20372
+ description: 'Reports received in this queue in the last 24 hours.',
20373
+ },
20374
+ actionRate: {
20375
+ type: 'integer',
20376
+ description: 'Percentage of reports actioned (actionedCount / inboundCount * 100), rounded to nearest integer. Absent when inboundCount is 0.',
20377
+ },
20378
+ avgHandlingTimeSec: {
20379
+ type: 'integer',
20380
+ description: 'Average time in seconds from report creation to close, for reports closed in this period.',
20381
+ },
20382
+ lastUpdated: {
20383
+ type: 'string',
20384
+ format: 'datetime',
20385
+ description: 'When these statistics were last computed',
20386
+ },
20387
+ },
20081
20388
  },
20082
- reasonViolenceGlorification: {
20083
- type: 'token',
20084
- description: 'Glorification of violence',
20389
+ assignmentView: {
20390
+ type: 'object',
20391
+ required: ['id', 'did', 'queue', 'startAt'],
20392
+ properties: {
20393
+ id: {
20394
+ type: 'integer',
20395
+ },
20396
+ did: {
20397
+ type: 'string',
20398
+ format: 'did',
20399
+ },
20400
+ moderator: {
20401
+ type: 'ref',
20402
+ ref: 'lex:tools.ozone.team.defs#member',
20403
+ description: 'The moderator assigned to this queue',
20404
+ },
20405
+ queue: {
20406
+ type: 'ref',
20407
+ ref: 'lex:tools.ozone.queue.defs#queueView',
20408
+ },
20409
+ startAt: {
20410
+ type: 'string',
20411
+ format: 'datetime',
20412
+ },
20413
+ endAt: {
20414
+ type: 'string',
20415
+ format: 'datetime',
20416
+ },
20417
+ },
20085
20418
  },
20086
- reasonViolenceExtremistContent: {
20087
- type: 'token',
20088
- description: "Extremist content. These reports will be sent only be sent to the application's Moderation Authority.",
20419
+ },
20420
+ },
20421
+ ToolsOzoneQueueDeleteQueue: {
20422
+ lexicon: 1,
20423
+ id: 'tools.ozone.queue.deleteQueue',
20424
+ defs: {
20425
+ main: {
20426
+ type: 'procedure',
20427
+ description: 'Delete a moderation queue. Optionally migrate reports to another queue.',
20428
+ input: {
20429
+ encoding: 'application/json',
20430
+ schema: {
20431
+ type: 'object',
20432
+ required: ['queueId'],
20433
+ properties: {
20434
+ queueId: {
20435
+ type: 'integer',
20436
+ description: 'ID of the queue to delete',
20437
+ },
20438
+ migrateToQueueId: {
20439
+ type: 'integer',
20440
+ description: 'Optional: migrate all reports to this queue. If not specified, reports will be set to unassigned (-1).',
20441
+ },
20442
+ },
20443
+ },
20444
+ },
20445
+ output: {
20446
+ encoding: 'application/json',
20447
+ schema: {
20448
+ type: 'object',
20449
+ required: ['deleted'],
20450
+ properties: {
20451
+ deleted: {
20452
+ type: 'boolean',
20453
+ },
20454
+ reportsMigrated: {
20455
+ type: 'integer',
20456
+ description: 'Number of reports that were migrated (if migration occurred)',
20457
+ },
20458
+ },
20459
+ },
20460
+ },
20089
20461
  },
20090
- reasonViolenceTrafficking: {
20091
- type: 'token',
20092
- description: 'Human trafficking',
20462
+ },
20463
+ },
20464
+ ToolsOzoneQueueGetAssignments: {
20465
+ lexicon: 1,
20466
+ id: 'tools.ozone.queue.getAssignments',
20467
+ defs: {
20468
+ main: {
20469
+ type: 'query',
20470
+ description: 'Get moderator assignments, optionally filtered by active status, queue, or moderator.',
20471
+ parameters: {
20472
+ type: 'params',
20473
+ properties: {
20474
+ onlyActive: {
20475
+ type: 'boolean',
20476
+ default: true,
20477
+ description: 'When true, only returns active assignments.',
20478
+ },
20479
+ queueIds: {
20480
+ type: 'array',
20481
+ items: {
20482
+ type: 'integer',
20483
+ },
20484
+ description: 'If specified, returns assignments for these queues only.',
20485
+ },
20486
+ dids: {
20487
+ type: 'array',
20488
+ items: {
20489
+ type: 'string',
20490
+ format: 'did',
20491
+ },
20492
+ description: 'If specified, returns assignments for these moderators only.',
20493
+ },
20494
+ limit: {
20495
+ type: 'integer',
20496
+ minimum: 1,
20497
+ maximum: 100,
20498
+ default: 50,
20499
+ },
20500
+ cursor: {
20501
+ type: 'string',
20502
+ },
20503
+ },
20504
+ },
20505
+ output: {
20506
+ encoding: 'application/json',
20507
+ schema: {
20508
+ type: 'object',
20509
+ required: ['assignments'],
20510
+ properties: {
20511
+ cursor: {
20512
+ type: 'string',
20513
+ },
20514
+ assignments: {
20515
+ type: 'array',
20516
+ items: {
20517
+ type: 'ref',
20518
+ ref: 'lex:tools.ozone.queue.defs#assignmentView',
20519
+ },
20520
+ },
20521
+ },
20522
+ },
20523
+ },
20093
20524
  },
20094
- reasonViolenceOther: {
20095
- type: 'token',
20096
- description: 'Other violent content',
20525
+ },
20526
+ },
20527
+ ToolsOzoneQueueListQueues: {
20528
+ lexicon: 1,
20529
+ id: 'tools.ozone.queue.listQueues',
20530
+ defs: {
20531
+ main: {
20532
+ type: 'query',
20533
+ description: 'List all configured moderation queues with statistics.',
20534
+ parameters: {
20535
+ type: 'params',
20536
+ properties: {
20537
+ enabled: {
20538
+ type: 'boolean',
20539
+ description: 'Filter by enabled status. If not specified, returns all queues.',
20540
+ },
20541
+ subjectType: {
20542
+ type: 'string',
20543
+ description: "Filter queues that handle this subject type ('account' or 'record').",
20544
+ },
20545
+ collection: {
20546
+ type: 'string',
20547
+ description: "Filter queues by collection name (e.g. 'app.bsky.feed.post').",
20548
+ },
20549
+ reportTypes: {
20550
+ type: 'array',
20551
+ items: {
20552
+ type: 'string',
20553
+ },
20554
+ maxLength: 10,
20555
+ description: 'Filter queues that handle any of these report reason types.',
20556
+ },
20557
+ limit: {
20558
+ type: 'integer',
20559
+ minimum: 1,
20560
+ maximum: 100,
20561
+ default: 50,
20562
+ },
20563
+ cursor: {
20564
+ type: 'string',
20565
+ },
20566
+ },
20567
+ },
20568
+ output: {
20569
+ encoding: 'application/json',
20570
+ schema: {
20571
+ type: 'object',
20572
+ required: ['queues'],
20573
+ properties: {
20574
+ cursor: {
20575
+ type: 'string',
20576
+ },
20577
+ queues: {
20578
+ type: 'array',
20579
+ items: {
20580
+ type: 'ref',
20581
+ ref: 'lex:tools.ozone.queue.defs#queueView',
20582
+ },
20583
+ },
20584
+ },
20585
+ },
20586
+ },
20097
20587
  },
20098
- reasonSexualAbuseContent: {
20099
- type: 'token',
20100
- description: 'Adult sexual abuse content',
20588
+ },
20589
+ },
20590
+ ToolsOzoneQueueRouteReports: {
20591
+ lexicon: 1,
20592
+ id: 'tools.ozone.queue.routeReports',
20593
+ defs: {
20594
+ main: {
20595
+ type: 'procedure',
20596
+ description: 'Route reports within an ID range to matching queues based.',
20597
+ input: {
20598
+ encoding: 'application/json',
20599
+ schema: {
20600
+ type: 'object',
20601
+ required: ['startReportId', 'endReportId'],
20602
+ properties: {
20603
+ startReportId: {
20604
+ type: 'integer',
20605
+ description: 'Start of report ID range (inclusive).',
20606
+ },
20607
+ endReportId: {
20608
+ type: 'integer',
20609
+ description: 'End of report ID range (inclusive). Difference between start and end must be less than 5,000.',
20610
+ },
20611
+ },
20612
+ },
20613
+ },
20614
+ output: {
20615
+ encoding: 'application/json',
20616
+ schema: {
20617
+ type: 'object',
20618
+ required: ['assigned', 'unmatched'],
20619
+ properties: {
20620
+ assigned: {
20621
+ type: 'integer',
20622
+ description: 'The number of reports assigned to a queue.',
20623
+ },
20624
+ unmatched: {
20625
+ type: 'integer',
20626
+ description: 'The number of reports with no matching queue.',
20627
+ },
20628
+ },
20629
+ },
20630
+ },
20631
+ errors: [
20632
+ {
20633
+ name: 'OutOfRange',
20634
+ description: 'The request is invalid, such as missing required fields or invalid field values.',
20635
+ },
20636
+ ],
20101
20637
  },
20102
- reasonSexualNCII: {
20103
- type: 'token',
20104
- description: 'Non-consensual intimate imagery',
20638
+ },
20639
+ },
20640
+ ToolsOzoneQueueUnassignModerator: {
20641
+ lexicon: 1,
20642
+ id: 'tools.ozone.queue.unassignModerator',
20643
+ defs: {
20644
+ main: {
20645
+ type: 'procedure',
20646
+ description: "Remove a user's assignment from a queue.",
20647
+ input: {
20648
+ encoding: 'application/json',
20649
+ schema: {
20650
+ type: 'object',
20651
+ required: ['queueId', 'did'],
20652
+ properties: {
20653
+ queueId: {
20654
+ type: 'integer',
20655
+ description: 'The ID of the queue to unassign the user from.',
20656
+ },
20657
+ did: {
20658
+ type: 'string',
20659
+ format: 'did',
20660
+ description: 'DID to be unassigned.',
20661
+ },
20662
+ },
20663
+ },
20664
+ },
20665
+ errors: [
20666
+ {
20667
+ name: 'InvalidAssignment',
20668
+ description: 'No active assignment exists for the given queue and user.',
20669
+ },
20670
+ ],
20105
20671
  },
20106
- reasonSexualDeepfake: {
20107
- type: 'token',
20108
- description: 'Deepfake adult content',
20672
+ },
20673
+ },
20674
+ ToolsOzoneQueueUpdateQueue: {
20675
+ lexicon: 1,
20676
+ id: 'tools.ozone.queue.updateQueue',
20677
+ defs: {
20678
+ main: {
20679
+ type: 'procedure',
20680
+ description: 'Update queue properties. Currently only supports updating the name and enabled status to prevent configuration conflicts.',
20681
+ input: {
20682
+ encoding: 'application/json',
20683
+ schema: {
20684
+ type: 'object',
20685
+ required: ['queueId'],
20686
+ properties: {
20687
+ queueId: {
20688
+ type: 'integer',
20689
+ description: 'ID of the queue to update',
20690
+ },
20691
+ name: {
20692
+ type: 'string',
20693
+ description: 'New display name for the queue',
20694
+ },
20695
+ enabled: {
20696
+ type: 'boolean',
20697
+ description: 'Enable or disable the queue',
20698
+ },
20699
+ description: {
20700
+ type: 'string',
20701
+ description: 'Optional description of the queue',
20702
+ },
20703
+ },
20704
+ },
20705
+ },
20706
+ output: {
20707
+ encoding: 'application/json',
20708
+ schema: {
20709
+ type: 'object',
20710
+ required: ['queue'],
20711
+ properties: {
20712
+ queue: {
20713
+ type: 'ref',
20714
+ ref: 'lex:tools.ozone.queue.defs#queueView',
20715
+ },
20716
+ },
20717
+ },
20718
+ },
20109
20719
  },
20110
- reasonSexualAnimal: {
20111
- type: 'token',
20112
- description: 'Animal sexual abuse',
20720
+ },
20721
+ },
20722
+ ToolsOzoneReportAssignModerator: {
20723
+ lexicon: 1,
20724
+ id: 'tools.ozone.report.assignModerator',
20725
+ defs: {
20726
+ main: {
20727
+ type: 'procedure',
20728
+ description: 'Assign a report to a user. Defaults to the caller. Admins may assign to any moderator.',
20729
+ input: {
20730
+ encoding: 'application/json',
20731
+ schema: {
20732
+ type: 'object',
20733
+ required: ['reportId'],
20734
+ properties: {
20735
+ reportId: {
20736
+ type: 'integer',
20737
+ description: 'The ID of the report to assign.',
20738
+ },
20739
+ queueId: {
20740
+ type: 'integer',
20741
+ description: '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.',
20742
+ },
20743
+ did: {
20744
+ type: 'string',
20745
+ format: 'did',
20746
+ description: "DID to be assigned. Defaults to the caller's DID. Admins may assign to any moderator.",
20747
+ },
20748
+ isPermanent: {
20749
+ type: 'boolean',
20750
+ description: 'When true, the assignment has no expiry (endAt is null). Throws AlreadyAssigned if another user already has a permanent assignment on this report.',
20751
+ },
20752
+ },
20753
+ },
20754
+ },
20755
+ output: {
20756
+ encoding: 'application/json',
20757
+ schema: {
20758
+ type: 'ref',
20759
+ ref: 'lex:tools.ozone.report.defs#assignmentView',
20760
+ },
20761
+ },
20762
+ errors: [
20763
+ {
20764
+ name: 'AlreadyAssigned',
20765
+ description: 'The report is already assigned to another user.',
20766
+ },
20767
+ {
20768
+ name: 'InvalidAssignment',
20769
+ description: 'The report ID or queue ID is invalid.',
20770
+ },
20771
+ ],
20113
20772
  },
20114
- reasonSexualUnlabeled: {
20115
- type: 'token',
20116
- description: 'Unlabelled adult content',
20773
+ },
20774
+ },
20775
+ ToolsOzoneReportCreateActivity: {
20776
+ lexicon: 1,
20777
+ id: 'tools.ozone.report.createActivity',
20778
+ defs: {
20779
+ main: {
20780
+ type: 'procedure',
20781
+ description: 'Register an activity on a report. For state-change activity types, validates the transition and updates report.status atomically.',
20782
+ input: {
20783
+ encoding: 'application/json',
20784
+ schema: {
20785
+ type: 'object',
20786
+ required: ['reportId', 'activity'],
20787
+ properties: {
20788
+ reportId: {
20789
+ type: 'integer',
20790
+ description: 'ID of the report to record activity on',
20791
+ },
20792
+ activity: {
20793
+ type: 'union',
20794
+ refs: [
20795
+ 'lex:tools.ozone.report.defs#queueActivity',
20796
+ 'lex:tools.ozone.report.defs#assignmentActivity',
20797
+ 'lex:tools.ozone.report.defs#escalationActivity',
20798
+ 'lex:tools.ozone.report.defs#closeActivity',
20799
+ 'lex:tools.ozone.report.defs#reopenActivity',
20800
+ 'lex:tools.ozone.report.defs#noteActivity',
20801
+ ],
20802
+ description: 'The type of activity to record.',
20803
+ },
20804
+ internalNote: {
20805
+ type: 'string',
20806
+ description: 'Optional moderator-only note. Not visible to reporters.',
20807
+ },
20808
+ publicNote: {
20809
+ type: 'string',
20810
+ description: 'Optional public-facing note, potentially visible to the reporter.',
20811
+ },
20812
+ isAutomated: {
20813
+ type: 'boolean',
20814
+ description: 'Set true when this activity is triggered by an automated process. Defaults to false.',
20815
+ default: false,
20816
+ },
20817
+ },
20818
+ },
20819
+ },
20820
+ output: {
20821
+ encoding: 'application/json',
20822
+ schema: {
20823
+ type: 'object',
20824
+ required: ['activity'],
20825
+ properties: {
20826
+ activity: {
20827
+ type: 'ref',
20828
+ ref: 'lex:tools.ozone.report.defs#reportActivityView',
20829
+ },
20830
+ },
20831
+ },
20832
+ },
20833
+ errors: [
20834
+ {
20835
+ name: 'ReportNotFound',
20836
+ description: 'No report exists with the given reportId',
20837
+ },
20838
+ {
20839
+ name: 'InvalidStateTransition',
20840
+ description: "The requested state transition is not permitted from the report's current status",
20841
+ },
20842
+ {
20843
+ name: 'AlreadyInTargetState',
20844
+ description: 'The report is already in the status implied by this activity type',
20845
+ },
20846
+ ],
20117
20847
  },
20118
- reasonSexualOther: {
20119
- type: 'token',
20120
- description: 'Other sexual violence content',
20848
+ },
20849
+ },
20850
+ ToolsOzoneReportDefs: {
20851
+ lexicon: 1,
20852
+ id: 'tools.ozone.report.defs',
20853
+ defs: {
20854
+ reasonType: {
20855
+ type: 'string',
20856
+ knownValues: [
20857
+ 'tools.ozone.report.defs#reasonAppeal',
20858
+ 'tools.ozone.report.defs#reasonOther',
20859
+ 'tools.ozone.report.defs#reasonViolenceAnimal',
20860
+ 'tools.ozone.report.defs#reasonViolenceThreats',
20861
+ 'tools.ozone.report.defs#reasonViolenceGraphicContent',
20862
+ 'tools.ozone.report.defs#reasonViolenceGlorification',
20863
+ 'tools.ozone.report.defs#reasonViolenceExtremistContent',
20864
+ 'tools.ozone.report.defs#reasonViolenceTrafficking',
20865
+ 'tools.ozone.report.defs#reasonViolenceOther',
20866
+ 'tools.ozone.report.defs#reasonSexualAbuseContent',
20867
+ 'tools.ozone.report.defs#reasonSexualNCII',
20868
+ 'tools.ozone.report.defs#reasonSexualDeepfake',
20869
+ 'tools.ozone.report.defs#reasonSexualAnimal',
20870
+ 'tools.ozone.report.defs#reasonSexualUnlabeled',
20871
+ 'tools.ozone.report.defs#reasonSexualOther',
20872
+ 'tools.ozone.report.defs#reasonChildSafetyCSAM',
20873
+ 'tools.ozone.report.defs#reasonChildSafetyGroom',
20874
+ 'tools.ozone.report.defs#reasonChildSafetyPrivacy',
20875
+ 'tools.ozone.report.defs#reasonChildSafetyHarassment',
20876
+ 'tools.ozone.report.defs#reasonChildSafetyOther',
20877
+ 'tools.ozone.report.defs#reasonHarassmentTroll',
20878
+ 'tools.ozone.report.defs#reasonHarassmentTargeted',
20879
+ 'tools.ozone.report.defs#reasonHarassmentHateSpeech',
20880
+ 'tools.ozone.report.defs#reasonHarassmentDoxxing',
20881
+ 'tools.ozone.report.defs#reasonHarassmentOther',
20882
+ 'tools.ozone.report.defs#reasonMisleadingBot',
20883
+ 'tools.ozone.report.defs#reasonMisleadingImpersonation',
20884
+ 'tools.ozone.report.defs#reasonMisleadingSpam',
20885
+ 'tools.ozone.report.defs#reasonMisleadingScam',
20886
+ 'tools.ozone.report.defs#reasonMisleadingElections',
20887
+ 'tools.ozone.report.defs#reasonMisleadingOther',
20888
+ 'tools.ozone.report.defs#reasonRuleSiteSecurity',
20889
+ 'tools.ozone.report.defs#reasonRuleProhibitedSales',
20890
+ 'tools.ozone.report.defs#reasonRuleBanEvasion',
20891
+ 'tools.ozone.report.defs#reasonRuleOther',
20892
+ 'tools.ozone.report.defs#reasonSelfHarmContent',
20893
+ 'tools.ozone.report.defs#reasonSelfHarmED',
20894
+ 'tools.ozone.report.defs#reasonSelfHarmStunts',
20895
+ 'tools.ozone.report.defs#reasonSelfHarmSubstances',
20896
+ 'tools.ozone.report.defs#reasonSelfHarmOther',
20897
+ ],
20121
20898
  },
20122
- reasonChildSafetyCSAM: {
20899
+ reasonAppeal: {
20123
20900
  type: 'token',
20124
- description: "Child sexual abuse material (CSAM). These reports will be sent only be sent to the application's Moderation Authority.",
20901
+ description: 'Appeal a previously taken moderation action',
20125
20902
  },
20126
- reasonChildSafetyGroom: {
20903
+ reasonOther: {
20127
20904
  type: 'token',
20128
- description: "Grooming or predatory behavior. These reports will be sent only be sent to the application's Moderation Authority.",
20905
+ description: 'An issue not included in these options',
20129
20906
  },
20130
- reasonChildSafetyPrivacy: {
20907
+ reasonViolenceAnimal: {
20131
20908
  type: 'token',
20132
- description: 'Privacy violation involving a minor',
20909
+ description: 'Animal welfare violations',
20133
20910
  },
20134
- reasonChildSafetyHarassment: {
20911
+ reasonViolenceThreats: {
20135
20912
  type: 'token',
20136
- description: 'Harassment or bullying of minors',
20913
+ description: 'Threats or incitement',
20137
20914
  },
20138
- reasonChildSafetyOther: {
20915
+ reasonViolenceGraphicContent: {
20916
+ type: 'token',
20917
+ description: 'Graphic violent content',
20918
+ },
20919
+ reasonViolenceGlorification: {
20920
+ type: 'token',
20921
+ description: 'Glorification of violence',
20922
+ },
20923
+ reasonViolenceExtremistContent: {
20924
+ type: 'token',
20925
+ description: "Extremist content. These reports will be sent only be sent to the application's Moderation Authority.",
20926
+ },
20927
+ reasonViolenceTrafficking: {
20928
+ type: 'token',
20929
+ description: 'Human trafficking',
20930
+ },
20931
+ reasonViolenceOther: {
20932
+ type: 'token',
20933
+ description: 'Other violent content',
20934
+ },
20935
+ reasonSexualAbuseContent: {
20936
+ type: 'token',
20937
+ description: 'Adult sexual abuse content',
20938
+ },
20939
+ reasonSexualNCII: {
20940
+ type: 'token',
20941
+ description: 'Non-consensual intimate imagery',
20942
+ },
20943
+ reasonSexualDeepfake: {
20944
+ type: 'token',
20945
+ description: 'Deepfake adult content',
20946
+ },
20947
+ reasonSexualAnimal: {
20948
+ type: 'token',
20949
+ description: 'Animal sexual abuse',
20950
+ },
20951
+ reasonSexualUnlabeled: {
20952
+ type: 'token',
20953
+ description: 'Unlabelled adult content',
20954
+ },
20955
+ reasonSexualOther: {
20956
+ type: 'token',
20957
+ description: 'Other sexual violence content',
20958
+ },
20959
+ reasonChildSafetyCSAM: {
20960
+ type: 'token',
20961
+ description: "Child sexual abuse material (CSAM). These reports will be sent only be sent to the application's Moderation Authority.",
20962
+ },
20963
+ reasonChildSafetyGroom: {
20964
+ type: 'token',
20965
+ description: "Grooming or predatory behavior. These reports will be sent only be sent to the application's Moderation Authority.",
20966
+ },
20967
+ reasonChildSafetyPrivacy: {
20968
+ type: 'token',
20969
+ description: 'Privacy violation involving a minor',
20970
+ },
20971
+ reasonChildSafetyHarassment: {
20972
+ type: 'token',
20973
+ description: 'Harassment or bullying of minors',
20974
+ },
20975
+ reasonChildSafetyOther: {
20139
20976
  type: 'token',
20140
20977
  description: "Other child safety. These reports will be sent only be sent to the application's Moderation Authority.",
20141
20978
  },
@@ -20219,6 +21056,928 @@ exports.schemaDict = {
20219
21056
  type: 'token',
20220
21057
  description: 'Other dangerous content',
20221
21058
  },
21059
+ reportAssignment: {
21060
+ type: 'object',
21061
+ description: 'Information about the moderator currently assigned to a report.',
21062
+ required: ['did', 'assignedAt'],
21063
+ properties: {
21064
+ did: {
21065
+ type: 'string',
21066
+ format: 'did',
21067
+ description: 'DID of the assigned moderator',
21068
+ },
21069
+ moderator: {
21070
+ type: 'ref',
21071
+ ref: 'lex:tools.ozone.team.defs#member',
21072
+ description: 'Full member record of the assigned moderator',
21073
+ },
21074
+ assignedAt: {
21075
+ type: 'string',
21076
+ format: 'datetime',
21077
+ description: 'When the report was assigned',
21078
+ },
21079
+ },
21080
+ },
21081
+ reportView: {
21082
+ type: 'object',
21083
+ required: [
21084
+ 'id',
21085
+ 'eventId',
21086
+ 'status',
21087
+ 'subject',
21088
+ 'reportType',
21089
+ 'reportedBy',
21090
+ 'reporter',
21091
+ 'createdAt',
21092
+ ],
21093
+ properties: {
21094
+ id: {
21095
+ type: 'integer',
21096
+ description: 'Report ID',
21097
+ },
21098
+ eventId: {
21099
+ type: 'integer',
21100
+ description: 'ID of the moderation event that created this report',
21101
+ },
21102
+ status: {
21103
+ type: 'string',
21104
+ knownValues: ['open', 'closed', 'escalated', 'queued', 'assigned'],
21105
+ description: 'Current status of the report',
21106
+ },
21107
+ subject: {
21108
+ type: 'ref',
21109
+ ref: 'lex:tools.ozone.moderation.defs#subjectView',
21110
+ description: 'The subject that was reported with full details',
21111
+ },
21112
+ reportType: {
21113
+ type: 'ref',
21114
+ ref: 'lex:com.atproto.moderation.defs#reasonType',
21115
+ description: 'Type of report',
21116
+ },
21117
+ reportedBy: {
21118
+ type: 'string',
21119
+ format: 'did',
21120
+ description: 'DID of the user who made the report',
21121
+ },
21122
+ reporter: {
21123
+ type: 'ref',
21124
+ ref: 'lex:tools.ozone.moderation.defs#subjectView',
21125
+ description: 'Full subject view of the reporter account',
21126
+ },
21127
+ comment: {
21128
+ type: 'string',
21129
+ description: 'Comment provided by the reporter',
21130
+ },
21131
+ createdAt: {
21132
+ type: 'string',
21133
+ format: 'datetime',
21134
+ description: 'When the report was created',
21135
+ },
21136
+ updatedAt: {
21137
+ type: 'string',
21138
+ format: 'datetime',
21139
+ description: 'When the report was last updated',
21140
+ },
21141
+ queuedAt: {
21142
+ type: 'string',
21143
+ format: 'datetime',
21144
+ description: 'When the report was assigned to its current queue',
21145
+ },
21146
+ actionEventIds: {
21147
+ type: 'array',
21148
+ items: {
21149
+ type: 'integer',
21150
+ },
21151
+ description: 'Array of moderation event IDs representing actions taken on this report (sorted DESC, most recent first)',
21152
+ },
21153
+ actions: {
21154
+ type: 'array',
21155
+ items: {
21156
+ type: 'ref',
21157
+ ref: 'lex:tools.ozone.moderation.defs#modEventView',
21158
+ },
21159
+ description: 'Optional: expanded action events',
21160
+ },
21161
+ actionNote: {
21162
+ type: 'string',
21163
+ description: 'Note sent to reporter when report was actioned',
21164
+ },
21165
+ subjectStatus: {
21166
+ type: 'ref',
21167
+ ref: 'lex:tools.ozone.moderation.defs#subjectStatusView',
21168
+ description: 'Current status of the reported subject',
21169
+ },
21170
+ relatedReportCount: {
21171
+ type: 'integer',
21172
+ description: 'Number of other pending reports on the same subject',
21173
+ },
21174
+ assignment: {
21175
+ type: 'ref',
21176
+ ref: 'lex:tools.ozone.report.defs#reportAssignment',
21177
+ description: 'Information about moderator currently assigned to this report (if any)',
21178
+ },
21179
+ queue: {
21180
+ type: 'ref',
21181
+ ref: 'lex:tools.ozone.queue.defs#queueView',
21182
+ description: 'The queue this report is assigned to (if any)',
21183
+ },
21184
+ isMuted: {
21185
+ type: 'boolean',
21186
+ description: '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.',
21187
+ },
21188
+ },
21189
+ },
21190
+ queueActivity: {
21191
+ type: 'object',
21192
+ description: 'Activity recording a report being routed to a queue.',
21193
+ properties: {
21194
+ previousStatus: {
21195
+ type: 'string',
21196
+ knownValues: ['open', 'closed', 'escalated', 'queued', 'assigned'],
21197
+ description: "The report's status before this activity. Populated automatically from the report row; not required in input.",
21198
+ },
21199
+ },
21200
+ },
21201
+ assignmentActivity: {
21202
+ type: 'object',
21203
+ description: 'Activity recording a moderator being assigned to a report.',
21204
+ properties: {
21205
+ previousStatus: {
21206
+ type: 'string',
21207
+ knownValues: ['open', 'closed', 'escalated', 'queued', 'assigned'],
21208
+ description: "The report's status before this activity. Populated automatically from the report row; not required in input.",
21209
+ },
21210
+ },
21211
+ },
21212
+ escalationActivity: {
21213
+ type: 'object',
21214
+ description: 'Activity recording a report being escalated.',
21215
+ properties: {
21216
+ previousStatus: {
21217
+ type: 'string',
21218
+ knownValues: ['open', 'closed', 'escalated', 'queued', 'assigned'],
21219
+ description: "The report's status before this activity. Populated automatically from the report row; not required in input.",
21220
+ },
21221
+ },
21222
+ },
21223
+ closeActivity: {
21224
+ type: 'object',
21225
+ description: 'Activity recording a report being closed.',
21226
+ properties: {
21227
+ previousStatus: {
21228
+ type: 'string',
21229
+ knownValues: ['open', 'closed', 'escalated', 'queued', 'assigned'],
21230
+ description: "The report's status before this activity. Populated automatically from the report row; not required in input.",
21231
+ },
21232
+ },
21233
+ },
21234
+ reopenActivity: {
21235
+ type: 'object',
21236
+ description: "Activity recording a closed report being reopened. Only valid when the report is in 'closed' status.",
21237
+ properties: {
21238
+ previousStatus: {
21239
+ type: 'string',
21240
+ knownValues: ['open', 'closed', 'escalated', 'queued', 'assigned'],
21241
+ description: "The report's status before this activity. Populated automatically from the report row; not required in input.",
21242
+ },
21243
+ },
21244
+ },
21245
+ noteActivity: {
21246
+ type: 'object',
21247
+ description: 'Activity recording a note on a report. Use internalNote for moderator-only notes or publicNote for reporter-visible notes (or both).',
21248
+ properties: {},
21249
+ },
21250
+ reportActivityView: {
21251
+ type: 'object',
21252
+ description: 'A single activity entry on a report.',
21253
+ required: [
21254
+ 'id',
21255
+ 'reportId',
21256
+ 'activity',
21257
+ 'isAutomated',
21258
+ 'createdBy',
21259
+ 'createdAt',
21260
+ ],
21261
+ properties: {
21262
+ id: {
21263
+ type: 'integer',
21264
+ description: 'Activity ID',
21265
+ },
21266
+ reportId: {
21267
+ type: 'integer',
21268
+ description: 'ID of the report this activity belongs to',
21269
+ },
21270
+ activity: {
21271
+ type: 'union',
21272
+ refs: [
21273
+ 'lex:tools.ozone.report.defs#queueActivity',
21274
+ 'lex:tools.ozone.report.defs#assignmentActivity',
21275
+ 'lex:tools.ozone.report.defs#escalationActivity',
21276
+ 'lex:tools.ozone.report.defs#closeActivity',
21277
+ 'lex:tools.ozone.report.defs#reopenActivity',
21278
+ 'lex:tools.ozone.report.defs#noteActivity',
21279
+ ],
21280
+ description: 'The typed activity object describing what occurred.',
21281
+ },
21282
+ internalNote: {
21283
+ type: 'string',
21284
+ description: 'Optional moderator-only note. Not visible to reporters.',
21285
+ },
21286
+ publicNote: {
21287
+ type: 'string',
21288
+ description: 'Optional public note, potentially visible to the reporter.',
21289
+ },
21290
+ meta: {
21291
+ type: 'unknown',
21292
+ description: 'Extensible JSON payload for loose activity-specific metadata (e.g. assignmentId).',
21293
+ },
21294
+ isAutomated: {
21295
+ type: 'boolean',
21296
+ description: 'True if this activity was created by an automated process (e.g. queue router) rather than a direct human action.',
21297
+ },
21298
+ createdBy: {
21299
+ type: 'string',
21300
+ format: 'did',
21301
+ description: 'DID of the actor who created this activity, or the service DID for automated activities.',
21302
+ },
21303
+ moderator: {
21304
+ type: 'ref',
21305
+ ref: 'lex:tools.ozone.team.defs#member',
21306
+ description: 'Full member record of the moderator who created this activity',
21307
+ },
21308
+ createdAt: {
21309
+ type: 'string',
21310
+ format: 'datetime',
21311
+ description: 'When this activity was created',
21312
+ },
21313
+ },
21314
+ },
21315
+ liveStats: {
21316
+ description: 'Live statistics for reports for the current calendar day, filterable by queue, moderator, or report type.',
21317
+ type: 'object',
21318
+ properties: {
21319
+ pendingCount: {
21320
+ type: 'integer',
21321
+ description: 'Number of reports currently not closed.',
21322
+ },
21323
+ actionedCount: {
21324
+ type: 'integer',
21325
+ description: 'Number of reports closed today.',
21326
+ },
21327
+ escalatedCount: {
21328
+ type: 'integer',
21329
+ description: 'Number of reports escalated today.',
21330
+ },
21331
+ inboundCount: {
21332
+ type: 'integer',
21333
+ description: 'Reports received today.',
21334
+ },
21335
+ actionRate: {
21336
+ type: 'integer',
21337
+ description: 'Percentage of reports actioned (actionedCount / inboundCount * 100), rounded to nearest integer.',
21338
+ },
21339
+ avgHandlingTimeSec: {
21340
+ type: 'integer',
21341
+ description: 'Average time in seconds from report creation (or moderator assignment) to close.',
21342
+ },
21343
+ lastUpdated: {
21344
+ type: 'string',
21345
+ format: 'datetime',
21346
+ description: 'When these statistics were last computed.',
21347
+ },
21348
+ },
21349
+ },
21350
+ historicalStats: {
21351
+ description: 'A single daily snapshot of report statistics for a calendar date.',
21352
+ type: 'object',
21353
+ required: ['date'],
21354
+ properties: {
21355
+ date: {
21356
+ type: 'string',
21357
+ description: 'The calendar date this snapshot covers (YYYY-MM-DD).',
21358
+ },
21359
+ computedAt: {
21360
+ type: 'string',
21361
+ format: 'datetime',
21362
+ description: 'When this snapshot was last computed.',
21363
+ },
21364
+ pendingCount: {
21365
+ type: 'integer',
21366
+ description: 'Number of reports not closed at time of computation.',
21367
+ },
21368
+ actionedCount: {
21369
+ type: 'integer',
21370
+ description: 'Number of reports closed during this day.',
21371
+ },
21372
+ escalatedCount: {
21373
+ type: 'integer',
21374
+ description: 'Number of reports escalated during this day.',
21375
+ },
21376
+ inboundCount: {
21377
+ type: 'integer',
21378
+ description: 'Reports received during this day.',
21379
+ },
21380
+ actionRate: {
21381
+ type: 'integer',
21382
+ description: 'Percentage of reports actioned (actionedCount / inboundCount * 100), rounded to nearest integer.',
21383
+ },
21384
+ avgHandlingTimeSec: {
21385
+ type: 'integer',
21386
+ description: 'Average time in seconds from report creation (or moderator assignment) to close.',
21387
+ },
21388
+ },
21389
+ },
21390
+ assignmentView: {
21391
+ type: 'object',
21392
+ required: ['id', 'did', 'reportId', 'startAt'],
21393
+ properties: {
21394
+ id: {
21395
+ type: 'integer',
21396
+ },
21397
+ did: {
21398
+ type: 'string',
21399
+ format: 'did',
21400
+ },
21401
+ moderator: {
21402
+ type: 'ref',
21403
+ ref: 'lex:tools.ozone.team.defs#member',
21404
+ description: 'The moderator assigned to this report',
21405
+ },
21406
+ queue: {
21407
+ type: 'ref',
21408
+ ref: 'lex:tools.ozone.queue.defs#queueView',
21409
+ },
21410
+ reportId: {
21411
+ type: 'integer',
21412
+ },
21413
+ startAt: {
21414
+ type: 'string',
21415
+ format: 'datetime',
21416
+ },
21417
+ endAt: {
21418
+ type: 'string',
21419
+ format: 'datetime',
21420
+ },
21421
+ },
21422
+ },
21423
+ },
21424
+ },
21425
+ ToolsOzoneReportGetAssignments: {
21426
+ lexicon: 1,
21427
+ id: 'tools.ozone.report.getAssignments',
21428
+ defs: {
21429
+ main: {
21430
+ type: 'query',
21431
+ description: 'Get assignments for reports.',
21432
+ parameters: {
21433
+ type: 'params',
21434
+ properties: {
21435
+ onlyActive: {
21436
+ type: 'boolean',
21437
+ default: true,
21438
+ description: 'When true, only returns active assignments.',
21439
+ },
21440
+ reportIds: {
21441
+ type: 'array',
21442
+ items: {
21443
+ type: 'integer',
21444
+ },
21445
+ maxLength: 50,
21446
+ description: 'If specified, returns assignments for these reports only.',
21447
+ },
21448
+ dids: {
21449
+ type: 'array',
21450
+ items: {
21451
+ type: 'string',
21452
+ format: 'did',
21453
+ },
21454
+ maxLength: 50,
21455
+ description: 'If specified, returns assignments for these moderators only.',
21456
+ },
21457
+ limit: {
21458
+ type: 'integer',
21459
+ minimum: 1,
21460
+ maximum: 100,
21461
+ default: 50,
21462
+ },
21463
+ cursor: {
21464
+ type: 'string',
21465
+ },
21466
+ },
21467
+ },
21468
+ output: {
21469
+ encoding: 'application/json',
21470
+ schema: {
21471
+ type: 'object',
21472
+ required: ['assignments'],
21473
+ properties: {
21474
+ cursor: {
21475
+ type: 'string',
21476
+ },
21477
+ assignments: {
21478
+ type: 'array',
21479
+ items: {
21480
+ type: 'ref',
21481
+ ref: 'lex:tools.ozone.report.defs#assignmentView',
21482
+ },
21483
+ },
21484
+ },
21485
+ },
21486
+ },
21487
+ },
21488
+ },
21489
+ },
21490
+ ToolsOzoneReportGetHistoricalStats: {
21491
+ lexicon: 1,
21492
+ id: 'tools.ozone.report.getHistoricalStats',
21493
+ defs: {
21494
+ main: {
21495
+ type: 'query',
21496
+ description: 'Get historical daily report statistics. Returns a paginated list of daily stat snapshots, newest first. Filter by queue, moderator, or report type.',
21497
+ parameters: {
21498
+ type: 'params',
21499
+ properties: {
21500
+ queueId: {
21501
+ type: 'integer',
21502
+ description: 'Filter stats by queue. Use -1 for unqueued reports.',
21503
+ },
21504
+ moderatorDid: {
21505
+ type: 'string',
21506
+ format: 'did',
21507
+ description: 'Filter stats by moderator DID.',
21508
+ },
21509
+ reportTypes: {
21510
+ type: 'array',
21511
+ items: {
21512
+ type: 'string',
21513
+ },
21514
+ description: 'Filter stats by report types.',
21515
+ },
21516
+ startDate: {
21517
+ type: 'string',
21518
+ format: 'datetime',
21519
+ description: 'Earliest date to include (inclusive).',
21520
+ },
21521
+ endDate: {
21522
+ type: 'string',
21523
+ format: 'datetime',
21524
+ description: 'Latest date to include (inclusive).',
21525
+ },
21526
+ limit: {
21527
+ type: 'integer',
21528
+ minimum: 1,
21529
+ maximum: 100,
21530
+ default: 30,
21531
+ description: 'Maximum number of entries to return.',
21532
+ },
21533
+ cursor: {
21534
+ type: 'string',
21535
+ description: 'Pagination cursor.',
21536
+ },
21537
+ },
21538
+ },
21539
+ output: {
21540
+ encoding: 'application/json',
21541
+ schema: {
21542
+ type: 'object',
21543
+ required: ['stats'],
21544
+ properties: {
21545
+ stats: {
21546
+ type: 'array',
21547
+ items: {
21548
+ type: 'ref',
21549
+ ref: 'lex:tools.ozone.report.defs#historicalStats',
21550
+ },
21551
+ },
21552
+ cursor: {
21553
+ type: 'string',
21554
+ },
21555
+ },
21556
+ },
21557
+ },
21558
+ },
21559
+ },
21560
+ },
21561
+ ToolsOzoneReportGetLatestReport: {
21562
+ lexicon: 1,
21563
+ id: 'tools.ozone.report.getLatestReport',
21564
+ defs: {
21565
+ main: {
21566
+ type: 'query',
21567
+ description: 'Get the most recent report.',
21568
+ parameters: {
21569
+ type: 'params',
21570
+ properties: {},
21571
+ },
21572
+ output: {
21573
+ encoding: 'application/json',
21574
+ schema: {
21575
+ type: 'object',
21576
+ required: ['report'],
21577
+ properties: {
21578
+ report: {
21579
+ type: 'ref',
21580
+ ref: 'lex:tools.ozone.report.defs#reportView',
21581
+ },
21582
+ },
21583
+ },
21584
+ },
21585
+ errors: [
21586
+ {
21587
+ name: 'NotFound',
21588
+ description: 'No report found.',
21589
+ },
21590
+ ],
21591
+ },
21592
+ },
21593
+ },
21594
+ ToolsOzoneReportGetLiveStats: {
21595
+ lexicon: 1,
21596
+ id: 'tools.ozone.report.getLiveStats',
21597
+ defs: {
21598
+ main: {
21599
+ type: 'query',
21600
+ description: 'Get live report statistics from the past 24 hours. Filter by queue, moderator, or report type. Omit all parameters for aggregate stats.',
21601
+ parameters: {
21602
+ type: 'params',
21603
+ properties: {
21604
+ queueId: {
21605
+ type: 'integer',
21606
+ description: 'Filter stats by queue. Use -1 for unqueued reports.',
21607
+ },
21608
+ moderatorDid: {
21609
+ type: 'string',
21610
+ format: 'did',
21611
+ description: 'Filter stats by moderator DID.',
21612
+ },
21613
+ reportTypes: {
21614
+ type: 'array',
21615
+ items: {
21616
+ type: 'string',
21617
+ },
21618
+ description: 'Filter stats by report types.',
21619
+ },
21620
+ },
21621
+ },
21622
+ output: {
21623
+ encoding: 'application/json',
21624
+ schema: {
21625
+ type: 'object',
21626
+ required: ['stats'],
21627
+ properties: {
21628
+ stats: {
21629
+ type: 'ref',
21630
+ ref: 'lex:tools.ozone.report.defs#liveStats',
21631
+ description: 'Statistics for the requested filter.',
21632
+ },
21633
+ },
21634
+ },
21635
+ },
21636
+ },
21637
+ },
21638
+ },
21639
+ ToolsOzoneReportGetReport: {
21640
+ lexicon: 1,
21641
+ id: 'tools.ozone.report.getReport',
21642
+ defs: {
21643
+ main: {
21644
+ type: 'query',
21645
+ description: 'Get details about a single moderation report by ID.',
21646
+ parameters: {
21647
+ type: 'params',
21648
+ required: ['id'],
21649
+ properties: {
21650
+ id: {
21651
+ type: 'integer',
21652
+ description: 'The ID of the report to retrieve.',
21653
+ },
21654
+ },
21655
+ },
21656
+ output: {
21657
+ encoding: 'application/json',
21658
+ schema: {
21659
+ type: 'ref',
21660
+ ref: 'lex:tools.ozone.report.defs#reportView',
21661
+ },
21662
+ },
21663
+ errors: [
21664
+ {
21665
+ name: 'NotFound',
21666
+ description: 'No report found.',
21667
+ },
21668
+ ],
21669
+ },
21670
+ },
21671
+ },
21672
+ ToolsOzoneReportListActivities: {
21673
+ lexicon: 1,
21674
+ id: 'tools.ozone.report.listActivities',
21675
+ defs: {
21676
+ main: {
21677
+ type: 'query',
21678
+ description: 'List all activities for a report, sorted most-recent-first.',
21679
+ parameters: {
21680
+ type: 'params',
21681
+ required: ['reportId'],
21682
+ properties: {
21683
+ reportId: {
21684
+ type: 'integer',
21685
+ description: 'ID of the report whose activities to list',
21686
+ },
21687
+ limit: {
21688
+ type: 'integer',
21689
+ minimum: 1,
21690
+ maximum: 100,
21691
+ default: 50,
21692
+ },
21693
+ cursor: {
21694
+ type: 'string',
21695
+ },
21696
+ },
21697
+ },
21698
+ output: {
21699
+ encoding: 'application/json',
21700
+ schema: {
21701
+ type: 'object',
21702
+ required: ['activities'],
21703
+ properties: {
21704
+ activities: {
21705
+ type: 'array',
21706
+ items: {
21707
+ type: 'ref',
21708
+ ref: 'lex:tools.ozone.report.defs#reportActivityView',
21709
+ },
21710
+ },
21711
+ cursor: {
21712
+ type: 'string',
21713
+ },
21714
+ },
21715
+ },
21716
+ },
21717
+ },
21718
+ },
21719
+ },
21720
+ ToolsOzoneReportQueryReports: {
21721
+ lexicon: 1,
21722
+ id: 'tools.ozone.report.queryReports',
21723
+ defs: {
21724
+ main: {
21725
+ type: 'query',
21726
+ description: 'View moderation reports. Reports are individual instances of content being reported, as opposed to subject statuses which aggregate reports at the subject level.',
21727
+ parameters: {
21728
+ type: 'params',
21729
+ required: ['status'],
21730
+ properties: {
21731
+ queueId: {
21732
+ type: 'integer',
21733
+ description: 'Filter by queue ID. Use -1 for unassigned reports.',
21734
+ },
21735
+ reportTypes: {
21736
+ type: 'array',
21737
+ items: {
21738
+ type: 'string',
21739
+ },
21740
+ description: 'Filter by report types (fully qualified string in the format of com.atproto.moderation.defs#reason<name>).',
21741
+ },
21742
+ status: {
21743
+ type: 'string',
21744
+ knownValues: [
21745
+ 'open',
21746
+ 'closed',
21747
+ 'escalated',
21748
+ 'queued',
21749
+ 'assigned',
21750
+ ],
21751
+ description: 'Filter by report status.',
21752
+ },
21753
+ subject: {
21754
+ type: 'string',
21755
+ format: 'uri',
21756
+ description: 'Filter by subject DID or AT-URI.',
21757
+ },
21758
+ did: {
21759
+ type: 'string',
21760
+ format: 'did',
21761
+ description: '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.',
21762
+ },
21763
+ subjectType: {
21764
+ type: 'string',
21765
+ description: 'If specified, reports of the given type (account or record) will be returned.',
21766
+ knownValues: ['account', 'record'],
21767
+ },
21768
+ collections: {
21769
+ type: 'array',
21770
+ maxLength: 20,
21771
+ description: "If specified, reports where the subject belongs to the given collections will be returned. When subjectType is set to 'account', this will be ignored.",
21772
+ items: {
21773
+ type: 'string',
21774
+ format: 'nsid',
21775
+ },
21776
+ },
21777
+ reportedAfter: {
21778
+ type: 'string',
21779
+ format: 'datetime',
21780
+ description: 'Retrieve reports created after a given timestamp',
21781
+ },
21782
+ reportedBefore: {
21783
+ type: 'string',
21784
+ format: 'datetime',
21785
+ description: 'Retrieve reports created before a given timestamp',
21786
+ },
21787
+ isMuted: {
21788
+ type: 'boolean',
21789
+ default: false,
21790
+ description: 'Filter by muted status. true returns only muted reports, false returns only unmuted reports. Defaults to false.',
21791
+ },
21792
+ assignedTo: {
21793
+ type: 'string',
21794
+ format: 'did',
21795
+ description: 'Filter by the DID of the moderator permanently assigned to the report.',
21796
+ },
21797
+ sortField: {
21798
+ type: 'string',
21799
+ default: 'createdAt',
21800
+ enum: ['createdAt', 'updatedAt'],
21801
+ },
21802
+ sortDirection: {
21803
+ type: 'string',
21804
+ default: 'desc',
21805
+ enum: ['asc', 'desc'],
21806
+ },
21807
+ limit: {
21808
+ type: 'integer',
21809
+ minimum: 1,
21810
+ maximum: 100,
21811
+ default: 50,
21812
+ },
21813
+ cursor: {
21814
+ type: 'string',
21815
+ },
21816
+ },
21817
+ },
21818
+ output: {
21819
+ encoding: 'application/json',
21820
+ schema: {
21821
+ type: 'object',
21822
+ required: ['reports'],
21823
+ properties: {
21824
+ cursor: {
21825
+ type: 'string',
21826
+ },
21827
+ reports: {
21828
+ type: 'array',
21829
+ items: {
21830
+ type: 'ref',
21831
+ ref: 'lex:tools.ozone.report.defs#reportView',
21832
+ },
21833
+ },
21834
+ },
21835
+ },
21836
+ },
21837
+ },
21838
+ },
21839
+ },
21840
+ ToolsOzoneReportReassignQueue: {
21841
+ lexicon: 1,
21842
+ id: 'tools.ozone.report.reassignQueue',
21843
+ defs: {
21844
+ main: {
21845
+ type: 'procedure',
21846
+ description: 'Manually reassign a report to a different queue (or unassign it). Records a queueActivity entry on the report.',
21847
+ input: {
21848
+ encoding: 'application/json',
21849
+ schema: {
21850
+ type: 'object',
21851
+ required: ['reportId', 'queueId'],
21852
+ properties: {
21853
+ reportId: {
21854
+ type: 'integer',
21855
+ description: 'ID of the report to reassign',
21856
+ },
21857
+ queueId: {
21858
+ type: 'integer',
21859
+ description: 'Target queue ID. Use -1 to unassign from any queue.',
21860
+ },
21861
+ comment: {
21862
+ type: 'string',
21863
+ description: 'Optional moderator-only note recorded on the resulting queueActivity as internalNote.',
21864
+ },
21865
+ },
21866
+ },
21867
+ },
21868
+ output: {
21869
+ encoding: 'application/json',
21870
+ schema: {
21871
+ type: 'object',
21872
+ required: ['report'],
21873
+ properties: {
21874
+ report: {
21875
+ type: 'ref',
21876
+ ref: 'lex:tools.ozone.report.defs#reportView',
21877
+ },
21878
+ },
21879
+ },
21880
+ },
21881
+ errors: [
21882
+ {
21883
+ name: 'ReportNotFound',
21884
+ description: 'No report exists with the given reportId',
21885
+ },
21886
+ {
21887
+ name: 'ReportClosed',
21888
+ description: 'The report is closed and cannot be reassigned',
21889
+ },
21890
+ {
21891
+ name: 'AlreadyInTargetQueue',
21892
+ description: 'The report is already assigned to the target queue',
21893
+ },
21894
+ {
21895
+ name: 'QueueNotFound',
21896
+ description: 'No active queue exists with the given queueId',
21897
+ },
21898
+ {
21899
+ name: 'QueueDisabled',
21900
+ description: 'The target queue is disabled and cannot receive new assignments',
21901
+ },
21902
+ ],
21903
+ },
21904
+ },
21905
+ },
21906
+ ToolsOzoneReportRefreshStats: {
21907
+ lexicon: 1,
21908
+ id: 'tools.ozone.report.refreshStats',
21909
+ defs: {
21910
+ main: {
21911
+ type: 'procedure',
21912
+ description: 'Recompute report statistics for a date range. Useful for backfilling after failures or data corrections.',
21913
+ input: {
21914
+ encoding: 'application/json',
21915
+ schema: {
21916
+ type: 'object',
21917
+ required: ['startDate', 'endDate'],
21918
+ properties: {
21919
+ startDate: {
21920
+ type: 'string',
21921
+ description: 'Start date for recomputation, inclusive (YYYY-MM-DD).',
21922
+ },
21923
+ endDate: {
21924
+ type: 'string',
21925
+ description: 'End date for recomputation, inclusive (YYYY-MM-DD).',
21926
+ },
21927
+ queueIds: {
21928
+ type: 'array',
21929
+ items: {
21930
+ type: 'integer',
21931
+ },
21932
+ description: 'Optional list of queue IDs to recompute. Omit to recompute all groups.',
21933
+ },
21934
+ },
21935
+ },
21936
+ },
21937
+ output: {
21938
+ encoding: 'application/json',
21939
+ schema: {
21940
+ type: 'object',
21941
+ properties: {},
21942
+ },
21943
+ },
21944
+ },
21945
+ },
21946
+ },
21947
+ ToolsOzoneReportUnassignModerator: {
21948
+ lexicon: 1,
21949
+ id: 'tools.ozone.report.unassignModerator',
21950
+ defs: {
21951
+ main: {
21952
+ type: 'procedure',
21953
+ description: 'Remove report assignment.',
21954
+ input: {
21955
+ encoding: 'application/json',
21956
+ schema: {
21957
+ type: 'object',
21958
+ required: ['reportId'],
21959
+ properties: {
21960
+ reportId: {
21961
+ type: 'integer',
21962
+ description: 'The ID of the report to unassign.',
21963
+ },
21964
+ },
21965
+ },
21966
+ },
21967
+ output: {
21968
+ encoding: 'application/json',
21969
+ schema: {
21970
+ type: 'ref',
21971
+ ref: 'lex:tools.ozone.report.defs#assignmentView',
21972
+ },
21973
+ },
21974
+ errors: [
21975
+ {
21976
+ name: 'InvalidAssignment',
21977
+ description: 'The report ID is invalid.',
21978
+ },
21979
+ ],
21980
+ },
20222
21981
  },
20223
21982
  },
20224
21983
  ToolsOzoneSafelinkAddRule: {
@@ -22303,7 +24062,28 @@ exports.ids = {
22303
24062
  ToolsOzoneModerationQueryStatuses: 'tools.ozone.moderation.queryStatuses',
22304
24063
  ToolsOzoneModerationScheduleAction: 'tools.ozone.moderation.scheduleAction',
22305
24064
  ToolsOzoneModerationSearchRepos: 'tools.ozone.moderation.searchRepos',
24065
+ ToolsOzoneQueueAssignModerator: 'tools.ozone.queue.assignModerator',
24066
+ ToolsOzoneQueueCreateQueue: 'tools.ozone.queue.createQueue',
24067
+ ToolsOzoneQueueDefs: 'tools.ozone.queue.defs',
24068
+ ToolsOzoneQueueDeleteQueue: 'tools.ozone.queue.deleteQueue',
24069
+ ToolsOzoneQueueGetAssignments: 'tools.ozone.queue.getAssignments',
24070
+ ToolsOzoneQueueListQueues: 'tools.ozone.queue.listQueues',
24071
+ ToolsOzoneQueueRouteReports: 'tools.ozone.queue.routeReports',
24072
+ ToolsOzoneQueueUnassignModerator: 'tools.ozone.queue.unassignModerator',
24073
+ ToolsOzoneQueueUpdateQueue: 'tools.ozone.queue.updateQueue',
24074
+ ToolsOzoneReportAssignModerator: 'tools.ozone.report.assignModerator',
24075
+ ToolsOzoneReportCreateActivity: 'tools.ozone.report.createActivity',
22306
24076
  ToolsOzoneReportDefs: 'tools.ozone.report.defs',
24077
+ ToolsOzoneReportGetAssignments: 'tools.ozone.report.getAssignments',
24078
+ ToolsOzoneReportGetHistoricalStats: 'tools.ozone.report.getHistoricalStats',
24079
+ ToolsOzoneReportGetLatestReport: 'tools.ozone.report.getLatestReport',
24080
+ ToolsOzoneReportGetLiveStats: 'tools.ozone.report.getLiveStats',
24081
+ ToolsOzoneReportGetReport: 'tools.ozone.report.getReport',
24082
+ ToolsOzoneReportListActivities: 'tools.ozone.report.listActivities',
24083
+ ToolsOzoneReportQueryReports: 'tools.ozone.report.queryReports',
24084
+ ToolsOzoneReportReassignQueue: 'tools.ozone.report.reassignQueue',
24085
+ ToolsOzoneReportRefreshStats: 'tools.ozone.report.refreshStats',
24086
+ ToolsOzoneReportUnassignModerator: 'tools.ozone.report.unassignModerator',
22307
24087
  ToolsOzoneSafelinkAddRule: 'tools.ozone.safelink.addRule',
22308
24088
  ToolsOzoneSafelinkDefs: 'tools.ozone.safelink.defs',
22309
24089
  ToolsOzoneSafelinkQueryEvents: 'tools.ozone.safelink.queryEvents',