@atproto/pds 0.3.16 → 0.3.17

Sign up to get free protection for your applications and to get access to all the features.
@@ -117,7 +117,6 @@ import * as AppBskyNotificationRegisterPush from './types/app/bsky/notification/
117
117
  import * as AppBskyNotificationUpdateSeen from './types/app/bsky/notification/updateSeen';
118
118
  import * as AppBskyUnspeccedGetPopularFeedGenerators from './types/app/bsky/unspecced/getPopularFeedGenerators';
119
119
  import * as AppBskyUnspeccedGetTaggedSuggestions from './types/app/bsky/unspecced/getTaggedSuggestions';
120
- import * as AppBskyUnspeccedGetTimelineSkeleton from './types/app/bsky/unspecced/getTimelineSkeleton';
121
120
  import * as AppBskyUnspeccedSearchActorsSkeleton from './types/app/bsky/unspecced/searchActorsSkeleton';
122
121
  import * as AppBskyUnspeccedSearchPostsSkeleton from './types/app/bsky/unspecced/searchPostsSkeleton';
123
122
  export declare const COM_ATPROTO_ADMIN: {
@@ -355,7 +354,6 @@ export declare class AppBskyUnspeccedNS {
355
354
  constructor(server: Server);
356
355
  getPopularFeedGenerators<AV extends AuthVerifier>(cfg: ConfigOf<AV, AppBskyUnspeccedGetPopularFeedGenerators.Handler<ExtractAuth<AV>>, AppBskyUnspeccedGetPopularFeedGenerators.HandlerReqCtx<ExtractAuth<AV>>>): void;
357
356
  getTaggedSuggestions<AV extends AuthVerifier>(cfg: ConfigOf<AV, AppBskyUnspeccedGetTaggedSuggestions.Handler<ExtractAuth<AV>>, AppBskyUnspeccedGetTaggedSuggestions.HandlerReqCtx<ExtractAuth<AV>>>): void;
358
- getTimelineSkeleton<AV extends AuthVerifier>(cfg: ConfigOf<AV, AppBskyUnspeccedGetTimelineSkeleton.Handler<ExtractAuth<AV>>, AppBskyUnspeccedGetTimelineSkeleton.HandlerReqCtx<ExtractAuth<AV>>>): void;
359
357
  searchActorsSkeleton<AV extends AuthVerifier>(cfg: ConfigOf<AV, AppBskyUnspeccedSearchActorsSkeleton.Handler<ExtractAuth<AV>>, AppBskyUnspeccedSearchActorsSkeleton.HandlerReqCtx<ExtractAuth<AV>>>): void;
360
358
  searchPostsSkeleton<AV extends AuthVerifier>(cfg: ConfigOf<AV, AppBskyUnspeccedSearchPostsSkeleton.Handler<ExtractAuth<AV>>, AppBskyUnspeccedSearchPostsSkeleton.HandlerReqCtx<ExtractAuth<AV>>>): void;
361
359
  }
@@ -1296,6 +1296,16 @@ export declare const schemaDict: {
1296
1296
  enum: string[];
1297
1297
  description: string;
1298
1298
  };
1299
+ createdAfter: {
1300
+ type: string;
1301
+ format: string;
1302
+ description: string;
1303
+ };
1304
+ createdBefore: {
1305
+ type: string;
1306
+ format: string;
1307
+ description: string;
1308
+ };
1299
1309
  subject: {
1300
1310
  type: string;
1301
1311
  format: string;
@@ -1311,6 +1321,34 @@ export declare const schemaDict: {
1311
1321
  maximum: number;
1312
1322
  default: number;
1313
1323
  };
1324
+ hasComment: {
1325
+ type: string;
1326
+ description: string;
1327
+ };
1328
+ comment: {
1329
+ type: string;
1330
+ description: string;
1331
+ };
1332
+ addedLabels: {
1333
+ type: string;
1334
+ items: {
1335
+ type: string;
1336
+ };
1337
+ description: string;
1338
+ };
1339
+ removedLabels: {
1340
+ type: string;
1341
+ items: {
1342
+ type: string;
1343
+ };
1344
+ description: string;
1345
+ };
1346
+ reportTypes: {
1347
+ type: string;
1348
+ items: {
1349
+ type: string;
1350
+ };
1351
+ };
1314
1352
  cursor: {
1315
1353
  type: string;
1316
1354
  };
@@ -7602,52 +7640,6 @@ export declare const schemaDict: {
7602
7640
  };
7603
7641
  };
7604
7642
  };
7605
- AppBskyUnspeccedGetTimelineSkeleton: {
7606
- lexicon: number;
7607
- id: string;
7608
- defs: {
7609
- main: {
7610
- type: string;
7611
- description: string;
7612
- parameters: {
7613
- type: string;
7614
- properties: {
7615
- limit: {
7616
- type: string;
7617
- minimum: number;
7618
- maximum: number;
7619
- default: number;
7620
- };
7621
- cursor: {
7622
- type: string;
7623
- };
7624
- };
7625
- };
7626
- output: {
7627
- encoding: string;
7628
- schema: {
7629
- type: string;
7630
- required: string[];
7631
- properties: {
7632
- cursor: {
7633
- type: string;
7634
- };
7635
- feed: {
7636
- type: string;
7637
- items: {
7638
- type: string;
7639
- ref: string;
7640
- };
7641
- };
7642
- };
7643
- };
7644
- };
7645
- errors: {
7646
- name: string;
7647
- }[];
7648
- };
7649
- };
7650
- };
7651
7643
  AppBskyUnspeccedSearchActorsSkeleton: {
7652
7644
  lexicon: number;
7653
7645
  id: string;
@@ -7911,7 +7903,6 @@ export declare const ids: {
7911
7903
  AppBskyUnspeccedDefs: string;
7912
7904
  AppBskyUnspeccedGetPopularFeedGenerators: string;
7913
7905
  AppBskyUnspeccedGetTaggedSuggestions: string;
7914
- AppBskyUnspeccedGetTimelineSkeleton: string;
7915
7906
  AppBskyUnspeccedSearchActorsSkeleton: string;
7916
7907
  AppBskyUnspeccedSearchPostsSkeleton: string;
7917
7908
  };
@@ -12,7 +12,7 @@ export declare function isStatusAttr(v: unknown): v is StatusAttr;
12
12
  export declare function validateStatusAttr(v: unknown): ValidationResult;
13
13
  export interface ModEventView {
14
14
  id: number;
15
- event: ModEventTakedown | ModEventReverseTakedown | ModEventComment | ModEventReport | ModEventLabel | ModEventAcknowledge | ModEventEscalate | ModEventMute | ModEventEmail | {
15
+ event: ModEventTakedown | ModEventReverseTakedown | ModEventComment | ModEventReport | ModEventLabel | ModEventAcknowledge | ModEventEscalate | ModEventMute | ModEventEmail | ModEventResolveAppeal | {
16
16
  $type: string;
17
17
  [k: string]: unknown;
18
18
  };
@@ -31,7 +31,7 @@ export declare function isModEventView(v: unknown): v is ModEventView;
31
31
  export declare function validateModEventView(v: unknown): ValidationResult;
32
32
  export interface ModEventViewDetail {
33
33
  id: number;
34
- event: ModEventTakedown | ModEventReverseTakedown | ModEventComment | ModEventReport | ModEventLabel | ModEventAcknowledge | ModEventEscalate | ModEventMute | ModEventResolveAppeal | {
34
+ event: ModEventTakedown | ModEventReverseTakedown | ModEventComment | ModEventReport | ModEventLabel | ModEventAcknowledge | ModEventEscalate | ModEventMute | ModEventEmail | ModEventResolveAppeal | {
35
35
  $type: string;
36
36
  [k: string]: unknown;
37
37
  };
@@ -5,9 +5,16 @@ export interface QueryParams {
5
5
  types?: string[];
6
6
  createdBy?: string;
7
7
  sortDirection: 'asc' | 'desc';
8
+ createdAfter?: string;
9
+ createdBefore?: string;
8
10
  subject?: string;
9
11
  includeAllUserRecords: boolean;
10
12
  limit: number;
13
+ hasComment?: boolean;
14
+ comment?: string;
15
+ addedLabels?: string[];
16
+ removedLabels?: string[];
17
+ reportTypes?: string[];
11
18
  cursor?: string;
12
19
  }
13
20
  export type InputSchema = undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atproto/pds",
3
- "version": "0.3.16",
3
+ "version": "0.3.17",
4
4
  "license": "MIT",
5
5
  "description": "Reference implementation of atproto Personal Data Server (PDS)",
6
6
  "keywords": [
@@ -44,7 +44,7 @@
44
44
  "typed-emitter": "^2.1.0",
45
45
  "uint8arrays": "3.0.0",
46
46
  "zod": "^3.21.4",
47
- "@atproto/api": "^0.9.5",
47
+ "@atproto/api": "^0.9.6",
48
48
  "@atproto/aws": "^0.1.6",
49
49
  "@atproto/common": "^0.3.3",
50
50
  "@atproto/crypto": "^0.3.0",
@@ -68,9 +68,9 @@
68
68
  "axios": "^0.27.2",
69
69
  "get-port": "^6.1.2",
70
70
  "ws": "^8.12.0",
71
- "@atproto/api": "^0.9.5",
72
- "@atproto/bsky": "^0.0.28",
73
- "@atproto/dev-env": "^0.2.28",
71
+ "@atproto/api": "^0.9.6",
72
+ "@atproto/bsky": "^0.0.29",
73
+ "@atproto/dev-env": "^0.2.29",
74
74
  "@atproto/lex-cli": "^0.3.0"
75
75
  },
76
76
  "scripts": {
@@ -34,6 +34,12 @@ export const deleteEmailToken = async (
34
34
  )
35
35
  }
36
36
 
37
+ export const deleteAllEmailTokens = async (db: AccountDb, did: string) => {
38
+ await db.executeWithRetry(
39
+ db.db.deleteFrom('email_token').where('did', '=', did),
40
+ )
41
+ }
42
+
37
43
  export const assertValidToken = async (
38
44
  db: AccountDb,
39
45
  did: string,
@@ -321,18 +321,14 @@ export class AccountManager {
321
321
  )
322
322
  }
323
323
 
324
- async updateEmail(opts: { did: string; email: string; token?: string }) {
325
- const { did, email, token } = opts
326
- if (token) {
327
- await this.db.transaction((dbTxn) =>
328
- Promise.all([
329
- account.updateEmail(dbTxn, did, email),
330
- emailToken.deleteEmailToken(dbTxn, did, 'update_email'),
331
- ]),
332
- )
333
- } else {
334
- return account.updateEmail(this.db, did, email)
335
- }
324
+ async updateEmail(opts: { did: string; email: string }) {
325
+ const { did, email } = opts
326
+ await this.db.transaction((dbTxn) =>
327
+ Promise.all([
328
+ account.updateEmail(dbTxn, did, email),
329
+ emailToken.deleteAllEmailTokens(dbTxn, did),
330
+ ]),
331
+ )
336
332
  }
337
333
 
338
334
  async resetPassword(opts: { password: string; token: string }) {
@@ -40,7 +40,7 @@ export default function (server: Server, ctx: AppContext) {
40
40
  { content },
41
41
  { subject, to: account.email },
42
42
  )
43
- await ctx.appViewAgent.api.com.atproto.admin.emitModerationEvent(
43
+ await ctx.moderationAgent.api.com.atproto.admin.emitModerationEvent(
44
44
  {
45
45
  event: {
46
46
  $type: 'com.atproto.admin.defs#modEventEmail',
@@ -1,3 +1,4 @@
1
+ import { DAY, HOUR } from '@atproto/common'
1
2
  import { InvalidRequestError } from '@atproto/xrpc-server'
2
3
  import { Server } from '../../../../lexicon'
3
4
  import AppContext from '../../../../context'
@@ -5,6 +6,18 @@ import { authPassthru } from '../../../proxy'
5
6
 
6
7
  export default function (server: Server, ctx: AppContext) {
7
8
  server.com.atproto.server.requestAccountDelete({
9
+ rateLimit: [
10
+ {
11
+ durationMs: DAY,
12
+ points: 15,
13
+ calcKey: ({ auth }) => auth.credentials.did,
14
+ },
15
+ {
16
+ durationMs: HOUR,
17
+ points: 5,
18
+ calcKey: ({ auth }) => auth.credentials.did,
19
+ },
20
+ ],
8
21
  auth: ctx.authVerifier.accessCheckTakedown,
9
22
  handler: async ({ auth, req }) => {
10
23
  const did = auth.credentials.did
@@ -1,3 +1,4 @@
1
+ import { DAY, HOUR } from '@atproto/common'
1
2
  import { InvalidRequestError } from '@atproto/xrpc-server'
2
3
  import { Server } from '../../../../lexicon'
3
4
  import AppContext from '../../../../context'
@@ -5,6 +6,18 @@ import { authPassthru } from '../../../proxy'
5
6
 
6
7
  export default function (server: Server, ctx: AppContext) {
7
8
  server.com.atproto.server.requestEmailConfirmation({
9
+ rateLimit: [
10
+ {
11
+ durationMs: DAY,
12
+ points: 15,
13
+ calcKey: ({ auth }) => auth.credentials.did,
14
+ },
15
+ {
16
+ durationMs: HOUR,
17
+ points: 5,
18
+ calcKey: ({ auth }) => auth.credentials.did,
19
+ },
20
+ ],
8
21
  auth: ctx.authVerifier.accessCheckTakedown,
9
22
  handler: async ({ auth, req }) => {
10
23
  const did = auth.credentials.did
@@ -1,3 +1,4 @@
1
+ import { DAY, HOUR } from '@atproto/common'
1
2
  import { InvalidRequestError } from '@atproto/xrpc-server'
2
3
  import { Server } from '../../../../lexicon'
3
4
  import AppContext from '../../../../context'
@@ -5,6 +6,18 @@ import { authPassthru, resultPassthru } from '../../../proxy'
5
6
 
6
7
  export default function (server: Server, ctx: AppContext) {
7
8
  server.com.atproto.server.requestEmailUpdate({
9
+ rateLimit: [
10
+ {
11
+ durationMs: DAY,
12
+ points: 15,
13
+ calcKey: ({ auth }) => auth.credentials.did,
14
+ },
15
+ {
16
+ durationMs: HOUR,
17
+ points: 5,
18
+ calcKey: ({ auth }) => auth.credentials.did,
19
+ },
20
+ ],
8
21
  auth: ctx.authVerifier.accessCheckTakedown,
9
22
  handler: async ({ auth, req }) => {
10
23
  const did = auth.credentials.did
@@ -1,32 +1,45 @@
1
+ import { DAY, HOUR } from '@atproto/common'
1
2
  import { InvalidRequestError } from '@atproto/xrpc-server'
2
3
  import AppContext from '../../../../context'
3
4
  import { Server } from '../../../../lexicon'
4
5
  import { authPassthru } from '../../../proxy'
5
6
 
6
7
  export default function (server: Server, ctx: AppContext) {
7
- server.com.atproto.server.requestPasswordReset(async ({ input, req }) => {
8
- const email = input.body.email.toLowerCase()
8
+ server.com.atproto.server.requestPasswordReset({
9
+ rateLimit: [
10
+ {
11
+ durationMs: DAY,
12
+ points: 50,
13
+ },
14
+ {
15
+ durationMs: HOUR,
16
+ points: 15,
17
+ },
18
+ ],
19
+ handler: async ({ input, req }) => {
20
+ const email = input.body.email.toLowerCase()
9
21
 
10
- const account = await ctx.accountManager.getAccountByEmail(email)
22
+ const account = await ctx.accountManager.getAccountByEmail(email)
11
23
 
12
- if (!account?.email) {
13
- if (ctx.entrywayAgent) {
14
- await ctx.entrywayAgent.com.atproto.server.requestPasswordReset(
15
- input.body,
16
- authPassthru(req, true),
17
- )
18
- return
24
+ if (!account?.email) {
25
+ if (ctx.entrywayAgent) {
26
+ await ctx.entrywayAgent.com.atproto.server.requestPasswordReset(
27
+ input.body,
28
+ authPassthru(req, true),
29
+ )
30
+ return
31
+ }
32
+ throw new InvalidRequestError('account does not have an email address')
19
33
  }
20
- throw new InvalidRequestError('account does not have an email address')
21
- }
22
34
 
23
- const token = await ctx.accountManager.createEmailToken(
24
- account.did,
25
- 'reset_password',
26
- )
27
- await ctx.mailer.sendResetPassword(
28
- { identifier: account.handle ?? account.email, token },
29
- { to: account.email },
30
- )
35
+ const token = await ctx.accountManager.createEmailToken(
36
+ account.did,
37
+ 'reset_password',
38
+ )
39
+ await ctx.mailer.sendResetPassword(
40
+ { identifier: account.handle ?? account.email, token },
41
+ { to: account.email },
42
+ )
43
+ },
31
44
  })
32
45
  }
@@ -45,7 +45,7 @@ export default function (server: Server, ctx: AppContext) {
45
45
  }
46
46
 
47
47
  try {
48
- await ctx.accountManager.updateEmail({ did, email, token })
48
+ await ctx.accountManager.updateEmail({ did, email })
49
49
  } catch (err) {
50
50
  if (err instanceof UserAlreadyExistsError) {
51
51
  throw new InvalidRequestError(
@@ -1,10 +1,12 @@
1
1
  import AppContext from '../../../../context'
2
2
  import { Server } from '../../../../lexicon'
3
+ import checkSignupQueue from './checkSignupQueue'
3
4
  import importRepo from './importRepo'
4
5
  import pushBlob from './pushBlob'
5
6
  import transferAccount from './transferAccount'
6
7
 
7
8
  export default function (server: Server, ctx: AppContext) {
9
+ checkSignupQueue(server, ctx)
8
10
  importRepo(server, ctx)
9
11
  pushBlob(server, ctx)
10
12
  transferAccount(server, ctx)
@@ -127,7 +127,6 @@ import * as AppBskyNotificationRegisterPush from './types/app/bsky/notification/
127
127
  import * as AppBskyNotificationUpdateSeen from './types/app/bsky/notification/updateSeen'
128
128
  import * as AppBskyUnspeccedGetPopularFeedGenerators from './types/app/bsky/unspecced/getPopularFeedGenerators'
129
129
  import * as AppBskyUnspeccedGetTaggedSuggestions from './types/app/bsky/unspecced/getTaggedSuggestions'
130
- import * as AppBskyUnspeccedGetTimelineSkeleton from './types/app/bsky/unspecced/getTimelineSkeleton'
131
130
  import * as AppBskyUnspeccedSearchActorsSkeleton from './types/app/bsky/unspecced/searchActorsSkeleton'
132
131
  import * as AppBskyUnspeccedSearchPostsSkeleton from './types/app/bsky/unspecced/searchPostsSkeleton'
133
132
 
@@ -1649,17 +1648,6 @@ export class AppBskyUnspeccedNS {
1649
1648
  return this._server.xrpc.method(nsid, cfg)
1650
1649
  }
1651
1650
 
1652
- getTimelineSkeleton<AV extends AuthVerifier>(
1653
- cfg: ConfigOf<
1654
- AV,
1655
- AppBskyUnspeccedGetTimelineSkeleton.Handler<ExtractAuth<AV>>,
1656
- AppBskyUnspeccedGetTimelineSkeleton.HandlerReqCtx<ExtractAuth<AV>>
1657
- >,
1658
- ) {
1659
- const nsid = 'app.bsky.unspecced.getTimelineSkeleton' // @ts-ignore
1660
- return this._server.xrpc.method(nsid, cfg)
1661
- }
1662
-
1663
1651
  searchActorsSkeleton<AV extends AuthVerifier>(
1664
1652
  cfg: ConfigOf<
1665
1653
  AV,
@@ -91,6 +91,7 @@ export const schemaDict = {
91
91
  'lex:com.atproto.admin.defs#modEventEscalate',
92
92
  'lex:com.atproto.admin.defs#modEventMute',
93
93
  'lex:com.atproto.admin.defs#modEventEmail',
94
+ 'lex:com.atproto.admin.defs#modEventResolveAppeal',
94
95
  ],
95
96
  },
96
97
  subject: {
@@ -147,6 +148,7 @@ export const schemaDict = {
147
148
  'lex:com.atproto.admin.defs#modEventAcknowledge',
148
149
  'lex:com.atproto.admin.defs#modEventEscalate',
149
150
  'lex:com.atproto.admin.defs#modEventMute',
151
+ 'lex:com.atproto.admin.defs#modEventEmail',
150
152
  'lex:com.atproto.admin.defs#modEventResolveAppeal',
151
153
  ],
152
154
  },
@@ -1450,6 +1452,16 @@ export const schemaDict = {
1450
1452
  description:
1451
1453
  'Sort direction for the events. Defaults to descending order of created at timestamp.',
1452
1454
  },
1455
+ createdAfter: {
1456
+ type: 'string',
1457
+ format: 'datetime',
1458
+ description: 'Retrieve events created after a given timestamp',
1459
+ },
1460
+ createdBefore: {
1461
+ type: 'string',
1462
+ format: 'datetime',
1463
+ description: 'Retrieve events created before a given timestamp',
1464
+ },
1453
1465
  subject: {
1454
1466
  type: 'string',
1455
1467
  format: 'uri',
@@ -1466,6 +1478,37 @@ export const schemaDict = {
1466
1478
  maximum: 100,
1467
1479
  default: 50,
1468
1480
  },
1481
+ hasComment: {
1482
+ type: 'boolean',
1483
+ description: 'If true, only events with comments are returned',
1484
+ },
1485
+ comment: {
1486
+ type: 'string',
1487
+ description:
1488
+ 'If specified, only events with comments containing the keyword are returned',
1489
+ },
1490
+ addedLabels: {
1491
+ type: 'array',
1492
+ items: {
1493
+ type: 'string',
1494
+ },
1495
+ description:
1496
+ 'If specified, only events where all of these labels were added are returned',
1497
+ },
1498
+ removedLabels: {
1499
+ type: 'array',
1500
+ items: {
1501
+ type: 'string',
1502
+ },
1503
+ description:
1504
+ 'If specified, only events where all of these labels were removed are returned',
1505
+ },
1506
+ reportTypes: {
1507
+ type: 'array',
1508
+ items: {
1509
+ type: 'string',
1510
+ },
1511
+ },
1469
1512
  cursor: {
1470
1513
  type: 'string',
1471
1514
  },
@@ -8100,55 +8143,6 @@ export const schemaDict = {
8100
8143
  },
8101
8144
  },
8102
8145
  },
8103
- AppBskyUnspeccedGetTimelineSkeleton: {
8104
- lexicon: 1,
8105
- id: 'app.bsky.unspecced.getTimelineSkeleton',
8106
- defs: {
8107
- main: {
8108
- type: 'query',
8109
- description:
8110
- 'DEPRECATED: a skeleton of a timeline. Unspecced and will be unavailable soon.',
8111
- parameters: {
8112
- type: 'params',
8113
- properties: {
8114
- limit: {
8115
- type: 'integer',
8116
- minimum: 1,
8117
- maximum: 100,
8118
- default: 50,
8119
- },
8120
- cursor: {
8121
- type: 'string',
8122
- },
8123
- },
8124
- },
8125
- output: {
8126
- encoding: 'application/json',
8127
- schema: {
8128
- type: 'object',
8129
- required: ['feed'],
8130
- properties: {
8131
- cursor: {
8132
- type: 'string',
8133
- },
8134
- feed: {
8135
- type: 'array',
8136
- items: {
8137
- type: 'ref',
8138
- ref: 'lex:app.bsky.feed.defs#skeletonFeedPost',
8139
- },
8140
- },
8141
- },
8142
- },
8143
- },
8144
- errors: [
8145
- {
8146
- name: 'UnknownFeed',
8147
- },
8148
- ],
8149
- },
8150
- },
8151
- },
8152
8146
  AppBskyUnspeccedSearchActorsSkeleton: {
8153
8147
  lexicon: 1,
8154
8148
  id: 'app.bsky.unspecced.searchActorsSkeleton',
@@ -8438,7 +8432,6 @@ export const ids = {
8438
8432
  'app.bsky.unspecced.getPopularFeedGenerators',
8439
8433
  AppBskyUnspeccedGetTaggedSuggestions:
8440
8434
  'app.bsky.unspecced.getTaggedSuggestions',
8441
- AppBskyUnspeccedGetTimelineSkeleton: 'app.bsky.unspecced.getTimelineSkeleton',
8442
8435
  AppBskyUnspeccedSearchActorsSkeleton:
8443
8436
  'app.bsky.unspecced.searchActorsSkeleton',
8444
8437
  AppBskyUnspeccedSearchPostsSkeleton: 'app.bsky.unspecced.searchPostsSkeleton',
@@ -40,6 +40,7 @@ export interface ModEventView {
40
40
  | ModEventEscalate
41
41
  | ModEventMute
42
42
  | ModEventEmail
43
+ | ModEventResolveAppeal
43
44
  | { $type: string; [k: string]: unknown }
44
45
  subject:
45
46
  | RepoRef
@@ -76,6 +77,7 @@ export interface ModEventViewDetail {
76
77
  | ModEventAcknowledge
77
78
  | ModEventEscalate
78
79
  | ModEventMute
80
+ | ModEventEmail
79
81
  | ModEventResolveAppeal
80
82
  | { $type: string; [k: string]: unknown }
81
83
  subject:
@@ -15,10 +15,23 @@ export interface QueryParams {
15
15
  createdBy?: string
16
16
  /** Sort direction for the events. Defaults to descending order of created at timestamp. */
17
17
  sortDirection: 'asc' | 'desc'
18
+ /** Retrieve events created after a given timestamp */
19
+ createdAfter?: string
20
+ /** Retrieve events created before a given timestamp */
21
+ createdBefore?: string
18
22
  subject?: string
19
23
  /** If true, events on all record types (posts, lists, profile etc.) owned by the did are returned */
20
24
  includeAllUserRecords: boolean
21
25
  limit: number
26
+ /** If true, only events with comments are returned */
27
+ hasComment?: boolean
28
+ /** If specified, only events with comments containing the keyword are returned */
29
+ comment?: string
30
+ /** If specified, only events where all of these labels were added are returned */
31
+ addedLabels?: string[]
32
+ /** If specified, only events where all of these labels were removed are returned */
33
+ removedLabels?: string[]
34
+ reportTypes?: string[]
22
35
  cursor?: string
23
36
  }
24
37