@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
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAA;AAKxC,eAAO,MAAM,QAAQ,GAAI,KAAK,gBAAgB,KAAG,WAkGhD,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,aAAa,CAAA;IACtB,EAAE,EAAE,cAAc,CAAA;IAClB,OAAO,EAAE,aAAa,CAAA;IACtB,GAAG,EAAE,SAAS,GAAG,IAAI,CAAA;IACrB,IAAI,EAAE,UAAU,GAAG,IAAI,CAAA;IACvB,GAAG,EAAE,SAAS,CAAA;IACd,QAAQ,EAAE,cAAc,CAAA;IACxB,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAA;IACnC,MAAM,EAAE,YAAY,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAA;CAChC,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,qBAAqB,EAAE,MAAM,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,GAAG,EAAE,MAAM,CAAA;IACX,aAAa,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,iCAAiC,CAAC,EAAE,MAAM,CAAA;IAC1C,4BAA4B,CAAC,EAAE,MAAM,CAAA;CACtC,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,UAAU,EAAE,OAAO,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;CAC1B,CAAA"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"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"}
@@ -83,6 +83,13 @@ const envToCfg = (env) => {
83
83
  issuersToIndex: env.verifierIssuersToIndex,
84
84
  }
85
85
  : null;
86
+ const assignmentsCfg = {
87
+ queueDurationMs: env.assignmentQueueDurationMs ?? 5 * common_1.MINUTE,
88
+ reportDurationMs: env.assignmentReportDurationMs ?? 5 * common_1.MINUTE,
89
+ };
90
+ const statsCfg = {
91
+ computerIntervalMinutes: env.statsComputerIntervalMinutes ?? 15,
92
+ };
86
93
  return {
87
94
  service: serviceCfg,
88
95
  db: dbCfg,
@@ -94,6 +101,8 @@ const envToCfg = (env) => {
94
101
  blobDivert: blobDivertServiceCfg,
95
102
  access: accessCfg,
96
103
  verifier: verifierCfg,
104
+ assignments: assignmentsCfg,
105
+ stats: statsCfg,
97
106
  jetstreamUrl: env.jetstreamUrl,
98
107
  };
99
108
  };
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'node:assert'\nimport { DAY, HOUR, MINUTE } from '@atproto/common'\nimport { OzoneEnvironment } from './env'\n\n// off-config but still from env:\n// logging: LOG_LEVEL, LOG_SYSTEMS, LOG_ENABLED, LOG_DESTINATION\n\nexport const envToCfg = (env: OzoneEnvironment): OzoneConfig => {\n const port = env.port ?? 3000\n assert(env.publicUrl, 'publicUrl is required')\n assert(env.serverDid, 'serverDid is required')\n const serviceCfg: OzoneConfig['service'] = {\n port,\n publicUrl: env.publicUrl,\n did: env.serverDid,\n version: env.version,\n devMode: env.devMode,\n serviceRecordCacheTTL: env.serviceRecordCacheTTL ?? 5 * MINUTE, // default 5 mins\n }\n\n assert(env.dbPostgresUrl, 'dbPostgresUrl is required')\n const dbCfg: OzoneConfig['db'] = {\n postgresUrl: env.dbPostgresUrl,\n postgresSchema: env.dbPostgresSchema,\n poolSize: env.dbPoolSize,\n poolMaxUses: env.dbPoolMaxUses,\n poolIdleTimeoutMs: env.dbPoolIdleTimeoutMs,\n materializedViewRefreshIntervalMs: env.dbMaterializedViewRefreshIntervalMs,\n teamProfileRefreshIntervalMs: env.dbTeamProfileRefreshIntervalMs,\n }\n\n assert(env.appviewUrl, 'appviewUrl is required')\n assert(env.appviewDid, 'appviewDid is required')\n const appviewCfg: OzoneConfig['appview'] = {\n url: env.appviewUrl,\n did: env.appviewDid,\n pushEvents: !!env.appviewPushEvents,\n }\n\n let pdsCfg: OzoneConfig['pds'] = null\n if (env.pdsUrl || env.pdsDid) {\n assert(env.pdsUrl, 'pdsUrl is required')\n assert(env.pdsDid, 'pdsDid is required')\n pdsCfg = {\n url: env.pdsUrl,\n did: env.pdsDid,\n }\n }\n\n let chatCfg: OzoneConfig['chat'] = null\n if (env.chatUrl || env.chatDid) {\n assert(env.chatUrl, 'chatUrl is required when chatDid is provided')\n assert(env.chatDid, 'chatDid is required when chatUrl is provided')\n chatCfg = {\n url: env.chatUrl,\n did: env.chatDid,\n }\n }\n\n const cdnCfg: OzoneConfig['cdn'] = {\n paths: env.cdnPaths,\n }\n\n assert(env.didPlcUrl, 'didPlcUrl is required')\n const identityCfg: OzoneConfig['identity'] = {\n plcUrl: env.didPlcUrl,\n cacheMaxTTL: env.didCacheMaxTTL ?? DAY,\n cacheStaleTTL: env.didCacheStaleTTL ?? HOUR,\n }\n\n const blobDivertServiceCfg =\n env.blobDivertUrl && env.blobDivertAdminPassword\n ? {\n url: env.blobDivertUrl,\n adminPassword: env.blobDivertAdminPassword,\n }\n : null\n const accessCfg: OzoneConfig['access'] = {\n admins: env.adminDids,\n moderators: env.moderatorDids,\n triage: env.triageDids,\n }\n const verifierCfg: OzoneConfig['verifier'] =\n env.verifierUrl && env.verifierDid && env.verifierPassword\n ? {\n url: env.verifierUrl,\n did: env.verifierDid,\n password: env.verifierPassword,\n issuersToIndex: env.verifierIssuersToIndex,\n }\n : null\n\n return {\n service: serviceCfg,\n db: dbCfg,\n appview: appviewCfg,\n pds: pdsCfg,\n chat: chatCfg,\n cdn: cdnCfg,\n identity: identityCfg,\n blobDivert: blobDivertServiceCfg,\n access: accessCfg,\n verifier: verifierCfg,\n jetstreamUrl: env.jetstreamUrl,\n }\n}\n\nexport type OzoneConfig = {\n service: ServiceConfig\n db: DatabaseConfig\n appview: AppviewConfig\n pds: PdsConfig | null\n chat: ChatConfig | null\n cdn: CdnConfig\n identity: IdentityConfig\n blobDivert: BlobDivertConfig | null\n access: AccessConfig\n jetstreamUrl?: string\n verifier: VerifierConfig | null\n}\n\nexport type ServiceConfig = {\n port: number\n publicUrl: string\n did: string\n version?: string\n devMode?: boolean\n serviceRecordCacheTTL: number // in ms, default 5 mins\n}\n\nexport type BlobDivertConfig = {\n url: string\n adminPassword: string\n}\n\nexport type DatabaseConfig = {\n postgresUrl: string\n postgresSchema?: string\n poolSize?: number\n poolMaxUses?: number\n poolIdleTimeoutMs?: number\n materializedViewRefreshIntervalMs?: number\n teamProfileRefreshIntervalMs?: number\n}\n\nexport type AppviewConfig = {\n url: string\n did: string\n pushEvents: boolean\n}\n\nexport type PdsConfig = {\n url: string\n did: string\n}\n\nexport type ChatConfig = {\n url: string\n did: string\n}\n\nexport type CdnConfig = {\n paths?: string[]\n}\n\nexport type IdentityConfig = {\n plcUrl: string\n cacheStaleTTL: number\n cacheMaxTTL: number\n}\n\nexport type AccessConfig = {\n admins: string[]\n moderators: string[]\n triage: string[]\n}\n\nexport type VerifierConfig = {\n url: string\n did: string\n password: string\n jetstreamUrl?: string\n issuersToIndex?: string[]\n}\n"]}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'node:assert'\nimport { DAY, HOUR, MINUTE } from '@atproto/common'\nimport { OzoneEnvironment } from './env'\n\n// off-config but still from env:\n// logging: LOG_LEVEL, LOG_SYSTEMS, LOG_ENABLED, LOG_DESTINATION\n\nexport const envToCfg = (env: OzoneEnvironment): OzoneConfig => {\n const port = env.port ?? 3000\n assert(env.publicUrl, 'publicUrl is required')\n assert(env.serverDid, 'serverDid is required')\n const serviceCfg: OzoneConfig['service'] = {\n port,\n publicUrl: env.publicUrl,\n did: env.serverDid,\n version: env.version,\n devMode: env.devMode,\n serviceRecordCacheTTL: env.serviceRecordCacheTTL ?? 5 * MINUTE, // default 5 mins\n }\n\n assert(env.dbPostgresUrl, 'dbPostgresUrl is required')\n const dbCfg: OzoneConfig['db'] = {\n postgresUrl: env.dbPostgresUrl,\n postgresSchema: env.dbPostgresSchema,\n poolSize: env.dbPoolSize,\n poolMaxUses: env.dbPoolMaxUses,\n poolIdleTimeoutMs: env.dbPoolIdleTimeoutMs,\n materializedViewRefreshIntervalMs: env.dbMaterializedViewRefreshIntervalMs,\n teamProfileRefreshIntervalMs: env.dbTeamProfileRefreshIntervalMs,\n }\n\n assert(env.appviewUrl, 'appviewUrl is required')\n assert(env.appviewDid, 'appviewDid is required')\n const appviewCfg: OzoneConfig['appview'] = {\n url: env.appviewUrl,\n did: env.appviewDid,\n pushEvents: !!env.appviewPushEvents,\n }\n\n let pdsCfg: OzoneConfig['pds'] = null\n if (env.pdsUrl || env.pdsDid) {\n assert(env.pdsUrl, 'pdsUrl is required')\n assert(env.pdsDid, 'pdsDid is required')\n pdsCfg = {\n url: env.pdsUrl,\n did: env.pdsDid,\n }\n }\n\n let chatCfg: OzoneConfig['chat'] = null\n if (env.chatUrl || env.chatDid) {\n assert(env.chatUrl, 'chatUrl is required when chatDid is provided')\n assert(env.chatDid, 'chatDid is required when chatUrl is provided')\n chatCfg = {\n url: env.chatUrl,\n did: env.chatDid,\n }\n }\n\n const cdnCfg: OzoneConfig['cdn'] = {\n paths: env.cdnPaths,\n }\n\n assert(env.didPlcUrl, 'didPlcUrl is required')\n const identityCfg: OzoneConfig['identity'] = {\n plcUrl: env.didPlcUrl,\n cacheMaxTTL: env.didCacheMaxTTL ?? DAY,\n cacheStaleTTL: env.didCacheStaleTTL ?? HOUR,\n }\n\n const blobDivertServiceCfg =\n env.blobDivertUrl && env.blobDivertAdminPassword\n ? {\n url: env.blobDivertUrl,\n adminPassword: env.blobDivertAdminPassword,\n }\n : null\n const accessCfg: OzoneConfig['access'] = {\n admins: env.adminDids,\n moderators: env.moderatorDids,\n triage: env.triageDids,\n }\n const verifierCfg: OzoneConfig['verifier'] =\n env.verifierUrl && env.verifierDid && env.verifierPassword\n ? {\n url: env.verifierUrl,\n did: env.verifierDid,\n password: env.verifierPassword,\n issuersToIndex: env.verifierIssuersToIndex,\n }\n : null\n\n const assignmentsCfg: OzoneConfig['assignments'] = {\n queueDurationMs: env.assignmentQueueDurationMs ?? 5 * MINUTE,\n reportDurationMs: env.assignmentReportDurationMs ?? 5 * MINUTE,\n }\n\n const statsCfg: OzoneConfig['stats'] = {\n computerIntervalMinutes: env.statsComputerIntervalMinutes ?? 15,\n }\n\n return {\n service: serviceCfg,\n db: dbCfg,\n appview: appviewCfg,\n pds: pdsCfg,\n chat: chatCfg,\n cdn: cdnCfg,\n identity: identityCfg,\n blobDivert: blobDivertServiceCfg,\n access: accessCfg,\n verifier: verifierCfg,\n assignments: assignmentsCfg,\n stats: statsCfg,\n jetstreamUrl: env.jetstreamUrl,\n }\n}\n\nexport type OzoneConfig = {\n service: ServiceConfig\n db: DatabaseConfig\n appview: AppviewConfig\n pds: PdsConfig | null\n chat: ChatConfig | null\n cdn: CdnConfig\n identity: IdentityConfig\n blobDivert: BlobDivertConfig | null\n access: AccessConfig\n assignments: AssignmentsConfig\n stats: StatsConfig\n jetstreamUrl?: string\n verifier: VerifierConfig | null\n}\n\nexport type StatsConfig = {\n /**\n * Minutes between stats computer cycles.\n * Defaults to 15. Minimum is 1.\n * Set to -1 to disable the stats computer.\n */\n computerIntervalMinutes: number\n}\n\nexport type ServiceConfig = {\n port: number\n publicUrl: string\n did: string\n version?: string\n devMode?: boolean\n serviceRecordCacheTTL: number // in ms, default 5 mins\n}\n\nexport type BlobDivertConfig = {\n url: string\n adminPassword: string\n}\n\nexport type DatabaseConfig = {\n postgresUrl: string\n postgresSchema?: string\n poolSize?: number\n poolMaxUses?: number\n poolIdleTimeoutMs?: number\n materializedViewRefreshIntervalMs?: number\n teamProfileRefreshIntervalMs?: number\n}\n\nexport type AppviewConfig = {\n url: string\n did: string\n pushEvents: boolean\n}\n\nexport type PdsConfig = {\n url: string\n did: string\n}\n\nexport type ChatConfig = {\n url: string\n did: string\n}\n\nexport type CdnConfig = {\n paths?: string[]\n}\n\nexport type IdentityConfig = {\n plcUrl: string\n cacheStaleTTL: number\n cacheMaxTTL: number\n}\n\nexport type AccessConfig = {\n admins: string[]\n moderators: string[]\n triage: string[]\n}\n\nexport type VerifierConfig = {\n url: string\n did: string\n password: string\n jetstreamUrl?: string\n issuersToIndex?: string[]\n}\n\nexport type AssignmentsConfig = {\n queueDurationMs: number\n reportDurationMs: number\n}\n"]}
@@ -37,5 +37,8 @@ export type OzoneEnvironment = {
37
37
  verifierPassword?: string;
38
38
  verifierIssuersToIndex?: string[];
39
39
  jetstreamUrl?: string;
40
+ assignmentQueueDurationMs?: number;
41
+ assignmentReportDurationMs?: number;
42
+ statsComputerIntervalMinutes?: number;
40
43
  };
41
44
  //# sourceMappingURL=env.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,OAAO,QAAO,gBA4C1B,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,mCAAmC,CAAC,EAAE,MAAM,CAAA;IAC5C,8BAA8B,CAAC,EAAE,MAAM,CAAA;IACvC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,uBAAuB,CAAC,EAAE,MAAM,CAAA;IAChC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAA;IACjC,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA"}
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,OAAO,QAAO,gBAiD1B,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,mCAAmC,CAAC,EAAE,MAAM,CAAA;IAC5C,8BAA8B,CAAC,EAAE,MAAM,CAAA;IACvC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,uBAAuB,CAAC,EAAE,MAAM,CAAA;IAChC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAA;IACjC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,yBAAyB,CAAC,EAAE,MAAM,CAAA;IAClC,0BAA0B,CAAC,EAAE,MAAM,CAAA;IACnC,4BAA4B,CAAC,EAAE,MAAM,CAAA;CACtC,CAAA"}
@@ -41,6 +41,9 @@ const readEnv = () => {
41
41
  verifierPassword: (0, common_1.envStr)('OZONE_VERIFIER_PASSWORD'),
42
42
  verifierIssuersToIndex: (0, common_1.envList)('OZONE_VERIFIER_ISSUERS_TO_INDEX'),
43
43
  jetstreamUrl: (0, common_1.envStr)('OZONE_JETSTREAM_URL'),
44
+ assignmentQueueDurationMs: (0, common_1.envInt)('OZONE_ASSIGNMENT_QUEUE_DURATION_MS'),
45
+ assignmentReportDurationMs: (0, common_1.envInt)('OZONE_ASSIGNMENT_REPORT_DURATION_MS'),
46
+ statsComputerIntervalMinutes: (0, common_1.envInt)('OZONE_STATS_COMPUTER_INTERVAL_MINUTES'),
44
47
  };
45
48
  };
46
49
  exports.readEnv = readEnv;
@@ -1 +1 @@
1
- {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":";;;AAAA,4CAAkE;AAE3D,MAAM,OAAO,GAAG,GAAqB,EAAE;IAC5C,OAAO;QACL,OAAO,EAAE,IAAA,eAAM,EAAC,UAAU,CAAC;QAC3B,OAAO,EAAE,IAAA,gBAAO,EAAC,gBAAgB,CAAC;QAClC,OAAO,EAAE,IAAA,eAAM,EAAC,eAAe,CAAC;QAChC,IAAI,EAAE,IAAA,eAAM,EAAC,YAAY,CAAC;QAC1B,SAAS,EAAE,IAAA,eAAM,EAAC,kBAAkB,CAAC;QACrC,SAAS,EAAE,IAAA,eAAM,EAAC,kBAAkB,CAAC;QACrC,qBAAqB,EAAE,IAAA,eAAM,EAAC,gCAAgC,CAAC;QAC/D,UAAU,EAAE,IAAA,eAAM,EAAC,mBAAmB,CAAC;QACvC,UAAU,EAAE,IAAA,eAAM,EAAC,mBAAmB,CAAC;QACvC,iBAAiB,EAAE,IAAA,gBAAO,EAAC,2BAA2B,CAAC;QACvD,MAAM,EAAE,IAAA,eAAM,EAAC,eAAe,CAAC;QAC/B,MAAM,EAAE,IAAA,eAAM,EAAC,eAAe,CAAC;QAC/B,OAAO,EAAE,IAAA,eAAM,EAAC,gBAAgB,CAAC;QACjC,OAAO,EAAE,IAAA,eAAM,EAAC,gBAAgB,CAAC;QACjC,aAAa,EAAE,IAAA,eAAM,EAAC,uBAAuB,CAAC;QAC9C,gBAAgB,EAAE,IAAA,eAAM,EAAC,0BAA0B,CAAC;QACpD,UAAU,EAAE,IAAA,eAAM,EAAC,oBAAoB,CAAC;QACxC,aAAa,EAAE,IAAA,eAAM,EAAC,wBAAwB,CAAC;QAC/C,mBAAmB,EAAE,IAAA,eAAM,EAAC,+BAA+B,CAAC;QAC5D,mCAAmC,EAAE,IAAA,eAAM,EACzC,gDAAgD,CACjD;QACD,8BAA8B,EAAE,IAAA,eAAM,EACpC,2CAA2C,CAC5C;QACD,SAAS,EAAE,IAAA,eAAM,EAAC,mBAAmB,CAAC;QACtC,gBAAgB,EAAE,IAAA,eAAM,EAAC,2BAA2B,CAAC;QACrD,cAAc,EAAE,IAAA,eAAM,EAAC,yBAAyB,CAAC;QACjD,QAAQ,EAAE,IAAA,gBAAO,EAAC,iBAAiB,CAAC;QACpC,SAAS,EAAE,IAAA,gBAAO,EAAC,kBAAkB,CAAC;QACtC,aAAa,EAAE,IAAA,gBAAO,EAAC,sBAAsB,CAAC;QAC9C,UAAU,EAAE,IAAA,gBAAO,EAAC,mBAAmB,CAAC;QACxC,aAAa,EAAE,IAAA,eAAM,EAAC,sBAAsB,CAAC;QAC7C,aAAa,EAAE,IAAA,eAAM,EAAC,uBAAuB,CAAC;QAC9C,aAAa,EAAE,IAAA,eAAM,EAAC,uBAAuB,CAAC;QAC9C,uBAAuB,EAAE,IAAA,eAAM,EAAC,kCAAkC,CAAC;QACnE,WAAW,EAAE,IAAA,eAAM,EAAC,oBAAoB,CAAC;QACzC,WAAW,EAAE,IAAA,eAAM,EAAC,oBAAoB,CAAC;QACzC,gBAAgB,EAAE,IAAA,eAAM,EAAC,yBAAyB,CAAC;QACnD,sBAAsB,EAAE,IAAA,gBAAO,EAAC,iCAAiC,CAAC;QAClE,YAAY,EAAE,IAAA,eAAM,EAAC,qBAAqB,CAAC;KAC5C,CAAA;AACH,CAAC,CAAA;AA5CY,QAAA,OAAO,WA4CnB","sourcesContent":["import { envBool, envInt, envList, envStr } from '@atproto/common'\n\nexport const readEnv = (): OzoneEnvironment => {\n return {\n nodeEnv: envStr('NODE_ENV'),\n devMode: envBool('OZONE_DEV_MODE'),\n version: envStr('OZONE_VERSION'),\n port: envInt('OZONE_PORT'),\n publicUrl: envStr('OZONE_PUBLIC_URL'),\n serverDid: envStr('OZONE_SERVER_DID'),\n serviceRecordCacheTTL: envInt('OZONE_SERVICE_RECORD_CACHE_TTL'),\n appviewUrl: envStr('OZONE_APPVIEW_URL'),\n appviewDid: envStr('OZONE_APPVIEW_DID'),\n appviewPushEvents: envBool('OZONE_APPVIEW_PUSH_EVENTS'),\n pdsUrl: envStr('OZONE_PDS_URL'),\n pdsDid: envStr('OZONE_PDS_DID'),\n chatUrl: envStr('OZONE_CHAT_URL'),\n chatDid: envStr('OZONE_CHAT_DID'),\n dbPostgresUrl: envStr('OZONE_DB_POSTGRES_URL'),\n dbPostgresSchema: envStr('OZONE_DB_POSTGRES_SCHEMA'),\n dbPoolSize: envInt('OZONE_DB_POOL_SIZE'),\n dbPoolMaxUses: envInt('OZONE_DB_POOL_MAX_USES'),\n dbPoolIdleTimeoutMs: envInt('OZONE_DB_POOL_IDLE_TIMEOUT_MS'),\n dbMaterializedViewRefreshIntervalMs: envInt(\n 'OZONE_DB_MATERIALIZED_VIEW_REFRESH_INTERVAL_MS',\n ),\n dbTeamProfileRefreshIntervalMs: envInt(\n 'OZONE_DB_TEAM_PROFILE_REFRESH_INTERVAL_MS',\n ),\n didPlcUrl: envStr('OZONE_DID_PLC_URL'),\n didCacheStaleTTL: envInt('OZONE_DID_CACHE_STALE_TTL'),\n didCacheMaxTTL: envInt('OZONE_DID_CACHE_MAX_TTL'),\n cdnPaths: envList('OZONE_CDN_PATHS'),\n adminDids: envList('OZONE_ADMIN_DIDS'),\n moderatorDids: envList('OZONE_MODERATOR_DIDS'),\n triageDids: envList('OZONE_TRIAGE_DIDS'),\n adminPassword: envStr('OZONE_ADMIN_PASSWORD'),\n signingKeyHex: envStr('OZONE_SIGNING_KEY_HEX'),\n blobDivertUrl: envStr('OZONE_BLOB_DIVERT_URL'),\n blobDivertAdminPassword: envStr('OZONE_BLOB_DIVERT_ADMIN_PASSWORD'),\n verifierUrl: envStr('OZONE_VERIFIER_URL'),\n verifierDid: envStr('OZONE_VERIFIER_DID'),\n verifierPassword: envStr('OZONE_VERIFIER_PASSWORD'),\n verifierIssuersToIndex: envList('OZONE_VERIFIER_ISSUERS_TO_INDEX'),\n jetstreamUrl: envStr('OZONE_JETSTREAM_URL'),\n }\n}\n\nexport type OzoneEnvironment = {\n nodeEnv?: string\n devMode?: boolean\n version?: string\n port?: number\n publicUrl?: string\n serverDid?: string\n serviceRecordCacheTTL?: number\n appviewUrl?: string\n appviewDid?: string\n appviewPushEvents?: boolean\n pdsUrl?: string\n pdsDid?: string\n chatUrl?: string\n chatDid?: string\n dbPostgresUrl?: string\n dbPostgresSchema?: string\n dbPoolSize?: number\n dbPoolMaxUses?: number\n dbPoolIdleTimeoutMs?: number\n dbMaterializedViewRefreshIntervalMs?: number\n dbTeamProfileRefreshIntervalMs?: number\n didPlcUrl?: string\n didCacheStaleTTL?: number\n didCacheMaxTTL?: number\n cdnPaths?: string[]\n adminDids: string[]\n moderatorDids: string[]\n triageDids: string[]\n adminPassword?: string\n signingKeyHex?: string\n blobDivertUrl?: string\n blobDivertAdminPassword?: string\n verifierUrl?: string\n verifierDid?: string\n verifierPassword?: string\n verifierIssuersToIndex?: string[]\n jetstreamUrl?: string\n}\n"]}
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":";;;AAAA,4CAAkE;AAE3D,MAAM,OAAO,GAAG,GAAqB,EAAE;IAC5C,OAAO;QACL,OAAO,EAAE,IAAA,eAAM,EAAC,UAAU,CAAC;QAC3B,OAAO,EAAE,IAAA,gBAAO,EAAC,gBAAgB,CAAC;QAClC,OAAO,EAAE,IAAA,eAAM,EAAC,eAAe,CAAC;QAChC,IAAI,EAAE,IAAA,eAAM,EAAC,YAAY,CAAC;QAC1B,SAAS,EAAE,IAAA,eAAM,EAAC,kBAAkB,CAAC;QACrC,SAAS,EAAE,IAAA,eAAM,EAAC,kBAAkB,CAAC;QACrC,qBAAqB,EAAE,IAAA,eAAM,EAAC,gCAAgC,CAAC;QAC/D,UAAU,EAAE,IAAA,eAAM,EAAC,mBAAmB,CAAC;QACvC,UAAU,EAAE,IAAA,eAAM,EAAC,mBAAmB,CAAC;QACvC,iBAAiB,EAAE,IAAA,gBAAO,EAAC,2BAA2B,CAAC;QACvD,MAAM,EAAE,IAAA,eAAM,EAAC,eAAe,CAAC;QAC/B,MAAM,EAAE,IAAA,eAAM,EAAC,eAAe,CAAC;QAC/B,OAAO,EAAE,IAAA,eAAM,EAAC,gBAAgB,CAAC;QACjC,OAAO,EAAE,IAAA,eAAM,EAAC,gBAAgB,CAAC;QACjC,aAAa,EAAE,IAAA,eAAM,EAAC,uBAAuB,CAAC;QAC9C,gBAAgB,EAAE,IAAA,eAAM,EAAC,0BAA0B,CAAC;QACpD,UAAU,EAAE,IAAA,eAAM,EAAC,oBAAoB,CAAC;QACxC,aAAa,EAAE,IAAA,eAAM,EAAC,wBAAwB,CAAC;QAC/C,mBAAmB,EAAE,IAAA,eAAM,EAAC,+BAA+B,CAAC;QAC5D,mCAAmC,EAAE,IAAA,eAAM,EACzC,gDAAgD,CACjD;QACD,8BAA8B,EAAE,IAAA,eAAM,EACpC,2CAA2C,CAC5C;QACD,SAAS,EAAE,IAAA,eAAM,EAAC,mBAAmB,CAAC;QACtC,gBAAgB,EAAE,IAAA,eAAM,EAAC,2BAA2B,CAAC;QACrD,cAAc,EAAE,IAAA,eAAM,EAAC,yBAAyB,CAAC;QACjD,QAAQ,EAAE,IAAA,gBAAO,EAAC,iBAAiB,CAAC;QACpC,SAAS,EAAE,IAAA,gBAAO,EAAC,kBAAkB,CAAC;QACtC,aAAa,EAAE,IAAA,gBAAO,EAAC,sBAAsB,CAAC;QAC9C,UAAU,EAAE,IAAA,gBAAO,EAAC,mBAAmB,CAAC;QACxC,aAAa,EAAE,IAAA,eAAM,EAAC,sBAAsB,CAAC;QAC7C,aAAa,EAAE,IAAA,eAAM,EAAC,uBAAuB,CAAC;QAC9C,aAAa,EAAE,IAAA,eAAM,EAAC,uBAAuB,CAAC;QAC9C,uBAAuB,EAAE,IAAA,eAAM,EAAC,kCAAkC,CAAC;QACnE,WAAW,EAAE,IAAA,eAAM,EAAC,oBAAoB,CAAC;QACzC,WAAW,EAAE,IAAA,eAAM,EAAC,oBAAoB,CAAC;QACzC,gBAAgB,EAAE,IAAA,eAAM,EAAC,yBAAyB,CAAC;QACnD,sBAAsB,EAAE,IAAA,gBAAO,EAAC,iCAAiC,CAAC;QAClE,YAAY,EAAE,IAAA,eAAM,EAAC,qBAAqB,CAAC;QAC3C,yBAAyB,EAAE,IAAA,eAAM,EAAC,oCAAoC,CAAC;QACvE,0BAA0B,EAAE,IAAA,eAAM,EAAC,qCAAqC,CAAC;QACzE,4BAA4B,EAAE,IAAA,eAAM,EAClC,uCAAuC,CACxC;KACF,CAAA;AACH,CAAC,CAAA;AAjDY,QAAA,OAAO,WAiDnB","sourcesContent":["import { envBool, envInt, envList, envStr } from '@atproto/common'\n\nexport const readEnv = (): OzoneEnvironment => {\n return {\n nodeEnv: envStr('NODE_ENV'),\n devMode: envBool('OZONE_DEV_MODE'),\n version: envStr('OZONE_VERSION'),\n port: envInt('OZONE_PORT'),\n publicUrl: envStr('OZONE_PUBLIC_URL'),\n serverDid: envStr('OZONE_SERVER_DID'),\n serviceRecordCacheTTL: envInt('OZONE_SERVICE_RECORD_CACHE_TTL'),\n appviewUrl: envStr('OZONE_APPVIEW_URL'),\n appviewDid: envStr('OZONE_APPVIEW_DID'),\n appviewPushEvents: envBool('OZONE_APPVIEW_PUSH_EVENTS'),\n pdsUrl: envStr('OZONE_PDS_URL'),\n pdsDid: envStr('OZONE_PDS_DID'),\n chatUrl: envStr('OZONE_CHAT_URL'),\n chatDid: envStr('OZONE_CHAT_DID'),\n dbPostgresUrl: envStr('OZONE_DB_POSTGRES_URL'),\n dbPostgresSchema: envStr('OZONE_DB_POSTGRES_SCHEMA'),\n dbPoolSize: envInt('OZONE_DB_POOL_SIZE'),\n dbPoolMaxUses: envInt('OZONE_DB_POOL_MAX_USES'),\n dbPoolIdleTimeoutMs: envInt('OZONE_DB_POOL_IDLE_TIMEOUT_MS'),\n dbMaterializedViewRefreshIntervalMs: envInt(\n 'OZONE_DB_MATERIALIZED_VIEW_REFRESH_INTERVAL_MS',\n ),\n dbTeamProfileRefreshIntervalMs: envInt(\n 'OZONE_DB_TEAM_PROFILE_REFRESH_INTERVAL_MS',\n ),\n didPlcUrl: envStr('OZONE_DID_PLC_URL'),\n didCacheStaleTTL: envInt('OZONE_DID_CACHE_STALE_TTL'),\n didCacheMaxTTL: envInt('OZONE_DID_CACHE_MAX_TTL'),\n cdnPaths: envList('OZONE_CDN_PATHS'),\n adminDids: envList('OZONE_ADMIN_DIDS'),\n moderatorDids: envList('OZONE_MODERATOR_DIDS'),\n triageDids: envList('OZONE_TRIAGE_DIDS'),\n adminPassword: envStr('OZONE_ADMIN_PASSWORD'),\n signingKeyHex: envStr('OZONE_SIGNING_KEY_HEX'),\n blobDivertUrl: envStr('OZONE_BLOB_DIVERT_URL'),\n blobDivertAdminPassword: envStr('OZONE_BLOB_DIVERT_ADMIN_PASSWORD'),\n verifierUrl: envStr('OZONE_VERIFIER_URL'),\n verifierDid: envStr('OZONE_VERIFIER_DID'),\n verifierPassword: envStr('OZONE_VERIFIER_PASSWORD'),\n verifierIssuersToIndex: envList('OZONE_VERIFIER_ISSUERS_TO_INDEX'),\n jetstreamUrl: envStr('OZONE_JETSTREAM_URL'),\n assignmentQueueDurationMs: envInt('OZONE_ASSIGNMENT_QUEUE_DURATION_MS'),\n assignmentReportDurationMs: envInt('OZONE_ASSIGNMENT_REPORT_DURATION_MS'),\n statsComputerIntervalMinutes: envInt(\n 'OZONE_STATS_COMPUTER_INTERVAL_MINUTES',\n ),\n }\n}\n\nexport type OzoneEnvironment = {\n nodeEnv?: string\n devMode?: boolean\n version?: string\n port?: number\n publicUrl?: string\n serverDid?: string\n serviceRecordCacheTTL?: number\n appviewUrl?: string\n appviewDid?: string\n appviewPushEvents?: boolean\n pdsUrl?: string\n pdsDid?: string\n chatUrl?: string\n chatDid?: string\n dbPostgresUrl?: string\n dbPostgresSchema?: string\n dbPoolSize?: number\n dbPoolMaxUses?: number\n dbPoolIdleTimeoutMs?: number\n dbMaterializedViewRefreshIntervalMs?: number\n dbTeamProfileRefreshIntervalMs?: number\n didPlcUrl?: string\n didCacheStaleTTL?: number\n didCacheMaxTTL?: number\n cdnPaths?: string[]\n adminDids: string[]\n moderatorDids: string[]\n triageDids: string[]\n adminPassword?: string\n signingKeyHex?: string\n blobDivertUrl?: string\n blobDivertAdminPassword?: string\n verifierUrl?: string\n verifierDid?: string\n verifierPassword?: string\n verifierIssuersToIndex?: string[]\n jetstreamUrl?: string\n assignmentQueueDurationMs?: number\n assignmentReportDurationMs?: number\n statsComputerIntervalMinutes?: number\n}\n"]}
package/dist/context.d.ts CHANGED
@@ -3,6 +3,7 @@ import express from 'express';
3
3
  import { AtpAgent } from '@atproto/api';
4
4
  import { Keypair } from '@atproto/crypto';
5
5
  import { DidCache, IdResolver } from '@atproto/identity';
6
+ import { AssignmentService } from './assignment';
6
7
  import { AuthVerifier } from './auth-verifier';
7
8
  import { BackgroundQueue } from './background';
8
9
  import { CommunicationTemplateServiceCreator } from './communication-service/template';
@@ -13,6 +14,8 @@ import { ImageInvalidator } from './image-invalidator';
13
14
  import { ModerationServiceCreator } from './mod-service';
14
15
  import { ModerationServiceProfileCreator } from './mod-service/profile';
15
16
  import { StrikeServiceCreator } from './mod-service/strike';
17
+ import { QueueServiceCreator } from './queue/service';
18
+ import { ReportStatsServiceCreator } from './report/stats';
16
19
  import { SafelinkRuleServiceCreator } from './safelink/service';
17
20
  import { ScheduledActionServiceCreator } from './scheduled-action/service';
18
21
  import { Sequencer } from './sequencer/sequencer';
@@ -30,6 +33,8 @@ export type AppContextOptions = {
30
33
  communicationTemplateService: CommunicationTemplateServiceCreator;
31
34
  safelinkRuleService: SafelinkRuleServiceCreator;
32
35
  scheduledActionService: ScheduledActionServiceCreator;
36
+ queueService: QueueServiceCreator;
37
+ reportStatsService: ReportStatsServiceCreator;
33
38
  setService: SetServiceCreator;
34
39
  settingService: SettingServiceCreator;
35
40
  strikeService: StrikeServiceCreator;
@@ -45,6 +50,7 @@ export type AppContextOptions = {
45
50
  imgInvalidator?: ImageInvalidator;
46
51
  backgroundQueue: BackgroundQueue;
47
52
  sequencer: Sequencer;
53
+ assignmentService: AssignmentService;
48
54
  authVerifier: AuthVerifier;
49
55
  verificationService: VerificationServiceCreator;
50
56
  verificationIssuer: VerificationIssuerCreator;
@@ -63,6 +69,8 @@ export declare class AppContext {
63
69
  get safelinkRuleService(): SafelinkRuleServiceCreator;
64
70
  get scheduledActionService(): ScheduledActionServiceCreator;
65
71
  get teamService(): TeamServiceCreator;
72
+ get queueService(): QueueServiceCreator;
73
+ get reportStatsService(): ReportStatsServiceCreator;
66
74
  get setService(): SetServiceCreator;
67
75
  get settingService(): SettingServiceCreator;
68
76
  get strikeService(): StrikeServiceCreator;
@@ -79,6 +87,7 @@ export declare class AppContext {
79
87
  get idResolver(): IdResolver;
80
88
  get backgroundQueue(): BackgroundQueue;
81
89
  get sequencer(): Sequencer;
90
+ get assignmentService(): AssignmentService;
82
91
  get authVerifier(): AuthVerifier;
83
92
  serviceAuthHeaders(aud: string, lxm: string): Promise<{
84
93
  headers: {
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,GAAG,MAAM,cAAc,CAAA;AACnC,OAAO,OAAO,MAAM,SAAS,CAAA;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,OAAO,EAAoB,MAAM,iBAAiB,CAAA;AAC3D,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAe,MAAM,mBAAmB,CAAA;AAErE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAEL,mCAAmC,EACpC,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAqB,wBAAwB,EAAE,MAAM,eAAe,CAAA;AAC3E,OAAO,EAEL,+BAA+B,EAChC,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAiB,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAC1E,OAAO,EAEL,0BAA0B,EAC3B,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAEL,6BAA6B,EAC9B,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAc,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAC7D,OAAO,EAAkB,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AACzE,OAAO,EAAe,kBAAkB,EAAE,MAAM,QAAQ,CAAA;AACxD,OAAO,EAEL,cAAc,EAIf,MAAM,QAAQ,CAAA;AACf,OAAO,EAEL,yBAAyB,EAC1B,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAEL,0BAA0B,EAC3B,MAAM,wBAAwB,CAAA;AAE/B,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,QAAQ,CAAA;IACZ,GAAG,EAAE,WAAW,CAAA;IAChB,UAAU,EAAE,wBAAwB,CAAA;IACpC,wBAAwB,EAAE,+BAA+B,CAAA;IACzD,4BAA4B,EAAE,mCAAmC,CAAA;IACjE,mBAAmB,EAAE,0BAA0B,CAAA;IAC/C,sBAAsB,EAAE,6BAA6B,CAAA;IACrD,UAAU,EAAE,iBAAiB,CAAA;IAC7B,cAAc,EAAE,qBAAqB,CAAA;IACrC,aAAa,EAAE,oBAAoB,CAAA;IACnC,WAAW,EAAE,kBAAkB,CAAA;IAC/B,YAAY,EAAE,QAAQ,CAAA;IACtB,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAA;IAC9B,SAAS,EAAE,QAAQ,GAAG,SAAS,CAAA;IAC/B,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,UAAU,EAAE,OAAO,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,QAAQ,CAAA;IAClB,UAAU,EAAE,UAAU,CAAA;IACtB,cAAc,CAAC,EAAE,gBAAgB,CAAA;IACjC,eAAe,EAAE,eAAe,CAAA;IAChC,SAAS,EAAE,SAAS,CAAA;IACpB,YAAY,EAAE,YAAY,CAAA;IAC1B,mBAAmB,EAAE,0BAA0B,CAAA;IAC/C,kBAAkB,EAAE,yBAAyB,CAAA;CAC9C,CAAA;AAED,qBAAa,UAAU;IAEnB,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,OAAO;gBADP,IAAI,EAAE,iBAAiB,EACvB,OAAO,EAAE,YAAY;WAGlB,UAAU,CACrB,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,YAAY,EACrB,SAAS,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GACrC,OAAO,CAAC,UAAU,CAAC;IAqHtB,UAAU,CAAC,IAAI,EAAE,MAAM;IAQvB,IAAI,EAAE,IAAI,QAAQ,CAEjB;IAED,IAAI,GAAG,IAAI,WAAW,CAErB;IAED,IAAI,UAAU,IAAI,wBAAwB,CAEzC;IAED,IAAI,YAAY,IAAI,YAAY,GAAG,SAAS,CAE3C;IAED,IAAI,4BAA4B,IAAI,mCAAmC,CAEtE;IAED,IAAI,mBAAmB,IAAI,0BAA0B,CAEpD;IAED,IAAI,sBAAsB,IAAI,6BAA6B,CAE1D;IAED,IAAI,WAAW,IAAI,kBAAkB,CAEpC;IAED,IAAI,UAAU,IAAI,iBAAiB,CAElC;IAED,IAAI,cAAc,IAAI,qBAAqB,CAE1C;IAED,IAAI,aAAa,IAAI,oBAAoB,CAExC;IAED,IAAI,mBAAmB,IAAI,0BAA0B,CAEpD;IAED,IAAI,kBAAkB,IAAI,yBAAyB,CAElD;IAED,IAAI,wBAAwB,IAAI,+BAA+B,CAE9D;IAED,IAAI,YAAY,IAAI,QAAQ,CAE3B;IAED,IAAI,QAAQ,IAAI,QAAQ,GAAG,SAAS,CAEnC;IAED,IAAI,SAAS,IAAI,QAAQ,GAAG,SAAS,CAEpC;IAED,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,SAAS,IAAI,GAAG,CAAC,MAAM,CAE1B;IAED,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED,IAAI,UAAU,IAAI,UAAU,CAE3B;IAED,IAAI,eAAe,IAAI,eAAe,CAErC;IAED,IAAI,SAAS,IAAI,SAAS,CAEzB;IAED,IAAI,YAAY,IAAI,YAAY,CAE/B;IAEK,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;;;;;IAU3C,OAAO,CAAC,GAAG,EAAE,MAAM;;;;;IAOnB,WAAW,CAAC,GAAG,EAAE,MAAM;;;;;IAIvB,QAAQ,CAAC,GAAG,EAAE,MAAM;;;;;IAO1B,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,iBAAiB,CAAC;IAOjD,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,GAAG,cAAc;CAWlD"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
package/dist/context.js CHANGED
@@ -43,6 +43,7 @@ const api_1 = require("@atproto/api");
43
43
  const crypto_1 = require("@atproto/crypto");
44
44
  const identity_1 = require("@atproto/identity");
45
45
  const xrpc_server_1 = require("@atproto/xrpc-server");
46
+ const assignment_1 = require("./assignment");
46
47
  const auth_verifier_1 = require("./auth-verifier");
47
48
  const background_1 = require("./background");
48
49
  const template_1 = require("./communication-service/template");
@@ -52,15 +53,17 @@ const db_1 = require("./db");
52
53
  const mod_service_1 = require("./mod-service");
53
54
  const profile_1 = require("./mod-service/profile");
54
55
  const strike_1 = require("./mod-service/strike");
55
- const service_1 = require("./safelink/service");
56
- const service_2 = require("./scheduled-action/service");
56
+ const service_1 = require("./queue/service");
57
+ const stats_1 = require("./report/stats");
58
+ const service_2 = require("./safelink/service");
59
+ const service_3 = require("./scheduled-action/service");
57
60
  const sequencer_1 = require("./sequencer/sequencer");
58
- const service_3 = require("./set/service");
59
- const service_4 = require("./setting/service");
61
+ const service_4 = require("./set/service");
62
+ const service_5 = require("./setting/service");
60
63
  const team_1 = require("./team");
61
64
  const util_1 = require("./util");
62
65
  const issuer_1 = require("./verification/issuer");
63
- const service_5 = require("./verification/service");
66
+ const service_6 = require("./verification/service");
64
67
  class AppContext {
65
68
  constructor(opts, secrets) {
66
69
  Object.defineProperty(this, "opts", {
@@ -116,16 +119,22 @@ class AppContext {
116
119
  pds: cfg.pds ?? undefined,
117
120
  });
118
121
  const communicationTemplateService = template_1.CommunicationTemplateService.creator();
119
- const safelinkRuleService = service_1.SafelinkRuleService.creator();
120
- const scheduledActionService = service_2.ScheduledActionService.creator();
122
+ const safelinkRuleService = service_2.SafelinkRuleService.creator();
123
+ const scheduledActionService = service_3.ScheduledActionService.creator();
121
124
  const teamService = team_1.TeamService.creator(appviewAgent, cfg.appview.did, createAuthHeaders);
122
- const setService = service_3.SetService.creator();
123
- const settingService = service_4.SettingService.creator();
125
+ const queueService = service_1.QueueService.creator();
126
+ const reportStatsService = stats_1.ReportStatsService.creator();
127
+ const setService = service_4.SetService.creator();
128
+ const settingService = service_5.SettingService.creator();
124
129
  const strikeService = strike_1.StrikeService.creator();
125
- const verificationService = service_5.VerificationService.creator();
130
+ const verificationService = service_6.VerificationService.creator();
126
131
  const verificationIssuer = issuer_1.VerificationIssuer.creator();
127
132
  const moderationServiceProfile = profile_1.ModerationServiceProfile.creator(cfg, appviewAgent);
128
133
  const modService = mod_service_1.ModerationService.creator(signingKey, signingKeyId, cfg, backgroundQueue, idResolver, eventPusher, appviewAgent, createAuthHeaders, strikeService, overrides?.imgInvalidator);
134
+ const assignmentService = assignment_1.AssignmentService.creator({
135
+ queueDurationMs: cfg.assignments.queueDurationMs,
136
+ reportDurationMs: cfg.assignments.reportDurationMs,
137
+ }, queueService, teamService)(db);
129
138
  const sequencer = new sequencer_1.Sequencer(modService(db));
130
139
  const authVerifier = new auth_verifier_1.AuthVerifier(idResolver, {
131
140
  serviceDid: cfg.service.did,
@@ -141,6 +150,8 @@ class AppContext {
141
150
  safelinkRuleService,
142
151
  scheduledActionService,
143
152
  teamService,
153
+ queueService,
154
+ reportStatsService,
144
155
  setService,
145
156
  settingService,
146
157
  strikeService,
@@ -153,6 +164,7 @@ class AppContext {
153
164
  idResolver,
154
165
  backgroundQueue,
155
166
  sequencer,
167
+ assignmentService,
156
168
  authVerifier,
157
169
  blobDiverter,
158
170
  verificationService,
@@ -188,6 +200,12 @@ class AppContext {
188
200
  get teamService() {
189
201
  return this.opts.teamService;
190
202
  }
203
+ get queueService() {
204
+ return this.opts.queueService;
205
+ }
206
+ get reportStatsService() {
207
+ return this.opts.reportStatsService;
208
+ }
191
209
  get setService() {
192
210
  return this.opts.setService;
193
211
  }
@@ -236,6 +254,9 @@ class AppContext {
236
254
  get sequencer() {
237
255
  return this.opts.sequencer;
238
256
  }
257
+ get assignmentService() {
258
+ return this.opts.assignmentService;
259
+ }
239
260
  get authVerifier() {
240
261
  return this.opts.authVerifier;
241
262
  }
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'node:assert'\nimport * as plc from '@did-plc/lib'\nimport express from 'express'\nimport { AtpAgent } from '@atproto/api'\nimport { Keypair, Secp256k1Keypair } from '@atproto/crypto'\nimport { DidCache, IdResolver, MemoryCache } from '@atproto/identity'\nimport { createServiceAuthHeaders } from '@atproto/xrpc-server'\nimport { AuthVerifier } from './auth-verifier'\nimport { BackgroundQueue } from './background'\nimport {\n CommunicationTemplateService,\n CommunicationTemplateServiceCreator,\n} from './communication-service/template'\nimport { OzoneConfig, OzoneSecrets } from './config'\nimport { EventPusher } from './daemon'\nimport { BlobDiverter } from './daemon/blob-diverter'\nimport { Database } from './db'\nimport { ImageInvalidator } from './image-invalidator'\nimport { ModerationService, ModerationServiceCreator } from './mod-service'\nimport {\n ModerationServiceProfile,\n ModerationServiceProfileCreator,\n} from './mod-service/profile'\nimport { StrikeService, StrikeServiceCreator } from './mod-service/strike'\nimport {\n SafelinkRuleService,\n SafelinkRuleServiceCreator,\n} from './safelink/service'\nimport {\n ScheduledActionService,\n ScheduledActionServiceCreator,\n} from './scheduled-action/service'\nimport { Sequencer } from './sequencer/sequencer'\nimport { SetService, SetServiceCreator } from './set/service'\nimport { SettingService, SettingServiceCreator } from './setting/service'\nimport { TeamService, TeamServiceCreator } from './team'\nimport {\n LABELER_HEADER_NAME,\n ParsedLabelers,\n defaultLabelerHeader,\n getSigningKeyId,\n parseLabelerHeader,\n} from './util'\nimport {\n VerificationIssuer,\n VerificationIssuerCreator,\n} from './verification/issuer'\nimport {\n VerificationService,\n VerificationServiceCreator,\n} from './verification/service'\n\nexport type AppContextOptions = {\n db: Database\n cfg: OzoneConfig\n modService: ModerationServiceCreator\n moderationServiceProfile: ModerationServiceProfileCreator\n communicationTemplateService: CommunicationTemplateServiceCreator\n safelinkRuleService: SafelinkRuleServiceCreator\n scheduledActionService: ScheduledActionServiceCreator\n setService: SetServiceCreator\n settingService: SettingServiceCreator\n strikeService: StrikeServiceCreator\n teamService: TeamServiceCreator\n appviewAgent: AtpAgent\n pdsAgent: AtpAgent | undefined\n chatAgent: AtpAgent | undefined\n blobDiverter?: BlobDiverter\n signingKey: Keypair\n signingKeyId: number\n didCache: DidCache\n idResolver: IdResolver\n imgInvalidator?: ImageInvalidator\n backgroundQueue: BackgroundQueue\n sequencer: Sequencer\n authVerifier: AuthVerifier\n verificationService: VerificationServiceCreator\n verificationIssuer: VerificationIssuerCreator\n}\n\nexport class AppContext {\n constructor(\n private opts: AppContextOptions,\n private secrets: OzoneSecrets,\n ) {}\n\n static async fromConfig(\n cfg: OzoneConfig,\n secrets: OzoneSecrets,\n overrides?: Partial<AppContextOptions>,\n ): Promise<AppContext> {\n const db = new Database({\n url: cfg.db.postgresUrl,\n schema: cfg.db.postgresSchema,\n poolSize: cfg.db.poolSize,\n poolMaxUses: cfg.db.poolMaxUses,\n poolIdleTimeoutMs: cfg.db.poolIdleTimeoutMs,\n })\n const signingKey = await Secp256k1Keypair.import(secrets.signingKeyHex)\n const signingKeyId = await getSigningKeyId(db, signingKey.did())\n const appviewAgent = new AtpAgent({ service: cfg.appview.url })\n const pdsAgent = cfg.pds\n ? new AtpAgent({ service: cfg.pds.url })\n : undefined\n const chatAgent = cfg.chat\n ? new AtpAgent({ service: cfg.chat.url })\n : undefined\n\n const didCache = new MemoryCache(\n cfg.identity.cacheStaleTTL,\n cfg.identity.cacheMaxTTL,\n )\n const idResolver = new IdResolver({\n plcUrl: cfg.identity.plcUrl,\n didCache,\n })\n\n const createAuthHeaders = (aud: string, lxm: string) =>\n createServiceAuthHeaders({\n iss: `${cfg.service.did}#atproto_labeler`,\n aud,\n lxm,\n keypair: signingKey,\n })\n\n const backgroundQueue = new BackgroundQueue(db)\n const blobDiverter = cfg.blobDivert\n ? new BlobDiverter(db, {\n idResolver,\n serviceConfig: cfg.blobDivert,\n })\n : undefined\n const eventPusher = new EventPusher(db, createAuthHeaders, {\n appview: cfg.appview.pushEvents ? cfg.appview : undefined,\n pds: cfg.pds ?? undefined,\n })\n\n const communicationTemplateService = CommunicationTemplateService.creator()\n const safelinkRuleService = SafelinkRuleService.creator()\n const scheduledActionService = ScheduledActionService.creator()\n const teamService = TeamService.creator(\n appviewAgent,\n cfg.appview.did,\n createAuthHeaders,\n )\n const setService = SetService.creator()\n const settingService = SettingService.creator()\n const strikeService = StrikeService.creator()\n const verificationService = VerificationService.creator()\n const verificationIssuer = VerificationIssuer.creator()\n const moderationServiceProfile = ModerationServiceProfile.creator(\n cfg,\n appviewAgent,\n )\n const modService = ModerationService.creator(\n signingKey,\n signingKeyId,\n cfg,\n backgroundQueue,\n idResolver,\n eventPusher,\n appviewAgent,\n createAuthHeaders,\n strikeService,\n overrides?.imgInvalidator,\n )\n\n const sequencer = new Sequencer(modService(db))\n\n const authVerifier = new AuthVerifier(idResolver, {\n serviceDid: cfg.service.did,\n adminPassword: secrets.adminPassword,\n teamService: teamService(db),\n })\n\n return new AppContext(\n {\n db,\n cfg,\n modService,\n moderationServiceProfile,\n communicationTemplateService,\n safelinkRuleService,\n scheduledActionService,\n teamService,\n setService,\n settingService,\n strikeService,\n appviewAgent,\n pdsAgent,\n chatAgent,\n signingKey,\n signingKeyId,\n didCache,\n idResolver,\n backgroundQueue,\n sequencer,\n authVerifier,\n blobDiverter,\n verificationService,\n verificationIssuer,\n ...(overrides ?? {}),\n },\n secrets,\n )\n }\n\n assignPort(port: number) {\n assert(\n !this.cfg.service.port || this.cfg.service.port === port,\n 'Conflicting port in config',\n )\n this.opts.cfg.service.port = port\n }\n\n get db(): Database {\n return this.opts.db\n }\n\n get cfg(): OzoneConfig {\n return this.opts.cfg\n }\n\n get modService(): ModerationServiceCreator {\n return this.opts.modService\n }\n\n get blobDiverter(): BlobDiverter | undefined {\n return this.opts.blobDiverter\n }\n\n get communicationTemplateService(): CommunicationTemplateServiceCreator {\n return this.opts.communicationTemplateService\n }\n\n get safelinkRuleService(): SafelinkRuleServiceCreator {\n return this.opts.safelinkRuleService\n }\n\n get scheduledActionService(): ScheduledActionServiceCreator {\n return this.opts.scheduledActionService\n }\n\n get teamService(): TeamServiceCreator {\n return this.opts.teamService\n }\n\n get setService(): SetServiceCreator {\n return this.opts.setService\n }\n\n get settingService(): SettingServiceCreator {\n return this.opts.settingService\n }\n\n get strikeService(): StrikeServiceCreator {\n return this.opts.strikeService\n }\n\n get verificationService(): VerificationServiceCreator {\n return this.opts.verificationService\n }\n\n get verificationIssuer(): VerificationIssuerCreator {\n return this.opts.verificationIssuer\n }\n\n get moderationServiceProfile(): ModerationServiceProfileCreator {\n return this.opts.moderationServiceProfile\n }\n\n get appviewAgent(): AtpAgent {\n return this.opts.appviewAgent\n }\n\n get pdsAgent(): AtpAgent | undefined {\n return this.opts.pdsAgent\n }\n\n get chatAgent(): AtpAgent | undefined {\n return this.opts.chatAgent\n }\n\n get signingKey(): Keypair {\n return this.opts.signingKey\n }\n\n get signingKeyId(): number {\n return this.opts.signingKeyId\n }\n\n get plcClient(): plc.Client {\n return new plc.Client(this.cfg.identity.plcUrl)\n }\n\n get didCache(): DidCache {\n return this.opts.didCache\n }\n\n get idResolver(): IdResolver {\n return this.opts.idResolver\n }\n\n get backgroundQueue(): BackgroundQueue {\n return this.opts.backgroundQueue\n }\n\n get sequencer(): Sequencer {\n return this.opts.sequencer\n }\n\n get authVerifier(): AuthVerifier {\n return this.opts.authVerifier\n }\n\n async serviceAuthHeaders(aud: string, lxm: string) {\n const iss = `${this.cfg.service.did}#atproto_labeler`\n return createServiceAuthHeaders({\n iss,\n aud,\n lxm,\n keypair: this.signingKey,\n })\n }\n\n async pdsAuth(lxm: string) {\n if (!this.cfg.pds) {\n return undefined\n }\n return this.serviceAuthHeaders(this.cfg.pds.did, lxm)\n }\n\n async appviewAuth(lxm: string) {\n return this.serviceAuthHeaders(this.cfg.appview.did, lxm)\n }\n\n async chatAuth(lxm: string) {\n if (!this.cfg.chat) {\n throw new Error('No chat service configured')\n }\n return this.serviceAuthHeaders(this.cfg.chat.did, lxm)\n }\n\n devOverride(overrides: Partial<AppContextOptions>) {\n this.opts = {\n ...this.opts,\n ...overrides,\n }\n }\n\n reqLabelers(req: express.Request): ParsedLabelers {\n const val = req.header(LABELER_HEADER_NAME)\n let parsed: ParsedLabelers | null\n try {\n parsed = parseLabelerHeader(val, this.cfg.service.did)\n } catch (err) {\n parsed = null\n }\n if (!parsed) return defaultLabelerHeader([])\n return parsed\n }\n}\n"]}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'node:assert'\nimport * as plc from '@did-plc/lib'\nimport express from 'express'\nimport { AtpAgent } from '@atproto/api'\nimport { Keypair, Secp256k1Keypair } from '@atproto/crypto'\nimport { DidCache, IdResolver, MemoryCache } from '@atproto/identity'\nimport { createServiceAuthHeaders } from '@atproto/xrpc-server'\nimport { AssignmentService } from './assignment'\nimport { AuthVerifier } from './auth-verifier'\nimport { BackgroundQueue } from './background'\nimport {\n CommunicationTemplateService,\n CommunicationTemplateServiceCreator,\n} from './communication-service/template'\nimport { OzoneConfig, OzoneSecrets } from './config'\nimport { EventPusher } from './daemon'\nimport { BlobDiverter } from './daemon/blob-diverter'\nimport { Database } from './db'\nimport { ImageInvalidator } from './image-invalidator'\nimport { ModerationService, ModerationServiceCreator } from './mod-service'\nimport {\n ModerationServiceProfile,\n ModerationServiceProfileCreator,\n} from './mod-service/profile'\nimport { StrikeService, StrikeServiceCreator } from './mod-service/strike'\nimport { QueueService, QueueServiceCreator } from './queue/service'\nimport { ReportStatsService, ReportStatsServiceCreator } from './report/stats'\nimport {\n SafelinkRuleService,\n SafelinkRuleServiceCreator,\n} from './safelink/service'\nimport {\n ScheduledActionService,\n ScheduledActionServiceCreator,\n} from './scheduled-action/service'\nimport { Sequencer } from './sequencer/sequencer'\nimport { SetService, SetServiceCreator } from './set/service'\nimport { SettingService, SettingServiceCreator } from './setting/service'\nimport { TeamService, TeamServiceCreator } from './team'\nimport {\n LABELER_HEADER_NAME,\n ParsedLabelers,\n defaultLabelerHeader,\n getSigningKeyId,\n parseLabelerHeader,\n} from './util'\nimport {\n VerificationIssuer,\n VerificationIssuerCreator,\n} from './verification/issuer'\nimport {\n VerificationService,\n VerificationServiceCreator,\n} from './verification/service'\n\nexport type AppContextOptions = {\n db: Database\n cfg: OzoneConfig\n modService: ModerationServiceCreator\n moderationServiceProfile: ModerationServiceProfileCreator\n communicationTemplateService: CommunicationTemplateServiceCreator\n safelinkRuleService: SafelinkRuleServiceCreator\n scheduledActionService: ScheduledActionServiceCreator\n queueService: QueueServiceCreator\n reportStatsService: ReportStatsServiceCreator\n setService: SetServiceCreator\n settingService: SettingServiceCreator\n strikeService: StrikeServiceCreator\n teamService: TeamServiceCreator\n appviewAgent: AtpAgent\n pdsAgent: AtpAgent | undefined\n chatAgent: AtpAgent | undefined\n blobDiverter?: BlobDiverter\n signingKey: Keypair\n signingKeyId: number\n didCache: DidCache\n idResolver: IdResolver\n imgInvalidator?: ImageInvalidator\n backgroundQueue: BackgroundQueue\n sequencer: Sequencer\n assignmentService: AssignmentService\n authVerifier: AuthVerifier\n verificationService: VerificationServiceCreator\n verificationIssuer: VerificationIssuerCreator\n}\n\nexport class AppContext {\n constructor(\n private opts: AppContextOptions,\n private secrets: OzoneSecrets,\n ) {}\n\n static async fromConfig(\n cfg: OzoneConfig,\n secrets: OzoneSecrets,\n overrides?: Partial<AppContextOptions>,\n ): Promise<AppContext> {\n const db = new Database({\n url: cfg.db.postgresUrl,\n schema: cfg.db.postgresSchema,\n poolSize: cfg.db.poolSize,\n poolMaxUses: cfg.db.poolMaxUses,\n poolIdleTimeoutMs: cfg.db.poolIdleTimeoutMs,\n })\n const signingKey = await Secp256k1Keypair.import(secrets.signingKeyHex)\n const signingKeyId = await getSigningKeyId(db, signingKey.did())\n const appviewAgent = new AtpAgent({ service: cfg.appview.url })\n const pdsAgent = cfg.pds\n ? new AtpAgent({ service: cfg.pds.url })\n : undefined\n const chatAgent = cfg.chat\n ? new AtpAgent({ service: cfg.chat.url })\n : undefined\n\n const didCache = new MemoryCache(\n cfg.identity.cacheStaleTTL,\n cfg.identity.cacheMaxTTL,\n )\n const idResolver = new IdResolver({\n plcUrl: cfg.identity.plcUrl,\n didCache,\n })\n\n const createAuthHeaders = (aud: string, lxm: string) =>\n createServiceAuthHeaders({\n iss: `${cfg.service.did}#atproto_labeler`,\n aud,\n lxm,\n keypair: signingKey,\n })\n\n const backgroundQueue = new BackgroundQueue(db)\n const blobDiverter = cfg.blobDivert\n ? new BlobDiverter(db, {\n idResolver,\n serviceConfig: cfg.blobDivert,\n })\n : undefined\n const eventPusher = new EventPusher(db, createAuthHeaders, {\n appview: cfg.appview.pushEvents ? cfg.appview : undefined,\n pds: cfg.pds ?? undefined,\n })\n\n const communicationTemplateService = CommunicationTemplateService.creator()\n const safelinkRuleService = SafelinkRuleService.creator()\n const scheduledActionService = ScheduledActionService.creator()\n const teamService = TeamService.creator(\n appviewAgent,\n cfg.appview.did,\n createAuthHeaders,\n )\n const queueService = QueueService.creator()\n const reportStatsService = ReportStatsService.creator()\n const setService = SetService.creator()\n const settingService = SettingService.creator()\n const strikeService = StrikeService.creator()\n const verificationService = VerificationService.creator()\n const verificationIssuer = VerificationIssuer.creator()\n const moderationServiceProfile = ModerationServiceProfile.creator(\n cfg,\n appviewAgent,\n )\n const modService = ModerationService.creator(\n signingKey,\n signingKeyId,\n cfg,\n backgroundQueue,\n idResolver,\n eventPusher,\n appviewAgent,\n createAuthHeaders,\n strikeService,\n overrides?.imgInvalidator,\n )\n const assignmentService = AssignmentService.creator(\n {\n queueDurationMs: cfg.assignments.queueDurationMs,\n reportDurationMs: cfg.assignments.reportDurationMs,\n },\n queueService,\n teamService,\n )(db)\n\n const sequencer = new Sequencer(modService(db))\n\n const authVerifier = new AuthVerifier(idResolver, {\n serviceDid: cfg.service.did,\n adminPassword: secrets.adminPassword,\n teamService: teamService(db),\n })\n\n return new AppContext(\n {\n db,\n cfg,\n modService,\n moderationServiceProfile,\n communicationTemplateService,\n safelinkRuleService,\n scheduledActionService,\n teamService,\n queueService,\n reportStatsService,\n setService,\n settingService,\n strikeService,\n appviewAgent,\n pdsAgent,\n chatAgent,\n signingKey,\n signingKeyId,\n didCache,\n idResolver,\n backgroundQueue,\n sequencer,\n assignmentService,\n authVerifier,\n blobDiverter,\n verificationService,\n verificationIssuer,\n ...(overrides ?? {}),\n },\n secrets,\n )\n }\n\n assignPort(port: number) {\n assert(\n !this.cfg.service.port || this.cfg.service.port === port,\n 'Conflicting port in config',\n )\n this.opts.cfg.service.port = port\n }\n\n get db(): Database {\n return this.opts.db\n }\n\n get cfg(): OzoneConfig {\n return this.opts.cfg\n }\n\n get modService(): ModerationServiceCreator {\n return this.opts.modService\n }\n\n get blobDiverter(): BlobDiverter | undefined {\n return this.opts.blobDiverter\n }\n\n get communicationTemplateService(): CommunicationTemplateServiceCreator {\n return this.opts.communicationTemplateService\n }\n\n get safelinkRuleService(): SafelinkRuleServiceCreator {\n return this.opts.safelinkRuleService\n }\n\n get scheduledActionService(): ScheduledActionServiceCreator {\n return this.opts.scheduledActionService\n }\n\n get teamService(): TeamServiceCreator {\n return this.opts.teamService\n }\n\n get queueService(): QueueServiceCreator {\n return this.opts.queueService\n }\n\n get reportStatsService(): ReportStatsServiceCreator {\n return this.opts.reportStatsService\n }\n\n get setService(): SetServiceCreator {\n return this.opts.setService\n }\n\n get settingService(): SettingServiceCreator {\n return this.opts.settingService\n }\n\n get strikeService(): StrikeServiceCreator {\n return this.opts.strikeService\n }\n\n get verificationService(): VerificationServiceCreator {\n return this.opts.verificationService\n }\n\n get verificationIssuer(): VerificationIssuerCreator {\n return this.opts.verificationIssuer\n }\n\n get moderationServiceProfile(): ModerationServiceProfileCreator {\n return this.opts.moderationServiceProfile\n }\n\n get appviewAgent(): AtpAgent {\n return this.opts.appviewAgent\n }\n\n get pdsAgent(): AtpAgent | undefined {\n return this.opts.pdsAgent\n }\n\n get chatAgent(): AtpAgent | undefined {\n return this.opts.chatAgent\n }\n\n get signingKey(): Keypair {\n return this.opts.signingKey\n }\n\n get signingKeyId(): number {\n return this.opts.signingKeyId\n }\n\n get plcClient(): plc.Client {\n return new plc.Client(this.cfg.identity.plcUrl)\n }\n\n get didCache(): DidCache {\n return this.opts.didCache\n }\n\n get idResolver(): IdResolver {\n return this.opts.idResolver\n }\n\n get backgroundQueue(): BackgroundQueue {\n return this.opts.backgroundQueue\n }\n\n get sequencer(): Sequencer {\n return this.opts.sequencer\n }\n\n get assignmentService(): AssignmentService {\n return this.opts.assignmentService\n }\n\n get authVerifier(): AuthVerifier {\n return this.opts.authVerifier\n }\n\n async serviceAuthHeaders(aud: string, lxm: string) {\n const iss = `${this.cfg.service.did}#atproto_labeler`\n return createServiceAuthHeaders({\n iss,\n aud,\n lxm,\n keypair: this.signingKey,\n })\n }\n\n async pdsAuth(lxm: string) {\n if (!this.cfg.pds) {\n return undefined\n }\n return this.serviceAuthHeaders(this.cfg.pds.did, lxm)\n }\n\n async appviewAuth(lxm: string) {\n return this.serviceAuthHeaders(this.cfg.appview.did, lxm)\n }\n\n async chatAuth(lxm: string) {\n if (!this.cfg.chat) {\n throw new Error('No chat service configured')\n }\n return this.serviceAuthHeaders(this.cfg.chat.did, lxm)\n }\n\n devOverride(overrides: Partial<AppContextOptions>) {\n this.opts = {\n ...this.opts,\n ...overrides,\n }\n }\n\n reqLabelers(req: express.Request): ParsedLabelers {\n const val = req.header(LABELER_HEADER_NAME)\n let parsed: ParsedLabelers | null\n try {\n parsed = parseLabelerHeader(val, this.cfg.service.did)\n } catch (err) {\n parsed = null\n }\n if (!parsed) return defaultLabelerHeader([])\n return parsed\n }\n}\n"]}
@@ -5,7 +5,9 @@ import { Database } from '../db';
5
5
  import { EventPusher } from './event-pusher';
6
6
  import { EventReverser } from './event-reverser';
7
7
  import { MaterializedViewRefresher } from './materialized-view-refresher';
8
+ import { QueueRouter } from './queue-router';
8
9
  import { ScheduledActionProcessor } from './scheduled-action-processor';
10
+ import { StatsComputer } from './stats-computer';
9
11
  import { StrikeExpiryProcessor } from './strike-expiry-processor';
10
12
  import { TeamProfileSynchronizer } from './team-profile-synchronizer';
11
13
  import { VerificationListener } from './verification-listener';
@@ -20,7 +22,9 @@ export type DaemonContextOptions = {
20
22
  teamProfileSynchronizer: TeamProfileSynchronizer;
21
23
  scheduledActionProcessor: ScheduledActionProcessor;
22
24
  strikeExpiryProcessor: StrikeExpiryProcessor;
25
+ queueRouter: QueueRouter;
23
26
  verificationListener?: VerificationListener;
27
+ statsComputer?: StatsComputer;
24
28
  };
25
29
  export declare class DaemonContext {
26
30
  private opts;
@@ -35,7 +39,9 @@ export declare class DaemonContext {
35
39
  get teamProfileSynchronizer(): TeamProfileSynchronizer;
36
40
  get scheduledActionProcessor(): ScheduledActionProcessor;
37
41
  get strikeExpiryProcessor(): StrikeExpiryProcessor;
42
+ get queueRouter(): QueueRouter;
38
43
  get verificationListener(): VerificationListener | undefined;
44
+ get statsComputer(): StatsComputer | undefined;
39
45
  start(): Promise<void>;
40
46
  processAll(): Promise<void>;
41
47
  destroy(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/daemon/context.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAoB,MAAM,iBAAiB,CAAA;AAG3D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAOhC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAA;AACzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAA;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAA;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAE9D,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,QAAQ,CAAA;IACZ,GAAG,EAAE,WAAW,CAAA;IAChB,eAAe,EAAE,eAAe,CAAA;IAChC,UAAU,EAAE,OAAO,CAAA;IACnB,WAAW,EAAE,WAAW,CAAA;IACxB,aAAa,EAAE,aAAa,CAAA;IAC5B,yBAAyB,EAAE,yBAAyB,CAAA;IACpD,uBAAuB,EAAE,uBAAuB,CAAA;IAChD,wBAAwB,EAAE,wBAAwB,CAAA;IAClD,qBAAqB,EAAE,qBAAqB,CAAA;IAC5C,oBAAoB,CAAC,EAAE,oBAAoB,CAAA;CAC5C,CAAA;AAED,qBAAa,aAAa;IACZ,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,oBAAoB;WAEjC,UAAU,CACrB,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,YAAY,EACrB,SAAS,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GACxC,OAAO,CAAC,aAAa,CAAC;IAgGzB,IAAI,EAAE,IAAI,QAAQ,CAEjB;IAED,IAAI,GAAG,IAAI,WAAW,CAErB;IAED,IAAI,eAAe,IAAI,eAAe,CAErC;IAED,IAAI,WAAW,IAAI,WAAW,CAE7B;IAED,IAAI,aAAa,IAAI,aAAa,CAEjC;IAED,IAAI,yBAAyB,IAAI,yBAAyB,CAEzD;IAED,IAAI,uBAAuB,IAAI,uBAAuB,CAErD;IAED,IAAI,wBAAwB,IAAI,wBAAwB,CAEvD;IAED,IAAI,qBAAqB,IAAI,qBAAqB,CAEjD;IAED,IAAI,oBAAoB,IAAI,oBAAoB,GAAG,SAAS,CAE3D;IAEK,KAAK;IAUL,UAAU;IAOV,OAAO;CAgBd"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/daemon/context.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAoB,MAAM,iBAAiB,CAAA;AAG3D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAShC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAA;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAA;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAA;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAE9D,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,QAAQ,CAAA;IACZ,GAAG,EAAE,WAAW,CAAA;IAChB,eAAe,EAAE,eAAe,CAAA;IAChC,UAAU,EAAE,OAAO,CAAA;IACnB,WAAW,EAAE,WAAW,CAAA;IACxB,aAAa,EAAE,aAAa,CAAA;IAC5B,yBAAyB,EAAE,yBAAyB,CAAA;IACpD,uBAAuB,EAAE,uBAAuB,CAAA;IAChD,wBAAwB,EAAE,wBAAwB,CAAA;IAClD,qBAAqB,EAAE,qBAAqB,CAAA;IAC5C,WAAW,EAAE,WAAW,CAAA;IACxB,oBAAoB,CAAC,EAAE,oBAAoB,CAAA;IAC3C,aAAa,CAAC,EAAE,aAAa,CAAA;CAC9B,CAAA;AAED,qBAAa,aAAa;IACZ,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,oBAAoB;WAEjC,UAAU,CACrB,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,YAAY,EACrB,SAAS,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GACxC,OAAO,CAAC,aAAa,CAAC;IA4GzB,IAAI,EAAE,IAAI,QAAQ,CAEjB;IAED,IAAI,GAAG,IAAI,WAAW,CAErB;IAED,IAAI,eAAe,IAAI,eAAe,CAErC;IAED,IAAI,WAAW,IAAI,WAAW,CAE7B;IAED,IAAI,aAAa,IAAI,aAAa,CAEjC;IAED,IAAI,yBAAyB,IAAI,yBAAyB,CAEzD;IAED,IAAI,uBAAuB,IAAI,uBAAuB,CAErD;IAED,IAAI,wBAAwB,IAAI,wBAAwB,CAEvD;IAED,IAAI,qBAAqB,IAAI,qBAAqB,CAEjD;IAED,IAAI,WAAW,IAAI,WAAW,CAE7B;IAED,IAAI,oBAAoB,IAAI,oBAAoB,GAAG,SAAS,CAE3D;IAED,IAAI,aAAa,IAAI,aAAa,GAAG,SAAS,CAE7C;IAEK,KAAK;IAYL,UAAU;IAWV,OAAO;CAkBd"}
@@ -10,14 +10,18 @@ const background_1 = require("../background");
10
10
  const db_1 = require("../db");
11
11
  const mod_service_1 = require("../mod-service");
12
12
  const strike_1 = require("../mod-service/strike");
13
- const service_1 = require("../scheduled-action/service");
14
- const service_2 = require("../setting/service");
13
+ const service_1 = require("../queue/service");
14
+ const stats_1 = require("../report/stats");
15
+ const service_2 = require("../scheduled-action/service");
16
+ const service_3 = require("../setting/service");
15
17
  const team_1 = require("../team");
16
18
  const util_1 = require("../util");
17
19
  const event_pusher_1 = require("./event-pusher");
18
20
  const event_reverser_1 = require("./event-reverser");
19
21
  const materialized_view_refresher_1 = require("./materialized-view-refresher");
22
+ const queue_router_1 = require("./queue-router");
20
23
  const scheduled_action_processor_1 = require("./scheduled-action-processor");
24
+ const stats_computer_1 = require("./stats-computer");
21
25
  const strike_expiry_processor_1 = require("./strike-expiry-processor");
22
26
  const team_profile_synchronizer_1 = require("./team-profile-synchronizer");
23
27
  const verification_listener_1 = require("./verification-listener");
@@ -52,16 +56,20 @@ class DaemonContext {
52
56
  pds: cfg.pds ?? undefined,
53
57
  });
54
58
  const backgroundQueue = new background_1.BackgroundQueue(db);
55
- const settingService = service_2.SettingService.creator();
59
+ const settingService = service_3.SettingService.creator();
56
60
  const strikeService = strike_1.StrikeService.creator();
57
61
  const modService = mod_service_1.ModerationService.creator(signingKey, signingKeyId, cfg, backgroundQueue, idResolver, eventPusher, appviewAgent, createAuthHeaders, strikeService);
58
- const scheduledActionService = service_1.ScheduledActionService.creator();
62
+ const scheduledActionService = service_2.ScheduledActionService.creator();
59
63
  const teamService = team_1.TeamService.creator(appviewAgent, cfg.appview.did, createAuthHeaders);
60
64
  const teamProfileSynchronizer = new team_profile_synchronizer_1.TeamProfileSynchronizer(backgroundQueue, teamService(db), cfg.db.teamProfileRefreshIntervalMs);
61
65
  const eventReverser = new event_reverser_1.EventReverser(db, modService);
62
66
  const materializedViewRefresher = new materialized_view_refresher_1.MaterializedViewRefresher(backgroundQueue, cfg.db.materializedViewRefreshIntervalMs);
63
67
  const scheduledActionProcessor = new scheduled_action_processor_1.ScheduledActionProcessor(db, cfg.service.did, settingService, modService, scheduledActionService);
64
68
  const strikeExpiryProcessor = new strike_expiry_processor_1.StrikeExpiryProcessor(db, strikeService);
69
+ const queueService = service_1.QueueService.creator();
70
+ const queueRouter = new queue_router_1.QueueRouter(db, queueService);
71
+ const reportStatsService = stats_1.ReportStatsService.creator();
72
+ const statsComputer = new stats_computer_1.StatsComputer(db, reportStatsService, cfg.stats.computerIntervalMinutes);
65
73
  // Only spawn the listener if verifier config exists and a jetstream URL is provided
66
74
  const verificationListener = cfg.verifier && cfg.jetstreamUrl
67
75
  ? new verification_listener_1.VerificationListener(db, cfg.jetstreamUrl, cfg.verifier?.issuersToIndex)
@@ -77,7 +85,9 @@ class DaemonContext {
77
85
  teamProfileSynchronizer,
78
86
  scheduledActionProcessor,
79
87
  strikeExpiryProcessor,
88
+ queueRouter,
80
89
  verificationListener,
90
+ statsComputer,
81
91
  ...(overrides ?? {}),
82
92
  });
83
93
  }
@@ -108,9 +118,15 @@ class DaemonContext {
108
118
  get strikeExpiryProcessor() {
109
119
  return this.opts.strikeExpiryProcessor;
110
120
  }
121
+ get queueRouter() {
122
+ return this.opts.queueRouter;
123
+ }
111
124
  get verificationListener() {
112
125
  return this.opts.verificationListener;
113
126
  }
127
+ get statsComputer() {
128
+ return this.opts.statsComputer;
129
+ }
114
130
  async start() {
115
131
  this.eventPusher.start();
116
132
  this.eventReverser.start();
@@ -118,11 +134,17 @@ class DaemonContext {
118
134
  this.teamProfileSynchronizer.start();
119
135
  this.scheduledActionProcessor.start();
120
136
  this.strikeExpiryProcessor.start();
137
+ this.queueRouter.start();
121
138
  this.verificationListener?.start();
139
+ this.statsComputer?.start();
122
140
  }
123
141
  async processAll() {
124
142
  // Sequential because the materialized view values depend on the events.
125
143
  await this.eventPusher.processAll();
144
+ // Drain pending modEventReport rows into the report table so test code
145
+ // that calls processAll() after creating reports sees the report rows
146
+ // immediately (in production this happens via the 1-min poll).
147
+ await this.queueRouter.routeReports();
126
148
  await this.materializedViewRefresher.run();
127
149
  await this.teamProfileSynchronizer.run();
128
150
  }
@@ -135,7 +157,9 @@ class DaemonContext {
135
157
  this.teamProfileSynchronizer.destroy(),
136
158
  this.scheduledActionProcessor.destroy(),
137
159
  this.strikeExpiryProcessor.destroy(),
160
+ this.queueRouter.destroy(),
138
161
  this.verificationListener?.stop(),
162
+ this.statsComputer?.destroy(),
139
163
  ]);
140
164
  }
141
165
  finally {
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/daemon/context.ts"],"names":[],"mappings":"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","sourcesContent":["import { AtpAgent } from '@atproto/api'\nimport { allFulfilled } from '@atproto/common'\nimport { Keypair, Secp256k1Keypair } from '@atproto/crypto'\nimport { IdResolver } from '@atproto/identity'\nimport { createServiceAuthHeaders } from '@atproto/xrpc-server'\nimport { BackgroundQueue } from '../background'\nimport { OzoneConfig, OzoneSecrets } from '../config'\nimport { Database } from '../db'\nimport { ModerationService } from '../mod-service'\nimport { StrikeService } from '../mod-service/strike'\nimport { ScheduledActionService } from '../scheduled-action/service'\nimport { SettingService } from '../setting/service'\nimport { TeamService } from '../team'\nimport { getSigningKeyId } from '../util'\nimport { EventPusher } from './event-pusher'\nimport { EventReverser } from './event-reverser'\nimport { MaterializedViewRefresher } from './materialized-view-refresher'\nimport { ScheduledActionProcessor } from './scheduled-action-processor'\nimport { StrikeExpiryProcessor } from './strike-expiry-processor'\nimport { TeamProfileSynchronizer } from './team-profile-synchronizer'\nimport { VerificationListener } from './verification-listener'\n\nexport type DaemonContextOptions = {\n db: Database\n cfg: OzoneConfig\n backgroundQueue: BackgroundQueue\n signingKey: Keypair\n eventPusher: EventPusher\n eventReverser: EventReverser\n materializedViewRefresher: MaterializedViewRefresher\n teamProfileSynchronizer: TeamProfileSynchronizer\n scheduledActionProcessor: ScheduledActionProcessor\n strikeExpiryProcessor: StrikeExpiryProcessor\n verificationListener?: VerificationListener\n}\n\nexport class DaemonContext {\n constructor(private opts: DaemonContextOptions) {}\n\n static async fromConfig(\n cfg: OzoneConfig,\n secrets: OzoneSecrets,\n overrides?: Partial<DaemonContextOptions>,\n ): Promise<DaemonContext> {\n const db = new Database({\n url: cfg.db.postgresUrl,\n schema: cfg.db.postgresSchema,\n })\n const signingKey = await Secp256k1Keypair.import(secrets.signingKeyHex)\n const signingKeyId = await getSigningKeyId(db, signingKey.did())\n\n const idResolver = new IdResolver({\n plcUrl: cfg.identity.plcUrl,\n })\n\n const appviewAgent = new AtpAgent({ service: cfg.appview.url })\n const createAuthHeaders = (aud: string, lxm: string) =>\n createServiceAuthHeaders({\n iss: `${cfg.service.did}#atproto_labeler`,\n aud,\n lxm,\n keypair: signingKey,\n })\n\n const eventPusher = new EventPusher(db, createAuthHeaders, {\n appview: cfg.appview.pushEvents ? cfg.appview : undefined,\n pds: cfg.pds ?? undefined,\n })\n\n const backgroundQueue = new BackgroundQueue(db)\n\n const settingService = SettingService.creator()\n const strikeService = StrikeService.creator()\n const modService = ModerationService.creator(\n signingKey,\n signingKeyId,\n cfg,\n backgroundQueue,\n idResolver,\n eventPusher,\n appviewAgent,\n createAuthHeaders,\n strikeService,\n )\n const scheduledActionService = ScheduledActionService.creator()\n const teamService = TeamService.creator(\n appviewAgent,\n cfg.appview.did,\n createAuthHeaders,\n )\n const teamProfileSynchronizer = new TeamProfileSynchronizer(\n backgroundQueue,\n teamService(db),\n cfg.db.teamProfileRefreshIntervalMs,\n )\n\n const eventReverser = new EventReverser(db, modService)\n\n const materializedViewRefresher = new MaterializedViewRefresher(\n backgroundQueue,\n cfg.db.materializedViewRefreshIntervalMs,\n )\n\n const scheduledActionProcessor = new ScheduledActionProcessor(\n db,\n cfg.service.did,\n settingService,\n modService,\n scheduledActionService,\n )\n\n const strikeExpiryProcessor = new StrikeExpiryProcessor(db, strikeService)\n\n // Only spawn the listener if verifier config exists and a jetstream URL is provided\n const verificationListener =\n cfg.verifier && cfg.jetstreamUrl\n ? new VerificationListener(\n db,\n cfg.jetstreamUrl,\n cfg.verifier?.issuersToIndex,\n )\n : undefined\n\n return new DaemonContext({\n db,\n cfg,\n backgroundQueue,\n signingKey,\n eventPusher,\n eventReverser,\n materializedViewRefresher,\n teamProfileSynchronizer,\n scheduledActionProcessor,\n strikeExpiryProcessor,\n verificationListener,\n ...(overrides ?? {}),\n })\n }\n\n get db(): Database {\n return this.opts.db\n }\n\n get cfg(): OzoneConfig {\n return this.opts.cfg\n }\n\n get backgroundQueue(): BackgroundQueue {\n return this.opts.backgroundQueue\n }\n\n get eventPusher(): EventPusher {\n return this.opts.eventPusher\n }\n\n get eventReverser(): EventReverser {\n return this.opts.eventReverser\n }\n\n get materializedViewRefresher(): MaterializedViewRefresher {\n return this.opts.materializedViewRefresher\n }\n\n get teamProfileSynchronizer(): TeamProfileSynchronizer {\n return this.opts.teamProfileSynchronizer\n }\n\n get scheduledActionProcessor(): ScheduledActionProcessor {\n return this.opts.scheduledActionProcessor\n }\n\n get strikeExpiryProcessor(): StrikeExpiryProcessor {\n return this.opts.strikeExpiryProcessor\n }\n\n get verificationListener(): VerificationListener | undefined {\n return this.opts.verificationListener\n }\n\n async start() {\n this.eventPusher.start()\n this.eventReverser.start()\n this.materializedViewRefresher.start()\n this.teamProfileSynchronizer.start()\n this.scheduledActionProcessor.start()\n this.strikeExpiryProcessor.start()\n this.verificationListener?.start()\n }\n\n async processAll() {\n // Sequential because the materialized view values depend on the events.\n await this.eventPusher.processAll()\n await this.materializedViewRefresher.run()\n await this.teamProfileSynchronizer.run()\n }\n\n async destroy() {\n try {\n await allFulfilled([\n this.eventReverser.destroy(),\n this.eventPusher.destroy(),\n this.materializedViewRefresher.destroy(),\n this.teamProfileSynchronizer.destroy(),\n this.scheduledActionProcessor.destroy(),\n this.strikeExpiryProcessor.destroy(),\n this.verificationListener?.stop(),\n ])\n } finally {\n await this.backgroundQueue.destroy()\n await this.db.close()\n }\n }\n}\n"]}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/daemon/context.ts"],"names":[],"mappings":"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","sourcesContent":["import { AtpAgent } from '@atproto/api'\nimport { allFulfilled } from '@atproto/common'\nimport { Keypair, Secp256k1Keypair } from '@atproto/crypto'\nimport { IdResolver } from '@atproto/identity'\nimport { createServiceAuthHeaders } from '@atproto/xrpc-server'\nimport { BackgroundQueue } from '../background'\nimport { OzoneConfig, OzoneSecrets } from '../config'\nimport { Database } from '../db'\nimport { ModerationService } from '../mod-service'\nimport { StrikeService } from '../mod-service/strike'\nimport { QueueService } from '../queue/service'\nimport { ReportStatsService } from '../report/stats'\nimport { ScheduledActionService } from '../scheduled-action/service'\nimport { SettingService } from '../setting/service'\nimport { TeamService } from '../team'\nimport { getSigningKeyId } from '../util'\nimport { EventPusher } from './event-pusher'\nimport { EventReverser } from './event-reverser'\nimport { MaterializedViewRefresher } from './materialized-view-refresher'\nimport { QueueRouter } from './queue-router'\nimport { ScheduledActionProcessor } from './scheduled-action-processor'\nimport { StatsComputer } from './stats-computer'\nimport { StrikeExpiryProcessor } from './strike-expiry-processor'\nimport { TeamProfileSynchronizer } from './team-profile-synchronizer'\nimport { VerificationListener } from './verification-listener'\n\nexport type DaemonContextOptions = {\n db: Database\n cfg: OzoneConfig\n backgroundQueue: BackgroundQueue\n signingKey: Keypair\n eventPusher: EventPusher\n eventReverser: EventReverser\n materializedViewRefresher: MaterializedViewRefresher\n teamProfileSynchronizer: TeamProfileSynchronizer\n scheduledActionProcessor: ScheduledActionProcessor\n strikeExpiryProcessor: StrikeExpiryProcessor\n queueRouter: QueueRouter\n verificationListener?: VerificationListener\n statsComputer?: StatsComputer\n}\n\nexport class DaemonContext {\n constructor(private opts: DaemonContextOptions) {}\n\n static async fromConfig(\n cfg: OzoneConfig,\n secrets: OzoneSecrets,\n overrides?: Partial<DaemonContextOptions>,\n ): Promise<DaemonContext> {\n const db = new Database({\n url: cfg.db.postgresUrl,\n schema: cfg.db.postgresSchema,\n })\n const signingKey = await Secp256k1Keypair.import(secrets.signingKeyHex)\n const signingKeyId = await getSigningKeyId(db, signingKey.did())\n\n const idResolver = new IdResolver({\n plcUrl: cfg.identity.plcUrl,\n })\n\n const appviewAgent = new AtpAgent({ service: cfg.appview.url })\n const createAuthHeaders = (aud: string, lxm: string) =>\n createServiceAuthHeaders({\n iss: `${cfg.service.did}#atproto_labeler`,\n aud,\n lxm,\n keypair: signingKey,\n })\n\n const eventPusher = new EventPusher(db, createAuthHeaders, {\n appview: cfg.appview.pushEvents ? cfg.appview : undefined,\n pds: cfg.pds ?? undefined,\n })\n\n const backgroundQueue = new BackgroundQueue(db)\n\n const settingService = SettingService.creator()\n const strikeService = StrikeService.creator()\n const modService = ModerationService.creator(\n signingKey,\n signingKeyId,\n cfg,\n backgroundQueue,\n idResolver,\n eventPusher,\n appviewAgent,\n createAuthHeaders,\n strikeService,\n )\n const scheduledActionService = ScheduledActionService.creator()\n const teamService = TeamService.creator(\n appviewAgent,\n cfg.appview.did,\n createAuthHeaders,\n )\n const teamProfileSynchronizer = new TeamProfileSynchronizer(\n backgroundQueue,\n teamService(db),\n cfg.db.teamProfileRefreshIntervalMs,\n )\n\n const eventReverser = new EventReverser(db, modService)\n\n const materializedViewRefresher = new MaterializedViewRefresher(\n backgroundQueue,\n cfg.db.materializedViewRefreshIntervalMs,\n )\n\n const scheduledActionProcessor = new ScheduledActionProcessor(\n db,\n cfg.service.did,\n settingService,\n modService,\n scheduledActionService,\n )\n\n const strikeExpiryProcessor = new StrikeExpiryProcessor(db, strikeService)\n\n const queueService = QueueService.creator()\n const queueRouter = new QueueRouter(db, queueService)\n\n const reportStatsService = ReportStatsService.creator()\n const statsComputer = new StatsComputer(\n db,\n reportStatsService,\n cfg.stats.computerIntervalMinutes,\n )\n\n // Only spawn the listener if verifier config exists and a jetstream URL is provided\n const verificationListener =\n cfg.verifier && cfg.jetstreamUrl\n ? new VerificationListener(\n db,\n cfg.jetstreamUrl,\n cfg.verifier?.issuersToIndex,\n )\n : undefined\n\n return new DaemonContext({\n db,\n cfg,\n backgroundQueue,\n signingKey,\n eventPusher,\n eventReverser,\n materializedViewRefresher,\n teamProfileSynchronizer,\n scheduledActionProcessor,\n strikeExpiryProcessor,\n queueRouter,\n verificationListener,\n statsComputer,\n ...(overrides ?? {}),\n })\n }\n\n get db(): Database {\n return this.opts.db\n }\n\n get cfg(): OzoneConfig {\n return this.opts.cfg\n }\n\n get backgroundQueue(): BackgroundQueue {\n return this.opts.backgroundQueue\n }\n\n get eventPusher(): EventPusher {\n return this.opts.eventPusher\n }\n\n get eventReverser(): EventReverser {\n return this.opts.eventReverser\n }\n\n get materializedViewRefresher(): MaterializedViewRefresher {\n return this.opts.materializedViewRefresher\n }\n\n get teamProfileSynchronizer(): TeamProfileSynchronizer {\n return this.opts.teamProfileSynchronizer\n }\n\n get scheduledActionProcessor(): ScheduledActionProcessor {\n return this.opts.scheduledActionProcessor\n }\n\n get strikeExpiryProcessor(): StrikeExpiryProcessor {\n return this.opts.strikeExpiryProcessor\n }\n\n get queueRouter(): QueueRouter {\n return this.opts.queueRouter\n }\n\n get verificationListener(): VerificationListener | undefined {\n return this.opts.verificationListener\n }\n\n get statsComputer(): StatsComputer | undefined {\n return this.opts.statsComputer\n }\n\n async start() {\n this.eventPusher.start()\n this.eventReverser.start()\n this.materializedViewRefresher.start()\n this.teamProfileSynchronizer.start()\n this.scheduledActionProcessor.start()\n this.strikeExpiryProcessor.start()\n this.queueRouter.start()\n this.verificationListener?.start()\n this.statsComputer?.start()\n }\n\n async processAll() {\n // Sequential because the materialized view values depend on the events.\n await this.eventPusher.processAll()\n // Drain pending modEventReport rows into the report table so test code\n // that calls processAll() after creating reports sees the report rows\n // immediately (in production this happens via the 1-min poll).\n await this.queueRouter.routeReports()\n await this.materializedViewRefresher.run()\n await this.teamProfileSynchronizer.run()\n }\n\n async destroy() {\n try {\n await allFulfilled([\n this.eventReverser.destroy(),\n this.eventPusher.destroy(),\n this.materializedViewRefresher.destroy(),\n this.teamProfileSynchronizer.destroy(),\n this.scheduledActionProcessor.destroy(),\n this.strikeExpiryProcessor.destroy(),\n this.queueRouter.destroy(),\n this.verificationListener?.stop(),\n this.statsComputer?.destroy(),\n ])\n } finally {\n await this.backgroundQueue.destroy()\n await this.db.close()\n }\n }\n}\n"]}
@@ -12,5 +12,6 @@ export declare class EventReverser {
12
12
  destroy(): Promise<void>;
13
13
  revertState(subject: ReversalSubject): Promise<void>;
14
14
  findAndRevertDueActions(): Promise<void>;
15
+ findAndRevertExpiredTags(): Promise<void>;
15
16
  }
16
17
  //# sourceMappingURL=event-reverser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"event-reverser.d.ts","sourceRoot":"","sources":["../../src/daemon/event-reverser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEhC,OAAO,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAE1E,qBAAa,aAAa;IAMtB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,UAAU;IANpB,SAAS,UAAQ;IACjB,eAAe,EAAE,OAAO,CAAC,IAAI,CAAC,CAAoB;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC,OAAO,CAAA;gBAGZ,EAAE,EAAE,QAAQ,EACZ,UAAU,EAAE,wBAAwB;IAG9C,KAAK;IAIL,IAAI;IAWE,OAAO;IASP,WAAW,CAAC,OAAO,EAAE,eAAe;IAkBpC,uBAAuB;CAS9B"}
1
+ {"version":3,"file":"event-reverser.d.ts","sourceRoot":"","sources":["../../src/daemon/event-reverser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEhC,OAAO,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAO1E,qBAAa,aAAa;IAMtB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,UAAU;IANpB,SAAS,UAAQ;IACjB,eAAe,EAAE,OAAO,CAAC,IAAI,CAAC,CAAoB;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC,OAAO,CAAA;gBAGZ,EAAE,EAAE,QAAQ,EACZ,UAAU,EAAE,wBAAwB;IAG9C,KAAK;IAIL,IAAI;IAWE,OAAO;IASP,WAAW,CAAC,OAAO,EAAE,eAAe;IAkBpC,uBAAuB;IAavB,wBAAwB;CAwC/B"}