@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.
- package/CHANGELOG.md +23 -0
- package/dist/api/health.d.ts.map +1 -1
- package/dist/api/label/queryLabels.d.ts.map +1 -1
- package/dist/api/label/queryLabels.js +13 -21
- package/dist/api/label/queryLabels.js.map +1 -1
- package/dist/api/moderation/util.d.ts.map +1 -1
- package/dist/api/util.d.ts +2 -2
- package/dist/api/util.d.ts.map +1 -1
- package/dist/api/well-known.d.ts.map +1 -1
- package/dist/assignment/index.d.ts.map +1 -1
- package/dist/assignment/index.js +9 -12
- package/dist/assignment/index.js.map +1 -1
- package/dist/auth-verifier.d.ts.map +1 -1
- package/dist/background.d.ts.map +1 -1
- package/dist/background.js.map +1 -1
- package/dist/communication-service/template.d.ts.map +1 -1
- package/dist/communication-service/template.js.map +1 -1
- package/dist/communication-service/util.d.ts.map +1 -1
- package/dist/config/config.d.ts.map +1 -1
- package/dist/config/secrets.d.ts.map +1 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js.map +1 -1
- package/dist/daemon/blob-diverter.d.ts.map +1 -1
- package/dist/daemon/blob-diverter.js.map +1 -1
- package/dist/daemon/context.d.ts.map +1 -1
- package/dist/daemon/context.js.map +1 -1
- package/dist/daemon/event-pusher.d.ts +7 -1
- package/dist/daemon/event-pusher.d.ts.map +1 -1
- package/dist/daemon/event-reverser.d.ts.map +1 -1
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/materialized-view-refresher.d.ts.map +1 -1
- package/dist/daemon/queue-router.d.ts.map +1 -1
- package/dist/daemon/scheduled-action-processor.d.ts.map +1 -1
- package/dist/daemon/stats-computer.d.ts.map +1 -1
- package/dist/daemon/strike-expiry-processor.d.ts.map +1 -1
- package/dist/daemon/team-profile-synchronizer.d.ts.map +1 -1
- package/dist/daemon/verification-listener.d.ts.map +1 -1
- package/dist/db/index.d.ts +4 -5
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +2 -1
- package/dist/db/index.js.map +1 -1
- package/dist/db/migrations/20241220T144630860Z-stats-materialized-views.d.ts +1 -2
- package/dist/db/migrations/20241220T144630860Z-stats-materialized-views.d.ts.map +1 -1
- package/dist/db/migrations/20241220T144630860Z-stats-materialized-views.js.map +1 -1
- package/dist/db/migrations/20250718T150931000Z-update-appeal-reason-stats.d.ts +1 -2
- package/dist/db/migrations/20250718T150931000Z-update-appeal-reason-stats.d.ts.map +1 -1
- package/dist/db/migrations/20250718T150931000Z-update-appeal-reason-stats.js.map +1 -1
- package/dist/db/migrations/provider.d.ts +2 -1
- package/dist/db/migrations/provider.d.ts.map +1 -1
- package/dist/db/migrations/provider.js.map +1 -1
- package/dist/db/pagination.d.ts +5 -4
- package/dist/db/pagination.d.ts.map +1 -1
- package/dist/db/pagination.js +4 -4
- package/dist/db/pagination.js.map +1 -1
- package/dist/db/schema/index.d.ts.map +1 -1
- package/dist/db/types.d.ts +1 -1
- package/dist/db/types.d.ts.map +1 -1
- package/dist/db/types.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/jetstream/service.d.ts.map +1 -1
- package/dist/lexicon/index.d.ts +2 -0
- package/dist/lexicon/index.d.ts.map +1 -1
- package/dist/lexicon/index.js +4 -0
- package/dist/lexicon/index.js.map +1 -1
- package/dist/lexicon/lexicons.d.ts +17160 -17038
- package/dist/lexicon/lexicons.d.ts.map +1 -1
- package/dist/lexicon/lexicons.js +68 -1
- package/dist/lexicon/lexicons.js.map +1 -1
- package/dist/lexicon/types/chat/bsky/convo/defs.d.ts +11 -0
- package/dist/lexicon/types/chat/bsky/convo/defs.d.ts.map +1 -1
- package/dist/lexicon/types/chat/bsky/convo/defs.js +7 -0
- package/dist/lexicon/types/chat/bsky/convo/defs.js.map +1 -1
- package/dist/lexicon/types/chat/bsky/convo/getUnreadCounts.d.ts +25 -0
- package/dist/lexicon/types/chat/bsky/convo/getUnreadCounts.d.ts.map +1 -0
- package/dist/lexicon/types/chat/bsky/convo/getUnreadCounts.js +5 -0
- package/dist/lexicon/types/chat/bsky/convo/getUnreadCounts.js.map +1 -0
- package/dist/lexicon/types/chat/bsky/convo/sendMessage.d.ts +1 -1
- package/dist/lexicon/types/chat/bsky/convo/sendMessage.d.ts.map +1 -1
- package/dist/lexicon/types/chat/bsky/convo/sendMessage.js.map +1 -1
- package/dist/lexicon/types/chat/bsky/convo/sendMessageBatch.d.ts +1 -1
- package/dist/lexicon/types/chat/bsky/convo/sendMessageBatch.d.ts.map +1 -1
- package/dist/lexicon/types/chat/bsky/convo/sendMessageBatch.js.map +1 -1
- package/dist/lexicon/util.d.ts.map +1 -1
- package/dist/mod-service/index.d.ts +38 -38
- package/dist/mod-service/index.d.ts.map +1 -1
- package/dist/mod-service/index.js +28 -52
- package/dist/mod-service/index.js.map +1 -1
- package/dist/mod-service/profile.d.ts.map +1 -1
- package/dist/mod-service/report.d.ts.map +1 -1
- package/dist/mod-service/report.js.map +1 -1
- package/dist/mod-service/status.d.ts +60 -165
- package/dist/mod-service/status.d.ts.map +1 -1
- package/dist/mod-service/strike.d.ts.map +1 -1
- package/dist/mod-service/strike.js.map +1 -1
- package/dist/mod-service/subject.d.ts +4 -4
- package/dist/mod-service/subject.d.ts.map +1 -1
- package/dist/mod-service/util.d.ts +1 -1
- package/dist/mod-service/util.d.ts.map +1 -1
- package/dist/mod-service/views.d.ts.map +1 -1
- package/dist/mod-service/views.js +7 -11
- package/dist/mod-service/views.js.map +1 -1
- package/dist/queue/service.d.ts.map +1 -1
- package/dist/queue/service.js +1 -3
- package/dist/queue/service.js.map +1 -1
- package/dist/report/activity.d.ts +17 -6
- package/dist/report/activity.d.ts.map +1 -1
- package/dist/report/handle-report-update.d.ts.map +1 -1
- package/dist/report/handle-report-update.js.map +1 -1
- package/dist/report/stats.d.ts.map +1 -1
- package/dist/report/stats.js.map +1 -1
- package/dist/report/views.d.ts +2 -2
- package/dist/report/views.d.ts.map +1 -1
- package/dist/safelink/service.d.ts +3 -3
- package/dist/safelink/service.d.ts.map +1 -1
- package/dist/safelink/service.js.map +1 -1
- package/dist/scheduled-action/service.d.ts.map +1 -1
- package/dist/scheduled-action/service.js +16 -20
- package/dist/scheduled-action/service.js.map +1 -1
- package/dist/sequencer/outbox.d.ts.map +1 -1
- package/dist/sequencer/outbox.js.map +1 -1
- package/dist/sequencer/sequencer.d.ts.map +1 -1
- package/dist/sequencer/sequencer.js.map +1 -1
- package/dist/set/service.d.ts +10 -1
- package/dist/set/service.d.ts.map +1 -1
- package/dist/set/service.js +5 -2
- package/dist/set/service.js.map +1 -1
- package/dist/setting/service.d.ts.map +1 -1
- package/dist/setting/service.js.map +1 -1
- package/dist/tag-service/content-tagger.d.ts.map +1 -1
- package/dist/tag-service/content-tagger.js.map +1 -1
- package/dist/tag-service/embed-tagger.d.ts.map +1 -1
- package/dist/tag-service/index.d.ts.map +1 -1
- package/dist/tag-service/index.js.map +1 -1
- package/dist/tag-service/language-tagger.d.ts.map +1 -1
- package/dist/tag-service/util.d.ts.map +1 -1
- package/dist/team/index.d.ts.map +1 -1
- package/dist/team/index.js +5 -4
- package/dist/team/index.js.map +1 -1
- package/dist/util.d.ts.map +1 -1
- package/dist/verification/issuer.d.ts +14 -4
- package/dist/verification/issuer.d.ts.map +1 -1
- package/dist/verification/service.d.ts +18 -6
- package/dist/verification/service.d.ts.map +1 -1
- package/dist/verification/service.js +1 -1
- package/dist/verification/service.js.map +1 -1
- package/dist/verification/util.d.ts.map +1 -1
- package/package.json +15 -16
- package/src/api/label/queryLabels.ts +11 -14
- package/src/assignment/index.ts +15 -18
- package/src/db/index.ts +1 -1
- package/src/db/migrations/20241220T144630860Z-stats-materialized-views.ts +1 -2
- package/src/db/migrations/20250718T150931000Z-update-appeal-reason-stats.ts +1 -2
- package/src/db/migrations/provider.ts +2 -1
- package/src/db/pagination.ts +18 -18
- package/src/db/types.ts +3 -1
- package/src/mod-service/index.ts +78 -71
- package/src/mod-service/report.ts +5 -3
- package/src/mod-service/views.ts +16 -16
- package/src/queue/service.ts +5 -5
- package/src/report/stats.ts +5 -3
- package/src/scheduled-action/service.ts +22 -20
- package/src/set/service.ts +17 -14
- package/src/team/index.ts +6 -5
- package/src/verification/service.ts +2 -2
- 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").
|
|
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
|
-
|
|
130
|
-
|
|
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
|
-
|
|
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
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
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,
|
|
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;
|
|
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":"AAIA,MAAM,OAAO,aAAa;IACxB,YAAoB,EAAY;
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAEvC,OAAO,KAAK,iBAAiB,MAAM,0CAA0C,CAAA;AAC7E,OAAO,EAAE,OAAO,EAAa,MAAM,4CAA4C,CAAA;AAC/E,OAAO,EAAE,WAAW,IAAI,WAAW,EAAE,MAAM,yDAAyD,CAAA;AACpG,OAAO,KAAK,uBAAuB,MAAM,gDAAgD,CAAA;AACzF,OAAO,EAAE,WAAW,IAAI,WAAW,EAAE,MAAM,sDAAsD,CAAA;AACjG,OAAO,EAAE,MAAM,EAAe,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAA;AAE3E,KAAK,YAAY,GAAG,WAAW,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC,CAAA;AAEnE,KAAK,SAAS,GAAG,uBAAuB,CAAC,IAAI,CAAA;AAG7C,KAAK,UAAU,GAAG,iBAAiB,CAAC,UAAU,CAAA;AAG9C,KAAK,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAA;AAU1C;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,
|
|
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,
|
|
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,
|
|
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":"AACA,OAAO,EACL,gBAAgB,EAChB,QAAQ,EACR,uBAAuB,EACxB,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAE1C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAEhD,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAA;AACxE,OAAO,EACL,KAAK,EAEN,MAAM,4CAA4C,CAAA;AACnD,OAAO,EAAE,YAAY,IAAI,YAAY,EAAE,MAAM,yDAAyD,CAAA;AAEtG,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,kBAAkB,EAClB,UAAU,EACV,gBAAgB,EAChB,QAAQ,EACR,iBAAiB,EAmBlB,MAAM,iDAAiD,CAAA;AACxD,OAAO,EAAE,QAAQ,EAAe,MAAM,oBAAoB,CAAA;AAE1D,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAE3C,OAAO,EACL,UAAU,EAGX,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,4BAA4B,EAC5B,oCAAoC,EACrC,MAAM,YAAY,CAAA;AAYnB,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE;QACP,aAAa,EAAE,MAAM,CAAA;QACrB,yBAAyB,CAAC,EAAE,MAAM,CAAA;KACnC,CAAA;CACF,CAAA;AAED,qBAAa,eAAe;IAExB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,WAAW;IACZ,UAAU,EAAE,UAAU;IACtB,OAAO,CAAC,EAAE,OAAO;
|
|
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((
|
|
467
|
-
|
|
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((
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
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)),
|