@atproto/ozone 0.1.140 → 0.1.141

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 (82) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/api/moderation/emitEvent.d.ts.map +1 -1
  3. package/dist/api/moderation/emitEvent.js +3 -0
  4. package/dist/api/moderation/emitEvent.js.map +1 -1
  5. package/dist/api/report/createReport.d.ts.map +1 -1
  6. package/dist/api/report/createReport.js +7 -5
  7. package/dist/api/report/createReport.js.map +1 -1
  8. package/dist/api/util.d.ts +2 -3
  9. package/dist/api/util.d.ts.map +1 -1
  10. package/dist/api/util.js +7 -17
  11. package/dist/api/util.js.map +1 -1
  12. package/dist/config/config.d.ts +1 -0
  13. package/dist/config/config.d.ts.map +1 -1
  14. package/dist/config/config.js +1 -0
  15. package/dist/config/config.js.map +1 -1
  16. package/dist/config/env.d.ts +1 -0
  17. package/dist/config/env.d.ts.map +1 -1
  18. package/dist/config/env.js +1 -0
  19. package/dist/config/env.js.map +1 -1
  20. package/dist/context.d.ts +3 -0
  21. package/dist/context.d.ts.map +1 -1
  22. package/dist/context.js +6 -0
  23. package/dist/context.js.map +1 -1
  24. package/dist/db/migrations/20250718T150931000Z-update-appeal-reason-stats.d.ts +5 -0
  25. package/dist/db/migrations/20250718T150931000Z-update-appeal-reason-stats.d.ts.map +1 -0
  26. package/dist/db/migrations/20250718T150931000Z-update-appeal-reason-stats.js +228 -0
  27. package/dist/db/migrations/20250718T150931000Z-update-appeal-reason-stats.js.map +1 -0
  28. package/dist/db/migrations/index.d.ts +1 -0
  29. package/dist/db/migrations/index.d.ts.map +1 -1
  30. package/dist/db/migrations/index.js +2 -1
  31. package/dist/db/migrations/index.js.map +1 -1
  32. package/dist/lexicon/index.d.ts +49 -0
  33. package/dist/lexicon/index.d.ts.map +1 -1
  34. package/dist/lexicon/index.js +52 -1
  35. package/dist/lexicon/index.js.map +1 -1
  36. package/dist/lexicon/lexicons.d.ts +470 -16
  37. package/dist/lexicon/lexicons.d.ts.map +1 -1
  38. package/dist/lexicon/lexicons.js +329 -7
  39. package/dist/lexicon/lexicons.js.map +1 -1
  40. package/dist/lexicon/types/com/atproto/moderation/defs.d.ts +8 -8
  41. package/dist/lexicon/types/com/atproto/moderation/defs.d.ts.map +1 -1
  42. package/dist/lexicon/types/com/atproto/moderation/defs.js +7 -7
  43. package/dist/lexicon/types/com/atproto/moderation/defs.js.map +1 -1
  44. package/dist/lexicon/types/com/atproto/temp/dereferenceScope.d.ts +24 -0
  45. package/dist/lexicon/types/com/atproto/temp/dereferenceScope.d.ts.map +1 -0
  46. package/dist/lexicon/types/com/atproto/temp/dereferenceScope.js +7 -0
  47. package/dist/lexicon/types/com/atproto/temp/dereferenceScope.js.map +1 -0
  48. package/dist/lexicon/types/tools/ozone/report/defs.d.ts +92 -0
  49. package/dist/lexicon/types/tools/ozone/report/defs.d.ts.map +1 -0
  50. package/dist/lexicon/types/tools/ozone/report/defs.js +98 -0
  51. package/dist/lexicon/types/tools/ozone/report/defs.js.map +1 -0
  52. package/dist/mod-service/profile.d.ts +15 -0
  53. package/dist/mod-service/profile.d.ts.map +1 -0
  54. package/dist/mod-service/profile.js +135 -0
  55. package/dist/mod-service/profile.js.map +1 -0
  56. package/dist/mod-service/status.d.ts.map +1 -1
  57. package/dist/mod-service/status.js +18 -17
  58. package/dist/mod-service/status.js.map +1 -1
  59. package/dist/tag-service/util.d.ts.map +1 -1
  60. package/dist/tag-service/util.js +7 -1
  61. package/dist/tag-service/util.js.map +1 -1
  62. package/package.json +9 -9
  63. package/src/api/moderation/emitEvent.ts +4 -0
  64. package/src/api/report/createReport.ts +9 -9
  65. package/src/api/util.ts +7 -28
  66. package/src/config/config.ts +3 -1
  67. package/src/config/env.ts +2 -0
  68. package/src/context.ts +14 -0
  69. package/src/db/migrations/20250718T150931000Z-update-appeal-reason-stats.ts +311 -0
  70. package/src/db/migrations/index.ts +1 -0
  71. package/src/lexicon/index.ts +82 -0
  72. package/src/lexicon/lexicons.ts +341 -7
  73. package/src/lexicon/types/com/atproto/moderation/defs.ts +52 -7
  74. package/src/lexicon/types/com/atproto/temp/dereferenceScope.ts +42 -0
  75. package/src/lexicon/types/tools/ozone/report/defs.ts +154 -0
  76. package/src/mod-service/profile.ts +143 -0
  77. package/src/mod-service/status.ts +3 -2
  78. package/src/tag-service/util.ts +9 -1
  79. package/tests/__snapshots__/report-reason.test.ts.snap +14 -0
  80. package/tests/report-reason.test.ts +154 -0
  81. package/tsconfig.build.tsbuildinfo +1 -1
  82. package/tsconfig.tests.tsbuildinfo +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/mod-service/status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/mod-service/status.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/tag-service/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,8CAA8C,CAAA;AAEzE,eAAO,MAAM,eAAe,GAAI,YAAY,UAAU,WAErD,CAAA"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/tag-service/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,8CAA8C,CAAA;AAEzE,eAAO,MAAM,eAAe,GAAI,YAAY,UAAU,WAUrD,CAAA"}
@@ -2,7 +2,13 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getTagForReport = void 0;
4
4
  const getTagForReport = (reasonType) => {
5
- return `report:${reasonType.replace('com.atproto.moderation.defs#reason', '').toLowerCase()}`;
5
+ const reasonWithoutPrefix = reasonType
6
+ .replace('com.atproto.moderation.defs#reason', '')
7
+ .replace('tools.ozone.report.defs#reason', '');
8
+ const kebabCase = reasonWithoutPrefix
9
+ .replace(/([a-z])([A-Z])/g, '$1-$2')
10
+ .toLowerCase();
11
+ return `report:${kebabCase}`;
6
12
  };
7
13
  exports.getTagForReport = getTagForReport;
8
14
  //# sourceMappingURL=util.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/tag-service/util.ts"],"names":[],"mappings":";;;AAEO,MAAM,eAAe,GAAG,CAAC,UAAsB,EAAE,EAAE;IACxD,OAAO,UAAU,UAAU,CAAC,OAAO,CAAC,oCAAoC,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,CAAA;AAC/F,CAAC,CAAA;AAFY,QAAA,eAAe,mBAE3B"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/tag-service/util.ts"],"names":[],"mappings":";;;AAEO,MAAM,eAAe,GAAG,CAAC,UAAsB,EAAE,EAAE;IACxD,MAAM,mBAAmB,GAAG,UAAU;SACnC,OAAO,CAAC,oCAAoC,EAAE,EAAE,CAAC;SACjD,OAAO,CAAC,gCAAgC,EAAE,EAAE,CAAC,CAAA;IAEhD,MAAM,SAAS,GAAG,mBAAmB;SAClC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC;SACnC,WAAW,EAAE,CAAA;IAEhB,OAAO,UAAU,SAAS,EAAE,CAAA;AAC9B,CAAC,CAAA;AAVY,QAAA,eAAe,mBAU3B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atproto/ozone",
3
- "version": "0.1.140",
3
+ "version": "0.1.141",
4
4
  "license": "MIT",
5
5
  "description": "Backend service for moderating the Bluesky network.",
6
6
  "keywords": [
@@ -35,14 +35,14 @@
35
35
  "uint8arrays": "3.0.0",
36
36
  "undici": "^6.14.1",
37
37
  "ws": "^8.12.0",
38
- "@atproto/api": "^0.16.7",
39
- "@atproto/common": "^0.4.11",
38
+ "@atproto/api": "^0.16.8",
39
+ "@atproto/common": "^0.4.12",
40
40
  "@atproto/crypto": "^0.4.4",
41
- "@atproto/identity": "^0.4.8",
42
- "@atproto/lexicon": "^0.5.0",
41
+ "@atproto/identity": "^0.4.9",
42
+ "@atproto/lexicon": "^0.5.1",
43
43
  "@atproto/syntax": "^0.4.1",
44
- "@atproto/xrpc": "^0.7.4",
45
- "@atproto/xrpc-server": "^0.9.4"
44
+ "@atproto/xrpc": "^0.7.5",
45
+ "@atproto/xrpc-server": "^0.9.5"
46
46
  },
47
47
  "devDependencies": {
48
48
  "@did-plc/server": "^0.0.1",
@@ -54,8 +54,8 @@
54
54
  "jest": "^28.1.2",
55
55
  "ts-node": "^10.8.2",
56
56
  "typescript": "^5.6.3",
57
- "@atproto/lex-cli": "^0.9.4",
58
- "@atproto/pds": "^0.4.176"
57
+ "@atproto/lex-cli": "^0.9.5",
58
+ "@atproto/pds": "^0.4.177"
59
59
  },
60
60
  "scripts": {
61
61
  "codegen": "lex gen-server --yes ./src/lexicon ../../lexicons/com/atproto/*/* ../../lexicons/app/bsky/*/* ../../lexicons/chat/bsky/*/* ../../lexicons/tools/ozone/*/*",
@@ -163,6 +163,10 @@ const handleModerationEvent = async ({
163
163
  await assertTagAuth(settingService, ctx.cfg.service.did, event, auth)
164
164
  }
165
165
 
166
+ if (isModEventReport(event)) {
167
+ await ctx.moderationServiceProfile().validateReasonType(event.reportType)
168
+ }
169
+
166
170
  const moderationEvent = await db.transaction(async (dbTxn) => {
167
171
  const moderationTxn = ctx.modService(dbTxn)
168
172
 
@@ -1,15 +1,12 @@
1
1
  import { ForbiddenError } from '@atproto/xrpc-server'
2
2
  import { AppContext } from '../../context'
3
3
  import { Server } from '../../lexicon'
4
- import {
5
- REASONAPPEAL,
6
- ReasonType,
7
- } from '../../lexicon/types/com/atproto/moderation/defs'
4
+ import { ReasonType } from '../../lexicon/types/com/atproto/moderation/defs'
8
5
  import { ModerationService } from '../../mod-service'
9
6
  import { subjectFromInput } from '../../mod-service/subject'
10
7
  import { TagService } from '../../tag-service'
11
8
  import { getTagForReport } from '../../tag-service/util'
12
- import { getReasonType } from '../util'
9
+ import { isAppealReport } from '../util'
13
10
 
14
11
  export default function (server: Server, ctx: AppContext) {
15
12
  server.com.atproto.moderation.createReport({
@@ -21,21 +18,24 @@ export default function (server: Server, ctx: AppContext) {
21
18
  const subject = subjectFromInput(input.body.subject)
22
19
 
23
20
  // If the report is an appeal, the requester must be the author of the subject
24
- if (reasonType === REASONAPPEAL && requester !== subject.did) {
21
+ if (isAppealReport(reasonType) && requester !== subject.did) {
25
22
  throw new ForbiddenError('You cannot appeal this report')
26
23
  }
27
24
 
28
25
  const db = ctx.db
29
26
 
30
- await assertValidReporter(ctx.modService(db), reasonType, requester)
27
+ await Promise.all([
28
+ assertValidReporter(ctx.modService(db), reasonType, requester),
29
+ ctx.moderationServiceProfile().validateReasonType(reasonType),
30
+ ])
31
31
 
32
32
  const report = await db.transaction(async (dbTxn) => {
33
33
  const moderationTxn = ctx.modService(dbTxn)
34
34
  const { event: reportEvent, subjectStatus } =
35
35
  await moderationTxn.report({
36
- reasonType: getReasonType(reasonType),
37
36
  reason,
38
37
  subject,
38
+ reasonType,
39
39
  reportedBy: requester || ctx.cfg.service.did,
40
40
  modTool,
41
41
  })
@@ -73,7 +73,7 @@ const assertValidReporter = async (
73
73
  }
74
74
 
75
75
  // For appeals, we just need to make sure that the account does not have pending appeal
76
- if (reasonType === REASONAPPEAL) {
76
+ if (isAppealReport(reasonType)) {
77
77
  if (reporterStatus[0]?.appealed) {
78
78
  throw new ForbiddenError(
79
79
  'Awaiting decision on previous appeal',
package/src/api/util.ts CHANGED
@@ -4,17 +4,7 @@ import { Member } from '../db/schema/member'
4
4
  import { ModerationEvent } from '../db/schema/moderation_event'
5
5
  import { ids } from '../lexicon/lexicons'
6
6
  import { AccountView } from '../lexicon/types/com/atproto/admin/defs'
7
- import { InputSchema as ReportInput } from '../lexicon/types/com/atproto/moderation/createReport'
8
- import {
9
- REASONAPPEAL,
10
- REASONMISLEADING,
11
- REASONOTHER,
12
- REASONRUDE,
13
- REASONSEXUAL,
14
- REASONSPAM,
15
- REASONVIOLATION,
16
- ReasonType,
17
- } from '../lexicon/types/com/atproto/moderation/defs'
7
+ import { REASONAPPEAL } from '../lexicon/types/com/atproto/moderation/defs'
18
8
  import {
19
9
  REVIEWCLOSED,
20
10
  REVIEWESCALATED,
@@ -122,13 +112,6 @@ export const addAccountInfoToRepoView = (
122
112
  }
123
113
  }
124
114
 
125
- export const getReasonType = (reasonType: ReportInput['reasonType']) => {
126
- if (reasonTypes.has(reasonType)) {
127
- return reasonType
128
- }
129
- throw new InvalidRequestError('Invalid reason type')
130
- }
131
-
132
115
  export const getEventType = (type: string) => {
133
116
  if (eventTypes.has(type)) {
134
117
  return type as ModerationEvent['action']
@@ -146,16 +129,6 @@ export const getReviewState = (reviewState?: string) => {
146
129
 
147
130
  const reviewStates = new Set([REVIEWCLOSED, REVIEWESCALATED, REVIEWOPEN])
148
131
 
149
- const reasonTypes = new Set<ReasonType>([
150
- REASONOTHER,
151
- REASONSPAM,
152
- REASONMISLEADING,
153
- REASONRUDE,
154
- REASONSEXUAL,
155
- REASONVIOLATION,
156
- REASONAPPEAL,
157
- ])
158
-
159
132
  const eventTypes = new Set([
160
133
  'tools.ozone.moderation.defs#modEventTakedown',
161
134
  'tools.ozone.moderation.defs#modEventAcknowledge',
@@ -194,6 +167,12 @@ const memberRoles = new Set([
194
167
  ROLEVERIFIER,
195
168
  ])
196
169
 
170
+ export const OZONE_APPEAL_REASON_TYPE = 'tools.ozone.report.defs#reasonAppeal'
171
+ const APPEAL_REASON_TYPES = [REASONAPPEAL, OZONE_APPEAL_REASON_TYPE]
172
+ export const isAppealReport = (reasonType?: string): boolean => {
173
+ return !!reasonType && APPEAL_REASON_TYPES.includes(reasonType)
174
+ }
175
+
197
176
  export const getSafelinkPattern = (pattern: string): SafelinkPatternType => {
198
177
  if (safelinkPatterns.has(pattern)) {
199
178
  return pattern as SafelinkPatternType
@@ -1,5 +1,5 @@
1
1
  import assert from 'node:assert'
2
- import { DAY, HOUR } from '@atproto/common'
2
+ import { DAY, HOUR, MINUTE } from '@atproto/common'
3
3
  import { OzoneEnvironment } from './env'
4
4
 
5
5
  // off-config but still from env:
@@ -15,6 +15,7 @@ export const envToCfg = (env: OzoneEnvironment): OzoneConfig => {
15
15
  did: env.serverDid,
16
16
  version: env.version,
17
17
  devMode: env.devMode,
18
+ serviceRecordCacheTTL: env.serviceRecordCacheTTL ?? 5 * MINUTE, // default 5 mins
18
19
  }
19
20
 
20
21
  assert(env.dbPostgresUrl, 'dbPostgresUrl is required')
@@ -124,6 +125,7 @@ export type ServiceConfig = {
124
125
  did: string
125
126
  version?: string
126
127
  devMode?: boolean
128
+ serviceRecordCacheTTL: number // in ms, default 5 mins
127
129
  }
128
130
 
129
131
  export type BlobDivertConfig = {
package/src/config/env.ts CHANGED
@@ -8,6 +8,7 @@ export const readEnv = (): OzoneEnvironment => {
8
8
  port: envInt('OZONE_PORT'),
9
9
  publicUrl: envStr('OZONE_PUBLIC_URL'),
10
10
  serverDid: envStr('OZONE_SERVER_DID'),
11
+ serviceRecordCacheTTL: envInt('OZONE_SERVICE_RECORD_CACHE_TTL'),
11
12
  appviewUrl: envStr('OZONE_APPVIEW_URL'),
12
13
  appviewDid: envStr('OZONE_APPVIEW_DID'),
13
14
  appviewPushEvents: envBool('OZONE_APPVIEW_PUSH_EVENTS'),
@@ -52,6 +53,7 @@ export type OzoneEnvironment = {
52
53
  port?: number
53
54
  publicUrl?: string
54
55
  serverDid?: string
56
+ serviceRecordCacheTTL?: number
55
57
  appviewUrl?: string
56
58
  appviewDid?: string
57
59
  appviewPushEvents?: boolean
package/src/context.ts CHANGED
@@ -17,6 +17,10 @@ import { BlobDiverter } from './daemon/blob-diverter'
17
17
  import { Database } from './db'
18
18
  import { ImageInvalidator } from './image-invalidator'
19
19
  import { ModerationService, ModerationServiceCreator } from './mod-service'
20
+ import {
21
+ ModerationServiceProfile,
22
+ ModerationServiceProfileCreator,
23
+ } from './mod-service/profile'
20
24
  import {
21
25
  SafelinkRuleService,
22
26
  SafelinkRuleServiceCreator,
@@ -45,6 +49,7 @@ export type AppContextOptions = {
45
49
  db: Database
46
50
  cfg: OzoneConfig
47
51
  modService: ModerationServiceCreator
52
+ moderationServiceProfile: ModerationServiceProfileCreator
48
53
  communicationTemplateService: CommunicationTemplateServiceCreator
49
54
  safelinkRuleService: SafelinkRuleServiceCreator
50
55
  setService: SetServiceCreator
@@ -145,6 +150,10 @@ export class AppContext {
145
150
  const settingService = SettingService.creator()
146
151
  const verificationService = VerificationService.creator()
147
152
  const verificationIssuer = VerificationIssuer.creator()
153
+ const moderationServiceProfile = ModerationServiceProfile.creator(
154
+ cfg,
155
+ appviewAgent,
156
+ )
148
157
 
149
158
  const sequencer = new Sequencer(modService(db))
150
159
 
@@ -159,6 +168,7 @@ export class AppContext {
159
168
  db,
160
169
  cfg,
161
170
  modService,
171
+ moderationServiceProfile,
162
172
  communicationTemplateService,
163
173
  safelinkRuleService,
164
174
  teamService,
@@ -235,6 +245,10 @@ export class AppContext {
235
245
  return this.opts.verificationIssuer
236
246
  }
237
247
 
248
+ get moderationServiceProfile(): ModerationServiceProfileCreator {
249
+ return this.opts.moderationServiceProfile
250
+ }
251
+
238
252
  get appviewAgent(): AtpAgent {
239
253
  return this.opts.appviewAgent
240
254
  }
@@ -0,0 +1,311 @@
1
+ import { Kysely, sql } from 'kysely'
2
+ import { OZONE_APPEAL_REASON_TYPE } from '../../api/util'
3
+ import { REASONAPPEAL } from '../../lexicon/types/com/atproto/moderation/defs'
4
+ import { DatabaseSchemaType } from '../schema'
5
+ import * as modEvent from '../schema/moderation_event'
6
+ import * as recordEventsStats from '../schema/record_events_stats'
7
+
8
+ export async function up(db: Kysely<any>): Promise<void> {
9
+ // Drop and recreate materialized views to update appeal reason counting
10
+ // to include both REASONAPPEAL and OZONE_APPEAL_REASON_TYPE
11
+ // The primary difference between the old and new query is that we were using = and != operators
12
+ // to match against the meta->>'reportType' field and now we use IN and NOT IN
13
+
14
+ // Drop existing materialized views in reverse dependency order
15
+ await db.schema
16
+ .dropView('account_record_events_stats')
17
+ .materialized()
18
+ .execute()
19
+ await db.schema.dropView('record_events_stats').materialized().execute()
20
+ await db.schema.dropView('account_events_stats').materialized().execute()
21
+
22
+ // Recreate account_events_stats with updated appeal counting
23
+ await db.schema
24
+ .createView('account_events_stats')
25
+ .materialized()
26
+ .as(
27
+ (db as Kysely<modEvent.PartialDB>)
28
+ .selectFrom('moderation_event')
29
+ .where('subjectType', '=', 'com.atproto.admin.defs#repoRef')
30
+ .where('subjectUri', 'is', null)
31
+ .select('subjectDid')
32
+ .select([
33
+ (eb) =>
34
+ sql<number>`COUNT(*) FILTER(
35
+ WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventTakedown'
36
+ AND ${eb.ref('durationInHours')} IS NULL
37
+ )`.as('takedownCount'),
38
+ (eb) =>
39
+ sql<number>`COUNT(*) FILTER(
40
+ WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventTakedown'
41
+ AND ${eb.ref('durationInHours')} IS NOT NULL
42
+ )`.as('suspendCount'),
43
+ (eb) =>
44
+ sql<number>`COUNT(*) FILTER(
45
+ WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventEscalate'
46
+ )`.as('escalateCount'),
47
+ (eb) =>
48
+ sql<number>`COUNT(*) FILTER(
49
+ WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventReport'
50
+ AND ${eb.ref('meta')} ->> 'reportType' NOT IN (${REASONAPPEAL}, ${OZONE_APPEAL_REASON_TYPE})
51
+ )`.as('reportCount'),
52
+ (eb) =>
53
+ sql<number>`COUNT(*) FILTER(
54
+ WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventReport'
55
+ AND ${eb.ref('meta')} ->> 'reportType' IN (${REASONAPPEAL}, ${OZONE_APPEAL_REASON_TYPE})
56
+ )`.as('appealCount'),
57
+ ])
58
+ .groupBy('subjectDid'),
59
+ )
60
+ .execute()
61
+
62
+ // Recreate record_events_stats with updated appeal counting
63
+ await db.schema
64
+ .createView('record_events_stats')
65
+ .materialized()
66
+ .as(
67
+ (db as Kysely<modEvent.PartialDB>)
68
+ .selectFrom('moderation_event')
69
+ .select([
70
+ 'subjectDid',
71
+ 'subjectUri',
72
+ (eb) =>
73
+ sql<number>`COUNT(*) FILTER (WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventEscalate')`.as(
74
+ 'escalateCount',
75
+ ),
76
+ (eb) =>
77
+ sql<number>`COUNT(*) FILTER (WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventReport' AND ${eb.ref('meta')} ->> 'reportType' NOT IN (${REASONAPPEAL}, ${OZONE_APPEAL_REASON_TYPE}))`.as(
78
+ 'reportCount',
79
+ ),
80
+ (eb) =>
81
+ sql<number>`COUNT(*) FILTER (WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventReport' AND ${eb.ref('meta')} ->> 'reportType' IN (${REASONAPPEAL}, ${OZONE_APPEAL_REASON_TYPE}))`.as(
82
+ 'appealCount',
83
+ ),
84
+ ])
85
+ .where('subjectType', '=', 'com.atproto.repo.strongRef')
86
+ .where('subjectUri', 'is not', null)
87
+ .groupBy(['subjectDid', 'subjectUri']),
88
+ )
89
+ .execute()
90
+
91
+ // Recreate account_record_events_stats (unchanged logic, but depends on record_events_stats)
92
+ await db.schema
93
+ .createView('account_record_events_stats')
94
+ .materialized()
95
+ .as(
96
+ (db as Kysely<recordEventsStats.PartialDB>)
97
+ .selectFrom('record_events_stats')
98
+ .select([
99
+ 'subjectDid',
100
+ (eb) =>
101
+ sql<number>`SUM(${eb.ref('reportCount')})::bigint`.as(
102
+ 'totalReports',
103
+ ),
104
+ (eb) =>
105
+ sql<number>`COUNT(*) FILTER (WHERE ${eb.ref('reportCount')} > 0)`.as(
106
+ 'reportedCount',
107
+ ),
108
+ (eb) =>
109
+ sql<number>`COUNT(*) FILTER (WHERE ${eb.ref('escalateCount')} > 0)`.as(
110
+ 'escalatedCount',
111
+ ),
112
+ (eb) =>
113
+ sql<number>`COUNT(*) FILTER (WHERE ${eb.ref('appealCount')} > 0)`.as(
114
+ 'appealedCount',
115
+ ),
116
+ ])
117
+ .groupBy('subjectDid'),
118
+ )
119
+ .execute()
120
+
121
+ // Recreate all indexes for the materialized views
122
+ await db.schema
123
+ .createIndex('account_events_stats_did_idx')
124
+ .unique()
125
+ .on('account_events_stats')
126
+ .column('subjectDid')
127
+ .execute()
128
+
129
+ await db.schema
130
+ .createIndex('account_events_stats_suspend_count_idx')
131
+ .on('account_events_stats')
132
+ .expression(sql`"suspendCount" ASC NULLS FIRST`)
133
+ .column('subjectDid')
134
+ .execute()
135
+
136
+ await db.schema
137
+ .createIndex('record_events_stats_uri_idx')
138
+ .unique()
139
+ .on('record_events_stats')
140
+ .column('subjectUri')
141
+ .execute()
142
+
143
+ await db.schema
144
+ .createIndex('record_events_stats_did_idx')
145
+ .on('record_events_stats')
146
+ .column('subjectDid')
147
+ .execute()
148
+
149
+ await db.schema
150
+ .createIndex('account_record_events_stats_did_idx')
151
+ .unique()
152
+ .on('account_record_events_stats')
153
+ .column('subjectDid')
154
+ .execute()
155
+
156
+ await db.schema
157
+ .createIndex('account_record_events_stats_reported_count_idx')
158
+ .on('account_record_events_stats')
159
+ .expression(sql`"reportedCount" ASC NULLS FIRST`)
160
+ .column('subjectDid')
161
+ .execute()
162
+ }
163
+
164
+ export async function down(db: Kysely<DatabaseSchemaType>): Promise<void> {
165
+ // Drop the updated materialized views
166
+ await db.schema
167
+ .dropView('account_record_events_stats')
168
+ .materialized()
169
+ .execute()
170
+ await db.schema.dropView('record_events_stats').materialized().execute()
171
+ await db.schema.dropView('account_events_stats').materialized().execute()
172
+
173
+ // Recreate the original views with single appeal reason type
174
+ await db.schema
175
+ .createView('account_events_stats')
176
+ .materialized()
177
+ .as(
178
+ (db as Kysely<modEvent.PartialDB>)
179
+ .selectFrom('moderation_event')
180
+ .where('subjectType', '=', 'com.atproto.admin.defs#repoRef')
181
+ .where('subjectUri', 'is', null)
182
+ .select('subjectDid')
183
+ .select([
184
+ (eb) =>
185
+ sql<number>`COUNT(*) FILTER(
186
+ WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventTakedown'
187
+ AND ${eb.ref('durationInHours')} IS NULL
188
+ )`.as('takedownCount'),
189
+ (eb) =>
190
+ sql<number>`COUNT(*) FILTER(
191
+ WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventTakedown'
192
+ AND ${eb.ref('durationInHours')} IS NOT NULL
193
+ )`.as('suspendCount'),
194
+ (eb) =>
195
+ sql<number>`COUNT(*) FILTER(
196
+ WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventEscalate'
197
+ )`.as('escalateCount'),
198
+ (eb) =>
199
+ sql<number>`COUNT(*) FILTER(
200
+ WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventReport'
201
+ AND ${eb.ref('meta')} ->> 'reportType' != ${REASONAPPEAL}
202
+ )`.as('reportCount'),
203
+ (eb) =>
204
+ sql<number>`COUNT(*) FILTER(
205
+ WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventReport'
206
+ AND ${eb.ref('meta')} ->> 'reportType' = ${REASONAPPEAL}
207
+ )`.as('appealCount'),
208
+ ])
209
+ .groupBy('subjectDid'),
210
+ )
211
+ .execute()
212
+
213
+ await db.schema
214
+ .createView('record_events_stats')
215
+ .materialized()
216
+ .as(
217
+ (db as Kysely<modEvent.PartialDB>)
218
+ .selectFrom('moderation_event')
219
+ .select([
220
+ 'subjectDid',
221
+ 'subjectUri',
222
+ (eb) =>
223
+ sql<number>`COUNT(*) FILTER (WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventEscalate')`.as(
224
+ 'escalateCount',
225
+ ),
226
+ (eb) =>
227
+ sql<number>`COUNT(*) FILTER (WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventReport' AND ${eb.ref('meta')} ->> 'reportType' != 'com.atproto.moderation.defs#reasonAppeal')`.as(
228
+ 'reportCount',
229
+ ),
230
+ (eb) =>
231
+ sql<number>`COUNT(*) FILTER (WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventReport' AND ${eb.ref('meta')} ->> 'reportType' = 'com.atproto.moderation.defs#reasonAppeal')`.as(
232
+ 'appealCount',
233
+ ),
234
+ ])
235
+ .where('subjectType', '=', 'com.atproto.repo.strongRef')
236
+ .where('subjectUri', 'is not', null)
237
+ .groupBy(['subjectDid', 'subjectUri']),
238
+ )
239
+ .execute()
240
+
241
+ await db.schema
242
+ .createView('account_record_events_stats')
243
+ .materialized()
244
+ .as(
245
+ (db as Kysely<recordEventsStats.PartialDB>)
246
+ .selectFrom('record_events_stats')
247
+ .select([
248
+ 'subjectDid',
249
+ (eb) =>
250
+ sql<number>`SUM(${eb.ref('reportCount')})::bigint`.as(
251
+ 'totalReports',
252
+ ),
253
+ (eb) =>
254
+ sql<number>`COUNT(*) FILTER (WHERE ${eb.ref('reportCount')} > 0)`.as(
255
+ 'reportedCount',
256
+ ),
257
+ (eb) =>
258
+ sql<number>`COUNT(*) FILTER (WHERE ${eb.ref('escalateCount')} > 0)`.as(
259
+ 'escalatedCount',
260
+ ),
261
+ (eb) =>
262
+ sql<number>`COUNT(*) FILTER (WHERE ${eb.ref('appealCount')} > 0)`.as(
263
+ 'appealedCount',
264
+ ),
265
+ ])
266
+ .groupBy('subjectDid'),
267
+ )
268
+ .execute()
269
+
270
+ // Recreate indexes
271
+ await db.schema
272
+ .createIndex('account_events_stats_did_idx')
273
+ .unique()
274
+ .on('account_events_stats')
275
+ .column('subjectDid')
276
+ .execute()
277
+
278
+ await db.schema
279
+ .createIndex('account_events_stats_suspend_count_idx')
280
+ .on('account_events_stats')
281
+ .expression(sql`"suspendCount" ASC NULLS FIRST`)
282
+ .column('subjectDid')
283
+ .execute()
284
+
285
+ await db.schema
286
+ .createIndex('record_events_stats_uri_idx')
287
+ .unique()
288
+ .on('record_events_stats')
289
+ .column('subjectUri')
290
+ .execute()
291
+
292
+ await db.schema
293
+ .createIndex('record_events_stats_did_idx')
294
+ .on('record_events_stats')
295
+ .column('subjectDid')
296
+ .execute()
297
+
298
+ await db.schema
299
+ .createIndex('account_record_events_stats_did_idx')
300
+ .unique()
301
+ .on('account_record_events_stats')
302
+ .column('subjectDid')
303
+ .execute()
304
+
305
+ await db.schema
306
+ .createIndex('account_record_events_stats_reported_count_idx')
307
+ .on('account_record_events_stats')
308
+ .expression(sql`"reportedCount" ASC NULLS FIRST`)
309
+ .column('subjectDid')
310
+ .execute()
311
+ }
@@ -29,3 +29,4 @@ export * as _20250609T110704000Z from './20250609T110704000Z-safelink'
29
29
  export * as _20250618T180246000Z from './20250618T180246000Z-add-mod-tool-to-moderation-event'
30
30
  export * as _20250701T000000000Z from './20250701T000000000Z-add-age-assurance-state'
31
31
  export * as _20250715T000000000Z from './20250715T000000000Z-add-mod-event-external-id'
32
+ export * as _20250718T150931000Z from './20250718T150931000Z-update-appeal-reason-stats'