@atproto/ozone 0.2.3 → 0.2.5

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 (166) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/api/health.d.ts.map +1 -1
  3. package/dist/api/label/queryLabels.d.ts.map +1 -1
  4. package/dist/api/label/queryLabels.js +13 -21
  5. package/dist/api/label/queryLabels.js.map +1 -1
  6. package/dist/api/moderation/util.d.ts.map +1 -1
  7. package/dist/api/util.d.ts +2 -2
  8. package/dist/api/util.d.ts.map +1 -1
  9. package/dist/api/well-known.d.ts.map +1 -1
  10. package/dist/assignment/index.d.ts.map +1 -1
  11. package/dist/assignment/index.js +9 -12
  12. package/dist/assignment/index.js.map +1 -1
  13. package/dist/auth-verifier.d.ts.map +1 -1
  14. package/dist/background.d.ts.map +1 -1
  15. package/dist/background.js.map +1 -1
  16. package/dist/communication-service/template.d.ts.map +1 -1
  17. package/dist/communication-service/template.js.map +1 -1
  18. package/dist/communication-service/util.d.ts.map +1 -1
  19. package/dist/config/config.d.ts.map +1 -1
  20. package/dist/config/secrets.d.ts.map +1 -1
  21. package/dist/context.d.ts.map +1 -1
  22. package/dist/context.js.map +1 -1
  23. package/dist/daemon/blob-diverter.d.ts.map +1 -1
  24. package/dist/daemon/blob-diverter.js.map +1 -1
  25. package/dist/daemon/context.d.ts.map +1 -1
  26. package/dist/daemon/context.js.map +1 -1
  27. package/dist/daemon/event-pusher.d.ts +7 -1
  28. package/dist/daemon/event-pusher.d.ts.map +1 -1
  29. package/dist/daemon/event-reverser.d.ts.map +1 -1
  30. package/dist/daemon/index.d.ts.map +1 -1
  31. package/dist/daemon/index.js.map +1 -1
  32. package/dist/daemon/materialized-view-refresher.d.ts.map +1 -1
  33. package/dist/daemon/queue-router.d.ts.map +1 -1
  34. package/dist/daemon/scheduled-action-processor.d.ts.map +1 -1
  35. package/dist/daemon/stats-computer.d.ts.map +1 -1
  36. package/dist/daemon/strike-expiry-processor.d.ts.map +1 -1
  37. package/dist/daemon/team-profile-synchronizer.d.ts.map +1 -1
  38. package/dist/daemon/verification-listener.d.ts.map +1 -1
  39. package/dist/db/index.d.ts +4 -5
  40. package/dist/db/index.d.ts.map +1 -1
  41. package/dist/db/index.js +2 -1
  42. package/dist/db/index.js.map +1 -1
  43. package/dist/db/migrations/20241220T144630860Z-stats-materialized-views.d.ts +1 -2
  44. package/dist/db/migrations/20241220T144630860Z-stats-materialized-views.d.ts.map +1 -1
  45. package/dist/db/migrations/20241220T144630860Z-stats-materialized-views.js.map +1 -1
  46. package/dist/db/migrations/20250718T150931000Z-update-appeal-reason-stats.d.ts +1 -2
  47. package/dist/db/migrations/20250718T150931000Z-update-appeal-reason-stats.d.ts.map +1 -1
  48. package/dist/db/migrations/20250718T150931000Z-update-appeal-reason-stats.js.map +1 -1
  49. package/dist/db/migrations/provider.d.ts +2 -1
  50. package/dist/db/migrations/provider.d.ts.map +1 -1
  51. package/dist/db/migrations/provider.js.map +1 -1
  52. package/dist/db/pagination.d.ts +5 -4
  53. package/dist/db/pagination.d.ts.map +1 -1
  54. package/dist/db/pagination.js +4 -4
  55. package/dist/db/pagination.js.map +1 -1
  56. package/dist/db/schema/index.d.ts.map +1 -1
  57. package/dist/db/types.d.ts +1 -1
  58. package/dist/db/types.d.ts.map +1 -1
  59. package/dist/db/types.js.map +1 -1
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/jetstream/service.d.ts.map +1 -1
  62. package/dist/lexicon/index.d.ts +2 -0
  63. package/dist/lexicon/index.d.ts.map +1 -1
  64. package/dist/lexicon/index.js +4 -0
  65. package/dist/lexicon/index.js.map +1 -1
  66. package/dist/lexicon/lexicons.d.ts +17160 -17038
  67. package/dist/lexicon/lexicons.d.ts.map +1 -1
  68. package/dist/lexicon/lexicons.js +68 -1
  69. package/dist/lexicon/lexicons.js.map +1 -1
  70. package/dist/lexicon/types/chat/bsky/convo/defs.d.ts +11 -0
  71. package/dist/lexicon/types/chat/bsky/convo/defs.d.ts.map +1 -1
  72. package/dist/lexicon/types/chat/bsky/convo/defs.js +7 -0
  73. package/dist/lexicon/types/chat/bsky/convo/defs.js.map +1 -1
  74. package/dist/lexicon/types/chat/bsky/convo/getUnreadCounts.d.ts +25 -0
  75. package/dist/lexicon/types/chat/bsky/convo/getUnreadCounts.d.ts.map +1 -0
  76. package/dist/lexicon/types/chat/bsky/convo/getUnreadCounts.js +5 -0
  77. package/dist/lexicon/types/chat/bsky/convo/getUnreadCounts.js.map +1 -0
  78. package/dist/lexicon/types/chat/bsky/convo/sendMessage.d.ts +1 -1
  79. package/dist/lexicon/types/chat/bsky/convo/sendMessage.d.ts.map +1 -1
  80. package/dist/lexicon/types/chat/bsky/convo/sendMessage.js.map +1 -1
  81. package/dist/lexicon/types/chat/bsky/convo/sendMessageBatch.d.ts +1 -1
  82. package/dist/lexicon/types/chat/bsky/convo/sendMessageBatch.d.ts.map +1 -1
  83. package/dist/lexicon/types/chat/bsky/convo/sendMessageBatch.js.map +1 -1
  84. package/dist/lexicon/util.d.ts.map +1 -1
  85. package/dist/mod-service/index.d.ts +38 -38
  86. package/dist/mod-service/index.d.ts.map +1 -1
  87. package/dist/mod-service/index.js +28 -52
  88. package/dist/mod-service/index.js.map +1 -1
  89. package/dist/mod-service/profile.d.ts.map +1 -1
  90. package/dist/mod-service/report.d.ts.map +1 -1
  91. package/dist/mod-service/report.js.map +1 -1
  92. package/dist/mod-service/status.d.ts +60 -165
  93. package/dist/mod-service/status.d.ts.map +1 -1
  94. package/dist/mod-service/strike.d.ts.map +1 -1
  95. package/dist/mod-service/strike.js.map +1 -1
  96. package/dist/mod-service/subject.d.ts +4 -4
  97. package/dist/mod-service/subject.d.ts.map +1 -1
  98. package/dist/mod-service/util.d.ts +1 -1
  99. package/dist/mod-service/util.d.ts.map +1 -1
  100. package/dist/mod-service/views.d.ts.map +1 -1
  101. package/dist/mod-service/views.js +7 -11
  102. package/dist/mod-service/views.js.map +1 -1
  103. package/dist/queue/service.d.ts.map +1 -1
  104. package/dist/queue/service.js +1 -3
  105. package/dist/queue/service.js.map +1 -1
  106. package/dist/report/activity.d.ts +17 -6
  107. package/dist/report/activity.d.ts.map +1 -1
  108. package/dist/report/handle-report-update.d.ts.map +1 -1
  109. package/dist/report/handle-report-update.js.map +1 -1
  110. package/dist/report/stats.d.ts.map +1 -1
  111. package/dist/report/stats.js.map +1 -1
  112. package/dist/report/views.d.ts +2 -2
  113. package/dist/report/views.d.ts.map +1 -1
  114. package/dist/safelink/service.d.ts +3 -3
  115. package/dist/safelink/service.d.ts.map +1 -1
  116. package/dist/safelink/service.js.map +1 -1
  117. package/dist/scheduled-action/service.d.ts.map +1 -1
  118. package/dist/scheduled-action/service.js +16 -20
  119. package/dist/scheduled-action/service.js.map +1 -1
  120. package/dist/sequencer/outbox.d.ts.map +1 -1
  121. package/dist/sequencer/outbox.js.map +1 -1
  122. package/dist/sequencer/sequencer.d.ts.map +1 -1
  123. package/dist/sequencer/sequencer.js.map +1 -1
  124. package/dist/set/service.d.ts +10 -1
  125. package/dist/set/service.d.ts.map +1 -1
  126. package/dist/set/service.js +5 -2
  127. package/dist/set/service.js.map +1 -1
  128. package/dist/setting/service.d.ts.map +1 -1
  129. package/dist/setting/service.js.map +1 -1
  130. package/dist/tag-service/content-tagger.d.ts.map +1 -1
  131. package/dist/tag-service/content-tagger.js.map +1 -1
  132. package/dist/tag-service/embed-tagger.d.ts.map +1 -1
  133. package/dist/tag-service/index.d.ts.map +1 -1
  134. package/dist/tag-service/index.js.map +1 -1
  135. package/dist/tag-service/language-tagger.d.ts.map +1 -1
  136. package/dist/tag-service/util.d.ts.map +1 -1
  137. package/dist/team/index.d.ts.map +1 -1
  138. package/dist/team/index.js +5 -4
  139. package/dist/team/index.js.map +1 -1
  140. package/dist/util.d.ts.map +1 -1
  141. package/dist/verification/issuer.d.ts +14 -4
  142. package/dist/verification/issuer.d.ts.map +1 -1
  143. package/dist/verification/service.d.ts +18 -6
  144. package/dist/verification/service.d.ts.map +1 -1
  145. package/dist/verification/service.js +1 -1
  146. package/dist/verification/service.js.map +1 -1
  147. package/dist/verification/util.d.ts.map +1 -1
  148. package/package.json +15 -16
  149. package/src/api/label/queryLabels.ts +11 -14
  150. package/src/assignment/index.ts +15 -18
  151. package/src/db/index.ts +1 -1
  152. package/src/db/migrations/20241220T144630860Z-stats-materialized-views.ts +1 -2
  153. package/src/db/migrations/20250718T150931000Z-update-appeal-reason-stats.ts +1 -2
  154. package/src/db/migrations/provider.ts +2 -1
  155. package/src/db/pagination.ts +18 -18
  156. package/src/db/types.ts +3 -1
  157. package/src/mod-service/index.ts +78 -71
  158. package/src/mod-service/report.ts +5 -3
  159. package/src/mod-service/views.ts +16 -16
  160. package/src/queue/service.ts +5 -5
  161. package/src/report/stats.ts +5 -3
  162. package/src/scheduled-action/service.ts +22 -20
  163. package/src/set/service.ts +17 -14
  164. package/src/team/index.ts +6 -5
  165. package/src/verification/service.ts +2 -2
  166. package/tsconfig.build.tsbuildinfo +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/mod-service/report.ts"],"names":[],"mappings":"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","sourcesContent":["import { sql } from 'kysely'\nimport { AtUri } from '@atproto/syntax'\nimport { Database } from '../db/index.js'\nimport { Report } from '../db/schema/report.js'\nimport { QueryParams } from '../lexicon/types/tools/ozone/report/queryReports.js'\nimport {\n AlreadyInTargetState,\n InvalidStateTransition,\n handleReportUpdate,\n} from '../report/handle-report-update.js'\n\nexport type ReportWithEvent = Omit<Report, 'id'> & {\n id: number\n subjectDid: string\n subjectUri: string | null\n subjectCid: string | null\n reportedBy: string\n comment: string | null\n meta: Record<string, string | boolean | number> | null\n}\n\nexport type QueryReportsResult = {\n reports: ReportWithEvent[]\n cursor: string | undefined\n}\nfunction reportQuery(db: Database) {\n return db.db\n .selectFrom('report as r')\n .innerJoin('moderation_event as me', 'me.id', 'r.eventId')\n .where('me.action', '=', 'tools.ozone.moderation.defs#modEventReport')\n}\n\nexport async function queryReports(\n db: Database,\n params: QueryParams,\n): Promise<QueryReportsResult> {\n let builder = reportQuery(db)\n\n if (params.queueId !== undefined) {\n builder = builder.where('r.queueId', '=', params.queueId)\n }\n\n builder = builder.where('r.status', '=', params.status)\n\n if (params.subject) {\n const isRecord = params.subject.startsWith('at://')\n if (isRecord) {\n const uri = new AtUri(params.subject)\n builder = builder\n .where('r.did', '=', uri.host)\n .where('r.recordPath', '=', `${uri.collection}/${uri.rkey}`)\n } else {\n builder = builder\n .where('r.did', '=', params.subject)\n .where('r.recordPath', '=', '')\n }\n }\n\n if (params.did) {\n builder = builder.where('r.did', '=', params.did)\n }\n\n if (params.subjectType) {\n const normalizedType = params.subjectType as 'account' | 'record'\n if (normalizedType === 'account') {\n builder = builder.where('r.recordPath', '=', '')\n } else if (normalizedType === 'record') {\n builder = builder.where('r.recordPath', '!=', '')\n }\n }\n\n if (params.collections?.length) {\n // Filter by collection prefix on recordPath (uses text_pattern_ops index)\n const collectionConditions = params.collections.map(\n (collection) => sql`r.\"recordPath\" LIKE ${`${collection}/%`}`,\n )\n builder = builder.where(sql`(${sql.join(collectionConditions, sql` OR `)})`)\n }\n\n if (params.reportTypes?.length) {\n builder = builder.where('r.reportType', 'in', params.reportTypes)\n }\n\n if (params.isMuted !== undefined) {\n builder = builder.where('r.isMuted', '=', params.isMuted)\n }\n\n if (params.reportedAfter) {\n builder = builder.where('r.createdAt', '>', params.reportedAfter)\n }\n\n if (params.reportedBefore) {\n builder = builder.where('r.createdAt', '<', params.reportedBefore)\n }\n\n if (params.assignedTo) {\n builder = builder.where('r.assignedTo', '=', params.assignedTo)\n }\n\n const sortField = params.sortField ?? 'createdAt'\n const sortDirection = params.sortDirection ?? 'desc'\n\n builder = builder\n .orderBy(\n sortField === 'updatedAt' ? 'r.updatedAt' : 'r.createdAt',\n sortDirection,\n )\n .orderBy('r.id', 'desc')\n\n const limit = params.limit ?? 50\n if (params.cursor) {\n const [sortValue, id] = params.cursor.split('::')\n const sortCol = sortField === 'updatedAt' ? 'r.updatedAt' : 'r.createdAt'\n if (sortDirection === 'desc') {\n builder = builder.where(sql`(\n ${sql.ref(sortCol)} < ${sortValue}\n OR (${sql.ref(sortCol)} = ${sortValue} AND r.id < ${Number(id)})\n )`)\n } else {\n builder = builder.where(sql`(\n ${sql.ref(sortCol)} > ${sortValue}\n OR (${sql.ref(sortCol)} = ${sortValue} AND r.id > ${Number(id)})\n )`)\n }\n }\n\n const finalQuery = builder\n .selectAll('r')\n .select([\n 'me.subjectDid',\n 'me.subjectUri',\n 'me.subjectCid',\n 'me.createdBy as reportedBy',\n 'me.comment',\n 'me.meta',\n ])\n .limit(limit + 1)\n\n const reports = await finalQuery.execute()\n\n let cursor: string | undefined\n const hasMore = reports.length > limit\n if (hasMore) {\n const last = reports[limit - 1]\n const sortValue =\n sortField === 'updatedAt' ? last.updatedAt : last.createdAt\n cursor = `${sortValue}::${last.id}`\n }\n\n const reportsToReturn = hasMore ? reports.slice(0, limit) : reports\n\n return {\n reports: reportsToReturn,\n cursor,\n }\n}\n\nexport async function getReportById(\n db: Database,\n id: number,\n): Promise<ReportWithEvent | undefined> {\n return reportQuery(db)\n .where('r.id', '=', id)\n .selectAll('r')\n .select([\n 'me.subjectDid',\n 'me.subjectUri',\n 'me.subjectCid',\n 'me.createdBy as reportedBy',\n 'me.comment',\n 'me.meta',\n ])\n .executeTakeFirst()\n}\n\nexport async function getLatestReport(\n db: Database,\n): Promise<ReportWithEvent | undefined> {\n return reportQuery(db)\n .selectAll('r')\n .select([\n 'me.subjectDid',\n 'me.subjectUri',\n 'me.subjectCid',\n 'me.createdBy as reportedBy',\n 'me.comment',\n 'me.meta',\n ])\n .orderBy('r.id', 'desc')\n .limit(1)\n .executeTakeFirst()\n}\n\nexport type FindReportsForSubjectParams = {\n subjectDid: string\n subjectUri?: string | null\n reportIds?: number[]\n reportTypes?: string[]\n targetAll?: boolean\n}\n\nexport type ReportResult = {\n id: number\n eventId: number\n queueId: number | null\n queuedAt: string | null\n actionEventIds: number[] | null\n actionNote: string | null\n isMuted: boolean\n status: string\n createdAt: string\n updatedAt: string\n}\n\nexport async function findReportsForSubject(\n db: Database,\n params: FindReportsForSubjectParams,\n): Promise<ReportResult[]> {\n let builder = reportQuery(db).where('r.did', '=', params.subjectDid)\n\n // Filter by subject URI (if provided, match exactly; if null/undefined, match repo-level)\n if (params.subjectUri) {\n const uri = new AtUri(params.subjectUri)\n builder = builder.where(\n 'r.recordPath',\n '=',\n `${uri.collection}/${uri.rkey}`,\n )\n } else {\n builder = builder.where('r.recordPath', '=', '')\n }\n\n if (params.targetAll) {\n // Target all open/escalated reports on the subject\n builder = builder.where('r.status', 'not in', ['closed'])\n } else if (params.reportIds?.length) {\n // Target specific report IDs — still enforce state transition rules\n builder = builder\n .where('r.id', 'in', params.reportIds)\n .where('r.status', 'not in', ['closed'])\n } else if (params.reportTypes?.length) {\n // Target reports matching specific report types\n builder = builder\n .where('r.reportType', 'in', params.reportTypes)\n .where('r.status', 'not in', ['closed'])\n } else {\n // No targeting criteria provided\n return []\n }\n\n const reports = await builder.selectAll('r').execute()\n\n return reports\n}\n\nexport type ProcessReportActionParams = {\n db: Database\n reportAction: {\n ids?: number[]\n types?: string[]\n all?: boolean\n note?: string\n }\n subjectDid: string\n subjectUri: string | null\n eventId: number\n eventType: string\n createdBy: string\n}\n\n/**\n * Validates and processes a report action by:\n * 1. Finding matching reports based on targeting criteria\n * 2. Validating that specified report IDs exist and belong to the subject\n * 3. Bulk-updating reports with the action event ID, note, and status\n * 4. Bulk-inserting a report_activity row for each updated report\n *\n * @throws InvalidRequestError if validation fails\n */\nexport async function processReportAction(\n params: ProcessReportActionParams,\n): Promise<number> {\n const {\n db,\n reportAction,\n subjectDid,\n subjectUri,\n eventId,\n eventType,\n createdBy,\n } = params\n\n // Find reports matching the criteria\n const matchingReports = await findReportsForSubject(db, {\n subjectDid,\n subjectUri,\n reportIds: reportAction.ids,\n reportTypes: reportAction.types,\n targetAll: reportAction.all,\n })\n\n // Validate that reports were found for ids and types\n if (matchingReports.length === 0) {\n if (reportAction.ids?.length) {\n throw new Error(\n 'No matching reports found for the specified report IDs on this subject',\n )\n } else if (reportAction.types?.length) {\n throw new Error(\n 'No matching reports found for the specified report types on this subject',\n )\n }\n // For 'all', it's okay if no reports exist\n return 0\n }\n\n // Validate that all specified report IDs were found\n if (reportAction.ids?.length) {\n const foundIds = new Set(matchingReports.map((r) => r.id))\n const requestedIds = new Set(reportAction.ids)\n const missingIds = [...requestedIds].filter((id) => !foundIds.has(id))\n\n if (missingIds.length > 0) {\n throw new Error(\n `Report IDs ${missingIds.join(', ')} do not exist, are already closed, or do not belong to this subject`,\n )\n }\n }\n\n // Determine per-report transitions via the pure state machine.\n // Skip reports whose current status doesn't allow the transition.\n const validUpdates: {\n id: number\n nextStatus: string\n activityType: string\n previousStatus: string\n }[] = []\n\n for (const report of matchingReports) {\n try {\n const result = handleReportUpdate(report.status, {\n type: 'event',\n eventType,\n })\n if (result.nextStatus && result.activity) {\n validUpdates.push({\n id: report.id,\n nextStatus: result.nextStatus,\n activityType: result.activity.activityType,\n previousStatus: result.activity.previousStatus,\n })\n }\n } catch (err) {\n if (\n err instanceof AlreadyInTargetState ||\n err instanceof InvalidStateTransition\n ) {\n // Skip reports that can't transition — silent per design\n continue\n }\n throw err\n }\n }\n\n if (!validUpdates.length) {\n return 0\n }\n\n const now = new Date().toISOString()\n const updateIds = validUpdates.map((u) => u.id)\n\n // Bulk UPDATE reports that passed validation\n // All valid reports share the same target status since they come from the\n // same event type, so a single UPDATE is sufficient.\n const status = validUpdates[0].nextStatus\n const closedAt = status === 'closed' ? now : null\n await db.db\n .updateTable('report')\n .set({\n actionEventIds: sql`COALESCE(\"actionEventIds\", '[]'::jsonb) || ${JSON.stringify(eventId)}::jsonb`,\n actionNote: reportAction.note ?? null,\n status,\n updatedAt: now,\n closedAt,\n })\n .where('id', 'in', updateIds)\n .execute()\n\n // Bulk INSERT one activity per updated report\n await db.db\n .insertInto('report_activity')\n .values(\n validUpdates.map((u) => ({\n reportId: u.id,\n activityType: u.activityType,\n previousStatus: u.previousStatus,\n internalNote: null,\n publicNote: reportAction.note ?? null,\n meta: null,\n isAutomated: false,\n createdBy,\n createdAt: now,\n })),\n )\n .execute()\n\n return validUpdates.length\n}\n"]}
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/mod-service/report.ts"],"names":[],"mappings":"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","sourcesContent":["import { sql } from 'kysely'\nimport { AtUri } from '@atproto/syntax'\nimport { Database } from '../db/index.js'\nimport { Report } from '../db/schema/report.js'\nimport { QueryParams } from '../lexicon/types/tools/ozone/report/queryReports.js'\nimport {\n AlreadyInTargetState,\n InvalidStateTransition,\n handleReportUpdate,\n} from '../report/handle-report-update.js'\n\nexport type ReportWithEvent = Omit<Report, 'id'> & {\n id: number\n subjectDid: string\n subjectUri: string | null\n subjectCid: string | null\n reportedBy: string\n comment: string | null\n meta: Record<string, string | boolean | number> | null\n}\n\nexport type QueryReportsResult = {\n reports: ReportWithEvent[]\n cursor: string | undefined\n}\nfunction reportQuery(db: Database) {\n return db.db\n .selectFrom('report as r')\n .innerJoin('moderation_event as me', 'me.id', 'r.eventId')\n .where('me.action', '=', 'tools.ozone.moderation.defs#modEventReport')\n}\n\nexport async function queryReports(\n db: Database,\n params: QueryParams,\n): Promise<QueryReportsResult> {\n let builder = reportQuery(db)\n\n if (params.queueId !== undefined) {\n builder = builder.where('r.queueId', '=', params.queueId)\n }\n\n builder = builder.where('r.status', '=', params.status)\n\n if (params.subject) {\n const isRecord = params.subject.startsWith('at://')\n if (isRecord) {\n const uri = new AtUri(params.subject)\n builder = builder\n .where('r.did', '=', uri.host)\n .where('r.recordPath', '=', `${uri.collection}/${uri.rkey}`)\n } else {\n builder = builder\n .where('r.did', '=', params.subject)\n .where('r.recordPath', '=', '')\n }\n }\n\n if (params.did) {\n builder = builder.where('r.did', '=', params.did)\n }\n\n if (params.subjectType) {\n const normalizedType = params.subjectType as 'account' | 'record'\n if (normalizedType === 'account') {\n builder = builder.where('r.recordPath', '=', '')\n } else if (normalizedType === 'record') {\n builder = builder.where('r.recordPath', '!=', '')\n }\n }\n\n if (params.collections?.length) {\n // Filter by collection prefix on recordPath (uses text_pattern_ops index)\n const collectionConditions = params.collections.map(\n (collection) => sql`r.\"recordPath\" LIKE ${`${collection}/%`}`,\n )\n builder = builder.where(\n sql<boolean>`(${sql.join(collectionConditions, sql` OR `)})`,\n )\n }\n\n if (params.reportTypes?.length) {\n builder = builder.where('r.reportType', 'in', params.reportTypes)\n }\n\n if (params.isMuted !== undefined) {\n builder = builder.where('r.isMuted', '=', params.isMuted)\n }\n\n if (params.reportedAfter) {\n builder = builder.where('r.createdAt', '>', params.reportedAfter)\n }\n\n if (params.reportedBefore) {\n builder = builder.where('r.createdAt', '<', params.reportedBefore)\n }\n\n if (params.assignedTo) {\n builder = builder.where('r.assignedTo', '=', params.assignedTo)\n }\n\n const sortField = params.sortField ?? 'createdAt'\n const sortDirection = params.sortDirection ?? 'desc'\n\n builder = builder\n .orderBy(\n sortField === 'updatedAt' ? 'r.updatedAt' : 'r.createdAt',\n sortDirection,\n )\n .orderBy('r.id', 'desc')\n\n const limit = params.limit ?? 50\n if (params.cursor) {\n const [sortValue, id] = params.cursor.split('::')\n const sortCol = sortField === 'updatedAt' ? 'r.updatedAt' : 'r.createdAt'\n if (sortDirection === 'desc') {\n builder = builder.where(sql<boolean>`(\n ${sql.ref(sortCol)} < ${sortValue}\n OR (${sql.ref(sortCol)} = ${sortValue} AND r.id < ${Number(id)})\n )`)\n } else {\n builder = builder.where(sql<boolean>`(\n ${sql.ref(sortCol)} > ${sortValue}\n OR (${sql.ref(sortCol)} = ${sortValue} AND r.id > ${Number(id)})\n )`)\n }\n }\n\n const finalQuery = builder\n .selectAll('r')\n .select([\n 'me.subjectDid',\n 'me.subjectUri',\n 'me.subjectCid',\n 'me.createdBy as reportedBy',\n 'me.comment',\n 'me.meta',\n ])\n .limit(limit + 1)\n\n const reports = await finalQuery.execute()\n\n let cursor: string | undefined\n const hasMore = reports.length > limit\n if (hasMore) {\n const last = reports[limit - 1]\n const sortValue =\n sortField === 'updatedAt' ? last.updatedAt : last.createdAt\n cursor = `${sortValue}::${last.id}`\n }\n\n const reportsToReturn = hasMore ? reports.slice(0, limit) : reports\n\n return {\n reports: reportsToReturn,\n cursor,\n }\n}\n\nexport async function getReportById(\n db: Database,\n id: number,\n): Promise<ReportWithEvent | undefined> {\n return reportQuery(db)\n .where('r.id', '=', id)\n .selectAll('r')\n .select([\n 'me.subjectDid',\n 'me.subjectUri',\n 'me.subjectCid',\n 'me.createdBy as reportedBy',\n 'me.comment',\n 'me.meta',\n ])\n .executeTakeFirst()\n}\n\nexport async function getLatestReport(\n db: Database,\n): Promise<ReportWithEvent | undefined> {\n return reportQuery(db)\n .selectAll('r')\n .select([\n 'me.subjectDid',\n 'me.subjectUri',\n 'me.subjectCid',\n 'me.createdBy as reportedBy',\n 'me.comment',\n 'me.meta',\n ])\n .orderBy('r.id', 'desc')\n .limit(1)\n .executeTakeFirst()\n}\n\nexport type FindReportsForSubjectParams = {\n subjectDid: string\n subjectUri?: string | null\n reportIds?: number[]\n reportTypes?: string[]\n targetAll?: boolean\n}\n\nexport type ReportResult = {\n id: number\n eventId: number\n queueId: number | null\n queuedAt: string | null\n actionEventIds: number[] | null\n actionNote: string | null\n isMuted: boolean\n status: string\n createdAt: string\n updatedAt: string\n}\n\nexport async function findReportsForSubject(\n db: Database,\n params: FindReportsForSubjectParams,\n): Promise<ReportResult[]> {\n let builder = reportQuery(db).where('r.did', '=', params.subjectDid)\n\n // Filter by subject URI (if provided, match exactly; if null/undefined, match repo-level)\n if (params.subjectUri) {\n const uri = new AtUri(params.subjectUri)\n builder = builder.where(\n 'r.recordPath',\n '=',\n `${uri.collection}/${uri.rkey}`,\n )\n } else {\n builder = builder.where('r.recordPath', '=', '')\n }\n\n if (params.targetAll) {\n // Target all open/escalated reports on the subject\n builder = builder.where('r.status', 'not in', ['closed'])\n } else if (params.reportIds?.length) {\n // Target specific report IDs — still enforce state transition rules\n builder = builder\n .where('r.id', 'in', params.reportIds)\n .where('r.status', 'not in', ['closed'])\n } else if (params.reportTypes?.length) {\n // Target reports matching specific report types\n builder = builder\n .where('r.reportType', 'in', params.reportTypes)\n .where('r.status', 'not in', ['closed'])\n } else {\n // No targeting criteria provided\n return []\n }\n\n const reports = await builder.selectAll('r').execute()\n\n return reports\n}\n\nexport type ProcessReportActionParams = {\n db: Database\n reportAction: {\n ids?: number[]\n types?: string[]\n all?: boolean\n note?: string\n }\n subjectDid: string\n subjectUri: string | null\n eventId: number\n eventType: string\n createdBy: string\n}\n\n/**\n * Validates and processes a report action by:\n * 1. Finding matching reports based on targeting criteria\n * 2. Validating that specified report IDs exist and belong to the subject\n * 3. Bulk-updating reports with the action event ID, note, and status\n * 4. Bulk-inserting a report_activity row for each updated report\n *\n * @throws InvalidRequestError if validation fails\n */\nexport async function processReportAction(\n params: ProcessReportActionParams,\n): Promise<number> {\n const {\n db,\n reportAction,\n subjectDid,\n subjectUri,\n eventId,\n eventType,\n createdBy,\n } = params\n\n // Find reports matching the criteria\n const matchingReports = await findReportsForSubject(db, {\n subjectDid,\n subjectUri,\n reportIds: reportAction.ids,\n reportTypes: reportAction.types,\n targetAll: reportAction.all,\n })\n\n // Validate that reports were found for ids and types\n if (matchingReports.length === 0) {\n if (reportAction.ids?.length) {\n throw new Error(\n 'No matching reports found for the specified report IDs on this subject',\n )\n } else if (reportAction.types?.length) {\n throw new Error(\n 'No matching reports found for the specified report types on this subject',\n )\n }\n // For 'all', it's okay if no reports exist\n return 0\n }\n\n // Validate that all specified report IDs were found\n if (reportAction.ids?.length) {\n const foundIds = new Set(matchingReports.map((r) => r.id))\n const requestedIds = new Set(reportAction.ids)\n const missingIds = [...requestedIds].filter((id) => !foundIds.has(id))\n\n if (missingIds.length > 0) {\n throw new Error(\n `Report IDs ${missingIds.join(', ')} do not exist, are already closed, or do not belong to this subject`,\n )\n }\n }\n\n // Determine per-report transitions via the pure state machine.\n // Skip reports whose current status doesn't allow the transition.\n const validUpdates: {\n id: number\n nextStatus: string\n activityType: string\n previousStatus: string\n }[] = []\n\n for (const report of matchingReports) {\n try {\n const result = handleReportUpdate(report.status, {\n type: 'event',\n eventType,\n })\n if (result.nextStatus && result.activity) {\n validUpdates.push({\n id: report.id,\n nextStatus: result.nextStatus,\n activityType: result.activity.activityType,\n previousStatus: result.activity.previousStatus,\n })\n }\n } catch (err) {\n if (\n err instanceof AlreadyInTargetState ||\n err instanceof InvalidStateTransition\n ) {\n // Skip reports that can't transition — silent per design\n continue\n }\n throw err\n }\n }\n\n if (!validUpdates.length) {\n return 0\n }\n\n const now = new Date().toISOString()\n const updateIds = validUpdates.map((u) => u.id)\n\n // Bulk UPDATE reports that passed validation\n // All valid reports share the same target status since they come from the\n // same event type, so a single UPDATE is sufficient.\n const status = validUpdates[0].nextStatus\n const closedAt = status === 'closed' ? now : null\n await db.db\n .updateTable('report')\n .set({\n actionEventIds: sql`COALESCE(\"actionEventIds\", '[]'::jsonb) || ${JSON.stringify(eventId)}::jsonb`,\n actionNote: reportAction.note ?? null,\n status,\n updatedAt: now,\n closedAt,\n })\n .where('id', 'in', updateIds)\n .execute()\n\n // Bulk INSERT one activity per updated report\n await db.db\n .insertInto('report_activity')\n .values(\n validUpdates.map((u) => ({\n reportId: u.id,\n activityType: u.activityType,\n previousStatus: u.previousStatus,\n internalNote: null,\n publicNote: reportAction.note ?? null,\n meta: null,\n isAutomated: false,\n createdBy,\n createdAt: now,\n })),\n )\n .execute()\n\n return validUpdates.length\n}\n"]}
@@ -2,20 +2,7 @@ import { AtUri } from '@atproto/syntax';
2
2
  import { Database } from '../db/index.js';
3
3
  import { DatabaseSchema } from '../db/schema/index.js';
4
4
  import { ModerationEventRow, ModerationSubjectStatusRow } from './types.js';
5
- export declare const moderationSubjectStatusQueryBuilder: (db: DatabaseSchema) => import("kysely").QueryBuilderWithSelection<{
6
- moderation_event: import("../db/schema/moderation_event.js").ModerationEvent;
7
- moderation_subject_status: import("../db/schema/moderation_subject_status.js").ModerationSubjectStatus;
8
- label: import("../db/schema/label.js").Label;
9
- repo_push_event: import("../db/schema/repo_push_event.js").RepoPushEvent;
10
- record_push_event: import("../db/schema/record_push_event.js").RecordPushEvent;
11
- blob_push_event: import("../db/schema/blob_push_event.js").BlobPushEvent;
12
- communication_template: import("../db/schema/communication_template.js").CommunicationTemplate;
13
- signing_key: import("../db/schema/signing_key.js").SigningKey;
14
- member: import("../db/schema/member.js").Member;
15
- set_detail: import("../db/schema/ozone_set.js").SetDetail;
16
- set_value: import("../db/schema/ozone_set.js").SetValue;
17
- setting: import("../db/schema/setting.js").Setting;
18
- report: import("../db/schema/report.js").Report;
5
+ export declare const moderationSubjectStatusQueryBuilder: (db: DatabaseSchema) => import("kysely").SelectQueryBuilder<{
19
6
  account_events_stats: import("kysely").Nullable<import("../db/schema/account_events_stats.js").AccountEventsStats>;
20
7
  account_record_events_stats: import("kysely").Nullable<{
21
8
  subjectDid: import("kysely").GeneratedAlways<string>;
@@ -32,175 +19,83 @@ export declare const moderationSubjectStatusQueryBuilder: (db: DatabaseSchema) =
32
19
  takendownCount: import("kysely").GeneratedAlways<number>;
33
20
  }>;
34
21
  account_strike: import("kysely").Nullable<import("../db/schema/account_strike.js").AccountStrike>;
35
- expiring_tag: import("../db/schema/expiring_tag.js").ExpiringTag;
36
- firehose_cursor: import("../db/schema/firehose_cursor.js").FirehoseCursor;
37
- job_cursor: import("../db/schema/job_cursor.js").JobCursor;
38
- moderator_assignment: import("../db/schema/moderator_assignment.js").ModeratorAssignment;
39
- record_events_stats: import("../db/schema/record_events_stats.js").RecordEventsStats;
40
- report_activity: import("../db/schema/report_activity.js").ReportActivity;
41
- report_queue: import("../db/schema/report_queue.js").ReportQueue;
42
- report_stat: import("../db/schema/report_stat.js").ReportStat;
43
- verification: import("../db/schema/verification.js").Verification;
44
- safelink_rule: import("../db/schema/safelink.js").SafelinkRule;
45
- safelink_event: import("../db/schema/safelink.js").SafelinkEvent;
46
- scheduled_action: import("../db/schema/scheduled-action.js").ScheduledAction;
47
- }, "moderation_subject_status" | "account_events_stats" | "account_record_events_stats" | "account_record_status_stats" | "account_strike", {
48
- id: number;
49
- comment: string | null;
50
- createdAt: string;
51
- did: string;
52
- recordPath: string;
53
- blobCids: string[] | null;
54
- recordCid: string | null;
55
- reviewState: "tools.ozone.moderation.defs#reviewOpen" | "tools.ozone.moderation.defs#reviewEscalated" | "tools.ozone.moderation.defs#reviewClosed" | "tools.ozone.moderation.defs#reviewNone";
56
- muteUntil: string | null;
57
- lastReviewedAt: string | null;
58
- lastReviewedBy: string | null;
59
- lastReportedAt: string | null;
60
- lastAppealedAt: string | null;
61
- takendown: boolean;
62
- suspendUntil: string | null;
63
- appealed: boolean | null;
64
- updatedAt: string;
65
- tags: string[] | null;
66
- muteReportingUntil: string | null;
67
- hostingStatus: string | null;
68
- hostingDeletedAt: string | null;
69
- hostingUpdatedAt: string | null;
70
- hostingCreatedAt: string | null;
71
- hostingDeactivatedAt: string | null;
72
- hostingReactivatedAt: string | null;
73
- ageAssuranceState: string;
74
- convoId: string;
75
- priorityScore: number | undefined;
76
- ageAssuranceUpdatedBy: string | null | undefined;
77
- } & import("kysely").Selection<{
78
- moderation_event: import("../db/schema/moderation_event.js").ModerationEvent;
79
- moderation_subject_status: import("../db/schema/moderation_subject_status.js").ModerationSubjectStatus;
80
- label: import("../db/schema/label.js").Label;
81
- repo_push_event: import("../db/schema/repo_push_event.js").RepoPushEvent;
82
- record_push_event: import("../db/schema/record_push_event.js").RecordPushEvent;
83
22
  blob_push_event: import("../db/schema/blob_push_event.js").BlobPushEvent;
84
23
  communication_template: import("../db/schema/communication_template.js").CommunicationTemplate;
85
- signing_key: import("../db/schema/signing_key.js").SigningKey;
86
- member: import("../db/schema/member.js").Member;
87
- set_detail: import("../db/schema/ozone_set.js").SetDetail;
88
- set_value: import("../db/schema/ozone_set.js").SetValue;
89
- setting: import("../db/schema/setting.js").Setting;
90
- report: import("../db/schema/report.js").Report;
91
- account_events_stats: import("kysely").Nullable<import("../db/schema/account_events_stats.js").AccountEventsStats>;
92
- account_record_events_stats: {
93
- subjectDid: import("kysely").GeneratedAlways<string>;
94
- totalReports: import("kysely").GeneratedAlways<number>;
95
- reportedCount: import("kysely").GeneratedAlways<number>;
96
- escalatedCount: import("kysely").GeneratedAlways<number>;
97
- appealedCount: import("kysely").GeneratedAlways<number>;
98
- };
99
- account_record_status_stats: {
100
- did: import("kysely").GeneratedAlways<string>;
101
- subjectCount: import("kysely").GeneratedAlways<number>;
102
- pendingCount: import("kysely").GeneratedAlways<number>;
103
- processedCount: import("kysely").GeneratedAlways<number>;
104
- takendownCount: import("kysely").GeneratedAlways<number>;
105
- };
106
- account_strike: import("../db/schema/account_strike.js").AccountStrike;
107
24
  expiring_tag: import("../db/schema/expiring_tag.js").ExpiringTag;
108
25
  firehose_cursor: import("../db/schema/firehose_cursor.js").FirehoseCursor;
109
26
  job_cursor: import("../db/schema/job_cursor.js").JobCursor;
110
- moderator_assignment: import("../db/schema/moderator_assignment.js").ModeratorAssignment;
111
- record_events_stats: import("../db/schema/record_events_stats.js").RecordEventsStats;
112
- report_activity: import("../db/schema/report_activity.js").ReportActivity;
113
- report_queue: import("../db/schema/report_queue.js").ReportQueue;
114
- report_stat: import("../db/schema/report_stat.js").ReportStat;
115
- verification: import("../db/schema/verification.js").Verification;
116
- safelink_rule: import("../db/schema/safelink.js").SafelinkRule;
117
- safelink_event: import("../db/schema/safelink.js").SafelinkEvent;
118
- scheduled_action: import("../db/schema/scheduled-action.js").ScheduledAction;
119
- }, "moderation_subject_status" | "account_events_stats", "account_events_stats.reportCount" | "account_events_stats.appealCount" | "account_events_stats.suspendCount" | "account_events_stats.escalateCount" | "account_events_stats.takedownCount"> & import("kysely").Selection<{
120
- moderation_event: import("../db/schema/moderation_event.js").ModerationEvent;
121
- moderation_subject_status: import("../db/schema/moderation_subject_status.js").ModerationSubjectStatus;
122
27
  label: import("../db/schema/label.js").Label;
123
- repo_push_event: import("../db/schema/repo_push_event.js").RepoPushEvent;
124
- record_push_event: import("../db/schema/record_push_event.js").RecordPushEvent;
125
- blob_push_event: import("../db/schema/blob_push_event.js").BlobPushEvent;
126
- communication_template: import("../db/schema/communication_template.js").CommunicationTemplate;
127
- signing_key: import("../db/schema/signing_key.js").SigningKey;
128
28
  member: import("../db/schema/member.js").Member;
129
- set_detail: import("../db/schema/ozone_set.js").SetDetail;
130
- set_value: import("../db/schema/ozone_set.js").SetValue;
131
- setting: import("../db/schema/setting.js").Setting;
132
- report: import("../db/schema/report.js").Report;
133
- account_events_stats: import("kysely").Nullable<import("../db/schema/account_events_stats.js").AccountEventsStats>;
134
- account_record_events_stats: import("kysely").Nullable<{
135
- subjectDid: import("kysely").GeneratedAlways<string>;
136
- totalReports: import("kysely").GeneratedAlways<number>;
137
- reportedCount: import("kysely").GeneratedAlways<number>;
138
- escalatedCount: import("kysely").GeneratedAlways<number>;
139
- appealedCount: import("kysely").GeneratedAlways<number>;
140
- }>;
141
- account_record_status_stats: {
142
- did: import("kysely").GeneratedAlways<string>;
143
- subjectCount: import("kysely").GeneratedAlways<number>;
144
- pendingCount: import("kysely").GeneratedAlways<number>;
145
- processedCount: import("kysely").GeneratedAlways<number>;
146
- takendownCount: import("kysely").GeneratedAlways<number>;
147
- };
148
- account_strike: import("../db/schema/account_strike.js").AccountStrike;
149
- expiring_tag: import("../db/schema/expiring_tag.js").ExpiringTag;
150
- firehose_cursor: import("../db/schema/firehose_cursor.js").FirehoseCursor;
151
- job_cursor: import("../db/schema/job_cursor.js").JobCursor;
29
+ moderation_event: import("../db/schema/moderation_event.js").ModerationEvent;
30
+ moderation_subject_status: import("../db/schema/moderation_subject_status.js").ModerationSubjectStatus;
152
31
  moderator_assignment: import("../db/schema/moderator_assignment.js").ModeratorAssignment;
153
32
  record_events_stats: import("../db/schema/record_events_stats.js").RecordEventsStats;
33
+ record_push_event: import("../db/schema/record_push_event.js").RecordPushEvent;
34
+ repo_push_event: import("../db/schema/repo_push_event.js").RepoPushEvent;
35
+ report: import("../db/schema/report.js").Report;
154
36
  report_activity: import("../db/schema/report_activity.js").ReportActivity;
155
37
  report_queue: import("../db/schema/report_queue.js").ReportQueue;
156
38
  report_stat: import("../db/schema/report_stat.js").ReportStat;
157
- verification: import("../db/schema/verification.js").Verification;
158
- safelink_rule: import("../db/schema/safelink.js").SafelinkRule;
159
39
  safelink_event: import("../db/schema/safelink.js").SafelinkEvent;
40
+ safelink_rule: import("../db/schema/safelink.js").SafelinkRule;
160
41
  scheduled_action: import("../db/schema/scheduled-action.js").ScheduledAction;
161
- }, "moderation_subject_status" | "account_events_stats" | "account_record_events_stats", "account_record_events_stats.totalReports" | "account_record_events_stats.reportedCount" | "account_record_events_stats.escalatedCount" | "account_record_events_stats.appealedCount"> & import("kysely").Selection<{
162
- moderation_event: import("../db/schema/moderation_event.js").ModerationEvent;
163
- moderation_subject_status: import("../db/schema/moderation_subject_status.js").ModerationSubjectStatus;
164
- label: import("../db/schema/label.js").Label;
165
- repo_push_event: import("../db/schema/repo_push_event.js").RepoPushEvent;
166
- record_push_event: import("../db/schema/record_push_event.js").RecordPushEvent;
167
- blob_push_event: import("../db/schema/blob_push_event.js").BlobPushEvent;
168
- communication_template: import("../db/schema/communication_template.js").CommunicationTemplate;
169
- signing_key: import("../db/schema/signing_key.js").SigningKey;
170
- member: import("../db/schema/member.js").Member;
171
42
  set_detail: import("../db/schema/ozone_set.js").SetDetail;
172
43
  set_value: import("../db/schema/ozone_set.js").SetValue;
173
44
  setting: import("../db/schema/setting.js").Setting;
174
- report: import("../db/schema/report.js").Report;
175
- account_events_stats: import("kysely").Nullable<import("../db/schema/account_events_stats.js").AccountEventsStats>;
176
- account_record_events_stats: import("kysely").Nullable<{
177
- subjectDid: import("kysely").GeneratedAlways<string>;
178
- totalReports: import("kysely").GeneratedAlways<number>;
179
- reportedCount: import("kysely").GeneratedAlways<number>;
180
- escalatedCount: import("kysely").GeneratedAlways<number>;
181
- appealedCount: import("kysely").GeneratedAlways<number>;
182
- }>;
183
- account_record_status_stats: import("kysely").Nullable<{
184
- did: import("kysely").GeneratedAlways<string>;
185
- subjectCount: import("kysely").GeneratedAlways<number>;
186
- pendingCount: import("kysely").GeneratedAlways<number>;
187
- processedCount: import("kysely").GeneratedAlways<number>;
188
- takendownCount: import("kysely").GeneratedAlways<number>;
189
- }>;
190
- account_strike: import("../db/schema/account_strike.js").AccountStrike;
191
- expiring_tag: import("../db/schema/expiring_tag.js").ExpiringTag;
192
- firehose_cursor: import("../db/schema/firehose_cursor.js").FirehoseCursor;
193
- job_cursor: import("../db/schema/job_cursor.js").JobCursor;
194
- moderator_assignment: import("../db/schema/moderator_assignment.js").ModeratorAssignment;
195
- record_events_stats: import("../db/schema/record_events_stats.js").RecordEventsStats;
196
- report_activity: import("../db/schema/report_activity.js").ReportActivity;
197
- report_queue: import("../db/schema/report_queue.js").ReportQueue;
198
- report_stat: import("../db/schema/report_stat.js").ReportStat;
45
+ signing_key: import("../db/schema/signing_key.js").SigningKey;
199
46
  verification: import("../db/schema/verification.js").Verification;
200
- safelink_rule: import("../db/schema/safelink.js").SafelinkRule;
201
- safelink_event: import("../db/schema/safelink.js").SafelinkEvent;
202
- scheduled_action: import("../db/schema/scheduled-action.js").ScheduledAction;
203
- }, "moderation_subject_status" | "account_events_stats" | "account_record_events_stats" | "account_record_status_stats", "account_record_status_stats.subjectCount" | "account_record_status_stats.pendingCount" | "account_record_status_stats.processedCount" | "account_record_status_stats.takendownCount">, "account_strike.totalStrikeCount" | "account_strike.firstStrikeAt" | "account_strike.lastStrikeAt" | "account_strike.activeStrikeCount as strikeCount">;
47
+ }, "account_events_stats" | "account_record_events_stats" | "account_record_status_stats" | "account_strike" | "moderation_subject_status", {
48
+ ageAssuranceState: string;
49
+ ageAssuranceUpdatedBy: string | null | undefined;
50
+ appealed: boolean | null;
51
+ blobCids: string[] | null;
52
+ comment: string | null;
53
+ convoId: string;
54
+ createdAt: string;
55
+ did: string;
56
+ hostingCreatedAt: string | null;
57
+ hostingDeactivatedAt: string | null;
58
+ hostingDeletedAt: string | null;
59
+ hostingReactivatedAt: string | null;
60
+ hostingStatus: string | null;
61
+ hostingUpdatedAt: string | null;
62
+ id: number;
63
+ lastAppealedAt: string | null;
64
+ lastReportedAt: string | null;
65
+ lastReviewedAt: string | null;
66
+ lastReviewedBy: string | null;
67
+ muteReportingUntil: string | null;
68
+ muteUntil: string | null;
69
+ priorityScore: number | undefined;
70
+ recordCid: string | null;
71
+ recordPath: string;
72
+ reviewState: "tools.ozone.moderation.defs#reviewClosed" | "tools.ozone.moderation.defs#reviewEscalated" | "tools.ozone.moderation.defs#reviewNone" | "tools.ozone.moderation.defs#reviewOpen";
73
+ suspendUntil: string | null;
74
+ tags: string[] | null;
75
+ takendown: boolean;
76
+ updatedAt: string;
77
+ } & {
78
+ appealCount: number | null;
79
+ escalateCount: number | null;
80
+ reportCount: number | null;
81
+ suspendCount: number | null;
82
+ takedownCount: number | null;
83
+ } & {
84
+ appealedCount: number | null;
85
+ escalatedCount: number | null;
86
+ reportedCount: number | null;
87
+ totalReports: number | null;
88
+ } & {
89
+ pendingCount: number | null;
90
+ processedCount: number | null;
91
+ subjectCount: number | null;
92
+ takendownCount: number | null;
93
+ } & {
94
+ firstStrikeAt: string | null;
95
+ lastStrikeAt: string | null;
96
+ strikeCount: number | null;
97
+ totalStrikeCount: number | null;
98
+ }>;
204
99
  export declare const adjustModerationSubjectStatus: (db: Database, moderationEvent: ModerationEventRow, blobCids?: string[]) => Promise<ModerationSubjectStatusRow | null>;
205
100
  /**
206
101
  * Get moderation_subject_status identifier (did, recordPath, convoId).
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/mod-service/status.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAEvC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAQtD,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAA;AAuM3E,eAAO,MAAM,mCAAmC,GAAI,IAAI,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wcAyDrE,CAAA;AAKD,eAAO,MAAM,6BAA6B,GACxC,IAAI,QAAQ,EACZ,iBAAiB,kBAAkB,EACnC,WAAW,MAAM,EAAE,KAClB,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAsO3C,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,8BAA8B,GACzC,SAAS,MAAM,GAAG,KAAK,EACvB,UAAU,MAAM,GAAG,IAAI,KACtB;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CA8BpD,CAAA"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/mod-service/status.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAEvC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAQtD,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAA;AAuM3E,eAAO,MAAM,mCAAmC,OAAQ,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyDrE,CAAA;AAKD,eAAO,MAAM,6BAA6B,OACpC,QAAQ,mBACK,kBAAkB,aACxB,MAAM,EAAE,KAClB,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAsO3C,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,8BAA8B,YAChC,MAAM,GAAG,KAAK,YACb,MAAM,GAAG,IAAI,KACtB;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CA8BpD,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"strike.d.ts","sourceRoot":"","sources":["../../src/mod-service/strike.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC,MAAM,MAAM,oBAAoB,GAAG,CAAC,EAAE,EAAE,QAAQ,KAAK,aAAa,CAAA;AAElE,qBAAa,aAAa;IACZ,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ;IAEhC,MAAM,CAAC,OAAO,KACJ,IAAI,QAAQ;IAKtB;;OAEG;IACG,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuDjE;;;OAGG;IACG,wBAAwB,CAC5B,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAkB1C"}
1
+ {"version":3,"file":"strike.d.ts","sourceRoot":"","sources":["../../src/mod-service/strike.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC,MAAM,MAAM,oBAAoB,GAAG,CAAC,EAAE,EAAE,QAAQ,KAAK,aAAa,CAAA;AAElE,qBAAa,aAAa;IACZ,OAAO,CAAC,EAAE;IAAtB,YAAoB,EAAE,EAAE,QAAQ,EAAI;IAEpC,MAAM,CAAC,OAAO,SACA,QAAQ,mBAGrB;IAED;;OAEG;IACG,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqDhE;IAED;;;OAGG;IACG,wBAAwB,CAC5B,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAiBxC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"strike.js","sourceRoot":"","sources":["../../src/mod-service/strike.ts"],"names":[],"mappings":"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","sourcesContent":["import { Database } from '../db/index.js'\n\nexport type StrikeServiceCreator = (db: Database) => StrikeService\n\nexport class StrikeService {\n constructor(private db: Database) {}\n\n static creator() {\n return (db: Database) => {\n return new StrikeService(db)\n }\n }\n\n /**\n * Update the strike count in account_strike table\n */\n async updateSubjectStrikeCount(subjectDid: string): Promise<void> {\n const now = new Date().toISOString()\n\n // This should not incur too many rows since we tend to do permanent takedown on relatively low strike count\n // and we have a very specific index to support this query\n const events = await this.db.db\n .selectFrom('moderation_event')\n .where('subjectDid', '=', subjectDid)\n .where('strikeCount', '<>', 0)\n .select(['strikeCount', 'strikeExpiresAt', 'createdAt'])\n .orderBy('createdAt', 'asc')\n .execute()\n\n if (!events.length) {\n return\n }\n\n let activeStrikeCount = 0\n let totalStrikeCount = 0\n\n const firstStrikeAt = events[0].createdAt\n const lastStrikeAt = events[events.length - 1].createdAt\n\n for (const event of events) {\n const strikeCount = event.strikeCount || 0\n totalStrikeCount += strikeCount\n\n // Count as active if not expired\n const isActive =\n event.strikeExpiresAt === null || event.strikeExpiresAt > now\n if (isActive) {\n activeStrikeCount += strikeCount\n }\n }\n\n await this.db.db\n .insertInto('account_strike')\n .values({\n did: subjectDid,\n activeStrikeCount,\n totalStrikeCount,\n firstStrikeAt,\n lastStrikeAt,\n })\n .onConflict((oc) =>\n oc.column('did').doUpdateSet({\n activeStrikeCount,\n totalStrikeCount,\n firstStrikeAt,\n lastStrikeAt,\n }),\n )\n .execute()\n }\n\n /**\n * Get distinct subjects with expired strikes since a given timestamp\n * Used by the strike expiry processor to find accounts that need strike count updates\n */\n async getExpiredStrikeSubjects(\n afterTimestamp?: string,\n ): Promise<Array<{ subjectDid: string }>> {\n const now = new Date().toISOString()\n\n let query = this.db.db\n .selectFrom('moderation_event')\n .where('strikeExpiresAt', 'is not', null)\n .where('strikeExpiresAt', '<=', now)\n .where('strikeCount', '<>', 0)\n .select('subjectDid')\n .distinct()\n\n // Only process strikes that expired since the last run\n if (afterTimestamp) {\n query = query.where('strikeExpiresAt', '>=', afterTimestamp)\n }\n\n return await query.execute()\n }\n}\n"]}
1
+ {"version":3,"file":"strike.js","sourceRoot":"","sources":["../../src/mod-service/strike.ts"],"names":[],"mappings":"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","sourcesContent":["import { Database } from '../db/index.js'\n\nexport type StrikeServiceCreator = (db: Database) => StrikeService\n\nexport class StrikeService {\n constructor(private db: Database) {}\n\n static creator() {\n return (db: Database) => {\n return new StrikeService(db)\n }\n }\n\n /**\n * Update the strike count in account_strike table\n */\n async updateSubjectStrikeCount(subjectDid: string): Promise<void> {\n const now = new Date().toISOString()\n\n // This should not incur too many rows since we tend to do permanent takedown on relatively low strike count\n // and we have a very specific index to support this query\n const events = await this.db.db\n .selectFrom('moderation_event')\n .where('subjectDid', '=', subjectDid)\n .where('strikeCount', '<>', 0)\n .select(['strikeCount', 'strikeExpiresAt', 'createdAt'])\n .orderBy('createdAt', 'asc')\n .execute()\n\n if (!events.length) {\n return\n }\n\n let activeStrikeCount = 0\n let totalStrikeCount = 0\n\n const firstStrikeAt = events[0].createdAt\n const lastStrikeAt = events[events.length - 1].createdAt\n\n for (const event of events) {\n const strikeCount = event.strikeCount || 0\n totalStrikeCount += strikeCount\n\n // Count as active if not expired\n const isActive =\n event.strikeExpiresAt === null || event.strikeExpiresAt > now\n if (isActive) {\n activeStrikeCount += strikeCount\n }\n }\n\n await this.db.db\n .insertInto('account_strike')\n .values({\n did: subjectDid,\n activeStrikeCount,\n totalStrikeCount,\n firstStrikeAt,\n lastStrikeAt,\n })\n .onConflict((oc) =>\n oc.column('did').doUpdateSet({\n activeStrikeCount,\n totalStrikeCount,\n firstStrikeAt,\n lastStrikeAt,\n }),\n )\n .execute()\n }\n\n /**\n * Get distinct subjects with expired strikes since a given timestamp\n * Used by the strike expiry processor to find accounts that need strike count updates\n */\n async getExpiredStrikeSubjects(\n afterTimestamp?: string,\n ): Promise<Array<{ subjectDid: string }>> {\n const now = new Date().toISOString()\n\n let query = this.db.db\n .selectFrom('moderation_event')\n .where('strikeExpiresAt', 'is not', null)\n .where('strikeExpiresAt', '<=', now)\n .where('strikeCount', '<>', 0)\n .select('subjectDid')\n .distinct()\n\n // Only process strikes that expired since the last run\n if (afterTimestamp) {\n query = query.where('strikeExpiresAt', '>=', afterTimestamp)\n }\n\n return await query.execute()\n }\n}\n"]}
@@ -51,7 +51,7 @@ export declare class RepoSubject implements ModSubject {
51
51
  isMessage(): this is MessageSubject;
52
52
  isConvo(): this is ConvoSubject;
53
53
  info(): {
54
- subjectType: "com.atproto.admin.defs#repoRef";
54
+ subjectType: 'com.atproto.admin.defs#repoRef';
55
55
  subjectDid: string;
56
56
  subjectUri: null;
57
57
  subjectCid: null;
@@ -76,7 +76,7 @@ export declare class RecordSubject implements ModSubject {
76
76
  isMessage(): this is MessageSubject;
77
77
  isConvo(): this is ConvoSubject;
78
78
  info(): {
79
- subjectType: "com.atproto.repo.strongRef";
79
+ subjectType: 'com.atproto.repo.strongRef';
80
80
  subjectDid: string;
81
81
  subjectUri: string;
82
82
  subjectCid: string;
@@ -99,7 +99,7 @@ export declare class MessageSubject implements ModSubject {
99
99
  isMessage(): this is MessageSubject;
100
100
  isConvo(): this is ConvoSubject;
101
101
  info(): {
102
- subjectType: "chat.bsky.convo.defs#messageRef";
102
+ subjectType: 'chat.bsky.convo.defs#messageRef';
103
103
  subjectDid: string;
104
104
  subjectUri: null;
105
105
  subjectCid: null;
@@ -123,7 +123,7 @@ export declare class ConvoSubject implements ModSubject {
123
123
  isMessage(): this is MessageSubject;
124
124
  isConvo(): this is ConvoSubject;
125
125
  info(): {
126
- subjectType: "chat.bsky.convo.defs#convoRef";
126
+ subjectType: 'chat.bsky.convo.defs#convoRef';
127
127
  subjectDid: string;
128
128
  subjectUri: null;
129
129
  subjectCid: null;
@@ -1 +1 @@
1
- {"version":3,"file":"subject.d.ts","sourceRoot":"","sources":["../../src/mod-service/subject.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"subject.d.ts","sourceRoot":"","sources":["../../src/mod-service/subject.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ export type SignedLabel = Label & {
8
8
  sig: Uint8Array;
9
9
  };
10
10
  export declare const formatLabel: (row: LabelRow) => Label;
11
- export declare const formatLabelRow: (label: Label, signingKeyId?: number) => Omit<LabelRow, "id">;
11
+ export declare const formatLabelRow: (label: Label, signingKeyId?: number) => Omit<LabelRow, 'id'>;
12
12
  export declare const signLabel: (label: Label, signingKey: Keypair) => Promise<SignedLabel>;
13
13
  export declare const isSafeUrl: (url: URL) => boolean;
14
14
  export declare const getPdsAgentForRepo: (idResolver: IdResolver, did: string, devMode?: boolean) => Promise<{
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/mod-service/util.ts"],"names":[],"mappings":"AAEA,OAAO,QAAQ,MAAM,cAAc,CAAA;AAEnC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,4CAA4C,CAAA;AAElE,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG;IAAE,GAAG,EAAE,UAAU,CAAA;CAAE,CAAA;AAErD,eAAO,MAAM,WAAW,GAAI,KAAK,QAAQ,KAAG,KAY3C,CAAA;AAED,eAAO,MAAM,cAAc,GACzB,OAAO,KAAK,EACZ,eAAe,MAAM,KACpB,IAAI,CAAC,QAAQ,EAAE,IAAI,CAYrB,CAAA;AAED,eAAO,MAAM,SAAS,GACpB,OAAO,KAAK,EACZ,YAAY,OAAO,KAClB,OAAO,CAAC,WAAW,CAsBrB,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,KAAK,GAAG,YAKjC,CAAA;AAED,eAAO,MAAM,kBAAkB,GAC7B,YAAY,UAAU,EACtB,KAAK,MAAM,EACX,UAAU,OAAO;;;;;;EASlB,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,UAAU,IAAI,WAG9C,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,SAAS,KAAK,wCAEhD,CAAA"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/mod-service/util.ts"],"names":[],"mappings":"AAEA,OAAO,QAAQ,MAAM,cAAc,CAAA;AAEnC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,4CAA4C,CAAA;AAElE,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG;IAAE,GAAG,EAAE,UAAU,CAAA;CAAE,CAAA;AAErD,eAAO,MAAM,WAAW,QAAS,QAAQ,KAAG,KAY3C,CAAA;AAED,eAAO,MAAM,cAAc,UAClB,KAAK,iBACG,MAAM,KACpB,IAAI,CAAC,QAAQ,EAAE,IAAI,CAYrB,CAAA;AAED,eAAO,MAAM,SAAS,UACb,KAAK,cACA,OAAO,KAClB,OAAO,CAAC,WAAW,CAsBrB,CAAA;AAED,eAAO,MAAM,SAAS,QAAS,GAAG,YAKjC,CAAA;AAED,eAAO,MAAM,kBAAkB,eACjB,UAAU,OACjB,MAAM,YACD,OAAO;;;;;;EASlB,CAAA;AAED,eAAO,MAAM,gBAAgB,aAAc,IAAI,WAG9C,CAAA;AAED,eAAO,MAAM,kBAAkB,YAAa,KAAK,wCAEhD,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"views.d.ts","sourceRoot":"","sources":["../../src/mod-service/views.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"views.d.ts","sourceRoot":"","sources":["../../src/mod-service/views.ts"],"names":[],"mappings":"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"}
@@ -463,8 +463,8 @@ export class ModerationViews {
463
463
  const res = await this.db.db
464
464
  .selectFrom('label')
465
465
  .where('label.uri', 'in', subjects)
466
- .where((qb) => qb.where('label.exp', 'is', null).orWhere('label.exp', '>', now))
467
- .if(!includeNeg, (qb) => qb.where('neg', '=', false))
466
+ .where((eb) => eb.or([eb('label.exp', 'is', null), eb('label.exp', '>', now)]))
467
+ .$if(!includeNeg, (qb) => qb.where('neg', '=', false))
468
468
  .selectAll()
469
469
  .execute();
470
470
  await Promise.all(res.map(async (labelRow) => {
@@ -501,15 +501,11 @@ export class ModerationViews {
501
501
  const parsedSubjects = subjects.map(parseSubjectId);
502
502
  const builder = moderationSubjectStatusQueryBuilder(this.db.db)
503
503
  //
504
- .where((qb) => {
505
- for (const sub of parsedSubjects) {
506
- qb = qb.orWhere((qb) => qb
507
- .where('moderation_subject_status.did', '=', sub.did)
508
- .where('moderation_subject_status.recordPath', '=', sub.recordPath ?? '')
509
- .where('moderation_subject_status.convoId', '=', ''));
510
- }
511
- return qb;
512
- });
504
+ .where((eb) => eb.or(parsedSubjects.map((sub) => eb.and([
505
+ eb('moderation_subject_status.did', '=', sub.did),
506
+ eb('moderation_subject_status.recordPath', '=', sub.recordPath ?? ''),
507
+ eb('moderation_subject_status.convoId', '=', ''),
508
+ ]))));
513
509
  const [statusRes, accountsByDid] = await Promise.all([
514
510
  builder.execute(),
515
511
  this.getAccoutInfosByDid(parsedSubjects.map((s) => s.did)),